基本搞定 FreeBSD 下面的 GoAgent 和 QQ 问题

前几天又把 FreeBSD 装回来了,由于我个人比较苛求,装了两次。

第一次我用的方案是:两块大小不同的硬盘,一块 750GB,一块 500GB。750GB 那块硬盘划 500GB 出来,和另一块硬盘组成 ZFS 的 mirror pool,余下 250GB 用作 ZFS 的 root pool 和 swap。虽然安装和运行都没问题,但是需要做好几个目录的软链接,尤其还涉及到了 /usr 这种重要目录。于是干脆重装,单独使用 500GB 那块盘做一个 ZFS 的 single pool。本来想介绍下两块大小不同的硬盘做 mirror 和 root pool 的方法的,不过感觉弊大于利,所以作罢。

按照以往,安装完成之后,QQ 问题通常用 net-im/qq 这个 Linux 版的 QQ 解决。但是这次却发现总是登录失败,用其他号码却正常。猜测是因为我的主号开了第二代密保,在 Linux QQ 这种不再维护的客户端上无法通过验证。于是问题就来了,Firefox+webQQ 常常收不到消息,Chromium 又依赖 ports 里面 3.2 版本的 llvm 和 clang(系统自带的是 3.3),唯一的解决方法似乎只剩下虚拟机或 lwqq 或 wine。

首先想到的是 lwqq,结果 configure 时候找不到我系统自带的 zlib,即使把 pkg_check zlib 那一行注释掉,也会编译失败。最终只好考虑 wine。可惜的是,FreeBSD 的 ports 里面没有 for amd64 的 wine,必须要有 i386 环境才能编译。目前只能使用别人做好的 pkg,方法如下:

# mkdir -p /usr/local/etc/pkg/repos
# fetch -o /usr/local/etc/pkg/repos http://people.freebsd.org/~dbn/repos/wine.conf
# fetch -o /usr/local/etc/pkg/repos http://people.freebsd.org/~dbn/repos/wine.cert
# pkg update
# pkg install -r wine i386-wine

当然,仅有 wine 还是不够的,一些必要的基础包得安装好:

% wget http://winetricks.org/winetricks
% chmod +x winetricks
% ./winetricks riched20 msxml6 ie8 vcrun2008

然后直接 wine 运行 QQ 的安装程序即可。具体使用时发现 QQ2012 版本问题比较多,TM2009 就很稳定,因此最好使用 TM2009。

为了以后升级 wine 方便,最好搭建一个 i386 的 chroot 环境,以便及时编译最新版的 i386-wine(前提是已经安装了 src):

# cd /usr/src
# make buildworld TARGET=i386
# make installworld TARGET=i386 DESTDIR=/compat/i386
# make distribution TARGET=i386 DESTDIR=/compat/i386
# mkdir /compat/i386/usr/ports
# mount -t devfs devfs /compat/i386/dev
# mount -t nullfs /usr/ports /compat/i386/usr/ports

chroot 进 i386 环境以后还需要进行一些额外设置:

# chroot /compat/i386
# setenv MACHINE i386
# setenv UNAME_m i386
# setenv UNAME_p i386
# service ldconfig start

然后就可以开始编译 pkg 了:

# cd /usr/ports/emulators/i386-wine-devel
# make package

编译好的包位于 /compat/i386/usr/ports/packages

GoAgent 的解决就容易得多,先安装好 lang/python33devel/libeventdevel/py-geventsecurity/py-openssl这四个包,之后直接下载解压 GoAgent,用浏览器导入解压目录 local 文件夹下的 CA 证书以及 local/certs 下面的几个网站证书即可。然后自己写个启动器用 python3 启动 local 下面的 proxy.py 。虽然启动程序会提示找不到 py-openssl,不过可以正常用。