HOWTO Créer un LiveCD ou une LiveUSB

Un article de Gentoo Linux Wiki.


Cet article fait partie des HOWTOs.
Méthodes d'installation CD Live Noyau et matériel Portables et Notebooks Portage Système Réseaux et Services Serveur X Logiciels fréquemment utilisés Autres

Sommaire

[modifier] Introduction

J'ai écrit ce HOWTO après avoir essayé de trouver un moyen de démarrer sur ma passerelle personnelle qui pourrait être utilisé pour récupérer ou installer un système. On pourrait se demander pourquoi ne pas utiliser le LiveCD standard de Gentoo. En fait, ma machine est une passerelle construite autour d'un mini-itx et n'a pas de lecteur CDRom ou de lecteur disquette. Il faut donc un moyen de faire rentrer Gentoo là dedans, et de faire des manipulations de sauvetage si nécessaire. Heureusement, les mini-itx peuvent démarrer sur un périphérique USB, et je préfère l'idée d'avoir une clef ou un disque USB que je pourrai utiliser sur n'importe quelle machine pouvant démarrer sur un périphérique USB à utiliser le réseau et les capacités de la carte réseau qui supporte le protocole PXE pour démarrer (qui est également supporté par la machine).

Nous utiliserons donc une clef USB de 64Mo et nous allons générer une image équivalente à celles trouvées sur les LiveCD de Gentoo, qui pourra fonctionner sur notre clef USB.

Ce HOWTO devrait vous permettre de construire une image pour LiveCD ou LiveUSB.

[modifier] Instruction

[modifier] Créer un LiveCD

