Gravure de CD sous Linux



Ce document est distribué selon les termes de la licence G.P.L. Documentation. Vous êtes autorisés à le diffuser sur tout support de votre choix, à le publier sur un site internet ou intranet, à la condition que l'auteur original soit mentionné, ce afin d'assurer un meilleur suivi des mises à jour de ce document.

Ce document est fourni tel quel, dans l'espoir qu'il sera utile. Aucune garantie n'est fournie quant aux conséquences résultant de son utilisation.

La distribution Linux que j'utilise est une Slackware 8.1; aussi toutes les indications de répertoires concernent cette distribution. Je ne peux être d'aucun secours à ce niveau à part peut-être vous conseiller d'utiliser une Slackware ou une Debian -;))

Version 1.10 du 2 février 2003
Auteur: Jacques Abada <jacques.abada@arcanthea.com>






Introduction

1. Copie de cédéroms
— Sommaire —
2. Gravure d'une image ISO avec cdrecord

3. Création d'une image ISO à l'aide de mkisofs

4. Création de CD audio à l'aide de cdda2wav

5 Automatisation à l'aide de scripts shell

Conclusion



Introduction


Nous allons étudier ici la méthode de création et de gravure de cédéroms de données sous Linux.
Contrairement à Windows, où il n'existe que des logiciels GUI (dotés d'une interface graphique), Linux permet de créer et de graver des cédéroms directement depuis la ligne de commande. Des programmes graphiques existent, certes, mais ils ne sont en fait que des frontaux utilisant les programmes dont nous allons parler ici, à savoir mkisofs et cdrecord.

Les gens qui viennent du monde Windows ont du mal à se représenter la gravure de CD autrement qu'à l'aide de logiciels graphiques pleins de boites de dialogues, qui cachent tous les aspects de la création et de la gravure des données sur CD; pourtant sous Linux, il existe énormément de taches que l'on accomplit directement depuis la ligne de commande. Même si c'est déroutant au début, on finit par apprécier la disponibilité immédiate des programmes (qui n'ont pas besoin de charger d'interface utilisateur) et, surtout, leur terrible efficacité.

Nous verrons au fil des pages qui suivent quelques rudiments de copie de CD, de création d'images ISO à partir d'une arborescence de répertoires, et enfin la gravure de l'image ISO sur le CD. Nous ne verrons pas tous les détails de l'utilisation des outils, ce petit guide se veut une introduction en la matière.


1. Copie de cédéroms

Pour copier un CD, cela est très facile.

Sous le compte root, insérez le cédérom source dans le lecteur. Puis saisissez la commande suivante:
si le lecteur est un atapi, en esclave sur IDE2

# dd if=/dev/hdd of=nom_image.iso

Au bout de quelques minutes, le prompt « # » revient et vous retrouvez dans le répertoire courant un fichier de plusieurs méga-octets contenant l'image de votre CD.

Avant de graver cette image, il est souvent utile de pouvoir vérifier qu'elle est correcte. Linux nous le permet grâce au périphérique loop. Ce périphérique permet de monter localement une image ISO comme s'il s'agissait d'un cd déjà gravé.

La commande:

# mount -t iso9660 image.iso /mnt -o loop

permet de monter l'image iso dans le répertoire /mnt et d'en examiner le contenu, et ce, à l'aide du périphérique spécial loop.

# cd /mnt
# ls


listera le contenu de l'image comme s'il s'agissait d'un disque connecté au système de fichiers. La seule différence est que le répertoire /mnt ainsi monté est en lecture seule.

Il existe des technique permettant de créer des volumes vides d'une taille déterminée et de les remplir. Nous verrons cela dans une autre section de ce document.

Maintenant, voyons comment graver notre image.


2. Gravure d'une image ISO avec cdrecord

cdrecord est le programme en ligne de commande qui permet de graver des images ISO sur des CD-R.

Il contient un très grand nombre d'options. Si vous faites man cdrecord,

Avant d'utiliser la commande cdrecord pour graver l'image, il faut récupérer quelques paramètres, tels que l'ID SCSI du graveur. Cette information sera ensuite passée en paramètre de la commande cdrecord. Pour ce faire,

