Manipuler les images ISO
1 mai, 2008 - 02:20 | Ulhume | Médias et stockage Tutoriel

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

root#dd 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 :

root#mkdir point_iso
root#mount 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 :

root#mount 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 :

root#mkisofs -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 :

root#mkisofs -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

root#cdrecord 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 :

root#mkdir -p ~/bootstrap/isolinux
root#cd ~/bootstrap/isolinux
 
# copie du linux
root#cp -a ~/linux_a_booter/* bootstrap/isolinux/
 
# copie du bin d'isolinux
root#cp /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 :

root#mkisofs -o ~/mon_micro_linux.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table bootstrap
root#cdrecord -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.

root#dd if=/dev/cdrw of=image.iso bs=2048
root#mkdir bootable
root#mkdir point_de_montage
root#mount image.iso point_de_montage -o loop,ro,unhide
root#rsync -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 :

root#wget http://www.uni-koblenz.de/~krienke/ftp/noarch/geteltorito/geteltorito.pl
root#chmod +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 ;-)

root#mkisofs -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 :

root#cdrecord dev=/dev/hdc image_finale.iso

Commentaires

Zed, le 3 mai, 2010 - 12:16

Merci pour ce tutoriel bien utile, (surtout si on ne veut pas utiliser d'outils non libres) et qui permet de faire les choses proprement.

Poster un nouveau commentaire

Si vous avez détecté une erreur, coquille ou bêtises du même ordre, merci de plutôt passer par le formulaire de contact
Pour vous abonner au flux des commentaires sur cet article, clickez ici.
Pour répondre à quelqu'un, utilisez plutôt le lien répondre qui se trouve en haut (ou en bas) à gauche de son commentaire.
Le contenu de ce champ sera maintenu privé et ne sera pas affiché publiquement. Si vous avez un compte gravatar, l'utilisez pour afficher votre avatar.
  • To highlight piece of code, just surround them with <code type="language"> Your code &tl;/code>>. Language can be java,c++,bash,etc... Everything Geshi support.
  • Tags HTML autorisés : <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <blockquote> <div> <p> <br>
  • Les lignes et les paragraphes vont à la ligne automatiquement.
  • Les adresses de pages web et de messagerie électronique sont transformées en liens automatiquement.
  • Every instance of custom tags in the input text will be replaced with a specific tool shortcut.

Plus d'informations sur les options de formatage

Êtes-vous humain ?
Cette question est là pour déterminer si vous êtes humain ou pas...