pixelbook 2017下使用LXC(LXD)安装自编译openwrt镜像进行科学上网


之前在pixelbook 2017上安装了v2ray实现科学上网,现在服务器端已经换xray了,pixelbook上当然也要重新设置,手动配置config文件始终比较麻烦,如果能在pixelbook上运行openwrt,配置起来就方便多了。

pixelbook 2017的LINUX子系统(Crostini)其实是首先通过虚拟机运行termina虚拟机,然后再在termina中用LXC(其实是提供了独立lxc命令的LXD)运行debian容器。既然是完整的LXC,那当然LXC的各种玩法都可以用,也可以安装其他的一些LINUX容器,比如openwrt。

不过如果需要安装自己编译的openwrt镜像,方法稍微有点复杂,有一些坑,在此记录一下。

首先需要准备好LXD可以使用的openwrt镜像,通过lxd-openwrt-simplified把自己编译的openwrt的rootfs.tar.gz文件转换为LXD需要的格式并添加metadata文件:

./build_cust.sh openwrt-x86-64-generic-rootfs.tar.gz lxd

但是这样还不行,后面LXC导入的时候发现会提示压缩包中找不到metadata.yaml文件,具体原因不明。不过公共的镜像源使用的都是xz压缩格式,可能问题就在这里。

把转换好的文件解压:

tar -zxf openwrt-x86-64-generic-x86_64-lxd.tar.gz

然后重新压缩为xz格式:

tar jcf openwrt.tar.xz *

这样之后就可以正常导入了。

其次需要解决的是如何把自己编译的openwrt镜像上传到termina虚拟机中,然后用LXC导入镜像。但是termina虚拟机中的文件系统在pixelbook上无法直接访问,好在LXD的lxc image import命令提供了通过URL(必须https)来导入镜像的方法,所以可以自建服务器,把openwrt镜像放到服务器上。

LXD要求import的URL要返回LXD-Image-URL和LXD-Image-Hash两个HEADER,可以通过修改服务器的nginx配置来添加。

在自己的服务器上新建了一个lxc.****.com的子域名,然后编辑nginx配置,添加SSL证书以支持https,并用add_header添加LXD-Image-URL和LXD-Image-Hash两个HEADER。其中LXD-Image-URL的值就是openwrt镜像的链接(这个可以用http),LXD-Image-Hash则是openwrt镜像的SHA256。

这样用浏览器访问lxc.****.com,就可以看到这两个HEADER:

准备完成,现在开始在pixelbook上操作。使用CTRL+ALT+T打开crosh命令行。然后用vmc start termina命令进入termina虚拟机。使用这个命令导入openwrt镜像:

lxc image import https://lxc.****.com  --alias my-openwrt-image --public

这时使用lxc image list命令,就可以看到已经导入了该openwrt镜像:

(termina) [email protected] ~ $ lxc image list
+------------------+--------------+--------+----------------------------------+--------+---------+------------------------------+
|      ALIAS       | FINGERPRINT  | PUBLIC |           DESCRIPTION            |  ARCH  |  SIZE   |         UPLOAD DATE          |
+------------------+--------------+--------+----------------------------------+--------+---------+------------------------------+
| my-openwrt-image | 042b0a03b628 | yes    | OpenWrt SNAPSHOT r3146-8db35e67f | x86_64 | 65.81MB | Apr 10, 2021 at 7:56am (UTC) |
+------------------+--------------+--------+----------------------------------+--------+---------+------------------------------+

然后使用以下命令使用my-openwrt-image镜像创建新容器:

lxc launch my-openwrt-image OpenWrt

这时使用lxc list就可以看到已创建的openwrt容器,以及该镜像的IP:

(termina) [email protected] ~ $ lxc list
 +---------+---------+-------------------------+-------------------------------------------------+------------+-----------+
 |  NAME   |  STATE  |          IPV4           |                      IPV6                       |    TYPE    | SNAPSHOTS |
 +---------+---------+-------------------------+-------------------------------------------------+------------+-----------+
 | OpenWrt | RUNNING | 100.115.92.200 (br-lan) | 2408:8207:78ba:4950:216:3eff:fe5c:92f6 (br-lan) | PERSISTENT | 0         |
 +---------+---------+-------------------------+-------------------------------------------------+------------+-----------+
 | penguin | RUNNING | 100.115.92.196 (eth0)   | fd64:1435:592a:0:216:3eff:fe04:1e94 (eth0)      | PERSISTENT | 2         |
 |         |         |                         | 2408:8207:78ba:4950:216:3eff:fe04:1e94 (eth0)   |            |           |
 +---------+---------+-------------------------+-------------------------------------------------+------------+-----------+

用Pixelbook的浏览器打开100.115.92.200,就可以打开openwrt的luci界面了。但是root账号的密码还需要在命令行中进行修改。使用以下命令进入openwrt容器的命令行:

lxc exec OpenWrt sh

然后用passwd命令修改root账号的密码,修改完成后就可以登录openwrt的后台。

完成一些基本配置后,在SSR+中添加科学上网节点,并在高级设置中打开SOCKS5全局代理服务端。

至此代理服务配置完成!在pixelbook的浏览器的SwitchyOmega插件中设置SOCKS5代理为100.115.92.200:1080,就可以正常科学上网喽!

支持LXC之后,Pixelbook的可玩性真是提升了不少,还可以安装docker,慢慢玩吧。

声明:爱玩咖 – 生命在于折腾|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - pixelbook 2017下使用LXC(LXD)安装自编译openwrt镜像进行科学上网


Carpe Diem and Do what I like