前文 中, 我在腾讯云上安装了 Gentoo 系统,虽然也给它搭建了一些基础服务,但这对服务器的开销是非常小的。 为了突显服务器更多的存在价值,也为了压榨服务器的每一点资源,我打算将个人笔记本上系统的日常更新过程挪到服务器上 —— 实现云中编译 Gentoo 软件包。
至于如何实现远程编译软件,然后安装到本地呢? 这就得靠 distcc 这个工具了,好在 Gentoo portage 也集成了这个软件。 [1]
首先需要在本地和远程都安装 distcc 软件:
$ sudo emerge -av distcc
本地和远端之间的通信有两种方式:
通过 tcp socket:好处是 network io 相对比较快,坏处是通信过程全部明文,在公网环境不太安全,不过可以通过配合 wireguard 解决。
通过 ssh:好处是通信过程全部加密,坏处是每次通信都需要建立 ssh 连接,开销比较大,导致 network io 比较慢。
通过 tcp socket
此方法需要在远端启动 distcc daemon:
$ sudo vim /etc/conf.d/distccd DISTCCD_OPTS="${DISTCCD_OPTS} --listen <address> --port <port>" $ sudo rc-service distccd start
在本地配置 distcc slaver 地址:
$ sudo vim /etc/distcc/hosts <address>:<port>
同时配置 Gentoo portage 启用 distcc:
$ sudo vim /etc/portage/make.conf MAKEOPTS="-j1 -l0" FEATURES="distcc -network-sandbox"
通过 ssh
这种方式需要提前配置 ssh 的连接方式,且为了避免繁琐地输入登录密码,所以推荐使用 ssh key 的方式登录远端。 另外,由于 portage 用户的家目录在 /var/lib/portage/home ,所以 ssh 客户端的配置文件都写入在该目录下。
在本地配置 distcc slaver 地址:
$ sudo vim /etc/distcc/hosts <ssh host>
同时配置 Gentoo portage 启用 distcc,并使用 ssh 通信:
$ sudo vim /etc/portage/make.conf DISTCC_SSH="ssh" MAKEOPTS="-j1 -l0" FEATURES="distcc -network-sandbox"
DEBUG
如果在调试的过程中遇到问题,可以通过如下方式在开启 distcc 的 DEBUG 模式:
$ sudo vim /etc/portage/bashrc export DISTCC_VERBOSE=1 export DISTCC_SAVE_TEMPS=1 export DISTCC_FALLBACK=0
Thanks for reading :)