L’apprenti sorcier

Ne maitrisant plus la situation, l’apprenti est dépassé par les événements. Le poème symphonique de Paul Dukas dont la création (première représentation) eu lieu le 18 mai 1897 à Paris, est bien connu. Sans doute plus grâce à une souris à 8 digits doigts, que par Der Zauberlehrling de Goethe.
Expérimentant l’automatisation d’installations, j’ai eu un geste malheureux. Sortez les violons… Mon disque est totalement nettoyé. Je dois tout réinstaller. Rien de bien sorcier.

Quand on bricole ses configurations, il est toujours important de sauvegarder ses données, vous le savez déjà vu le nombre de fois où vous l’avez lu, mais il est tout autant important de se préparer une petite clef USB de réinstallation sans les mains. Tout simplement parce que c’est si facile quand on a tout à disposition et si compliqué avec un disque vierge…
Afin d’éviter l’immobilisation perpétuelle d’une clef, je ne vais lui implanter l’installeur qu’à la demande. Et en démarche devops, j’ai créé un script qui fait le café, et cet article présente les grandes lignes d’une installation ex-nihilo à l’aide d’une simple clef USB, choix effectué en constatant que les lecteurs CD/DVD disparaissent des configurations matériel (qui a dit Raspberry ?). Ce simple passage en revue peut donner des idées ou des indications à tout un chacun.

A la main

La démarche manuelle est relativement simple, il faut récupérer pour une architecture i386 l’image iso dite netinst :

http://cdimage.debian.org/debian-cd/current/i386/iso-cd/Debian-<trucs>.iso

Puis procéder à une copie sur la clef usb /dev/sdX suivi d’une synchro’ par :

dd if=Debian*.iso of=/dev/sdX bs=4M
sync

Pourquoi un script ?

Effectivement, c’est peu de commandes alors pourquoi les scripter ? La question est légitime. Et la réponse est la même (Lire les articles précédents) ! Pour la répétabilité. Qui connaît par coeur l’adresse où il doit aller chercher les images iso ? Ce n’est pas tous le jours qu’on procède, êtes-vous sûr de n’avoir rien oublier ? Et qui prend le temps de vérifier les hachages md5 ?

C’est donc encore et toujours pour répondre à ses questions qu’il est pertinent de scripter.

Où et comment ?

Il est disponible sur :
https://github.com/oloc/scripts/blob/master/instick
http://OlivierLocard.com/share/scripts/instick

Utilisable par un simple wget sur cette dernière adresse, comme suit:
wget http://OlivierLocard.com/share/scripts/instick
sudo ./instick

Puis suivre les instructions.

Explication de code

Les déclarations

Ca peut paraître dangereux, je pose une device par défaut. Mais c’est tout le contraire ! C’est pour orienter les utilisateurs dans le menu concerné, et éviter qu’ils choisissent par mégarde de nommer /dev/sda qui est très souvent le disque interne.

Pour éviter les lourdeurs de code (et par fainéantise), je pose aussi l’architecture qui me concerne, mais la mise en place d’un menu pour être totalement universel est aisé. Chacun pourra valoriser selon son besoin.

Pour le reste c’est du classique.

Les fonctions

J’ai pour habitude de noter d’un simple souligné (underscore pour les anglophones), les fonctions déclarées dans le script lui-même.

A noter, _echo et _log pour uniformiser les écrits et les formats entre autre de date. Le second permet de garder une trace de certains éléments. J’utilise le tiret et l’astérisque pour différencier les deux à la lecture.

Le gros morceau est le _wget qui permet de récupérer un item et de vérifier qu’il est bien lisible. Premier gain par rapport à la méthode manuelle.

Gestion de la device USB

Le menu n’est là que s’assurer que l’utilisateur a bien connecté sa clef. Par contre on peut se pencher sur les trois lignes à l’apparence ésotérique :

SerialNumber=$(dmesg | grep 'SerialNumber' | tail -1 | awk '{print $NF}')
DevUsb1=$(ls -l /dev/disk/by-id | grep ${SerialNumber} | awk -F'../../' '{print $2}')
DevUsb2=$(dmesg | grep -i 'removable disk' | tail -1 | cut -c16- | awk '{print $3}' | tr -d '[]')

La première récupère le numéro de série de la dernière device connectée, selon toute vraisemblance la clef qui nous intéresse.
La seconde va chercher ce numéro de série dans un répertoire orienté système qui permet de faire le lien entre le matériel et le device, exactement ce que l’on cherche à connaitre.
La troisième est tout simplement la recherche du dernier removable disk connecté, encore une fois à l’évidence notre clef.

Il est intéressant de connaître ces deux méthodes de recherche, et il est surtout pertinent de les confronter pour vérifier que les deux résultats sont identiques ! Sous peine de découvrir un lièvre. D’aucun dirait un pingouin.

Après une note d’information dans la log, c’est le but des deux if qui suivent. Puis on conforte cette recherche automatique par l’utilisateur via un menu.
Cette détection automatique évite les erreurs renseignements ou des choix catastrophiques, c’est le second gain par rapport à la méthode manuelle.

Faites votre choix

Ce petit menu présentant les 5 interfaces, permet aux débutants un peu perdus de choisir la version de base sans se perdre en conjecture, et aux aguerris de choisir en tout simplicité. C’est encore un petit gain.>/p>

La récupération

Vous avez remarqué que depuis le début je n’ai jamais précisé la version ? D’autant que dans l’adresse du repository c’est le current. Et l’on continue, en cherchant le md5sums pour y trouver le nom du fichier qui nous intéresse. Le choix sera effectué sur une recherche de l’extension

La second subtilité est sur le fait qu’au passage, j’ai récupéré le hash md5 et que je le confronte à celui du fichier iso que j’ai récupéré. C’est l’objet de ce test aux allures de palindrome :

if [ $(md5sum ${IsoFile} | awk '{print $1}') != ${IsoMd5s} ]

Cette vérification du hash md5 est à nouveau un gain par rapport à la méthode manuelle

Création de la clef

Elle est effectuée par un simple dd avec l’option b=4M que de facto on n’oublie pas ce qui est en soi un mini-gain

Conclusion

Pour conclure, je dirais qu’avec un tel script, on peut lancer le processus et faire autre chose sans avoir à scruter les barres de chargement, ce qui en soi est encore un gain par rapport à la méthode manuelle. Au total, les gains sont indéniables, le processus est répétable et le résultat est sûr. Evitons de passer pour des Mickeys.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.