Paludis i distcc
Distcc (distributed C/C++ compiler) je alat koji omogućava kompajliranje na udaljenim računarima u mreži. Sastoji se iz 2 dela, servera (distccd) i klijenta (distcc). Da bi lakše mogli da shvatite kako ovo fukncioniše za primer ću uzeti dva računara. Lapotop na kome treba sve da se kompajlira (client) i desktop koji će da pruža pomoć laptop-u (server). Laptop i desktop mašine nalaze se u lokalnoj mreži, desktop mašina ima 192.168.10.150 IP adresu a laptop 192.168.10.250.
Na obe mašine su instalirane iste verzije toolchain-a (JAKO bitno) te na obe mašine prvo instaliramo paket sys-devel/distcc.
# paludis -i sys-devel/distcc
Posle uspešne instalacije distcc-a, prvo nameštamo server. Podešavanje servera se vrši u /etc/conf.d/distccd. Evo kako taj fajl izgleda:
# /etc/conf.d/distccd: config file for /etc/init.d/distccd
DISTCCD_OPTS=""
# this is the distccd executable
DISTCCD_EXEC="/usr/bin/distccd"
# this is where distccd will store its pid file
DISTCCD_PIDFILE="/var/run/distccd/distccd.pid"
# set this option to run distccd with extra parameters
# Default port is 3632. For most people the default is okay.
DISTCCD_OPTS="${DISTCCD_OPTS} --port 3632"
# Logging
# You can change some logging options here:
# --log-file FILE
# --log-level LEVEL [critical,error,warning, notice, info, debug]
#
# Leaving --log-file blank will log to syslog
# example: --log-file /dev/null --log-level warning
# example: --log-level critical
DISTCCD_OPTS="${DISTCCD_OPTS} --log-level critical"
# SECURITY NOTICE:
# It is HIGHLY recomended that you use the --listen option
# for increased security. You can specify an IP to permit connections
# from or a CIDR mask
# --listen accepts only a single IP
# --allow is now mandatory as of distcc-2.18.
# example: --allow 192.168.0.0/24
# example: --allow 192.168.0.5 --allow 192.168.0.150
# example: --listen 192.168.0.2
DISTCCD_OPTS="${DISTCCD_OPTS} --allow 192.168.10.0/24"
#DISTCCD_OPTS="${DISTCCD_OPTS} --listen 192.168.0.2"
# set this for niceness
# Default is 15
DISTCCD_NICE="15"
Opcija DISTCCD_OPTS="${DISTCCD_OPTS} --allow 192.168.10.0/24" nam govori da je na server dozvoljen pristup svakoj IP adresi iz 192.168.10.0 opsega, što je inače moja kućna mreža. Pošto je konfiguracija servera završena, server startujemo sledećom naredbom:
# /etc/init.d/distccd start
U slučaju da pri svakom startovanju računara želite da se distccd server automacki startuje, možete uraditi sledećom naredbom:
# rc-update add distccd default
Pošto smo server upešno konfigurisali i startovali ostaje nam jos da podesimo ditcc klient na laptop-u. Podešavanje clinet-a vrši se u /etc/paludis/bashrc fajlu.
# bashrc
# This file created by portage2paludis.bash
CHOST="x86_64-pc-linux-gnu"
CFLAGS="-O2 -march=core2 -mtune=core2 -fomit-frame-pointer -frename-registers -momit-leaf-frame-pointer -pipe -Wno-error"
CXXFLAGS="${CFLAGS}"
LDFLAGS="-Wl,-O1 -Wl,--hash-style=gnu -Wl,--sort-common -s"
SKIP_FUNCTIONS="test"
MAKEOPTS="-j6"
WANT_MP="true"
# ccache
PATH="/usr/lib/ccache/bin/:${PATH}"
CCACHE_DIR="/var/tmp/ccache"
SANDBOX_WRITE="${SANDBOX_WRITE}:${CCACHE_DIR}"
# distcc
DISTCC_DIR="/var/tmp/paludis/.distcc"
DISTCC_HOSTS="192.168.10.150 192.168.10.150 192.168.10.150 192.168.10.150 localhost localhost"
PATH="/usr/lib/distcc/bin:${PATH}"
SANDBOX_WRITE="${SANDBOX_WRITE}:${DISTCC_DIR}"
Napomene:
- Opcija MAKEOPTS treba da se promeni u zavisnosti od broja procesora, j6 kod mene znači 2xCPUza laptop (core2duo) i 4xCPU za desktop (intel quad core)
- Opcija DISTCC_HOSTS označava koje mašine će kompajirati. 4x ista IP adresa je samo zbog toga sto imam 4 jezgra i prvo se njima šalje sve pa tek na kraju na lapatop (localhost)
Posle ovoga, ostalo je još samo da napravimo .distcc direktorijum i da mu promenimo vlasnika
# mkdir /var/tmp/paludis/.distcc
# chown paludisbuild.paludisbuild /var/tmp/paludis/.distcc
Pošto smo sve sredili vreme je da probamo da li to fukncionise kako smo i zamislili. Pošto hoću da prekompajliram ceo sistem startovao sam paludis komandu za to:
# paludis -i --dl-reinstall always --continue-on-failure if-satisfied everything
Da bih bio siguran da obe mašine rade svoj posao na dektopu (server) sam startovao sledeću naredbu da bi mogao da pratim da li je sve u redu.
# watch -n 1 'ps ax | grep cc'
U koliko želite da server bude na x86_64 mašini a klijent na x86, potrebno je da uradite par sledećih koraka. Prvo, da napravite skriptu /usr/bin/i686-pc-linux-gnu-gcc:
#!/bin/bash
GCC=`basename $0`
x86_64${GCC/i686} $@ -m32
Ovim se forsira da svaki poziv /usr/bin/i686-pc-linux-gnu-gcc bude sa -m32 (32bitna arhitektura). Pored ovoga, potrebno je napraviti nekoliko simboličkih linkova koji pokazuju na /usr/bin/i686-pc-linux-gnu-gcc. Linkovi su:
i686-pc-linux-gnu-c++
i686-pc-linux-gnu-cc
i686-pc-linux-gnu-g++
i686-pc-linux-gnu-cpp
Ukoliko je potrebno da bilo koja druga arhitektura kompajlira za bilo koju drugu arhitekturu (skoro), treba Vam cross compiling.
Koristan link:
Document Actions