Distcc

Perché correre con un catorcio quando si può utilizzare una macchina elaborata?
Bene, sono riuscito a far funzionare distcc come si deve, e cioè il mio pc
presta potenza agli altri della rete.

Ho provato a compilare il kernel 2.4.29 per vedere quanto effettivamente rendesse tale operazione:

  • prima ci metteva circa 25 minuti, è un P3 500 con 128mb di ram
  • dopo l'elaborazione ce ne mette circa 15

Non male vero? Ecco quindi un tutorial di come ho messo in piedi la baracca.

Configurazione server

(tutti i pc della rete che donano potenza in compilazione)

Consiglio di usarlo come demone controllato da inetd, in modo che ogni volta che
il pc riceve una richiesta di cpu sharing, il demone fa tutto da solo, si
attiva, compila e invia gli oggetti compilati. Per fare questo ho aggiunto una
riga in /etc/inetd.conf

distcc stream tcp nowait.6000 hellvis69 /usr/bin/distccd distccd --inetd --allow 192.168.0.0/24

note:

  1. nowait.6000 --> può ricevere solo 6000 richieste x volta, poi droppa
  2. hellvis69 --> il mio utente ;)
  3. --inetd --> funziona sotto controllo di inetd
  4. --allow --> permette richieste solo agli ip provenienti dal range specificato

Poi ovviamente riavviate inetd per rendere effettive le modifiche

  # ps x | grep inetd
  # kill -HUP pid_inetd

Ora il server è pronto, se qualcuno volesse qualche altra opzione basta andare a
vedere il man di distccd.

Configurazione client

(i pc che ricevono la potenza per compilare)

Per prima cosa dobbiamo settare una variabile d'ambiente contenente i server di
compilazione e un alias che specifica di usare la compilazione distribuita. Per
fare ciò vi consiglio di editare direttamente /etc/profile

Andate in fondo al file

# For non-root users, add the current directory to the search path:
if [ ! "`id -u`" = "0" ]; then
   PATH="$PATH:."
fi

e modificate come segue

# For non-root users, add the current directory to the search path:
if [ ! "`id -u`" = "0" ]; then
   PATH="$PATH:."
   export DISTCC_HOSTS="ip_server ip_server2"
   alias maked='make -j8 CC=distcc'
fi

In questo modo direte al sistema di sfruttare la potenza dei pc indicati in
$DISTCC_HOSTS e di usare il make "elaborato da gara", ovvero sostituire gcc con
distcc e di lanciare massimo 8 processi per volta. Questo sistema funziona solo
da utente, se volete usare il NOS anche da root cercate le righe

# For root users, ensure that /usr/local/sbin, /usr/sbin, and /sbin are in
# the $PATH.  Some means of connection don't add these by default (sshd comes
# to mind).
if [ "`id -u`" = "0" ]; then
  echo $PATH | grep /usr/local/sbin 1> /dev/null 2> /dev/null
  if [ ! $? = 0 ]; then
    PATH=/usr/local/sbin:/usr/sbin:/sbin:$PATH
  fi
fi

e aggiungete come prima le 2 righe in questo modo

# For root users, ensure that /usr/local/sbin, /usr/sbin, and /sbin are in
# the $PATH.  Some means of connection don't add these by default (sshd comes
# to mind).
if [ "`id -u`" = "0" ]; then
  echo $PATH | grep /usr/local/sbin 1> /dev/null 2> /dev/null
  if [ ! $? = 0 ]; then
    PATH=/usr/local/sbin:/usr/sbin:/sbin:$PATH
    export DISTCC_HOSTS="ip_server ip_server2"
    alias maked='make -j8 CC=distcc'
  fi
fi

Enjoy ;)

Scritto da HelLViS69