Chapitre 18. Opérations diverses

Table des matières
18.1. Créer une disquette d'installation pour i386
18.2. Graver un cédérom
18.3. Synchroniser l'horloge système
18.4. Installer le gestionnaire de démarrage
18.5. Effacer le disklabel
18.6. Haut-parleurs
18.7. Perdu votre mot de passe ?
18.8. Ajouter un nouveau disque dur
18.9. Fichier de mots de passe occupé ?

Ce chapitre rassemble, comme ils viennent, les divers sujets qui n'ont pas trouvé leur place dans les précédents.

18.1. Créer une disquette d'installation pour i386

Cette section (Créer une disquette d'installation pour i386) est une contribution de Eric Delcamp

Avant toute chose, il vous faut avoir un noyau dont le pseudo-périférique vnd est actif (c'est le cas du noyau GENERIC).

  1. Tout d'abord, créons un noyau valide pour le placer sur la disquette. Appelons-le DISQUETTE. Il doit être dérivé d'un modèle INSTALL. Après la compilation, vous obtenez un fichier /sys/arch/i386/compile/FLOPPY/netbsd.

  2. Allez dans le répertoire /usr/src/distrib/i386/floppies/ramdisk et tapez:

    # make        

    afin de créer un fichier ramdisk.fs dans le répertoire.

  3. De même, allez dans le répertoire /usr/src/distrib/i386/floppies/fdset et tapez:

    # make KERN=/sys/arch/i386/compile/FLOPPY/netbsd

    afin de créer, suivant la taille du noyau, un ou deux fichiers nommés boot1.fs et boot2.fs.

  4. Transférez ces fichiers sur la ou les disquettes avec les commandes:

    # dd if=boot1.fs of=/dev/fd0a bs=36b
    # dd if=boot2.fs of=/dev/fd0a bs=36b
          
  5. Mettez la première disquette dans le lecteur et allumez!

18.2. Graver un cédérom

Pour créer un cédérom de données, nous pouvons utiliser les programmes mkisofs et cdrecord: les graveur SCSI et IDE sont reconnus. Les lecteur IDE/ATAPI sont supportés par NetBSD sans recourir à une émulation car le pilote peut directement recevoir des commandes ATAPI, ce qui est une solution simple et élégante.

Deux étapes sont nécessaires pour graver un cédérom: premièrement établir l'image ISO du CD sur le disque dur avec le programme mkisofs. Deuxièmement, graver l'image sur le CD avec le programme cdrecord. Dans l'exemple suivant, nous allons utiliser un graveur IDE/ATAPI reconnu. Voici ce que donne dmesg:

cd1 at atapibus1 drive 0: <HP CD-Writer Plus 8100> type 5 cdrom removable    

Note : lors de la gravure d'un cédérom, la vitesse d'exécution est critique: le flot de données doit être constant et ne supporter aucune interruption. Le tampon de données de cdrecord ne doit jamais être vide. Cela veut dire qu'il est préférable de graver un CD lorsque le système ne fait rien ou presque rien d'autre (ne recompilez pas un noyau ou n'encodez pas du MP3 pendant la gravure...)

18.2.1. Etablir une image ISO

Comme les images ISO ont tendance à être très volumineuses, mieux vaut préalablement vérifier si le disque dur possède suffisament de place libre (jusqu'à 700 Mo pour un image). Considérons que les données à graver se trouvent dans le répertoire agraver. Pour créer l'image, tapez:

# mkisofs -aflrTv -o image-cd agraver/      

Lorsque le fichier image-cd est terminé, il peut être visualisé et parcouru comme tout système de fichier normal afin vérifier qu'il n'y a pas d'erreurs avant de lancer la gravure. Par exemple:

# ls -l image-cd
-rw-rw-r--  1 auser     user  284672 Dec  1 11:58 image-cd
# vnconfig -v vnd0 image-cd 512/556/1/1
# mount -r -t cd9660 /dev/vnd0c /mnt
  ... browsing su /mnt ...
# umount /mnt
# vnconfig -u vnd0
      

La valeur 556 est la taille du cédérom divisée par 512.

Note : pour graver un cédérom qui soit aussi lisible par les systèmes Microsoft, utilisez le programme mkhybrid avec l'option -J au lieu de mkisofs. Par exemple:

mkhybrid -a -r -J -v -o cd.iso -b NetBSD-1.4.2/i386/installation/floppy/boot-big.fs ./	

18.2.2. Graver l'image sur le CD

Dans la seconde étape, l'image est gravée sur le CD avec la commande:

# cdrecord -v speed=2 dev=/dev/rcd1d image-cd      

Note : pour les graveur ATAPI, utilisez rcd#d car le périférique a ne comprend pas les commandes ATAPI.

Avant de graver l'image, il est possible de lancer un test en désactivant le laser: ajoutez les options -dummy et -nofix sur la ligne de commandes. Par exemple:

# cdrecord -v -dummy -nofix speed=2 dev=/dev/rcd1d image-cd      

Les deux étapes, création puis gravure de l'image, peuvent être combinées en une seule commande, sans avoir besoin de passer par un (gros) fichier temporaire sur le disque dur. La commande ressemble à:

# (nice -18 mkisofs -aflrT agraver/) | cdrecord -v fs=16m speed=2 dev=/dev/rcd1d -      

L'option fs=16m est utilisée pour allouer un fifo plus gros. Cela permet à cdrecord d'éviter les erreurs dues à un flux trop réduit (c'est à dire qu'il n'a pas assez de données à graver).

18.2.3. Dupliquer un cédérom

Pour directement copier un CD, l'option -isosize doit être donnée à cdrecord. Par exemple:

# cdrecord -v fs=16m -isosize speed=2 dev=/dev/rcd1d /dev/rcd0d      

Note : si à la fois le lecteur et le graveur sont IDE/ATAPI, il est préférable qu'ils soient connectés à deux contrôleurs différents (un sur le primaire, l'autre sur le secondaire) pour améliorer le flux de données. Voici un exemple de configuration:

wd0: disque dur, IDE primaire maitre
cd0: lecteur CD, IDE primaire esclave
cd1: graveur CD, IDE secondaire maitre	  

18.2.4. Graver un cédérom démarrable

Que le cédérom soit démarrable ou non ne dépend que de la présence ou non d'un fichier binaire de démarrage sur celui-ci: ce fichier simule une disquette. L'option -b de mkisofs et mkhybrid est utilisable dans ce but. Par exemple:

# mkisofs -avr -b boot.fs -o cdimage agraver/      

boot.fs est le binaire de démarrage pour le cédérom. Notez que le chemin d'accès à boot.fs est relatif par rapport au répertoire agraver/.

18.3. Synchroniser l'horloge système

Il n'est pas rare de constater que l'horloge système est déréglée de quelques minutes. Pour d'étranges raisons, il semble que l'horloge interne des ordinateurs ne soit pas très précise. Le problème devient gènant si vous administrez de nombreuses machines: la synchronisation des horloges peut facilement devenir un cauchemar. Pour le résoudre, le protocole NTP (version 3) vous vient en aide. Il sert à synchroniser les horloges d'un réseau de stations de travail à l'aide d'un ou plusieurs serveurs NTP.

Grâce au protocole NTP, il est possible de règler l'horloge d'une station mais aussi synchroniser un réseau entier. Ce protocole est assez complexe puisqu'il définit une hiérarchie de serveurs maitre-esclave divisés en strates: la plus haute partie de la hiérarchie est occupée par les serveurs de strate 1 connectés à une horloge externe (horloge radio, par exemple) pour garantir une grande précision. Ensuite, les serveurs de strate 2 se synchronisent sur les serveurs de strate 1 et ainsi de suite. La précision diminue au fur et à mesure des nivaux. La structure hiérarchique permet d'éviter les engorgements que pourraient causer les nombreux clients qui se connecteraient aux mêmes serveurs (peu nombreux) de la strate 1. Par exemple, si vous voulez synchroniser un réseau entier, vous ne connectez pas toutes les machines au même serveur public de strate 1: vous mettez en place un serveur qui se connecte au serveur public et toutes les machines se synchronisent sur ce serveur local.

Heureusement, pour utiliser les outils NTP, nul n'est besoin de comprendre les détails du protocole et de ses implémentations (cependant, si vous êtes intéressés, consultez le RFC 1305) mais simplement la configuration et le lancement de quelques programmes. Le système de base de NetBSD contient tous les outils nécessaires au protocole (ainsi que d'autre protocoles liés, comme nous le verrons) dérivé de l'implémentation xntp. Cette section décrit une façon simple d'avoir toujours l'heure exacte.

Tout d'abord, il est nécessaire de trouver l'adresse des serveurs NTP publics à utiliser comme référence. Une liste détaillée se trouve dans la page http://www.eecis.udel.edu/~mills/ntp/servers.html. Par exemple, pour l'Italie, les deux serveur de strate 1, tempo.cstv.to.cnr.it et time.ien.it, peuvent être utilisés (NDT: pour la France, vous avez, par exemple, ntp-p1.obspm.fr ou ntp-sop.inria.fr).

Ensuite, sous root, pour règler l'horloge système, lancez la commande:

# ntpdate -b tempo.cstv.to.cnr.it time.ien.it      
(remplacez le nom des serveurs de cet exemple par ceux que vous voulez utiliser). L'option -b demande à ntpdate de règler l'heure à l'aide de l'appel système settimeofday au lieu de adjtime par défaut. Elle est conseillée si le décalage avec l'heure correcte est considérable.

Comme vous le voyez, ntpdate n'est pas dificile à utiliser. L'étape suivante consiste à le lancer automatiquement afin de toujours avoir l'heure exacte. Si vous avez une connexion permanente à internet, vous pouvez lancer le programme au démarrage en ajoutant la ligne suivante dans /etc/rc.conf:

ntpdate=YES      ntpdate_hosts="time.ien.it"      
Le nom du serveur à utiliser est spécifié par la variable ntpdate_hosts. Si vous laissez le champ vide, le script de démarrage tentera d'extraire le nom du fichier /etc/ntp.conf.

Si vous n'avez pas de connexion permanente à internet (par exemple une connexion par ligne téléphonique chez un FAI), vous pouvez lancer ntpdate depuis le script ip-up que nous avons mis en place au Chapitre 9. Ajoutez-lui la ligne:

/usr/sbin/ntpdate -s -b time.ien.it      
(Le chemin d'accès est obligatoire sinon le script ne trouvera sans doutes pas le programme.) L'option -s détourne l'affichage de la sortie standard (par défaut) vers syslogd(3). Les messages de ntpdate seront écrits dans le fichier /var/log/messages.

Il existe d'autres commandes utiles en plus de ntpdate. Il est aussi possible de transformer l'une des machines du réseau en serveur NTP pour le reste des ordinateurs. Il synchronisera son horloge avec celle d'un serveur public. Pour ce type de configuration, il vous faut utiliser le démon xntpd et créer un fichier /etc/ntp.conf. Par exemple:

server time.ien.it
server tempo.cstv.to.cnr.it      

Xntpd peut être démarré à partir de rc.conf en utilisant l'option adéquate:

xntpd=YES      

NTP n'est pas l'unique solution pour synchroniser les horloges d'un réseau: il existe aussi le démon timed, développé par 4.3BSD. Il utilise aussi une hiérarchie maitre-esclave: lorsqu'il démarre sur un ordinateur, timed demande l'heure réseau à un maitre et règle son horloge en fonction de la réponse. Une structure mélageant timed et xntpd peut être mise en place. Un des hôtes locaux se met à l'heure à l'aide d'un serveur NTP public et devient un maitre timed auquel se synchroniseront les autres ordinateurs du réseau, par timed. Cela veut dire que le serveur local doit faire tourner à la fois NTP et timed. Prenez bien soin de ne pas les faire interférer (timed doit être démarré avec l'option -F hostname pour l'empêcher de règler l'horloge).

18.4. Installer le gestionnaire de démarrage

Sysinst, le programme d'installation de NetBSD, peut mettre en place le gestionnaire de démarrage de NetBSD sur le disque dur. Il peut aussi être installé ou configuré, plus tard au besoin, avec la commande fdisk. Par exemple:

# fdisk -B wd0    

Si NetBSD ne démarre pas depuis le disque dur, vous pouvez démarrer depuis la disquette d'installation puis lancer le noyau du disque dur. Insérez la disquette et, à l'invite de démarrage, tapez:

> boot wd0a:netbsd    

Cela permet de lancer le noyau du disque dur (utilisez le périférique correct, comme par exemple, sd0a pour un disque SCSI).

Note : parfois, fdisk -B ne donne pas le résultat attendu (en tout cas, ça m'est arrivé). C'est sans doutes le cas si vous avez installé ou désinstallé d'autres systèmes d'exploitation, comme Windows 95. Essayez alors de lancer fdisk /mbr depuis DOS puis de renouveler fdisk depuis NetBSD.

18.5. Effacer le disklabel

Bien que ça ne soit pas une opération que vous avez besoin de faire fréquemment, il peut être utile de savoir comment faire. Soyez exactement sûr de ce que vous faites avant d'effectuer ce type de traitement. Par exemple:

# dd if=/dev/zero of=/dev/rwd0c bs=8k count=1    

Cette commande efface le disklabel (pas la table de partitions MBR). Pour entièrement effacer le disque, utilisez le périférique wd0d. Par exemple:

# dd if=/dev/zero of=/dev/rwd0d bs=8k    

18.6. Haut-parleurs

J'ai trouvé ce truc sur une liste de diffusion (j'en ai oublié l'auteur). Pour émettre un son sur le haut parleur (par exemple à la fin d'un long traitement), le périférique spkr peut être utilisé. Il correspond à /dev/speaker. Par exemple:

echo 'BPBPBPBPBP' > /dev/speaker    

Note : le périférique spkr n'est pas présent sur le noyau générique. Il vous faut un noyau personnalisé.

18.7. Perdu votre mot de passe ?

Si vous avez oublié le mot de passe "root", tout n'est pas perdu, vous pouvez toujours retrouver le système en suivant les étapes: démarrer en mono-utilisateur, monter / et changer le mot de passe " root" . En détail:

  1. Démarrer en mono-utilisateur: lorsque l'invite de démarrage apparait et que le compte à rebours de cinq secondes démarre, tapez la commande suivante:

    > boot -s	  

  2. A l'invite suivante,

    Enter pathname of shell or RETURN for sh:	  
    appuyez sur Entrée.

  3. Tapez les commandes suivantes:

    # fsck -y /
    # mount -u /
    # fsck -y /usr
    # mount /usr
    	  

  4. Changez le mot de passe "root" avec passwd.

  5. Utilisez la commande exit pour passer en mode multi-utilisateur.

18.8. Ajouter un nouveau disque dur

Cette section décrit la façon d'ajouter un disque dur à un système NetBSD existant. Dans l'exemple suivant, un nouveau contrôleur SCSI et un nouveau disque dur connecté dessus sont ajoutés. Si vous n'avez pas besoin d'ajouter de contrôleur, allez direcement à la partie concernant le disque dur. L'installation d'un disque IDE est identique, seul change le nom du périférique (wd# au lieu de sd#).

Comme toujours, avant d'acheter du nouveau matériel, consultez la liste des compatibilités avec NetBSD et soyez sûr que le périférique puisse être reconnu par le système.

Une fois que le contrôleur SCSI est physiquement branché et le disque dur connecté, redémarrez votre ordinateur puis vérifiez s'ils sont correctement détectés avec la commande dmesg. Voici un extrait concernant un contrôleur NCR-875:

ncr0 at pci0 dev 15 function 0: ncr 53c875 fast20 wide scsi
ncr0: interrupting at irq 10
ncr0: minsync=12, maxsync=137, maxoffs=16, 128 dwords burst, large dma fifo
ncr0: single-ended, open drain IRQ driver, using on-chip SRAM
ncr0: restart (scsi reset).
scsibus0 at ncr0: 16 targets, 8 luns per target
sd0(ncr0:2:0): 20.0 MB/s (50 ns, offset 15)
sd0: 2063MB, 8188 cyl, 3 head, 172 sec, 512 bytes/sect x 4226725 sectors      
Si le périférique n'apparait pas dans l'affichage, vérifiez qu'il soit supporté par le noyau que vous utilisez. Si nécessaire, recompilez un noyau personnalisé (voyez le Chapitre 7).

Nous pouvons maintenant partitionner le disque à l'aide de fdisk. En premier lieu, vérifiez l'état actuel du disque:

# fdisk sd0
NetBSD disklabel disk geometry:
cylinders: 8188 heads: 3 sectors/track: 172 (516 sectors/cylinder)
    
BIOS disk geometry:
cylinders: 524 heads: 128 sectors/track: 63 (8064 sectors/cylinder)

Partition table:
0: sysid 6 (Primary 'big' DOS, 16-bit FAT (> 32MB))
    start 63, size 4225473 (2063 MB), flag 0x0
        beg: cylinder    0, head   1, sector  1
        end: cylinder  523, head 127, sector 63
1: <UNUSED>
2: <UNUSED>
3: <UNUSED>    

Dans cet exemple, le disque contient déjà une partition DOS qui sera effacée et remplacée par une partition NetBSD. La commane fdisk -u sd0 permet de modifier interractivement les partitions. Les données modifiées ne seront écrites sur le disque que lorsque fdisk quittera et il vous demandera confirmation avant de faire quoi que ce soit. Vous pouvez donc travailler tranquillement.

Pour créer une partition BIOS, utilisez la commande fdisk -u. Voici ce que cela donne:

Partition table:
0: sysid 169 (NetBSD)
    start 63, size 4225473 (2063 MB), flag 0x0
        beg: cylinder    0, head   1, sector  1
        end: cylinder  523, head 127, sector 63
1: <UNUSED>
2: <UNUSED>
3: <UNUSED>      

Maintenant, créons le disklabel pour NetBSD. Les étapes à suivre sont:

# disklabel sd0 > fichiertemp
# vi fichiertemp
# disklabel -R -r sd0 fichiertemp
      

Nous allons maintenant créer le disklabel en éditant le fichier fichiertemp, comme déjà expliqué. Le résultat est:

#      size   offset   fstype [fsize bsize   cpg]
a:  2048004       63   4.2BSD   1024  8192    16 # (Cyl.  0*- 3969*)
c:  4226662       63   unused      0     0       # (Cyl.  0*- 8191*)
d:  4226725        0   unused      0     0       # (Cyl.  0 - 8191*)
e:  2178658  2048067   4.2BSD   1024  8192    16 # (Cyl.  3969*- 8191*)      

Note : lorsque le disklabel est créé, il est possible de l'optimiser en s'aidant de la sortie de la commande newfs -N /dev/sd0a. Elle avertit en cas de présence de secteurs inutilisés en fin de partition. Les valeurs rapportées peuvent être utilisées pour ajuster la taille des partition en recommençant le processus.

Enfin, nous allons créer le système de fichiers des partitions nouvellement définies (a et e).

# newfs /dev/sd0a
# newfs /dev/sd0e
      
Le disque est maintenant prêt à être utilisé et deux partitions peuvent être montées. Par exemple:
# mount /dev/sd0a /mnt      

18.9. Fichier de mots de passe occupé ?

Si vous essayez de changer de mot de passe et que vous obtenez le mystérieux message: "Password file is busy" (le fichier de mots de passe est occupé), cela veut certainement dire que le fichier /etc/ptmp n'a pas été effacé du système. Il contient une copie temporaire du fichier /etc/master.passwd. Vérifiez que vous ne perdez pas d'informations importantes et effacez-le (ptmp, pas master.passwd).

Note : si le fichier /etc/ptmp existe, vous pouvez aussi recevoir un avertissement au démarrage du système. Par exemple:

root: password file may be incorrect - /etc/ptmp exists