Simple-cdd howto

Un petit HOW-TO rapide sur SIMPLE-CDD pour construire une ISO Debian personnalisée.
Pour la partie preseed qui a son importance, ça fera l’objet d’un autre document dès que j’aurais toutes les infos moi-même.

Introduction
Simple-cdd est un outil utilisé pour créer un disque DebianInstaller fait sur mesure. C’est une enveloppe autour de debian-cd et des outils de création de miroir pour créer une image sur CD DebianInstaller.
Il prend une liste de packages à installer, et utilise une présélection debconf (preseed) pour pré-configurer l’installation.
Il permet d’avoir plusieurs profiles d’installation différents, et de gérer des scripts de pré-installation et de post-installation , permettant par exemple de gérer des éléments qui ne peuvent utiliser le preseed debconf.

Préparation
Simple-cdd est organisé autour des profiles. L’architecture des répertoire de simple-cdd est simple. Elle est constitué d’un répertoire de projet, nommé à sa convenance, dans lequel il y un répertoire profiles. C’est ce répertoire qui contiendra les fichiers nécessaires aux différents profiles. Après la création du CD, un répertoire ./tmp y sera créé par l’outil, qui lui servira de répertoire de travail pour créer l’image iso du CD qui sera lui mis dans un répertoire images créé par l’outil.
D’autres répertoires plus spécifiques comme des repository locaux, ou un répertoire pour des fichiers spécifiques que l’ont veux voir figurer sur le CD peuvent aussi y être créés. On obtient une arborescence suivante :

Simple-cdd
    |- images
    |- local_extras
    |- local_packages
    |- profiles
    |- tmp

Dans un premier temps il faut installer simple-cdd (en tant que root ou avec sudo) avec :

# apt-get install simple-cdd

En tant que user, créer son répertoire de travail, le répertoire des profiles et si besoin, les répertoires de fichiers supplémentaires local_extras et local_packages (les noms ne sont pas prédéterminés et à son propre choix).
Vous pouvez aussi mettre dans votre répertoire de base des fichiers meta comme README.md, LICENSE, CONTRIBUTING.md, CHANGELOG.md, etc.

Pour créer un disque, il faut utiliser la commande suivante :

$ build-simple-cdd --logfile monfichier.log

Il est recommandé de prévoir un fichier de log afin de mieux vérifier par la suite en cas d’erreur avec l’option --logfile. Les options --verbose et --debug permettent plus d’affichage à l’écran et dans les logs.
Un option --conf est prévue pour utiliser un fichier de configuration particulier (basé sur les options debian-cd). Cependant, il est préférable de passer par le fichier de profile par défaut.
Simple-cdd génère un miroir des packages utilisés par l’installer (ainsi que les fichiers que l’ont veut voir figurer sur le CD). Il est possible de ne faire que cette seule opération avec l’option --mirror-only qui ne crééra pas l’image CD. A l’inverse, l’option --build-only ne fera que construire l’image CD sans générer le miroir.

Ensuite il vous faut créer les fichiers de votre/vos profile(s) qui seront tous stockés dans le sous-répertoire ./profiles

Fichiers de profiles
Les fichiers de profiles permettent de créer des personnalisation différents sur une seule ISO. l’installer exécutera toujours le profile par défaut qui s’appelle default. Il est possible de modifier ce profile par défaut dans le répertoire profiles avec les fichiers profiles dont le nom sera default (default.preseed par exemple).
Chaque fichier de profiles doit être nommé suivante la convention suivante :

NOM_DU_PROFILE.typefichier

Il y a plusieurs types de fichier :

NOM_DU_PROFILE.downloads
Ce fichier permet de mettre à disposition sur le CD de paquets qui ne seront pas forcement utilisés ou utilisés lors de l’installation. Sa fonction est de s’assurer que ces paquets seront toujours disponibles sur le CD.
Le fichier est constitué d’une liste de noms de paquets à raison d’un nom par ligne.

NOM_DU_PROFILE.excludes
Comme son type le suggère, ce fichier permet d’exclure des paquets du CD. Ils n’y figureront donc pas quelque soit le besoin éventuel.
Le fichier est constitué d’une liste de noms de paquets à raison d’un nom par ligne.

