Construire un LiveCD Ubuntu persistant et/ou un PenDrive Linux
…avec Kubuntu 8.04.1 (ça devrait très bien marcher également avec n’importe quel Ubuntu ou Xubuntu 8.04)
Après toutes les étapes qui ont été vues précédemment pour essayer de construire un liveCD persistant à partir d’un liveCD kubuntu 8.04.1, on récapitule maintenant les étapes importantes pour faire un liveCD qui marche (si possible) en mode persistant et son pendant pendrive tel décrit dans l’article précédant chronologiquement celui-ci.
On pourra soit démarrer le linux à partir du CD en mode persistant (ou non persistant aussi d’ailleurs), soit le démarrer directement sur la clef USB (également en mode persistant ou non). En cas de démarrage en mode persistant, on aura la même config quelque soit le mode de démarrage. Il est par ailleurs normalement possible de conserver une partition lisible sous windows sur la clef USB. Les possibilités sont réellement multiples. Bien entendu, pour mettre tout cela sur la clef, il est préférable d’avoir une clef d’une taille conséquente (4 ou 8 Go).
- Création du CD à partir d’une image existante
- on récupère l’image du LiveCD 8.04.1 ici (ne pas sélectionner “alternate CD“) et on la place dans notre répertoire principal que l’on appellera “$test”
- on récupère la version 1.135 de Casper ici. On peut la placer également dans $test.
- on développe l’image du CD et on la copie dans un répertoire de travail :
cd $test
mkdir iso
sudo mount -o loop ubuntu-desktop-xxx.iso /cdrom
sudo cp -a /cdrom/. iso
sudo umount /cdromn.b.: voir les premières étapes de Comment personnaliser son live cd ubuntu.
- on peut d’ores et déjà faire un petit peu de nettoyage :
cd iso
sudo rm -r autorun.inf pics wubi.exe umenu.exe
cd ..Ce n’est pas grand chose, mais ça ne mange pas de pain.
- on déplie le squashfs qui est la partition compressée :
mkdir squashfs
sudo mount -t squashfs -o loop iso/casper/filesystem.squashfs /cdrom
sudo cp -a /cdrom/. squashfs
sudo umount /cdrom - on passe en chroot dans le squashfs pour faire quelques opérations de mise à jour
sudo mount --bind /proc squashfs/proc
sudo mount --bind /sys squashfs/sys
sudo cp /etc/resolv.conf squashfs/etc/resolv.conf
sudo cp /etc/apt/sources.list squashfs/etc/apt/sources.listà ce stade, on peut modifier le sources.list si on veut retirer/ajouter des dépots. Une fois ceci fait (pour les détails de qui fait quoi, toujours se reporter ici), on passe en chroot et on fait ce qu’on a à faire :
sudo chroot squashfs
apt-get update # mise à jour de la liste des paquets disponibles
apt-get dist-upgrade # mise à jour des paquets
apt-get install console-data # sélectionner manuellement le clavier français ("choisir un codage clavier pour votre architecture")- pour connaître la liste des paquets installés et la place qu’il prennent, on utilise :
“dpkg-query -W --showformat='${Installed-Size} ${Package}\n' | sort -nr | less“ - On retire un paquet avec :
“apt-get remove --purge ##nom-du-paquet##“ - On installe un paquet avec :
“apt-get install ##nom-du-paquet##“ - On peut repérer et supprimer les paquets de langages un peu lourds qui ne serviront pas :
“dpkg-query -W --showformat='${Package}\n' | grep language“
(garder ceux comportant “fr” et supprimer les autres, sauf “language-selector” de mémoire) - une fois toutes les opérations sur les paquets effectuées, on nettoie les restes de paquets :
“apt-get clean“
On peut alors ressortir du chroot
umount /sys
umount /proc
rm /etc/resolv.conf
exit - pour connaître la liste des paquets installés et la place qu’il prennent, on utilise :
- on met à jour casper et on ajoute le sleep qui corrige benoitement un bug :
- décompresser casper dans $test en utilisant par exemple “
sudo tar -xzf casper_xxx.tar.gz“ - copier les fichiers qui vont bien vers le squashfs (presque tout se passe dans $test/squashfs/usr/share/initramfs-tools/ ) :
cd squashfs/usr/share/initramfs-tools
cp -a $test/casper/scripts/. scripts
cp -a $test/casper/hooks/. hooks
cd ..
cp -a $test/casper/bin/casper-[pr]* casper
cd ../..
cp -a $test/casper/bin/casper-[glns]* sbinà ce stade, je ne sais pas exactement ce qu’il faut faire des fichiers qui se trouvent dans le “ubiquity-hooks” de casper.
- on modifie le script casper pour régler (très salement, j’en conviens, mais au moins ça marche) le problème de synchro entre les scripts pour la détection de la partition persistente :
- ouvrir “$test/squashfs/usr/share/initramfs-tools/scripts/casper” avec l’éditeur de votre choix en mode superutilisateur.
- trouver les lignes correspondant au montage de la partition persistante (”mkdir -p /cow” vers la ligne 380)
- insérer une ligne et y ajouter “sleep 5″ par exemple (ou plus, ou moins, suivant l’humeur, chez moi sleep 5 suffit sur tous les pc testés).
- sauver, quitter, revenir à $test.
- décompresser casper dans $test en utilisant par exemple “
- on repasse en chroot dans le squashfs pour reconstruire le initrd.gz
sudo mount --bind /proc squashfs/proc
sudo mount --bind /sys squashfs/sys
sudo chroot squashfs
update-initramfs -k all -u
umount /sys
umount /proc
exit - on reconstruit le squashfs après avoir modifié “$test/squashfs/etc/casper.conf” si on veut un peu plus personnaliser le système…
cd $test
sudo -s
apt-get install squashfs-tools
rm iso/casper/filesystem.squashfs
chmod a+w iso/casper/filesystem.manifest
chroot squashfs dpkg-query -W --showformat='${Package} ${Version}\n' > iso/casper/filesystem.manifest
chmod go-w iso/casper/filesystem.manifest
chmod a+w iso/casper/filesystem.manifest-desktop
chroot squashfs dpkg-query -W --showformat='${Package} ${Version}\n' > iso/casper/filesystem.manifest-desktop
chmod go-w iso/casper/filesystem.manifest-desktop
cd squashfs
mksquashfs . ../iso/casper/filesystem.squashfs -nolzma -info
exitattention, la ligne mksquashfs est particulièrement longue à exécuter.
- on place correctement le initrd.gz, pour ça, on peut utiliser “casper-new-uuid”
cd $test
cp casper/bin/casper-new-uuid .
sudo ./casper-new-uuid $test/squashfs/boot/initrd.img-2.6xx $test/iso/casper $test/iso/.disk - on met à jour l’image du noyau :
“sudo cp squashfs/boot/vmlinuz-2.6xx iso/casper/vmlinuz“ - on peut changer les paramètres de l’isolinux pour que le boot persistant apparaisse dans le menu de démarrage. On édite le “$test/iso/isolinux/isolinux.cfg” en mode superutilisateur et on y ajoute par exemple les lignes
LABEL persist
menu label ^Demarrage en mode persistant (casper-rw/home-rw)
kernel /casper/vmlinuz
append file=/cdrom/preseed/kubuntu.seed boot=casper persistent initrd=/casper/initrd.gz splash -- - On peut également retirer les “quiet” dans les quelques lignes du “isolinux.cfg” pour avoir un affichage un petit peu plus fourni au démarrage.
- On peut aussi forcer le langage français :
“echo "fr" | sudo tee $test/iso/isolinux/lang“ - on reconstruit la table des sommes MD5 :
“cd iso ; sudo find . -type f -print0 |xargs -0 md5sum |sudo tee md5sum.txt ; cd ..” - on reforme l’image iso :
“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“ - Préparation de la clef USB
- on ouvre fdisk sur la partition de la clef usb, on efface la partition existante.
Supposons que la partition de la clef USB qui se monte par défaut soit /dev/sda1, remplacer “x” par “a” dans les lignes suivantes, sinon, adapter…sudo umount /dev/sdx1
sudo fdisk /dev/sdxtaper “p” (”print”) affiche la partition, “d” permet de l’effacer (”delete”)
- on crée une partition 1 en fat32 si on veut qu’une partition soit encore visible par windows sur la clef (stockage de données d’échange) :
taper “n” (pour “new”), puis choisir “partition primaire”, sélectionner une taille. “t” pour “toggle” permet de changer le type de partition, choisir FAT32. - création de la partition en FAT16 que l’on va rendre bootable :
taper “n” (”new”), choisir partition primaire, partition n°2 s’il y a déjà une partition FAT32, donner une taille très légèrement supérieure à la taille de l’image iso obtenue pour le liveCD. Taper “a” pour activer cette partition pour la rendre bootable. “t” puis “6″ (FAT16). - création de la partition persistante de type linux. Nouvelle partition, primaire, n° 2 ou 3 suivant ce qui est déjà utilisé. type linux (c’est le type qui est donné par défaut).
- On quitte fdisk (avec “w” comme “write”) après avoir vérifié par “p” que tout est correct.
- On formatte les partitions qui ont lieu en nommant la partition persistante correctement.
sudo mkfs.vfat -F 32 -n data /dev/sdx1 # partition FAT32 (ou bien la formater sous windows)
sudo mkfs.vfat -F 16 -n kubuntu8 /dev/sdx2 # partition de boot (FAT16)
sudo mkfs.ext2 -b 4096 -L casper-rw /dev/sdx3Dans la dernière ligne, on peut remplacer -L casper-rw par -L home-rw pour un home persistant au lieu d’un root persistant.
N.b. : En alternative à la partition persistante linux, le fichier persistant en loopback “casper-rw” ou “home-rw” créé avec une commande du style
“dd if=/dev/zero of=/media/hda1/casper-rw bs=1M count=512“
sur une partition non linux et ensuite formaté en ext2 ou ext3 (cf ici) ne peut fonctionner que sur une partition vfat. Cette limitation apparait dans les commentaires des scripts de casper. Par ailleurs, il me semble qu’un fichier vfat doit faire une taille maximale d’un giga. - on prépare syslinux pour la partition en FAT16. Installer les packages syslinux et mtools et executer syslinux pour la partition kubuntu8 :
sudo apt-get install syslinux mtools
sudo syslinux -sf /dev/sdx2 - On modifie le liveCD pour qu’il marche sur une clef usb. On ré-utilise les fichiers qu’on avait gardés après la formation de l’image iso. Débrancher et rebrancher la clef USB (manip nécessaire après le fdisk), puis ouvrir la partition kubuntu8 (FAT16) pour qu’elle soit montée au bon endroit (”/media/kubuntu8″)
cd $test/iso
sudo cp -rfv casper dists install pool preseed .disk isolinux/* md5sum.txt README.diskdefines install/mt86plus /media/kubuntu8
cd /media/kubuntu8Il faut maintenant renommer le fichier “isolinux.cfg” en “syslinux.cfg” et le modifier légèrement. On l’édite avec les droits super-utilisateur pour remplacer “file=/cdrom/preseed/kubuntu.seed” par “file=/preseed/kubuntu.seed”. On change également “kernel /install/mt86plus” en “kernel /mt86plus” dans la section memory test. On peut sinon se baser sur le fichier “syslinux.cfg” fourni par pendrivelinux.com ici
- on peut reconstituer les sommes md5 pour un peu plus de propreté :
cd /media/kubuntu8
sudo find . -type f -print0 |xargs -0 md5sum |sudo tee md5sum.txt - c’est tout !
- Ça marche ?
C’est tout ce que l’on a à télécharger.
rq : ne pas tout de suite effacer les fichiers qui ont servi à construire l’image iso, ils vont resservir par la suite si l’on veut que la clef USB soit elle aussi bootable.
Pour info, avec mes bios, je ne peux pas booter sur une partition qui n’est pas la première partition d’une clef USB. Donc, je ne sais pas si ça peut marcher en réalité de laisser une partition en FAT32 en première partition et de booter sur la suivante.
Aucun commentaire pour le moment
Laissez une réponse