Ce tip est destiné à tous les utilisateurs de FreeBSD ayant rencontré certains problèmes lors de la gravure d'une iso. En effet, légèrement excédé par la répétition de messages concernant ce problème notamment sur la mailing list [freebsd-fr], j'ai décidé de m'ateler au secours des utilisateurs (et de ma mbox).

Tout d'abord assurez vous que votre kernel a bien été compilé avec les options suivantes dans son fichier de config.

options 	P1003_1B
options 	_KPOSIX_PRIORITY_SCHEDULING
options 	_KPOSIX_VERSION=199309L
pseudo-device	vn

Ces options permettent la compatibilité avec la norme POSIX.4 (ou 1B) spécifiant les fonctionnalités pour un OS temp réel. Cette norme inclue notamment le scheduling, le time measurement, les signaux asynchrones mis en file d'attente et les I/O asynchrones. Enfin le pseudo device vn correspond au driver vnode permettant de traiter un fichier comme un périphérique

Ensuite, vous aurez besoin de plusieurs outils dont la plupart sont compilés dans le port sysutils/cdrtools que nous installons par un simple

# cd /usr/ports/sysutils/cdrtools && make install clean

Pour être plus précis, ceci installera les programmes suivant

En sus de ce package, le système de base contient déjà burncd pour la gravure de cds. Cependant, burncd utilise le pilote ATAPI CDROM tandis que cdrecord s'avère utilisable avec des lecteurs/graveurs SCSI. Nous présenterons ici ces 2 outils.

Interessons nous maintenant plus particulièrement à mkisofs. Pour créer une image ISO 9660 des données que nous désirons graver, la commande de base est la suivante:

# mkisofs -o output input [input ...]

où output est l'image et input peut aussi bien être un ou plusieurs fichiers ou chemins. Mais il existe de très nombreuses options pour enrichir votre image. Par exemple plusieurs options de la ligne de commande - qu'il sera plus simple de définir dans .mkisofsrc - permettent de fournir sous forme de fichiers des informations supplémentaires sur l'image comme le copyright, le contenu de l'image, un sommaire ou encore une bibliographie, l'identité de l'éditeur ou du prépareur. Vous disposez également des options -dir-mode et -file-mode permettant de réécrire les permissions d'un fichier ou d'un répertoire. Ces options activent implicitement les extensions Rock Ridge que vous pouvez également activer avec l'option -R ou avec quelques nuances (suppression des uid/gid significatif seulement sur le système d'origine, tous fichiers readables, et world executables si il y a un bit x dans le masque de permission, et aucun writable puisque l'image sera mounter en read-only) avec l'option -r. Pour créer une image hybride, ajoutez -hfs pour HFS, et -J pour Joliet. Vous pouvez également spécifier lors de la création de l'image l'exclusion de plusieurs fichiers ou chemins à l'aide des options -m suivi d'un glob (forme d'expression rationnelle pour shell comme *.core) ou -x suivi d'un chemin. Prudence tout de même, -m et -x fonctionnent de manière quasi identique et un fichier se verra exclu aussi bien si le glob matche le chemin que le fichier. Enfin, dernière fonctionnalité que nous détaillerons, vous avez la possibilité de rendre votre image bootable avec les options -b suivi de l'image de boot au format El Torito et -c suivi du boot_catalog. Sous FreeBSD, l'image de boot se créée en émulant une disquette de boot (1.44Mo conseillé pour éviter les ennuis avec certains BIOS).

Avec mkisofs, vous avez également la possibilité de travailler en multisession, c'est-à-dire d'écrire en plusieurs fois à la suite. Pour ceci nous utilisons l'option -M suivie de la précédente image iso, et l'option -C suivie de l'adresse à partir de laquelle repartir. Cette adresse peut se trouver avec

# cdrecord -msinfo dev=scsibus,cible,lun
# burncd -f /dev/acd0c -msinfo

# mkisofs -M image.iso -C adresse -r -J input image2.iso

Pour créer une image à partir d'un cd, vous pouvez utilisez la commande dd de la manière suivante

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

Où bs correspond au block size, ici 2048 octets, if désigne l'interface en entrée et of le fichier en sortie.

Une fois votre image iso créée, il ne reste plus qu'à la graver à l'aide de burncd si vous possédez un disque ATAPI CDROM. Sa syntaxe est la suivante:

# burncd -f peripherique -s vitesse commande fichier

'peripherique' et 'vitesse' correspondent bien sûr à votre graveur. 'commande' peut être - entre autres - 'blank' pour faire paraître un disque comme neuf, 'audio' pour graver un cd audio ou 'data' pour graver directement. A cela ajoutez 'fixate' qui permet d'utiliser le cd dans un lecteur ordinaire, et qui se rajoute à la fin de la commande puisque burncd s'arrête après son exécution. 'fichier' correspond à votre ou vos images que vous pouvez aussi lister dans un fichier en ajoutant l'option -l. Vous disposez également de l'option -m qui permet de clore le disque en multisession vous permettant de graver l'espace restant plus tard.

# burncd -f /dev/acd0c -s 4 -m data image.iso fixate

A l'aide de burncd nous avons également la possibilité de directement dupliquer un cd avec la commande suivante

# cat /dev/acd0c | burncd -f /dev/acd1c -s 4 data - fixate

Nous utilisons cat puisque nous faisons de la duplication brut sans modification de format ni création d'image puis nous utilisons un pipe entre cat et burncd, et stdin ('-') comme input pour burncd.

Pour les détenteurs de lecteurs/graveurs SCSI, il faudra utiliser cdrecord inclut dans le package cdrtools installé plus tôt. Ce programme contient quasiment les mêmes options que burncd mais avec une syntaxe différente, reportez vous à la man page pour complément d'information.

# cdrecord speed=vitesse dev=scsibus,cible,lun image.iso

Pour connaître les valeurs à placer pour dev, reportez vous à dmesg

# dmesg | grep ^acd0c

Où acd0c correspond à votre lecteur/graveur. Et cela ne fonctionne pas, essayez

# cdrecord -scanbus

Et prenez les valeurs correspondant à votre matériel.

Pour ailleurs, pour éviter des erreurs sur votre cd en cas de mauvaises valeurs, utilisez l'option -dummy afin de tester au lieu d'écrire directement. Notez aussi l'équivalent à l'option -m de burncd, qui est ici -multi.

Maintenant si vous ne voulez pas ou ne pouvez pas vous encombrer d'une image iso, il vous reste les pipes ! Combiné à 'nice' pour ajuster la priorité d'exécution des commandes, voire à une importante file fifo avec cdrecord, afin d'éviter toutes erreurs d'écriture, la gravure s'effectuera depuis l'entrée standard (toujours '-').

# nice --18 mkisofs -r -J input | cdrecord fs=8m speed=4 dev=scscibus,cible,lun -

'fs' spécifie la fameuse file fifo qui est ici de 8 Mo.

Enfin si vous voulez mounter une image iso, vous devez utilisez le driver vn configuré précédemment en passant par 'vnconfig'.

# vnconfig -e vn0c image.iso
# mount_cd9660 /dev/vn0c /mnt

Puis pour unmounter

# umount /dev/vn0c
# vnconfig -u /dev/vn0c

Voilà, c'est tout ce que j'ai à vous dire quant à la gravure sous FreeBSD. Comme toujours, reportez vous au man pages correspondantes pour plus d'informations.

–eberkut

freebsd/gravure.txt · Last modified: 2010/01/12 13:29 (external edit)