distccd(1) distccd(1)
NAME
distccd - distributed C/C++ compiler server
SYNOPSIS
distccd --daemon [OPTIONS]
DESCRIPTION
distccd is the server for the distcc(1) distributed compiler. It accepts and runs compilation jobs
for network clients.
distcc can run over either TCP or a connection command such as ssh(1). TCP connections are fast but
relatively insecure. SSH connections are secure but slower.
For SSH connections, distccd must be installed on the volunteer but should not run as a daemon -- it
will be started over SSH as needed. SSH connections have several advantages: neither the client nor
server listens on any new ports; compilations run with the privileges of the user that requested
them; unauthorized users cannot access the server; and source and output is protected in transit.
For TCP connections, distccd can run either from an inetd-style program, or as a standalone server.
Standalone mode is recommended because it is slightly more efficient and allows distccd to regulate
the number of incoming jobs. The --listen and --allow options can be used for simple IP-based access
control.
distcc may be started either by root or any other user. If run by root, it gives away privileges and
changes to the user specified by the --user option, or the user called "distcc", or the user called
"nobody".
distccd does not have a configuration file; it's behaviour is controlled only by command-line options
and requests from clients.
STANDALONE SERVER
The recommended method for running distccd is as a standalone server. distccd will listen for net-work network
work connections and fork several child processes to serve them.
If you installed distcc using a packaged version you may be able to start the server using the stan-dard standard
dard mechanism for your operating system, such as
# service distcc start
To start distccd as a standalone service, run a command like this either as root or an ordinary user:
# distccd --daemon
RUNNING FROM INIT
distccd may be run as a standalone daemon under the control of another program like init(8) or dae-montools. daemontools.
montools. The super-server starts distccd when the system boots, and whenever it exits.
distccd should be started just as for a standalone server, except that the --no-detach option should
be used so that the super-server can monitor it.
For example, to add distccd as a process to Linux sysvinit, add this line to /etc/inittab
dscc:2345:respawn:/usr/local/bin/distccd --verbose --no-detach --daemon
RUNNING FROM INETD
distccd may be started from a network super-server such as inetd or xinetd. In this case inetd lis-tens listens
tens for network connections and invokes distccd when one arrives.
This is slightly less efficient than running a standalone distccd daemon. distccd is not able to
regulate the number of concurrent jobs accepted, but there may be an option in your inetd configura-tion configuration
tion to do so.
For traditional Unix inetd, a line like this can be added to /etc/inetd.conf:
distcc stream tcp nowait.6000 root /usr/local/bin/distccd distccd --inetd
inetd imposes a limit on the rate of connections to a service to protect against accidental or inten-tional intentional
tional overuse. The default in Linux NetKit inetd is 40 per minute, which is far too low for
distccd. The .6000 option raises the limit to 6000 per minute.
TERMINATING DISTCCD
To shut down a standalone server, send a SIGTERM signal to the parent process. The most reliable way
to do this from a script is to use the --pid-file option to record its process ID. Shutting down the
server in this way should allow any jobs currently in progress to complete.
OPTIONS
--help Display summary usage information.
--version
Shows the daemon version and exits.
-j, --jobs JOBS
Sets a limit on the number of jobs that can be accepted at any time. By default this is set
to two greater than the number of CPUs on the machine, to allow for some processes being
blocked on network IO. (Daemon mode only.)
-N, --nice NICENESS
Makes the daemon more nice about giving up the CPU to other tasks on the machine. NICENESS is
an increment to the current priority of the process. The range of priorities depends on the
operating system but is typically 0 to 20. By default the niceness is increased by 5.
-p, --port PORT
Set the TCP port to listen on, rather than the default of 3632. (Daemon mode only.)
--listen ADDRESS
Instructs the distccd daemon to listen on the IP address ADDRESS. This can be useful for
access control on dual-homed hosts. (Daemon mode only.)
-P, --pid-file FILE
Save daemon process id to file FILE. (Daemon mode only.)
--user USER
If distccd gets executed as root, change to user USER.
-a, --allow IPADDR[/MASK]
Instructs distccd to accept connections from the IP address IPADDR. 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
Do not detach from the shell that started the daemon.
--no-fork
Don't fork children for each connection, to allow attaching gdb. Don't use this if you don't
understand it!
--log-file FILE
Send messages to file FILE instead of syslog. Logging directly to a file is significantly
faster than going via syslog and is recommended.
--log-level LEVEL
Set the minimum severity of error that will be included in the log file. Useful if you only
want to see error messages rather than an entry for each connection. LEVEL can be any of the
standard syslog levels, and in particular critical, error, warning, notice, info, or debug.
--log-stderr
Send log messages to stderr, rather than to a file or syslog. This is mainly intended for use
in debugging. Do not use in inetd mode.
--verbose
Include debug messages in log. Equivalent to --log-level=debug
--wizard
Turn on all options appropriate for starting distccd under gdb: run as a daemon, log verbosely
to stderr, and do not detach or fork. For wizards only.
--inetd
Serve a client connected to stdin/stdout. As the name suggests, this option should be used
when distccd is run from within a super-server like inetd. distccd assumes inetd mode when
stdin is a socket.
--daemon
Bind and listen on a socket, rather than running from inetd. This is used for standalone
mode. distccd assumes daemon mode at startup if stdin is a tty, so --daemon should be explic-itly explicitly
itly specified when starting distccd from a script or in a non-interactive ssh connection.
--max-cache-age HOURS
Specifies the maximum time to keep a cached pch file. The value is computed based on the last
file access, and is constrained to be at most 72 hours (the default).
--max-cache-size MB
Specifies the maximum total disk use in Mb allowed for the pch cache. A value of zero (the
default) allows the cache to grow without an explicit upper size limit.
--min-disk-free MB
Specifies the minimum disk free space in Mb to preserve on the filesystem containing the pch
cache. The default is 2048, and the minimum is 512. --priority PRIORITY Specifies an integer
priority for the build machine. Machines with higher priorities will be ordered towards the
beginning of the DISTCC_HOSTS list by Xcode. This setting is not used by distcc.
SEARCH PATHS
distcc can pass either a relative or an absolute name for the compiler to distccd. If distcc is
given an explicit absolute compiler filename, that name is used verbatim on both the client and
server. If the compiler name is not an absolute path, or if the client is used in masquerade mode,
then the server's PATH is searched.
distccd inherits its search path from its parent process. By default distccd tries to remove direc-tories directories
tories that seem to contain distccd masquerade links, to guard against inadvertent recursion. The
DISTCCD_PATH environment variable may be used to set the path.
The search path is logged when --verbose is given. In case of confusion, check the logs.
When distccd is run over ssh, the $HOME/.ssh/environment file may be useful in setting the path. See
ssh(1).
DIAGNOSTICS
distccd logs messages to syslog's daemon facility by default, which normally writes to /var/log/dae-mon /var/log/daemon
mon or /var/log/messages. Log messages can be sent to a different file using the --log-file option.
ENVIRONMENT VARIABLES
DISTCCD_PATH
When starting distccd, if this value is set it will be used unaltered for the command-execu-tion command-execution
tion 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
On Linux, turn on the TCP_DEFER_ACCEPT socket option. Defaults to on.
TMPDIR Directory for temporary files such as preprocessor output. By default /tmp/ is used.
PCH CACHING
The Mac OS X version of distccd includes support for precompiled header (pch) files. distccd caches
these files in TMPDIR, and provides options for managing the cache based on file access times and
disk use. The pch files are downloaded from the client machines as needed and stored on a per user,
per client machine basis. To minimize build times the pch cache should be sufficiently large. If
there is insufficient space then pch files may be repeatedly downloaded during a build. distccd will
emit a warning if it detects that the cache constraints require discarding recently downloaded pch
files (possibly due to a full disk.)
SEE ALSO
distcc(1), ccache(1), gcc(1), make(1) http://distcc.samba.org/
BUGS
IP-based access control is not secure against attackers able to spoof TCP connections, and cannot
discriminate different users on a client.
TCP connections are not secure against attackers able to observe or modify network traffic.
Because ccache does not cache compilation from .i files, it is not useful to call it from distccd.
LICENCE
You are free to use distcc. distcc (including this manual) may be copied, modified or distributed
only under the terms of the GNU General Public Licence version 2 or later. distcc comes with abso-
lutely no warrany. A copy of the GPL is included in the file COPYING.
AUTHOR
distcc was written by Martin Pool <mbp@sourcefrog.net>, with the co-operation of many scholars
including Wayne Davison, Frerich Raabe, Dimitri Papadopoulos and others noted in the NEWS file.
Please report bugs to <distcc@lists.samba.org>.
23 October 2003 distccd(1)
|