Table of Contents

Hacking SliTaz LiveCD

Introduction

Hacking SliTaz LiveCD ou comment s'amuser avec l'image ISO du LiveCD, la modifier, la personnaliser et la reconstruire à la main. À noter que vous avez aussi la possibilité de créer une saveur avec Tazlito. Créer sa propre image ISO bootable ne demande que peu de temps, les étapes à suivre étant soigneusement décrites dans ce document et faciles à réaliser. La manipulation de l'images ISO permet d'ajouter de nouveaux fichiers ou de modifier les fichiers existants sur le CDROM. L'image ISO de SliTaz fait 30 Mo et un CD-R ou CD-RW classique fournit 700 Mb, il reste donc pas mal de place pour mettre par exemple, vos photos afin de les montrer en live via SliTaz et un diaporama propulsé par le gestionnaire d'images Viewnior. Le hacking de l'image ISO permet de modifier les fichiers de configuration du chargeur de démarrage (boot loader) et son image splash ou d'en utiliser un autre tel que GRUB. Vous pouvez aussi facilement et directement ajouter des utilitaires tel que Memtest86 (outil servant à tester la RAM d'une machine). En utilisant les mêmes techniques, il est également possible de modifier le contenu du système en soi, cela demande quelques manipulations supplémentaires et un peu plus de temps… libre.

Organisation et préparation

Pour commencer il faut définir l'endroit où l'on va travailler en créant un répertoire de travail et plusieurs sous-répertoires destinés à accueillir les différents fichiers. Le hacking de l'ISO peut se faire depuis un système SliTaz ou tout autre système GNU/Linux tel que Debian, Fedora, PCLinuxOS, Slackware, etc. Si vous utilisez SliTaz en mode LiveCD (vous pouvez retirer le CDROM une fois SliTaz lancée en RAM et graver votre nouvelle ISO), nous vous conseillons d'utiliser un media USB pour conserver le travail, sinon il sera perdu à l'arrêt du système. Pour travailler nous vous proposons d'utiliser un répertoire hacked/ que vous pouvez créer dans un répertoire /home/slitaz, à la racine de votre espace utilisateur, ou ailleurs si vous le désirez. Utiliser un répertoire /home/slitaz vous permet de stocker une image ISO originale et de créer en option un répertoire src/ pour télécharger d'éventuels paquets sources. Toutes les étapes de hacking peuvent se faire en ligne de commandes via un terminal X tel que XTerm ou en mode texte et un terminal Linux. À noter que nous vous conseillons de faire les opérations en tant que root afin d'éviter tout problème de permission. Pour devenir administrateur (root), créer le répertoire de travail dans /home/slitaz/hacked et se placer dedans :

 $ su
 # mkdir -p /home/slitaz/hacked
 (# mkdir -p /home/slitaz/src)
 # cd /home/slitaz/hacked

Récupérer les fichiers contenus sur l'ISO

Maintenant que vous êtes dans le répertoire de travail, il faut créer la racine de votre CDROM modifié et récupérer les fichiers contenus dans l'ISO original du LiveCD, ä savoir le noyau Linux (bzImage), le système de fichiers compressé (rootfs.gz) et les fichiers du chargeur de démarrage Isolinux. Pour récupérer ces fichiers vous avez deux solutions, soit les prendre depuis un CDROM gravé, soit directement depuis une image ISO locale. Pour créer la racine de votre CD (rootcd) et copier les fichiers depuis un périphérique CDROM reconnu comme /dev/cdrom et monté sur /media/cdrom :

 # mount -t iso9660 /dev/cdrom /media/cdrom
 # mkdir rootcd
 # cp -a /media/cdrom/* rootcd

Pour monter une image ISO en loop sur le répertoire temporaire nommé /tmp/loop (avec l'image ISO slitaz-3.0.iso préalablement téléchargée ou copiée), créer la racine du CD, copier les fichiers et démonter l'image ISO :

 # mkdir /tmp/loop
 # mount -o loop slitaz-3.0.iso /tmp/loop
 # mkdir rootcd
 # cp -a /tmp/loop/* rootcd
 # umount /tmp/loop

Voilà, tous les fichiers nécessaires devraient être présents dans le répertoire rootcd/, pour vous en assurer, vous pouvez pouvez lister récursivement les fichiers via la commande ls :

 # ls -R rootcd 

Ajouter des fichiers dans l'ISO

L'ajout de divers fichiers et répertoires dans l'image ISO consiste simplement à copier des données à la racine du CD-ROM (rootcd/) et à générer une nouvelle image. Les données ajoutées peuvent être classées dans un ou des répertoires préalablement créés à la racine du CD. Une fois l'image ISO gravée sur un CD-R/CD-RW vous pourrez utiliser SliTaz comme avant, monter le CD-ROM sur /media/cdrom et naviguer dans vos données graphiquement avec PCmanFM, dans un terminal avec Clex ou en ligne de commandes. Vos données seront aussi lisibles depuis tous les systèmes GNU/Linux, BSD, et même… Windows.

Créer un ou des répertoires et copier des données

Pour créer et copier des fichiers vous pouvez commencer par utiliser la ligne de commandes et continuer graphiquement en tant que simple utilisateur. Nous allons créer un répertoire images/ en tant que root et changer les permissions pour que tous les utilisateurs puissent écrire dedans :

 # mkdir rootcd/images
 # chmod 777 rootcd/images

Maintenant qu'un nouveau répertoire existe en écriture pour tous, il faut le remplir. Une fois que vous avez fini de copier vos données, il suffit de générer une nouvelle image ISO bootable.

Modifier la configuration d'isolinux

Modifier la configuration d'isolinux vous permet de créer des entrées personnalisées avec des options de boot prédéfinies, vous pouvez par exemple ajouter un label lançant SliTaz avec les options lang=fr et kmap=fr_CH. Au niveau graphisme, vous pouvez facilement changer l'image splash s'affichant au démarrage. L'application isolinux est le chargeur de démarrage (boot loader) du LiveCD, il est fournit par le paquet Syslinux. L'archive source de Syslinux fournit diverses applications dont le rôle est de démarrer un système GNU/Linux. La version binaire isolinux.bin est destinée aux image ISO. Ce chargeur de démarrage est simple, rapide et facilement configurable via un fichier de configuration principale, éditable graphiquement ou dans un terminal avec votre éditeur de texte préféré. La syntaxe du fichier de configuration isolinux.cfg est facile à comprendre, pour ajouter de nouvelles entrées il suffit de copier/coller en utilisant le fichier original. Pour éditer graphiquement le fichier isolinux.cfg avec Leafpad :

 # leafpad rootcd/boot/isolinux/isolinux.cfg & 

Fichier de configuration isolinux.cfg

Le fichier isolinux.cfg, fourni en standard sur le LiveCD de SliTaz, commence par la valeur display. Cette valeur permet d'afficher tel quel un fichier texte ou d'afficher un fichier (isolinux.msg) utilisant des caractères ASCII 24 et permettant d'afficher du texte avec une image splash. La valeur default définit le nom du label à démarrer par défaut après le temps d'attente (timeout). Timeout correspond au nombre de secondes à attendre avant de démarrer, vous pouvez le mettre à 0, hôter la ligne pour démarrer instantanément ou choisir un temps d'attente plus long tel que 80s. Pour finir, le prompt peut être désactivé via la valeur 0, les valeurs F1, F2, F3 affichent des fichiers d'aides et F4 est un display au format texte. Exemple de configuration :

display isolinux.msg
default slitaz
label slitaz
      kernel /boot/bzImage
      append initrd=/boot/rootfs.gz rw root=/dev/null vga=788
implicit 0	
prompt 1	
timeout 80
F1 help.txt
F2 options.txt
F3 isolinux.msg
F4 display.txt

Exemple d'un label slitazfr que vous pouvez ajouter à l'original, pour configurer directement la langue du système en français et avoir le clavier belge :

label slitazfr
      kernel /boot/bzImage
      append initrd=/boot/rootfs.gz rw root=/dev/null lang=fr kmap=be

Une fois que vous avez fini de modifier le fichier de configuration, il ne faut pas oublier d'enregistrer vos changements avant de générer une nouvelle image ISO bootable avec isolinux.

Installer et utiliser Memtest86

L'application memtest86 (92 ko) est un outil autonome de test de mémoire vive (RAM). Memtest86 permet de tester en profondeur l'état des barrettes de RAM et de déceler une quelconque défaillance. L'outil s'installe dans le répertoire boot/ de la racine du cdrom et se lance directement au démarrage de la machine en tapant simplement memtest au prompt d'isolinux. Direction /home/slitaz/src (si le répertoire n'existe pas : mkdir -p /home/slitaz/src) pour télécharger les sources et les dés-archiver :

 # cd /home/slitaz/src
 # wget http://www.memtest86.com/memtest86-3.3.tar.gz
 # tar xzf memtest86-3.3.tar.gz

Le paquet source de Memtest86 étant dés-archivé (vous y trouverez un fichier README en anglais donnant des informations sur l'outil), vous allez pouvoir l'installer dans le root CD de votre ISO hackée. En partant du principe que vous utilisez un répertoire de travail /home/slitaz/hacked, nous allons copier le binaire pré-compilé dans le répertoire boot/ de la racine du CD :

 # cp memtest86-3.3/precomp.bin \
   /home/slitaz/hacked/rootcd/boot/memtest

Maintenant que le binaire est installé dans le root CD, il suffit d'ajouter une entrée pour Memtest86 dans le fichier de configuration d'isolinux et de générer une nouvelle image ISO bootable. Direction /home/slitaz/hacked pour éditer le fichier isolinux.cfg avec LeafPad par exemple :

 # cd /home/slitaz/hacked
 # leafpad rootcd/boot/isolinux/isolinux.cfg &

Ajoutez les lignes suivantes :

label memtest
      kernel /boot/memtest

Site web officiel de Memtest86 : http://www.memtest86.com/

Manipuler la racine du système Live

La modification du système Live vous permet par exemple d'ajouter rapidement un nouvel utilisateur avec mot de passe, de personnaliser le graphisme ou d'ajouter des commandes exécutées automatiquement au démarrage du LiveCD. Les opérations nécessaires à la modification du système de fichier racine ( root file system) sont : extraire le système du fichier compressé rootfs.gz, modifier, reconstruire l'image du système compressé et générer une nouvelle ISO. En partant du principe que vous avez déjà préparé votre répertoire de travail, il faut commencer par créer un répertoire destiné à contenir les fichiers du système modifiable. Le système racine compressé étant nommé rootfs.gz, nous vous proposons d'utiliser un répertoire rootfs/ pour l'extraire. Direction le répertoire de travail hacked/, création du répertoire racine et copie du système compressé depuis le répertoire rootcd/boot/ (la racine du cdrom) :

 # cd /home/slitaz/hacked
 # mkdir rootfs
 # cp rootcd/boot/rootfs.gz rootfs

Maintenant que vous avez une copie du système compressé, il suffit de le décompresser et de le dés-archiver avec cpio. Techniquement : Le fichier rootfs.gz est une archive Cpio compressée avec LZMA ou Gzip, elle est reconnue comme une image initramfs par le noyau Linux. Lors du démarrage de la machine, le noyau se charge en mémoire et décompresse l'image du système en mémoire vive pour finir par exécuter les scripts d'initialisation.

Pour extraire le système dans le répertoire rootfs/ et supprimer la copie dés-archivée (Rappel : vous pouvez copier/coller les commandes) :

 # cd rootfs
 # (zcat rootfs.gz 2>/dev/null || lzma d rootfs.gz -so) | cpio -id
 # rm rootfs rootfs.gz

Le système est prêt à être modifié, vous pouvez lister les fichiers contenus à la racine de votre système hackable en utilisant la commande ls.

Modifier un fichier

Pour faire simple et vous aider à comprendre le principe, nous allons modifier un fichier script dans le but d'ajouter deux commandes exécutées automatiquement à chaque démarrage du LiveCD. La cible est : etc/init.d/local.sh, il suffit de l'ouvrir avec votre éditeur de texte préféré tel que Beaver :

 # beaver etc/init.d/local.sh & 

Nous allons ajouter une commande affichant un message et faisant dormir le système 4 secondes (c'est juste pour se faire la main). Exemple de lignes à ajouter au script destiné aux commandes locales :

echo "* Hacked SliTaz version booting..."
sleep 4

Reconstruire l'image du système compressée

Une fois les modifications terminées, vous pouvez reconstruire une image compressée de votre système modifié en utilisant find pour trouver les fichiers, cpio pour archiver, lzma ou gzip pour compresser et des pipes | pour connecter le tout. Cette commande doit être lancée depuis le répertoire racine du système (rootfs/) et créé un fichier compressé rootfs.gz dans le répertoire précédant :

 # find . -print | cpio -o -H newc | lzma e -si -so > ../rootfs.gz

Ou avec gzip :

 # find . -print | cpio -o -H newc | gzip -9 > ../rootfs.gz

Pour finir il suffit de copier votre système compressé dans le répertoire boot/ de la racine du CD et de générer une nouvelle image ISO bootable avec isolinux. Pour copier le rootfs en écrasant l'actuel, direction le répertoire de travail :

 # cd ../
 # cp -a rootfs.gz rootcd/boot

Générer une image ISO bootable avec isolinux

La suite de commandes permettant de créer une image avec le boot loader isolinux, utilise l'application genisoimage suivie de nombreuses options. Le nom de l'ISO est spécifié au début, après l'option -o et le répertoire racine (rootcd/) tout à la fin, après l'option -boot-info-table :

 # genisoimage -R -o slitaz-hacked.iso -b boot/isolinux/isolinux.bin \
   -c boot/isolinux/boot.cat -no-emul-boot -boot-load-size 4 \
   -V "SliTaz-Hacked" -input-charset iso8859-1 -boot-info-table rootcd

Si vous désirez vérifier le contenu de l'ISO avant gravage, il suffit de monter l'image en loop et de lister les fichiers. Sur SliTaz et la plupart des systèmes GNU/Linux, vous pouvez graver des images au format ISO avec l'utilitaire wodim fourni par cdrkit.

Générer de nouvelles ISO via un script

Si vous testez plusieurs possibilités et que vous êtes amené à souvent générer des nouvelles images ISO, vous aurez peut-être envie de semi-automatiser les opérations via un simple petit script SHell. Ce petit script peut être créé en ligne de commandes ou édité graphiquement, mais il ne faut oublier de le rendre exécutable. Vous pouvez créer le script avec la commande cat, à noter que EOF signifie End Of File, c'est là que le fichier se termine. Nous vous proposons de nommer le script gen_hacked_iso.sh et d'utiliser deux variables permettant de rapidement changer le nom de l'image ISO et le chemin vers le répertoire racine du CDROM :

 # cat > gen_hacked_iso.sh << "EOF"

#!/bin/sh
# Gen a new hacked ISO image.
#
ISO_NAME="slitaz-hacked.iso"
ROOTCD="rootcd"

genisoimage -R -o $ISO_NAME -b boot/isolinux/isolinux.bin \
   -c boot/isolinux/boot.cat -no-emul-boot -boot-load-size 4 \
   -V "SliTaz-Hacked" -input-charset iso8859-1 -boot-info-table $ROOTCD

EOF

Pour utiliser le script, il suffit de le rendre exécutable et de l'exécuter :

 # chmod +x gen_hacked_iso.sh
 # ./gen_hacked_iso.sh