NOM_DU_PROFILE.packages
Ce fichier indique les paquets qui devront être installés après l’installation de Debian, comme par exemple un wrapper de pare-feu comme ufw ou shorewall, ou encore des outils tels que tree, nmap, mlocate, etc.
Le fichier est constitué d’une liste de noms de paquets à raison d’un nom par ligne.

NOM_DU_PROFILE.preseed
Ce fichier fournit à l’installer les actions par défaut à réaliser et les valeurs de réponses. Ce fichier est fonction de la distribution utilisée. Des exemples peuvent être trouvés sur :

stable = https://www.debian.org/releases/stable/example-preseed.txt
buster = https://www.debian.org/releases/buster/example-preseed.txt
jessie = https://www.debian.org/releases/jessie/example-preseed.txt
Main source = https://salsa.debian.org/debian/simple-cdd/blob/master/profiles/default.preseed

Par exemple :

## use non-free and contrib settings

d-i apt-setup/non-free boolean true

d-i apt-setup/contrib boolean true

Chaque partie a sa propre signification :

  • d-i = indique un paramètre de DebianInstaller
  • apt-setup = nom de la section
  • non-free = élément de la section
  • boolean = type du paramètre
  • true = valeur du paramètre

NOM_DU_PROFILE.udebs
Ce fichier liste les paquets logiciels de Debian destinés à être utilisés lors de l’installation. Il n’est pas destiné à reporter des paquets cibles. Certaines inclusion très utile comme les firmwares peuvent s’y trouver.
Le fichier est constitué d’une liste de noms de paquets à raison d’un nom par ligne.

NOM_DU_PROFILE.postinst
C’est un script SHELL de post-installation exécuté après que le système soit installé (et après l’éventuel late_command du fichier preseed). Comme c’est un script SHELL, vous devez lui donner des permission d’exécution ($ chmod +x PROFILENAME.postinst). Le script devra être écrit comme si vous utilisiez celui-ci en étant sous le système d’exploitation et non pas comme si vous étiez en RAM disk.
Il est préférable de pas utiliser de sourcing. Chaque script (de chaque profile) devra être écrit de façon indépendante plutôt que de se sourcer les uns les autres.
Il est conseillé d’utiliser un script SHELL POSIX plutôt que qu’un script BASH pour maximiser la compatibilité, mais ce n’est pas obligatoire.

NOM_DU_PROFILE.preinst
Même chose que le précédent, mais en pré-installation. (PS: non testé activement, mais apparait dans les logs pour le profile par défaut. Si pour le postinst il est évident qu’on ne se trouve pas en RAM disk, rien n’est clair pour le pré-installlation).

NOM_DU_PROFILE.extras
Ce fichier liste les fichiers (/path/vers/fichier) que l’ont veux inclure sur l’ISO (un fichier tar.gz, CHANGELOG.md etc.). Lors de la construction de l’ISO ils seront ajouté. Ce fichier ne permet pas d’ajouter un répertoire, uniquement des fichiers. Ces fichiers seront présent sur l’ISO dans le sous répertoire ./simple-cdd
Le fichier est constitué d’une liste de fichier, un par ligne.

Fichiers de configuration
Vous pouvez utiliser un fichier de configuration spécifique pour chaque profile, auquel cas il sera nommé comme les fichiers de profiles NOM_DU_PROFILE.conf, ou bien à votre convenance avec .conf comme extension. Dans le premier cas, il sera dans le répertoire .profiles. Dans l’autre cas, vous pouvez le mettre où vous voulez mais il est plus recommandé de les mettre dans un répertoire dédié ./confs

Il est conseillé de mettre tous les paramètres commun à tous les profiles dans un fichier de configuration général (./confs/mon_fichier_de_conf.conf), et ce qui est spécifique au profile dans un fichier de conf de profile (./profiles/NOM_DU_PROFILE.conf).
Vous pouvez avoir plusieurs fichiers de configuration général pour différentes versions ou personnalisation de vos ISO (un pour avoir des profils A et B, un autre pour C et D, etc…).

Variable d’environnement d’architecture ARCH :
Cette variable sert à définition l’architecture de votre ISO en utilisant le mécanisme normal d’export de variable BASH. En cas d’environnement multiple, il faut utiliser ARCHES.

export ARCH="amd64"

ou

export ARCHES="i386 amd64"

