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/hostsIP/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내 경우에는 로컬 네트워크에 있는 모든 컴퓨터의 소리를 듣도록 설정해야 합니다 .

관련 정보