ABB(Ahui Blog Build)断断续续自己一个人在用着, 基本上没太大问题. 为方便生成另外的站点,做了些调整.

  • config.py 中设置新站点参数,模板调整为通用,从 config中取得站点信息.
  • 生成的 html 文件名,全部用小写.
  • 模板加入 goto.html 文件,用于跳转以前的老旧页面到首页.
  • 模板中加入网站统计变量,统计代码可在 config.py 中设置.
  • 生成整站时,输出相关信息.
  • github 地址为 https://github.com/ahui/abb

其中 goto.html 主要用于自己博客. 因为最早用 wordpress, 后来的 abb 又生成过大小写敏感的 html,导致搜索过来的页面地址有差异. 而生成整站静态 html 时,为了能本地查看,均使用了相对地址, 这样 nginx 的 try_file 重定向的首页,会导致 css,js 无法正常取得,最简便的方法是定向到 goto.html,然后用 JS 重定向到首页.

另外 duosuo 评论,偶尔会导致加载时间达10秒,暂时在模板中去除.

ABB 程序与 GITHUB 同步.

最近一次生成信息: ./abb.py build 总共生成 68 篇文章. 总共花费时间: 0.098921 秒.

生成性能大约为每秒700篇文章,硬件为 RMBP 15, CPU i7.

ssh 登录阿里云远VPS,提示

ssh_exchange_identification: read: Connection reset by peer

几月前出过一次同样问题, 表现在开发机无法登录阿里云 VPS,但可以正常登录HK VPS,而且 HK VPS 也可以正常登录阿里云VPS. 检查下来是阿里云机房误判攻击并阻断了我当前在用的移动IP(移动出网 ip 会被 nat 到一组特定 ip 上),提交工单后才解决.

这次再用 HK VPS 检查,发现也无法登录,应该不是原来的老问题. 本机详细登录日志:

#ssh ahui$ ssh -vvv -l root serverip
OpenSSH_6.2p2, OSSLShim 0.9.8r 8 Dec 2011
debug1: Reading configuration data /etc/ssh_config
debug1: /etc/ssh_config line 20: Applying options for *
debug1: /etc/ssh_config line 102: Applying options for *
debug2: ssh_connect: needpriv 0
debug1: Connecting to serverip [serverip] port 22.
debug1: Connection established.
debug3: Incorrect RSA1 identifier
debug3: Could not load "/Users/ahui/.ssh/id_rsa" as a RSA1 public key
debug1: identity file /Users/ahui/.ssh/id_rsa type 1
debug1: identity file /Users/ahui/.ssh/id_rsa-cert type -1
debug1: identity file /Users/ahui/.ssh/id_dsa type -1
debug1: identity file /Users/ahui/.ssh/id_dsa-cert type -1
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_6.2
ssh_exchange_identification: read: Connection reset by peer

本机改过 hostname,rsa 没做更改, 同样的 rsa 能登录 HK VPS,应该和证书没关系.

阿里终端连接进去,发现 ssh localhost 居然也无法正常登录,问题应该在 sshd 服务本身.

想到服务器几周前做过一次 apt-get upgrade, 应该是更新导致 sshd 出了问题. 重启 sshd, 问题依旧.

google 结果大部分说是 hosts.allow 的问题,加入 sshd:ALL 后,问题依旧.

最后查看 sshd log:

May  4 17:05:15 AY1407211542405399a6Z sshd[17586]: fatal: Missing privilege separation directory: /var/run/sshd

发现/var 下 run 目录不存在.

cd /var
mkdir run
cd run
mkdir sshd

重启 sshd,问题解决.

问题可能出在 apt-get upgrade 后,服务器没重新启动导致问题出现. 或者本次 upgrade有 bug,重启也不能解决. 没证实. 记录下,系统为:

uname -a
Linux AY1407211542405399a6Z 3.13.0-32-generic #57-Ubuntu SMP Tue Jul 15 03:51:08 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
cat /etc/issue
Ubuntu 14.04.2 LTS \n \l

