Otyugh

Live-build - votre propre Debian

Tutoriel sur comment construire un live et un installateur Debian personnalisée.

L'ambition de ce tutoriel est de prouver que c'est facile - au moins pour ceux ayant déjà fait quelques scripts et familier avec leur système. Vous avez pomponné votre système et souhaitez en donner des répliques à vos amis ? Vous pouvez, c'est pas bien compliqué !

Conseil : s'inspirer des autres

Parce qu'un exemple vaut mieux qu'un long discours, je vous suggère de vous inspirer de ce qu'on fait d'autres projets live-build. Il y en a beaucoup (handylinux, kali, debian-facile, parrotOS, emmabuntu… - les sources sont parfois un peu fastidieuses à trouver, mais perséverez !).

N'attaquez pas forcément tout de suite sans rien, c'est un peu indigeste - mais utilisez ça comme “starter” pour commencer votre propre iso. C'est aussi la meilleur illustration possible pour mes explications…

Pré-requis

Construction à vide

On se crée son espace de travail :

mkdir mon_iso
cd mon_iso

Les étapes de construction sont toujours les mêmes donc on finit souvent par écrire un script pour lancer ces étapes automatiquement (parce qu'être un programmeur, c'est être feignant).

Faisons-le à la main une première fois (en root) - vous ferez votre propre script quand vous en aurez marre :

lb config

…Crée l'arborescence du projet (on peut y ajouter beaucoup d'arguments, voir le man de “lb config”).

lb build

…Construit le projet.

Et voilà ! Vous avez maintenant un fichier ISO fonctionnel de généré que vous pourriez lancer dans une machine virtuelle. Pas de panique, ça lance une debian sans interface graphique, par défaut on produit une debian à vide : seul le strict minimum est installé.

Enfin avant de lancer une seconde construction on nettoira les caches du projet avec un :

lb clean

La séquence est donc toujours la même à partir de là.

lb clean
lb config
lb build
#tester l'ISO, apporter des modifications
lb clean
lb config
lb build
#retester l'ISO...

Théorie : qu'est-ce qui se passe sur un “lb build” ?

Je ne vais pas prétendre “comprendre” comment fonctionne live-build, mais je sais dans quel ordre il utilise ce qu'on lui donne ; pour résumer les étapes qui me semblent les plus intéressantes :

  1. Il copie toute l'arborescence dans ./config/includes.chroot dans le système final
  2. Il installe tous les paquets qu'on lui a donné dans ./config/package-lists/X.chroot
  3. Il execute tous les scripts qui se trouvent dans ./config/hooks/normal/X.hook.chroot

À partir de ces étapes, il crée une image ISO utilisable. …Voilà. La suite va dans le détail, mais j'ai presque tout dit.

Ajouter des paquets

Il y a deux chemins à connaître pour intégrer des paquets à l'ISO :

Imaginons que je veuille installer l'environnement XFCE et firefox à mon image ISO, j'écrirai un fichier ./config/package-lists/exemple.list.chroot :

xfce4 firefox

Et imaginons que je veuille gparted dans ma session live, mais pas dans le système final, j'écrirai un fichier ./config/package-lists/live.list.chroot :

gparted

Ajouter des fichiers

Si je veux copîer un fichier dans mon iso, un seul chemin à connaître :

./config/includes.chroot : toute l'arborescence ici sera copiée dans le root “/” de l'ISO.

Par exemple, je veux changer le fond d'écran par défaut de XFCE - configuration stocké chez-moi dans :

$HOME/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-desktop.xml

Je copierai ce xfce4-desktop.xml dans le même chemin

./config/includes.chroot/etc/skel/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-desktop.xml

Note : tout ce qui se trouve dans /etc/skel/ est dupliqué dans le $HOME des nouveaux utilisateurs. Ce fonctionnement n'a rien de spécifique à live-build ; c'est comme ça que ça marche chez Debian.

 Ajouter des scripts à la construction de l'ISO

Si je veux ajouter un script lors de la construction de l'ISO :

./config/hooks/normal/X.hook.chroot : tous ces scripts seront executés en root.

Par exemple, je veux compiler libdvdcss au démarrage (c'est une librairie pour décoder les DVDs) - pour l'anecdote c'est nécessaire de le faire à la main parce que certains pays en ont rendu illégal l'installation par défaut !

Concrètement ça donne un fichier ./config/hooks/normal/compiler-libdvdcss.hook.chroot contenant :

#!/bin/sh

export DEBIAN_FRONTEND=noninteractive

dpkg-reconfigure libdvd-pkg"

Trucs & astuces

Vous savez déjà tout. Il n'est pas du tout nécessaire de savoir ça.

Ne pas re-télécharger les paquets à chaque fois

À chaque reconstruction vous re-téléchargez l'ensemble de vos paquets. C'est coûteux en bande passante serveur pour debian, en temps pour vous, et… C'est complètement inutile. Pour corriger cela, il vous faut un cache. Une application peut s'en occuper pour vous.

apt install apt-cacher-ng
lb config --apt-http-proxy" "http://127.0.0.1:3142"

Executer un script à la création d'un utilisateur

Ce n'est pas pas propre à live-build, mais à l'environnement de Debian. À la création d'un utilisateur, le fichier /usr/local/sbin/adduser.sh est executé. Des informations sont passées en paramètre : comme le nom, le groupe, l'uid, et le gid du nouvel utilisateur (variables disponibles via $1,$2,$3,$4…). Ça peut servir, par exemple, pour corriger des préférences qu'on a ajouté mais dont les applications utilisent des chemins absolus; qu'il faut donc corriger - et qu'on ne peut corriger via un hook qui n'a pas ce niveau de “finesse”.

Repérer les fichiers de préférence d'une application

Ce n'est pas toujours simple de repérer où son stockés les réglages de telle ou telle application. Mon conseil c'est de faire le “changement” que vous voulez voir persister dans votre ISO, puis de repérer quel fichier a été change en utilisant une commande find qui liste toutes les modifications apportées depuis moins d'une minute.

find /home -mmin -1

Une fois repéré, c'est assez facile d'aller voir le fichier en question et de comprendre la nature de la modification.