Log in


Forgot your password?
prijatelji LUGoNSa
gnu.gif
linuxzasve.jpg
hulk.jpg
zextras_logo.png
 
You are here: Home / Uputstva / Gentoo/Exherbo / Paludis i distcc

Paludis i distcc

by milobit last modified Sep 05, 2008 12:33 AM
Ovo upustvo će da vam pomogne da još brže kompajlirate pakete i da vam eventualno razjasni neke stvari iz upustva koje je napisao Delboy.

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