如何通过 systemd 服务以分布式方式使 distcc 编译工作?

如何通过 systemd 服务以分布式方式使 distcc 编译工作?

我有两台机器,都运行 Ubuntu 20.04,我试图通过 distcc (版本 3.3.3)以分布式方式编译一些 C++ 代码。

当我在一台机器上手动启动 distcc 守护进程并在另一台机器上编译时,一切似乎都正常。我使用以下命令来启动守护进程:

distccd --no-detach --daemon --allow 192.168.0.0/16 --allow 127.0.0.1 --nice 10 --jobs 8 --zeroconf

我可以看出它正在工作,因为我在启动编译的计算机上的 gnome distcc 监视器中看到作业在服务器和本地主机上成功执行并完成。

另外,当我nmap使用此设置在任一机器上运行(查询服务器)时,我会得到以下输出:

PORT     STATE SERVICE VERSION
3632/tcp open  distccd distccd v1 (unknown compiler)

当我只是将 distcc 作为服务运行而不是手动启动它时,我得到以下输出:

$ sudo service distcc start
$ sudo service distcc status
distcc.service - LSB: simple distributed compiler server
 Loaded: loaded (/etc/init.d/distcc; generated)
 Active: active (running) since Wed 2020-12-16 15:16:03 EST; 22s ago
   Docs: man:systemd-sysv-generator(8)
Process: 9183 ExecStart=/etc/init.d/distcc start (code=exited, status=0/SUCCESS)
  Tasks: 10 (limit: 38405)
 Memory: 3.7M
 CGroup: /system.slice/distcc.service
         ├─9193 /usr/bin/distccd --pid-file=/var/run/distccd.pid --log-file=/var/log/distccd.log --daemon --allow 192.168.0.0/16 --allow 127.0.0.1 --listen 127.0.0.1 --nice 10 --jobs 8 --zeroconf
         ├─9199 /usr/bin/distccd --pid-file=/var/run/distccd.pid --log-file=/var/log/distccd.log --daemon --allow 192.168.0.0/16 --allow 127.0.0.1 --listen 127.0.0.1 --nice 10 --jobs 8 --zeroconf
         ├─9200 /usr/bin/distccd --pid-file=/var/run/distccd.pid --log-file=/var/log/distccd.log --daemon --allow 192.168.0.0/16 --allow 127.0.0.1 --listen 127.0.0.1 --nice 10 --jobs 8 --zeroconf
         ├─9201 /usr/bin/distccd --pid-file=/var/run/distccd.pid --log-file=/var/log/distccd.log --daemon --allow 192.168.0.0/16 --allow 127.0.0.1 --listen 127.0.0.1 --nice 10 --jobs 8 --zeroconf
         ├─9202 /usr/bin/distccd --pid-file=/var/run/distccd.pid --log-file=/var/log/distccd.log --daemon --allow 192.168.0.0/16 --allow 127.0.0.1 --listen 127.0.0.1 --nice 10 --jobs 8 --zeroconf
         ├─9209 /usr/bin/distccd --pid-file=/var/run/distccd.pid --log-file=/var/log/distccd.log --daemon --allow 192.168.0.0/16 --allow 127.0.0.1 --listen 127.0.0.1 --nice 10 --jobs 8 --zeroconf
         ├─9210 /usr/bin/distccd --pid-file=/var/run/distccd.pid --log-file=/var/log/distccd.log --daemon --allow 192.168.0.0/16 --allow 127.0.0.1 --listen 127.0.0.1 --nice 10 --jobs 8 --zeroconf
         ├─9211 /usr/bin/distccd --pid-file=/var/run/distccd.pid --log-file=/var/log/distccd.log --daemon --allow 192.168.0.0/16 --allow 127.0.0.1 --listen 127.0.0.1 --nice 10 --jobs 8 --zeroconf
         └─9212 /usr/bin/distccd --pid-file=/var/run/distccd.pid --log-file=/var/log/distccd.log --daemon --allow 192.168.0.0/16 --allow 127.0.0.1 --listen 127.0.0.1 --nice 10 --jobs 8 --zeroconf

启动器行似乎与我手动执行的操作相对应(即似乎我已/etc/default/distcc正确配置)。以下是 的内容/etc/default/distcc,以防万一(无注释):

STARTDISTCC="true"

ALLOWEDNETS="192.168.0.0/16 127.0.0.1"

LISTENER="127.0.0.1"

NICE="10"

JOBS="8"

ZEROCONF="true"

但是,当我nmap再次运行查询服务器上的 3632 端口时,会发生以下情况:

PORT     STATE  SERVICE VERSION
3632/tcp closed distccd

~/.distcc/hosts我已按照 IP/LIMIT 表示法在两台计算机上设置了主机列表(localhost/8用于本地计算机和other-machines-ip/8另一台计算机)。

您知道如何让 distcc 服务正常工作吗?

答案1

我错过的微妙细节是在 systemd 服务的情况下守护进程的附加 --listen 参数,如原始帖子所示。 --listen 参数由 LISTENER 设置控制/etc/default/distcc,默认值为 127.0.0.1,这导致仅接受来自 localhost 的连接。

在我的情况下,我应该将其设置192.168.0.1为监听本地网络上的所有计算机。

相关内容