n2n 是点对点类型的 vpn, 轻量级,容易安装与配置.

官方网站在这里

在安装使用中,还是碰到几个小坑,记录下来. 另外其版本有 v1,v2二个,这里都使用 v2版本. 其用法二个版本都一样,但不同版本通信协议不兼容, 所以所有节点都要使用相同的版本.

#使用场景

边缘节点有三个

  • zte h610b 路由器,安装 tomato, 无公网 ip
  • RMBP 工作用电脑,安装 mac os, 内部 ip
  • hk vps 一台,安装 ubuntu,有 固定公网 ip,地址为 a.b.c.d

超级节点一个,也就是上面有 ip 的 vps.

#安装记录

##hk vps ubuntu 上安装最简单. 但 apt-get install n2n 是 v1的版本.我这里要用 v2,自己编译下.

sudo apt-get install subversion build-essential libssl-dev
svn co https://svn.ntop.org/svn/ntop/trunk/n2n
cd n2n/n2n_v2
make

然后就能生成需要的二个文件,超级节点守护程序supernode及边缘节点通信程序edge. 安装libssl-dev 有时候会进坑,报错说已经安装的 ssl 版本太新. 修复方式是在/etc/apt 源里,添加对应的 updates 源,更新后再安装. 如:

deb http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted

首先启动超级节点,监听端口999

sudo ./supernode -l 999

然后本机也做为边缘节点启动

sudo ./edge -d n2n0 -a 10.1.1.10 -c ahuin2nvpn -u nobody -g nobody -k ahuin2nvpn -l a.b.c.d:999 -m ae:e0:4f:e7:47:1a

其中一个小坑就是 -m 参数. 如果不指定,会产生一个随机 mac 地址,这样至少调试的时候多次运行,会出现 mac 混乱. 但指定的 mac 地址,有些不会识别,比如随便写个 ab:ab:ab:ab:ab:ab, 程序不会识别并自动产生一个新的随机 mac. 跳坑方法是找个真实的 mac 地址,然后改动最后二位.

##zte h610b 路由器

这个真的没有真 ip,用的移动光纤,给了个看上去象真的,其实是假的 ip.

tomato 有人做好了现成的版本, 打开 jffs 并挂载,然后把编译好的 n2n 放在/jffs/n2n 中. 备注:我用的地址1上的版本.

下载地址1 以及 下载地址2

加载一下 tun 设备

	
modprobe tun
	

运行很简单

./edge -d n2n0 -a 10.1.1.20 -c ahuin2nvpn -u nobody -g nobody -k ahuin2nvpn -l a.b.c.d:999 -m ae:e0:4f:e7:47:2a

运行后,ping 10.1.1.10能通,反之不行.

设置 iptables

iptables -I OUTPUT -o n2n0 -j ACCEPT
iptables -I INPUT -i n2n0 -j ACCEPT
iptables -I FORWARD -o n2n0 -j ACCEPT
iptables -I FORWARD -i n2n0 -j ACCEPT

ok,现在能与10.1.1.10互相 ping 通. 此时二台机器可以认为在同一个局域网.

##RMBP 工作用电脑

mac 上坑最多. 前提之一开发环境已经就绪,git svn 都 ok. 我这里用 git

首先安装 tuntap, 在这里下载

下载源代码并编译:

git clone git://github.com/certik/n2n.git
cd n2n/n2n_v1
make

出错啦,编译失败. 有好人做了补丁, 打完后再 make, 通过.

或者手动修改, 删除void tun_close(tuntap_dev *device); 这行,并将tun_close(device);替换为tuntap_close(device);,改动这二处就 ok.

mac 下会自动生成 tun 设备 tap0, 所以运行时不用指定-d 参数:

./edge -a 10.1.1.30 -c ahuin2nvpn -u nobody -g nobody -k ahuin2nvpn -l a.b.c.d:999 -m ae:e0:4f:e7:47:3a

大功告成,现在10.1.1.10, 10.1.1.20, 10.1.1.30三个节点都能互相 ping 通, 并互相访问所有端口,就象在同一个局域网里面.

