Page suivante Page précédente Table des matières

7. Quelques pièges

7.1 make clean

Si votre noyau a un comportement surnaturel (ça m'est arrivé !), il y a des chances pour que vous ayez oublié de faire un "make clean". Les symptômes peuvent être un plantage de votre système, des problèmes d'entrées-sorties étranges, une chute des performances, des reboot aléatoires... Vérifiez que vous avez également fait un make dep.

7.2 Noyaux énormes ou lents

Si votre noyau consomme beaucoup de mémoire, ou s'il est réellement gros, ou bien s'il faut une éternité pour le compiler même lorsque vous utilisez votre nouveau 986DX6/440, c'est que vous avez configuré un tas de choses (pilotes de périphériques, systèmes de fichiers) dont vous n'avez pas besoin. Si vous ne les utilisez pas, ne les configurez pas car cela prend beaucoup de place en mémoire. Le symptôme le plus visible est l'augmentation sensible du fonctionnement du swap. Si votre disque fait beaucoup de bruit, et qu'il ne s'agit pas d'un de ces vieux disques Fujitsu Eagles qui font le bruit d'un avion lors de son atterrissage lorsque vous l'éteignez, jetez un coup d'oeil à votre configuration.

Vous pouvez calculer la taille mémoire que le noyau utilise en prenant la mémoire totale de votre machine et en soustrayant la valeur de la mémoire totale ("total mem") dans /proc/meminfo ou bien avec la commande "free".

7.3 Le port parallèle ne fonctionne pas/mon imprimante ne fonctionne pas

Les options de configuration pour les PC sont : premièrement, dans la catégorie "General Setup" sélectionnez "Parallel port support" et "PC-style hardware". Puis dans "Character devices", sélectionnez "Parallel printer support".

Il y a ensuite le problème des noms de périphérique des imprimantes qui ont changé dans Linux 2.2. Si vous aviez une imprimante lp1 avec votre noyau précédent, elle s'appelle probablement lp0 maintenant. Utilisez "dmesg" ou cherchez dans les logs dans /var/log pour le vérifier.

7.4 Le noyau ne compile pas

Si cela ne compile pas, alors un patch a probablement échoué, ou bien vous possédez des sources corrompus. Votre version de gcc peut également ne pas être correcte, ou bien endommagée (par exemple les fichiers d'include peuvent être faux). Soyez sûr que les liens que Linus décrit dans le fichier README sont corrects. En général, si un noyau standard ne compile pas, c'est qu'un truc ne tourne pas rond dans le système, et il est plus que probable que certains outils doivent être reinstallés.

Dans des cas relativement rares, gcc peut échouer en raison de problèmes de matériel. Le message d'erreur ressemble à un truc assez mystérieux "xxx exited with signal 15". Je n'en n'aurais probablement pas parlé si cela ne m'était arrivé une fois. J'avais un cache mémoire défectueux et le compilateur fonctionnait de manière plutôt aléatoire. Essayez dans un premier temps de reinstaller gcc si vous avez des problèmes. Si votre noyau compile très bien avec les caches externes vidés ou une mémoire réduite, alors vous pourrez commencer à soupçonner votre matériel.

Certaines personnes ont tendance à ne pas aimer que je mette en doute leur matériel. Je n'invente rien. Il existe une FAQ dédiée à ce sujet : http://www.bitwizard.nl/sig11/ (NdT : traduite en français à http://www.linux-france.org/article/sig11-fr/sig11-fr.html).

7.5 La nouvelle version du noyau ne boote plus !

Soit LILO ne fonctionne pas, soit il n'est pas configuré correctement. Une fois, un problème dans le fichier de configuration m'a posé pas mal de soucis : j'avais mis "boot = /dev/hda1" à la place de "boot = /dev/hda" (ce genre d'erreurs n'est pas facile à trouver, mais une fois que vous avez un fichier de configuration qui fonctionne, il n'y a pas de raison d'y toucher).

7.6 Vous avez oublié de lancer LILO, ou le système ne boote plus du tout

Argh ! La meilleure chose à faire est de booter à partir d'une disquette et de préparer une nouvelle disquette de boot ("make zdisk" fait cela très bien). Vous avez besoin de savoir où votre partition racine (/) se trouve et quel est son type (ext2fs, minix, etc). Dans l'exemple ci-dessous, vous aurez également besoin de connaître la partition des sources du noyau (/usr/src/linux), et où elle est montée.

Dans cet exemple,la racine / est /dev/hda1, la partition qui supporte /usr/src/linux est /dev/hda3, normalement montée sur /usr. Toutes les deux ont un système de fichiers de type ext2fs. L'image du noyau se trouve dans /usr/src/linux/arch/i386/boot/ et elle s'appelle bzImage.

L'idée est que s'il existe un noyau bzImage qui fonctionne il est possible de l'utiliser pour la nouvelle disquette. Une autre possibilité qui peut être meilleure ou pas est présentée après cet exemple (cela dépend de la façon dont vous avez planté votre système).

Commencez par booter à partir d'une disquette d'installation (boot/root) ou d'une disquette de secours et montez la partition où se trouve le noyau en état de marche :

        mkdir /mnt
        mount -t ext2 /dev/hda3 /mnt

Si mkdir vous annonce que le répertoire existe, ignorez le message. Maintenant, allez dans le répertoire où se trouve le noyau en état de marche. Notez que

/mnt + /usr/src/linux/arch/i386/boot - /usr = /mnt/src/linux/arch/i386/boot
Insérez une disquette formatée dans le lecteur "A:" (vérifiez qu'il ne s'agit pas de la disquette boot ou root !), faites une copie de l'image sur le disque et configurez votre partition racine :

cd /mnt/src/linux/arch/i386/boot
dd if=bzImage of=/dev/fd0
rdev /dev/fd0 /dev/hda1

Allez à la racine /, et démontez la partition /usr :

cd /
umount /mnt

Maintenant, vous devriez être capable de rebooter votre système normalement à partir de cette disquette. N'oubliez pas de lancer lilo (ou ce que vous aviez oublié) avant de rebooter !

Comme mentionné ci-dessus, il y a une autre manière très pratique. S'il se trouve que vous avez un noyau opérationnel dans / (/vmlinuz par exemple), on peut s'en servir. Supposons que vous remplissiez les conditions ci-dessus, et que votre noyau s'appelle /vmlinuz, faites comme ci-dessus en changeant /dev/hda3 en /dev/hda1 (la partition /), /mnt/src/linux en /mnt, et if=bzImage en if=vmlinuz. La petite note expliquant comment aller dans /mnt/src/linux peut être oubliée.

Utiliser LILO avec de gros disques (avec un nombre de cyclindres supérieur à 1024) peut poser des problèmes. Consultez le mini-Howto LILO ou la documentation.

7.7 Il me dit "warning: bdflush not running"

Cela peut être un problème assez grave. Avec les noyaux ayant une version supérieure à 1.0 (aux alentours du 20 avril 1994), le programme "update" qui vide périodiquement les tampons disque a été remplacé par "bdflush". Récupérez les sources de "bdflush" (vous pouvez les récupérer là où vous avez trouvé votre noyau), et compilez-le (il vaut mieux fonctionner avec un ancien noyau pendant la compilation et pendant l'installation). Il s'installera tout seul comme "update" et le nouveau noyau devrait ensuite fonctionner correctement.

7.8 Je n'arrive pas à faire marcher mon CD-ROM IDE/ATAPI

Aussi étrange que cela puisse paraître, beaucoup de gens n'arrivent pas à faire fonctionner leurs disques ATAPI, tout simplement parce qu'il y a un bon nombre de problèmes potentiels.

Si votre CD-ROM est le seul disque d'une interface IDE particulière il doit être configuré en "maître (master)" ou "seul (single)". C'est l'erreur la plus fréquemment rencontrée.

Creative Labs (par exemple) a mis des interfaces IDE sur ses cartes sons. Toutefois, cela pose un problème pour les gens qui ont déjà deux interfaces IDE sur leur carte mère (IRQ15 généralement). Une pratique commune est de faire de l'interface soundblaster un troisième port IDE (IRQ11 je pense).

Cela pose un problème avec Linux car les versions 1.2.x ne supportent pas une troisième interface IDE (cela est géré avec les versions 1.3.x mais ce sont des versions de développement, et la troisième interface n'est pas détectée automatiquement). Pour résoudre ce problème, vous avez plusieurs possibilités.

Si avez déjà un deuxième port IDE, il y a des chances pour que vous ne l'utilisiez pas ou qu'il n'ait pas deux périphériques connectés. Désactivez l'interface ATAPI de la carte son (vous économisez un IRQ) et connectez le disque sur votre seconde interface.

Si vous n'avez pas une seconde interface, mettez interface IDE (pas la partie son) de la carte son sur l'IRQ 15. Cela devrait fonctionner.

7.9 Le noyau me dit des insanités à propos de requêtes obsolètes !

Récupérez des versions récentes du progamme route et de tous les autres programmes manipulant les routes : /usr/include/linux/route.h (qui est en fait un fichier dans /usr/src/linux) a changé.

7.10 Le Firewall ne fonctionne pas dans la version 1.2.0

Passez à la version 1.2.1.

7.11 Ce n'est pas une image noyau compressée !

N'utilisez pas le fichier vmlinux créé dans /usr/src/linux comme image de boot mais [..]/arch/i386/boot/bzImage.

7.12 Problèmes avec la console après mise à jour à la version 1.3.x

Changez le mot dumb en linux dans l'entrée console du fichier /etc/termcap. Il faudra peut-être aussi ajouter une entrée terminfo.

7.13 Le noyau ne semble pas pouvoir compiler après une mise à jour

Le source du noyau contient un certain nombre de fichiers d'en-têtes (les fichiers se terminant par .h) qui se trouvent dans le répertoire /usr/include. Ils sont référencés ainsi (où xyzzy.h doit être dans /usr/include/linux) :

    #include <linux/xyzzy.h>
Normalement, il y a un lien appelé linux dans /usr/include sur le répertoire include/linux de la racine des sources du noyau (/usr/src/linux/include/linux dans un système standard). Si ce lien n'existe pas, ou bien pointe au mauvais endroit, bon nombre de programmes ne compileront pas. Si vous décidez que les sources du noyau prennent trop de place sur votre disque et que vous les détruisez, cela sera un problème. Un autre problème qui peut arriver, c'est avec les permissions d'accès aux fichiers. Si votre root a un umask qui n'autorise pas les autres utilisateurs à voir ses fichiers par défaut, et que vous désarchiviez les sources du noyau sans l'option p (conserve le mode), les utilisateurs ne pourront pas utiliser le compilateur C. Vous pouvez alors utiliser la commande chmod pour résoudre le problème mais il est probablement plus facile de réinstaller les fichiers include. Vous pouvez procéder de la même manière que lors de l'installation des sources au début, en ajoutant un argument pour n'extraire que les includes :
    blah# tar zxvpf linux.x.y.z.tar.gz linux/include
Notez que "make config" va recréer le lien /usr/src/linux s'il n'existe pas.

7.14 Augmenter les limites

Ces quelques exemples de commandes peuvent être assez utiles à ceux qui se demandent comment augmenter certaines limites logicielles imposées par le noyau :

 echo 4096 > /proc/sys/kernel/file-max
 echo 12288 > /proc/sys/kernel/inode-max
 echo 300 400 500 > /proc/sys/vm/freepages


Page suivante Page précédente Table des matières