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.
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=2048root#
Pour monter cette image, comme pour tous les fichiers représentant un média, il faut passer par un loop device :
root#mkdir point_isoroot#mount image.iso point_iso -o loop,ro,unhideroot#
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=307200root#
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.isoroot#
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/isolinuxroot#cd ~/bootstrap/isolinux# copie du linuxroot#cp -a ~/linux_a_booter/* bootstrap/isolinux/# copie du bin d'isolinuxroot#cp /usr/lib/syslinux/isolinux.bin bootstrap/isolinuxroot#
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 bootstraproot#cdrecord -driveropts=burnfree ~/mon_micro_linux.isoroot#
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
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=2048root#mkdir bootableroot#mkdir point_de_montageroot#mount image.iso point_de_montage -o loop,ro,unhideroot#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.plroot#chmod +x geteltorito.plroot#./geteltorito.pl image.iso > BOOT.IMGroot#
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 bootableroot#
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.isoroot#
Poster un nouveau commentaire