[distcc] Monter un cluster de VM pour réaliser de la cross compilation
|
25-01-2015, 17h00
(Modification du message : 27-01-2017, 18h24 par Junky.)
Message : #1
|
|
Junky
Snorky Master Messages : 228 Sujets : 35 Points: 203 Inscription : Mar 2013 |
[distcc] Monter un cluster de VM pour réaliser de la cross compilation
Bonjour,
Ceci est le premier topic d'une série de deux. Je vous explique vite fait. J'ai dans l'idée de monter un cluster de VM afin de réaliser de la cross compilation pour mon RPI. Avant de me lancer dans cette aventure, j'ai voulu réaliser des tests sur ma machine. Voir si c'est facile de le monter/configurer/tester. Dans un deuxième temps j'expliquerai comment le configurer pour votre RPI. Mais nous réaliserons celui-ci une fois que nous serons certains que l’hôte ne compile rien ou très peu. Je vais essayé de vous détailler au mieux les étapes afin qu'il vous soit facile de le reproduire chez vous. Je me suis inspiré de pas mal de doc sur la toile, essentiellement le wiki Gentoo, car sans vouloir troller il faut avouer qd même qu'il fait partie des meilleurs wikis disponibles sur la toile toutes distribs confondues. Je mettrai ici les démarches spécifiques a Gentoo (excusez moi, mais comme vous le savez je n'utilise que Gentoo niveau personnel). Les seules choses qui vont réellement changer, sont les procédures d'installations. Les configurations ne changeront pas des masses. Allez Allez!!! On attache la ceinture, c'est tipar... 0x01 On dispose de quoi? Existant pour réaliser les tests: - Support: laptop. (UX31E zenbook ASUS) - OS: Gentoo - Virtu: vagant - provider: Virtualbox Bon Support et OS vous comprenez. Pour Virtu, je vais utiliser Vagrant. Alors Vagrant pour ceux qui ne connaissent pas, c'est juste de la balle. Ca vous permet de créer des VM suivant des OS Templates. En gros vous voulez un VM jetable pour la pentester, configurer ou vous amuser avec suicide linux, alors vagrant est l'outil de la situation. Provider est le tools de virtualisation. En faite vagrant ne gère pas les VM a proprement parlé. Il va les créer mais pour les faire tourner, il vous faut un "hyperviseur". Dans mon cas, j'utilise Virtualbox, mais vagrant vous autorise VmWare, aws et bien d'autre. Je vous laisse vous reporter à la doc pour plus de détails sur les provider disponible. 0x02 Installation L'installation de VirtualBox est assez easy sur Gentoo. un simple emerge vous permettra de l'installer. Pour vagrant c'est un peu différent. Vagrant est disponible par défaut dans l'arbre de portage mais il est masqué. Code BASH :
Pour être honnête, j'avais pas envie de le compiler. J'ai recherché sur le net et j'ai trouvé un 'vagrant-bin' disponible dans un overlay gentoo. Il est disponible ici. Il vous suffit donc de rajouter l'overlay dans votre make.conf de recharger portage et de rechercher Code BASH :
Il était en masked aussi, mais un rajout de l'ebuild dans le fichier 'portage/package.unmask' et de votre archi dans le 'portage/package.accept.keywords' résoudra le problème. 0x03 Création des machines virtuelles. Maintenant que nous avons nos outils nous allons commencer par créer nos VM. Dans un premier temps il faut récupérer notre template de VM. Alors la c'est un conseil, vous faites comme vous voulez, mais je vous conseil dans un premier temps de prendre les mêmes distrib que votre distribution d'origine. Pourquoi ? simplement pour éviter d'avoir des grosses différences dans les versions. (J'en parlerai un peu plus tard.) Récupérez un template ici: Code : 0 ✓ silentd@G3nt00 ~ $ cd .vagrant.d/ Ensuite il vous faut créer le 'Vagranfile' Code : 0 ✓ silentd@G3nt00 ~/.vagrant.d $ vagrant init votre/template Editez le 'Vagrantfile' et modifiez le. Je vous poste le miens. Inspirez vous en. Code BASH :
Et démarrez le tout. Code : 0 ✓ silentd@G3nt00 ~/.vagrant.d $ vagrant up La première fois que vagrant va démarrer, le temps est un peu long. En faite il va créer les VM, donc ne vous inquiétez pas. Vous verrez un indicateur de progression en % Voila pour nos VM. Un 'vagrant status' vous donnera des infos sur vos VM. Il vous sera aussi possible de vous connecter sur les VM 'vagrant ssh $VM_HOSTNAME'. Reportez vous a la doc vagrant pour plus d'infos. le mot de passe root est 'vagrant' 0x04 Installation/Configuration distcc Bon comme vous pouvez le devinez, nous allons utiliser 'distcc' pour réaliser nos cross compile. Code : 0 ✓ silentd@G3nt00 ~/.vagrant.d $ emerge -s distcc Installez le et rajoutez le dans openrc au démarrage sur toutes les machines qui devront compiler mais aussi sur la machine pour laquelle nous compilons. Dans mon cas, 'node1', 'node2' et mon 'laptop'. /!\ faites attention au niveau des versions de GCC. Essayez d'avoir les même. D'après la doc distcc, il est possible d'avoir des versions différentes, mais il est aussi possible que ceci provoque des problèmes. Voici ce qu'il recommande: - Même version Ok! (4.4.4 avec 4.4.4) - Même release mais version mineur différente + ou - Ok! (4.4.X avec 4.4.Y) - Le reste oubliez Fail! voici mes versions: Code : vagrant@node1 ~ $ gcc-config -l Configuration des VMs: Par défaut la conf est bien, mais vous devez rajouter l'option '--allow'. C'est pour lister les IP autorisés a ce connecter dans le fichier '/etc/conf.d/distccd' Code : DISTCCD_OPTS="${DISTCCD_OPTS} --allow 192.168.1.0/24" On est bon niveau VM, rien de très compliqué pour le coup. Configuration de l'hôte Il faut rajouter la même option que pour les nodes dans le '/etc/conf.d/distccd' Code : DISTCCD_OPTS="${DISTCCD_OPTS} --allow 192.168.1.0/24" Il faut aussi spécifier les IP des nodes avec lesquels nous désirons travailler. '/etc/distcc/hosts' Code : 0 ✓ silentd@G3nt00 ~/.vagrant.d $ cat /etc/distcc/hosts Editez votre make.conf. Rajoutez ceci: Code : FEATURES="${FEATURES} distcc" Pour le $MAKEOPTS, le M correspond au nombre TOTAL de CPU+1 '(cpu_node1 + cpu_node2 + cpu_laptop)+1'. Pour le N c'est le nombre CPU local c'est a dire dans mon cas le nombre de CPU de mon laptop. Démarrez les distcc sur toutes les machines. Voila nous en avons fini avec la configuration. Elle est assez simple dans l'absolue. Rien de bien compliqué. Nous pouvons lancer un test. Dans mon test j'ai compilé 'wireshark'. Il vous est possible de voir la distribution des taches vi la commande 'distccmon-gui'. Et voici le résultat que j'ai pu observé: Il y a plusieurs couleurs: - vert => compile - violet => connect - bleu => preprocess - rose/rouge => send J'ai pu remarquer que l'hôte travail un peu, ce qui est qd même assez normal, c'est lui qui va créer le config.status, appliquer les patchs, dl les sources ect... Mais ensuite tout ce qui est travail de compilation, il n'en réalise pratiquement pas. Je pense (j'ai pas encore testé) que si on enlève le 127.0.0.1 dans le fichier 'hosts' de distcc l'hôte n'en réalisera pas. Le souci si j'applique cette configuration est que certaines applications ne supporte pas la cross compilation. Donc c'est l'hôte que va devoir tout faire, et si il est pas dans le 'hosts' comment distcc réagi? De plus si les nodes ne sont pas up, comment réagit il aussi. Bref je ferai des tests, et je le posterai afin de voir comment il réagit. 0x05 Conclusion Je me suis pas mal éclaté il faut l'avouer a monter ce petit cluster et voir comment on peut déléguer des taches a d'autre machines de notre parc. Finalement je pense que c'est un très bon exercice, car nous avons tous 2 3 machines et il y en a vraiment qu'une seule de rentable. En faisant ceci, l'idée d'avoir un petit parc perso prend tout son sens. Dans le prochain topic, je montrerai comment configurer votre rpi et tant qu'hôte et j'aurai réalisé les tests que j'explique au dessus. Peut-être que j'arriverai réellement a rien lui faire compiler ce qui sauvegardera un peu plus la SD. N'hésitez a poser des questions sur des conf pour d'autres distrib, je serai ravi de vous aider. Junky, Pour la sécurité, sous linux, le principal soucis est l'interface chaise/clavier
|
|
26-01-2015, 00h03
Message : #2
|
|
Junky
Snorky Master Messages : 228 Sujets : 35 Points: 203 Inscription : Mar 2013 |
RE: [distcc] Monter un cluster de VM pour réaliser de la cross compilation
Je viens de tester sans le 127.0.0.1 dans le fichier '/etc/distcc/hosts' et ca ne pose aucun problème. De plus j'ai down mes nodes pour réaliser un autre test et distcc ne bronche pas. Donc finalement mes 'craintes' si dessus n'avaient pas lieu d'être. Mais bon tant que l'on est pas certain il y a toujours un peu de risque.
Sinon je viens de trouver un programme qui n'utilise pas distcc lorsqu'il est compilé. C'est 'GCC'. En faite pour être exacte distcc est utilisé au début de la compilation, mais ensuite tout est compilé sur l'Hôte et aucunes taches n'est distribués sur les nodes. Junky Pour la sécurité, sous linux, le principal soucis est l'interface chaise/clavier
|
|
29-01-2015, 19h12
Message : #3
|
|
Dobry
Tueur de lamouz Messages : 206 Sujets : 25 Points: 73 Inscription : Aug 2011 |
RE: [distcc] Monter un cluster de VM pour réaliser de la cross compilation
Hey ! Merci pour cet article, mais je suis certain d'avoir saisi le but de Vagrant en fait, en gros tu montes des VM sur ton PC, que tu va par la suite utiliser pour compiler les packets pour ton RPi, mais j'ai du mal à comprendre l'interet de faire 2VM sur le même host, c'était juste une proof of concept ? Ou alors il y a un vrai interet ?
Junky a écrit :'(cpu_node1 + cpu_node2 + cpu_laptop)+1'-> et si la cible était le RPi, t'aurais du mettre '(cpu_node1 + cpu_node2 + cpu_rpi)+1' ?
Aestuārium Erudītiōnis
There are only two hard things in Computer Science: cache invalidation, naming things, and off-by-one errors.
|
|
29-01-2015, 23h49
Message : #4
|
|
Junky
Snorky Master Messages : 228 Sujets : 35 Points: 203 Inscription : Mar 2013 |
RE: [distcc] Monter un cluster de VM pour réaliser de la cross compilation
Bonsoir,
En faite dans ce cas la, vagrant me sert à deux choses. La première et la plus importante j'ai envie de dire, c'est de vous présenter le techno. Je suis me doute clairement que certains membres la connaissent déjà mais certainement d'autre ne la connaissent pas. On monte des VM en deux deux sans trop se casser la tête. La deuxième juste parce que je n'ai pas d'autres machines physiques pour le moment et que si je désire réaliser des tests de cross, il me faut au moins 2 machines. Après je t'accorde qu'il n'y a aucun intérêts de monter la chose dans ce sens la. Mais ne voulant pas faire des tests directment sur le RPI afin de ne pas me planter, ma configuration ne me permettait pas bcp d'autre possibilités. Et puis le screen montre clairement le partage de tâches. Plus lisible avec plusieurs nodes. Dans ma configuration future, c'est mon laptop que compilera pour mon RPI (ou mon vieux desktop). Mais pas de machines virtuelles a propement parlé. Et enfin pour finir de répondre à tes questions, oui lorsque je compilerai pour mon RPI je devrai mettre en place la règle suivante: Code : (cpu_node1 + cpu_node2 + cpu_rpi)+1 Je t’avouerai que j'ai pas lu la doc en profondeur, mais c'est ce qui est stipulé et écrit dedans, donc il y a une raison que j'ignore pour le moment, mais ta question est fort intéressante. Je regarderai plus en détail et si je trouve la raison je la posterai. Ou si des membres la connaissent qu'ils n'hésites pas a le faire. Junky, Pour la sécurité, sous linux, le principal soucis est l'interface chaise/clavier
|
|
« Sujet précédent | Sujet suivant »
|
Sujets apparemment similaires… | |||||
Sujet | Auteur | Réponses | Affichages | Dernier message | |
Un petit script pour voir si machine vérolé | FraKtaL | 2 | 251 |
23-11-2013, 00h36 Dernier message: FraKtaL |
|
[Debian] Solution pour sauvegarder entierement sa distribution | thxer | 19 | 927 |
28-08-2013, 07h43 Dernier message: 0pc0deFR |
|
[Astuce] Monter une image disque sous GNU/Linux | supersnail | 1 | 200 |
12-06-2013, 17h25 Dernier message: thxer |
|
Selection d'outils pour tous os de base ubuntu | thxer | 1 | 167 |
03-04-2013, 22h25 Dernier message: Zhyar |
|
[TROLL-OUPA] Linux pour (très) vieux PC ! | Doliprane | 8 | 543 |
24-03-2013, 00h24 Dernier message: balis |
Utilisateur(s) parcourant ce sujet : 2 visiteur(s)