Distcc手册页

 

http://distcc.googlecode.com/svn/trunk/doc/web/index.html译者
:不开花
目录
  • [url=file:///home/loongson/distcc/tmp/distcc_1.html#TOC_1]名字[/url]         
  • [url=file:///home/loongson/distcc/tmp/distcc_1.html#TOC_2]摘要[/url]         
  • [url=file:///home/loongson/distcc/tmp/distcc_1.html#TOC_3]描述[/url]         
  • [url=file:///home/loongson/distcc/tmp/distcc_1.html#TOC_4]快速开始[/url]         
  • [url=file:///home/loongson/distcc/tmp/distcc_1.html#TOC_5]它如何工作[/url]                
  • [url=file:///home/loongson/distcc/tmp/distcc_1.html#TOC_6]选项摘要[/url]         
  • [url=file:///home/loongson/distcc/tmp/distcc_1.html#TOC_7]安装DISTCC[/url]
            
  • [url=file:///home/loongson/distcc/tmp/distcc_1.html#TOC_8]伪装[/url]         
  • [url=file:///home/loongson/distcc/tmp/distcc_1.html#TOC_9]和DISTCC[/url][url=file:///home/loongson/distcc/tmp/distcc_1.html#TOC_9]一起使用CCACHE[/url]
            
  • [url=file:///home/loongson/distcc/tmp/distcc_1.html#TOC_10]HOST[/url][url=file:///home/loongson/distcc/tmp/distcc_1.html#TOC_10]说明[/url]                
  • [url=file:///home/loongson/distcc/tmp/distcc_1.html#TOC_11]压缩[/url]         
  • [url=file:///home/loongson/distcc/tmp/distcc_1.html#TOC_12]搜索路径[/url]                
  • [url=file:///home/loongson/distcc/tmp/distcc_1.html#TOC_13]超时设定[/url]                
  • [url=file:///home/loongson/distcc/tmp/distcc_1.html#TOC_14]诊断[/url]         
  • [url=file:///home/loongson/distcc/tmp/distcc_1.html#TOC_15]退出代码[/url]                
  • [url=file:///home/loongson/distcc/tmp/distcc_1.html#TOC_16]文件[/url]         
  • [url=file:///home/loongson/distcc/tmp/distcc_1.html#TOC_17]环境变量[/url]                
  • [url=file:///home/loongson/distcc/tmp/distcc_1.html#TOC_18]交叉编译[/url]                
  • [url=file:///home/loongson/distcc/tmp/distcc_1.html#TOC_19]BUGS[/url]                
  • [url=file:///home/loongson/distcc/tmp/distcc_1.html#TOC_20]作者[/url]         
  • [url=file:///home/loongson/distcc/tmp/distcc_1.html#TOC_21]许可证[/url]        
  • [url=file:///home/loongson/distcc/tmp/distcc_1.html#TOC_22]参考资料[/url]         

名字 distcc- 分布式C/C++/ObjC编译器。
摘要 distcc
<
编译器>[编译器选项]
distcc
[
编译器选项]
<编译器>
[
编译器选项]
描述 distcc通过网络上的若干台机器分布式编译C代码。distcc应该和本地编译器产生一样的输出,易于安装和使用,比本地编译器要快。
对于每个任务,distcc通过网络发送预处理过的源码和编译器参数,这样各个机器间不需要共享文件系统,或是安装有相同的头文件和库,也不需要同步时钟。
编译任务由一个“客户端”机器驱动,这通常是开发者的工作站或膝上电脑。distcc客户端运行在这个机器上,在其上做make,预处理,连接,和编译过程的其它步骤。一些数目的“志愿者”帮助客户端通过运行distccd(1)守护程序调用C编译器和汇编程序来编译程序。
distcc可通过TCP套接字(默认在3632端口),或是通过ssh(1)隧道。对于TCP连接,志愿者必须直接或通过inetd运行distccd(1)守护程序。对于SSH连接,必须安装了distccd,但不应侦听连接。
TCP连接仅在安全网络里使用,因为没有用户认证或对源码和目标代码的保护措施。SSH连接通常要慢25%,因为有用于加密的处理器负载,虽然这主要依赖于处理器,网络和要编译的程序。
distccGNUmake的 -j
选项一起使用,这会同时运行若干个编译过程。distcc通过本地和远程处理器分发任务。Becausedistcc is able to distribute most of the work across the network ahigher concurrency level can be used than for local builds. -j
值通常设为可用处理器数的两倍,考虑到一些任务由于等待磁盘或网络IO而闭塞。distcc也可以和像SCons这样的编译控制工具一起使用。
强烈推荐你在参加编译的所有机器上安装相同版本的编译器。不兼容的编译器可能导致诡异的编译和连接错误。
快速开始 
1        对于每个机器,下载distcc,解压,接着安装。        2        在每个服务端上,运行        distccd        --daemon
,可选项--allow限定访问。        3        把服务端的名字放到你的环境:
             $        export DISTCC_HOSTS='localhost red green blue'
4        编译!
             $ make        -j8 CC=distcc
收藏 分享
它如何工作

distcc总是仅在远程运行编译器和汇编器。预处理必须在本地运行,因为它需要访问本地机器上的各种头文件,这在志愿者机器上可能不存在或是版本不同。与之类似,连接器需要检查库和目标文件,所以必须本地运行。

编译器和汇编器处理单个的输入文件(预处理过的源码)并产生单个的输出(目标文件)。 distcc 通过网络传输这两个文件并且可以远程运行编译器/汇编器。

幸运的是, 对于大多数程序,预处理相对轻松, 连接器调用也不频繁,因此大多数工作可以分布式的。

distcc检查它的命令行来决定调用那个阶段,任务是否可分布式处理。
选项摘要

传递给distcc的选项解释成编译器选项。有两个选项是由distcc自己解释:

--help
    显示指令概要。
--version
    显示distcc客户端版本。

安装DISTCC

为了适应不同的情况,有三种方法可调用distcc:

      为了远程运行和解释对其的调用,distcc可以以真实编译器的名字安装。当你想对所有的编译任务使用distcc时,这个“伪装”的编译器和现存的源码树有最大的兼容性。实际上distcc的使用对于makefile来说是透明的。

      distcc可以附加在编译器命令行里,例如"distcc cc -c hello.c"或 CC="distcc gcc"。 如果你仅想对某些编译任务使用distcc或试用,这都是透明的,但是对于一些makefile或是一些版本的libtool假定$CC不包含空格。

      最后, distcc可直接以一个编译器使用。 在这个“绝对”模式里,"cc" 总是作为真实编译器的名字使用。 当“清晰”模式不工作时,这对于交互使用是透明的,但是对于新的应用真的不推荐这么做。

记住不要同时使用两种方法调用distcc。如果你在使用伪装目录,不要改变CC和/或CXX, 只要把目录放到你的PATH的前部。如果你没使用伪装目录,你需要或是改变CC和/或CXX,或修改makefile来清楚的调用distcc。
伪装

基本想法是创建一个包含到真实编译器连接的"伪装目录"。这个目录插入到PATH的前部,以使对于编译器的调用经过解释并用distcc来代替。 distcc接着把自己从PATH中移除来寻找真实的编译器。

例如:

      # mkdir /usr/lib/distcc/bin
      # cd /usr/lib/distcc/bin
      # ln -s ../../../bin/distcc gcc
      # ln -s ../../../bin/distcc cc
      # ln -s ../../../bin/distcc g++
      # ln -s ../../../bin/distcc c++

接着,为了使用distcc, 用户只需要把/usr/lib/distcc/bin目录放到PATH的前部,并在DISTCC_HOSTS或文件里设置主机列表。剩下的distcc会自行处理。

注意这个伪装目录必须处在PATH里包含同名真实编译器的目录前, 同时编译器所调用的任何辅助程序(例如ld)也必须在PATH里的位于伪装目录后的目录里,因为distcc以一个包含所有目录和伪装目录协调的PATH值调用真实的编译器。

在伪装模式可能产生"递归错误",这意味着distcc不知何故再次调用自己,而不是真实的编译器。这表明在PATH里有两个伪装目录,可能在不同目录安装两个distcc. 也可能表明你混合了“伪装”和“清楚”模式。
和DISTCC一起使用CCACHE

ccache是个通过缓存编译输出来加速软件编译的程序。 ccache通常在distcc之前调用, 因此可从缓存取回结果。对于makefile也可能需要一些实验来使事情在一起很好的工作。

最可靠的方法是设置



    CCACHE_PREFIX="distcc"

这告诉ccache作为真实编译器的封套来运行distcc。 ccache仍然使用真实的编译器来探测编译器升级。

ccache可通过伪装目录或如下设置来运行



    CC="ccache gcc"

直到2.2版, ccache不缓存预处理的源码,因此如果从distccd或distcc运行将不会获得缓存。仅在客户端运行且在使用distcc前。
HOST说明

"主机列表"告诉distcc用于编译的机器。distcc依序查看$DISTCC_HOSTS环境变量,用户$DISTCC_DIR/hosts文件,和主机统计文件。如果没发现主机文件, distcc给出一个警告信息,然后在本地编译。

主机列表由空格分开。最简单和最常用的是主机名,例如

      localhost red green blue

distcc首先选择列表开头的主机,所以机器应按性能逐渐降低的顺序排列。特别的,当只有一个编译任务可运行时,使用列表里的第一个机器。

localhost在列表里的次序对于获得最佳性能来说是很重要的。因为本地运行过载任务会很慢, localhost通常应该在首位。然而,客户端有足够的周期运行本地任务和distcc客户端是很重要的。如果客户端慢于志愿者,或如果有很多志愿者,那么客户端应放到列表末尾或根本就不放到列表里。一个通用规则是,如果CPU速度小于总共速度的1/5,那么客户端就不要放到列表里。

性能依赖于用于项目的源码和makefile,以及机器和网络速度。实验不同的主机设置列表和-j数目也许可以改进性能。

语法是

DISTCC_HOSTS = HOSTSPEC ...
HOSTSPEC = LOCAL_HOST | SSH_HOST | TCP_HOST | OLDSTYLE_TCP_HOST
LOCAL_HOST = localhost[/LIMIT]
SSH_HOST = [USER]@HOSTID[/LIMIT][:COMMAND][OPTIONS]
TCP_HOST = HOSTID[ORT][/LIMIT][OPTIONS]
OLDSTYLE_TCP_HOST = HOSTID[/LIMIT][ORT][OPTIONS]
HOSTID = HOSTNAME | IPV4
OPTIONS = ,OPTION[OPTIONS]
OPTION = lzo

这里有一些语法的例子:

TOP

 
localhost
    "localhost"解释为直接执行编译,而不是传给本机的守护程序。如果你确实连接到本机的守护程序用于测试,接着给出机器的IP地址或真实主机名。 (这会变慢)
IPV4
    IPv4地址,例如10.0.0.1
HOSTNAME
    使用分析器搜寻主机名。
ORT
    连接到指定的端口,而不是默认的3632。
@HOSTID
    通过SSH连接到主机, 而不是TCP。SSH连接选项可在~/.ssh/config里设置。
USER@
    指定用户通过SSH连接到主机。
:COMMAND
    通过SSH连接,使用特定的路径来寻找distccd服务端。这通常仅在由于某种原因你不能安装distccd到用于SSH的默认路径的情况下需要。当在SSH模式得到像"distccd: command not found"这样的错误时才需要这么做。
/LIMIT
    可添加一个十进制限额到主机说明来限定客户端发送到机器的任务。默认的限定是每个主机4个(对于localhost是两个),对于服务端也许应进一步限定。当服务端有多余两个处理器时,你应增加这个值。
,lzo
    对于TCP或SSH主机,允许LZO压缩。

这里是个可能的样板:

      localhost/2 @bigman/16:/opt/bin/distccd oldmachine:4200/1
      # cartman is down
      distant/3,lzo

主机说明里可有注释。 注释以#号开始直到行尾。

如果列表里的主机不可到达,distcc会给出一个警告并忽略那个主机一分钟。
压缩

lzo主机选项指定数据传输使用LZO压缩, 包括预处理的源码,目标代码和错误信息。对于慢于100Mbps的网络,压缩是合算的, 但是结果十分依赖于网络,处理器和源码树。

允许压缩使distcc客户端和服务端使用了更多的CPU时间,减少了网络开销。源码的压缩率通常是4:1,目标文件的是2:1。

使用压缩要求客户端和服务端最低要使用2.9版的distcc。不需要配置服务端:服务端对于压缩请求总是返回压缩的应答。
搜索路径



如果编译器名是绝对路径,会逐字传给服务端并且编译器会从那个目录运行。例如:

      distcc /usr/local/bin/gcc-3.1415 -c hello.c

如果编译器名不是绝对路径, 或不全, 就会搜索distccd的PATH。当distcc从一个伪装目录运行时,仅用编译器的基本名。客户端的PATH仅用于运行预处理器,对于服务端的路径没影响。
超时设定



distcc客户端和服务端在通过网络传输数据时都强制超时设定。这用于探测关机和不可到达的主机, 来避免在使用时服务端连不上的情况下阻止编译工作混乱。如果客户端超时,任务会返回到本地。

超时设定现在还不能配置。
诊断

本地或远程的错误信息或警告用于客户端的诊断输出。

当使用详细选项时,distcc可以提供扩展的调试信息。这由客户端上的DISTCC_VERBOSE环境变量和服务端上的--verbose选项控制。对于处理鼓掌,检查客户端和服务端的错误信息。
退出代码

distcc的退出代码通常是编译器的:0表示成功编译,非0表示别的情况。

distcc distinguishes 在"真实"错误例如源码的语法错误和“偶然”错误例如和志愿者之间的网络问题。在偶然错误情况下, distcc将尝试本地编译除非禁止DISTCC_FALLBACK选项。

如果编译器以一个信号退出, distcc返回信号值和128的和。

distcc内部错误导致一个100到127之间的退出代码。特别的

100
    一般distcc故障。
105
    内存不足。
110
    没找到编译器。
111
    递归调用distcc。
116
    未定义主机并且禁止应急办法。

(别的列在exitcode.h里)

TOP

 
文件

如果$DISTCC_HOSTS未设置, distcc从$DISTCC_DIR/hosts或编译时设置的审计配置文件。 T可从distcc --help输出查看。

distcc在临时目录里创建了一批临时和隐藏文件。
环境变量

distcc的行为有一批环境变量控制。如果主机列表已经存储到某个文件,大多数情况下是不需要做任何设置的。

DISTCC_HOSTS
    空格隔开的志愿主机说明。
DISTCC_VERBOSE
    如果设为1, distcc产生说明信息到标准错误流或日志文件。这对于调试问题有用。报告音该包括详细输出。
DISTCC_LOG
    从distcc本身接收信息,而不是标准错误。
DISTCC_FALLBACK
    如果无法分发任务到打算的主机或没找到主机列表,distcc默认本地编译。如果这个变量设为0,那么禁止应急办法并且编译会因此失败。注意这对于总是在本地的任务,例如连接,没有影响。 
    DISTCC_SAVE_TEMPS 
    如果设为1, 不删除使用过的临时文件。 对于调试很好,或是你的磁盘很空闲。
DISTCC_TCP_CORK
    如果设为0, 禁用"TCP阻塞",甚至它们就在系统里。使用阻塞通常帮助打包请求为更少的包并提升性能。这通常设为允许。
DISTCC_SSH
    指定用于打开SSH连接的命令。默认到"ssh"但是也可以设为不同的连接命令,例如 "lsh" 或"tsocks-ssh"等可接收类似命令行的。命令不分开也不由shell执行。
DISTCC_DIR
    每个用户用于存储隐藏文件和状态文件的配置目录。默认使用 ~/.distcc/。
TMPDIR
    用于预处理源码输出等的临时目录。默认使用/tmp/。
UNCACHED_ERR_FD
    如果设定并且也设定了DISTCC_LOG, distcc错误会写到由这个变量定义的文件描述符。这个变量主要由ccache自动使用, 设置它来避免缓存网络问题等的瞬时错误。

交叉编译

交叉编译意味着编译运行在不同处理器,体系结构,或操作系统的机器上的程序。distcc支持交叉编译,包括一组混合架构的机器,尽管编译命令需要做一些改变。

传递到distcc的编译命令必须在每个志愿者机器上正确的运行并产生合适类型的目标文件。如果机器有不同的处理器,那么简单的使用distcc cc就不行了,因为这样通常调用的是志愿者机器本地的编译器。

使用相同处理器但不同操作系统的机器也许不必产生兼容的.o文件。

一些不同的gcc配置可以同时安装到任何机器。如果你从源码编译gcc,你应当使用--program-suffix configuration 选项来使其指定gcc版本和目标平台来安装。

推荐的gcc转换的名字是TARGET-gcc-VERSION 例如i686-linux-gcc-3.2 。 GCC 3.3会以这个名字安装,另外如果是本地编译还可是TARGET-gcc和gcc-VERSION 和gcc。

编译器在客户端和志愿机器上要以同名安装。
BUGS

如果你认为你发现了一个distcc bug,请查看文档目录里的reporting-bugs.txt文件里如何报告bug的信息。

一些丢失或有额外依赖关系的makefile导致出错或减慢并行编译。递归make是无效的并且使处理器不必要的闲置很长时间。 (参阅Peter Miller 的Recursive Make Considered Harmful) Makefile bugs是导致distcc编译失败的最常见原因。make的备选方案,例如SCons,对于某些项目可以产生更快的速度。

使用不同版本的gcc可能导致诡异的编译问题,因为头文件和二进制接口随时间变化了,一些发行包含了不兼容的补丁。 distcc并不处理使用不兼容版本的问题。编译时的连接错误和系统声明的头文件通常是不匹配或安装了不正确的编译器。

由于gcc的限制, 在某些情况下,gdb也许不能使用distcc自动发现用于编译的源文件。可用gdb directory命令。这会在gcc 3.4里修正。

如果源码和目标文件在不同的目录同时没用-MF选项,gcc的-MD 选项可能产生在错误的目录里产生输出。没有完美的解决办法,因为版本的gcc有不兼容的更改。使用-MF 清楚的指出依赖输出文件可修正这个问题。

TCP 连接模式应当仅在可信任的网络里使用。

在志愿主机列表里包含较慢的机器会降低编译速度。

当在NFS上使用distcc或ccache时,必须使用no_subtree_check选项到处文件系统来允许目录间的可靠重命名。

对于编译和连接,可以以gcc hello.c来调用编译器。 distcc并不把它们分割开,而是在本地运行整个任务。

已知别的bugs发表在http://distcc.samba.org/
作者

distcc由Martin Pool <[email protected]>, 和Wayne Davison, Frerich Raabe, Dimitri Papadopoulos等学者合写,还有一些在作者在NEWS文件里提及。请提交bugs到<[email protected]>。
许可证

你可自由使用distcc。仅在第二版或更晚的GPL下拷贝distcc (包含这个手册),修改或重发布。 distcc不附带任何担保。COPYING文件包含了GPL的副本。
参考资料

distccd(1), ccache(1), gcc(1), make(1) http://distcc.samba.org/http://ccache.samba.org/

TOP

 
Distccd手册页

译者:不开花
目录

    *

      名字
    *

      摘要
    *

      描述
    *

      独立的服务端
    *

      从INIT运行
    *

      从INETD运行
    *

      终止DISTCCD
    *

      选项
    *

      搜索路径
    *

      诊断
    *

      环境变量
    *

      参考资料
    *

      BUGS
    *

      许可证
    *

      作者



名字

distccd - 分布式C/C++编译器服务端
摘要

distccd --daemon [OPTIONS]
描述

distccd 是分布式编译器distcc(1)的服务端。它从网络客户端接受任务并为之编译。

distcc可通过TCP或是ssh(1)。使用TCP连接很快但相对不安全。SSH连接安全但要慢。

对于SSH连接, 必须在帮忙的机器上安装不能以守护程序运行的distccd --因为需要通过SSH启动。 SSH连接有若干益处:客户端和服务端都不需要侦听任何新的端口; 编译工作由所请求的用户的权限; 未认证的用户无法访问服务端; 源码和目标文件在通信过程中是手保护的。

对于TCP连接, distccd可以以inetd风格的程序运行,或是作为独立的服务端。推荐独立模式,因为这样的效率稍高一些并且允许distccd调整接收的编译任务。 --listen和--allow选项可用于简单的基于IP的访问控制。

distcc由root或是别的用户启动。如果由root运行,它会让出特权,并切换到--user选项指定的用户,或是称为"distcc"的用户,或是"nobody"。

distccd没有配置文件; 它的行为只由命令行选项和客户端的请求控制。
独立服务端

推荐的distccd运行模式是作为独立服务端。 distccd侦听网络连接并fork若干进程来为请求服务。

如果你使用的distcc是(你的操作系统开发者)打包好的版本,你可以你操作系统哦个标准启动过程来启动distcc,例如

      # service distcc start

为了以独立服务端启动distccd,以root或是别的用户运行:

      # distccd --daemon

从INIT运行

distccd可以在别的init(8)或是守护程序工具下以一个独立的守护程序运行。distccd会在系统启动时运行,并常驻系统。

distccd由超级服务程序在开机时以独立服务端启动,除此之外也要使用--no-detach选项以超级服务程序可以监管它。

例如,为了添加distccd作为sysvinit的一个进程,添加这一行到/etc/inittab

      dscc:2345:respawn:/usr/local/bin/distccd --verbose --no-detach --daemon

从INETD启动

distccd可由网络超级服务程序启动,例如inetd或xinetd。在这种情况下inetd侦听网络连接并在有任务到达时调用distccd。

这样的效率比以独立守护程序运行时的效率稍低。 distccd不能调整接收的并发任务,但是在你inetd配置里也许有选项来做这个。

对于传统的Unix inetd, 可添加这样的一行到/etc/inetd.conf:

      distcc stream tcp nowait.6000 root /usr/local/bin/distccd distccd --inetd

inetd强制限定一个服务的连接率来防范处理意外和故意滥用。 Linux NetKit inetd默认的是每分钟40次,这对于distccd来说太低了。 .6000选项增加这个限制到每分钟6000次。
终止DISTCCD

若要终止独立的服务端,发送一个SIGTERM信号到父进程。从脚本来做这件事最可靠的方式是使用--pid-file选项来记录其进程ID。以这种方式结束服务端可确保正在进行的任务可完成。
选项



--help
    显示使用信息概要。
--version
    显示程序版本并退出。
-j, --jobs JOBS
    限定可接收的任务数目。默认设置为大于机器上CPU数目的两倍, 考虑到一些等待网络IO而闭塞的进程。 (近守护程序模式)
-N, --nice NICENESS
    提高放弃CPU给别的任务的守护程序的优先级。NICENESS 是个用于当前进程优先级的增量。 优先级范围依赖于操作系统但通常是0 to 20。默认是每次加5。
-p, --port PORT
    设置要侦听的TCP端口, 而不是默认的3632。(仅守护程序模式)
--listen ADDRESS
    指示distccd守护程序侦听IP地址ADDRESS。可用于双端主机上的访问控制。(仅守护程序模式)
-P, --pid-file FILE
    保存守护进程id到文件FILE。 (仅守护程序模式)
--user USER
    如果distccd由root执行,切换到用户USER。
-a, --allow IPADDR[/MASK]
    指示distccd接受来自IPADDR的ip地址的连接。 A CIDR mask length can be supplied optionally after a trailing slash, e.g. 192.168.0.0/24, in which case addresses that match in the most significant MASK bits will be allowed. If no --allow options are specified, all clients are allowed. Unauthorized connections are rejected by closing the TCP connection immediately. A warning is logged on the server but nothing is sent ot the client.
--no-detach
    不从启动守护程序的shell分离。
--no-fork
    对于每个连接不fork孩子,为了挂接gdb。如果不明了这个选项,请不要使用。
--log-file FILE
    发送消息到FILE而不是syslog。记录到文件比通过syslog要快,也推荐这么做。
--log-level LEVEL
    最小化包含进日志文件里的错误信心。 如果你只想查看错误信息而不是所有的连接的话,这是有用的。 LEVEL可是标准syslog级别中的任何一个,具体是critical, error, warning, notice, info, 或debug.
--log-stderr
    发送消息到标准错误,而不是文件或syslog。这主要用于调试。不要在inetd模式用。
--verbose
    在日志里包含调试信息。等同于 --log-level=debug
--wizard
    打开适用于在gdb下启动distcccd的所有选项:以守护程序运行, 详细的日志信息到标准错误, 不分离和fork。只用于wizards。
--inetd
    提交客户端连接到标准输入/标准输出。正如名字所指出,这个选项仅在由像inetd这样的超级服务程序启动时使用。 当标准输入是套接字时,distccd假定inetd模式 。
--daemon
    在套接字上帮定和侦听,而不是从inetd运行。这用于独立模式。如果标准输入是tty,distccd假定守护程序模式,所以 --守护程序在从脚本或非交互的ssh连接启动需要明确的指定。

TOP

 
搜索路径



distcc可以传递给distccd编译器的相对或是绝对路径名。如果给distcc一个明确的绝对编译器文件名, 在客户端和服务端上这个名字被清楚的使用。如果编译器名不是绝对路径, 或是客户端在伪装模式下使用,那么会搜索服务端的PATH。

distccd继承了它的父进程的搜索路径。 distccd默认尝试移除看起来包含distccd的连接,来避免非故意的递归。DISTCCD_PATH环境变量可用于设置路径。

当使用--verbose选项时,会记录搜索路径。如果出错,请检查日志。

当由ssh启动distccd时,$HOME/.ssh/environment 可用于设置路径。请参阅ssh(1)。
诊断

syslog守护程序默认简易的distccd日志信息,通常写到/var/log/daemon或/var/log/messages。 Log messages can be sent to a different file using the 使用--log-file选项可把日志信息发到别的文件。
环境变量



DISTCCD_PATH
    启动distccd时, 如果设定了这个值,将不变的用于命令执行PATH。 The code that normally tries to remove masquerade directories from the path is skipped.
DISTCC_SAVE_TEMPS
    If set to 1, temporary files are not deleted after use.

Note that DISTCC_LOG does not affect the log destination for the server.

DISTCC_TCP_DEFER_ACCEPT
    在Linux上,打开TCP_DEFER_ACCEPT套接字选项。默认打开。
TMPDIR
    用于临时文件,例如预处理输出的目录。默认使用/tmp。

参考资料

distcc(1), ccache(1), gcc(1), make(1) http://distcc.samba.org/
BUGS

基于IP的访问控制是不安全的,攻击者可以欺骗TCP连接, 并且无法区别客户端上的不同用户。 a client.

TCP连接是不安全的,攻击者可以查看或修改网络通信。

由于ccache不从.i文件缓存,从distccd调用它是没用的。
许可证

你可自由使用distcc。仅在第二版或更晚的GPL下拷贝distcc (包含这个手册),修改或重发布。 distcc不附带任何担保。COPYING文件包含了GPL的副本。
作者

distcc由Martin Pool <[email protected]>, 和Wayne Davison, Frerich Raabe, Dimitri Papadopoulos等学者合写,还有一些在作者在NEWS文件里提及。请提交bugs到<[email protected]>.

TOP

 
主题: 在pkgsrc里使用distcc
到: None <[email protected]>
来自: Johnny C. Lam <[email protected]>
列表: tech-pkg
日期: 03/17/2004 07:06:21

译者:不开花

snail (10.0.0.11)是个NetBSD-1.6.2/i386 Pentium II 300MHz的机器。
cheetah (10.0.0.12)是个NetBSD-1.6.2/i386 Athlon XP+ 2GHz并带有2G内存的机器。

我在这两台机器上从pkgsrc安装了devel/distcc。在snail上,添加如下几行到/etc/mk.conf:

        PKGSRC_COMPILER=        ccache distcc gcc
        DISTCC_HOSTS=           cheetah localhost

在cheetah上, 确保编译器在PATH里,接着运行distccd。我使用系统默认的编译器,所以我把/usr/bin放到PATH里,distccd搜索PATH来寻找其所用的编译器:

        PATH=/usr/bin{PATH}; export PATH
        distccd --listen 10.0.0.12

这样以一个单独的守护程序运行distccd并在10.0.0.12上绑定到distcc默认的端口。对于监听IPV4通信"--listen addr"似乎是必需的。

现在,当我在snail编译时, 编译工作会被转送到cheetah并且编译完的目标文件返回到snail用于连接。(译者注:预处理和连接都是在本地进行的,因为要用到本地的库等)

                *       *       *

现在这个例子并不那么吸引人。一个有趣的情况是snail是NetBSD-1.6.2/hpcmips机器。 那么在cheetah上,
可以从源码检出netbsd-1-6分支并制作一个hpcmips交叉工具链:

        cd src; ./build.sh -m hpcmips -t -T /var/tools/hpcmips

创建一些链接:

        cd /var/tools/hpcmips/bin
        ln -sf hpcmips--netbsdelf-gcc gcc
        ln -sf hpcmips--netbsdelf-gcc cc
        ln -sf hpcmips--netbsdelf-g++ g++
        ln -sf hpcmips--netbsdelf-g++ c++

执行distccd:

        PATH=/var/tools/hpcmips/bin{PATH}; export PATH
        distccd --listen 10.0.0.12

现在,在nail上编译也会把任务转送到cheetah,但是这些任务会是由/var/tools/hpcmips里的交叉编译器编译。  如果谁在真实机器上这么测试过的话我将感激万分,请告诉我这种方法是否真能工作。

        此致,

        -- Johnny Lam <[email protected]>

你可能感兴趣的:(ssh,File,Path,任务,makefile,编译器)