使用Portage编译时Distcc拦截IP导致远程编译失效及Distccmon无进度显示问题
解决方案:Portage下Distcc无法调用远程编译+distccmon无进度显示问题
我之前也碰到过类似的Portage搭配Distcc的问题,结合你给出的错误日志,咱们一步步来排查解决:
首先处理错误日志里的「退避期」问题
你的日志里明确显示192.168.0.26仍处于退避期,这是Distcc的自我保护机制——如果之前和远程主机连接失败,会暂时把它从可用列表中移除。解决这个的步骤很简单:
- 清除Distcc的退避缓存:
rm -rf /var/tmp/distcc/* - 重启distccd服务:
rc-service distccd restart
重点排查Portage的专属配置(核心问题)
既然常规编译Distcc能正常工作,说明Distcc本身没问题,问题大概率出在Portage的配置上:
检查
make.conf的关键配置
打开/etc/portage/make.conf,确保以下配置正确:# 启用Distcc特性 FEATURES="distcc" # 并发编译数建议设为(本地核心数×2),避免过载 MAKEOPTS="-j$(($(nproc)*2))" # 统一在这里指定Distcc主机,不要在多个文件重复配置(避免冲突) DISTCC_HOSTS="localhost 192.168.0.26"注意:Portage优先读取
make.conf里的DISTCC_HOSTS,你之前在多个hosts文件配置反而可能导致混淆,建议只保留这里的配置。确保Portage用户有权限访问Distcc资源
Portage默认用portage用户执行编译,要保证这个用户能读写Distcc的临时目录:chown -R portage:portage /var/tmp/distcc
解决distccmon无进度显示的问题
使用正确的distccmon命令
不要直接敲distccmon,用带刷新间隔的文本模式更直观:distccmon-text 5这个命令会每5秒刷新一次编译进度。
调整Distcc日志级别排查请求
修改/etc/conf.d/distccd里的启动参数,开启详细日志:DISTCCD_OPTS="--log-level info --log-file /var/log/distccd.log --allow 192.168.0.0/24"重启distccd后,用以下命令实时查看日志,确认Portage是否真的发起了Distcc请求:
tail -f /var/log/distccd.log
最后验证远程主机可用性
如果上面的步骤都做完还是有问题,测试下远程主机是否真的能被Distcc访问:
distcc --test 192.168.0.26
如果测试失败,检查远程主机的distccd是否启动,以及防火墙是否开放了Distcc默认的3632端口。
内容的提问来源于stack exchange,提问作者TroubleTruffle
相关产品推荐
相关产品推荐

