Main menu:

Site search

Categories

mai 2009
L M M J V S D
 123
45678910
11121314151617
18192021222324
25262728293031

Archive

Customiser le liveCD d’Ubuntu

En ce qui me concerne, j’utilise les liveCD pour installer Ubuntu, pour partitionner un disque, créer ou recharger une image disque, récupérer des fichiers effacés par erreurs… Autrement dit de la maintenance principalement. Malheureusement, sur le liveCD d’Ubuntu, il n’y a aucun des outils dont je me sers le plus. Pas de PartImage, de PhotoRec…
Il existe un certain nombre de LiveCD spécialement prévus pour cela (Ubuntu Rescue Remix par exemple). Alors pourquoi vouloir créer le sien? Pour le plaisir de le faire soi-même et d’apprendre quelque chose. Tout simplement.
La technique que j’ai utilisée est basée principalement sur l’article correspondant de la documentation du site Ubuntu-fr mais adapté à mes besoins et à Jaunty.

La première chose à faire est de télécharger l’image iso d’Ubuntu et de la sauvegarder dans le répertoire ~/tmp (par exemple):

$ wget -c http://ftp.belnet.be/mirror/ubuntu.com/releases/jaunty/ubuntu-9.04-desktop-i386.iso

Ensuite, on crée quelques répertoires dont nous aurons besoin et on installe squashfs qui est un système de fichiers en lecture seule souvent utilisé avec les liveCd :

$ mkdir ~/tmp/liveCD ~/tmp/customCD ~/tmp/customCD/iso ~/tmp/customCD/squashfs
$ sudo aptitude install squashfs-tools

On monte l’image dans ~/tmp/liveCD et on copie le contenu du liveCD dans ~/tmp/customCD/iso:

$ sudo mount -o loop ~/tmp/ubuntu-9.04-desktop-i386.iso ~/tmp/liveCD
$ sudo cp -av ~/tmp/liveCD/. ~/tmp/customCD/iso
$ sudo umount ~/tmp/liveCD
 

De tous les fichiers présents sur le liveCD, on peut sans problème se débarrasser des fichiers en rapport avec l’installation depuis Windows. Ce n’est de toute façon pas notre but et cela fera un peu de place pour les paquets que nous allons rajouter:

  
$ cd ~/tmp/customCD/iso
$ sudo rm -r pics autorun.inf wubi.exe

Nous allons maintenent copier le système de fichier du liveCD sur le disque dur. Pour cela, il faut que le module squashfs soit activé préalablement:

$ sudo modprobe squashfs
$ sudo mount -t squashfs -o loop ~/tmp/customCD/iso/casper/filesystem.squashfs ~/tmp/liveCD

Comme je l’ai dit plus haut, sqaushfs est un système de fichiers dans lequel on ne peut pas écrire. On va donc le copier dans ~/tmp/customCD/squashfs de façon à pouvoir le modifier:

$ sudo cp -a ~/tmp/liveCD ~/tmp/customCD/squashfs
$ sudo umount ~/tmp/liveCD

Et c’est ici que les choses deviennent sérieuses. Pour pouvoir faire les modifications que l’ont veut dans le système de fichiers du liveCD, on va passer en chroot. Cela signifie que l’on va changer le répertoire racine (root) pour qu’il corresponde à notre système de fichiers du liveCD.
Il faut aussi monter les répertoires /proc et /sys. On va copier aussi les configurations réseau du sytème hôte afin que celui-ci fonctionne dans le chroot. On pourra ainsi télécharger de nouveaux paquets à installer:

$ sudo cp /etc/resolv.conf ~/tmp/customCD/squashfs/etc/resolv.conf
$ sudo cp /etc/hosts ~/tmp/customCD/squashfs/etc/hosts
$ sudo cp /etc/apt/sources.list ~/tmp/customCD/squashfs/etc/apt/sources.list
$ sudo chroot ~/tmp/customCD/squashfs
# sudo mount -t proc none /proc/
# sudo mount -t sysfs none /sys/

Une fois ces commandes introduites, on se retrouve en root et l’accès est restreint à notre système de fichiers chrooté.
La première chose à faire est de mettre à jour la liste des paquets et de mettre à jour le sytème:

# aptitude update
# aptitude upgrade

On va maintenant supprimer les paquets dont on n’a pas besoin, à commencer par les paquets contenant les différents langages. Affichons d’abord la liste des paquets langages:

# dpkg-query -W --showformat='${Package}\n' | grep language-pack
  language-pack-bn
  language-pack-bn-base
  language-pack-de
  language-pack-de-base
  language-pack-en
  language-pack-en-base
  language-pack-es
  language-pack-es-base
  language-pack-fr
  language-pack-fr-base
  language-pack-gnome-bn
  language-pack-gnome-bn-base
  language-pack-gnome-de
  language-pack-gnome-de-base
  language-pack-gnome-en
  language-pack-gnome-en-base
  language-pack-gnome-es
  language-pack-gnome-es-base
  language-pack-gnome-fr
  language-pack-gnome-fr-base
  language-pack-gnome-pt
  language-pack-gnome-pt-base
  language-pack-gnome-xh-base
  language-pack-pt
  language-pack-pt-base
  language-pack-xh
  language-pack-xh-base

