Table des matières


Comment personnaliser son live CD Ubuntu

Dans ce tutoriel, nous vous expliquerons comment créer votre propre liveCD (ou liveDVD), en modifiant un liveCD ubuntu déjà existant afin qu'il corresponde à vos besoins. Vous pourrez par exemple installer les paquets que vous souhaitez, mettre dans le /home du liveCD les fichiers dont vous avez besoin, etc.

Méthodes assistées

Il existe plusieurs applications permettant de personnaliser votre liveCD :

Il est recommandé d'utiliser la méthode manuelle ci-dessous pour des questions de fiabilité.

Méthode manuelle

Prérequis

Introduction : Généralités sur le liveCD

Comme vous le savez, un liveCD est un CD bootable, qui va charger un système Linux en mémoire vive. Cela permet de tester une distribution sans risquer de faire des dégâts sur les disques dur, par exemple.
Un liveCD Linux n'est donc rien d'autre qu'un système Linux classique, son but étant d'être en lecture seule et de ne pas tenir de place, il est compressé. Pour la compression, on utilise squashfs : un système de fichier (tel que ext3 ou reiserfs), qui ne permet que la lecture mais permet un gain de place très important.
Malheureusement, ce système seul ne permet pas de faire fonctionner un système Linux. On l'associe donc à un autre système de fichier, qui est entièrement placé en mémoire : ramfs.
Un dernier système de fichier permet d'associer les deux précédents : unionfs. Unionfs est utilisable grâce à l'initrd, qui permet de charger un mini-système en mémoire au boot, et d'agir sur le « vrai » système.
Le soft casper permet la mise en place du boot du liveCD à partir de l'initrd.

Extraction du système

On commence par extraire le squashfs de l'image ISO pour pouvoir lui apporter les modifications souhaitées.
Au cours du tutoriel, nous allons utiliser plusieurs dossiers. Créez-les avec les commandes suivantes (à passer dans votre terminal favori) :

mkdir ~/livecd
cd ~/livecd
mkdir iso squashfs

L'image ISO sera stockée dans le dossier iso, dans squashfs sera stocké le « vrai » système live.

Il nous faut commencer par copier le contenu de l'image ISO sur le disque dur.


Copie du squashfs

Nous allons maintenant copier le squashfs (le système de fichier de notre liveCD) sur le disque dur afin de pouvoir le modifier.

On pourra reconnaître dans /mnt l'arborescence classique de Linux : /etc, /boot,…, qui est présente dans le squashfs.

Modification du système

Maintenant que nous avons notre système dans le dossier ~/livecd/squashfs, nous allons pouvoir le modifier à notre guise. Mais comment utiliser les logiciels qui y sont présents, pour travailler proprement dessus ? C'est là que le chroot intervient.

Le chroot permet de "se connecter" en super-utilisateur dans un système hébergé (dans ~/livecd/squashfs), en utilisant le noyau du système hôte (votre jolie Ubuntu à vous ;-) ). C'est une Inception, si vous voulez !
Il faut que le système hôte ait une architecture au moins du niveau du système hébergé : votre Ubuntu doit être en 64b pour chrooter dans un système 64b.
Si vous essayez de modifier un système 64b dans une installation 32b, vous aurez une erreur qui ressemble à
chroot: failed to run command/bin/bash’: Exec format error

FIXME

Vous pourrez modifier votre système hébergé (presque) comme s'il était installé en dur !

Chroot

En cas d'erreur avec apt-get, il peut être utile de mettre :
sudo mount --bind /dev squashfs/dev
sudo mount --bind /dev/pts squashfs/dev/pts
En cas d'erreur
Failed to open connection to "system" message bus: Failed to connect 
to socket /var/run/dbus/system_bus_socket: No such file or directory

il peut être utile de mettre :

sudo mount --bind /var/run/dbus/ squashfs/var/run/dbus/
Quelques réglages pas nécessaires, mais éventuellement utiles :
N'utilisez cette commande que si le liveCD que vous modifiez et le système à partir duquel vous le modifiez sont de la même version d'Ubuntu. Dans le cas contraire, vous n'installeriez pas sur le liveCD les bonnes versions des paquets.

Pour finir, on peut entrer dans le chroot :

sudo chroot squashfs

Exemples de modifications

