Personnaliser l'ISO d'une distribution avec ses programmes préférés

  • Membre

    Les ISO basés sur les distributions Ubuntu/Debian sont construits de façon similaire. Ils comprennent trois parties principales :

    • Un gestionnaire de démarrage pour démarrer sur le support d'installation (USB, DVD, CD),
    • Une arborescence de fichiers qui constituera les bases de notre futur système,
    • Et, un miroir local de paquets (udeb, deb) pour compléter l'offre logiciel.

    Le boot

    Pour être démarré l'ISO devra utiliser le gestionnaire de démarrage GRUB si l'installation est en UEFI et/ou le gestionnaire ISOLINUX (abandonné sur les dernières versions de certaines distributions) si l'installation est en BIOS classique.

    iso-ubuntu-20.4-racine.png

    Le preseed

    L'installation est gérée par un ensemble de scripts (debian-installer) dont le but est la mise en place d'un système fonctionnel avec la prise en compte des données utilisateur (langue, fuseau horaire, configuration réseau, proxy, sources des dépôts logiciels, compte utilisateur, mot de passe, etc.). Que l'installation ait été initiée par ISOLINUX ou GRUB celle-ci suit un scénario intéractif via le fichier preseed (nommé ubuntu.seed sur l'image ci-après). Ce fichier contient les réponses qu'on souhaite apporter durant l'installation.

    iso-ubuntu-20.4-preseed.png

    Copie du système de fichiers

    L'installation consiste à copier et configurer une arborescence de fichiers sur notre machine. Cette structure composant notre futur système se trouve sur le support d'installation sous la forme d'un fichier compressé et se nomme filesystem.squashfs. Une méthode simple pour personnaliser un ISO, par exemple ajouter des programmes, un autre environnement de bureau, des papiers peints, etc., consiste à modifier ce fichier. Pour ce faire il faut le décompresser (unsquashfs), faire un chroot dessus (on bascule temporairement sur ce nouveau système pour y mener des actions), apporter les changements, et recompresser le tout pour obtenir notre nouveau système de fichiers (mksquashfs).

    iso-ubuntu-20.4-arborescence-fichiers.png

    Les dépôts logiciels (si besoin)

    On peut préfèrer avoir un système de fichier minimal (debootstrap minimal) et tout installer par la suite à partir d'un gros dépôt local de logiciels. Ou bien préfèrer minimiser la taille de son dépôt local en préinstallant un ensemble de logiciels dans le système de fichiers. Les derniers ISO Ubuntu proposent par défaut un système complet et demande à l'utilisateur s'il souhaite un système minimal. Si oui alors après la copie du squashfs sur le disque une liste de logiciels sont désinstallés (cf. les fichiers manifest remove).

    iso-ubuntu-20.4-mirroir-local.png

    Partir d'un debootstrap minimal pour créer un ISO personnalisé Ubuntu/Debian est complexe. Le plus simple et plus rapide est de monter l'ISO pour copier son contenu. Modifier le fichier squashfs en fonction de ses besoins. Enfin, générer un nouvel ISO avec les utilitaires genisoimage ou xorriso (Plus d'info sur le wiki du projet SYSLINUX).

    Optionnel : Pour ce genre de manipulations j'ai pour habitude d'utiliser un environnement de développement sous Vagrant.

  • Membre

    @olivier a dit dans Personnaliser l'ISO d'une distribution avec ses programmes préférés :

    Enfin, générer un nouvel ISO avec les utilitaires genisoimage ou xorriso.

    Trouver la commande qui ira bien n'est pas simple selon le type d'ISO souhaité hybride ou pas. On peut tester le démarrage de l'ISO sans le fichier squashfs ni le répertoire pool afin de gagner du temps à chaque création.

  • Membre

    @olivier a dit dans Personnaliser l'ISO d'une distribution avec ses programmes préférés :

    Une méthode simple pour personnaliser un ISO, par exemple ajouter des programmes, un autre environnement de bureau, des papiers peints, etc., consiste à modifier ce fichier. Pour ce faire il faut le décompresser (unsquashfs), faire un chroot dessus (on bascule temporairement sur ce nouveau système pour y mener des actions), apporter les changements, et recompresser le tout pour obtenir notre nouveau système de fichiers (mksquashfs).

    hamOS est une distribution Linux spécialisée pour les radioamateurs. Elle est basée sur Debian 10 et utilise l'environnement de bureau Xfce. Dans l'exemple suivant nous allons, en utilisant la méthode précédente, remplacer dans l'ISO l'environnement Xfce par GNOME.

    Commencez par vous procurer l'ISO en le téléchargeant à l'adresse http://hamos.fr/hamos3-1.iso (user:hamos password:live). Une fois l'ISO sur votre disque dur alors via l'explorateur de fichiers monter le en faisant entrée sur l'icone.
    montage-iso.png
    Le contenu est alors accessible en lecture seule dans le dossier /media/olivier/hamos (remplacer olivier par votre nom d'utilisateur).

    Ouvrir le terminal et copier tout l'ISO (fichiers cachés inclus) dans un nouveau dossier de votre disque dur pour permettre d'y faire les changements. Le nouveau dossier se nommera new-image.

    $ cp -rvT /media/olivier/hamos new-image
    

    Pour la suite des opérations nous aurons besoin de 2 paquets supplémentaires, squashfs-tools et genisoimage. Les installer avec la commande suivante.

    $ sudo apt-get -y install squashfs-tools genisoimage
    

    Extraire le système de fichiers contenu dans l'ISO auquel nous allons apporter des changements. La commande unsquashfs décompresse tous les fichiers dans un nouveau dossier nommé par défaut squashfs-root.

    $ sudo unsquashfs new-image/live/filesystem.squashfs
    

    Pour permettre la résolution DNS dans le chroot et donc garantir la connexion aux dépôts logiciels, on recopie le fichier resolv.conf.

    $ sudo cp /etc/resolv.conf squashfs-root/etc/
    

    Basculer dans le système de fichiers à modifier et extrait sous le dossier squashfs-root.

    $ sudo chroot squashfs-root/
    $ mount -t proc none /proc
    $ mount -t sysfs none /sys
    $ mount -t devpts none /dev/pts
    

    Une fois à l'intérieur (l'invite du terminal change et vous devenez super-utilisateur) faire toutes les changements souhaités. On va utiliser tasksel (cocher les lignes correspondantes avec la barre d'espace) pour installer tous les paquets necéssaires au bureau GNOME.

    $ apt-get update
    $ apt-get -y purge xfce4*
    $ tasksel
    

    tasksel.png

    Sélectionner le gestionnaire récent de session gdm3.
    gdm3.png

    Nettoyer et quitter le chroot.

    $ apt-get -y autoremove
    $ apt-get clean
    $ umount /dev/pts
    $ umount /sys
    $ umount -lf /proc
    $ exit
    

    Reconstruire le nouveau système de fichiers.

    $ sudo rm new-image/live/filesystem.squashfs
    $ sudo mksquashfs squashfs-root/ new-image/live/filesystem.squashfs
    

    Créer le nouvel ISO.

    $ sudo mkisofs -r -cache-inodes -J -l -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -o hamos-remix.iso new-image/
    

    Enfin, tester cet ISO dans une machine virtuelle à l'aide de VirtualBox, gnome-boxes, ou avec la commande suivante.

    $ qemu-system-x86_64 -enable-kvm -cdrom hamos-remix.iso -m 2048
    

    hamos-avec-gnome-shell.png

    Il se peut que certaines personnalisations effectuées sous Xfce par l'auteur de hamOS n'apparaissent pas sous GNOME.

  • Membre

    Très bel article super fouillé : merci O. !!!
    Entre Debian et Ubuntu, il existe toutefois quelques différences : le système de fichiers SQUASHFS est utilisé uniquement par le système Ubuntu (live). Les fichiers de configuration de construction de l'image divergent un peu aussi, même si l'idée est la même : "preseed" centralise beaucoup de paramètres, alors que les choses sont un peu plus éparpillées dans Debian, avec une souplesse supplémentaire dans la personnalisation pour cette dernière, qui va bien au-delà de la seule sélection des paquets présents dans les dépôts. Pour ces raisons, les documentations pour la construction des systèmes "live" ne sont plus tout à fait interchangeables, même si Debian et Ubuntu ne nourrissent mutuellement l'une de l'autre : à chaque "bidouilleur" de veiller à bien faire le tri dans ses lectures.

  • Membre

    C'est exact ! Le contenu des ISO diverge entre les distributions et même entre les versions des distributions.

Sujets suggérés