|
- Gestion des périphériques
- Périphériques loopback
Sous Linux, lorsque l'on veut graver un CDROM à partir de fichiers placés sur le disque dur (fichiers "classiques", ou fichiers "wav" issus de l'extraction des pistes audio d'un CD), on peut utiliser des logiciels qui vont créer une "maquette" du futur CD, sous la forme d'un énorme fichier, appelé fichier ISO.
Ce qu'il y a d'intéressant, c'est que l'on peut "monter" ce fichier, tout comme l'on monterait une partition quelconque, afin de vérifier que le CD qui va être généré est bien conforme à ce que l'on veut réellement faire. On peut entre autre se "déplacer" dans cette "partition", tout comme on le ferait sur un CDROM que l'on aurait monté. Pour cela, il faut utiliser les périphériques loopback.
Dans le paragraphe précédent, nous avons justement compilé le kernel afin qu'il gère les périphériques loopback. Le travail de configuration de ces périphériques, consiste à créer les devices appropriés dans le /dev. La première partie du script gravure_make_device assure ce travail.
Après le lancement de ce script, on doit donc avoir:
[root /]# cd /dev
[root /dev]# ls -la loop*
brw-rw---- 1 root disk 7, 0 mar 7 20:50 loop0
brw-rw---- 1 root disk 7, 1 mar 7 20:50 loop1
brw-rw---- 1 root disk 7, 2 mar 7 20:50 loop2
brw-rw---- 1 root disk 7, 3 mar 7 20:50 loop3
brw-rw---- 1 root disk 7, 4 mar 7 20:50 loop4
brw-rw---- 1 root disk 7, 5 mar 7 20:50 loop5
brw-rw---- 1 root disk 7, 6 mar 7 20:50 loop6
brw-rw---- 1 root disk 7, 7 mar 7 20:50 loop7
- Périphériques génériques SCSI
La norme SCSI est répendue sur un grand nombre de types de périphériques différents: disques durs, lecteurs/graveurs de CDROM, sauvegardes sur bandes, stockages amovibles, scanners, etc... Elle permet de dialoguer avec tout ces périphériques, en échangeant avec eux des blocs de données.
Cependant, chaque type de périphérique ayant ses propres spécificité (par exemple pour un graveur de CDs, le système de calibration des diodes laser), c'est pour simplifier au maximum la création et la maintenance des logiciels destinés à dialoguer avec eux, que les périphériques génériques ont été créés.
Dans le paragraphe précédent, nous avons justement compilé le support des périphériques génériques SCSI. Il reste maintenant à rajouter dans le /dev, les fichiers spéciaux permettant de dialoguer avec la partie du kernel gérant les périphériques génériques. C'est le rôle de la seconde partie du script gravure_make_device.
Après lancement de ce script, on doit donc avoir:
[root /]# cd /dev
[root /dev]# ls -la sg*
crw-rw---- 1 root cdwriter 21, 0 mar 7 20:50 sg0
crw-rw---- 1 root cdwriter 21, 1 mar 7 20:50 sg1
crw-rw---- 1 root cdwriter 21, 2 mar 7 20:50 sg2
crw-rw---- 1 root cdwriter 21, 3 mar 7 20:50 sg3
crw-rw---- 1 root cdwriter 21, 4 mar 7 20:50 sg4
crw-rw---- 1 root cdwriter 21, 5 mar 7 20:50 sg6
crw-rw---- 1 root cdwriter 21, 6 mar 7 20:50 sg6
crw-rw---- 1 root cdwriter 21, 6 mar 7 20:50 sg7
- Périphériques SCSI et non-SCSI
Nous allons maintenant voir comment changer la configuration de Linux, pour que la commande "mount" accède via l'émulation SCSI au lecteur de CDROM. En effet, actuellement elle y accède par l'intermédiaire du module "IDE/ATAPI CDROM support", c'est à dire en accédant directement à l'interface IDE/ATAPI.
Commencez par regarder dans votre fichier /var/log/dmesg. Ce fichier contient les informations qui sont affichées par Linux lors du démarrage. En voici 3 extraits de celui de ma machine:
...
hdd: SONY CDU4811, ATAPI CDROM drive
...
hdd: ATAPI 48X CD-ROM drive, 120kB Cache
...
(scsi0) found at PCI 0/11/0
(scsi0) Narrow Channel, SCSI ID=7, 3/255 SCBs
(scsi0) Downloading sequencer code... 415 instructions downloaded
scsi0 : Adaptec AHA274x/284x/294x (EISA/VLB/PCI-Fast SCSI) 5.2.1/5.2.0
Vendor: PHILIPS Model: CDD2600 Rev: 1.07
Type: CD-ROM ANSI SCSI revision: 02
La première ligne indique que le kernel a trouvé le lecteur de CDROM sur le /dev/hdd. En effet, celui-ci se trouve justement en esclave sur le second contrôleur IDE.
La seconde ligne indique que le kernel a activé le support de ce CDROM, et que je peux maintenant l'utiliser via le /dev/hdd.
La troisième partie indique que:
- La carte contrôleur SCSI a été trouvée (Adaptec AIC-7850 SCSI host adapter)
- Le graveur de CDROM a été trouvé lui aussi, et qu'il porte le numero 0 (scsi0). On y accédera donc via le /dev/scd0
Voici un extrait de mon fichier /etc/fstab. C'est lui qui est lu par la commande "mount" afin de monter les CDROM que je place dans mes lecteur/graveur.
/dev/cdrom /mnt/cdrom auto user,noauto,nosuid,exec,nodev,ro 0 0
/dev/graveur /mnt/graveur auto user,noauto,nosuid,exec,nodev,ro 0 0
La commandes mount /mnt/cdrom et mount /mnt/graveur permettent donc monter les lecteur/graveur dans leurs emplacements respectifs du /mnt.
Cependant, mon /dev ne contient évidement pas de fichiers spéciaux "/dev/cdrom", et "/dev/graveur". Ce sont juste des liens vers les vrais fichiers spéciaux qui accèdent à mes périphériques:
[root /]# ls -la /dev/cdrom /dev/graveur
lrwxrwxrwx 1 root root 4 mar 8 23:04 /dev/cdrom -> hdd
lrwxrwxrwx 1 root root 4 mar 18 17:11 /dev/graveur -> scd0
Par l'activation de l'émulation SCSI, le kernel va créer un nouveau périphérique, qu'il va naturellement rendre accessible via le premier fichier spécial SCSI disponible du /dev. Le /dev/scd0 étant utilisé pour dialoguer avec le graveur SCSI (le seul "vrai" périphérique SCSI de ma machine), c'est donc le /dev/scd1 qui va dont être utilisé pour échanger des informations avec l'émulation SCSI du lecteur de CDROM. Il ne nous reste donc plus qu'à changer dans le /dev, le lien cdrom->hdd en cdrom->scd1, ce qui se fait facilement:
[root /]# cd /dev
[root /dev]# rm cdrom
[root /dev]# ln -s scd1 cdrom
[root /dev]# ls -la cdrom graveur
lrwxrwxrwx 1 root root 4 mar 19 00:21 cdrom -> scd1
lrwxrwxrwx 1 root root 4 mar 18 17:11 graveur -> scd0
- Droits des utilisateurs
Sous Linux, mis à part l'utilisateur root, personne ne possède les droits permettant de faire n'importe quoi. C'est justement le cas pour l'accès aux périphériques tels que les périphériques génériques SCSI, et notamment pour les graveurs.
Si vous regardez bien le résultat de la commande ls -la sg*, vous remarquerez que dans la configuration de ma distribution (Mandrake), les périphériques /dev/sg* appartiennent au groupe cdwriter, et que ce groupe possède le droit d'écriture sur ces périphériques. Il faut donc rajouter au groupe cdwriter, l'utilisateur qui sera autorisé à graver des CDs. En général c'est l'utilisateur courant.
Pour cela, il faut ouvrir le fichier /etc/group, et modifier la ligne du groupe cdwriter. Chez moi, l'utilisateur s'appelle olivier (original, non ?), ce qui nous donne:
[root /]# cat /etc/group | grep cdwriter
cdwriter:x:256:olivier
Remarque: Cette configuration dépend évidemment des distributions, et de la manière dont chacun gère les droits d'accès de ses fichiers. Il se peut donc que vous ne possédiez pas de groupe cdwriter, ou que votre /dev/sg* ne soit pas configuré de cette manière. Auquel cas, il est facile de remédier à ce problème, en rajoutant soit-même le groupe, ou encore plus simplement, en donnant à tout les utilisateurs les droits d'écriture sur /dev/sg* (ce que je ne conseille pas, car cela va à l'encontre des règles de base de la sécurité informatique ...).
- /etc/modules.conf
Ce fichier est utilisé pour configurer les différents modules du kernel. Il permet d'indiquer au kernel certains paramètres spéciaux, ou des règles dans l'ordre de chargement des modules.
Voici quelles sont les lignes à rajouter:
## Ajout pour l'emulation SCSI du CDROM
# Charge le module de la carte Adaptec (aic7xxx) lors des appels
# a la 1er carte SCSI (carte reelle)
alias scsi_hostadapter0 aic7xxx
# Charge le module "ide-scsi" lors des appels a la 2nd carte SCSI
# (carte virtuelle)
alias scsi_hostadapter1 ide-scsi
# Charge le module "sr_mod" lors des acces a "scd1"
alias scd1 sr_mod
# Indique au module "ide-cd" d'ignorer le "hdd"
options ide-cd ignore=hdd
# Charge le module "ide-scsi" avant "sg"
pre-install sg modprobe ide-scsi
# Charge le module "ide-scsi" avant "sr_mod"
pre-install sr_mod modprobe ide-scsi
# Charge le module "ide-cd" avant "ide-scsi"
pre-install ide-scsi modprobe ide-cd
On voit bien ici "l'astuce" qui a été utilisé pour gérer l'émulation SCSI la plus naturellement possible:
- Le kernel crée une 2ième carte SCSI, complètement virtuelle: scsi_hostadapter1, qui est rattachée au module ide-scsi
- Puis il permet le dialogue avec le CDROM à travers cette interface, grâce au /dev/scd1
- Enfin, grâce à la ligne "options ide-cd ignore=hdd", on indique au module ide-cd ne ne plus prendre en charge ce lecteur de CDROM, vu que c'est le module ide-scsi qui va s'en charger. A priori, on devrait même pouvoir ne plus utiliser du tout le module ide-cd (et donc ne plus le compiler en module), mais ce module reste utile si on veut accéder à un 2nd lecteur de CDROM, sans passer par de l'émulation SCSI.
Remarque: Du fait de la modification du /etc/modules.conf, le kernel affichera au prochain démarrage, un message indiquant qu'il recrée les dépendances des modules. C'est tout à fait normal ...
- /etc/modules
Ce fichier permet d'indiquer au kernel quels sont les modules à charger au démarrage. On va rajouter à ce fichier 2 lignes: sg (modules des périphériques génériques SCSI) et sr_mod (module des CDROM SCSI). On va donc avoir dans ce fichier:
[root /]# cat /etc/modules
# /etc/modules: kernel modules to load at boot time.
#
# This file should contain the names of kernel modules that are
# to be loaded at boot time, one per line. Comments begin with
# a `#', and everything on the line after them are ignored.
sg
sr_mod
#scsi_hostadapter0
Remarque: J'ai aussi mis en commentaire (en mettant un "#") la ligne scsi_hostadapter0, car il me semblait qu'elle rentrait en conflit avec le reste de la configuration ...
- Boot loader
Le bootloader est un terme générique qui désigne le 1er programme qui est exécuté par la machine, une fois tout les tests internes effectués. Ce programme se trouve dans le 1er secteur du disque dur bootable, le MBR (Master Boot Record), et va permettre de sélectionner sur quelle partition se trouve le système d'exploitation.
Je ne vais pas me lancer dans une explication sur ce sujet, qui serait forcément incomplète tellement le sujet est vaste. Mais vous pouvez trouver de bonnes d'explications dans la documentation de Lilo, la documentation de Grub et le Lilo mini-Howto.
Sous Linux, il existe 2 programmes très populaires qui effectuent ce travail: LILO et GRUB. LILO est le plus ancien, GRUB est plus récent et possède une interface semi-graphique assez pratique. Que ce soit LILO ou GRUB que l'on utilise, tout les deux peuvent donner quelques indications au kernel lors de son démarrage (les paramètres), indications qui seront utilisées pour configurer un peu spécialement le kernel.
Dans notre cas, nous allons donner le paramètre "hd?=ide-scsi", où hd? indique le nom du device sur lequel est connecté le lecteur de CDROM. Dans mon cas, c'est hdd. Ce paramètre a pour but d'indiquer au kernel d'utiliser le module ide-scsi (le module d'émulation SCSI) pour dialoguer avec le périphérique /dev/hdd, plutôt que d'utiliser un autre module (ide-cd dans notre cas).
Une petite remarque au passage: Dans certaines listes de diffusion que j'ai parcourus, j'ai trouvé que pour le kernel 2.4.x, contrairement aux kernels de version inférieur, le paramètre n'est plus "hd?=ide-scsi" mais "hd?=scsi". Cependant chez moi, ce nouveau paramètre n'étant pas reconnu, j'ai donc gardé "hd?=ide-scsi".
- Si vous utilisez LILO
- Sous root, éditez votre fichier /etc/lilo.conf. Il doit ressembler à ça:
boot=/dev/hda
map=/boot/map
install=/boot/boot.b
vga=normal
default=linux
keytable=/boot/fr-latin1.klt
lba32
prompt
timeout=50
message=/boot/message
image=/boot/vmlinuz-secure
label=linux
root=/dev/hda1
initrd=/boot/initrd-secure.img
vga=788
read-only
- Rajoutez la ligne append="hdb=ide-scsi" dans la première partie du fichier, par exemple après "map=/boot/map".
- Toujours sous root, lancez la commande lilo, qui va permettre de prendre en compte vos modifications, en mettant à jour le MBR.
- Si vous utilisez GRUB
- Sous root, éditez votre fichier /boot/grub/menu.lst. Il doit ressembler à ça:
# Boot automatically after 10 secs.
timeout 10
# By default, boot the entry 0.
default 0
# Fallback to the second entry.
fallback 1
# Change coulor
color blue/light-gray yellow/red
# Other option
i18n /boot/grub/messages
keytable /boot/fr-latin1.klt
altconfigfile /boot/grub/menu.once
# Linux/Mandrake
title Mandrake secure
root (hd0,0)
kernel /boot/vmlinuz-secure root=/dev/hda1
initrd /boot/initrd-secure.img
- Rajoutez hdd=ide-scsi à la ligne kernel /boot/... . Si vous en avez plusieurs, rajoutez ce paramètre à chacune des différentes lignes de ce type.
- Contrairement à LILO, vous n'avez pas besoin de lancer une commande pour mettre à jour le MBR.
- Fini !
Voilà, la configuration est (enfin !) terminée. Il ne reste plus qu'à rebooter la machine, et à regarder le résultat.
|
|