Puppet et Raspberry PI

Billet posté le 24 août 2014

J’écris cet article car j’ai rencontré quelques soucis pour installer puppet sur Raspberry PI.

Tout d’abord c’est quoi puppet ?

L’idée c’est de pouvoir faire de la conformité de configuration. Ou dit autrement, s’assurer que la dernière version du fichier déposé sur un serveur est bien la bonne version. Et que ce fichier est bien le même sur l’ensemble des serveurs gérés par vos soins. Je m’arrête là dans la description, puppet fait beaucoup de choses en plus bien entendu.

Pourquoi cet article du coup ? Il faut savoir que le Raspberry PI utilise un processeur ARM. Et à la question qu’est-ce qu’on en a à foutre ? Hé ben c’est que puppet est mal packagé pour ce type de processeur. Et il y a notamment une dépendance totalement foireuse vers le package dmidecode.

Dmidecode permet d’agréger des données venant du hardware, du bios etc. Sauf que… ben dmidecode n’a pas vocation a existé sur architecture ARM. Et là c’est le drame. Car on veut installer un package qui refuse de s’installer car il a besoin de dmidecode.

La solution ? Elle est décrite ici en anglais : http://blog.csanchez.org/2014/01/23/installing-puppet-3-in-a-beaglebone-or-raspberry-pi/

Je me propose d’y apporter le détail en français et un peu plus à jour car l’article de référence date de tout début 2014. Bon c’est quand que la CLI arrive ? Ok, voilà voilà.

Mon Raspberry PI est sous Debian 7 wheezy.

lsb_release -a
wget https://apt.puppetlabs.com/puppetlabs-release-wheezy.deb
dpkg -i puppetlabs-release-wheezy.deb
apt-get update

Et c’est à partir de maintenant que ça commence à devenir fun car :

root@rpi:~# apt-get install puppet
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances       
Lecture des informations d'état... Fait
Certains paquets ne peuvent être installés. Ceci peut signifier
que vous avez demandé l'impossible, ou bien, si vous utilisez
la distribution unstable, que certains paquets n'ont pas encore
été créés ou ne sont pas sortis d'Incoming.
L'information suivante devrait vous aider à résoudre la situation :

Les paquets suivants contiennent des dépendances non satisfaites :
 puppet : Dépend: puppet-common (= 3.6.2-1puppetlabs1) mais ne sera pas installé
E: Impossible de corriger les problèmes, des paquets défectueux sont en mode « garder en l'état ».
root@rpi:~#

Du coup on peut tenter un petit :

apt-get install puppet puppet-common facter
The following packages have unmet dependencies:
facter : Depends: dmidecode but it is not installable
E: Unable to correct problems, you have held broken packages.

Va falloir renconstruire le .deb, oui merci ça fait trop plaisir.

wget http://apt.puppetlabs.com/pool/precise/main/f/facter/facter_1.7.0-1puppetlabs1.debian.tar.gz
wget http://apt.puppetlabs.com/pool/precise/main/f/facter/facter_1.7.0.orig.tar.gz
tar xvfz facter_1.7.0.orig.tar.gz
cd facter-1.7.0/
tar xvfz ../facter_1.7.0-1puppetlabs1.debian.tar.gz
apt-get install devscripts
apt-get install cdbs
debian/rules binary

On procède à l’installation :

root@rpi:~/toto# dpkg -i facter_1.7.0-1puppetlabs1_armhf.deb
Sélection du paquet facter précédemment désélectionné.
(Lecture de la base de données... 59119 fichiers et répertoires déjà installés.)
Dépaquetage de facter (à partir de facter_1.7.0-1puppetlabs1_armhf.deb) ...
dpkg: des problèmes de dépendances empêchent la configuration de facter :
 facter dépend de virt-what ; cependant :
  Le paquet virt-what n'est pas installé.

dpkg: erreur de traitement de facter (--install) :
 problèmes de dépendances - laissé non configuré
Traitement des actions différées (« triggers ») pour « man-db »...
Des erreurs ont été rencontrées pendant l'exécution :
 facter
root@rpi:~/toto# apt-get -f install
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances       
Lecture des informations d'état... Fait
Correction des dépendances... Fait
Les paquets supplémentaires suivants seront installés :
  virt-what
Les NOUVEAUX paquets suivants seront installés :
  virt-what
0 mis à jour, 1 nouvellement installés, 0 à enlever et 0 non mis à jour.
1 partiellement installés ou enlevés.
Il est nécessaire de prendre 12,5 ko dans les archives.
Après cette opération, 65,5 ko d'espace disque supplémentaires seront utilisés.
Souhaitez-vous continuer [O/n] ?
Réception de : 1 http://raspbian.sconde.net/raspbian/ wheezy/main virt-what armhf 1.12-1 [12,5 kB]
12,5 ko réceptionnés en 0s (47,2 ko/s)
Sélection du paquet virt-what précédemment désélectionné.
(Lecture de la base de données... 59235 fichiers et répertoires déjà installés.)
Dépaquetage de virt-what (à partir de .../virt-what_1.12-1_armhf.deb) ...
Traitement des actions différées (« triggers ») pour « man-db »...
Paramétrage de virt-what (1.12-1) ...
Paramétrage de facter (1.7.0-1puppetlabs1) ...
root@rpi:~/toto#

Et on peut enfin (!) procéder à l’installation de puppet :

root@rpi:~/toto# apt-get install puppetmaster
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances
Lecture des informations d'état... Fait
Les paquets supplémentaires suivants seront installés :
  puppetmaster-common
Paquets suggérés :
  puppet-el vim-puppet stompserver ruby-stomp libstomp-ruby1.8 ruby-ldap libldap-ruby1.8 puppetdb-terminus
Les NOUVEAUX paquets suivants seront installés :
  puppetmaster puppetmaster-common
0 mis à jour, 2 nouvellement installés, 0 à enlever et 0 non mis à jour.
Il est nécessaire de prendre 25,2 ko dans les archives.
Après cette opération, 77,8 ko d'espace disque supplémentaires seront utilisés.
Souhaitez-vous continuer [O/n] ?
Réception de : 1 http://apt.puppetlabs.com/ wheezy/main puppetmaster-common all 3.6.2-1puppetlabs1 [14,9 kB]
Réception de : 2 http://apt.puppetlabs.com/ wheezy/main puppetmaster all 3.6.2-1puppetlabs1 [10,3 kB]
25,2 ko réceptionnés en 0s (36,8 ko/s)
Sélection du paquet puppetmaster-common précédemment désélectionné.
(Lecture de la base de données... 61075 fichiers et répertoires déjà installés.)
Dépaquetage de puppetmaster-common (à partir de .../puppetmaster-common_3.6.2-1puppetlabs1_all.deb) ...
Sélection du paquet puppetmaster précédemment désélectionné.
Dépaquetage de puppetmaster (à partir de .../puppetmaster_3.6.2-1puppetlabs1_all.deb) ...
Traitement des actions différées (« triggers ») pour « man-db »...
Paramétrage de puppetmaster-common (3.6.2-1puppetlabs1) ...
insserv: warning: script 'K01nagios' missing LSB tags and overrides
insserv: warning: script 'nagios' missing LSB tags and overrides
Starting puppet queue.
Paramétrage de puppetmaster (3.6.2-1puppetlabs1) ...
insserv: warning: script 'K01nagios' missing LSB tags and overrides
insserv: warning: script 'nagios' missing LSB tags and overrides
Starting puppet master.
root@rpi:~/toto#

Victoire !