Vous ne saurez qu'à la reconstruction du squashfs si votre iso tiendra sur un CD (700Mo), donc soit vous devez bien gérer la taille, soit vous pourrez graver un DVD, ou utiliser un LiveUSB.
Pas besoin de sudo, vous êtes connectés en Root (super-utilisateur).

Vous pouvez, si vous avez lancé xhost +, lancer les applications graphiques présentes dans le LiveCD.

Mise à jour du système
apt-get update
apt-get dist-upgrade
apt-get install console-data # Sélectionner le clavier français
La commande apt-get dist-upgrade peut amener une mise à jour du kernel, ce qui vous obligera à une manipulation supplémentaire à la fin.
Installation / Désinstallation de paquets
Supprimer des paquets peut, par inadvertance, désinstaller le paquet ubuntu-desktop qui est nécessaire au moment d'une mise à niveau de la distribution. Ce paquet devrait donc figurer sur tout liveCD destiné à être distribué à un certain nombre d'utilisateurs de différents niveaux de compétence. Il est donc bon, après avoir fini de faire les modifications, d'utiliser la commande apt-get install ubuntu-desktop pour s'assurer que le paquet est toujours installé.
Modifier les raccourcis de la barre de lanceurs Unity
gsettings get com.canonical.Unity.Launcher favorites #Pour connaître la liste actuelle
echo "[com.canonical.Unity.Launcher]
favorites=['nautilus-home.desktop', 'firefox.desktop','ubuntu-software-center.desktop', 'otherapp1.desktop' 'otherapp2.desktop']" >/usr/share/glib-2.0/schemas/10_local-unity-launcher.gschema.override
glib-compile-schemas /usr/share/glib-2.0/schemas/
Autres modifications
Sortie du chroot

D'autres modifications peuvent se faire à l'extérieur du chroot.

Insérer des fichiers

Dans le répertoire utilisateur

L'utilisateur par défaut du système chargé lorsque l'on utilise le liveCD n'existe pas dans le système compressé. Il est créé par casper pendant le boot. casper copie les fichiers se trouvant dans /etc/skel dans le dossier utilisateur qu'il crée au boot.
Placez donc tous les fichiers que vous voulez dans ce dossier, ils apparaîtront dans le répertoire personnel après le boot.

sudo cp *votre fichier* squashfs/etc/skel

Nous allons pouvoir utiliser cette technique un peu plus tard pour modifier l'apparence du bureau et utiliser des thèmes personnalisés.

Dans le système, vous pouvez recopier des fichiers au même emplacement que sur votre propre système, par exemple :

Rendre le boot explicite

Il est possible de supprimer l'option "quiet" du boot, afin que toutes les étapes soient détaillées.
Éditez le fichier isolinux.cfg qui se trouve dans le dossier iso :

gksudo gedit iso/isolinux/isolinux.cfg

Supprimez toutes les occurrences du mot quiet.
Vous pouvez également supprimer le mot splash, vous supprimerez ainsi le logo Ubuntu ainsi que la barre de chargement.
Enregistrez et quittez.

Utiliser le français par défaut
echo "fr" | sudo tee iso/isolinux/lang
Modifier l'utilisateur par défaut

L'utilisateur par défaut (ubuntu) est créé lors du boot par le programme casper. Pour modifier celui-ci, Il faut :

  1. modifier les fichiers de configuration de casper
  2. régénérer le fichier initrd dans le squashfs (en chroot)

Ce fichier est court et explicite :

# This file should go in /etc/casper.conf
# Supported variables are:
# USERNAME, USERFULLNAME, HOST, BUILD_SYSTEM, FLAVOUR

export USERNAME="ubuntu"
export USERFULLNAME="Live session user"
export HOST="ubuntu"
export BUILD_SYSTEM="Ubuntu"

# USERNAME and HOSTNAME as specified above won't be honoured and will be set to
# flavour string acquired at boot time, unless you set FLAVOUR to any
# non-empty string.

# export FLAVOUR="Ubuntu"

Modifiez les valeurs à votre convenance.

Par défaut, cet utilisateur possède les droits d'administration sans qu'aucun mot de passe ne soit requis.

Si vous voulez conserver cette propriété, ne modifiez que la première partie ainsi que la valeur de la variable FLAVOUR

export USERNAME="mon_utilisateur"
export USERFULLNAME="mon_utilisateur Live CD"
export HOST="ubuntu"
export BUILD_SYSTEM="Ubuntu"

