博客迁移工作


原本博客是挂在AwardSpace下的, 最初用的是免费套餐, 去年这个时候Basic促销只要$3一年就顺手入了.
现在Basic到期了, 续费的价格就比较感人了, 一年得$60.

正好一直都想入手一个VPS玩, 最近又查了一下发现了Bandwagonhost这家服务提供商, 最低级的套餐一年只要$19.
虽然只是单核, 256M RAM, 10G SSD和500G月流量, 但是像我这种日PV不会上10, 月PV不会上100的个人站点就随意了.
至于为什么不用Hexo这样的静态博客的话, 是因为想用PHP写点自己用的小服务什么的.
而且上了VPS的话, 那么SS的钱就可以省下来了, 而且也可以搭个VPN, 怎么看都觉得很棒.

怎么买这种事情就不说了, 可以银联, 支付宝和信用卡付款, 长时间有着5%off的优惠, 自己找找优惠码就好了.
有一点值得注意的是, 除了上述的通用套餐外, 还有为中国特别优化过链路的和性能配置好很多的另外两个套餐.
但是, 他们不能换机房, 也就是不能换ip. 万一以后被GFW吃了, 就GG. 以防万一, 还是入手了这个.

性能的话, 据说这家VPS是有很大的超售的.
SSH登录上去的感觉就是卡卡卡卡卡卡卡卡. 但是毕竟这么便宜, 要求也就不要太高了.
虽然SSH上去卡, 但是性能什么的感觉其实还行. 编译各种乱七八糟的组件也还挺快.
CPU是E3v5, 最大睿频4G. SSD RAID10的读写能够有900M/s左右.
网络速度, 我这边ping差不多是160+ms. 下载速度, 会从900+K/s慢慢涨到2M/s.
总而言之, 就是凑合用还是能行的, 要求别太高了. 毕竟便宜.

我用的博客系统是Typecho, 相比WordPress还是快不少, 原生支持MarkDown, 虽然不是太完美.
迁移主要分为两个部分, 一是从数据库导出数据. 另外一部分是下载文件.
数据库导出数据直接使用PHPMyAdmin就好了. 下载文件用FileZilla下载.
下载文件的时候就能够感受出来, 原来的主机商比新的VPS慢= =
毕竟欧洲还是没有美国西海岸近, 从网络拓扑上来说.

需要注意的就是, 修改config.inc.php里的数据库配置文件.
我在VPS安装的服务器是LNMP-1.3, 提供了很方便的脚本.
Nginx据说比Apache省内存, 适合像我这种内存比较紧张的情况.
对于Typecho而言, 默认安装, 在进管理员界面的时候会404.
需要修改/usr/local/nginx/conf/vhost下的站点配置文件
将include enable-php.conf -> include enable-php-pathinfo.conf
然后重启lnmp就可以了.

我在迁移中遇到的另外一个问题是, 数据库导入option表以后, HTTP 500内部服务器错误.
如果全新安装的话就不会有, 是正常的.
因为自己的文章不多, 外带想删掉以前的一些东西.
就干脆不要原来的数据了, 直接全新配置一遍.
以前的文章数据直接从导出的数据库文件里复制就好了.
只要把rn变成换行, 那么就和你在后台输入的内容是一致的.[Markdown大法好

顺带还尝试配置了一下IPSec Over L2TP, 但是好像内核并不支持IPSec...暂时就不折腾了吧


如何在Terminal中使用Sock5代理


大部分终端应用, 比如wget, curl都支持http_proxy, https_proxy变量配置HTTP代理.
然而常见的SS使用的则是SOCKS代理, 可以使用privoxy做SOCK->HTTP的转换.
但是相对而言privoxy比较重量级, 因此可以采用polipo做转换.

Mac OSX下可以使用brew安装:

brew install polipo

然后添加代理:

vi /usr/local/opt/polipo/homebrew.mxcl.polipo.plist

在array标签之间添加socksParentProxy选项:

<array>
        <string>/usr/local/opt/polipo/bin/polipo</string>
        <string>socksParentProxy=localhost:1080</string>
</array>

测试并启用代理

#!/bin/sh

export http_proxy=""
export https_proxy=""
curl ip.gs
launchctl unload /usr/local/opt/polipo/homebrew.mxcl.polipo.plist &> /dev/null
launchctl load /usr/local/opt/polipo/homebrew.mxcl.polipo.plist
ping -c 3 127.0.0.1 &> /dev/null
export http_proxy="localhost:8123"
export https_proxy="localhost:8123"
curl ip.gs

保存上述内容到http_proxy.sh文件, 需要代理时source文件既可.

source http_proxy.sh

Parallels Tools 11.0.0.3193 在Linux Kernel 4.2以上内核的修复


主要是参考这篇文章: http://journal.dedasys.com/2015/10/26/parallels-with-ubuntu-15-10/

首先你需要把kmods文件夹的压缩包用tar xvf prl_mod.tar.gz解包.
下面说一下需要修改的两个文件:
第一个文件是kmods/prl_tg/Toolgate/Guest/Linux/prl_tg/prltg.c
增加一个头文件的引用

#include "linux/vmalloc.h"

第二个文件是kmods/prl_fs/SharedFolders/Guest/Linux/prl_fs/inode.c在

-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,13)
 #define compat_follow_link_t void*
 #else
 #define compat_follow_link_t int
 #endif

前新增

+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,2,0)
+#define compat_follow_link_t const char*
+#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,13)

并删除

-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,13)

然后还需要将prlfs_follow_link这个函数做修改:
在函数前新增

+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,2,0)
+static compat_follow_link_t prlfs_follow_link(struct dentry *dentry,
+ void **cookie)
+{
+ return *cookie = do_read_symlink(dentry);
+}
+#else

并在函数的结束点新增

+#endif

完成后使用tar czf打包回去就可以完成安装了.


利用crontabs的延时重试脚本


主要是有可能早上的时候电已经来了, 但是网络中心那边却还没有开放网络认证的许可, 导致路由器开机的时候认证失败.
同时由于路由新开机, 时间还未与网络同步所以单纯的设置crontabs并不能起到作用.
而且由于我希望自己可以在教学区域愉快地顶掉宿舍里路由器的认证, 所以也并不能启用mentohust本身超时重认证机制.
所以采取了开机后如果发现网络无法认证, 则读取当前系统时间再加一延时添加进crontabs的方法实现等待再认证.

#!/bin/sh

DELAY=30
STAR=$(echo \\*)
#MINUTES=$(date | awk \'{print $4}\' | sed \'s/\\([0-9]\\+\\):\\([0-9]\\+\\):\\([0-9]\\+\\)/\\2/\')
#HOURS=$(date | awk \'{print $4}\' | sed \'s/\\([0-9]\\+\\):\\([0-9]\\+\\):\\([0-9]\\+\\)/\\1/\')
MINUTES=$(date +\'%M\')
HOURS=$(date +\'%H\')
MINUTES=$(expr $MINUTES + $DELAY)
HOURS=$(expr $HOURS + 0)

if [ "$MINUTES" -gt 60 ]; then
    MINUTES=$(expr $MINUTES - 60)
    HOURS=$(expr $HOURS + 1)
fi

CMD="$MINUTES $HOURS $STAR $STAR $STAR /etc/init.d/mentohust_d >> /tmp/mentohust_d.log"
sed \'$d\' /etc/crontabs/root > /etc/crontabs/root.tmp
cp /etc/crontabs/root.tmp /etc/crontabs/root
rm /etc/crontabs/root.tmp
echo "$CMD" >> /etc/crontabs/root