Difference between revisions of "Distcc (简体中文)"

From ArchWiki
Jump to: navigation, search
m (fixed redirect)
m
Line 2: Line 2:
 
[[Category:HOWTOs (简体中文)]]
 
[[Category:HOWTOs (简体中文)]]
  
{{i18n_links_start}}
+
 
{{i18n_entry|English|Distcc}}
+
{{i18n|Distcc}}
{{i18n_entry|简体中文|Distcc (简体中文)}}
+
 
{{i18n_links_end}}
+
  
 
==摘要==
 
==摘要==

Revision as of 08:39, 17 September 2010


This template has only maintenance purposes. For linking to local translations please use interlanguage links, see Help:i18n#Interlanguage links.


Local languages: Català – Dansk – English – Español – Esperanto – Hrvatski – Indonesia – Italiano – Lietuviškai – Magyar – Nederlands – Norsk Bokmål – Polski – Português – Slovenský – Česky – Ελληνικά – Български – Русский – Српски – Українська – עברית – العربية – ไทย – 日本語 – 正體中文 – 简体中文 – 한국어


External languages (all articles in these languages should be moved to the external wiki): Deutsch – Français – Română – Suomi – Svenska – Tiếng Việt – Türkçe – فارسی


摘要

distcc 是一个程序,设计为将编译任务分布到网络中的参与主机。distcc-daemon将一步分代码发送到distcc-servers上编译,并返回编译结果,用这种方式,你可以用多部计算机同时编译一个程序,从而加速编译进程。比较爽的是你可以在pacman/srcpac中协同使用(翻译不太准,参考原文:The cool part is you can use it together with pacman/srcpac).

措施

distcc daemon
运行着distcc的计算机与服务器分布式的编译代码. daemon编译一部分代源代码并发送另一部分源代码给DISTCC_HOSTS中定义的主机。
distcc server
计算机与服务器编译从daemon中获取的代码,编译完成后,把编译后的目标代码发送回daemon,然后再接收下一部分代码(如果编译还没完成的话)。

从这里开始

首先,你需要将所有用到的计算机都装上distcc,无论是daemon还是server。如果运行的都是Archlinux,简单的都执行pacman -S distcc就完成了。如果是其他的发行版甚至操作系统(你可以在windows上用Cygwin来运行Distcc!),请阅读连接 distcc docs.

配置

现在,Distcc装好了,需要花点时间配置一下:

Daemon的配置

在daemon上, 编辑 /etc/makepkg.conf (假设daemon在Arch上运行) 并且确保 BUILDENV 中的distcc没有被禁用.例如:

BUILDENV=(fakeroot distcc color !ccache !xdelta)

修改在export MAKEFLAGS="-j N"中的N为所有的CPU的个数+1。例如,如果你用3个单核处理器的计算机组成的系统,你应该把N设置为4 。 然后, 编辑 /etc/conf.d/distccd 并确认下一行在文件中:

DISTCC_HOSTS='serverips'

修改DISTCC_HOSTS=serverips中的serverips。serverips是一个IP列表。例如

DISTCC_HOSTS='10.0.1.3 10.0.1.4 10.0.2.75'

经测试此条wiki中可能有误,DISTCC_HOSTS='serverips'应该在 /etc/makepkg.conf中,而不是/etc/conf.d/distccd 中,同时要把本机的ip也加上。

server的配置

编辑/etc/conf.d/distccd 并且增加一行

DISTCC_ARGS="--user nobody --allow daemonip"

修改daemonip 为daemon的IP. 如果你不这样做的话, 当distcc试图发送代码到服务器的时候,你将收到"connection refused"错误。设置daemonip同时可以确保你的server不会从其他daemon接收代码。

编辑/etc/hosts.allow 并加入下面这一行

distccd: 10.0.1.

用daemo的IP代替10.0.1. ,daemon间用逗号隔开。或者可以使用类似于10.0.1. 的表示法来表示一个IP范围:10.0.1. 表示从10.0.1.0到10.0.1.255的机器可以连到server并发给它源代码。你也可以使用CIDR表示法:比如"10.0.1.0/255.255.255.0 与'10.0.1.相同的。

如果你不把上面那行加进/etc/hosts.allow,可能就会在daemon上产生"connection refused" 错误,因为server不能接受任何到distccd的连接。要记住Arch的默认设置是相当安全的。;-)

赶紧来试试

在每台参与编译的机器上开启distcc daemon(用/etc/rc.d/distccd start)。接着将"PKGBUILD"放到daemon上。切到"PKGBUILD"所在的目录下,执行"makepkg"。看一下daemon和server上运行的进程,当./configure 结束时,真正的编译便开始了,CPU负载会飚升。你可以在daemon或server上用 tail -f /var/log/messages.log查看distcc正在干吗。

如果你想在重启之后自动运行distcc,记得在daemon和server的/etc/rc.confDAEMONS 列表里加入distccd 哦。

为每个编译任务使用distcc

如果你在pacman之外使用distcc,那么你需要做的就是把你加进/etc/makepkg.conf 文件中的"export ..."加到"/etc/profile"里:/etc/makepkg.conf 里的"export"只在"makepkg"或"makeworld"执行的时间读取,而/etc/profile 会在登录的时候执行。