# USERNAME and HOSTNAME as specified above won't be honoured and will be set to
# flavour string acquired at boot time, unless you set FLAVOUR to any
# non-empty string.

export FLAVOUR="mon_ubuntu_personnalise"

Et passez directement à la section suivante : régénération du fichier initrd

Si vous voulez modifier ce comportement, éditez toutes les occurrences ubuntu et remplacez-les par mon_utilisateur, modifiez la valeur de FLAVOUR

export USERNAME="mon_utilisateur"
export USERFULLNAME="mon_utilisateur Live CD"
export HOST="mon_utilisateur"
export BUILD_SYSTEM="mon_utilisateur"

# USERNAME and HOSTNAME as specified above won't be honoured and will be set to
# flavour string acquired at boot time, unless you set FLAVOUR to any
# non-empty string.

export FLAVOUR="mon_ubuntu personnalise"

Et modifiez le mot de passe.

Commencez par créer un mot de passe crypté :

le mot de passe étant conservé dans un fichier accessible en lecture, il est nécessaire de le crypter pour préserver sa confidentialité

mkpasswd -s monmotdepasse
U5dDh03hz1L6.

Votre mot de passe est ici "monmotdepasse", il sera conservé sous la forme "U5dDh03hz1L6." dans le fichier de configuration.

Et insérez-le dans le script de création de l'utilisateur

~/livecd$ gksudo gedit squashfs/usr/share/initramfs-tools/scripts/casper-bottom/10adduser
Avec ubuntu 14.04, il semblerait que le fichier 10adduser soit devenu 25adduser, si vous obtenez un fichier vide avec la ligne ci-dessus essayez en remplaçant 10adduser par 25adduser

Repérez la section suivante :

set passwd/root-password-crypted *
set passwd/user-password-crypted U6aMy0wojraho

Insérez votre nouveau mot de passe :

set passwd/root-password-crypted U5dDh03hz1L6.
set passwd/user-password-crypted U5dDh03hz1L6.
Lors du démarrage, l'utilisateur automatiquement créé à UID de 999. Pour que cette création se passe bien il faut qu'il n'y ait aucun utilisateur existant ayant un UID == 999. Pour détecter le problème, exécutez la commande:
 awk -F: '$3 == 999' /etc/passwd

Et modifiez les UID des utilisateurs trouvés:

usermod -u 500 <utilisateur_problematique_1>
usermod -u 501 <utilisateur_problematique_2>

Par exemple, l'installation des additions invités de virtualbox créé un utilisateur vboxadd pouvant avoir l'uid 999.

