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