Manipuler les images ISO
Le 1 mai 2008 à 02:20, 6ième version du billet (Fusion avec le bloc-note 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

root#dd if=/dev/cdrw of=image.iso bs=2048
root# 

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

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

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/*
root# 

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/*
root# 

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

root#cdrecord image.iso
root# 

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

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

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 Wink

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

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

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 Wink

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

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

Commentaires

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 est gardé secret et ne sera pas montré publiquement. If you have a Gravatar account, used to display your 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.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <blockquote> <div>
  • Les lignes et les paragraphes vont à la ligne automatiquement.
  • Textual smileys will be replaced with graphical ones.
  • Les adresses de pages web et de messagerie électronique sont transformées en liens automatiquement.

Plus d'informations sur les options de formatage


Connexion utilisateur
Les derniers bavardages...