# Chef Serveur sur Raspberry Pi
{{INLINETOC}}
Les appareils **Raspberry Pi** sont bon marché, silencieux et suffisamment puissants pour exécuter un système d'exploitation Linux basé sur **Debian** appelé **Raspbian**. Un tel dispositif est très pratique pour gérer son infrastructure personnelle, composée de quelques machines physiques et/ou virtuelles, en exécutant **Chef Server**.
Alors que le site Web officiel de Chef documente principalement l'installation de **Chef Server** sur **Ubuntu** et **Red Hat Enterprise Linux**, **Chef Server** est disponible via son API et déjà packagé pour **Raspbian** en tant que package **chef-server-api**.
L'installation de **Chef Server** sur un **Raspberry Pi** est donc assez avancée. Les étapes à suivre, décrites ci-dessous, sont inspirées de ces instructions pour installer **Chef Server** sur **Debian** à l'aide de packages binaires.
# Installation de Chef Serveur
Télécharger puis graver une image **Raspbian** sur une carte SD en utilisant l'une des méthodes décrites [[prive:rpi-patch|ici]] pour graver l'image sur la carte SD.
## Procédure d'installation
Installer le package **Chef Server**:
```
sudo apt-get update
sudo apt-get install chef-server-api
```
Configurer **Chef Server**, en répondant aux deux questions qui vous seront posées :
* **URL du serveur Chef** : http://CHEF_SERVER_IP:4000
* **Mot de passe utilisateur Chef AMQP**: RANDOM_PASSWORD (Éviter d'utiliser des caractères spéciaux)
Certains services ne démarrent pas, comme jetty. chef-server sera également considéré comme ayant échoué, mais les API Chef Server fonctionneront quand même.
**Rabbitmq** ne semble pas être configuré lors de l'installation de **chef-server** via les packages deb, ce qui provoque des erreurs lors du lancement des commandes **knife client create** ou **knife client reregister**, avec le message suivant dans le journal **rabbitmq**:
```
=ERROR REPORT==== 4-Jun-2012::14:56:01 ===
exception on TCP connection <0.583.0> from 127.0.0.1:34143
{channel0_error,starting,
{amqp_error,access_refused,
"AMQPLAIN login refused: user 'chef' - invalid credentials",
'connection.start_ok'}}
```
Pour corriger cela exécuter les commandes suivantes :
```
sudo rabbitmqctl add_vhost /chef
sudo rabbitmqctl add_user chef PASSWORD_PER_CONFIGURATION
sudo rabbitmqctl set_permissions -p /chef chef ".*" ".*" ".*"
```
## Essai
```
root@raspberrypi:~# knife configure -i
WARNING: No knife configuration file found
Where should I put the config file? [/root/.chef/knife.rb]
Please enter the chef server URL: [http://raspberrypi:4000] http://CHEF_SERVER_IP:4000
Please enter a clientname for the new client: [pi] root
Please enter the existing admin clientname: [chef-webui]
Please enter the location of the existing admin client's private key: [/etc/chef/webui.pem]
Please enter the validation clientname: [chef-validator]
Please enter the location of the validation key: [/etc/chef/validation.pem]
Please enter the path to a chef repository (or leave blank):
Creating initial API user...
Created client[root]
Configuration file written to /root/.chef/knife.rb
root@raspberrypi:~# knife client list
chef-validator
chef-webui
root
root@raspberrypi:~#
```
#Configuration des nodes
**Knife bootstrap** est généralement la commande exécutée sur une machine que l'on souhaite gérer avec chef. La première chose que fait **Knife Bootstrap** est d'installer chef via un package **omnibus** pour le système d'exploitation que l'on démarre. Cela échouera sur un Raspberry Pi exécutant **Raspbian** car il n'y a pas de programme d'installation **omnibus** pour **ARM/Raspberry Pi**, mais il est assez facile de le configurer.
## Installer Ruby
Commencer par télécharger puis graver une image **Raspbian** sur une carte SD en utilisant l'une des méthodes décrites [[prive:rpi-patch|ici]] pour graver l'image sur la carte SD.
Exécuter ce qui suit sur le Pi :
```
sudo apt-get install ruby bundler
sudo gem install chef —verbose
```
Ou utiliser simplement le script Ruby disponible [[prive:rpi-ruby|ici]].
## Installer Chef via ruby gem
```
sudo gem install chef
```
Une fois que chef est installé, on est maintenant prêt à exécuter la commande **chef-client** pour démarrer les exécutions de chef. Cependant,à ce stade, la commande **chef client** ne fonctionnera pas car il faut d'abord ajouter la configuration de ce nœud dans `/etc/chef/client.rb`. Une façon de procéder consiste à créer les fichiers sur le poste de travail local et à les transférer sur le Pi, ou on peut exécuter la commande **knife bootstrap** comme ceci pour démarrer :
```
knife bootstrap -N NODENAME -x pi -P raspberry --sudo IP_of_rPi
```
Pour utiliser autre chose que le nom d'hôte par défaut sous raspbian ("raspberrypi"), il faut définir le nom de nœud explicitement. Les options **-x** et **-P** sont les identifiants raspbian par défaut.
Depuis avril 2019 le fichier bin **chef-client** n'est plus installé lorsque le **gem chef** est installé, cependant, on peut toujours obtenir le **chef-client** sur un **raspberry pi** via le **gem chef**, mais cela nécessite des étapes supplémentaires :\\ \\ - Télécharger le stub bin chef-client dans `/usr/local/bin`\\ `curl -o https://raw.githubusercontent.com/chef/chef/master/chef-bin/bin/chef-client /usr/local/bin/chef-client`\\ - Le rendre exécutable: `chmod +x chef-client`