#问题

理论上超级节点并不参与数据转发, 不过我测试的时候,ping 包至少是转发了的, 估计是与边缘结点没有公共 ip 有关. 其他流量没测试.

n2n 是点对点的, 如果想要把边缘结点后面的局域网也连起来, 应该能 通过在节点上通过手动指定路由并做 nat来实现, 当然这样配置起来就麻烦多了.

n2n 的最佳应用,应该是通过外网访问内网,特别是内网没有公共 ip 的时候,比如移动光纤...

要通过 n2n 访问一些不存在的网站,要做额外工作,可能 openvpn 更适合.

可以用下列方式联系我, 但不保证有回复...

Email: ahui at ahui.us

owncloud mac ox client 安装后,首次设置以及运行后的设置界面, 中文显示为方框. 最简单的解决方法删除自带的翻译文件,强制使用英文显示.

进入

/Volumes/Macintosh HD/Applications/owncloud.app/Contents/Resources/Translations

删除或改名这二个文件:

  • mirall_zh_CN.qm
  • qt_zh_CN.qm

然后退出owncloud,再运行就是英文界面了.

windows 下应该类似, 但没验证.

hackpad.com编辑时,基本可以看做是在写md,而且是即时生成html效果(非分屏),手感相当好,特别是表格和代码块。

不过在导出md格式时,文章标题不能有中文,否则这篇文章无法导出。

根据导出的md文件来着,文章标题实际上是第一级标题#,这也是一个小坑,这样hackpad里只能有一个#并且被文章标题占用,文章内容最高级标题只能是第二级标题##.

R6300v2上安装opkg,opkg再安装python,然后运行python版本的shadowsocks成功.不过加密方式只能用table,无法正常访问google的相关服务.

一时没搞定python的m2crypto,无法启用其他加密方式,于是直接编译shadowsocks-libev, ss-local采用命令行方式指定参数运行成功,采用aes-256-cfb加密方式,google相关网站访问正常.

移步下载 shadowsocks-libev on R6300v2

Arm7系cpu应该通用,但未测试.

ABB(Ahui Blog Build)生成的静态html文件,可以用git比较方便的同步到VPS Server上。

首先Server和Client二边都安装好git.

VPS Server上做如下设定后,就不用管了:

创建git仓库目录为www.git,要安全起见,可以换用个普通用户帐号,并修改相应目录及权限。

cd /root/tmp
mkdir www.git
cd www.git
git --bare init

建立www根目录,并配置nginx指向。

mkdir /home/wwwstatic/public

建立git hook,在Client push文件后,自动checkout到指定的www根目录

cat > hooks/post-receive
#!/bin/bash
GIT_WORK_TREE=/home/wwwstatic/public git checkout -f

加上可执行属性

chmod +x post-receive

Server端设置完毕。

Client端如果还没有ssh key,则用

ssh-keygen -t rsa -C "your_email@example.com"

生成key,然后将~/.ssh/id_rsa.pub中的内容复制到Server端的 /root/.ssh/authorized_keys中。

然后进入静态html生成目录,做一次初始化。

cd public
git init
git remote add ahuius root@ahui.us:/root/tmp/www.git

设定完毕。

这样每次用abb bulid整个站点后,执行下sync.sh就可以将新生成的html文件同步到vps的www根目录了。

cat sync.sh

#!/bin/bash
cd public
git add .
git commit -m "ok"
git push -f ahuius master

这篇Blog是完成设定后第一篇被同步的文章.

./sync.sh
[master 97bc2d2] ok
 84 files changed, 1000 insertions(+), 671 deletions(-)
 create mode 100644 post/yong_git_tong_bu_jing_tai_wang_zhan.html
Counting objects: 174, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (88/88), done.
Writing objects: 100% (88/88), 21.61 KiB, done.
Total 88 (delta 84), reused 0 (delta 0)
To root@ahui.us:/root/tmp/www.git
   7167c21..97bc2d2  master -> master