# 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`