Nous allons utiliser une machine sous Gentoo Linux, et lui connecter dessus notre clef USB (celle-ci doit faire au minimum 28Mo et vous avez besoin d'une machine qui peut démarrer sur un périphérique USB). Si vous voulez mettre également l'archive stage1*.bz2 de Gentoo dans votre clef, vous aurez besoin de 12Mo supplémentaires. Si vous ne pouvez pas disposer de ces 12Mo, il vous faudra aller chercher l'archive du stage1 sur un miroir Gentoo une fois que vous aurez démarré sur votre clef USB et activé votre connexion réseau.

  • Tout d'abord, nous allons installer livecd-ng qui nous permettra de créer un LiveCD classique. Comme il est masqué, nous devons le démasquer par le biais de /etc/portage/package.keywords et nous installons livecd-ng :
Code : Installation de livecd-ng
echo "app-admin/livecd-ng ~x86" >> /etc/portage/package.keywords
emerge -a livecd-ng

Cela va vous installer un script de création de LiveCD Gentoo dans /etc/sbin/livecd-ng. De plus, un nouveau répertoire /etc/livecd-ng. Il sera utilisé pour créer et sauvegarder les profiles des types de LiveCD que vous voulez créer. Il contiendra notamment un profile appelé gentoo-basic par défaut, qui pourra être utilisé et configuré selon les besoins du bord...

Nous allons maintenant changer quelques points dans la configuration par défaut afin :

  1. d'utiliser le bon miroir Gentoo
  2. d'être sûr que notre LiveCD charge les bons modules USB au démarrage
  3. de spécifier le fichier de configuration du noyau personnalisé qui sera à utiliser
Fichier : /etc/livecd-ng/profiles/gentoo-basic/settings
## Changer la ligne CD_STAGETARBALL en :
CD_STAGETARBALL=http://distro.ibiblio.org/pub/linux/distributions/gentoo/releases/1.4_rc4/x86/x86/stages/stage3-x86-1.4_rc4.tar.bz2

## Ajoutez les modules suivants aux variables START et STORAGE_MODULES :
 usbcore usb-uhci uhci usb-ohci usb-storage

## Changez le nom du fichier de configuration explicité dans la variable ''KERNCONFIG'' pour mettre le suivant :
KERNCONFIG=kernel-config-2.4-latest


  • Changer le message de démarrage pour Bienvenue sur la clef LiveUSB de Gentoo (ou ce que vous voulez) :
Fichier : /etc/livecd-ng/profiles/gentoo-basic/motd
Welcome to the Gentoo Linux  LiveUSBstick !


  • Copiez un fichier de configuration de noyau et personnalisez-le pour qu'il contienne tous les modules nécessaires concernant le support USB (usb-uhci, usb-ohci, usb-storage...) et possède également le support pour les systèmes de fichier de type VFAT (utilisé comme système de fichiers pour la plupart des disques USB).
$ cp kernel-config-2.4.20_pre4-pcmcia kernel-config-2.4-latest 
$ nano -w kernel-config-2.4-latest 
Fichier : kernel-config-2.4-latest
(Mettre les paramètres suivants dans la section 'File Systems')
CONFIG_FAT_FS=y
CONFIG_MSDOS_FS=y
CONFIG_VFAT_FS=y

(Mettre les paramètres suivants dans la section 'USB Support')
CONFIG_USB=m
CONFIG_USB_DEVICEFS=y
# CONFIG_USB_EHCI_HCD is not set
CONFIG_USB_UHCI=m
CONFIG_USB_UHCI_ALT=m
CONFIG_USB_OHCI=m
CONFIG_USB_STORAGE=m


  • Modifier le fichier qui spécifie quels ebuilds masqués doivent être installés sur votre LiveCD. Attention : nous utiliseront un noyau gentoo-sources à la place, et partimage n'est plus un paquet masqué.
$ nano -w stage1-experimental 
Fichier : stage1-experimental
#(ENLEVER les deux lignes suivantes :)
=sys-kernel/xfs-sources-2.4.20_pre4
sys-apps/partimage


  • Modifiez le fichier qui donne une liste des ebuilds standards pour inclure le dernier noyau 2.4 et l'utilitaire partimage :
$ nano -w stage1-packages 
Fichier : stage1-packages
#(à la fin du fichier, ajouter les entrées suivantes)
sys-kernel/gentoo-sources
sys-apps/partimage
  • Le script d'initialisation utilisé sur les image LiveCD au démarrage s'appelle linuxrc. Il vous faut le modifier pour ajouter le support du démarrage sur un dispositif USB en plus des dispositifs CDROMs habituels.
$  nano -w /etc/livecd-ng/profiles/global/linuxrc 
Fichier : /etc/livecd-ng/profiles/global/linuxrc
#(Ajoutez cette nouvelle fonction directement avant la fonction findmount()
findusbmount() {
    if mount -t vfat -r /dev/sda1 /newroot/mnt/cdrom; then
        if [ ! -e /newroot/mnt/cdrom/livecd.cloop -a ! -e /newroot/mnt/cdrom/livecd.loop ]; then
            echo -e "${HILITE}---- /dev/sda1 is not a LiveUSBStick; skipping...${NORMAL}"
            umount /newroot/mnt/cdrom
        else
            mounted=/dev/sda1
            echo -e "${HILITE}---- USB medium found on /dev/sda1${NORMAL}"
        fi
    fi
}

#(enlever les lignes suivantes...)
initmsg "---- Mounting the CD"
findmount /newroot/dev/cdroms/*

#(...et les remplacer par les suivantes)
initmsg "---- Mounting the USB/CD"
findusbmount
if [ ! "$mounted" ]; then
    findmount /newroot/dev/cdroms/*
fi
  • Avant de lancer le script livecd-ng pour générer notre image ISO, vous devez préciser quelques informations supplémentaires concernant l'environnement, qui seront mises dans un fichier spécial dans votre répertoire utilisateur (c'est à dire ici, root). Cela inclue notamment des informations sur le lieu où est l'arborescence Portage de votre système Gentoo sur lequel vous travaillez, ainsi que le lieu temporaire où sera construit l'image, et où sera téléchargé l'archive stage1. Il vous faudra a priori un peu plus de 1Go d'espace temporaire. Dans notre cas, /opt avait suffisamment d'espace donc c'est le répertoire que nous utiliserons :
$  nano -w ~/.livecd-ng 
Fichier : ~/.livecd-ng
CD_DISTDIR=/usr/portage/distfiles
CD_PORTDIR=/usr/portage
CD_TEMPROOT=/opt/tmp
CD_STAGELOC=/opt/download
  • Il semblerait que l'ebuild pour livecd-ng soit cassé et qu'il manque un certain nombre de paquets pour générer une image LiveCD. Syslinux et Busybox sont accessibles (ils ont un ebuild). Mais curieusement l'utilitaire cloop n'est pas disponible comme ebuild. Cet utilitaire est nécessaire pour créer une image compressée. J'ai pu trouverune version sur le site de Knoppix. Si quelqu'un sait pourquoi cloop n'est pas inclus dans Gentoo, j'aimerai savoir.

Note$nbsp;: Une requête restée sans réponse sur le forum est disponible ici.

$ mkdir /etc/livecd-ng/archives 
$ emerge syslinux 
$ cp /usr/lib/syslinux/isolinux.bin /etc/livecd-ng/archives/ 
$ emerge -f busybox 
$ cp /usr/portage/distfiles/busybox-0.60.3.tar.gz /etc/livecd-ng/archives/ 
$ cd /etc/livecd-ng/archives 
$ wget http://developer.linuxtag.net/knoppix/sources/cloop_0.68-3.tar.gz
  • En plus de ça, les versions et formats d'archive de ces utilitaires ne sont pas ceux qu'attend de voir livecd-ng, donc il va falloir faire quelques modifications dans ce script pour que tout aille pour le mieux :
$ nano -w /usr/sbin/livecd-ng 
Fichier : /usr/sbin/livecd-ng
#(Changer la version et le lieu de l'archive des sources de busybox)
BUSYBOX_TARBALL=busybox-0.60.3.tar.gz
BUSYBOX_DIR=busybox-0.60.3

#(Changer la version et le lieu de l'archive des sources de cloop)
CLOOP_TARBALL=cloop_0.68-3.tar.gz
CLOOP_DIR=cloop-0.68

#(Changer la ligne permettant de désarchiver busybox pour utiliser une archive tar.gz au lieu de bz2)
cwrapper tar xzf ${BUSYBOX_TARBALL}

#(Changer ke déplacement de cloop_ucl.o en déplacement de cloop.o)
cp ${CD_BUILDTEMP}/${CLOOP_DIR}/cloop.o ${CD_BUILDCHROOT}-initrd/modules/cloop.o \
   || chroot_die "can't find ucl cloop module"
   
#(Changer l'utilisation de create_compressed_ucl_fs pour utiliser create_compressed_fs instead)
cat ${LOOP_FILE} | ${CD_BUILDTEMP}/${CLOOP_DIR}/create_compressed_fs \
    - 131072 > ${CLOOP_FILE} || chroot_die


  • Créer les répertoires temporaires pour construire l'image ISO :
$ mkdir -p /opt//tmp/gentoo-basic 
$ mkdir /opt/download
  • Aller dans la racine des profiles de LiveCD, et se préparer à lancer la génération d'image :
$ cd /etc/livecd-ng

Note : Vous pourrez trouver de l'aide sur le script livecd-ng en faisant livecd-ng -h ou en faisant un zcat /usr/share/doc/livecd-ng-1.0/README.gz .

  • Lancer le script en utilisant le profile gentoo-basic pour télécharger tous les paquets requis à la création de l'image ISO :
$ livecd-ng gentoo-basic fetch
  • Compiler l'ensemble des paquets (notamment le noyau) :
$ livecd-ng gentoo-basic build

Note : On vous demandera si vous voulez inclure chacun des modules du noyau qui ne sont pas dans le fichier de configuration du noyau que nous avons créé précédemment. Une fois la compilation finie, il pourrait être utile de copier le fichier de configuration du noyau depuis /opt/tmp/gentoo-basic/cdroot/usr/src/linux/.config et écraser le fichier /etc/livecd-ng/profiles/gentoo-basic/kernel-config-2.4-latest. Si vous voulez modifier le noyau de nouveau et le reconstruire, vous n'avez alors qu'à modifier kernel-config-2.4-latest et lancer un livecd-ng kernbuild.

  • Créer l'initrd pour notre image ISO.
$ livecd-ng gentoo-basic initrd
  • Nettoyer tout ce qui ne devrait pas être inclu dans notre image ISO, parce qu'inutile.
$ livecd-ng gentoo-basic clean

Note : ignorez l'avertissement suifant si il apparait : 'No gentoo-basic clean script found; skipping'

  • Créer une image compressée de type loop.
$ livecd-ng gentoo-basic cloop 
  • Créer une image ISO pour le LiveCD
$ livecd-ng gentoo-basic isogen 
  • Supprimer tous les environnements en chroot laissés par le script.
$ livecd-ng gentoo-basic umount
  • Vous avez maintenant une image ISO de LiveCD bootable pour Gentoo, prête à être gravée sur un CD, en utilisant votre logiciel de gravure préféré. Cette image est située ici : /opt/tmp/gentoo-basic/livecd.iso

Note : En gravant votre CD, vous pourrez également ajouter un répertoire supplémentaire nommé gentoo dans la racone de votre CD, et copier les trois archives d'installation de Gentoo dans celui-ci.

[modifier] Créer une clef LiveUSB

Voilà les dernières étapes à franchir pour obtenir une clef USB sur laquelle vous pourrez démarrer :

  • Vérifiez que votre clef USB est bien insérée dans votre machine, mais qu'elle n'est pas montée.

Attention : Les instructions suivantes supposent que votre clef USB est sur le périphérique sda1. Si vous avez un autre périphérique, de type SCSI notamment, pensez à bien changer sda1 par le périphérique de votre clef USB pour ne pas altérer vos dispositifs déjà en place.

  • Installer le paquet Gentoo qui permet de créer des systèmes de fichiers de type VFAT :
$ emerge dosfstools
  • Nettoyer tout ce qui est inutile sur votre clef USB (par exemple, votre CV... :p). Cela peut prendre quelques minutes (ignorez le warning final) :
$ dd if=/dev/zero of=/dev/sda1
  • Formattez la clef USB dans un système de fichiers VFAT :
$ mkfs.vfat /dev/sda1
  • Montez votre clef USB
$ mkdir /mnt/clefusb 
$ mount -t vfat /dev/sda1 /mnt/clefusb
  • Copiez les fichiers de démarrage créés pour le LiveCD, qui ont été utilisés dans l'ISO, et mettez-les dans la racine de votre clef USB :
$ cp /opt/tmp/gentoo-basic/isoroot/livecd.cloop /mnt/clefusb/ 
$ cp /opt/tmp/gentoo-basic/isoroot/isolinux/* /mnt/clefusb/
  • Faites une copie du fichier de configuration du gestionnaire de démarrage Syslinux pour ISO, vers le fichier requis par Syslinux pour les disquettes ou les clefs USB :
$ cp /opt/tmp/gentoo-basic/isoroot/isolinux/isolinux.cfg /mnt/clefusb/syslinux.cfg

Note : vous pouvez également ajouter un répertoire supplémentaire nommé gentoo dans la racine de votre CD, et copier le stage1 de Gentoo dans celui-ci. C'est le moment où jamais.


  • Démontez maintenant votre clef USB et lancez syslinux pour rendre votre clef USB démarrable.
$ umount /mnt/clefusb
$ syslinux /dev/sda1

Vous avez maintenant une clef USB démarrable sous Gentoo !!!

  • Enlevez votre clef USB, et mettez-là sur la machine sur laquelle vous voulez démarrer votre Gentoo. Configurez le BIOS de la machine cible pour qu'elle démarre sur un périphérique USB avant de démarrer sur le disque dur, puis démarrez votre machine.
  • Pour faire une copie de sauvegarde de votre image de clef USB vous pouvez utiliser une commande du type :
$ dd if=/dev/sda1 of=~/gentoousb.img 

Puis si vous devez restaurer votre image sur votre clef USB, il vous suffira de faire la manipulation dans l'autre sens :

$ dd if=~/gentoousb.img of=/dev/sda1

[modifier] Notes

Au lieu d'utiliser livecd-ng pour créer notre clef USB de démarrage, on peut utiliser directement une image pré-fabriquée de celles proposées par Gentoo, monter l'ISO, modifier le script linuxrc, ajouter les modules USBs supplémentaires, copier le contenu dans la clef USB puis utiliser syslinux pour rendre démarrable la clef USB.
Ce message (en anglais) vous proposera quelques bonnes astuces pour le cas où vous vouliez utiliser cette technique.

Je ne sais pas si c'est faisable, mais le magasin Gentoo pourrait vendre des petites clefs USB avec un logo Gentoo sur le côté, et qui permette de faire une installation de Gentoo. Ça pourrait être un bon moyen de promouvoir Gentoo, non ?

The following bugs and enhancement reqests have been added/modified in relation to this howto to make building livecds and usbs easier:

BUG 22155 : Mettre à jour le script livecd-ng pour qu'il utilise les bonnes versions de BusyBox et cloop et pour inclure BusyBox, cloop et syslinux dans le profile par défaut gentoo-basic.

BUG 21411 : Inclut cloop comme un ebuild standard pour Gentoo.

ER 22157 : Modifirez le script linuxrc et le profile par défaut basic-gentoo pour avoir un support pour les LiveUSB en plus du LiveCD.

Note : Les modifications que j'ai faites sur le script linuxrc ont besoin d'être testé un peu plus pour vérifier que cela fonctionne avec tous le plus de périphériques USB possibles, et pour être sur qu'il n'entre pas en conflit avec un périphérique SCSI existant.

Bonne chance à vous !

[modifier] À lire également

Autres langues