Pour que ces modifications soient prises en compte, il est impératif de recréer le fichier initrd qui est chargé au boot. Cette étape est réalisée en chroot (à l'intérieur du système du liveCD).

~/livecd$ sudo chroot squashfs
update-initramfs -u -k all
exit

Ceci n'est qu'un aperçu des modifications que vous pouvez faire, il serait impossible de les lister toutes.

Création du nouveau LiveCD

Maintenant que le système correspond à vos besoins, nous allons recréer un liveCD à partir de votre système personnalisé.

Reconstruction du squashfs

Pour n'avoir certains logiciels qu'en session live, et qu'ils ne s'installent pas sur l'ordinateur, il suffit de les ajouter au fichier

iso/casper/filesystem.manifest-remove

Comme toute compression, cela prend beaucoup de ressources et peut prendre du temps.

On rajoute -info à la fin qui équivaut à un verbose… pratique pour voir l'avancement de la compression (la barre de progression reste visible) et aussi pour voir ce qui pourrait éventuellement bloquer.
Une fois la procédure terminée, la taille de votre fichier s'affiche dans le terminal, vous savez donc si vous avez dépassé la taille maximale ou pas. Si c'est le cas, supprimez des applications/fichiers dans le système, et recommencez.

Reconstruction de l'iso

Si le noyau a été mis à jour, que vous avez changé l'usplash ou que vous avez modifié le compte utilisateur, il va falloir remplacer deux fichiers essentiels sur l'image disque, que l'on trouve dans iso/casper : vmlinuz et initrd.lz.
On les remplace par les fichiers vmlinuz-* et initrd-img* que l'on trouve dans le dossier squashfs/boot :
sudo rm -f iso/casper/vmlinuz iso/casper/initrd.lz
sudo cp squashfs/boot/vmlinuz-3.2.0-54* iso/casper/vmlinuz 
sudo cp squashfs/boot/initrd.img-3.2.0-54* iso/casper/initrd.lz

FIXME : Je crois que le nom des fichiers n'est plus à jour. (mis à jour ubuntu 12.04.3)

Attention mkisofs devient obsolète selon les depots utilisés. La commande équivalente avec genisoimage :
sudo genisoimage -o "Nom personnalisé.iso" -r -J -no-emul-boot -V "USB_LINUX" -boot-load-size 4 -boot-info-table -b isolinux/isolinux.bin -c isolinux/boot.cat ./ 

Renommer le fichier "nom personnalisé" en "nom personnalisé".iso

Générer l'iso à partir d'Ubuntu 22.04 est plus complexe, le système semble avoir été modifié

il faut extraire le mbr et l'efi depuis l'iso original, c'est la seule méthode que j'ai pu trouver et qui semble fonctionelle

voici les commandes pour le faire et générer l'iso:

j'ai un peu plus de détail en fait ceci et utilisé pour extraire le système efi

depuis l'image iso d'origine l'exemple ici et pour ubuntu 22.04 desktop amd64

il faut adapter en fonction de votre iso d'origine

dd if=ubuntu-22.04-desktop-amd64.iso bs=1 count=432 of=~/livecd/boot_hybrid.img

ici si on liste les partitions présentes sur l'iso

/sbin/fdisk -l ubuntu-22.04-desktop-amd64.iso
 
Disk ubuntu-22.04-desktop-amd64.iso: 3.4 GiB, 3654957056 bytes, 7138588 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: A09DB2B8-B5F6-43AE-AFB3-91E0A90189A1
 
Device                            Start     End Sectors  Size Type
ubuntu-22.04-desktop-amd64.iso1      64 7129427 7129364  3.4G Microsoft basic data
ubuntu-22.04-desktop-amd64.iso2 7129428 7137923    8496  4.2M EFI System
ubuntu-22.04-desktop-amd64.iso3 7137924 7138523     600  300K Microsoft basic data

ici le système efi démarre (start) à 7129428

donc on définit skip=7129428

et le secteur (setors) fait 8496

donc count=8496

dd if=ubuntu-22.04-desktop-amd64.iso bs=512 skip=7129428 count=8496 of=~/livecd/efi.img
dd if=ubuntu-22.04-desktop-amd64.iso bs=1 count=432 of=~/livecd/boot_hybrid.img
 
xorriso -as mkisofs -r \
  -V 'Ubuntu 22.04 LTS MODIF (EFIBIOS)' \
  -o ~/livecd/ubuntu-modif.iso \
  --grub2-mbr ~/livecd/boot_hybrid.img \
  -partition_offset 16 \
  --mbr-force-bootable \
  -append_partition 2 28732ac11ff8d211ba4b00a0c93ec93b ~/livecd/efi.img \
  -appended_part_as_gpt \
  -iso_mbr_part_type a2a0d0ebe5b9334487c068b6b72699c7 \
  -c '/boot.catalog' \
  -b '/boot/grub/i386-pc/eltorito.img' \
    -no-emul-boot -boot-load-size 4 -boot-info-table --grub2-boot-info \
  -eltorito-alt-boot \
  -e '--interval:appended_partition_2:::' \
    -no-emul-boot .
 

* Cette image ne peut être copiée que sur DVD. Si vous souhaitez pouvoir copier cette image sur une clé USB, exécutez la commande suivante sur votre ISO :

sudo isohybrid "nom personnalisé.iso"

De cette façon tous les supports bootables seront supportés par votre ISO.

Modifications de la configuration du compte utilisateur

Votre liveCD est prêt à l'emploi. Comme indiqué brièvement dans la section Modifications, il est possible de rajouter des fichiers dans le répertoire utilisateur.
Voici une méthode pour configurer votre session live.

Si tout est OK, il ne reste qu'à recréer une image avec ce nouveau contenu.

Recommencez à partir de Reconstruction du liveCD. Au prochain démarrage de l'image, les fichiers de configuration seront installés et pris en compte.

Liens


Contributeurs : Elessor, traaf, Furious-therapy, Eric Buist, Gpocentek (classroom Ubuntu-fr le 5/07/2007), FelixP (Juin 2013)