Comme vous le savez, un live CD 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 live CD linux n'est donc autre qu'un système linux classique, son but étant d'être en lecture seul 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 a 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 a partir de l'initrd.
On commence par extraire le squashfs de l'image iso pour pouvoir lui apporter les modifications souhaitée.
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é un « vrai » système.
Il nous faut commencer par copier le contenu de l'image iso sur le disque dur.
sudo mount -o loop ubuntu-desktop-xxx.iso /cdrom
Remplacez ubuntu-desktop-xxx.iso par le chemin de votre fichier iso.
~/livecd$ sudo cp -a /cdrom/. iso
l'option -a permet de conserver les droits des fichiers copiés
sudo umount /cdrom
Commençons à faire de la place. Le Live CD original est fourni avec quelques programmes Windows permettant de promouvoir Ubuntu quand on utilise le Live CD sur une plateforme Windows.
On peut donc supprimer sans souci ces répertoires (44Mo d'économisé)
~/livecd$ cd iso ~/livecd/iso$ sudo rm -r bin pics disctree programs autorun.inf kubuntu.ico start.bmp start.exe start.ini wubi-cdboot.exe ~/livecd/iso$ cd .. ~/livecd$
Nous allons maintenant copier le squashfs (le système de fichier de notre live CD) sur le disque dur afin de pouvoir le modifier.
~/livecd$ sudo mount -t squashfs -o loop iso/casper/filesystem.squashfs /cdrom
En faisant ls /cdrom
, on observe l'arborescence de notre squashfs, qui est la même que celle de n'importe quel système linux : /etc ; /boot, etc.
~/livecd$ sudo cp -a /cdrom/. squashfs
Attention, cette opération prend un peu de temps.
sudo umount /cdrom
Pour modifier le système que l'on vient de copier, nous utilisons alors un chroot. Pour en savoir plus, consultez man chroot.
Ici nous allons donc faire un chroot dans le système que nous avons copié à partir du squashfs, ceci afin de pouvoir le modifier à notre convenance.
~/livecd$ sudo mount --bind /proc squashfs/proc ~/livecd$ sudo mount --bind /sys squashfs/sys
ces deux lignes permettent d'utiliser les informations du système hôte
~/livecd$ sudo cp /etc/resolv.conf squashfs/etc/resolv.conf
afin d'utiliser la connexion réseau du système hôte
~/livecd$ sudo cp /etc/apt/sources.list squashfs/etc/apt/sources.list
pour utiliser votre sources.list personnel
~/livecd$ sudo gedit squashfs/etc/apt/sources.list
éditez le fichier sources.list si besoin pour activer/désactiver certains dépôts
~/livecd$ sudo chroot squashfs
apt-get update apt-get dist-upgrade apt-get install console-data # (Sélectionner le clavier français)
pas besoin de sudo, vous êtes en root
Attention : la commande apt-get dist-upgrade peut amener une mise à jour du kernel, ce qui vous obligera à une manipulation supplémentaire à la fin.
apt-get install *nom du paquet*
dpkg-query -W --showformat='${Installed-Size} ${Package}\n' | sort -nr | less
Cette commande vous renvoie la liste des paquets installés, classé par taille. Supprimez ceux qui ne vous servent à rien :
apt-get remove --purge *nom du paquet*
apt-get remove language* apt-get install language-pack-fr language-pack-gnome-fr language-support-fr language-pack-kde-fr language-selector
D'autres modifications peuvent se faire à l'exterieur du chroot.
apt-get clean
Supprime les .deb téléchargés via apt-get
umount /sys umount /proc rm /etc/resolv.conf exit
L'utilisateur par défaut du système chargé lorsque l'on utilise le live CD n'existe pas dans le système compressé. Il est crée 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 repertoire personnel après le boot.
~livecd$ sudo cp *votre fichier* squashfs/etc/skel
Nous allons pouvoir utiliser cette propriété un peu plus tard pour modifier l'apparence du bureau et utiliser par défaut des thèmes personnalisés.
Vous pouvez recopier des fichiers au même emplacement que sur votre propre système, par exemple :
~/livecd$ sudo cp -r /usr/share/themes/* squashfs/usr/share/themes
~/livecd$ sudo cp -r /usr/share/backgrounds/* squashfs/usr/share/backgrounds/
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 :
~/livecd$ sudo 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.
~/livecd$ echo "fr" | sudo tee iso/isolinux/lang
L'utilisateur par défaut (ubuntu) est créé lors du boot par le programme casper. Pour modifier celui-ci, Il faut
~/livecd$ sudo gedit squashfs/etc/casper.conf
Ce fichier est court et explicite,
# This file should go in /etc/casper.conf
# Supported variables are:
# USERNAME, USERFULLNAME, HOST, BUILD_SYSTEM
export USERNAME=“ubuntu”
export USERFULLNAME=“Live session user”
export HOST=“ubuntu”
export BUILD_SYSTEM=“Ubuntu”
Modifiez les valeurs à votre convenance.
Si vous voulez conserver cette propriété, ne modifiez que la première partie
export USERNAME=“mon_utilisateur”
export USERFULLNAME=“mon_utilisateur Live CD”
export HOST=“ubuntu”
export BUILD_SYSTEM=“Ubuntu”
Et passez directement à la section suivante : régénération du fichier initrd
Si vous voulez modifier ce comportement, éditez toutes les occurences ubuntu et remplacez les par mon_utilisateur
export USERNAME=“mon_utilisateur”
export USERFULLNAME=“mon_utilisateur Live CD”
export HOST=“mon_utilisateur”
export BUILD_SYSTEM=“mon_utilisateur”
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$ sudo gedit squashfs/usr/share/initramfs-tools/scripts/casper-bottom/10adduser
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.
Pour que ces modification soient prises en compte, il est impératif de recréer le fichier initrd qui est chargé au boot. Cette étape est réalisé en chroot (à l'intérieur du système du live CD).
~/livecd$ sudo chroot squashfs update-initramfs -k all -u exit
Ceci n'est qu'un aperçu des modifications que vous pouvez faire, il serait impossible de les lister toutes.
Maintenant que le système correspond a vos besoin, nous allons recréer un live CD à partir de votre système personnalisé.
sudo apt-get install squashfs-tools
~livecd$ sudo rm iso/casper/filesystem.squashfs
Tout d'abord, il faut régénérer le fichier manifest pour qu'il prenne en compte les modifications dans les paquets.
~/livecd$ sudo chmod a+w iso/casper/filesystem.manifest ~/livecd$ sudo chroot squashfs dpkg-query -W --showformat='${Package} ${Version}\n' > iso/casper/filesystem.manifest ~/livecd$ sudo chmod go-w iso/casper/filesystem.manifest ~/livecd$ sudo chmod a+w iso/casper/filesystem.manifest-desktop ~/livecd$ sudo chroot squashfs dpkg-query -W --showformat='${Package} ${Version}\n' > iso/casper/filesystem.manifest-desktop ~/livecd$ sudo chmod go-w iso/casper/filesystem.manifest-desktop
Il faut maintenant compresser le système de fichier du Live CD pour pouvoir le mettre dans une image CD.
~/livecd$ cd squashfs ~/livecd/squashfs$ sudo mksquashfs . ../iso/casper/filesystem.squashfs
Comme toute compression, cela prend beaucoup de ressources et peut prendre du temps. Une fois que ça a finit de mouliner, 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.
On les remplace par les fichiers vmlinuz-* et initrd-img* que l'on trouve dans le dossier ~livecd/squashfs/boot (* représente la version du noyau à jour)
~livecd$ sudo cp squashfs/boot/vmlinuz-2.6* iso/casper/vmlinuz ~livecd$ sudo cp squashfs/boot/initrd.img-2.6* iso/casper/initrd.gz
~livecd$ cd iso ~livecd/iso$ sudo find . -type f -print0 |xargs -0 md5sum |sudo tee md5sum.txt ~livecd/iso$ cd ..
C'est terminé, il ne reste plus qu'à reconstruire une image iso :
~/livecd$ sudo mkisofs -r -V "Custom Ubuntu Live CD" -cache-inodes -J -l -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -o custom-live-cd-i386.iso iso
Cette commande crée un fichier iso dans le répertoire courant, ~/livecd/custom-live-cd-i386.iso
Votre live CD 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. Cela est aussi valable pour les fichiers de configuration, nous allons donc exploiter cette possibilité pour modifier les réglages par défaut du compte utilisateur.
Il est nécessaire de démarrer le cd, en le gravant, ou de préférence en utilisant un système de virtualisation, comme, par ordre de préférence, virtualbox, vmware ou qemu.
Une fois démarré, procédez à toutes les modifications requises, comme appliquer les thèmes rajoutés sur le CD, changer la page d'accueil de firefox ou lui rajouter des modules complémentaires, remanier les menus et la présentation de gnome-panel etc…
Quand vous êtes satisfaits du résultat, ouvrez nautilus et remontez dans l'arborescence au niveau de /home. Créez une archive de votre répertoire utilisateur (clic droit > créer une archive) et sauvegardez là par email ou par FTP.
Vous pouvez maintenant éteindre la machine virtuelle.
Récupérez l'archive et décompressez la, par exemple dans ~livecd/profil
Vous devez maintenant recopier les fichiers de cette archive dans le répertoire /etc/skel du squashfs.
cd livecd ~/livecd$ sudo cp -r profil/. squashfs/etc/skel ~/livecd$ sudo chown -R root:root squashfs/etc/skel
Vérifiez que les fichiers soient au bon emplacement avec ls. Vous devez voir les fichiers de configuration sous cette forme :
~/livecd$ ls -la squashfs/etc/skel ... drwxr-xr-x 2 root root 304 2008-03-21 08:25 .fontconfig drwx------ 4 root root 96 2008-03-21 08:25 .gconf drwx------ 2 root root 80 2008-03-21 08:25 .gconfd drwxr-xr-x 4 root root 112 2008-03-21 08:25 .gnome drwx------ 9 root root 272 2008-03-21 08:25 .gnome2 drwx------ 2 root root 48 2008-03-21 09:15 .gnome2_private drwxr-xr-x 2 root root 88 2008-03-21 08:25 .gstreamer-0.10 ...
Si tout est OK, il ne reste qu'à recréer une image avec ce nouveau contenu.
Recommencez à partir de Reconstruction du Live CD. Au prochain démarrage de l'image, les fichiers de configuration seront installés et pris en compte.