Bye Gafam, les tutos ! - Tag configuration http://tutos.bye-gafam.org/tag/configuration fr while ( ! geek) code_again(); Sat, 19 Jan 2019 10:27:00 +0100 PluXml Ansible : Gestion et Configuration d'un parc Linux http://tutos.bye-gafam.org/article7/ansible-gestion-et-configuration-parc-linux http://tutos.bye-gafam.org/article7/ansible-gestion-et-configuration-parc-linux <blockquote> <p>Comprendre à quoi sert Ansible, comment l'installer et effectuer un test simple comme exemple.</p> </blockquote><h2>C'est quoi Ansible</h2> <p>Ansible est un logiciel pour la gestion de la configuration d'un parc de serveurs.</p> <p>Il offre des commandes permettant d'automatiser un deploiement d'infrastructure, par exemple sur un serveur d'enchainer la création d'un user avec mots de passe, installer un serveur Apache, envoyer un fichier de confguration, redémarrer le service Apache, etc</p> <p>Le résultat de ces commandes est retourné au format JSON sur la sortie standard.</p> <div>Là où ca devient encore plus intéressant, c'est qu'on peut regrouper toutes les commandes en un scenario (playbook) et que tout ca peut être rejoué autant de fois que voulu car<b> ansible est idempotent</b> c'est à dire qu'il va vérifier l'état de la machine cible et ne réappliquer que le strict nécessaire pour obtenir l'état final voulu.</div> <div>&nbsp;</div> <div>Ansible est une alternative aux solutions telles que Puppet ou Chef, à la différence qu'Ansible ne requiert aucun client côté machine cible, il ne requiert qu'un accès SSH et ca c'est de la balle!</div> <h2>Dans la vraie vie ca donne quoi ?</h2> <p>On peut donc executer des commandes de base, ou appeler des scenarios complets (fichier playbook) écrits en language YAML.<br /> Dans les 2 cas on peut appliquer celà sur une machine ou un groupe de machines.<br /> A noter qu'il est possible lors du lancement d'un playbook de spécifier un tag, seuls les blocs du Playbook ayant ce tag seront alors joués.</p> <p>En lancant un scenario, vous allez par exemple faire tout ca en 2min</p> <ul> <li>Créer un utilisateur “web_admin”</li> <li>Ajouter cet utilisateur aux sudoers</li> <li>Installer quelques outils systèmes</li> <li>Installer/configurer Nginx</li> <li>etc</li> </ul> <p>Imaginez que votre serveur crashe, avant vous alliez suivre le document Word pour tout réinstaller en 3h, imaginez que vous deviez le faire sur 4 serveurs web, vous allez y passer la journée.<br /> Là, celà prendra 5 minutes, que vous ayez 1 ou 10 serveurs d'ailleurs.<br /> &nbsp;</p> <p>C'est la même si vous voulez changer le password d'un utilisateur, vérifier le /tmp ou bien vous assurer que Apache tourne sur toutes les machines.<br /> En gros ca remplace tout vos petits scripts maison, sauf que c'est certainement plus fiable et surtout que c'est idempotent (chose que peu d'admins gèrent dans leur scripts à mon avis!)</p> <p>&nbsp;</p> <hr /> <p>&nbsp;</p> <div> <h2>Installer Ansible</h2> <p>Je pars du principe que la machine Ansible maitre est sous Redhat / Centos (gestionnaire de package yum.)</p> <p><code>sudo yum install -y ansible</code></p> <p>&nbsp;</p> <p>Pour pouvoir se connecter en SSH sur les machines cibles, le user utilisé de la machine maitre (toto par exemple) doit envoyer sa clé publique sur toutes les machines cibles.<br /> Il le fait sur un compte distant (ansible par exemple) ayant des droits sudo.<br /> &nbsp;</p> <pre> # On ajoute la clé root sur le serveur cible</pre> </div> <pre> ssh-copy-id -i ~/.ssh/id_rsa.pub ansible@centos01</pre> <p>Evidemment on peut aussi le faire sur le compte root distant mais ce n'est pas conseillé.</p> <p>&nbsp;</p> <p>On teste la connexion root en installant à distance le package python.<br /> Ce paquet est normalement déjà présent par défaut (c'est un prérequis à Ansible côté client, le seul d'ailleurs)</p> <p>&nbsp;</p> <div> <pre> ssh ansible@centos01 "yum install -y python "</pre> <p>&nbsp;</p> <p>&nbsp;</p> <h2>Configuration de base</h2> <p>Voilà, Ansible est installé. Faisons un tour rapide sur les fichiers de base</p> <ul> <li> <p>/etc/ansible/ansible.cfg :Fichier de configuration par défaut, inutile d'y toucher pour le moment.</p> </li> <li> <p>/etc/ansible/roles/* :Ce dossier contient les rôles installés, nous verrons plus tard l'intérêt d'un rôle, inutile d'y toucher pour le moment.</p> </li> <li> <p>/etc/ansible/hosts : C'est l'inventaire contenant toutes les machines qu'on veut gérer. Il suit le format INI en gros avec des [sections]</p> </li> </ul> <pre> # /etc/ansible/hosts # Machines sans groupe 192.168.0.10 # IP directe mon_serveur # si on donne un hostname, ce dernier doit etre resolvable (par DNS, /etc/hosts, etc) 192.168.0.[220:230] # l'intervalle permet d'économiser l'écriture, n'hésitez pas! db[2:8].domain.com # C'est un groupe [DB_group] 192.168.0.200 192.168.0.205:52 # Si le port SSH n'est pas standard, on peut le préciser centos09 # Ces variables s'appliqueront à tout mon groupe DB_group [DB_group:vars] ansible_user=root # indique le user distant utilisé # Un autre groupe [Webserver_group] 192.168.0.200 # une machine peut faire partie de plusieurs groupes centos50 ansible_host=192.168.0.50 ansible_user=toto # on peut appliquer des variables à un host en particulier # Ceci est pour l'exemple mais il existe deja implicitement un groupe "all" contenant tous les hosts de l'inventaire (excepté localhost) [all] DB_group Webserver_group</pre> <p>L'inventaire est le coeur d'Ansible, donc je vous conseille de l'écrire avec beaucoup d'intelligence, ca rendra votre travail 100X plus facile ensuite.</p> <p>&nbsp;</p> <h1>&nbsp;</h1> <hr /></div> <div> <h2>Un exemple simple</h2> </div> <div> <p>Ansible fonctionne à partir de modules : file, user, stats, systemd,&nbsp; etc<br /> Chaque module prend différents paramètres et permet d'effectuer une action précise.</p> <p>Pour tester la bonne installation, nous allons utiliser le module ping mais attention ce n'est pas un ping au sens littéral mais un ping au sens Ansible, c'est à dire qu'il teste le bon fonctionnement de la liaison SSH puis de la présence de Python côté client.</p> <pre class="bash" style="font-family:monospace;"> <code>ansible -m ping centos01</code></pre> </div> <div> <blockquote>centos01 | SUCCESS =&gt; {<br /> "changed": false,<br /> "ping": "pong"<br /> }<br /> &nbsp;</blockquote> </div> <hr /> <p>N'hésitez pas à consulter le <a href="http://tutos.bye-gafam.org/article10/pense-bete-ansible" title="Pense-bête Ansible">Pense-bête Ansible</a> .</p> Sat, 19 Jan 2019 10:27:00 +0100 Nerd Installer un Raspberry pour les nuls http://tutos.bye-gafam.org/article1/debuter-avec-raspberry http://tutos.bye-gafam.org/article1/debuter-avec-raspberry <blockquote> <p>En partant de zéro absolu, comment bien débuter avec un Raspberry !</p> </blockquote><h2>Etape 0 - Un Raspberry c'est quoi ?</h2> <p>Le raspberry est un mini-ordinateur, sa puissance est faible mais l'avantage c'est qu'il fait la taille d'une boite d'allumette et qu'il ne consomme quasi rien.</p> <p>Il sera donc utilisé grosso-modo dans les 2 cas suivants:</p> <ol> <li>Vous l'utilisez en remplacement d'un ordinateur normal, pour surfer sans être pressé, et envoyer des emails.</li> <li>Vous l'utilisez comme serveur, en mode curieux (et non ce n'est pas réservé qu'aux geeks) pour avoir des petites fonctionnalités sympas sur le réseau de la maison.</li> </ol> <p>&nbsp;</p> <h2>Etape 1 - Acheter un Raspberry</h2> <p>Attention, il existe plusieurs versions: Zéro, 1, 2, 3, 4. Je conseille vivement la dernière version la 4.</p> <p>Vous allez devoir acheter séparément la carte mère Raspberry + le boîtier + l'alimentation + la SdCard + le cable micro-HDMI</p> <p>Il est possible d'acheter des Raspberry neufs sur <a href="https://www.materiel.net/recherche/raspberry%20pi%204/?department=424">materiel.net</a><br /> Vous pouvez le trouver d'occasion sur <a href="https://www.leboncoin.fr/recherche?category=15&amp;text=%22raspberry%20pi%204%22&amp;search_in=subject" title="leboncoin.fr">leboncoin.fr</a> mais attention à bien avoir tous les éléments.</p> <p>La solution simple consiste à prendre le <strong>kit complet Raspberry 4</strong>, le plus cher coûte <a href="https://www.kubii.fr/174-raspberry-pi-4-modele-b">environ 130€</a>, pour ce prix vous aurez la version la plus performante (8Go) ainsi qu'une SdCard de 32 Go et tout le nécessaire.</p> <p>&nbsp;</p> <p>Il faudra par contre penser à acheter en supplément un petit câble ethernet de 50cm, si vous souhaitez l'utiliser en mode serveur, pour pouvoir cacher (et oublier) votre Raspberry derrière la box Internet.</p> <p><img alt="Kit Raspberry 4 microSD 32GB RAM 8GB" src="http://tutos.bye-gafam.org/data/medias/raspberry/PR8WHEU_IMG_600x450.jpg" style="width: 600px; height: 450px;" /></p> <h2>&nbsp;</h2> <h2>Etape 2 - Installer 'Raspberry Pi OS'</h2> <p>Le Raspberry 4 fonctionne avec une microSD.</p> <p>Si vous avez acheté un kit, le système <strong>'Raspberry Pi OS'</strong> est déjà sur la carte, vous pouvez donc passer directement au chapitre suivant.</p> <p>Si vous avez acheter la carte à part, alors nous devons ajouter le système Linux 'Raspberry Pi OS' dessus.<br /> Il va vous falloir un ordinateur capable de lire les SD et un adaptateur SD/microSD.</p> <p>La fondation Raspberry fournit un petit logiciel très pratique qui permet en quelques clics de mettre sur cette microSD le système d'exploitation du Raspberry.<br /> Il faut aller sur la page officielle : <a href="https://www.raspberrypi.com/software/">https://www.raspberrypi.com/software/</a> et télécharger "Raspberry Pi Imager" ou bien la version Mac ou Ubuntu selon ce que vous avez.</p> <p>On exécute le logiciel et on suit la procédure très simple en 3 étapes:</p> <ol> <li>le bouton "CHOOSE OS" &gt; trouver "Raspberry Pi OS with Desktop (64 bits)</li> <li>le bouton "CHOOSE SD CARD", choisissez la bonne Sd Card, à priori une seule apparaitra.</li> <li>le bouton "WRITE"<br /> &nbsp;</li> </ol> <p>&nbsp;</p> <h2>Etape 3 - Configurer Raspberry Pi OS</h2> <p>Insérer la Sd-Card dans le Raspberry, connecter un clavier et une souris à l'USB, ainsi que le câble HDMI à un écran.</p> <p>Après le démarrage (qui peut durer 5 minutes), une fenêtre de réglages en anglais apparait, passez les étapes comme suit:</p> <ol> <li>Fenetre de demarrage, faire "Next"</li> <li>Réglage de la langue, France, French, Paris</li> <li>Choisir un username "nom d'utilisateur", password "mot de passe", le retaper dans la case suivante</li> <li>Si l'image ne remplit pas tout l'écran, c'est à dire s'il y a des bandes noires autour, cocher la case</li> <li>Connexion au Wifi, taper le code. (ou faire "Skip" si vous avez déjà branché un cable Ethernet)</li> <li>Proposition de mettre à jour le système, Next (ca dure entre 5 et 30 minutes selon la connexion Internet)</li> <li>Ecran final, Restart</li> <li>Le Raspberry redémarre, et revient sur l'écran de Bureau.</li> </ol> <p>&nbsp;</p> <p>Pour une utilisation comme simple bureau, <strong>c'est terminé, vous pouvez surfer !</strong><br /> Bon, honnêtement, c'est tellement pas puissant que c'est compliqué de surfer avec, l'intérêt est plus d'utiliser le Raspberry comme serveur.</p> <p>&nbsp;</p> <h2>Etape 4 - Le transformer en serveur</h2> <p>&nbsp;</p> <p>Si vous voulez aller plus loin, comme par exemple installer <a href="https://tutos.bye-gafam.org/article16/installer-pi-hole-pour-bloquer-publicite-maison">Pihole </a>qui est un logiciel permettant de <strong>supprimer toutes les publicités</strong> de tous les appareils de la maison (PC, Portable, Tablette, etc) alors il vous faut transformer le Raspberry en serveur.</p> <p>&nbsp;</p> <h3>1. Activer l'accès à distance</h3> <p>Pour une utilisation comme serveur et y accéder depuis un autre ordinateur, il nous faut activer l'accès à distance.</p> <p>Menu &gt; Préférences &gt; Configuration du Raspberry &gt; onglet [Interface]</p> <ol> <li>Activer SSH - Accès terminal de commandes</li> <li>Activer VNC - Accès bureau</li> </ol> <p>On valide.<br /> J'expliquerais à l'étape 5 ce que sont ces 2 modes, on peut choisir l'un ou l'autre en fait selon ce qu'on veut faire.</p> <p><img alt="Raspberry PI OS - configuration panel" src="http://tutos.bye-gafam.org/data/medias/raspberry/raspberry_configuration_panel.png" style="width: 474px; height: 180px;" /></p> <p>&nbsp;</p> <p>&nbsp;</p> <p>&nbsp;</p> <h3>2. Executer mon script de préparation</h3> <p>Le reste de la configuration est plus compliqué mais j'ai une très bonne nouvelle pour vous, j'ai fais un playbook <a href="https://tutos.bye-gafam.org/article7/ansible-gestion-et-configuration-parc-linux">Ansible</a> qui va faire tout le travail pour vous.</p> <p>Vous n'avez pas besoin de savoir ce qu'est un playbook Ansible, nous allons juste l'utiliser.</p> <p>Nous allons devoir abandonner la souris et passer par le terminal.<br /> C'est quoi un terminal? Et bien c'est l'écran noir où on tape des commandes directement.<br /> Pas d'inquiétude c'est facile, ouvrez "<strong>LXTerminal</strong>" c'est la petite icone noire carrée en haut.<br /> L'écran affichera la ligne "&lt;votre-nom&gt;@raspberrypi" , signifiant qu'il attend les commandes.</p> <p>&nbsp;</p> <p>Depuis le Raspberry, ouvrir le navigateur Internet (l'icone à côté du Terminal) et rouvrez ce site Web pour&nbsp; copier/coller les 3 commandes suivantes entre mon site et le LXTerminal.<br /> Ce sera plus simple que de les recopier à la main.<br /> &nbsp;</p> <pre> wget https://raw.githubusercontent.com/share-me/init_raspberry/master/files/get_repo.ksh &nbsp;-O get_repo.ksh chmod +x get_repo.ksh ./get_repo.ksh</pre> <p>Pour information il faut faire un clic droit pour coller, puis valider avec [Entrée]</p> <p>&nbsp;</p> <p>L'execution de la dernière ligne vous demandera comment vous souhaitez appeler votre Raspberry, personnellement je l'ai nommé <a href="https://fr.wikipedia.org/wiki/Edwin_Jarvis">Jarvis</a> comme dans Iron Man :-D<br /> Mais bon soyez original, R2D2, DarkVador, Scoubidou, Thor, MisterBean, Tequila, etc (Le nom ne doit pas contenir d'espace)</p> <p>Le script attribue au Raspberry une adresse IP qui termine par <a href="https://fr.wikipedia.org/wiki/La_grande_question_sur_la_vie,_l%27univers_et_le_reste#La_recherche_de_la_question_ultime">42 </a>(référence culture geek)</p> <p>&nbsp;</p> <p>Notez sur un papier l'adresse IP du Raspberry que le script vous a renvoyé, ca ne servira pas Ahahah (Bon, peut être)</p> <pre> Type your Raspberry name: Jarvis Set Internet Box address: 192.168.0.1 Set Raspberry eth0 IP: 192.168.0.42 Set Raspberry name: jarvis</pre> <p>Notez saurez que l'execution est terminée lorsque l'écran reviendra sur l'invite de commande "&lt;votre-nom&gt;@raspberry" (ou en tout cas le nom que vous aurez choisi)</p> <p>&nbsp;</p> <h3>3. On met Ansible au boulot!</h3> <p>C'est le moment d'être fénéant, on lance les commandes suivantes</p> <pre> cd init_raspberry ansible-playbook 0.system_configuration.yml</pre> <p>Et on regarde toutes les lignes défiler, ca va durer quelques secondes mais ca va vous économiser 1h voire plus.</p> <p>De rien&nbsp; :-)</p> <p>Une fois tout celà terminé, on arrête le Raspberry via le menu:</p> <pre> Menu &gt; Deconnexion &gt; Arrêter</pre> <p>&nbsp;</p> <h2>Etape 5 - Tester l'accès depuis le PC</h2> <p>A partir de là, le Raspberry n'a plus besoin d'écran, on peut tout débrancher et le rebrancher directement derrière la box, juste avec l'alimentation (évidemment) et le petit câble ethernet de 50 cm.</p> <p>&nbsp;</p> <p>Comme explicité au chapitre 4.1, il y a 2 choix différents pour se connecter à son Raspberry <strong>depuis un autre PC:</strong></p> <ul> <li><strong>Le mode VNC</strong>, permet de voir le bureau du Raspberry, exactement comme quand vous étiez dessus tout à l'heure. Magique ;-)</li> <li><strong>Le mode SSH</strong>, permet d'afficher directement le terminal LXTerminal, que vous avez utilisé au chapitre 4.2, sauf que là c'est du direct on ne passe pas par le bureau.</li> </ul> <p>Vous choisirez l'un ou l'autre selon votre aisance en informatique.</p> <p>&nbsp;</p> <h3>Accès SSH (mode ligne de commande)</h3> <p>Depuis un PC, on télécharge le logiciel&nbsp; <a href="https://www.chiark.greenend.org.uk/~sgtatham/putty/">PuTTy</a>&nbsp; et on précise le nom que vous aviez donner au Raspberry ou son adresse IP que vous avez noté tout à l'heure (jarvis ou 192.168.1.42 pour moi donc) et taper sur [entrée]</p> <p><img alt="Connexion PuTTy au Raspberry Jarvis" src="http://tutos.bye-gafam.org/data/medias/raspberry/putty.png" style="width: 451px; height: 196px;" /></p> <p>Si tout se passe bien, vous devriez voir pour la toute première connexion un charabia comme</p> <p><code>The authenticity of host '192.168.1.42 (192.168.1.42)' can't be established.<br /> ED25519 key fingerprint is SHA256:RRFOE8mlAOEOlGaZPmlJXyS6zyyMJHlsIFpm0KmiE+A.<br /> This key is not known by any other names<br /> Are you sure you want to continue connecting (yes/no/[fingerprint])? yes</code><br /> &nbsp;</p> <p>Il suffit de taper "yes" et valider. Celà ne se reproduira plus à l'avenir.</p> <p>Ensuite vous aurez l'écran "login is" qui apparait, on saisit le nom d'utilisateur, que vous aviez choisi<strong> </strong>et le mot de passe qui va avec.</p> <p>&nbsp;</p> <h3>&nbsp;</h3> <h3>Accès VNC (mode graphique)</h3> <p>Si arriver directement sur l'écran noir du terminal en mode SSH vous fait flipper, alors on peut utiliser le mode VNC pour afficher le bureau du Raspberry tel que vous le voyiez quand il était encore branché sur un écran.<br /> &nbsp;</p> <p>Pour se faire, depuis votre PC téléchargez le logiciel <a href="https://www.realvnc.com/fr/connect/download/viewer/">VNC Viewer</a>, puis on précise en adresse <strong>VNC Server</strong> le nom ou l'adresse IP du Raspberry (jarvis ou 192.168.1.42 pour moi donc) et taper sur [Entrée]&nbsp; (et non le bouton "ouvrir une session" qui va juste vous demander de vous inscrire au site web)</p> <p>Pour s'identifier, l'utilisateur et le mot de passe que vous aviez choisi au début.</p> <p>&nbsp;</p> <p><img alt="Connexion VNC Viewer au Raspberry Jarvis" src="http://tutos.bye-gafam.org/data/medias/raspberry/vncviewer.png" style="width: 437px; height: 195px;" /></p> <p>A partir de là, pour pouvoir saisir des commandes on réouvre LXTerminal en double-cliquant l'icone carré noir en haut, ca revient exactement au même que le mode SSH, vous avez juste perdu du temps :-x</p> <p>&nbsp;</p> <p>Vous avez tout réussi? <strong>Wow Bravo! Vous êtes un(e) chef(fe).<br /> On se regarde dans le miroir et on répète 10X "je suis génial(e) !'</strong><br /> &nbsp;</p> <p><strong>Votre Raspberry est prêt pour faire de grandes choses maintenant !</strong></p> <p><strong><img alt="Borat thumbs up" src="http://tutos.bye-gafam.org/data/medias/raspberry/Borat_thumbs_up.jpg" style="width: 347px; height: 447px;" /></strong></p> Thu, 08 Feb 2018 19:14:00 +0100 Nerd