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 network 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 standard 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 daemontools. 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 listens 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 configuration 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 intentional 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. The range of NICENESS depends on the operating system. On Linux and most Unixes, it is a value from -20 (highest priority) to 0 (regular priority) to 20 (lowest priority). This option is good if you want to run distccd in the background on a machine used for other purposes.

-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 only accepts 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.

--verbose
    Include debug messages in log.

--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-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.

--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 explicitly specified when starting distccd from a script or in a non-interactive ssh connection.

DIAGNOSTICS
distccd logs messages to syslog's daemon facility by default, which normally writes to /var/log/daemon 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-execution PATH. The code that normally tries to remove masquerade directories from the path is skipped. This variable can be used to make the daemon call ccache, which would be eliminated on the assumption that most people want to use ccache before distcc.

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.

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.

LICENCE
You are free to use distcc. It may be copied, modified or distributed only under the terms of the GNU General Public Licence version 2 or later. 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>.