# cdrecord -scanbus

affichera quelque chose comme:



On remarque que, pour le graveur (ici un Yamaha CRW6416S, il se trouve sur l'adresse 2,5,0

La séquence numérique 2,5,0 signifie:

Pour graver notre image, nous allons saisir la commande suivante:

# cdrecord -v speed=4 dev=0,3,0 -multi image.iso

Le paramètre -v signifie verbose. Ainsi une quantité d'informations va être affichée, comme sur la figure suivante:




On apprend ici une quantité important d'informations intéressantes. Par exemple:

Ici, nous utilisons un cédérom réinscriptible de marque Hi-Space (fabriqué par MPO).
Puis un décompte d'environ 10 secondes s'effectue avant l'écriture réelle sur le CD. Il est toujours possible d'arrêter celui-ci avec la combinaison Ctrl-C.

Quand la gravure débute, une ligne informe du remplissage du buffer, puis la progression s'affiche sous forme d'une ligne du genre:

Track 01:  11 / 61 MB written (fifo 100%)  4.2x.

Cette ligne nous indique la progression de la gravure ainsi que la vitesse de gravure. S'agissant d'un CDR-W nous gravons à environ 4x.

La session est finalisée, puis la gravure se termine.

cdrecord permet également de graver des CD réinscriptibles et des CD audio. Les différents paramètres sont à découvrir dans la page man (man cdrecord) qui contient des informations très complètes.

Nous allons maintenant voir comment graver un CD en multi-session. Jusqu'ici nous avons effectué une copie de CD. Nous devons donc compiler une image ISO à l'aide du programme mkisofs.

3. Création d'une image ISO à l'aide de mkisofs

mkisofs est un outil très complexe, qui contient une quantité impressionnante de paramètres. Nous ne les explorerons pas tous ici. La page man (man mkisofs) explique en détail tous les paramètres du programme. Nous étudierons ici comment utiliser mkisofs pour créer une image ISO, soit à la norme ISO9660, soit avec les extentions Rock-Ridge Unix, soit avec le descripteur Joliet permettant d'afficher les noms de fichiers longs sous Redmond.

Avant de créer une image iso, il faut d'abord créer un répertoire dans lequel on va placer toute l'arborescence du futur cédérom. Il faut naturellement que la taille de tous les fichiers ne dépasse pas 650 Mo. Puis on lance la commande mkisofs avec les paramètres qui permettent de créer un fichier ISO contenant tous les fichiers et tous les répertoires.

Toujours sous le compte root (l'idéal est de se connecter en utilisateur, puis de taper su et de saisir le mot de passe root), on crée le répertoire qui contient l'arborescence de fichiers à intégrer à notre image ISO. Puis on y copie les fichiers et enfin, on crée notre image iso à l'aide de mkisofs (on suppose que les fichiers se trouvent dans le répertoire /gravure):

root@arcanthea:/gravure# mkisofs -r -T -o image.iso .

Une série de messages est affichée. Puis vient une série de lignes indiquant le pourcentage de progression de la création du fichier (fig. 2)

Cette commande signifie que nous créons une image ISO dotée des extentions Rock-Ridge (paramètre -r); nous demandons à mkisofs de créer dans chaque répertoire du CD un fichier TRANS.TBL (paramètre -T) de manière à permettre de connaître le nom long du fichier sur des systèmes tels que Windows (qui n'afficherons les fichiers que sous la forme courte);  puis que la sortie (paramètre -o) est nommé image.iso, et enfin le nom du répertoire à traiter. Ici nous sommes déjà dans le répertoire /gravure, ce qui explique que nous tapons seulement un point (.) à la fin pour dire « à partir d'ici ».


Fig. 2

mkisofs s'utilise toujours de cette manière:

mkisofs [options] [nom_fichier.iso] [répertoire ou fichier]

mkisofs va traiter tous les sous-répertoires à partir de l'endroit indiqué et intégrer tous les fichiers dans le fichier image. Des options existent, bien sûr, pour exclure certains répertoires et/ou fichiers de l'image.

Notre image est donc correctement générée. Nous pouvons vérifier son contenu en montant celle-ci à l'aide du périphérique loop dans le répertoire /mnt:

# mount image.iso /mnt -o loop
puis
# ls -l /mnt

affichera l'écran suivant:




On voit sur cette capture d'écran, que l'image contient bien les répertoires que nous avions placés dans le répertoire /gravure. De plus on voit le fichier TRANS.TBL créé  pour nous et qui, dans notre cas précis contient ceci:




On peut voir ici que la colonne de gauche montre les fichiers ou répertoires tels qu'ils apparaîtront sous Redmond (par exemple), et la colonne de droite montre les fichiers tels qu'ils apparaissent sous Unix. Le fichier TRANS.TBL est un fichier de correspondance.

Bien sûr, pour les puristes d'entre nous (qui n'utilisent que Linux, et ils ont bien raison!), le paramètre -T peut être omis, puisqu'il ne servira qu'à créer le fichier de translation lorsque nous gravons une image créée avec les extensions Rock-Ridge. Ainsi, une image créée avec la commande

# mkisofs -r -D -o image.iso .

produira une image de cédérom pure systèmes Linux/Unix. Rien, en effet, n'oblige de créer un cédérom lisible sous Redmond, surtout si on compte n'y enregistrer que des fichiers et logiciels pour Linux. Ceci dit, le cédérom est lisible sous Redmond, mais les noms de fichiers sont codés en ISO9660 (8 caractères + extension).

Il faut noter que Linux en particulier et Unix en général utilisent la norme ISO9660 ainsi que les extensions Rock-Ridge qui permettent de conserver des informations telles que liens symboliques et permissions de fichiers et répertoires. Sous Redmond, ce sont les extensions Joliet qui permettent le support des noms de fichiers longs. A moins de vouloir créer des cédéroms lisibles à la fois sous Linux et sous Redmond, les extensions Rock-Ridge sont tout ce qu'il nous faut.

Nous gravons notre première session en prenant soin de mettre le commutateur -multi sans quoi cdrecord pensera qu'il s'agit d'une session unique et finalisera le disque sans laisser la possibilité d'ajouter de nouvelles sessions.

Nous préparons une seconde série de fichiers pour la session suivante. On appellera le second fichier image2.iso et on le gravera avec le commutateur -multi  également (pour dire à cdrecord qu'on ajoute une session).



Quand la gravure démarre on voit qu'il s'agit de la session 2 (Track 02: 9 of 20 MB written (fifo 100%)  4.2x.)

Préparer une image pour systèmes Redmond:

Pour préparer une image destinée à des systèmes Redmond, il faut utiliser le paramètre -J (descripteur Joliet).
La commande sera la suivante dans notre exemple:

# mkisofs -J -o image.iso .


4. Création de CD audio à l'aide de cdda2wav

cdda2wav est un outil qui permet d'extraire les pistes audio d'un CD et de les enregistrer sur le disque sous forme de fichiers WAV, mais également AU, etc...

La ligne de commande est:

# cdda2wav -v255 -D0,3,0 -B -Owav

pour extraire toutes les pistes d'un CD audio et les stocker sur le disque sous forme de fichiers WAV séparés.


5 Automatisation à l'aide de scripts shell

Linux a ceci de puissant, qu'il permet de réaliser des choses très complexes à l'aide de scripts. Leur création nécessite de dépasser le stade des interfaces graphiques (GNOME, KDE entre autres) qui sont le plus utilisées par les utilisateurs Linux venant du monde Windows où tout se clique et rien ne se comprend vraiment.

Nous n'allons pas écrire un traité complet de la création de scripts shell. Mais quelques informations sont bienvenues.

Un script shell est l'équivalent en bien plus puissant des fichiers de commandes DOS (ou fichiers BAT).

Un script shell est un fichier texte commençant toujours par

#!/bin/sh

ceci informe l'interpréteur de commandes (shell) que le fichier est un script shell. D'ailleurs, si on tape

$ file fichier

Le prompt retourne

$ fichier: Bourne shell script text

Cependant, avant de pouvoir exécuter un script shell, il faut d'abord le rendre exécutable. Si par exemple, vous placer les commandes suivantes dans un fichier,

#!/bin/sh
echo "Bonjour tout le monde"


et que vous tapiez

$ ./fichier

Le shell vous retournera

$ bash: ./fichier: Permission denied

Pourquoi ? Tout simplement parce que l'interpréteur bash voit que le fichier n'est pas exécutable. Rendons-le donc exécutable en saisissant

$ chmod +x fichier

C'est tout pour la création des shell scripts. Le sujet est trop complexe et dépasse le cadre de cette fiche technique.

Voyons maintenant comment nous pourrions créer des scripts pour


Fabriquer une image ISO avec extensions Rock-Ridge:

en supposant que l'arborescence commence au répertoire /gravure, il faudrait placer le code suivant dans le script:


#/bin/sh
#
#  Script de création d'une image ISO avec extensions Rock-Ridge
#  fichier: mkrockiso

if [ $# = 0 ] ; then
  echo "Tapez mkrockiso --help pour afficher le texte d'aide"
  exit 1
fi

if [ $1 = "--help" ] ; then
  echo "Usage:"
  echo "mkrockiso --help : Affiche ce texte d'aide"
  echo "mkrockiso 'fichier.iso' 'repertoire'"
  echo "'fichier.iso' peut contenir le chemin complet"
  echo "exemple: /ISO/image1.iso"
  exit 0
fi

if [ $# = 1 ] ; then
  echo "Il manque un paramètre"
  echo "faites mkrockiso --help"
  exit 1
fi

if [ -d $2 ] ; then
  mkisofs -r -o $1 $2
  if [ -e $1 ] ; then
    echo "$1 a été créé avec succès"
  fi
  exit 0 
fi


On appellera le script mkrockiso

L'appel du script se fait au moyen de la commande:

# mkrockiso image.iso /repertoire

/repertoire doit être le répertoire de niveau supérieur aux sous-répertoires qui seront intégrés. Si le répertoire est /gravure, le répertoire /gravure ne sera pas inclus dans l'image ISO, seulement les répertoires situés sous /gravure.

Fabriquer une image ISO avec extensions Joliet:

Les extensions Joliet sont destinées à la gestion des noms de fichiers long sous Redmond. Utilisez l'option -J si vous souhaitez créer une image avec extensions Joliet.

On peut facilement modifier le script précédent; il suffit de copier le fichier en le renommant en mkjolietiso (cp mkrockiso mkjolietiso), et remplacer le -r par un -J, comme ci-dessous:


#/bin/sh
#
#  Script de création d'une image ISO avec extensions Rock-Ridge
#  fichier: mkjolietiso

if [ $# = 0 ] ; then
  echo "Tapez mkjolietiso --help pour afficher le texte d'aide"
  exit 1
fi

if [ $1 = "--help" ] ; then
  echo "Usage:"
  echo "mkjolietiso --help : Affiche ce texte d'aide"
  echo "mkjolietiso 'fichier.iso' 'repertoire'"
  echo "'fichier.iso' peut contenir le chemin complet"
  echo "exemple: /ISO/image1.iso"
  exit 0
fi

if [ $# = 1 ] ; then
  echo "Il manque un paramètre"
  echo "faites mkjolietiso --help"
  exit 1
fi

if [ -d $2 ] ; then
  mkisofs -J -o $1 $2
  if [ -e $1 ] ; then
    echo "$1 a été créé avec succès"
  fi
  exit 0 
fi


Puis, naturellement, chmod +x mkjolietiso pour le rendre exécutable.


Conclusion

On a effleuré quelques-unes des multiples possibilités de mkisofs et de cdrecord. Il convient maintenant de bien étudier les pages man de ces outils.

Dans une prochaine version de ce document, seront abordés les aspects de la gravure audio, en partant de l'extraction des pistes, de leur conversion en mp3, et de leur gravure. On utilisera des outils supplémentaires.

Pour toute question relative à ce papier, ou si vous constatez une erreur, merci de me contacter à Jacques.Abada@arcanthea.com.