De toutes ces langues, on ne garde que l’anglais et bien sûr le français:

# aptitude purge language-pack-bn language-pack-bn-base language-pack-de language-pack-de-base language-pack-es language-pack-es-base language-pack-gnome-bn language-pack-gnome-bn-base language-pack-gnome-de language-pack-gnome-de-base language-pack-gnome-es language-pack-gnome-es-base language-pack-gnome-pt language-pack-gnome-pt-base language-pack-gnome-xh language-pack-gnome-xh-base

Pour pouvoir ajouter tous les paquets que l’on veut, il faut cependant encore faire de la place.
Supprimons OpenOffice qui n’a rien à faire sur un liveCD de même que les jeux Gnome, F-Spot, tomboy, gnome-orca,RhythmBox et Gimp.

# aptitude purge openoffice.org-base-core openoffice.org-calc openoffice.org-common openoffice.org-core openoffice.org-draw openoffice.org-emailmerge openoffice.org-gnome openoffice.org-gtk openoffice.org-help-en-gb openoffice.org-help-en-us openoffice.org-hyphenation openoffice.org-hyphenation-en-us openoffice.org-impress openoffice.org-l10n-common openoffice.org-l10n-en-gb openoffice.org-l10n-en-za openoffice.org-math openoffice.org-style-human openoffice.org-thesaurus-en-au openoffice.org-thesaurus-en-us openoffice.org-writer
      
# aptitude purge gnome-games gnome-orca tomboy f-spot rhythmbox gimp

Maintenant que nous avons libéré de la place, nous pouvons installer les paquets et applications que nous voulons:

# aptitude install gftp partimage gparted gtkterm wireshark thunderbird ghex gnumeric encfs ccrypt vlc samba samba-common smbclient nautilus-share nautilus-open-terminal nautilus-gksu 
# aptitude clean

Notre système de fichiers dans le liveCD ayant été mis à jour, on peut sortir du chroot.

# rm -rf /tmp/*
# rm -f /etc/hosts /etc/resolv.conf
# rm -f /etc/hosts
# umount /proc
# umount /sys
# exit

Tant qu’on y est, on peut modifier le langage par défaut de façon à ce que le liveCD démarre en français:

$ echo "fr" | sudo tee ~/tmp/customCD/iso/isolinux/lang

Créons maintenant la nouvelle image iso.
Effacement de l’ancien squashfs:

$ sudo rm ~/tmp/customCD/iso/casper/filesystem.squashfs

Création du nouveau système de fichier:

$ sudo chmod a+w ~/tmp/customCD/iso/casper/filesystem.manifest
$ sudo chroot ~/tmp/customCD/squashfs dpkg-query -W --showformat='${Package} ${Version}\n' > ~/tmp/customCD/iso/casper/filesystem.manifest
$ sudo chmod go-w ~/tmp/customCD/iso/casper/filesystem.manifest
$ sudo chmod a+w ~/tmp/customCD/iso/casper/filesystem.manifest-desktop
$ sudo chroot ~/tmp/customCD/squashfs dpkg-query -W --showformat='${Package} ${Version}\n' > ~/tmp/customCD/iso/casper/filesystem.manifest-desktop
$ sudo chmod go-w ~/tmp/customCD/iso/casper/filesystem.manifest-desktop

On recrée le filesystem squashfs. Attention cette opération prend du temps:

$ sudo rm -f ~/tmp/customCD/iso/casper/filesystem.squashfs
$ sudo mksquashfs ~/tmp/customCD/squashfs ~/tmp/customCD/iso/casper/filesystem.squashfs

Mise à jour du fichier md5sum.txt:

$ sudo rm ~/tmp/customCD/iso/md5sum.txt
$ cd ~/tmp/customCD/iso
$ sudo bash -c "find . -path ./isolinux -prune -o -type f -not -name md5sum.txt -print0 | xargs -0 md5sum | tee md5sum.txt"

Création du nouveau fichier iso. L’endroit d’où est lancé le programme mkisofs est important; veillons donc à nous placer dans le bon répertoire:

$ cd ..
$ sudo mkisofs -r -V "Custom Ubuntu 9.04" -b isolinux/isolinux.bin -c isolinux/boot.cat -cache-inodes -J -l -no-emul-boot -boot-load-size 4 -boot-info-table -o custom-ubuntu-9.04-i386.iso iso

Voilà, la nouvelle image est prête. Il ne reste plus qu’à la graver sur un CD et à la tester en vrai. Si quelque chose manquait, vous pouvez modifier le contenu du liveCD en reprennant les opérations depuis le passage en chroot.