Cet article a été rédigé a l’origine pour linuxembedded.fr : Crée un CD d’installation d’une debian spécialisée.
Parfois un système embarqué se résume à un serveur spécifique et quelques applicatifs. Dans ce cas l’utilisation d’une distribution standard peut être préférable à un buildroot ou autre openembedded. Ici nous avons fait le choix de debian et nous voudrions avoir un CD d’installation complet de notre système.
Debian fourni un outil permettant de créer rapidement un CD personnalisé : simple-cdd, cet outil est constitué d’un ensemble de scripts autour de l’outil debian-cd utilisé pour faire les CD officiels de debian.
Dans notre cas le système contient à la fois des paquetages de « non-free » (des firmwares par exemple) et des paquetages spécifiques à notre application.
Mise en œuvre de simple-cdd
Simple-cdd récupère certains éléments de configuration depuis la machine hôte, il est donc préférable de travailler sur une machine similaire à la machine destination (en particulier la même architecture: amd64 ou i386).
Nous allons travailler dans un dossier de travail qui comportera la configuration et les éléments spécifiques de notre CD.
Pour commencer créez un fichier de configuration « my-cdd.conf » et préciser le miroir à utiliser ainsi que les composants :
debian_mirror="http://ftp2.fr.debian.org/debian/" mirror_components="main contrib non-free"
Lancez une première fois l’outil. Cette opération prépare un miroir local des paquetages nécessaires qui sera réutilisé par la suite. Elle peut donc être un peu longue.
build-simple-cdd --conf ./my-cdd.conf
Une fois la commande terminée vous devriez avoir une première image de CD dans le dossier « images ».
Personnalisation de l’image
Pour personnaliser notre image nous allons crée un profile « my-profile » définissant les paquetages à installer sur notre système et les paquetages supplémentaires à prévoir sur le CD (paquetages de développement par exemple).
Créez le dossier « profiles »
mkdir profiles
Sélection des paquetages
Si vous disposez d’une machine préinstallée (la machine de test par exemple) vous pouvez demander à dpkg de vous donner la liste des paquetages installés :
dpkg --get-selections >package-list
Dans ce fichier seul le nom des paquetages dans l’état ‘install
’ nous intéresse :
grep -e '\<install$' package-list | awk '{print $1};' >profiles/my-profile.downloads
Ici nous avons demandé à simple-cdd de télécharger ces paquetages pour les mettre sur le CD. La liste des paquetages à installer, quand à elle, se trouve dans le fichier « my-profile.packages ». Il n’est pas utile de mettre tout les paquetages dans ce fichiers, seulement les programmes à installer car l’outil sait résoudre les dépendances.
Paquetages spécifiques
Nous avons des paquetages spécifiques à ajouter au CD, il s’agit des paquetages propres à notre application qui ne sont donc pas présents sur les dépôts de debian.
Créons un dossier « local_pkg » et copions-y tous nos paquetages.
Enfin mettons à jours la configuration pour utiliser ces nouveaux fichiers et installer automatiquement le profile « my-profile » :
debian_mirror="http://ftp2.fr.debian.org/debian/" mirror_components="main contrib non-free" simple_cdd_dir=$(pwd) profiles="my-profile" auto_profiles="my-profile" local_packages="$simple_cdd_dir/local_pkg/"
Si vous lancer à nouveau l’outil vous deviez obtenir un CD d’installation complet !
build-simple-cdd --conf ./my-cdd.conf
Toutefois, si vous avez oublié des paquetages spécifiques (ou des dépendances) ceux-ci ne seront pas présents. Cherchez dans les messages une ligne du type :
WARNING: missing optional packages from profile my-profile: libevent-2.0-5 [...]
Dans ce cas il s’agit de la libevent issue des backports de squeeze, l’outil ne supportant pas les backports, il suffit d’ajouter ces paquetages au dossier « local_pkg ».
Personnalisation de l’installeur
Simple-cdd utilise automatiquement un profile nommé « default ». Il se peut que ce profile ne corresponde pas à votre besoin. Pour le surcharger il suffit de placer les fichiers modifiés dans le dossier « profiles ».
Pour ce faire, commencez par copier le fichier voulu en provenance de « /usr/share/simple-cdd/profiles/ », puis modifiez le, par exemple le fichier « default.pressed » :
cp /usr/share/simple-cdd/profiles/default.pressed profiles
Puis dans ce fichier modifiez les options qui vous intéressent, par exemple les options de partitionnement. Enfin comme nous avons activé « contrib » et « non-free », vous devriez donc décommenter les lignes :
d-i apt-setup/non-free boolean true d-i apt-setup/contrib boolean true
Ajout de fichiers supplémentaires au CD
Enfin nous voulons ajouter la documentation de notre projet, des sources ou d’autre fichier.
Simple-cdd fournit un mécanisme pour ajouter des fichiers dans le dossier « simple-cdd » du CD, mais si nous voulons ajouter toute une arborescence, cela n’est pas prévu.
Toutefois, de même que nous pouvons surcharger les profiles, nous pouvons surcharger certains scripts, en particulier le script « tools/build/debian-cd » qui prépare le CD.
mkdir -p tools/build cp /usr/share/simple-cdd/tools/build/debian-cd tools/build
puis ajoutons les lignes suivantes après le nettoyage de « $extras_base_dir
»
if [ -d "$cd_extras" ]; then mkdir -p "$extras_base_dir" cp -a "$cd_extras/." "$extras_base_dir" fi
Enfin ajoutons la variable « cd_extras » à notre fichier de configuration :
cd_extras="$simple_cdd_dir/local_extras/"
Ainsi l’arborescence crée dans le dossier « local_extras » serra reproduite à la racine du CD.
Faite attention de ne pas crée de conflits avec d’autres fichiers du CD car il se peut que rien ne vous le signale !
Conclusion
Nous avons maintenant un mécanisme pour construire un CD d’installation de debian pouvant aussi contenir tous autres fichiers que nous voudrions livrer avec notre système, les sources et la documentation par exemple.