View previous topic :: View next topic |
Author |
Message |
moe Veteran
Joined: 28 Mar 2003 Posts: 1289 Location: Potsdam / Germany
|
Posted: Sat Feb 03, 2007 4:47 pm Post subject: automatisches DISTCC-Setup für paludis |
|
|
Vorwort
Paludis ist eine Alternative zu portage.
Distcc verteilt die Kompilierarbeit auf mehrere Rechner.
Mit "automatischem DISTCC-Setup" meine ich, dass der Rechner zuerst guckt, ob Rechner mit laufendem distccd im Netzwerk vorhanden sind, und dann dementsprechend paludis für distcc Benutzung einrichtet.
Dazu werden alle privaten Netzwerke die in der Routingtabelle stehen, nach aktiven Hosts gescannt, und die aktiven auf den offenen distcc-Port geprüft. Da diese Scannerei pro 24er-Netz mind. 15s dauert, wird das Ergebnis 10 Minuten gecached (konfigurierbar).
Sinn und Zweck ist mit meinem Laptop an verschiedenen Standorten die dort verfügbaren distccd-Server zu nutzen
Bugs/Warnungen
- Auf dem ausführenden Rechner darf der distccd selbst nicht laufen, sonst wird jede lokale Adresse auf der distccd lauscht den DISTCC_HOSTS zugefügt.
- in manchen Netzwerken gilt ein Portscan als böser Angriff
- in öffentlichen Netzen könnten manipulierte distccds laufen, die bösen Code einschleusen
- das Script dürfte nur mit Rootrechten laufen
- jedes Netz aus der Routingtabelle wird als /24er Netz betrachtet.
Das Script wird in /etc/paludis/bashrc abgelegt. Laut Doku wird die bashrc "sourced":
Quote: | Paludis will source bashrc when doing ebuild work. | Momentan (paludis-0.16.2) stimmt das nicht ganz, die bashrc wird ausgeführt, sollte diese Datei in späteren Versionen wirklich nur "gesourced" werden, wird das Skript nicht mehr funktionieren.
Voraussetzungen
Neben paludis und distcc wird net-analyzer/hping und net-analyzer/fping benötigt.
das Skript
/etc/paludis/bashrc wie folgt ergänzen (ergänzen, nicht ersetzen!):
Code: | export MAKEOPTS="-j2"
# automatisches distcc-setup
TMPFILE=/var/tmp/distcchosts
CACHETIME=600 # 10 Minuten
DATE=`date +%s`
if [ ! -f ${TMPFILE} ]; then
touch ${TMPFILE}
FDATE=1
else
FDATE=`stat -c %Y ${TMPFILE}`
fi
if [ $((${DATE}-${FDATE})) -gt ${CACHETIME} ]; then
echo -n "Suche nach DISTCC Daemonen"
NETWORKS=`route -n | cut -d " " -f 1 | grep '^10\|^172.16\|^192.168' | sed s/$/'\/24'/`
for i in ${NETWORKS}; do
echo -n "."
HOSTS="${HOSTS} `fping -a -q -r 1 -i 1 -t 1 -g $i 2>/dev/null`"
done
DHOSTS="localhost"
for i in ${HOSTS}; do
hping -p 3632 -c 1 -S --tcpexitcode -q $i >/dev/null 2>&1
if [ $? -eq 18 ];then DHOSTS="${DHOSTS} $i"; fi
echo -n "."
done
echo $DHOSTS > ${TMPFILE}
else
echo -n "Benutze gecachte DISTCC-Daemonen"
DHOSTS=`cat ${TMPFILE}`
fi
NUM_DHOSTS=`echo ${DHOSTS} | wc -w`
if [ $NUM_DHOSTS -gt 1 ]; then
echo -e "\n\tAktiviere Distcc mit ${DHOSTS}"
export DISTCC_HOSTS="${DHOSTS}"
export DISTCC_DIR="/var/tmp/paludis/.distcc"
export PATH="/usr/lib/distcc/bin:${PATH}"
export CC="/usr/lib/distcc/bin/gcc"
export CXX="/usr/lib/distcc/bin/g++"
export MAKEOPTS="-j$((${NUM_DHOSTS}*2))"
fi
|
Die Benutzung von paludis ist unverändert, wenn man sehen wil ob und wie distcc arbeitet:
Code: | DISTCC_DIR="/var/tmp/paludis/.distcc" distccmon-text 2 |
Oder distccmon-gtk, wenn distcc mit USE="gtk" installiert wurde.
Das Skript ist teilweise ein wenig dirty, Verbesserungen (insbes. die o.g. Bugs) sind willkommen!
HTH Maurice |
|
Back to top |
|
|
think4urs11 Bodhisattva
Joined: 25 Jun 2003 Posts: 6659 Location: above the cloud
|
Posted: Sat Feb 03, 2007 8:46 pm Post subject: Re: automatisches DISTCC-Setup für paludis |
|
|
Deine Netzerkennung funktioniert nicht so ganz
- es wird immer /24 angenommen wie du schon sagst
- es funktioniert nicht in Netzen <> .0 im letzten Oktet
- 172.17-31.x.y werden nicht berücksichtigt
- die armen Menschen mit offiziellen eigenen IPs haben verloren (solls ja geben)
Code: | fping -a -q -r 1 -i 1 -t 1 -g `ip r s| sed '/ ppp./d;/ lo /d;s/^\(.*\/[0-9]\{1,2\}\).*$/\1/'` |
localhost wird, d.h. ein lokal laufender distccd stört nicht.
*edit* nicht funktionierende Variante mittels 'ip a' statt 'ip r s' entfernt _________________ Nothing is secure / Security is always a trade-off with usability / Do not assume anything / Trust no-one, nothing / Paranoia is your friend / Think for yourself
Last edited by think4urs11 on Sun Feb 04, 2007 12:31 am; edited 1 time in total |
|
Back to top |
|
|
moe Veteran
Joined: 28 Mar 2003 Posts: 1289 Location: Potsdam / Germany
|
Posted: Sun Feb 04, 2007 12:02 am Post subject: |
|
|
Danke, hab ja gesagt dass es teils dirty ist, hab mich zum ersten mal mit [fh]ping beschäftigt..
Aber woher bekomme ich 'ip' ? Ich dachte an iproute2 aber da ist es nicht drinnen.. |
|
Back to top |
|
|
think4urs11 Bodhisattva
Joined: 25 Jun 2003 Posts: 6659 Location: above the cloud
|
Posted: Sun Feb 04, 2007 12:05 am Post subject: |
|
|
Code: | # equery belongs `which ip`
[ Searching for file(s) /sbin/ip in *... ]
sys-apps/iproute2-2.6.16.20060323 (/sbin/ip) |
_________________ Nothing is secure / Security is always a trade-off with usability / Do not assume anything / Trust no-one, nothing / Paranoia is your friend / Think for yourself |
|
Back to top |
|
|
gringo Advocate
Joined: 27 Apr 2003 Posts: 3793
|
Posted: Tue Feb 06, 2007 10:05 am Post subject: |
|
|
ich bin jetzt nicht vor meinem Rechner aber ich habe dies hier etwas angepasst und es funktioniert gar nicht schlecht _________________ Error: Failing not supported by current locale |
|
Back to top |
|
|
|