Variables d’environnement CONTRIB et NONFREE :
Par défaut, Debian ne prend en compte que les paquets libre et open-sources. Vous pourriez vouloir autoriser l’utilisation des paquets contrib et non-free. Pour cela il faut utiliser les variables CONTRIB et NONFREE. Pour sauvegarder ces variables, vous voudrez utiliser mirror_components avec les mêmes valeurs :

export CONTRIB=1                                                                
export NONFREE=1                                                                
mirror_components="main contrib non-free"

Déclaration de Distribution :
Cette variable permet de déclarer la distribution sur laquelle vous voulez baser votre iso.

dist="stable"

Profiles et Auto Profiles :
Vous déclarez ici la liste des profiles que vous voulez inclure dans votre ISO. Les variables profiles et auto_profiles doivent avoir les même valeurs. Les noms de profiles sont séparés par un espace et tout doit figurer sur une seule ligne. Ces valeurs ne peuvent pas figurer dans un fichier de configuration spécifique à un profil (NOM_DU_PROFILE.conf) mais à un fichier de configuration générique (dans ./confs).

profiles="custom util"
auto_profiles="custom util"

Spécifications serveur :
Pour vous assurer que vous obtenez les paquets deb et udeb d’un serveur spécifique, vous pouvez déclarer le nom du serveur et laisser debian_mirror et rsync_debian faire le reste :

server="ftp.fr.debian.org"
debian_mirror="ftp://$server/debian/"
rsync_debian_mirror="$server::debian"

Omettre les manuels et les notes de versions :
Pour un buils plus petit, vous pourriez vouloir omettre les notes de version et les manuels.

export OMIT_MANUAL=1
export OMIT_RELEASE_NOTES=1

Les paquets locaux
Cette variable indique le répertoire où seront placés les paquets personnalisés dans le dépôt.

local_packages="./local_packages"

Vous devez cependant inclure vos paquets personnalisés dans le fichier de profile des paquets (NOM_DU_PROFILE.packages).

Création de l’image ISO
Pour créer l’image iso, il suffit d’appeler la commande build-simple-cdd :

$ build-simple-cdd --conf "./confs/mon_fichier_de_conf.conf" –logfile mon_fichier_de_log.log
2 J'aimes

Merci pour ce « travail » accompli.
De fait, j’ai basculé le post en mode wiki, ainsi il pourra être éditer + facilement, au besoin, et l’est épinglé !


Ahh, j’aimerais tellement pouvoir faire la même chose mais pour… Devuan Ceres :stuck_out_tongue:

Merci :slight_smile:Ceres? j’utilise maxima :wink:

Sincèrement, j’ai rien compris à ta réponse ! ???

:sweat_smile:
le Ceres dont tu parles n’a rien à voir avec les mathématiques?
Bon autant pour moi, j’avais cherché mais je n’ai pas trouvé de quoi tu parlais :slight_smile:

Tu parles bien de Debian, là, non !?
Devuan Ceres n’est que le pendant de Debian Sid, sans systemd !

Voir :

ben dans ce cas il n’y a pas de problème pour faire du simple-cdd si le paquet existe dans ceres.

Il existe.
Et, essaye donc… et tu m’en dis des nouvelles, et surtout si tu arrives à un résultat, tu m’expliques comment, stp :wink:
(bien sûr, un résultat pour Devuan, non pas Debian) :stuck_out_tongue:

j’essayerais alors, à l’occase :slight_smile: entre deux occupations :wink:
faut d’abord que je m’installe une VM avec Devuan

Le jour où tu es décidé, informes-moi, je te générerais une mini.iso pour la Ceres :wink:
Ce qui devrait te permettre de l’installer…

Et, oui, j’arrive à générer une mini-iso, ~ 50Mo, avec le Debian-Installer modifié de manière adéquate.
Mais pas le reste…
(enfin, le script officiel de debian-installer me la génère) :stuck_out_tongue:

Bon j’ai fait une install de la beowulf en netinst tranquillement.
par contre il semble que le simple-cdd soit buggé
Impossible d’aller au delà du download de beowulf_Release. D’après mes premieres analyses, il semble que cela soit du à des écart de cohérence entre la structure des repository Devuan vis à vis de debian (peu etre le contenu des en-tête des fichiers releases).