|
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
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:
- Bus SCSI numéro 2 (ce peut être une seconde carte
scsi ou une émulation, ici c'est une émulation)
- ID 5
- LUN 0
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:
- Taille du buffer interne au graveur (ici 3 Mo)
- Taille du buffer créé et utilisé par
cdrecord (ici 4 Mo)
- Nom, modèle et version du firmware du graveur
- Type de CD (ici inconnu mais habituellement on trouve Cyanine,
AZO ou similaire)
- Fabricant du CD vierge (ici inconnu).
- Enfin, la taille des données à graver (ici Track
01: data 61 MB), ie, 61 Mo
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
- fabriquer une image ISO avec extensions Joliet
- extraire les pistes d'un CD audio
- graver le CD de données
- graver le CD de musique
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.