Man Linux: Main Page and Category List


       distccd - distributed C/C++ compiler server


       distccd --daemon [OPTIONS]


       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

       distccd  does  not  have  a  configuration  file;  it’s  behaviour   is
       controlled only by command-line options and requests from clients.


       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


       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


       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

       For  traditional  Unix  inetd,  a  line  like  this  can  be  added  to

              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.


       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.


       --help Display summary usage information.

              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.,  in which case addresses
              that match in the most significant MASK bits  will  be  allowed.
              If   no   --allow  options  are  specified,  distccd  will  exit
              immediately!  Unauthorized connections are rejected  by  closing
              the  TCP  connection  immediately.   A  warning is logged on the
              server but nothing is sent to the client.

       --job-lifetime SECONDS
              Kills a distccd job if it runs for more  than  SECONDS  seconds.
              This prevents denial of service from clients that don’t properly
              disconnect and compilers that fail to terminate. By default this
              is turned off.

              Do not detach from the shell that started the daemon.

              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

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

              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.

              Include debug messages in log.  Equivalent to --log-level=debug

              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.

              Turn on the statistics  HTTP  server.  By  default  it  is  off.
              (Daemon mode only.)

       --stats-port PORT
              Set the TCP port to listen on for HTTP requests, rather than the
              default of 3633.  (Daemon mode only.)

              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.

              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.

              Register  the  availability  of  this distccd server using Avahi
              Zeroconf DNS Service Discovery  (DNS-SD).   This  allows  distcc
              clients  on  the  local  network  to  access this distccd server
              without explicitly listing its host name or IP address in  their
              distcc host list: the distcc clients can just use "+zeroconf" in
              their distcc host lists.   This  option  is  only  available  if
              distccd was compiled with Avahi support enabled.


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


       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.


              If the environment variable DISTCC_CMDLIST is set, load  a  list
              of supported commands from the file named by DISTCC_CMDLIST, and
              refuse to serve any command whose last DISTCC_CMDLIST_MATCHWORDS
              last  words  do  not match those of a command in that list.  See
              the comments in src/serve.c.

              The number of words, from the end of the command, to match.  The
              default is 1.

              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

              If set to 1, temporary files are not deleted after use.

       Note that DISTCC_LOG does  not  affect  the  log  destination  for  the

              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.


       distcc(1),  pump(1), include_server(1), gcc(1), make(1), and  ccache(1)


       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.


       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 absolutely no
       warrany.  A copy of the GPL is included in the file COPYING.


       distcc was written by Martin Pool <>,  with  the  co-
       operation  of  many  scholars  including  Wayne Davison, Frerich Raabe,
       Dimitri Papadopoulos and others noted in the NEWS  file.   See  pump(1)
       for    the   authors   of   pump   mode.    Please   report   bugs   to

                                  9 June 2008                       distccd(1)