交叉编译 Mozilla NSS 库

最近在做嵌入式平台上的 Chromium 移植工作,由于 Chromium 在 Linux 平台下需要依赖系统的 NSS 库,但是目标平台并没有这个库,只好自己移植一下。

获取最新的 Mozilla NSS 库源码包,这里我们下载 NSS NSPR 二合一包:

由于 NSS 依赖 NSPR,我们需要首先编译 NSPR 库:

由于 NSS 库的编译脚本默认使用 GYP 编译,需要先配置一下环境:

先修改一下 coreconf/shlibsign.py 这个脚本,将下面一行注释,不然报错:

然后就可以开始编译 NSS 库了:

注:nss-3.43/dist 为编译 out 目录,编译完后 include/lib 都在里面了。

搭建 WireGuard VPN

WireGuardason A. Donenfeld 开发的一款点对点 VPN 协议,非常先进并且开源。在老司机的强烈推荐下,忍不住折腾了一番。本文旨在整理折腾记录并存档。

注:笔者的用的服务器是 GCE 上的 VM 实例,采用 Debian 9 发行版。其他发行版的安装过程可以参考 WireGuard Installstion

安装 WireGuard

首先需要安装当前 Linux 内核对应的 linux_headers:

由于 WireGuard 比较新,尚在 Debian 不稳定版的源里,需要手动导入:

WireGuard 服务端配置

开启 IPV4 流量转发:

创建 WireGuard 配置文件夹,并生成服务端和客户端密钥对:

我们还需要使用 ifconfig 命令获取服务器的网卡名称并记录下来,下面以 eth0 为例。

生成服务器配置文件 /etc/wireguard/wg0.conf

这样服务端就算配置完成,可以启动 WireGuard了,使用方法如下:

设置 wireguard 开机自启:

WireGuard 客户端配置

客户端也同样需要安装 WireGuard,例如笔者所使用的 ArchLinux 上安装步骤如下:

在配置服务端时,我们在服务器上分别创建了服务端和客户端的密钥对,这样也便于我们生成客户端的配置文件:

生成后的客户端文件在服务器上,我们可以将其拷贝到 PC 客户端,或者通过生成二维码的方式导到移动客户端:

这样使用手机客户端直接扫描生成二维码就可以快速完成配置。

多个 WireGuard 客户端

由于同一个客户端配置只能同时用于一台设备连接,所以如果需要同时使用多个客户端的话,可以建立多个客户端配置。

停止服务端的 WireGuard:

生成新的客户端密钥对:

在服务端配置文件中加入新的客户端公钥,并重新定义一段 AllowedIPs:

新建一个客户端文件,使用新客户端密钥的私钥:

注意这里的 Address 与上面服务端新加的 AllowedIPs 保持一致,Endpoint 和之前的一样,为服务端的 IP 和 ListenPort。

搞好服务端和新增客户端的配置后,再重新启动服务端的 WireGuard:

导出客户端配置文件方式依然可以采用上面介绍的方法导入到客户端。如果还需要添加新的 Peer,再次使用同样的方法操作即可。

经过实测,WireGuard 比笔者在另一台相同配置的 VM 实例上搭建的 V2Ray 结合 BBR 加速还要快,体验非常棒。

参考教程

在 apache 上部署 python 项目

最近在用 python 搞微信公众号开发,由于公众平台强制要服务器 80 端口,手头又没有空闲的资源,于是想到通过现有的 apache 来跑 python 程序。通过检索找到了 mod_wsgi 这样一个 apache 扩展模块,恰好能满足需求。

简单科普一下:WSGI(Web Server Gateway Interface)是专为 Python 定义的 Web 服务器和 Web 应用程序或框架之间的一种简单而通用的接口。mod_wsgi 实现了 WSGI 标准,可以支持任何兼容该标准的 Python 应用。

一、安装 apache 开发包

首先需要安装 apache 开发包,因为 mod_wsgi 的安装需要依赖模块编译工具 apxs。

修改 /etc/httpd/conf/httpd.conf 中 servername 等配置项,使得 http://{server-ip}:{port} 能够正常访问。

二、升级 python 版本

CentOS 6 上的 Python 版本是 2.6.6,太过于老旧,很多新的模块无法使用。因此,我们需要拉源码包编译安装最新的 2.7 版本。

这里有一个坑:pip 需要依赖 Python 的 zlib 及 openssl 相关模块,而这些模块的编译以来于系统的相应开发库。因此必须先安装 zlib 和 openssl 开发库,然后再编译安装 Python,否则这些 python 模块不会参与编译。

安装后,将原有 python 替换为新版本:

执行 python -v,检测是否为新版本。如果报错:

则需要将 python2.7 的运行库路径加速动态装载器的搜寻路径:

然后通过 ldconfig 更新共享库的缓存即可:

注意:由于 yum 依赖于 python,我们需要让其使用 python2.6 版本,不然会报错。

三、安装 mod_wsgi 模块

这个 python 的模块需要通过 pip 安装,因此需要先升级 pip。通过一行命令搞定:

与上面 python 的安装相似,我们需要让其成为系统默认的版本:

然后通过 pip 安装 mod_wsgi 和 web.py:

apache 中加载 wsgi 模块,在 /etc/httpd/conf/httpd.conf 中一堆的 module 后加入:

四、部署 python 程序

在 /etc/httpd/conf/httpd.conf 中加入下面配置:

其中,wx 为 web 程序目录。main.py 的代码为:

测试 http://{server-ip}:{port}/wx/ 访问正常,说明配置 ok。