• STATISTIQUES
  • Il y a eu un total de 0 membres et 27432 visiteurs sur le site dans les dernières 24h pour un total de 27 432 personnes!
    Membres: 2 605
    Discussions: 3 579
    Messages: 32 816
    Tutoriels: 78
    Téléchargements: 38
    Sites dans l'annuaire: 58


  • ANNUAIRE
  • [FR] Microcontest
    Cryptographie: 7, Mathématiques: 8, Image Son Vidéo: 5, Intelligence artificielle: 3, Réseau: 2, Divers: 7, Phy...
    Challenges
    [EN] xda-developers
    Très bon site pour les gros bidouilleurs de smartphone de windows à androïd et de Apple jusqu'...
    Phreaking
    [FR] PHP France
    Pour tout savoir sur le PHP, en français. Vous trouverez des tutoriels, des exemples, des astuces, toute la do...
    Hacking
    [FR] Zenk-Security
    La communauté zenk-security a pour objet principal la sécurité informatique, nous sommes des tou...
    Hacking
    [FR] Root-me
    Script: 5, Système: 20, Cracking: 16, Cryptanalyse: 17, Programmation: 8, Réaliste: 11, Réseau: 10, Stéganog...
    Challenges
    [FR] Le top web
    Nous offrons une sélection la plus large possible de resources webmaster gratuites, hébergement gratuit...
    Webmaster
    [FR] Forum-Webmaster
    Une communauté webmaster pour apporter / recevoir de l'aide en création de site internet. Webmaster...
    Webmaster

  • DONATION
  • Si vous avez trouvé ce site internet utile, nous vous invitons à nous faire un don du montant de votre choix via Paypal. Ce don servira à financer notre hébergement.

    MERCI!




Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
[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 Hors ligne
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 :

0 ✓ silentd@G3nt00 ~ $ emerge -s vagrant
Searching...    
[ Results for search key : vagrant ]
[ Applications found : 1 ]

*  app-emulation/vagrant [ Masked ]
      Latest version available: 1.4.3-r2
      Latest version installed: [ Not Installed ]
      Size of files: 2 336 KiB
      Homepage:      http://vagrantup.com/
      Description:   A tool for building and distributing virtual machines using VirtualBox
      License:       MIT


 


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 :

0 ✓ silentd@G3nt00 ~ $ emerge -s vagrant
Searching...    
[ Results for search key : vagrant ]
[ Applications found : 2 ]

*  app-emulation/vagrant [ Masked ]
      Latest version available: 1.4.3-r2
      Latest version installed: [ Not Installed ]
      Size of files: 2 336 KiB
      Homepage:      http://vagrantup.com/
      Description:   A tool for building and distributing virtual machines using VirtualBox
      License:       MIT

*  app-emulation/vagrant-bin
      Latest version available: 1.7.2
      Latest version installed: 1.7.2
      Size of files: 68 876 KiB
      Homepage:      http://vagrantup.com/
      Description:   Tool for building and distributing virtual machines
      License:       MIT

 


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/
0 ✓ silentd@G3nt00 ~/.vagrant.d $ vagrant box add votre/Template

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 :

0 ✓ silentd@G3nt00 ~/.vagrant.d $ cat Vagrantfile
# Configuration Cluster distcc

nodes = [
    { :hostname => 'node1', :ip => '192.168.1.81', :box => 'cmiles/gentoo-amd64-minimal', :ram => 512},
    { :hostname => 'node2', :ip => '192.168.1.82', :box => 'cmiles/gentoo-amd64-minimal', :ram => 512 }
]

Vagrant::Config.run do |config|
    nodes.each do |node|
        config.vm.define node[:hostname] do |node_config|
            node_config.vm.box = node[:box]
            node_config.vm.host_name = node[:hostname]
            node_config.vm.network :bridged , node[:ip]

        end
    end
end

 


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.

Exclamation 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
Searching...    
[ Results for search key : distcc ]
[ Applications found : 2 ]

*  sec-policy/selinux-distcc
      Latest version available: 2.20141203-r1
      Latest version installed: [ Not Installed ]
      Size of files: 923 KiB
      Homepage:      https://wiki.gentoo.org/wiki/Project:SELinux
      Description:   SELinux policy for distcc
      License:       GPL-2

*  sys-devel/distcc
      Latest version available: 3.1-r10
      Latest version installed: 3.1-r10
      Size of files: 576 KiB
      Homepage:      http://distcc.org/
      Description:   Distribute compilation of C code across several machines on a network
      License:       GPL-2

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
[1] x86_64-pc-linux-gnu-4.8.3 *

vagrant@node2 ~ $ gcc-config -l
[1] x86_64-pc-linux-gnu-4.8.3 *

0 ✓ silentd@G3nt00 ~/.vagrant.d $ gcc-config -l
[1] x86_64-pc-linux-gnu-4.7.3
[2] x86_64-pc-linux-gnu-4.8.3 *

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
# --- /etc/distcc/hosts -----------------------
# See the "Hosts Specification" section of
# "man distcc" for the format of this file.
#
# By default, just test that it works in loopback mode.
127.0.0.1 192.168.1.157 192.168.1.178

Editez votre make.conf. Rajoutez ceci:

Code :
FEATURES="${FEATURES} distcc"
MAKEOPTS="-jM -lN"
DISTCC_DIR="/var/tmp/portage/.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é. Smile

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é:

[Image: distcc.png]

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. Smile


Junky,
Pour la sécurité, sous linux, le principal soucis est l'interface chaise/clavier

+1 (6) -1 (0) Répondre
26-01-2015, 00h03
Message : #2
Junky Hors ligne
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

+1 (2) -1 (0) Répondre
29-01-2015, 19h12
Message : #3
Dobry Hors ligne
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.
+1 (0) -1 (0) Répondre
29-01-2015, 23h49
Message : #4
Junky Hors ligne
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. Smile

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. Smile

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. Smile

Junky,
Pour la sécurité, sous linux, le principal soucis est l'interface chaise/clavier

+1 (0) -1 (0) Répondre


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

Atteindre :


Utilisateur(s) parcourant ce sujet : 3 visiteur(s)
N-PN
Accueil | Challenges | Tutoriels | Téléchargements | Forum | Retourner en haut