Artisan Numérique

/système/stockage/ Manipuler les images ISO

L'objectif de ce tutoriel est de pouvoir re-créer une image ISO étendue (augmentée de fichiers, pilotes, etc) à partir d'une image ISO existant ou encore de créer une ISO amorçable à partir des seuls fichiers du CD d'origine. L'utilisation de cette technique est multiple mais pour l'exemple, nous allons l'appliquer à la création d'un CD windows amorçable à partir d'une archive du type de celles fournit par Microsoft et ne contenant que les fichiers d'installation.

Créer une image iso à partir du disque d'origine

Tout d'abord il vous faut localiser le device de votre lecteur, généralement uDev fabrique pour lui un alias du genre /dev/cdrw. Il suffit ensuite d'utiliser la commande dd en spécifiant la bonne taille de bloc pour les CD-ROM

rootdd if=/dev/cdrw of=image.iso bs=2048

Pour monter cette image, comme pour tous les fichiers représentant un média, il faut passer par un loop device :

rootmkdir point_iso
rootmount image.iso point_iso -o loop,ro,unhide

Petit hors sujet, il est aussi possible de monter un fichier NRG, l'équivalent Néro de l'ISO'. En réalité les deux fichiers sont identiques à une série de données prés au début de l'image NRG. Il suffit donc de sauter ces données pour tomber sur l'ISO :

rootmount image.nrg point_iso -o loop,offset=307200

Créer un image iso à partir d'un répertoire

Plus intéressant, fabriquer une image ISO mais cette fois à partir du contenu d'un dossier. Là c'est la commande mkisofs qui nous y aide :

rootmkisofs -V nom_de_l_image-o image.iso /dossier/*

Si le but de l'image est d'être lue sous WilainOS, il faut bien évidement rajouter quelques épices :

rootmkisofs -r -l -L -J -o image.iso /dossier/*

Enfin pour graver notre nouvelle image, CDRecord est notre ami. Dans sa version la plus efficace cela donne simplement

rootcdrecord image.iso

Créer un CDROM GNU/Linux amorçable

Pour créer un CD-ROM bootable, nous allons utiliser ISOLinux disponible en installant le paquet syslinux. Cette boite à outil va nous permettre de créer l'image iso à graver.

Commençons par fabriquer notre dossier "à graver" en y recopiant le binaire d'isolinux mais aussi un linux complet qui tient sur un CD-ROM avec son dossier /boot et son image kernel initrd/vmlinuz :

rootmkdir -p ~/bootstrap/isolinux
rootcd ~/bootstrap/isolinux

copie du linux
rootcp -a ~/linux_a_booter/* bootstrap/isolinux/

copie du bin d'isolinux
rootcp /usr/lib/syslinux/isolinux.bin bootstrap/isolinux

Ensuite il faut créer le fichier de configuration du bootloader bootstrap/isolinux/isolinux.cfg

bootstrap/isolinux/isolinux.cfg" nolines="true">
  default linux
  prompt 0

  label linux
  KERNEL boot/vmlinuz
  append initrd=boot/initrd vga=788

Ensuite ne reste plus qu'à générer l'ISO et graver le tout :

rootmkisofs -o ~/mon_micro_linux.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table  bootstrap
rootcdrecord -driveropts=burnfree ~/mon_micro_linux.iso

Lorsque cdrecord a terminé, le CD est prêt à booter. Pensez à utilisez un CD réinscriptible car ça va sûrement pas marcher du premier coup ;-)

Créer un CDROM Windows amorçable

Cette technique ne sert pas forcement utile tous les jours mais reste par exemple bien pratique lorsque l'on a besoin d'ajouter des pilotes à un CD de WilainOS. Pour se faire, il faut commencer par créer image ISO du disque original, la monter, et recopier son contenu dans un dossier.

rootdd if=/dev/cdrw of=image.iso bs=2048
rootmkdir bootable
rootmkdir point_de_montage
rootmount image.iso point_de_montage -o loop,ro,unhide
rootrsync -av point_de_montage/ bootable/

Pour la petite histoire, l'extension de la norme ISO9660 du CD-ROM est étendue par un autre norme, nommée El Torito qui elle décrit la manière de démarrer sur le CD-ROM. Physiquement, cela correspond à un secteur du CD contenant les 2048 octets d'un programme d'amorçage. Ce programme est spécifique à l'OS que l'on cherche à utiliser et même parfois à sa version.

Pour créer notre image ISO, nous allons avoir besoin de ce programme sous la forme d'un fichier (une image). Pour Windows, vous pouvez récupéré cette image ici, cherchez dans la page le lien version un fichier cdsector.bin.

Si cela ne fonctionne pas, vous pouvez toujours l'extraire à partir d'un CD original. L'opération est un peu plus compliqué qu'il n'y parait car la position de ce secteur n'est pas fixe, elle se calcule. Du coup, pas possible d'utiliser simplement la commande dd sans l'avoir préalablement repéré. Heureusement, il existe un script perl qui fait cela très bien, disponible ici. Il s'utilise très simplement comme cela :

rootwget http://www.uni-koblenz.de/~krienke/ftp/noarch/geteltorito/geteltorito.pl
rootchmod +x geteltorito.pl
root./geteltorito.pl image.iso > BOOT.IMG

Si tout c'est bien passé, nous avons notre image de démarrage qui fait très exactement 2048 octets, dans notre dossier bootable. Passons à la création de l'image ISO à proprement parler.

Nous allons maintenant utiliser mkisofs pour compiler notre dossier, secteur de démarrage compris, en une image ISO. Attention la ligne de commande est cette fois un peu plus compliquée ;-)

rootmkisofs -o image_finale.iso -b BOOT.IMG -boot-load-seg 1984 -no-emul-boot -boot-load-size 4  -iso-level 2 -J -l -D -N -joliet-long -relaxed-filenames bootable

Au bout de peu de temps, mkisofs a compilé l'ensemble des fichiers en une image ISO amorçable que vous pouvez tester avec VirtualBox par exemple.

Une fois l'image validée, vous n'avez plus qu'à la graver :

rootcdrecord dev=/dev/hdc image_finale.iso