C'est ce que propose Distcc qui permet de compiler des sources sur plusieurs machines. Cependant distcc nécessite de déclarer l'ensemble des serveurs pouvant accueillir la compilation, ce qui est lourd pour une architecture réseau mouvante...
DMUCS apporte une réponse à ce problème en proposant un serveur central de référencement pour distcc. Je vais donc vous présenter distcc, puis crossdev et enfin DMUCS.
Distcc
Distcc est un programme pour réaliser des compilations distribuées de code en C, C++, Objective C ou Objective C++, sur plusieurs machines au travers d'un réseau. Distcc doit en principe générer le même résultat qu'une compilation locale, il est simple à installer et sa configuration n'est pas très compliquée. Ce système permet normalement de réaliser des compilations plus rapidement.
Comment cela fonctionne t-il ? eh bien, relativement simplement :
- Vous téléchargez distcc.
- Vous le compilez, l'installez via l'incontournable "triptyque" ./configure,make,make install
- Pour les serveurs de compilations (ceux qui vont donc effectuer les compilations) lancez distccd --daemon (utilisez --allow adressIpClient1 adressIpClient2 ... si vous souhaitez n'autoriser que les machines listées).
- Pour les machines qui vont lancer des compilations il faut ici lancer la commande
distcc-config --set-hosts adresseIpSrv1 adresseIpSrv2 etc.
- Ensuite il faut compléter quelques variables d'environnement:
- DISTCC_LOG="/var/log/distcc" (c'est un exemple)
- DCCC_PATH="/usr/lib/distcc/bin"
- DISTCC_VERBOSE="0"
- DISTCC_DIR="/var/tmp/distcc" (c'est un exemple)
pour créer ces variables vous pouvez faire export DCCC_PATH="/usr/lib/distcc/bin". Ou les placer comme ci dessus dans un script ou dans les fichiers d'environnement.
- DISTCC_LOG="/var/log/distcc" (c'est un exemple)
- Ensuite il suffit de lancer une compilation (je rappelle que les clients peuvent aussi faire office de serveur) et de vérifier que tout se passe bien avec distccmon-text 5
Crossdev
Crossdev permet de compiler des application 64 bits, powerpc, sparc ou autres sur une machine x86. L'inverse est aussi vrai pour les autres architectures. Crossdev nécessite que gcc soit déjà installé.
Pour l'installation de crossdev le principe est habituel. On télécharge le tar.gz puis on le décompresse, ./configure && make && make install. Une fois installé, on exécute crossdev -t x86_64-pc-linux-gnu-gcc pour activer par exemple le support 64 bits à la compilation.
DMUCS
DMUCS est un système qui permet à un groupe d'utilisateurs de partager ses compilations avec les autres de façon dynamique. Concernant ce dernier, je n'ai pas réussi à le compiler (il semblerait qu'il y ait quelques erreurs dans les scripts d'installation), cependant c'est un projet prometteur.
Comment installer DMUCS?
- Téléchargez les sources...
- ./configure, puis make CPPFLAGS=-DSERVER_MACH_NAME=\\\”\\\”,
et enfin, make install
- Créez ensuite le fichier /usr/local/share/dmucs/hosts-info contenant quelque chose comme ceci:
#machine number-of-cpus power-index
linux-comp-1 4 10
solaris-comp-1 2 5
solaris-comp-2 2 5
old-linux-comp-1 1 4
old-solaris-comp-3 1 2
169.144.80.25 1 2
- lancez dmucs sur votre serveur.
- sur les clients, lancez loadavg puis distccd
- sur le serveur l'exécutable dmucs doit vous montrer les clients qui se connectent.
- Ensuite, il ne reste plus qu'à lancer la compilation.
DMUCS n'est pas encore au point, mais c'est un projet à surveiller.
P.S. : comme vous pourrez le constater la documentation Gentoo est très au point concernant ce système et vous pouvez trouver plus d'information sur les wikis français et anglais
Aller plus loin
- DMUCS (30 clics)
- DISTCC (24 clics)
- Gentoo Documentation (15 clics)
- Gentoo Compilation croisée (20 clics)
- Crossdev (8 clics)
# DMUCS, pourquoi faire?
Posté par mister popo ポポ (site web personnel) . Évalué à 4.
Avahi, le maitre du zeroconf sous Linux propose même des lib de compatibilité pour les projets developpé avec howl ou autre implementation zeroconf. Donc, plutot que d'utiliser un serveur centrale qui compile pas, un bon zeroconf me semble plus sain.
[^] # Re: DMUCS, pourquoi faire?
Posté par Antoine . Évalué à 5.
# En fait DMUCS...
Posté par neriki (site web personnel) . Évalué à 10.
"Aidons les gentooiste à ne pas passer 7 mois à mettre à jour OO.org!" :o)
[^] # Re: En fait DMUCS...
Posté par undeuxtroisout . Évalué à -10.
$ genlop -t openoffice
Sat Jul 8 01:33:21 2006 >>> app-office/openoffice-2.0.3
merge time: 3 hours, 31 minutes and 57 seconds.
sans distcc, ou toute autre méthode de compilation distribuée
[^] # Re: En fait DMUCS...
Posté par Antoine . Évalué à 1.
# distcc pas toujours avantageux
Posté par Laurent J (site web personnel, Mastodon) . Évalué à 4.
Utiliser un truc comme distcc n'est avantageux que pour un ensemble de machines esclaves de puissances équivalentes (ou plus puissantes) que la machine maîtresse.
[^] # Re: distcc pas toujours avantageux
Posté par or zax . Évalué à 3.
La latence réseau impact beaucoup plus en terme d'efficacité
[^] # Re: distcc pas toujours avantageux
Posté par Yannick P. . Évalué à 2.
C'est pour ca que je ne m'étais pas interessé à ce genre de solutions pour compiler KDE pour mes trois machines sous Gentoo...
[^] # Re: distcc pas toujours avantageux
Posté par Geo Vah . Évalué à 1.
C'est un peu plus rapide quand meme !
Par contre pour des fermes de compilations, ce n'est pas trop le truc ...(Peut-etre plus avec ccache ? pourquoi l'article n'en parle pas ... :-( )
[^] # Re: distcc pas toujours avantageux
Posté par Alexandre CABROL PERALES . Évalué à 1.
Mais je l'utilise!!!
P.S.: distcc+crossdev marche trés bien en compile entre mon i686 et mon x86_64 c'est même étonnant.
[^] # Re: distcc pas toujours avantageux
Posté par octane . Évalué à 2.
Genre, j'ai un monopro, en distant il y a un bipro et un autre monopro, je vais compiler avec du make -j 5 ou 6.
Et le frontend graphique avec les petites courbes qui avancent, ca c'est vraiment un truc sympa.
Le probleme, c'est effectivement la latence reseau. On peut tester avec netPipe pour mesurer ces latences.
[^] # Re: distcc pas toujours avantageux
Posté par Nicolas Boulay (site web personnel) . Évalué à 2.
Si tout est "a plat", logiquement tous les *.c sont compilables séparement et donc en parrallèle. Reste ensuite le link.
"La première sécurité est la liberté"
# autre alternative: icecream
Posté par Fathi BOUDRA . Évalué à 3.
icecream (http://en.opensuse.org/Icecream)
[^] # Re: autre alternative: icecream
Posté par Philippe F (site web personnel) . Évalué à 2.
La page web: http://en.opensuse.org/Icecream
(l'url du commentaire plus haut a une parenthese en trop)
Petite copie de la partie interessante :
============================================
I use distcc, why should I change?
If you're sitting alone home and use your partner's computer to speed up your compilation and both these machines run the same Linux version, you're fine with distcc (as 95% of the users reading this chapter will be, I'm sure). But there are several situations, where distcc isn't the best choice:
* you're changing compiler versions often and still want to speed up your compilation (see the ICECC_VERSION support)
* you got some neat PPC laptop and want to use your wife's computer that only runs intel (see the cross compiler section)
* you don't know what machines will be on-line at compile time.
* most important: you're sitting in a office with several co-workers that do not like if you overload their workstations when they play doom (distcc doesn't have a scheduler)
* you like nice compile monitors :)
============================================
[^] # Re: autre alternative: icecream
Posté par Alexandre CABROL PERALES . Évalué à 1.
http://en.opensuse.org/Icecream
je ne posséde pas de suse ou opensuse donc je vais trés rarement voir jamais sur ce site et google ne m'a pas conduit là pour la compilation distribué.
Et pourquoi la doc gentoo? parceque je n'ai que des gentoo et que je m'occupe de http://fr.gentoo-wiki.org
emerge --search icescream
Searching...
[ Results for search key : icescream ]
[ Applications found : 0 ]
[^] # Re: autre alternative: icecream
Posté par Sylvain Briole (site web personnel) . Évalué à 3.
Cachez ce s que je ne saurais voir!
emerge --search icescream
Searching...
[ Results for search key : icescream ]
[ Applications found : 0 ]
# Question de béotien flémard : quid des sources ?
Posté par Bonnefille Guilhem (site web personnel) . Évalué à 2.
Si quelqu'un a la réponse (et je pense que vous êtes nombreux vu les retours d'expérience exprimés).
[^] # Re: Question de béotien flémard : quid des sources ?
Posté par Alexandre CABROL PERALES . Évalué à 2.
Si ça ne répond pas à ta question merci de préciser.
[^] # Re: Question de béotien flémard : quid des sources ?
Posté par Bonnefille Guilhem (site web personnel) . Évalué à 2.
Effectivement, j'aurais besoin d'une précision.
Le transfert des sources (et des résultats de compilation) est-il fait via un protocole spécifique (fait main) ?
Pourquoi ma question ? Parce qu'aujourd'hui il y a plusieurs solutions pour synchroniser des arborescences (NFS, rsync...). Je voulais donc savoir si distcc utilisait ce genre de techno ou si il refaisait lui-même le boulot.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.