diff --git a/fr_FR.ISO8859-1/books/handbook/basics/chapter.sgml b/fr_FR.ISO8859-1/books/handbook/basics/chapter.sgml index f1392ca9b7..bfc2d5d4c6 100644 --- a/fr_FR.ISO8859-1/books/handbook/basics/chapter.sgml +++ b/fr_FR.ISO8859-1/books/handbook/basics/chapter.sgml @@ -1,3063 +1,3063 @@ Chris Shumway Réécrit par Quelques bases d'UNIX &trans.a.fonvieille; Synopsis Le chapitre suivant couvrira les commandes et fonctionnalités de base du système d'exploitation FreeBSD. La plupart de ces informations sera valable pour n'importe quel système d'exploitation &unix;. Soyez libre de passer ce chapitre si vous êtes familier avec ces informations. Si vous êtes nouveau à FreeBSD, alors vous voudrez certainement lire attentivement ce chapitre. Après la lecture de ce chapitre, vous saurez: Comment utiliser les “consoles virtuelles” de &os;. Comment les permissions des fichiers d'&unix; fonctionnent ainsi que l'utilisation des indicateurs de fichiers sous &os;. L'architecture par défaut du système de fichiers sous &os;. L'organisation des disques sous &os;. Comment monter et démonter des systèmes de fichier. Ce que sont les processus, daemons et signaux. Ce qu'est un interpréteur de commande, et comment changer votre environnement de session par défaut. Comment utiliser les éditeurs de texte de base. Ce que sont les périphériques et les fichiers spéciaux de périphérique. Quel est le format des binaires utilisé sous &os;. Comment lire les pages de manuel pour plus d'information. Consoles virtuelles & terminaux consoles virtuelles terminaux FreeBSD peut être utilisé de diverses façons. L'une d'elles est en tapant des commandes sur un terminal texte. Une bonne partie de la flexibilité et de la puissance - d'un système d'exploitation &unix; est directemtent + d'un système d'exploitation &unix; est directement disponible sous vos mains en utilisant FreeBSD de cette manière. Cette section décrit ce que sont les “terminaux” et les “consoles”, et comment les utiliser sous FreeBSD. La console console Si vous n'avez pas configuré FreeBSD pour lancer automatiquement un environnement graphique au démarrage, le système vous présentera une invite d'ouverture de session après son démarrage, juste après la fin des procédures de démarrage. Vous verrez quelque chose de similaire à: Additional ABI support:. Local package initialization:. Additional TCP options:. Fri Sep 20 13:01:06 EEST 2002 FreeBSD/i386 (pc3.example.org) (ttyv0) login: Les messages pourront être différents sur votre système, mais cela devrait y ressembler. Les deux dernières lignes sont celles qui nous intéressent actuellement. La seconde de ces lignes nous donne: FreeBSD/i386 (pc3.example.org) (ttyv0) Cette ligne contient quelques éléments d'information sur le système que vous venez de démarrer. Vous êtes en train de lire une console “FreeBSD”, tournant sur un processeur Intel ou compatible de la famille x86 C'est ce que signifie i386. Notez que même si vous faites tourner FreeBSD sur un CPU Intel 386, cela sera i386. Ce n'est pas le type de votre microprocesseur, mais “l'architecture” du microprocesseur qui est donnée ici. . Le nom de cette machine (chaque machine &unix; a un nom) est pc3.example.org, et vous regardez actuellement sa console système—le terminal ttyv0. Et enfin, la dernière ligne est toujours: login: C'est le moment où vous êtes supposé taper votre “nom d'utilisateur” pour vous attacher au système FreeBSD. La section suivante décrit comment procéder. Ouvrir une session sur un système FreeBSD FreeBSD est un système multi-utilisateur, multi-processeur. C'est la description formelle qui est habituellement donnée pour un système qui peut être utilisé par différentes personnes, qui exécutent simultanément de nombreux programmes sur une machine individuelle/ Chaque système multi-utilisateur a besoin d'un moyen pour distinguer un “utilisateur” du reste. Sous FreeBSD (et sous tous les systèmes de type &unix;), cela est effectué en demandant à chaque utilisateur de “s'attacher” au système avant d'être en mesure d'exécuter des programmes. Chaque utilisateur possède un nom unique (le nom d'utilisateur) et une clé secrète personnelle (le mot de passe). FreeBSD demandera ces deux éléments avant d'autoriser un utilisateur à lancer un programme. procédures de démarrage Juste après que FreeBSD ait démarré et en ait terminé avec l'exécution des procédures de démarrage Les procédures de démarrage sont des programmes qui sont exécutés automatiquement pas FreeBSD au démarrage. Leur fonction principale est de configurer le système pour permettre l'exécution de tout programme, et de démarrer tout service que vous avez configuré pour tourner en tâche de fond et exécuter des choses utiles. , il présentera une invite et demandera un nom d'utilisateur valide: login: Pour cet exemple, supposons que votre nom d'utilisateur est john. Tapez john à cette invite puis appuyez sur Entrée. Alors vous devrez être invité à entrer un “mot de passe”: login: john Password: Tapez maintenant le mot de passe de john, et appuyez sur Entrée. Le mot de passe n'est pas affiché! Vous n'avez pas à vous préoccuper de cela maintenant. Il suffit de penser que cela est fait pour des raisons de sécurité. Si vous avez tapé correctement votre mot de passe, vous devriez être maintenant attaché au système et prêt à essayer toutes les commandes disponibles. Vous devriez voir apparaître le MOTD ou message du jour suivi de l'invite de commande (un caractère #, $, ou %). Cela indique que vous avez ouvert avec succès une session sous &os;. Consoles multiples Exécuter des commandes &unix; dans une console est bien beau, mais FreeBSD peut exécuter plusieurs programmes à la fois. Avoir une seule console sur laquelle les commandes peuvent être tapées serait un peu du gaspillage quand un système d'exploitation comme FreeBSD peut exécuter des dizaines de programmes en même temps. C'est ici que des “consoles virtuelles” peuvent être vraiment utiles. FreeBSD peut être configuré pour présenter de nombreuses consoles virtuelles. Vous pouvez basculer d'une console virtuelle à une autre en utilisant une combinaison de touches sur votre clavier. Chaque console a son propre canal de sortie, et FreeBSD prend soin de rediriger correctement les entrées au clavier et la sortie vers écran quand vous basculez d'une console virtuelle à la suivante. Des combinaisons de touches spécifiques ont été réservées par FreeBSD pour le basculement entre consoles Une description assez technique et précise de tous les détails de la console FreeBSD et des pilotes de clavier peut être trouvée dans les pages de manuel de &man.syscons.4;, &man.atkbd.4;, &man.vidcontrol.1; et &man.kbdcontrol.1;. Nous ne nous étendrons pas en détails ici, mais le lecteur intéressé peut toujours consulter les pages de manuel pour explication plus détaillée et plus complète sur le fonctionnement des choses. . Vous pouvez utiliser AltF1, AltF2, jusqu'à AltF8 pour basculer vers une console virtuelle différente sous FreeBSD. Quand vous basculez d'une console à une autre, FreeBSD prend soin de sauvegarder et restaurer la sortie d'écran. Il en résulte l'“illusion” d'avoir plusieurs écrans et claviers “virtuels” que vous pouvez utiliser pour taper des commandes pour FreeBSD. Les programmes que vous lancez sur une console virtuelle ne cessent pas de tourner quand cette console n'est plus visible. Ils continuent de s'exécuter quand vous avez basculé vers une console virtuelle différente. Le fichier <filename>/etc/ttys</filename> La configuration par défaut de FreeBSD démarre avec huit consoles virtuelles. Cependant ce n'est pas un paramétrage fixe, et vous pouvez aisément personnaliser votre installation pour démarrer avec plus ou moins de consoles virtuelles. Le nombre et les paramétrages des consoles virtuelles sont configurés dans le fichier /etc/ttys. Vous pouvez utiliser le fichier /etc/ttys pour configurer les consoles virtuelles de FreeBSD. Chaque ligne non-commentée dans ce fichier (les lignes qui ne débutent pas par le caractère #) contient le paramétrage d'un terminal ou d'une console virtuelle. La version par défaut de ce fichier livrée avec FreeBSD configure neuf consoles virtuelles, et en active huit. Ce sont les lignes commençant avec le terme ttyv: # name getty type status comments # ttyv0 "/usr/libexec/getty Pc" cons25 on secure # Virtual terminals ttyv1 "/usr/libexec/getty Pc" cons25 on secure ttyv2 "/usr/libexec/getty Pc" cons25 on secure ttyv3 "/usr/libexec/getty Pc" cons25 on secure ttyv4 "/usr/libexec/getty Pc" cons25 on secure ttyv5 "/usr/libexec/getty Pc" cons25 on secure ttyv6 "/usr/libexec/getty Pc" cons25 on secure ttyv7 "/usr/libexec/getty Pc" cons25 on secure ttyv8 "/usr/X11R6/bin/xdm -nodaemon" xterm off secure Pour une description détaillée de chaque colonne de ce fichier et toutes les options que vous pouvez utiliser pour configurer les consoles virtuelles, consultez la page de manuel &man.ttys.5;. Console en mode mono-utilisateur Une description détaillée de ce qu'est le mode mono-utilisateur peut être trouvée dans . Il est important de noter qu'il n'y a qu'une console de disponible quand vous exécuter FreeBSD en mode mono-utilisateur. Il n'y a aucune console virtuelle de disponible. Le paramétrage de la console en mode mono-utilisateur peut être également trouvé dans le fichier /etc/ttys. Recherchez la ligne qui commence avec le mot console: # name getty type status comments # # If console is marked "insecure", then init will ask for the root password # when going to single-user mode. console none unknown off secure Comme l'indiquent les commentaires au-dessus de la ligne console, vous pouvez éditer cette ligne et changer secure pour insecure. Si vous faites cela, quand FreeBSD démarrera en mode mono-utilisateur, il demandera le mot de passe de root. Cependant faites attention quand vous modifiez cela pour insecure. Si vous oubliez le mot de passe de root, le démarrage en mode mono-utilisateur sera condamné. Il est encore possible, mais cela pourra être relativement compliqué pour quelqu'un qui n'est pas à l'aise avec le processus de démarrage de FreeBSD et les programmes entrant en jeu. Permissions UNIX FreeBSD, étant un descendant direct de l'&unix; BSD, est basé sur plusieurs concepts clés d'&unix;. Le premier, et le plus prononcé, est le fait que FreeBSD est un système d'exploitation multi-utilisateurs. Le système peut gérer plusieurs utilisateurs travaillant tous simultanément sur des tâches complètement indépendantes. Le système est responsable du partage correct et de la gestion des requêtes pour les périphériques matériels, la mémoire, et le temps CPU de façon équitable entre chaque utilisateur. Puisque le système est capable de supporter des utilisateurs multiples, tout ce que le système gère possède un ensemble de permissions définissant qui peut écrire, lire, et exécuter la ressource. Ces permissions sont stockées sous forme de trois octets divisés en trois parties, une pour le propriétaire du fichier, une pour le groupe auquel appartient le fichier, et une autre pour le reste du monde. Cette représentation numérique fonctionne comme ceci: permissions permissions de fichier Valeur Permission Contenu du répertoire 0 Pas d'accès en lecture, pas d'accès en écriture, pas d'accès en exécution --- 1 Pas d'accès en lecture, pas d'accès en écriture, exécution --x 2 Pas d'accès en lecture, écriture, pas d'accès en exécution -w- 3 Pas d'accès en lecture, écriture, exécution -wx 4 Lecture, pas d'accès en écriture, pas d'accès en exécution r-- 5 Lecture, pas d'accès en écriture, exécution r-x 6 Lecture, écriture, pas d'accès en exécution rw- 7 Lecture, écriture, exécution rwx ls répertoires Vous pouvez utiliser l'option avec la commande &man.ls.1; pour afficher le contenu du répertoire sous forme une longue et détaillée qui inclut une colonne avec des informations sur les permissions d'accès des fichiers pour le propriétaire, le groupe, et le reste du monde. Par exemple un ls -l dans un répertoire quelconque devrait donner: &prompt.user; ls -l total 530 -rw-r--r-- 1 root wheel 512 Sep 5 12:31 myfile -rw-r--r-- 1 root wheel 512 Sep 5 12:31 otherfile -rw-r--r-- 1 root wheel 7680 Sep 5 12:31 email.txt ... Voici comment est divisée la première colonne de l'affichage généré par ls -l: -rw-r--r-- Le premier caractère (le plus à gauche) indique si c'est un fichier normal, un répertoire, ou un périphérique mode caractère, une socket, ou tout autre pseudo-périphérique. Dans ce cas, - indique un fichier normal. Les trois caractères suivants, rw- dans cet exemple, donnent les permissions pour le propriétaire du fichier. Les trois caractères qui suivent, r--, donnent les permissions pour le groupe auquel appartient le fichier. Les trois derniers caractères, r--, donnent les permissions pour le reste du monde. Un tiret signifie que la permission est désactivée. Dans le cas de ce fichier, les permissions sont telles que le propriétaire peut lire et écrire le fichier, le groupe peut lire le fichier, et le reste du monde peut seulement lire le fichier. D'après la table ci-dessus, les permissions pour ce fichier seraient 644, où chaque chiffre représente les trois parties des permissions du fichier. Tout cela est bien beau, mais comment le système contrôle les permissions sur les périphériques? En fait FreeBSD traite la plupart des périphériques sous la forme d'un fichier que les programmes peuvent ouvrir, lire, et écrire des données dessus comme tout autre fichier. Ces périphériques spéciaux sont stockés dans le répertoire /dev. Les répertoires sont aussi traités comme des fichiers. Ils ont des droits en lecture, écriture et exécution. Le bit d'exécution pour un répertoire a une signification légèrement différente que pour les fichiers. Quand un répertoire est marqué exécutable, cela signifie que l'on peut être traversé, i.e. il est possible d'utiliser “cd” (changement de répertoire). Ceci signifie également qu'à l'intérieur du répertoire il est possible d'accéder aux fichiers dont les noms sont connues (en fonction, bien sûr, des permissions sur les fichiers eux-mêmes). En particulier, afin d'obtenir la liste du contenu d'un répertoire, la permission de lecture doit être positionnée sur le répertoire, tandis que pour effacer un fichier dont on connaît le nom, il est nécessaire d'avoir les droits d'écriture et d'exécution sur le répertoire contenant le fichier. Il y a d'autres types de permissions, mais elles sont principalement employées dans des circonstances spéciales comme les binaires “setuid” et les répertoires “sticky”. Si vous désirez plus d'information sur les permissions de fichier et comment les positionner, soyez sûr de consulter la page de manuel &man.chmod.1;. Tom Rhodes Contribution de Permissions symboliques permissionssymboliques Les permissions symboliques, parfois désignées sous le nom d'expressions symboliques, utilisent des caractères à la place de valeur en octal pour assigner les permissions aux fichiers et répertoires. Les expressions symboliques emploient la syntaxe: (qui) (action) (permissions), avec les valeurs possibles suivantes: Option Lettre Représente (qui) u Utilisateur (qui) g Groupe (qui) o Autre (qui) a Tous (le monde entier) (action) + Ajouter des permissions (action) - Retirer des permissions (action) = Fixe les permissions de façon explicite (permissions) r Lecture (permissions) w Ecriture (permissions) x Exécution (permissions) t bit collant (sticky) (permissions) s Exécuter avec l'ID utilisateur (UID) ou groupe (GID) Ces valeurs sont utilisées avec la commande &man.chmod.1; comme précédemment mais avec des lettres. Par exemple, vous pourriez utiliser la commande suivante pour refuser l'accès au fichier FICHIER à d'autres utilisateurs: &prompt.user; chmod go= FICHIER Une liste séparé par des virgules peut être fournie quand plus d'un changement doit être effectué sur un fichier. Par exemple la commande suivante retirera les permissions d'écriture aux groupes et au “reste du monde” sur le fichier FICHIER, puis ajoutera la permission d'exécution pour tout le monde: &prompt.user; chmod go-w,a+x FICHIER Tom Rhodes Contribution de Indicateurs des fichiers sous &os; En addition des permissions sur les fichiers précédement présentées, &os; supporte l'utilisation d'indicateurs de fichiers. Ces indicateurs rajoutent un niveau de contrôle et de sécurité sur les fichiers, mais ne concernent pas les répertoires. Ces indicateurs ajoutent donc un niveau de contrôle supplémentaire des fichiers, permettant d'assurer que dans certains cas même le super-utilisateur root ne pourra effacer ou modifier des fichiers. Les indicateurs de fichiers peuvent être modifiés avec l'utilitaire &man.chflags.1;, ce dernier présentant une interface simple. Par exemple, pour activer l'indicateur système de suppression impossible sur le fichier file1, tapez la commande suivante: &prompt.root; chflags sunlink file1 Et pour désactiver l'indicateur de suppression impossible, utilisez la commande précédente avec le préfixe no devant l'option : &prompt.root; chflags nosunlink file1 Pour afficher les indicateurs propres à ce fichier, utilisez la commande &man.ls.1; avec l'option : &prompt.root; ls -lo file1 La sortie de la commande devrait ressembler à: -rw-r--r-- 1 trhodes trhodes sunlnk 0 Mar 1 05:54 file1 Plusieurs indicateurs ne peuvent être positionnés ou retirés que par le super-utilisateur root. Dans les autres cas, le propriétaire du fichier peut activer ces indicateurs. Pour plus d'information, la lecture des pages de manuel &man.chflags.1; et &man.chflags.2; est recommandée à tout administrateur. Organisation de l'arborescence des répertoires hiérarchie des répertoires L'organisation de l'arborescence des répertoires de FreeBSD est essentielle pour obtenir une compréhension globale du système. Le concept le plus important à saisir est celui du répertoire racine, “/”. Ce répertoire est le premier a être monté au démarrage et il contient le système de base nécessaire pour préparer le système d'exploitation au fonctionnement multi-utilisateurs. Le répertoire racine contient également les points de montage pour tous les autres systèmes de fichiers que vous pourriez vouloir monter. Un point de montage est un répertoire où peuvent être greffés des systèmes de fichiers supplémentaires au système de fichiers racine. Cela est décrit plus en détails dans la . Les points de montage standards incluent /usr, /var, /tmp, /mnt, et /cdrom. Ces répertoires sont en général référencés par des entrées dans le fichier /etc/fstab. /etc/fstab est une table des divers systèmes de fichiers et de leur point de montage utilisé comme référence par le système. La plupart des systèmes de fichiers présents dans /etc/fstab sont montés automatiquement au moment du démarrage par la procédure &man.rc.8; à moins que l'option soit présente. Plus de détails peuvent être trouvés dans la . Une description complète de l'arborescence du système de fichiers est disponible dans la page de manuel &man.hier.7;. Pour l'instant, une brève vue d'ensemble des répertoires les plus courants suffira. Répertoire Description / Répertoire racine du système de fichiers. /bin/ Programmes utilisateur fondamentaux aux deux modes de fonctionnement mono et multi-utilisateurs. /boot/ Programmes et fichiers de configuration utilisés durant le processus de démarrage du système. /boot/defaults/ Fichiers de configuration par défaut du processus de démarrage; voir la page de manuel &man.loader.conf.5;. /dev/ Fichiers spéciaux de périphérique; voir la page de manuel &man.intro.4;. /etc/ Procédures et fichiers de configuration du système. /etc/defaults/ Fichiers de configuration du système par défaut; voir la page de manuel &man.rc.8;. /etc/mail/ Fichiers de configuration pour les agents de transport du courrier électronique comme &man.sendmail.8;. /etc/namedb/ Fichiers de configuration de named; voir la page de manuel &man.named.8;. /etc/periodic/ Procédures qui sont exécutées de façon quotidienne, hebdomadaire et mensuelle par l'intermédiaire de &man.cron.8;; voir la page de manuel &man.periodic.8;. /etc/ppp/ Fichiers de configuration de ppp; voir la page de manuel &man.ppp.8;. /mnt/ Répertoire vide habituellement utilisé par les administrateurs système comme un point de montage temporaire. /proc/ Le système de fichiers pour les processus; voir les pages de manuel &man.procfs.5;, &man.mount.procfs.8;. /rescue/ Programmes liés en statique pour les réparations d'urgence; consultez la page de manuel &man.rescue.8;. /root/ Répertoire personnel du compte root. /sbin/ Programmes systèmes et utilitaires systèmes fondamentaux aux environnements mono et multi-utilisateurs. /stand/ Programmes utilisés dans un environnement autonome. /tmp/ Fichiers temporaires. - le contenu de /tmp + Le contenu de /tmp n'est en général PAS préservé par un redémarrage du système. Un système de fichiers en mémoire est souvent monté sur /tmp. Cela peut être automatisé en utilisant les variables &man.rc.conf.5; relatives au système tmpmfs (ou à l'aide d'une entrée dans le fichier /etc/fstab; consultez la page de manuel &man.mdmfs.8; (ou &man.mfs.8; for &os; 4.X). /usr/ La majorité des utilitaires et applications utilisateur. /usr/bin/ Utilitaires généraux, outils de programmation, et applications. /usr/include/ Fichiers d'en-tête C standard. /usr/lib/ Ensemble des bibliothèques. /usr/libdata/ Divers fichiers de données de service. /usr/libexec/ Utilitaires et daemons système (exécutés par d'autres programmes). /usr/local/ Exécutables, bibliothèques, etc... Egalement utilisé comme destination de défaut pour les logiciels portés pour FreeBSD. Dans /usr/local, l'organisation générale décrite par la page de manuel &man.hier.7; pour /usr devrait être utilisée. Exceptions faites du répertoire man qui est directement sous /usr/local plutôt que sous /usr/local/share, et la documentation des logiciels portés est dans share/doc/port. /usr/obj/ Arborescence cible spécifique à une architecture produite par la compilation de l'arborescence /usr/src. /usr/ports Le catalogue des logiciels portés (optionnel). /usr/sbin/ Utilitaires et daemons système (exécutés par les utilisateurs). /usr/share/ Fichiers indépendants de l'architecture. /usr/src/ Fichiers source FreeBSD et/ou locaux. /usr/X11R6/ Exécutables, bibliothèques etc... de la distribution d'X11R6 (optionnel). /var/ Fichiers de traces, fichiers temporaires, et fichiers tampons. Un système de fichiers en mémoire est parfois monté sur /var. Cela peut être automatisé en utilisant les variables &man.rc.conf.5; relatives au système varmfs (ou à l'aide d'une entrée dans le fichier /etc/fstab; consultez la page de manuel &man.mdmfs.8; (ou &man.mfs.8; for &os; 4.X). /var/log/ Divers fichiers de trace du système. /var/mail/ Boîtes aux lettres des utilisateurs. /var/spool/ Divers répertoires tampons des systèmes de courrier électronique et d'impression. /var/tmp/ Fichiers temporaires. Ces fichiers sont généralement conservés lors d'un redémarrage du système, à moins que /var ne soit un système de fichiers en mémoire. /var/yp Tables NIS. Organisation des disques Le plus petit élément qu'utilise FreeBSD pour retrouver des fichiers est le nom de fichier. Les noms de fichiers sont sensibles à la casse des caractères, ce qui signifie que readme.txt et README.TXT sont deux fichiers séparés. FreeBSD n'utilise pas l'extension (.txt) d'un fichier pour déterminer si ce fichier est un programme, un document ou une autre forme de donnée. Les fichiers sont stockés dans des répertoires. Un répertoire peut ne contenir aucun fichier, ou en contenir plusieurs centaines. Un répertoire peut également contenir d'autre répertoires, vous permettant de construire une hiérarchie de répertoires à l'intérieur d'un autre. Cela rend plus simple l'organisation de vos données. Les fichiers et les répertoires sont référencés en donnant le nom du fichier ou du répertoire, suivi par un slash, /, suivi par tout nom de répertoire nécessaire. Si vous avez un répertoire foo, qui contient le répertoire bar, qui contient le fichier readme.txt, alors le nom complet, ou chemin (“path”) vers le fichier est foo/bar/readme.txt. Les répertoires et les fichiers sont stockés sur un système de fichiers. Chaque système de fichiers contient à son niveau le plus haut un répertoire appelé répertoire racine pour ce système de fichiers. Ce répertoire racine peut alors contenir les autres répertoires. Jusqu'ici cela est probablement semblable à n'importe quel autre système d'exploitation que vous avez pu avoir utilisé. Il y a quelques différences: par exemple, &ms-dos; utilise \ pour séparer les noms de fichier et de répertoire, alors que MacOS utilise :. FreeBSD n'utilise pas de lettre pour les lecteurs, ou d'autres noms de disque dans le chemin. Vous n'écrirez pas c:/foo/bar/readme.txt sous FreeBSD. Au lieu de cela, un système de fichiers est désigné comme système de fichiers racine. La racine du système de fichiers racine est représentée par un /. Tous les autres systèmes de fichiers sont alors montés sous le système de fichiers racine. Peu importe le nombre de disques que vous avez sur votre système FreeBSD, chaque répertoire apparaît comme faisant partie du même disque. Supposez que vous avez trois systèmes de fichiers, appelés A, B, et C. Chaque système de fichiers possède un répertoire racine, qui contient deux autres répertoires, nommés A1, A2 (et respectivement B1, B2 et C1, C2). Appelons A le système de fichiers racine. Si vous utilisiez la commande ls pour visualiser le contenu de ce répertoire, vous verriez deux sous-répertoires, A1 et A2. L'arborescence des répertoires ressemblera à ceci: / | +--- A1 | `--- A2 Un système de fichiers doit être monté dans un répertoire d'un autre système de fichiers. Supposez maintenant que vous montez le système de fichiers B sur le répertoire A1. Le répertoire racine de B remplace A1, et les répertoires de B par conséquent apparaissent: / | +--- A1 | | | +--- B1 | | | `--- B2 | `--- A2 Tout fichier de B1 ou B2 peut être atteint avec le chemin /A1/B1 ou /A1/B2 si nécessaire. Tous les fichiers qui étaient dans A1 ont été temporairement cachés. Ils réapparaîtront si B est démonté de A. Si B a été monté sur A2 alors le diagramme sera semblable à celui-ci: / | +--- A1 | `--- A2 | +--- B1 | `--- B2 et les chemins seront /A2/B1 et respectivement /A2/B2. Les systèmes de fichiers peuvent être montés au sommet d'un autre. En continuant l'exemple précédent, le système de fichiers C pourrait être monté au sommet du répertoire B1 dans le système de fichiers B, menant à cet arrangement: / | +--- A1 | `--- A2 | +--- B1 | | | +--- C1 | | | `--- C2 | `--- B2 C pourrait être monté directement sur le système de fichiers A, sous le répertoire A1: / | +--- A1 | | | +--- C1 | | | `--- C2 | `--- A2 | +--- B1 | `--- B2 Si vous êtes familier de &ms-dos;, ceci est semblable, bien que pas identique, à la commande join. Ce n'est normalement pas quelque chose qui doit vous préoccuper. Généralement vous créez des systèmes de fichiers à l'installation de FreeBSD et décidez où les monter, et ensuite ne les modifiez jamais à moins que vous ajoutiez un nouveau disque. Il est tout à fait possible de n'avoir qu'un seul grand système de fichiers racine, et de ne pas en créer d'autres. Il y a quelques inconvénients à cette approche, et un avantage. Avantages des systèmes de fichiers multiples Les différents systèmes de fichiers peuvent avoir différentes options de montage. Par exemple, avec une planification soigneuse, le système de fichiers racine peut être monté en lecture seule, rendant impossible tout effacement par inadvertance ou édition de fichier critique. La séparation des systèmes de fichiers inscriptibles par l'utilisateur permet leur montage en mode nosuid; cette option empêche les bits suid/guid des exécutables stockés sur ce système de fichiers de prendre effet, améliorant peut-être la sécurité. FreeBSD optimise automatiquement la disposition des fichiers sur un système de fichiers, selon la façon dont est utilisé le système de fichiers. Aussi un système de fichiers contenant beaucoup de petits fichiers qui sont écrits fréquemment aura une optimisation différente à celle d'un système contenant moins, ou de plus gros fichiers. En ayant un seul grand système de fichiers cette optimisation est perdue. Les systèmes de fichiers de FreeBSD sont très robustes même en cas de coupure secteur. Cependant une coupure secteur à un moment critique pourrait toujours endommager la structure d'un système de fichiers. En répartissant vos données sur des systèmes de fichiers multiples il est plus probable que le système redémarre, vous facilitant la restauration des données à partir de sauvegardes si nécessaire. Avantage d'un système de fichiers unique Les systèmes de fichiers ont une taille fixe. Si vous créez un système de fichiers à l'installation de FreeBSD et que vous lui donnez une taille spécifique, vous pouvez plus tard vous apercevoir que vous avez besoin d'une partition plus grande. Cela n'est pas facilement faisable sans sauvegardes, recréation du système de fichiers, et enfin restauration des données. FreeBSD 4.4 et suivants disposent d'une commande, &man.growfs.8;, qui permettra d'augmenter la taille d'un système de fichiers au vol, supprimant cette limitation. Les systèmes de fichiers sont contenus dans des partitions. Cela n'a pas la même signification que l'utilisation commune du terme partition (par exemple une partition &ms-dos;), en raison de l'héritage Unix de FreeBSD. Chaque partition est identifiée par une lettre de a à h. Chaque partition ne contient qu'un seul système de fichiers, cela signifie que les systèmes de fichiers sont souvent décrits soit par leur point de montage typique dans la hiérarchie du système de fichiers, soit par la lettre de la partition qui les contient. FreeBSD utilise aussi de l'espace disque pour l'espace de pagination (“swap”). L'espace de pagination fournit à FreeBSD la mémoire virtuelle. Cela permet à votre ordinateur de se comporter comme s'il disposait de beaucoup plus de mémoire qu'il n'en a réellement. Quand FreeBSD vient à manquer de mémoire il déplace certaines données qui ne sont pas actuellement utilisées vers l'espace de pagination, et les rapatrie (en déplaçant quelque chose d'autre) quand il en a besoin. Quelques partitions sont liées à certaines conventions. Partition Convention a Contient normalement le système de fichiers racine b Contient normalement l'espace de pagination c Normalement de la même taille que la tranche (“slice”) contenant les partitions. Cela permet aux utilitaires devant agir sur l'intégralité de la tranche (par exemple un analyseur de blocs défectueux) de travailler sur la partition c. Vous ne devriez normalement pas créer de système de fichiers sur cette partition. d La partition d a eu dans le passé une signification spécifique, c'est terminé maintenant. A ce jour, quelques outils peuvent fonctionner curieusement si on leur dit de travailler sur la partition d, aussi sysinstall ne créera normalement pas de partition d. Chaque partition contenant un système de fichiers est stockée dans ce que FreeBSD appelle une tranche (“slice”). Tranche - “slice” est le terme FreeBSD pour ce qui est communément appelé partition, et encore une fois, cela en raison des fondations Unix de FreeBSD. Les tranches sont numérotées, en partant de 1, jusqu'à 4. slices tranches partitions mode dédié Les numéros de tranche suivent le nom du périphérique, avec le préfixe s, et commencent à 1. Donc “da0s1” est la première tranche sur le premier disque SCSI. Il ne peut y avoir que quatre tranches physiques sur un disque, mais vous pouvez avoir des tranches logiques dans des tranches physiques d'un type précis. Ces tranches étendues sont numérotées à partir de 5, donc “ad0s5” est la première tranche étendue sur le premier disque IDE. Elles sont utilisées par des systèmes de fichiers qui s'attendent à occuper une tranche entière. Les tranches, les disques “en mode dédié”, et les autres disques contiennent des partitions, qui sont représentées par des lettres allant de a à h. Cette lettre est ajoutée au nom de périphérique, aussi “da0a” est la partition a sur le premier disque da, qui est en “en mode dédié”. “ad1s3e” est la cinquième partition de la troisième tranche du second disque IDE. En conclusion chaque disque présent sur le système est identifié. Le nom d'un disque commence par un code qui indique le type de disque, suivi d'un nombre, indiquant de quel disque il s'agit. Contrairement aux tranches, la numérotation des disques commence à 0. Les codes communs que vous risquez de rencontrer sont énumérés dans le . Quand vous faites référence à une partition, FreeBSD exige que vous nommiez également la tranche et le disque contenant la partition, et quand vous faites référence à une tranche vous devrez également faire référence au nom du disque. Faites cela en écrivant le nom du disque, s, le numéro de la tranche, et enfin la lettre de la partition. Des exemples sont donnés dans l'. L' montre un exemple de l'organisation d'un disque qui devrait aider à clarifier les choses. Afin d'installer FreeBSD vous devez tout d'abord configurer les tranches sur votre disque, ensuite créer les partitions dans la tranche que vous utiliserez pour FreeBSD, et alors créer un système de fichiers (ou espace de pagination) dans chaque partition, et décider de l'endroit où seront montés les systèmes de fichiers. Codes des périphériques disques Code Signification ad Disque ATAPI (IDE) da Disque SCSI acd CDROM ATAPI (IDE) cd CDROM SCSI fd Lecteur de disquette
Exemples d'appellation de disques, tranches et partitions Nom Signification ad0s1a Première partition (a) sur la première tranche (s1) du premier disque IDE (ad0). da1s2e Cinquième partition (e) sur la seconde tranche (s2) du deuxième disque SCSI (da1). Modèle conceptuel d'un disque Ce diagramme montre comment FreeBSD voit le premier disque IDE attaché au système. Supposons que le disque a une capacité de 4 Go, et contient deux tranches de 2 Go (partitions &ms-dos;). La première tranche contient un disque &ms-dos;, C:, et la seconde tranche contient une installation de FreeBSD. Dans cet exemple l'installation de FreeBSD a trois partitions, et une partition de pagination. Les trois partitions accueilleront chacune un système de fichiers. La partition a sera utilisée en tant que système de fichiers racine, la partition e pour le contenu du répertoire /var, et f pour l'arborescence du répertoire /usr. .-----------------. --. | | | | DOS / Windows | | : : > Première tranche, ad0s1 : : | | | | :=================: ==: --. | | | Partition a, montée en tant que / | | | > référencée ad0s2a | | | | | :-----------------: ==: | | | | Partition b, utilisée comme swap | | | > référencée ad0s2b | Partition c, | | | | pas de :-----------------: ==: | système de | | | Partition e, utilisée en /var > fichiers | | > référencée ad0s2e | intégralité | | | | de la tranche :-----------------: ==: | FreeBSD ad0s2c | | | | : : | Partition f, utilisée en /usr | : : > référencée ad0s2f | : : | | | | | | | | --' | `-----------------' --'
Monter et démonter des systèmes de fichiers Le système de fichiers peut être vu comme un arbre enraciné sur le répertoire /. /dev, /usr, et les autres répertoires dans le répertoire racine sont des branches, qui peuvent avoir leurs propres branches, comme /usr/local, et ainsi de suite. système de fichiers racine Il y a diverses raisons pour héberger certains de ces répertoires sur des systèmes de fichiers séparés. /var contient les répertoires log/, spool/, et divers types de fichiers temporaires, et en tant que tels, peuvent voir leur taille augmenter de façon importante. Remplir le système de fichiers racine n'est pas une bonne idée, aussi séparer /var de / est souvent favorable. Une autre raison courante de placer certains répertoires sur d'autres systèmes de fichiers est s'ils doivent être hébergés sur des disques physiques séparés, ou sur des disques virtuels séparés, comme les systèmes de fichiers réseau, ou les lecteurs de CDROM. Le fichier <filename>fstab</filename> systèmes de fichiers montés avec fstab Durant le processus de démarrage, les systèmes de fichiers listés dans /etc/fstab sont automatiquement montés (à moins qu'il ne soient listés avec l'option ). Le fichier /etc/fstab contient une liste de lignes au format suivant: device /mount-point fstype options dumpfreq passno device Un nom de périphérique (qui devrait exister), comme expliqué dans la . mount-point Un répertoire (qui devrait exister), sur lequel sera monté le système de fichier. fstype Le type de système de fichiers à indiquer à &man.mount.8;. Le système de fichiers par défaut de FreeBSD est l'ufs. options Soit pour des systèmes de fichiers à lecture-écriture, soit pour des systèmes de fichiers à lecture seule, suivi par toute option qui peut s'avérer nécessaire. Une option courante est pour les systèmes de fichiers qui ne sont normalement pas montés durant la séquence de démarrage. D'autres options sont présentées dans la page de manuel &man.mount.8;. dumpfreq C'est utilisé par &man.dump.8; pour déterminer quels systèmes de fichiers nécessitent une sauvegarde. Si ce champ est absent, une valeur de zéro est supposée. passno Ceci détermine l'ordre dans lequel les systèmes de fichiers devront être vérifiés. Les systèmes de fichiers qui doivent être ignorés devraient avoir leur passno positionné à zéro. Le système de fichiers racine (qui doit être vérifié avant tout le reste) devrait avoir son passno positionné à un, et les options passno des autres systèmes fichiers devraient être positionnées à des valeurs supérieures à un. Si plus d'un système de fichiers ont le même passno alors &man.fsck.8; essaiera de vérifier les systèmes de fichiers en parallèle si c'est possible. Consultez la page de manuel de &man.fstab.5; pour plus d'information sur le format du fichier /etc/fstab et des options qu'il contient. La commande <command>mount</command> systèmes de fichiers montage La commande &man.mount.8; est ce qui est finalement utilisé pour monter des systèmes de fichiers. Dans sa forme la plus simple, vous utilisez: &prompt.root; mount device mountpoint Il y beaucoup d'options, comme mentionné dans la page de manuel &man.mount.8;, mais les plus courantes sont: Options de montage Monte tous les systèmes de fichiers listés dans /etc/fstab. Exception faite de ceux marqués comme “noauto”, ou exclus par le drapeau , ou encore ceux qui sont déjà montés. Tout effectuer à l'exception de l'appel système de montage réel. Cette option est utile conjointement avec le drapeau pour déterminer ce que &man.mount.8; est en train d'essayer de faire. Force le montage d'un système de fichiers non propre (dangereux), ou force la révocation de l'accès en écriture quand on modifie l'état de montage d'un système de fichiers de l'accès lecture-écriture à l'accès lecture seule. Monte le système de fichiers en lecture seule. C'est identique à l'utilisation de l'argument ( pour les versions de &os; antérieures à la 5.2) avec l'option . fstype Monte le système de fichiers comme étant du type de système donné, ou monte seulement les systèmes de fichiers du type donné, si l'option est précisée. “ufs” est le type de système de fichiers par défaut. Mets à jour les options de montage sur le système de fichiers. Rends la commande prolixe. Monte le système de fichiers en lecture-écriture. L'option accepte une liste d'options séparées par des virgules, dont les suivantes: nodev Ne pas prendre en compte les périphériques spéciaux sur le système de fichiers. C'est une option de sécurité utile. noexec Ne pas autoriser l'exécution de binaires sur ce système de fichiers. C'est également une option de sécurité utile. nosuid Ne pas prendre en compte les indicateurs setuid ou setgid sur le système de fichiers. C'est également une option de sécurité utile. La commande <command>umount</command> systèmes de fichiers démontage La commande &man.umount.8; prend, comme paramètre, un des points de montage, un nom de périphérique, ou l'option ou . Toutes les formes acceptent pour forcer de démontage, et pour le mode prolixe. Soyez averti que l'utilisation de n'est généralement pas une bonne idée. Démonter de force des systèmes de fichiers pourrait faire planter l'ordinateur ou endommager les données sur le système de fichiers. Les options et sont utilisées pour démonter tous les systèmes de fichiers actuellement montés, éventuellement modifié par les types de systèmes de fichiers listés après l'option . Cependant l'option , n'essaye pas de démonter le système de fichiers racine. Processus FreeBSD est un système d'exploitation multi-tâches. Cela veut dire qu'il semble qu'il y ait plus d'un programme fonctionnant à la fois. Tout programme fonctionnant à un moment donné est appelé un processus. Chaque commande que vous utiliserez lancera au moins un nouveau processus, et il y a de nombreux processus système qui tournent constamment, maintenant ainsi les fonctionnalités du système. Chaque processus est identifié de façon unique par un nombre appelé process ID (identifiant de processus), ou PID, et, comme pour les fichiers, chaque processus possède également un propriétaire et un groupe. Les informations sur le propriétaire et le groupe sont utilisées pour déterminer quels fichiers et périphériques sont accessibles au processus, en utilisant le principe de permissions de fichiers abordé plus tôt. La plupart des processus ont également un processus parent. Le processus parent est le processus qui les a lancés. Par exemple, si vous tapez des commandes sous un interpréteur de commandes, alors l'interpréteur de commandes est un processus, et toute commande que vous lancez est aussi un processus. Chaque processus que vous lancez de cette manière aura votre interpréteur de commandes comme processus parent. Une exception à cela est le processus spécial appelé &man.init.8;. init est toujours le premier processus, donc son PID est toujours 1. init est lancé automatiquement par le noyau au démarrage de FreeBSD. Deux commandes sont particulièrement utiles pour voir les processus sur le système, &man.ps.1; et &man.top.1;. La commande ps est utilisée pour afficher une liste statique des processus tournant actuellement, et peut donner leur PID, la quantité de mémoire qu'ils utilisent, la ligne de commande par l'intermédiaire de laquelle ils ont été lancés, et ainsi de suite. La commande &man.top.1; affiche tous les processus, et actualise l'affichage régulièrement, de sorte que vous puissiez voir de façon intéractive ce que fait l'ordinateur. Par défaut, &man.ps.1; n'affiche que les commandes que vous faites tourner et dont vous êtes le propriétaire. Par exemple: &prompt.user; ps PID TT STAT TIME COMMAND 298 p0 Ss 0:01.10 tcsh 7078 p0 S 2:40.88 xemacs mdoc.xsl (xemacs-21.1.14) 37393 p0 I 0:03.11 xemacs freebsd.dsl (xemacs-21.1.14) 48630 p0 S 2:50.89 /usr/local/lib/netscape-linux/navigator-linux-4.77.bi 48730 p0 IW 0:00.00 (dns helper) (navigator-linux-) 72210 p0 R+ 0:00.00 ps 390 p1 Is 0:01.14 tcsh 7059 p2 Is+ 1:36.18 /usr/local/bin/mutt -y 6688 p3 IWs 0:00.00 tcsh 10735 p4 IWs 0:00.00 tcsh 20256 p5 IWs 0:00.00 tcsh 262 v0 IWs 0:00.00 -tcsh (tcsh) 270 v0 IW+ 0:00.00 /bin/sh /usr/X11R6/bin/startx -- -bpp 16 280 v0 IW+ 0:00.00 xinit /home/nik/.xinitrc -- -bpp 16 284 v0 IW 0:00.00 /bin/sh /home/nik/.xinitrc 285 v0 S 0:38.45 /usr/X11R6/bin/sawfish Comme vous pouvez le voir dans cet exemple, la sortie de &man.ps.1; est organisée en un certain nombre de colonnes. PID est l'identifiant de processus discuté plus tôt. Les PIDs sont assignés à partir de 1, et vont jusqu'à 99999, et puis repassent à 1 quand le maximum est atteint. La colonne TT donne le terminal sur lequel tourne le programme, et peut être pour le moment ignoré sans risque. STAT affiche l'état du programme, peut être également ignoré. TIME est la durée d'utilisation du CPU—ce n'est généralement pas le temps écoulé depuis que vous avez lancé le programme, comme la plupart des programmes passent beaucoup de temps à attendre que certaines choses se produisent avant qu'ils n'aient besoin de dépenser du temps CPU. Et enfin, COMMAND est la ligne de commande qui a été utilisée lors du lancement du programme. &man.ps.1; supporte un certain nombre d'options différentes pour modifier les informations affichées. Un des ensembles d'options les plus utiles est auxww. affiche l'information au sujet de tous les processus tournant, et pas seulement les vôtres. donne le nom de l'utilisateur du propriétaire du processus, ainsi que l'utilisation de la mémoire. affiche des informations sur les processus “daemon”, et oblige &man.ps.1; à afficher la ligne de commande complète, plutôt que de la tronquer quand elle est trop longue pour tenir à l'écran. La sortie de &man.top.1; est semblable. Un extrait de session ressemble à ceci: &prompt.user; top last pid: 72257; load averages: 0.13, 0.09, 0.03 up 0+13:38:33 22:39:10 47 processes: 1 running, 46 sleeping CPU states: 12.6% user, 0.0% nice, 7.8% system, 0.0% interrupt, 79.7% idle Mem: 36M Active, 5256K Inact, 13M Wired, 6312K Cache, 15M Buf, 408K Free Swap: 256M Total, 38M Used, 217M Free, 15% Inuse PID USERNAME PRI NICE SIZE RES STATE TIME WCPU CPU COMMAND 72257 nik 28 0 1960K 1044K RUN 0:00 14.86% 1.42% top 7078 nik 2 0 15280K 10960K select 2:54 0.88% 0.88% xemacs-21.1.14 281 nik 2 0 18636K 7112K select 5:36 0.73% 0.73% XF86_SVGA 296 nik 2 0 3240K 1644K select 0:12 0.05% 0.05% xterm 48630 nik 2 0 29816K 9148K select 3:18 0.00% 0.00% navigator-linu 175 root 2 0 924K 252K select 1:41 0.00% 0.00% syslogd 7059 nik 2 0 7260K 4644K poll 1:38 0.00% 0.00% mutt ... La sortie est divisée en deux sections. L'entête (les cinq premières lignes) donne le PID du dernier processus lancé, la charge système moyenne (qui est une mesure de l'occupation du système), la durée de fonctionnement du système (le temps écoulé depuis le dernier redémarrage), et l'heure actuelle. Les autres éléments de l'entête concernent le nombre de processus en fonctionnement (47 dans notre cas), combien d'espace mémoire et d'espace de pagination sont occupés, et combien de temps le système passe dans les différents états du CPU. En dessous il y a une série de colonnes contenant des informations semblables à celles données par &man.ps.1;. Comme précédemment vous pouvez lire le PID, le nom d'utilisateur, la quantité de temps CPU consommée, et la commande qui a été lancée. &man.top.1; vous affiche par défaut la quantité d'espace mémoire utilisée par chaque processus. Cela est divisé en deux colonnes, une pour la quantité totale, et une autre pour la quantité résidente—la quantité totale représente l'espace mémoire dont a eu besoin l'application, et la quantité résidente représente l'espace qui est en fait utilisé actuellement. Dans cet exemple vous pouvez voir que &netscape; a exigé presque 30 Mo de RAM, mais utilise actuellement seulement 9Mo. &man.top.1; actualise l'affichage toutes les deux secondes; cela peut être modifié avec l'option . Daemons, signaux, et comment tuer un processus Quand vous utilisez un éditeur il est facile de le contrôler, de lui dire de charger des fichiers, et ainsi de suite. Vous pouvez faire cela parce que l'éditeur fournit les possibilités de le faire, et parce qu'un éditeur est attaché à un terminal. Certains programmes ne sont pas conçus pour fonctionner avec un dialogue constant avec l'utilisateur, et donc ils se déconnectent du terminal à la première occasion. Par exemple, un serveur web passe son temps à répondre aux requêtes web, il n'attend normalement pas d'entrée de votre part. Les programmes qui transportent le courrier électronique de site en site sont un autre exemple de cette classe d'application. Nous appelons ces programmes des daemons (démons). Les “daemons” étaient des personnages de la mythologie Grec; ni bon ni mauvais, c'étaient de petits esprits serviteurs qui, généralement, ont été à l'origine de choses utiles à l'humanité. Un peu comme les serveurs web ou de courrier d'aujourd'hui nous sont utiles. C'est pourquoi la mascotte BSD a été, pendant longtemps, un démon à l'apparence joyeuse portant des chaussures de tennis et une fourche. Il existe une convention pour nommer les programmes qui fonctionnent normalement en tant que daemons qui est d'utiliser une terminaison en “d”. BIND est le “Berkeley Internet Name Daemon” (et le programme réel qui est exécuté s'appelle named), le programme correspondant au serveur web Apache est appelé httpd, le daemon de gestion de la file d'attente de l'imprimante est lpd, et ainsi de suite. C'est une convention, mais pas une obligation pure et simple; par exemple le daemon principal de gestion du courrier électronique pour l'application Sendmail est appelé sendmail, et non pas maild, comme vous pourriez l'imaginer. Parfois vous devrez communiquer avec un processus daemon. Ces communications sont appelées signaux, et vous pouvez communiquez avec un daemon (ou avec tout processus en fonctionnement) en lui envoyant un signal. Il existe un certain nombre de signaux différents que vous pouvez envoyer—certains d'entre eux ont une signification précise, d'autres sont interprétés par l'application, et la documentation de l'application vous indiquera comment l'application interprète ces signaux. Vous ne pouvez envoyer de signaux qu'aux processus dont vous êtes le propriétaire. Si vous envoyez un signal à un processus appartenant à quelqu'un d'autre avec &man.kill.1; ou &man.kill.2; vous obtiendrez un refus de permission. Il existe une exception à cela: l'utilisateur root, qui peut envoyer des signaux aux processus de chacun. Dans certain cas FreeBSD enverra également aux applications des signaux. Si une application est mal écrite, et tente d'accéder à une partie de mémoire à laquelle elle n'est pas supposée avoir accès, FreeBSD envoie au processus le signal de violation de segmentation (SIGSEGV). Si une application a utilisé l'appel système &man.alarm.3; pour être avertie dès qu'une période de temps précise est écoulée alors lui sera envoyé le signal d'alarme (SIGALRM), et ainsi de suite. Deux signaux peuvent être utilisés pour arrêter un processus, SIGTERM et SIGKILL. SIGTERM est la manière polie de tuer un processus; le processus peut attraper le signal, réaliser que vous désirez qu'il se termine, fermer les fichiers de trace qu'il a peut-être ouvert, et généralement finir ce qu'il était en train de faire juste avant la demande d'arrêt. Dans certains cas un processus peut ignorer un SIGTERM s'il est au milieu d'une tâche qui ne peut être interrompue. SIGKILL ne peut être ignoré par un processus. C'est le signal “Je me fiche de ce que vous faites, arrêtez immédiatement”. Si vous envoyez un SIGKILL à un processus alors FreeBSD stoppera le processus Ce n'est pas tout à fait vrai—il y a quelques cas où les choses ne peuvent être interrompues. Par exemple, si le processus est en train d'essayer de lire un fichier qui est sur un autre ordinateur sur le réseau, et que l'autre ordinateur n'est plus accessible pour quelque raison (a été éteint, ou le réseau a un problème), alors le processus est dit “non interruptible”. Par la suite le processus entrera en pause, typiquement après deux minutes. Dès que cette pause sera effective le processus sera tué. . Les autres signaux que vous pourriez avoir envie d'utiliser sont SIGHUP, SIGUSR1, et SIGUSR2. Ce sont des signaux d'usage général, et différentes applications se comporteront différemment quand ils sont envoyés. Supposez que vous avez modifié le fichier de configuration de votre serveur web—vous voudriez dire à votre serveur web de relire son fichier de configuration. Vous pourriez arrêter et relancer httpd, mais il en résulterait une brève période d'indisponibilité de votre serveur web, ce qui peut être indésirable. La plupart des daemons sont écrits pour répondre au signal SIGHUP en relisant leur fichier de configuration. Donc au lieu de tuer et relancer httpd vous lui enverriez le signal SIGHUP. Parce qu'il n'y a pas de manière standard de répondre à ces signaux, différents daemons auront différents comportements, soyez sûr de ce que vous faites et lisez la documentation du daemon en question. Les signaux sont envoyés en utilisant la commande &man.kill.1;, comme cet exemple le montre: Envoyer un signal à un processus Cet exemple montre comment envoyer un signal à &man.inetd.8;. Le fichier de configuration d'inetd est /etc/inetd.conf, et inetd relira ce fichier de configuration quand un signal SIGHUP est envoyé. Trouvez l'identifiant du processus (PID) auquel vous voulez envoyer le signal. Faites-le en employant &man.ps.1; et &man.grep.1;. La commande &man.grep.1; est utilisée pour rechercher dans le résultat la chaîne de caractères que vous spécifiez. Cette commande est lancée en tant qu'utilisateur normal, et &man.inetd.8; est lancé en tant que root, donc les options doivent être passées à &man.ps.1;. &prompt.user; ps -ax | grep inetd 198 ?? IWs 0:00.00 inetd -wW Donc le PID d'&man.inetd.8; est 198. Dans certains cas la commande grep inetd pourrait aussi apparaître dans le résultat. C'est à cause de la façon dont &man.ps.1; recherche la liste des processus en fonctionnement. Utilisez &man.kill.1; pour envoyer le signal. Etant donné qu'&man.inetd.8; tourne sous les droits de l'utilisateur root vous devez utilisez &man.su.1; pour devenir, en premier lieu, root. &prompt.user; su Password: &prompt.root; /bin/kill -s HUP 198 Comme la plupart des commandes &unix;, &man.kill.1; n'affichera rien si la commande est couronnée de succès. Si vous envoyez un signal à un processus dont vous n'êtes pas le propriétaire alors vous verrez kill: PID: Operation not permitted. Si vous avez fait une erreur dans le PID, vous enverrez le signal soit à un mauvais processus, ce qui peut être mauvais, soit, si vous êtes chanceux, vous enverrez le signal à un PID qui n'est pas actuellement utilisé, et vous verrez kill: PID: No such process. Pourquoi utiliser <command>/bin/kill</command>? De nombreux interpréteurs de commandes fournissent la commande kill comme commande interne; c'est à dire, que l'interpréteur de commandes enverra directement le signal, plutôt que de lancer /bin/kill. Cela peut être utile, cependant les différents interpréteurs ont une syntaxe différente pour spécifier le nom du signal à envoyer. Plutôt que de tenter de les apprendre toutes, il peut être plus simple de juste employer directement la commande /bin/kill .... Envoyer d'autres signaux est très semblable, substituez juste TERM ou KILL dans la ligne de commande si nécessaire. Tuer au hasard des processus sur le système peut être une mauvaise idée. En particulier, &man.init.8;, processus à l'identifiant 1, qui est très particulier. Lancer la commande /bin/kill -s KILL 1 est une manière rapide d'arrêter votre système. Vérifiez toujours à deux fois les arguments que vous utilisez avec &man.kill.1; avant d'appuyer sur Entrée. Interpréteurs de commandes - “Shells” interpréteurs de commandes ligne de commande Sous FreeBSD, beaucoup du travail quotidien est effectué sous une interface en ligne de commande appelée interpréteur de commandes ou “shell”. Le rôle principal d'un interpréteur de commandes est de prendre les commandes sur le canal d'entrée et de les exécuter. Beaucoup d'interpréteurs de commandes ont également des fonctions intégrées pour aider dans les tâches quotidiennes comme la gestion de fichiers, le mécanisme de remplacement et d'expansion des jokers (“file globbing”), l'édition de la ligne de commande, les macros commandes, et les variables d'environnement. FreeBSD est fournit avec un ensemble d'interpréteurs de commandes, comme sh, l'interpréteur de commandes Bourne, et tcsh, l'interpréteur de commandes C-shell amélioré. Beaucoup d'autres interpréteurs de commandes sont disponibles dans le catalogue des logiciels portés, comme zsh et bash. Quel interpréteur de commandes utilisez-vous? C'est vraiment une question de goût. Si vous programmez en C vous pourriez vous sentir plus à l'aise avec un interpréteur de commandes proche du C comme tcsh. Si vous venez du monde Linux ou que vous êtes nouveau à l'interface en ligne de commande d'&unix; vous pourriez essayer bash. L'idée principale est que chaque interpréteur de commandes à des caractéristiques uniques qui peuvent ou ne peuvent pas fonctionner avec votre environnement de travail préféré, et que vous avez vraiment le choix de l'interpréteur de commandes à utiliser. Une des caractéristiques communes des interpréteurs de commandes est de pouvoir compléter les noms de fichiers (“filename completion”). En tapant les premières lettres d'une commande ou d'un fichier, vous pouvez habituellement faire compléter automatiquement par l'interpréteur de commandes le reste de la commande ou du nom du fichier en appuyant sur la touche Tab du clavier. Voici un exemple. Supposez que vous avez deux fichiers appelés respectivement foobar et foo.bar. Vous voulez effacer foo.bar. Donc ce que vous devriez taper sur le clavier est: rm fo[Tab].[Tab]. L'interpréteur de commandes devrait afficher rm foo[BEEP].bar. Le [BEEP] est la sonnerie de la console, c'est l'interpréteur de commande indiquant qu'il n'est pas en mesure de compléter totalement le nom du fichier parce qu'il y a plus d'une possibilité. foobar et foo.bar commencent tous les deux par fo, mais il fut capable de compléter jusqu'à foo. Si vous tapez ., puis appuyez à nouveau sur Tab, l'interpréteur de commandes devrait pouvoir compléter le reste du nom du fichier pour vous. variables d'environnement Une autre caractéristique de l'interpréteur de commandes est l'utilisation de variables d'environnement. Les variables d'environnement sont une paire variable-valeur stockées dans l'espace mémoire d'environnement de l'interpréteur de commandes. Cet espace peut être lu par n'importe quel programme invoqué par l'interpréteur de commandes, et contient ainsi beaucoup d'éléments de configuration des programmes. Voici une liste des variables d'environnement habituelles et ce qu'elles signifient: variables d'environnement Variable Description USER Le nom d'utilisateur de la personne actuellement attachée au système. PATH La liste des répertoires, séparés par deux points, pour la recherche des programmes. DISPLAY Le nom réseau de l'affichage X11 auquel on peut se connecter, si disponible. SHELL Le nom de l'interpréteur de commandes actuellement utilisé. TERM Le nom du terminal de l'utilisateur. Utilisé pour déterminer les capacités du terminal. TERMCAP L'entrée de la base de données des codes d'échappement pour permettre l'exécution de diverses fonctions du terminal. OSTYPE Type du système d'exploitation, e.g. FreeBSD. MACHTYPE L'architecture du CPU sur lequel tourne actuellement le système. EDITOR L'éditeur de texte préferé de l'utilisateur. PAGER Le visualisateur de page de texte préferré de l'utilisateur. MANPATH La liste des répertoires, séparés par deux points, pour la recherche des pages de manuel. Bourne shells Fixer une variable d'environnement diffère légèrement d'un interpréteur de commandes à l'autre. Par exemple, dans le style de l'interpréteur de commandes de type C-shell comme tcsh et csh, vous utiliseriez setenv pour fixer le contenu d'une variable d'environnement. Sous les interpréteurs de commandes Bourne comme sh et bash, vous utiliseriez export pour configurer vos variables d'environnement. Par exemple, pour fixer ou modifier la variable d'environnement EDITOR, sous csh ou tcsh une commande comme la suivante fixera EDITOR à /usr/local/bin/emacs: &prompt.user; setenv EDITOR /usr/local/bin/emacs Sous les interpréteurs de commandes Bourne: &prompt.user; export EDITOR="/usr/local/bin/emacs" Vous pouvez faire afficher à la plupart des interpréteurs de commandes la variable d'environnement en plaçant un caractère $ juste devant son nom sur la ligne de commande. Par exemple, echo $TERM affichera le contenu de $TERM, car l'interpréteur de commande complète $TERM et passe la main à echo. Les interpréteurs de commandes traitent beaucoup de caractères spéciaux, appelés métacaractères, en tant que représentation particulière des données. Le plus commun est le caractère *, qui représente zéro ou plusieurs caractères dans le nom du fichier. Ces métacaractères spéciaux peuvent être utilisés pour compléter automatiquement le nom des fichiers. Par exemple, taper echo * est presque la même chose que taper ls parce que l'interpréteur de commandes prendra tous les fichiers qui correspondent à * et les passera à echo pour les afficher. Pour éviter que l'interpréteur de commande n'interprète les caractères spéciaux, ils peuvent être neutralisés en ajoutant un caractère antislash (\) devant. echo $TERM affichera votre type de terminal. echo \$TERM affichera $TERM tel quel. Changer d'interpréteur de commandes La méthode la plus simple pour changer votre interpréteur de commandes est d'utiliser la commande chsh. En lançant chsh vous arriverez dans l'éditeur correspondant à votre variable d'environnement EDITOR; si elle n'est pas fixée, cela sera vi. Modifiez la ligne “Shell:” en conséquence. Vous pouvez également passer le paramètre à chsh; cela modifiera votre interpréteur de commandes sans avoir à utiliser un éditeur. Par exemple, si vous vouliez changer votre interpréteur de commandes pour bash, ce qui suit devrait faire l'affaire: &prompt.user; chsh -s /usr/local/bin/bash L'interpréteur de commandes que vous désirez utiliser doit être présent dans le fichier /etc/shells. Si vous avez installé l'interpréteur de commandes à partir du catalogue des logiciels portés, alors cela a dû déjà être fait pour vous. Si vous avez installé à la main l'interpréteur de commandes, vous devez alors le faire. Par exemple, si vous avez installé bash à la main et l'avez placé dans /usr/local/bin, vous devrez faire: &prompt.root; echo "/usr/local/bin/bash" >> /etc/shells Puis relancer chsh. Editeurs de texte éditeurs de texte éditeurs Beaucoup de configurations sous FreeBSD sont faites en éditant des fichiers textes. Aussi ce serait une bonne idée de se familiariser avec un éditeur de texte. FreeBSD est fourni avec quelques-uns en tant qu'éléments de système de base, et beaucoup d'autres sont disponibles dans le catalogue des logiciels portés. éditeurs ee L'éditeur de plus facile et le plus simple à apprendre est un éditeur appelé ee, qui signifie l'éditeur facile (easy editor). Pour lancer ee, on taperait sur la ligne de commande ee fichierfichier est le nom du fichier qui doit être édité. Par exemple, pour éditer /etc/rc.conf, tapez ee /etc/rc.conf. Une fois sous ee, toutes les commandes pour utiliser les fonctions de l'éditeur sont affichées en haut de l'écran. Le caractère ^ représente la touche Ctrl sur le clavier, donc ^e représente la combinaison de touches Ctrle. Pour quitter ee, appuyez sur la touche Echap, ensuite choisissez “leave editor”. L'éditeur vous demandera s'il doit sauver les changements si le fichier a été modifié. vi éditeurs vi emacs éditeurs emacs FreeBSD est également fourni avec des éditeurs de texte plus puissants comme vi en tant qu'élément du système de base, alors que d'autres éditeurs, comme Emacs et vim, en tant qu'élément du catalogue des logiciels portés de FreeBSD (editors/emacs et editors/vim). Ces éditeurs offrent beaucoup plus de fonctionnalités et de puissance aux dépens d'être un peu plus compliqués à apprendre. Cependant si vous projetez de faire beaucoup d'édition de texte, l'étude d'un éditeur plus puissant comme vim ou Emacs vous permettra d'économiser beaucoup plus de temps à la longue. Périphériques et fichiers spéciaux de périphérique Un périphérique est un terme utilisé la plupart du temps pour les activités en rapport avec le matériel présent sur le système, incluant les disques, les imprimantes, les cartes graphiques, et les claviers. Quand FreeBSD démarre, la majorité de ce qu'affiche FreeBSD est la détection des périphériques. Vous pouvez à nouveau consulter les messages de démarrage en visualisant le fichier /var/run/dmesg.boot. Par exemple, acd0 est le premier lecteur de CDROM IDE, tandis que kbd0 représente le clavier. La plupart de ces périphériques sous un système d'exploitation &unix; peuvent être accédés par l'intermédiaire de fichiers appelés fichiers spéciaux de périphérique (“device node”), qui sont situés dans le répertoire /dev. Créer des fichiers spéciaux de périphérique Quand vous ajoutez un nouveau périphérique à votre système, ou compilez le support pour des périphériques supplémentaires, vous aurez peut être besoin de créer un ou plusieurs fichiers spéciaux de périphérique pour les nouveaux périphériques. MAKEDEV Script Sur les systèmes sans DEVFS (cela concerne toutes les versions de FreeBSD antérieures à la 5.0), les fichiers spéciaux de périphérique doivent être créés à l'aide de la procédure &man.MAKEDEV.8; comme montré ci-dessous: &prompt.root; cd /dev &prompt.root; sh MAKEDEV ad1 Cet exemple devrait créer les fichiers spéciaux de périphérique corrects pour le second disque IDE quand il est installé. <literal>DEVFS</literal> (“DEVice File System” - Système de fichiers de périphérique) Le système de fichiers de périphérique, ou DEVFS, fournit un accès à l'espace nom des périphériques du noyau dans l'espace nom du système de fichiers global. Au lieu d'avoir à créer et modifier les fichiers spéciaux de périphérique, DEVFS maintient ce système de fichiers particulier pour vous. Voir la page de manuel de &man.devfs.5; pour plus d'information. DEVFS est utilisé par défaut sous FreeBSD 5.0 et suivantes Le format des fichiers binaires Afin de comprendre pourquoi &os; utilise le format &man.elf.5;, vous devez d'abord connaître quelques détails concernant les trois formats “dominants” d'exécutables actuellement en vigueur sous &unix;: &man.a.out.5; Le plus vieux et le format objet “classique” d'&unix;. Il utilise une entête courte et compacte avec un nombre magique au début qui est souvent utilisé pour caractériser le format (voir la page de manuel &man.a.out.5; pour plus de détails). Il contient trois segments chargés: .text, .data, et .bss plus une table de symboles et une table de chaînes de caractères. COFF Le format objet SVR3. L'entête comprend une table de section, de telle sorte que vous avez plus de sections qu'uniquement .text, .data et .bss. &man.elf.5; Le successeur de COFF, qui permet des sections multiples et des valeurs possibles de 32 bits et 64 bits. Un inconvénient majeur: ELF a aussi été conçu en supposant qu'il y aurait qu'un seul ABI par architecture système. Cette hypothèse est en fait assez incorrecte, et même dans le monde SYSV (qui a au moins trois ABIs: SVR4, Solaris, SCO) cela ne se vérifie pas. &os; essaye de contourner ce problème en fournissant un utilitaire pour marquer un exécutable connu ELF avec des informations sur l'ABI qui va avec. Consultez la page de manuel de &man.brandelf.1; pour plus d'informations. &os; vient du camp “classique” et a utilisé le format &man.a.out.5;, une technologie employée et éprouvée à travers des générations de BSDs, jusqu'aux débuts de la branche 3.X. Bien qu'il fut possible de compiler et d'exécuter des binaires natifs ELF (et - noyaux) sous &os; avant cela, &os; a initiallement + noyaux) sous &os; avant cela, &os; a initialement résisté à la “pression” de passer à ELF comme format par défaut. Pourquoi? Bien, quand le camp Linux ont fait leur pénible transition vers ELF, ce n'est pas tant fuir le format a.out qui rendait difficile la construction de bibliothèques partagée pour les développeurs mais le mécanisme de bibliothèques partagées basé sur des tables de sauts inflexible. Puisque les outils ELF disponibles offraient une solution au problème des bibliothèques partagées et étaient perçus comme “le chemin à suivre” de toute façon, le coût de la migration a été accepté comme nécessaire, et la transition a été réalisée. Le mécanisme &os; de bibliothèques partagées se rapproche plus du style de mécanisme de bibliothèques partagées de &sunos; de Sun, et est très simple à utiliser. Pourquoi existe-t-il tant de formats différents? Dans un obscure et lointain passé, il y avait du matériel simple. Ce matériel simple supportait un simple petit système. a.out était complètement adapté pour - réprésenter les binaires sur ce système simple + représenter les binaires sur ce système simple (un PDP-11). Au fur et à mesure que des personnes portaient &unix; à partir de ce système simple, ils ont maintenus le format a.out parce qu'il était suffisant pour les premiers portages d'&unix; sur des architectures comme le Motorola 68k, les VAX, etc. Alors un certain ingénieur matériel brillant a décidé qu'il pourrait forcer le matériel à faire des choses bizarre, l'autorisant ainsi à réduire le nombre de portes logiques et permettant au coeur du CPU de fonctionner plus rapidement. Bien qu'on l'a fait fonctionner avec ce nouveau type de matériel (connu de nos jour sous le nom de RISC), a.out n'était pas adapté à ce matériel, aussi beaucoup de formats ont été développés pour obtenir de meilleures performances de ce matériel que ce que pouvait offrir le simple et limité format qu'était a.out. Des choses comme COFF, ECOFF, et quelques autres obscures formats ont été inventé et leur limites explorées avant que les choses ne se fixent sur ELF. En outre, les tailles des programmes devenaient énormes alors que les disques (et la mémoire - physique) étaient toujours relativment + physique) étaient toujours relativement petits, aussi le concept de bibliothèque partagée est né. Le système de VM (mémoire virtuelle) est également devenu plus sophistiqué. Tandis que chacune de ces avancées était faites en utilisant le format a.out, son utilité a été élargie de plus en plus avec chaque nouvelle fonction. De plus les gens ont voulu charger dynamiquement des choses à - l'exécution, ou se débarasser de partie de + l'exécution, ou se débarrasser de partie de leur programme après l'initialisation pour économiser de l'espace mémoire et de pagination. Les langages sont devenus plus sophistiqués et les gens ont voulu du code appelé automatiquement avant la partie principale du programme. Beaucoup de modifications ont été apportées au format a.out pour rendre possible toutes ces choses, et cela a fonctionné pendant un certain temps. Avec le temps, a.out n'était plus capable de gérer tous ces problèmes sans une augmentation toujours croissante du code et de sa complexité. Tandis ELF résolvait plusieurs de ces problèmes, il aurait été pénible de quitter un système qui a fonctionné. Ainsi ELF a dû attendre jusqu'au moment où il était plus pénible de rester avec a.out que d'émigrer vers ELF. Cependant, avec le temps, les outils de compilation desquels ceux de &os; sont dérivés (l'assembleur et le chargeur tout spécialement) ont évolué en parallèle. Les développeurs &os; ajoutèrent les bibliothèques partagées et corrigèrent quelques bogues. Les gens de chez GNU qui ont à - l'origine écrit ces programmes, les récrivèrent + l'origine écrit ces programmes, les récrivirent et ajoutèrent un support plus simple pour la compilation multi-plateformes, avec différents formats à volonté, et ainsi de suite. Lorsque beaucoup de personnes ont voulu élaborer des compilateurs multi-plateformes pour &os;, elles n'eurent pas beaucoup de chance puisque les anciennes sources que &os; avait pour as et ld n'étaient pas adaptées à cette tâche. Le nouvel ensemble d'outils de GNU (binutils) supporte la compilation multi-plateformes, ELF, les bibliothèques partagées, les extensions C++, etc. De plus, de nombreux vendeurs de logiciels fournissent des binaires ELF, et c'est une bonne chose pour permettre leur exécution sous &os;. ELF est plus expressif qu'a.out et permet plus d'extensibilité dans le système de base. Les outils ELF sont mieux maintenus, et offrent un support pour la compilation multi-plateformes, ce qui est important pour de nombreuses personnes. ELF peut être légèrement plus lent qu'a.out, mais tenter de mesurer cette différence n'est pas aisé. Il y a également de nombreux détails qui diffèrent entre les deux dans la façon dont ils mappent les pages mémoire, gère le code d'initialisation, etc. Dans le futur, le support a.out sera retiré du noyau GENERIC, et par la suite retiré des sources du noyau une fois que le besoin d'exécuter d'anciens programmes a.out aura disparu. Pour plus d'information Les pages de manuel pages de manuel La documentation la plus complète sur FreeBSD est sous la forme de pages de manuel. Presque chaque programme sur le système est fournit avec un court manuel de référence expliquant l'utilisation de base et les diverses options. Ces manuels peuvent être visualisés avec la commande man. L'utilisation de la commande man est simple: &prompt.user; man command command est le nom de la commande à propos de laquelle vous désirez en savoir plus. Par exemple, pour en savoir plus au sujet de la commande ls tapez: &prompt.user; man ls Les manuels en ligne sont divisés en sections numérotées: Commandes utilisateur. Appels système et numéros d'erreur. Fonctions des bibliothèques C. Pilotes de périphérique. Formats de fichier. Jeux et autres divertissements. Information diverse. Commandes de maintenance et d'utilisation du système. Information de développement du noyau. Dans certains cas, le même sujet peut apparaître dans plus d'une section du manuel en ligne. Par exemple, il existe une commande utilisateur chmod et un appel système chmod(). Dans ce cas, vous pouvez préciser à la commande man laquelle vous désirez en spécifiant la section: &prompt.user; man 1 chmod Cela affichera la page de manuel de la commande utilisateur chmod. Les références à une section particulière du manuel en ligne sont traditionnellement placées entre parenthèses, ainsi &man.chmod.1; se rapporte à la commande utilisateur chmod et &man.chmod.2; se rapporte à l'appel système. C'est parfait si vous connaissez le nom de la commande et vous souhaitez simplement savoir comment l'utiliser, mais qu'en est-il si vous ne pouvez pas vous rappelez du nom de la commande? Vous pouvez utiliser man pour rechercher des mots-clés dans les descriptions de commandes en employant l'option : &prompt.user; man -k mail Avec cette commande on vous affichera la liste des commandes qui ont le mot-clé “mail” dans leurs descriptions. C'est en fait équivalent à l'utilisation de la commande apropos. Ainsi, vous regardez toutes ces commandes fantaisistes contenues dans /usr/bin mais vous n'avez pas la moindre idée de ce quelles font vraiment? Faites simplement: &prompt.user; cd /usr/bin &prompt.user; man -f * ou &prompt.user; cd /usr/bin &prompt.user; whatis * ce qui fait la même chose. Fichiers GNU Info Free Software Foundation Fondation pour le Logiciel Libre FreeBSD inclut beaucoup d'applications et d'utilitaires produit par la Fondation pour le Logiciel Libre ( Free Software Foundation). En plus des pages de manuel, ces programmes sont fournis avec des documents hypertexte appelés fichiers info qui peuvent être lus avec la commande info ou, si vous avez installé emacs, dans le mode info d'emacs. Pour utiliser la commande &man.info.1;, tapez simplement: &prompt.user; info Pour une brève introduction, tapez h. Pour une référence rapide sur la commande, tapez ?.
diff --git a/fr_FR.ISO8859-1/books/handbook/config/chapter.sgml b/fr_FR.ISO8859-1/books/handbook/config/chapter.sgml index 3ef74c442d..50ca6c79e7 100644 --- a/fr_FR.ISO8859-1/books/handbook/config/chapter.sgml +++ b/fr_FR.ISO8859-1/books/handbook/config/chapter.sgml @@ -1,3641 +1,3641 @@ Chern Lee Ecrit par Mike Smith Basé sur un guide rédigé par Matt Dillon Egalement basé sur la page de manuel tuning(7) écrite par Configuration et optimisation &trans.a.fonvieille; Synopsis configuration du système optimisation du système La configuration correcte d'un système peut sensiblement réduire la quantité de travail impliquée dans la maintenance et la mise à jour. Ce chapitre décrit certains des aspects de la configuration des systèmes FreeBSD. Ce chapitre décrira également certains paramètres qui peuvent être modifiés pour configurer un système FreeBSD pour des performances optimales. Après la lecture de ce chapitre, vous saurez: Pourquoi et comment dimensionner, organiser, et positionner efficacement les partitions des systèmes de fichiers et de pagination sur votre disque dur. Les bases de la configuration du fichier rc.conf et des fichiers de démarrage /usr/local/etc/rc.d. Comment configurer et tester une carte réseau. Comment configurer des hôtes virtuels sur vos périphériques réseau. Comment utiliser les divers fichiers de configuration du répertoire /etc. Comment optimiser FreeBSD en utilisant les variables sysctl. Comment optimiser les performances des disques et modifier les limitations du noyau. Avant de lire ce chapitre, vous devrez: Comprendre les fondements d'&unix; et de FreeBSD (). Etre familier avec la configuration et la compilation du noyau (). Configuration initiale Organisation des partitions organisation des partitions /etc /var /usr Partitions de base Quand vous organisez votre système de fichiers à l'aide de &man.disklabel.8; ou &man.sysinstall.8;, il est important de se rappeler que les disques durs peuvent transférer des données plus rapidement depuis les pistes externes que depuis celles à l'intérieur. En sachant cela, vous devriez placer vos systèmes de fichiers les plus petits, auxquels on accède le plus souvent, comme la racine et l'espace de pagination, proche de la partie externe du disque, alors que les grandes partitions, comme /usr, devraient être plus à l'intérieur. Pour faire cela, c'est une bonne idée de créer les partitions dans l'ordre suivant: racine, pagination, /var, /usr. La taille de votre partition /var reflète l'utilisation prévue de votre machine. /var est principalement utilisée pour héberger les boîtes aux lettres, les fichiers journaux, les queues d'impression. Les boîtes aux lettres et les fichiers journaux, en particulier, peuvent croître vers des tailles inattendues en fonction du nombre d'utilisateurs de votre système et de combien de temps sont conservés ces fichiers. Si vous avez l'intention de faire fonctionner un serveur de courrier électronique, une partition La plupart des utilisateurs n'auront jamais besoin de plus d'un gigaoctet, mais rappelez-vous que /var/tmp doit être assez grand pour contenir tout logiciel pré-compilé que vous pourrez vouloir ajouter. La partition /usr contient la majeure partie des fichiers nécessaires au système, le catalogue des logiciels portés (recommandé) et le code source du système (optionnel). Les deux étant optionnels à l'installation. Utiliser au moins 2 gigaoctets pour cette partition est recommandé. Quand vous dimensionnez vos partitions, gardez à l'esprit les besoins en espace pour permettre à votre système de se développer. Manquer d'espace sur une partition alors qu'il y en a plein sur les autres peut être très frustrant. Certains utilisateurs qui ont employé l'option Auto-defaults de l'outil de partitionnement de &man.sysinstall.8; ont trouvé plus tard que leurs partitions racine et /var étaient trop petites. Partitionnez généreusement et avec sagesse. Partition de pagination dimensionnement de l'espace de pagination partition de pagination Par principe, votre espace de pagination devrait typiquement avoir une taille double de la quantité de mémoire principale. Par exemple, si la machine possède 128 mégaoctets de mémoire, le fichier de pagination devrait être de 256 mégaoctets. Les systèmes avec peu de mémoire pourront avoir de meilleures performances avec beaucoup plus d'espace de pagination. Il n'est pas recommandé d'avoir moins de 256 mégaoctets d'espace de pagination sur un système et vous devriez garder à l'esprit les futures extensions de mémoire quand vous dimensionnez votre partition de pagination. Les algorithmes de pagination du noyau sont optimisés pour une meilleure efficacité avec une partition de pagination d'au moins deux fois la taille de la mémoire principale. Configurer trop peu d'espace de pagination peut conduire à une certaine inefficacité du code de pagination de la mémoire virtuelle comme à l'apparition de problèmes ultérieurement si vous ajoutez plus de mémoire à votre machine. Et enfin, sur des systèmes importants avec de multiples disques SCSI (ou de multiples disques IDE fonctionnant sur différents contrôleurs), il est vivement recommandé que vous configuriez un espace de pagination sur chaque disque (jusqu'à quatre disques). Les partitions de pagination sur les différents disques devront avoir approximativement la même taille. Le noyau peut gérer des tailles arbitraires mais les structures de données internes sont dimensionnées pour 4 fois la taille de la plus grande partition de pagination. Garder la taille des partitions de pagination proche permettra au noyau de répartir de manière optimale l'espace de pagination entre les disques. Ne vous inquiétez pas trop si vous les surdimensionnez, l'espace de pagination est un des avantages d'Unix. Même si vous n'utilisez normalement pas beaucoup de cet espace, il peut vous permettre d'avoir plus temps pour récupérer face à programme incontrôlable avant d'être forcé à relancer la machine. Pourquoi des Partitions? Pourquoi des partitions? Pourquoi ne pas créer une seule grande partition racine? Ainsi je n'aurais pas à me soucier d'avoir sous-dimensionné certaines choses! Pour plusieurs raisons cela n'est pas une bonne idée. Tout d'abord, chaque partition a différentes caractéristiques d'utilisation et les séparer autorise le système de fichiers à s'optimiser lui-même pour ces caractéristiques. Par exemple, les partitions racine et /usr sont surtout lues, et rarement utilisées en écriture, alors que de nombreuses opérations de lecture et écriture pourront avoir lieu sur /var et /var/tmp. En partitionnant correctement votre système, la fragmentation introduite sur les partitions plus petites et plus chargées en écriture ne s'étendra pas sur les partitions principalement utilisées en lecture. De plus, avoir les partitions principalement utilisées en écriture proche du bord du disque, par exemple avant la grande partition au lieu qu'après dans la table des partitions, augmentera les performances d'E/S sur les partitions qui le demandent le plus. Maintenant il est également vrai que vous avez besoin de performances d'E/S sur les grandes partitions, mais elles sont si grandes que les déplacer plus vers l'extérieur du disque ne donnera pas lieu à une augmentation significative des performances alors que le déplacement de /var vers le bord peut avoir un sérieux impact. Et enfin, il y a également des raisons de sécurité. Avoir une partition racine petite et ordonnée qui est essentiellement en lecture seule lui donne plus de chance de rester intacte après un crash sévère. Configuration principale fichiers rc rc.conf L'emplacement principal pour les données de configuration du système est le fichier /etc/rc.conf. Ce fichier contient une large gamme d'informations de configuration, principalement utilisées au démarrage du système pour configurer ce dernier. Son nom le sous-entend; c'est l'information de configuration pour les fichiers rc*. Un administrateur devrait ajouter des entrées dans le fichier rc.conf pour remplacer les valeurs par défaut du fichier /etc/defaults/rc.conf. Les fichiers de valeurs par défaut ne devraient pas être copiés directement tels quels dans /etc - ils contiennent des valeurs par défaut, et non pas des exemples. Tout changement spécifique au système devrait être fait dans le fichier rc.conf. Un certain nombre de stratégies peuvent être appliquées dans le cas d'applications en grappe pour séparer la configuration d'un site de celle d'un système afin de réduire le travail d'administration. L'approche recommandée est de placer la configuration propre au site dans un autre fichier comme /etc/rc.conf.site, puis ensuite inclure ce fichier dans /etc/rc.conf, qui ne contiendra seulement que les informations spécifiques au système. Comme rc.conf est lu par &man.sh.1; il est assez trivial d'effectuer cela. Par exemple: rc.conf: . rc.conf.site hostname="node15.example.com" network_interfaces="fxp0 lo0" ifconfig_fxp0="inet 10.1.1.1" rc.conf.site: defaultrouter="10.1.1.254" saver="daemon" blanktime="100" Le fichier rc.conf.site peut être distribué à l'ensemble des systèmes en utilisant rsync ou un programme semblable, tandis que le fichier rc.conf reste unique. Mettre à jour le système en employant &man.sysinstall.8; ou make world n'écrasera pas le fichier rc.conf, les informations de configuration du système ne seront donc pas perdues. Configuration des applications Généralement, les applications installées ont leurs propres fichiers de configuration, avec leur propre syntaxe, etc... Il est important que ces fichiers soient séparés du système de base, de sorte qu'ils soient facilement localisables et gérables par les outils de gestion des logiciels installés. /usr/local/etc Ces fichiers sont généralement installés dans le répertoire /usr/local/etc. Dans le cas où une application possède un grand nombre de fichiers de configuration, un sous-répertoire sera créé pour les héberger. Normalement, quand un logiciel porté ou pré-compilé est installé, des exemples de fichiers de configuration sont également installés. Ces derniers sont généralement identifiés par un suffixe “.default”. Si aucun fichier de configuration n'existe pour l'application, on les créera en copiant les fichiers .default. Par exemple, considérez le contenu du répertoire /usr/local/etc/apache: -rw-r--r-- 1 root wheel 2184 May 20 1998 access.conf -rw-r--r-- 1 root wheel 2184 May 20 1998 access.conf.default -rw-r--r-- 1 root wheel 9555 May 20 1998 httpd.conf -rw-r--r-- 1 root wheel 9555 May 20 1998 httpd.conf.default -rw-r--r-- 1 root wheel 12205 May 20 1998 magic -rw-r--r-- 1 root wheel 12205 May 20 1998 magic.default -rw-r--r-- 1 root wheel 2700 May 20 1998 mime.types -rw-r--r-- 1 root wheel 2700 May 20 1998 mime.types.default -rw-r--r-- 1 root wheel 7980 May 20 1998 srm.conf -rw-r--r-- 1 root wheel 7933 May 20 1998 srm.conf.default Les tailles des fichiers indiquent que seul le fichier srm.conf a été modifié. Une mise à jour, plus tard, du logiciel Apache ne devrait pas écraser le fichier modifié. Tom Rhodes Contribution de Démarrer des services services Nombreux sont les utilisateurs qui choisissent d'installer des logiciels tierce partie sous &os; à partir du catalogue des logiciels portés. Dans de nombreuses situations, il peut être nécessaire de configurer le logiciel de manière à ce qu'il soit lancé au démarrage du système. Des services comme mail/postfix ou www/apache13 sont deux exemples de logiciels parmi tant d'autres qui peuvent être lancés à l'initialisation du système. Cette section explique les procédures disponibles pour démarrer certains logiciels tierce partie. Sous &os;, la plupart des services offerts, comme &man.cron.8;, sont lancés par l'intermédiaire des procédures de démarrage du système. Ces procédures peuvent varier en fonction de la version de &os,; ou du fournisseur; cependant, l'aspect le plus important à considérer est que leur configuration de démarrage peut être gérée à l'aide de procédures de démarrage simples. Avant l'avènement du système rcNG, les applications plaçaient une procédure simple de lancement dans le répertoire /usr/local/etc/rc.d qui était lue par les scripts d'initialisation du système. Ces procédures étant alors exécutées lors des dernières étapes du démarrage du système. Bien que de nombreuses personnes aient passé des heures à tenter de fusionner l'ancien mode de configuration avec le nouveau, il reste que certains utilitaires tierce partie ont toujours besoin d'un script placé dans le répertoire précédemment évoqué. Les différences subtiles dans les scripts dépend de si le système rcNG est utilisé ou non. Avant &os; 5.1 l'ancien style de configuration était utilisé et dans presque tous les cas la nouvelle procédure fonctionnera sans problème. Bien que chaque procédure doit remplir certains pré-requis minimum, la plupart du temps ils seront indépendants de la version de &os;. Chaque procédure doit avoir une extension .sh et doit être exécutable par le système. Ce dernier point peut être réalisé en utilisant la commande chmod et en fixant les permissions à 755. Il doit y avoir, au minimum, une option pour démarrer (start) l'application et une autre pour l'arrêter (stop). La procédure de démarrage la plus simple ressemblera à celle-ci: #!/bin/sh echo -n ' utility' case "$1" in start) /usr/local/bin/utility ;; stop) kill -9 `cat /var/run/utility.pid` ;; *) echo "Usage: `basename $0` {start|stop}" >&2 exit 64 ;; esac exit 0 Cette procédure offre des options stop et start pour une application appelée ici utility. Cette application pourra alors avoir la ligne suivante la concernant dans le fichier /etc/rc.conf: utility_enable="YES" L'application pourra être lancée manuellement avec: &prompt.root; /usr/local/etc/rc.d/utility.sh start Bien que toutes les applications tierce partie ne nécessitent pas de ligne dans le fichier rc.conf, chaque jour un nouveau logiciel porté sera modifié pour accepter cette configuration. Contrôlez l'affichage final lors de l'installation de l'application pour plus d'information à ce sujet. Certains logiciels fourniront des procédures qui permettrons à l'application d'être utilisée avec le système rcNG, cela sera abordé dans la section suivante. Configuration étendue des applications Maintenant que &os; dispose du système rcNG, la configuration du démarrage des applications est plus aboutie, en effet elle propose plus de possibilités. En utilisant les mots clés présentés dans la section sur le système rcNG, les applications peuvent désormais être paramétrées pour démarrer après certains services, par exemple le DNS, des paramètres supplémentaires peuvent être passés par l'intermédiaire de rc.conf au lieu d'utiliser des paramètres fixes dans les procédures de démarrage, etc. Une procédure de base pourra ressembler à ce qui suit: #!/bin/sh # # PROVIDE: utility # REQUIRE: DAEMON # BEFORE: LOGIN # KEYWORD: FreeBSD shutdown # # DO NOT CHANGE THESE DEFAULT VALUES HERE # SET THEM IN THE /etc/rc.conf FILE # utility_enable=${utility_enable-"NO"} utility_flags=${utility_flags-""} utility_pidfile=${utility_pidfile-"/var/run/utility.pid"} . /etc/rc.subr name="utility" rcvar=`set_rcvar` command="/usr/local/sbin/utility" load_rc_config $name pidfile="${utility_pidfile}" start_cmd="echo \"Starting ${name}.\"; /usr/bin/nice -5 ${command} ${utility_flags} ${command_args}" run_rc_command "$1" Cette procédure s'assurera que l'application utility sera lancée avant le service login mais après le service daemon. Elle fournie également une méthode de suivi du PID, ou encore ID (identifiant) de processus. Cette nouvelle méthode permet également une manipulation plus aisée des arguments en ligne de commande, l'inclusion des fonctions offertes par défaut dans /etc/rc.subr, offre une compatibilité avec l'utilitaire &man.rcorder.8; et fournie une configuration plus aisée par l'intermédiaire du fichier rc.conf. Dans l'état actuel, cette procédure pourrait même être placée dans le répertoire /etc/rc.d. Cependant, cela pourra déranger l'utilitaire &man.mergemaster.8; lors de mise à jour logicielles. Utiliser des services pour démarrer d'autres services Certains services, comme les serveurs POP3, IMAP, etc., peuvent être démarrés en utilisant &man.inetd.8;. Cela implique d'installer le service à partir du catalogue des logiciels portés et avec une ligne de configuration ajoutée au fichier /etc/inetd.conf, ou en décommentant une des lignes de configuration déjà présentes. L'utilisation d'inetd et sa configuration sont décrits en profondeur dans la section concernant inetd. Dans certains cas, il peut être plus approprié d'utiliser le daemon &man.cron.8; pour démarrer des services. Cette approche présente un certain nombre d'avantages parce que cron exécute ces processus sous les privilèges du propriétaire de la table crontab. Cela permet aux utilisateurs normaux de lancer et maintenir certaines applications. L'utilitaire cron offre une fonction unique, @reboot, qui peut être utilisée en remplacement de la date d'exécution. Cela provoquera l'exécution de la tâche quand &man.cron.8; est lancé, normalement lors de l'initialisation du système. Tom Rhodes Contribution de Configuration de l'utilitaire <command>cron</command> cron configuration Un des utilitaires les plus importants de &os; est &man.cron.8;. L'utilitaire cron tourne en arrière plan et contrôle constamment le fichier /etc/crontab. L'utilitaire cron consulte également le répertoire /var/cron/tabs, à la recherche de nouveaux fichiers crontab. Ces fichiers crontab conservent les informations sur les tâches que cron est censé exécuter à des moments donnés. L'utilitaire cron utilise deux types différents de fichiers de configuration, le fichier crontab système et les crontabs des utilisateurs. La seule différence entre ces deux formats est le sixième champ. Dans le fichier crontab système, le sixième champ est le nom de l'utilisateur sous lequel doit être exécutée la commande. Cela donne la possibilité au fichier crontab système d'exécuter les commandes sous n'importe quel utilisateur. Dans le fichier crontab d'un utilisateur, le sixième champ est la commande a exécuter et toutes les commandes sont exécutées sous l'utilisateur qui a créé le fichier crontab; c'est un aspect sécurité important. Les fichiers crontab utilisateur permettent aux utilisateurs de planifier l'exécution de tâches sans avoir besoin des privilèges du super-utilisateur root. Les commandes contenues dans le fichier crontab d'un utilisateur s'exécutent avec les privilèges de l'utilisateur auquel appartient ce fichier. Le super-utilisateur root peut posséder un fichier crontab utilisateur comme tout autre utilisateur. Ce fichier est différent de /etc/crontab (le crontab système). En raison de l'existence du fichier crontab système, il n'y a généralement pas besoin d'un fichier crontab utilisateur pour root. Examinons le fichier /etc/crontab (fichier crontab système): # /etc/crontab - root's crontab for &os; # # $&os;: src/etc/crontab,v 1.32 2002/11/22 16:13:39 tom Exp $ # # SHELL=/bin/sh PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin HOME=/var/log # # #minute heure date mois jour utilisateur commande # # */5 * * * * root /usr/libexec/atrun Comme pour la plupart des fichiers de configuration de &os;, le caractère # indique un commentaire. Un commentaire peut être ajouté dans le fichier comme rappel de ce que fait une action bien précise et pourquoi elle est effectuée. Les commentaires ne peuvent être situés sur la même ligne qu'une commande ou sinon ils seront interprétés comme faisant partie de la commande; ils doivent se trouver sur une nouvelle ligne. Les lignes vides sont ignorées. Tout d'abord, les variables d'environnement doivent être définies. Le caractère égal (=) est utilisé pour définir tout paramètre concernant l'environnement, comme dans notre exemple où il a été utilisé pour les variables SHELL, PATH, et HOME. Si la ligne concernant l'interpréteur de commande est omise, cron utilisera celui par défaut, qui est sh. Si la variable PATH est omise, il n'y aura pas de valeur par défaut utilisée et l'emplacement des fichiers devra être absolu. Si HOME est omise, cron utilisera le répertoire personnel de l'utilisateur qui l'invoque. Cette ligne définie un total de sept champs. Sont listés ici les valeurs minute, heure, date, mois, jour, utilisateur, et commande. Ces champs sont relativement explicites. minute représente l'heure en minute à laquelle la commande sera exécutée. L'option heure est semblable à l'option minute, mais en heures. Le champ date précise le jour dans le mois. mois est similaire à heure et minute mais désigne le mois. L'option jour représente le jour de la semaine. Tous ces champs doivent être des valeurs numériques, et respecter un format horaire de vingt quatre heures. Le champ utilisateur est spécial, et n'existe que dans le fichier /etc/crontab. Ce champ précise sous quel utilisateur sera exécutée la commande. Quand un utilisateur installe son fichier crontab, il n'aura pas cette option. Pour finir, l'option commande est listée. C'est le dernier champ, qui naturellement devrait désigner la commande à exécuter. Cette dernière ligne définie les valeurs discutées ci-dessus. Nous avons ici */5 suivi de plusieurs caractères *. Ces caractères * signifient “premier-dernier”, et peuvent être interprétés comme voulant dire à chaque instance. Aussi, d'après cette ligne, il apparaît que la commande atrun sera invoquée par l'utilisateur root toutes les cinq minutes indépendemment du jour ou du mois. Pour plus d'informations sur la commande atrun, consultez la page de manuel de &man.atrun.8;. N'importe quel nombre d'indicateur peut être passé à ces commandes; cependant, les commandes qui s'étendent sur de multiples lignes doivent être “cassées” avec le caractère, contre-oblique \, de continuation de lignes. Ceci est la configuration de base pour chaque fichier crontab, bien qu'il y ait une différence dans celui présenté ici. Le sixième champ, où est précisé le nom d'utilisateur, n'existe que dans le fichier système /etc/crontab. Ce champ devrait être omis pour les fichiers crontab d'utilisateur. Installer un fichier crontab Vous ne devez pas utiliser la procédure décrite ci-dessous pour éditer/installer le fichier crontab système. Utilisez directement votre éditeur: l'utilitaire cron remarquera le changement au niveau de ce fichier et utilisera immédiatement la nouvelle version. Consultez cette entrée de la FAQ pour plus d'information. Pour installer un fichier crontab utilisateur fraichement rédigé, tout d'abord utilisez votre éditeur favori pour créer un fichier dans le bon format, ensuite utilisez l'utilitaire crontab. L'usage le plus typique est: &prompt.root; crontab fichier-crontab Dans cet exemple, fichier-crontab est le nom d'un fichier crontab qui a été précédemment créé. Il existe également une option pour afficher les fichiers crontab installés, passez simplement le paramètre à crontab et lisez ce qui est affiché. Pour les utilisateurs désirant créer leur fichier crontab à partir de zéro, sans utiliser de modèle, l'option crontab -e est disponible. Cela invoquera l'éditeur par défaut avec un fichier vide. Quand le fichier est sauvegardé, il sera automatiquement installé par la commande crontab. Si vous désirez plus tard effacer votre crontab utilisateur complètement, utilisez la commande crontab avec l'option . Tom Rhodes Contribution de Utilisation du système rc sous &os; 5.X rcNG Le système rc.d de NetBSD pour l'initialisation du système a récemment été intégré à &os;. Les utilisateurs noteront les fichiers présents dans le répertoire /etc/rc.d. Plusieurs de ces fichiers sont destinés aux services de base qui peuvent être contrôlés avec les options , , et . Par exemple, &man.sshd.8; peut être relancé avec la commande suivante: &prompt.root; /etc/rc.d/sshd restart Cette procédure est similaire pour d'autres services. Bien sûr, les services sont généralement lancés automatiquement dès qu'ils sont spécifiés dans le fichier &man.rc.conf.5;. Par exemple, activer le “daemon” de translation d'adresses au démarrage est aussi simple que d'ajouter la ligne suivante au fichier /etc/rc.conf: natd_enable="YES" Si une ligne est déjà présente, modifiez alors le par . Les procédures rc chargeront automatiquement les autres services dépendants lors du prochain redémarrage comme décrit ci-dessous. Comme le système rc.d est à l'origine destiné pour lancer/arrêter les services au démarrage/à l'arrêt du système, les options standards , et ne seront effectives que si les variables appropriées sont positionnées dans le fichier /etc/rc.conf. Par exemple, la commande sshd restart ci-dessus ne fonctionnera que si sshd_enable est fixée à dans /etc/rc.conf. Pour lancer, arrêter ou redémarrer un service indépendemment des paramétrages du fichier /etc/rc.conf, les commandes doivent être précédées par “force”. Par exemple pour redémarrer sshd indépendemment du paramétrage du fichier /etc/rc.conf, exécutez la commande suivante: &prompt.root; /etc/rc.d/sshd forcerestart Il est facile de contrôler si un service est activé dans le fichier /etc/rc.conf en exécutant la procédure rc.d appropriée avec l'option . Ainsi, un administrateur peut contrôler que sshd est réellement activé dans /etc/rc.conf en exécutant: &prompt.root; /etc/rc.d/sshd rcvar # sshd $sshd_enable=YES La seconde ligne (# sshd) est la sortie de la commande sshd et non pas une console root. Pour déterminer si un service est actif, une option appelée est disponible. Par exemple pour vérifier que sshd a réellement été lancé: &prompt.root; /etc/rc.d/sshd status sshd is running as pid 433. Il est également possible de recharger un service avec l'option . Le système tentera d'envoyer un signal à un service individuel, le forçant à recharger ses fichiers de configuration. Dans la plupart des cas cela signifie envoyer un signal SIGHUP au service. La structure rcNG n'est pas uniquement utilisée pour les services réseaux, elle participe à la majeure partie de l'initialisation du système. Prenez par exemple le fichier bgfsck. Quand cette procédure est exécutée, il affichera le message suivant: Starting background file system checks in 60 seconds. Donc ce fichier est utilisé pour les vérifications du système de fichiers en arrière plan, qui sont uniquement effectuées lors de l'initialisation du système. De nombreux services système dépendent d'autres services pour fonctionner correctement. Par exemple, NIS et les autres services basés sur les RPCs peuvent échouer s'ils sont lancés après le lancement du service rpcbind (portmapper). Pour résoudre ce problème, l'information concernant les dépendances et autres méta-données est inclue dans les commentaires au début de chaque procédure de démarrage. Le programme &man.rcorder.8; est alors utilisé pour analyser ces commentaires lors de l'initialisation du système en vue de déterminer l'ordre dans lequel les services système seront invoqués pour satisfaire les dépendances. Les mots suivants peuvent être présents en tête de chaque fichier de démarrage: PROVIDE: indique les services que fournit ce fichier. REQUIRE: liste les fichiers dont dépend ce service. Ce fichier sera exécuté après les services indiqués. BEFORE: liste les services qui dépendent du service présent. Ce fichier sera exécuté avant les services indiqués. KEYWORD: &os; ou NetBSD. Ceci est utilisé pour des fonctionnalités propres au système d'exploitation. En utilisant ce système, un administrateur peut facilement contrôler les services du système sans avoir à se battre avec les “runlevels” comme sur d'autres systèmes d'exploitation &unix;. Des informations supplémentaires concernant le système rc.d de &os; 5.X peuvent être trouvées dans les pages de manuel &man.rc.8; et &man.rc.subr.8;. Marc Fonvieille Contribution de Configuration des cartes réseaux configuration des cartes réseaux De nos jours il est impossible de penser à un ordinateur sans penser connexion à un réseau. Installer et configurer une carte réseau est une tâche classique pour tout administrateur FreeBSD. Déterminer le bon pilote de périphérique configuration des cartes réseaux déterminer le pilote de périphérique Avant de commencer, vous devez connaître le modèle de la carte dont vous disposez, le circuit qu'elle utilise, et si c'est une carte PCI ou ISA. FreeBSD supporte une large variété de cartes PCI et ISA. Consultez la liste de compatibilité matérielle pour votre version de FreeBSD afin de voir si votre carte est supportée. Une fois que vous êtes sûrs que votre carte est supportée, vous devez déterminer le bon pilote de périphérique pour la carte. Le fichier /usr/src/sys/i386/conf/LINT vous donnera la liste des pilotes de périphériques pour cartes réseaux avec des informations sur les cartes/circuits supportés. Si vous avez des doutes au sujet du bon pilote, lisez la page de manuel du pilote. La page de manuel vous donnera plus d'information sur le matériel supporté et même les éventuels problèmes qui pourront apparaître. Si vous possédez une carte courante, la plupart du temps vous n'aurez pas à chercher trop loin pour trouver un pilote. Les pilotes pour les cartes réseaux courantes sont présents dans le noyau GENERIC, aussi votre carte devrait apparaître au démarrage, comme suit: dc0: <82c169 PNIC 10/100BaseTX> port 0xa000-0xa0ff mem 0xd3800000-0xd38 000ff irq 15 at device 11.0 on pci0 dc0: Ethernet address: 00:a0:cc:da:da:da miibus0: <MII bus> on dc0 ukphy0: <Generic IEEE 802.3u media interface> on miibus0 ukphy0: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto dc1: <82c169 PNIC 10/100BaseTX> port 0x9800-0x98ff mem 0xd3000000-0xd30 000ff irq 11 at device 12.0 on pci0 dc1: Ethernet address: 00:a0:cc:da:da:db miibus1: <MII bus> on dc1 ukphy1: <Generic IEEE 802.3u media interface> on miibus1 ukphy1: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto Dans cet exemple, nous voyons que deux cartes utilisant le pilote de périphérique &man.dc.4; sont présentes sur le système. Pour utiliser votre carte réseau, vous devrez charger le pilote de périphérique correct. Cela peut être accompli de deux façons. La plus simple est de charger le module pour votre carte réseau avec &man.kldload.8;. Un module n'est pas disponible pour toutes les cartes réseaux (les cartes ISA ou celles utilisant le pilote &man.ed.4;, par exemple). Alternativement, vous pouvez compiler en statique le support pour votre carte dans votre noyau. Consultez /usr/src/sys/i386/conf/LINT et la page de manuel du pilote de périphérique pour savoir ce qu'il faut ajouter à votre fichier de configuration de votre noyau. Pour plus d'information sur la recompilation de votre noyau, veuillez lire le . Si votre carte a été détectée au démarrage par votre noyau (GENERIC) vous n'avez pas à compiler un nouveau noyau. Configuration de la carte réseau configuration des cartes réseaux configuration Une fois que le bon pilote de périphérique pour la carte réseau est chargé, la carte doit être configurée. Comme beaucoup d'autres choses, la carte aura pu être configurée à l'installation par sysinstall. Pour afficher la configuration des interfaces réseaux de votre système, entrer la commande suivante: &prompt.user; ifconfig dc0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500 inet 192.168.1.3 netmask 0xffffff00 broadcast 192.168.1.255 ether 00:a0:cc:da:da:da media: Ethernet autoselect (100baseTX <full-duplex>) status: active dc1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500 inet 10.0.0.1 netmask 0xffffff00 broadcast 10.0.0.255 ether 00:a0:cc:da:da:db media: Ethernet 10baseT/UTP status: no carrier lp0: flags=8810<POINTOPOINT,SIMPLEX,MULTICAST> mtu 1500 lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384 inet 127.0.0.1 netmask 0xff000000 tun0: flags=8010<POINTOPOINT,MULTICAST> mtu 1500 D'anciennes versions de FreeBSD pourront nécessiter l'option après &man.ifconfig.8;, pour plus de détails au sujet de la syntaxe d'&man.ifconfig.8;, veuillez vous référer à la page de manuel. Notez également que les entrées concernant l'IPv6 (inet6 etc...) ont été omises dans cet exemple. Dans cet exemple, les périphériques suivants ont été affichés: dc0: La première interface Ethernet dc1: La seconde interface Ethernet lp0: L'interface du port parallèle lo0: L'interface “en boucle” (“loopback”) tun0: L'interface “tunnel” utilisée par ppp FreeBSD utilise le nom du pilote de périphérique suivi par un chiffre représentant l'ordre dans lequel la carte est détectée au démarrage du noyau pour nommer la carte. Par exemple sis2 serait la troisième carte sur le système utilisant le pilote de périphérique &man.sis.4;. Dans cet exemple, le périphérique dc0 est actif et en fonctionnement. Les indicateurs importants sont: UP signifie que la carte est configurée et prête. La carte possède une adresse Internet (inet) (dans ce cas-ci 192.168.1.3). Elle a un masque de sous-réseau valide (netmask; 0xffffff00 est équivalent à 255.255.255.0). Elle a une adresse de diffusion valide (dans ce cas-ci 192.168.1.255). L'adresse MAC de la carte (ether) est 00:a0:cc:da:da:da La sélection du média est sur le mode d'autosélection (media: Ethernet autoselect (100baseTX <full-duplex>)). Nous voyons que dc1 a été configurée pour utiliser un matériel de type 10baseT/UTP. Pour plus d'information sur le type de matériel disponible pour un pilote de périphérique, référez-vous à sa page de manuel. La liaison (status) est active, i.e. la porteuse est détectée. Pour dc1, nous lisons status: no carrier. Cela est normal lorsqu'aucun câble n'est branché à la carte. Si le résultat de la commande &man.ifconfig.8; est similaire à: dc0: flags=8843<BROADCAST,SIMPLEX,MULTICAST> mtu 1500 ether 00:a0:cc:da:da:da cela indiquerait que la carte n'a pas été configurée. Pour configurer votre carte, vous avez besoin des privilèges de l'utilisateur root. La configuration de la carte réseau peut être faite à partir de la ligne de commande avec &man.ifconfig.8; mais vous aurez à répéter cette opération à chaque redémarrage du système. Le fichier /etc/rc.conf est l'endroit où ajouter la configuration de la carte réseau. Ouvrez le fichier /etc/rc.conf dans votre éditeur favori. Vous devez ajouter une ligne pour chaque carte réseau présente sur le système, par exemple dans notre cas, nous avons ajouté ces lignes: ifconfig_dc0="inet 192.168.1.3 netmask 255.255.255.0" ifconfig_dc1="inet 10.0.0.1 netmask 255.255.255.0 media 10baseT/UTP" Vous devez remplacer dc0, dc1, et ainsi de suite, avec le périphérique correspondant pour vos cartes, et les adresses avec celles désirées. Vous devriez lire les pages de manuel du pilote de périphérique et d'&man.ifconfig.8; pour plus de détails sur les options autorisées et également la page de manuel de &man.rc.conf.5; pour plus d'information sur la syntaxe de /etc/rc.conf. Si vous avez configuré le réseau à l'installation, des lignes concernant la/les carte(s) réseau pourront être déjà présentes. Contrôler à deux fois le fichier /etc/rc.conf avant d'y ajouter des lignes. Vous devrez également éditer le fichier /etc/hosts pour ajouter les noms et les adresses IP des diverses machines du réseau local, si elles ne sont pas déjà présentes. Pour plus d'information référez-vous à la page de manuel &man.hosts.5; et au fichier /usr/share/examples/etc/hosts. Test et dépannage Une fois les modifications nécessaires du fichier /etc/rc.conf effectuées, vous devrez redémarrer votre système. Cela permettra la prise en compte de la ou les modifications au niveau des interfaces, et permettra de vérifier que le système redémarre sans erreur de configuration. Une fois que le système a été redémarré, vous devrez tester les interfaces réseau. Tester la carte Ethernet configuration des cartes réseaux test de la carte Pour vérifier qu'une carte Ethernet est configurée correctement, vous devez essayer deux choses. Premièrement, “pinguer” l'interface, puis une autre machine sur le réseau local. Tout d'abord testons l'interface: &prompt.user; ping -c5 192.168.1.3 PING 192.168.1.3 (192.168.1.3): 56 data bytes 64 bytes from 192.168.1.3: icmp_seq=0 ttl=64 time=0.082 ms 64 bytes from 192.168.1.3: icmp_seq=1 ttl=64 time=0.074 ms 64 bytes from 192.168.1.3: icmp_seq=2 ttl=64 time=0.076 ms 64 bytes from 192.168.1.3: icmp_seq=3 ttl=64 time=0.108 ms 64 bytes from 192.168.1.3: icmp_seq=4 ttl=64 time=0.076 ms --- 192.168.1.3 ping statistics --- 5 packets transmitted, 5 packets received, 0% packet loss round-trip min/avg/max/stddev = 0.074/0.083/0.108/0.013 ms Nous devons maintenant “pinguer” une autre machine sur le réseau: &prompt.user; ping -c5 192.168.1.2 PING 192.168.1.2 (192.168.1.2): 56 data bytes 64 bytes from 192.168.1.2: icmp_seq=0 ttl=64 time=0.726 ms 64 bytes from 192.168.1.2: icmp_seq=1 ttl=64 time=0.766 ms 64 bytes from 192.168.1.2: icmp_seq=2 ttl=64 time=0.700 ms 64 bytes from 192.168.1.2: icmp_seq=3 ttl=64 time=0.747 ms 64 bytes from 192.168.1.2: icmp_seq=4 ttl=64 time=0.704 ms --- 192.168.1.2 ping statistics --- 5 packets transmitted, 5 packets received, 0% packet loss round-trip min/avg/max/stddev = 0.700/0.729/0.766/0.025 ms Vous pourrez utiliser le noms de la machine à la place de 192.168.1.2 si vous avez configuré le fichier /etc/hosts. Dépannage configuration des cartes réseaux dépannage Le dépannage de matériels ou de logiciels est toujours une tâche relativement pénible, mais qui peut être rendue plus aisée en vérifiant en premier lieu certaines choses élémentaires. Votre câble réseau est-il branché? Avez-vous correctement configuré les services réseau? Le coupe-feu est-il bien configuré? Est-ce que la carte réseau est supportée par &os;? Consultez toujours les notes concernant le matériel avant d'envoyer un rapport de bogue. Mettez à jour votre version de &os; vers la dernière version STABLE. Consultez les archives des listes de diffusion, et faites même des recherches sur l'Internet. Si la carte fonctionne mais les performances sont mauvaises, une lecture de la page de manuel &man.tuning.7; peut valoir la peine. Vous pouvez également vérifier la configuration du réseau puisque des paramétres réseau incorrects peuvent donner lieu à des connexions lentes. Certains utilisateurs peuvent voir apparaître un ou deux messages device timeout, ce qui est normal pour certaines cartes. Si ces messages se multiplient, assurez-vous que la carte n'est pas en conflit avec un autre périphérique. Contrôlez à deux fois les câbles de connexion. Peut-être que vous avez juste besoin d'une autre carte. Parfois, des utilisateurs sont confrontés à des messages d'erreur watchdog timeout. La première chose à faire dans ce cas est de vérifier votre câble réseau. De nombreuses cartes demandent un slot PCI supportant le Bus Mastering. Sur certaines cartes mère anciennes, seul un slot PCI le permet (la plupart du temps le slot 0). Consultez la documentation de la carte réseau et de la carte mère pour déterminer si cela peut être à l'origine du problème. Les messages No route to host surviennent si le système est incapable de router un paquet vers la machine de destination. Cela peut arriver s'il n'y a pas de route par défaut de définie, ou si le câble réseau est débranché. Vérifiez la sortie de la commande netstat -nr et assurez-vous qu'il y a une route valide en direction de la machine que vous essayez d'atteindre. Si ce n'est pas le cas, lisez la . Les messages d'erreur ping: sendto: Permission denied sont souvent dus à un coupe-feu mal configuré. Si ipfw est activé dans le noyau mais qu'aucune règle n'a été définie, alors la politique par défaut est de refuser tout trafic, même les requêtes ping! Lisez pour plus d'informations. Parfois les performances de la carte ne sont pas bonnes, ou en dessous de la moyenne. Dans ce cas il est recommandé de passer la sélection du média du mode autoselect au mode adéquat. Alors que cela fonctionne généralement pour la plupart du matériel, il se peut que cela ne résolve pas le problème pour tout de monde. Encore une fois, contrôlez les paramétrages réseau et consultez la page de manuel &man.tuning.7;. Hôtes virtuels hôtes virtuels alias IP Une utilisation très courante de FreeBSD est l'hébergement de sites virtuels, où un serveur apparaît pour le réseau comme étant plusieurs serveurs différents. Ceci est possible en assignant plusieurs adresses réseau à une interface. Une interface réseau donnée possède une adresse “réelle”, et peut avoir n'importe quel nombre d'adresses “alias”. Ces alias sont normalement ajoutés en plaçant les entrées correspondantes dans le fichier /etc/rc.conf. Une entrée d'alias pour l'interface fxp0 ressemble à: ifconfig_fxp0_alias0="inet xxx.xxx.xxx.xxx netmask xxx.xxx.xxx.xxx" Notez que les entrées d'alias doivent commencer avec alias0 et continuer en ordre croissant, (par exemple, _alias1, _alias2, et ainsi de suite). Le processus de configuration s'arrêtera au premier nombre absent. Le calcul des masques de réseau est important, mais heureusement assez simple. Pour une interface donnée, il doit y avoir une adresse qui représente correctement le masque de réseau de votre réseau. Tout autre adresse appartenant à ce réseau devra avoir un masque de réseau avec chaque bit à 1 (exprimé soit sous la forme 255.255.255.255 soit 0xffffffff). Par exemple, considérez le cas où l'interface fxp0 est connectée à deux réseaux, le réseau 10.1.1.0 avec un masque de réseau de 255.255.255.0 et le réseau 202.0.75.16 avec un masque de 255.255.255.240. Nous voulons que le système apparaisse de 10.1.1.1 jusqu'à 10.1.1.5 et à 202.0.75.17 jusqu'à 202.0.75.20. Comme noté plus haut, seule la première adresse dans un intervalle réseau donné (dans ce cas, 10.0.1.1 et 202.0.75.17) devrait avoir un masque de sous-réseau réel; toutes les autres adresses (10.1.1.2 à 10.1.1.5 et 202.0.75.18 jusqu'à 202.0.75.20) doivent être configurées avec un masque de sous-réseau de 255.255.255.255. Les entrées suivantes configurent la carte correctement pour cet arrangement: ifconfig_fxp0="inet 10.1.1.1 netmask 255.255.255.0" ifconfig_fxp0_alias0="inet 10.1.1.2 netmask 255.255.255.255" ifconfig_fxp0_alias1="inet 10.1.1.3 netmask 255.255.255.255" ifconfig_fxp0_alias2="inet 10.1.1.4 netmask 255.255.255.255" ifconfig_fxp0_alias3="inet 10.1.1.5 netmask 255.255.255.255" ifconfig_fxp0_alias4="inet 202.0.75.17 netmask 255.255.255.240" ifconfig_fxp0_alias5="inet 202.0.75.18 netmask 255.255.255.255" ifconfig_fxp0_alias6="inet 202.0.75.19 netmask 255.255.255.255" ifconfig_fxp0_alias7="inet 202.0.75.20 netmask 255.255.255.255" Fichiers de configuration Organisation du répertoire <filename>/etc</filename> Il existe un certain nombre de répertoires dans lesquels se trouvent les informations de configuration. Ceux-ci incluent: /etc Information de configuration générique du système; les données ici sont spécifiques au système. /etc/defaults Version par défaut des fichiers de configuration du système. /etc/mail Configuration de &man.sendmail.8;, et autres fichiers de configuration d'agent de transmission du courrier électronique. /etc/ppp Configuration pour les programmes PPP utilisateur et intégré au noyau. /etc/namedb Emplacement par défaut pour les données de &man.named.8;. Normalement named.conf et les fichiers de zone sont stockés dans ce répertoire. /usr/local/etc Fichiers de configuration pour les applications installées. Peut contenir des sous-répertoires pour chaque application. /usr/local/etc/rc.d Procédures de lancement/d'arrêt pour les applications installées. /var/db Fichiers de bases de données automatiquement générés, spécifiques au système, comme la base de données des logiciels installés, la base de données de localisation des fichiers, et ainsi de suite. Nom d'hôtes nom d'hôte DNS <filename>/etc/resolv.conf</filename> resolv.conf /etc/resolv.conf gère comment le résolveur de FreeBSD accède au système de nom de domaine d'Internet (DNS). Les entrées la plus classiques du fichier resolv.conf sont: nameserver L'adresse IP du serveur de noms auquel le résolveur devrait envoyer ses requêtes. Les serveurs sont sollicités dans l'ordre listé avec un maximum de trois. search Liste de recherche pour la résolution de nom de machine. Ceci est normalement déterminé par le domaine de l'hôte local. domain Le nom du domaine local. Un fichier resolv.conf typique: search example.com nameserver 147.11.1.11 nameserver 147.11.100.30 Seule une des options search et domain devrait être utilisée. Si vous utilisez DHCP, &man.dhclient.8; réécrit habituellement resolv.conf avec l'information reçue du serveur DHCP. <filename>/etc/hosts</filename> hosts /etc/hosts est une simple base de données texte, une réminiscence des débuts d'Internet. Il travaille en conjonction avec les serveurs DNS et NIS pour fournir les correspondances nom vers adresse IP. Les ordinateurs locaux reliés par l'intermédiaire d'un réseau local peuvent être ajoutés dans ce fichier pour une résolution de noms simple plutôt que de configurer un serveur &man.named.8;. De plus /etc/hosts peut être utilisé pour fournir un enregistrement local de correspondances de nom, réduisant ainsi le besoin de requêtes vers l'extérieur pour les noms auxquels on accède couramment. # $FreeBSD$ # # Host Database # This file should contain the addresses and aliases # for local hosts that share this file. # In the presence of the domain name service or NIS, this file may # not be consulted at all; see /etc/nsswitch.conf for the resolution order. # # ::1 localhost localhost.my.domain myname.my.domain 127.0.0.1 localhost localhost.my.domain myname.my.domain # # Imaginary network. #10.0.0.2 myname.my.domain myname #10.0.0.3 myfriend.my.domain myfriend # # According to RFC 1918, you can use the following IP networks for # private nets which will never be connected to the Internet: # # 10.0.0.0 - 10.255.255.255 # 172.16.0.0 - 172.31.255.255 # 192.168.0.0 - 192.168.255.255 # # In case you want to be able to connect to the Internet, you need # real official assigned numbers. PLEASE PLEASE PLEASE do not try # to invent your own network numbers but instead get one from your # network provider (if any) or from the Internet Registry (ftp to # rs.internic.net, directory `/templates'). # /etc/hosts suit le format simple suivant: [Internet address] [official hostname] [alias1] [alias2] ... Par exemple: 10.0.0.1 myRealHostname.example.com myRealHostname foobar1 foobar2 Consultez la page de manuel &man.hosts.5; pour plus d'informations. Configuration des fichiers de trace fichiers de trace <filename>syslog.conf</filename> syslog.conf syslog.conf est le fichier de configuration du programme &man.syslogd.8;. Il indique quel type de messages syslog sera enregistré dans des fichiers de traces particuliers. # $FreeBSD$ # # Spaces ARE valid field separators in this file. However, # other *nix-like systems still insist on using tabs as field # separators. If you are sharing this file between systems, you # may want to use only tabs as field separators here. # Consult the syslog.conf(5) manual page. *.err;kern.debug;auth.notice;mail.crit /dev/console *.notice;kern.debug;lpr.info;mail.crit;news.err /var/log/messages security.* /var/log/security mail.info /var/log/maillog lpr.info /var/log/lpd-errs cron.* /var/log/cron *.err root *.notice;news.err root *.alert root *.emerg * # uncomment this to log all writes to /dev/console to /var/log/console.log #console.info /var/log/console.log # uncomment this to enable logging of all log messages to /var/log/all.log #*.* /var/log/all.log # uncomment this to enable logging to a remote log host named loghost #*.* @loghost # uncomment these if you're running inn # news.crit /var/log/news/news.crit # news.err /var/log/news/news.err # news.notice /var/log/news/news.notice !startslip *.* /var/log/slip.log !ppp *.* /var/log/ppp.log Consultez la page de manuel &man.syslog.conf.5; pour plus d'informations. <filename>newsyslog.conf</filename> newsyslog.conf newsyslog.conf est le fichier de configuration de &man.newsyslog.8;, un programme qui est normalement programmé &man.cron.8; pour s'exécuter périodiquement. &man.newsyslog.8; détermine quand les fichiers de traces doivent être archivés ou réorganisés. logfile devient logfile.0, logfile.0 devient à son tour logfile.1, et ainsi de suite. D'autre part, les fichiers de traces peuvent être archivés dans le format &man.gzip.1;, ils se nommeront alors: logfile.0.gz, logfile.1.gz, et ainsi de suite. newsyslog.conf indique quels fichiers de traces doivent être gérés, combien doivent être conservés, et quand ils doivent être modifiés. Les fichiers de traces peuvent être réorganisés et/ou archivés quand ils ont soit atteint une certaine taille, soit à une certaine période/date. # configuration file for newsyslog # $FreeBSD$ # # filename [owner:group] mode count size when [ZB] [/pid_file] [sig_num] /var/log/cron 600 3 100 * Z /var/log/amd.log 644 7 100 * Z /var/log/kerberos.log 644 7 100 * Z /var/log/lpd-errs 644 7 100 * Z /var/log/maillog 644 7 * @T00 Z /var/log/sendmail.st 644 10 * 168 B /var/log/messages 644 5 100 * Z /var/log/all.log 600 7 * @T00 Z /var/log/slip.log 600 3 100 * Z /var/log/ppp.log 600 3 100 * Z /var/log/security 600 10 100 * Z /var/log/wtmp 644 3 * @01T05 B /var/log/daily.log 640 7 * @T00 Z /var/log/weekly.log 640 5 1 $W6D0 Z /var/log/monthly.log 640 12 * $M1D0 Z /var/log/console.log 640 5 100 * Z Consultez la page de manuel &man.newsyslog.8; pour plus d'informations. <filename>sysctl.conf</filename> sysctl.conf sysctl sysctl.conf ressemble à rc.conf. Les valeurs sont fixées sous la forme variable=value. Les valeurs spécifiées sont positionnées après que le système soit passé dans le mode multi-utilisateurs. Toutes les variables ne sont pas paramétrables dans ce mode. Un exemple de sysctl.conf désactivant la trace signaux fatals de fin de processus et faisant savoir aux programmes Linux qu'ils tournent sous FreeBSD. kern.logsigexit=0 # Do not log fatal signal exits (e.g. sig 11) compat.linux.osname=FreeBSD compat.linux.osrelease=4.3-STABLE Optimisation avec sysctl sysctl optimisation avec sysctl &man.sysctl.8; est une interface qui vous permet d'effectuer des changements de paramétrage sur un système FreeBSD en fonctionnement. Cela comprend de nombreuses options avancées de la pile TCP/IP et du système de mémoire virtuelle qui peuvent améliorer dramatiquement les performances pour un administrateur système expérimenté. Plus de cinq cent variables système peuvent être lues et modifiées grâce à &man.sysctl.8;. &man.sysctl.8; remplit deux fonctions: lire et modifier les paramétrages du système. Pour afficher toutes les variables lisibles: &prompt.user; sysctl -a Pour lire une variable particulière, par exemple, kern.maxproc: &prompt.user; sysctl kern.maxproc kern.maxproc: 1044 Pour fixer une variable particulière, utilisez la syntaxe intuitive variable=valeur : &prompt.root; sysctl kern.maxfiles=5000 kern.maxfiles: 2088 -> 5000 Les valeurs des variables sysctl sont généralement des chaînes de caractères, des nombres, ou des booléens (un variable booléenne étant 1 pour oui ou un 0 pour non). Si vous voulez fixer automatiquement certaines variables à chaque démarrage de la machine, ajoutez-les au fichier /etc/sysctl.conf. Pour plus d'information consultez la page de manuel &man.sysctl.conf.5; et la . Tom Rhodes Contribution de Variables &man.sysctl.8; en lecture seule Dans certains cas, il peut être nécessaire de modifier des variables &man.sysctl.8; en lecture seule. Bien que cela n'est pas recommandé, c'est parfois inévitable. Par exemple sur certains modèles d'ordinateurs portables le périphérique &man.cardbus.4; ne sondera pas le système à la recherche des zones mémoires, et échouera avec des erreurs du type: cbb0: Could not map register memory device_probe_and_attach: cbb0 attach returned 12 Des cas comme le précédent demandent généralement la modification de paramètres &man.sysctl.8; par défaut qui sont en lecture seule. Pour palier à ces situations un utilisateur peut placer un paramétrage (“OID”—Object IDentifier) &man.sysctl.8; dans le fichier local /boot/loader.conf.local. Les paramétrages par défaut se trouvent dans le fichier /boot/defaults/loader.conf. Pour corriger le problème précédent, il faudrait que l'utilisateur ajoute la ligne dans le fichier précédemment indiqué. Désormais le périphérique &man.cardbus.4; devrait fonctionner normalement. Optimiser les disques Les variables sysctl <varname>vfs.vmiodirenable</varname> vfs.vmiodirenable La variable sysctl vfs.vmiodirenable peut être positionnée soit à 0 (désactivée) soit à 1 (activée); elle est a 1 par défaut. Cette variable spécifie comment les répertoires sont cachés par le système. La plupart des répertoires sont petits, utilisant juste un simple fragment du système de fichiers (typiquement 1KO) et moins dans le cache en mémoire (typiquement 512 octets). Avec cette variable désactivée (à 0), le cache en mémoire ne cachera qu'un nombre fixe de répertoires même si vous disposez d'une grande quantité de mémoire. Activée (à 1), cette variable sysctl permet au cache en mémoire d'utiliser le cache des pages de mémoire virtuelle pour cacher les répertoires, rendant toute la mémoire disponible pour cacher les répertoires. Cependant, la taille minimale de l'élément mémoire utilisé pour cacher un répertoire est une page physique (typiquement 4KO) plutôt que 512 octets. Nous recommandons de conserver de cette option activée si vous faites fonctionner des services qui manipulent un grand nombre de fichiers. De tels services peuvent être des caches web, d'importants systèmes de courrier électronique, et des systèmes serveurs de groupe de discussion. Conserver cette option activée ne réduira généralement pas les performances même avec la mémoire gaspillée mais vous devriez faire des expériences pour le déterminer. <varname>vfs.write_behind</varname> vfs.write_behind La variable sysctl vfs.write_behind est positionnée par défaut à 1 (activée). Elle demande au système de fichiers d'effectuer les écritures lorsque des grappes complètes de données ont été collectées, ce qui se produit généralement lors de l'écriture séquentielle de gros fichiers. L'idée est d'éviter de saturer le cache tampon avec des tampons sales quand cela n'améliorera pas les performances d'E/S. Cependant, cela peut bloquer les processus et dans certaines conditions vous pouvez vouloir désactiver cette fonction. <varname>vfs.hirunningspace</varname> vfs.hirunningspace La variable sysctl vfs.hirunningspace détermine combien d'opérations d'écriture peuvent être mises en attente à tout moment au niveau des contrôleurs disques du système. La valeur par défaut est normalement suffisante mais sur les machines avec de nombreux disques, vous pouvez vouloir l'augmenter jusqu'à quatre ou cinq méga-octets. Notez que fixer une valeur trop élevée (dépassant la limite d'écriture du cache tampon) peut donner lieu à de très mauvaises performances. Ne fixez pas cette valeur à une valeur élevée arbitraire! Des valeurs d'écriture élevées peuvent ajouter des temps de latence aux opérations d'écriture survenant au même moment. Il existent d'autres variables sysctl relatives aux caches tampons et aux pages VM. Nous ne recommandons pas de modifier ces valeurs. Depuis &os; 4.3, le système VM effectue un très bon travail d'auto-optimisation. <varname>vm.swap_idle_enabled</varname> vm.swap_idle_enabled La variable vm.swap_idle_enabled est utile dans le cas de systèmes multi-utilisateurs importants où il y a beaucoup d'utilisateurs s'attachant et quittant le système et de nombreux processus inactifs. De tels systèmes tendent à générer une pression assez importante et continue sur les réserves de mémoire libres. Activer cette fonction et régler l'hystéresis de libération de l'espace de pagination (en secondes d'inactivité) par l'intermédiaire des variables vm.swap_idle_threshold1 et vm.swap_idle_threshold2, vous permet de diminuer la priorité des pages mémoire associées avec les processus inactifs plus rapidement qu'avec l'algorithme normal de libération. Cela aide le daemon de libération des pages. N'activez cette option que si vous en besoin, parce que la concession que vous faites est d'utiliser l'espace de pagination pour les pages mémoire plus tôt qu'à l'accoutumé, consommant par conséquent plus d'espace de pagination et de bande passante disque. Sur un petit système, cette option aura un effet limité mais dans le cas d'un système important qui fait appel à l'espace de pagination de façon modérée, cette option permettra au système VM de transférer l'ensemble des processus de et vers la mémoire aisément. <varname>hw.ata.wc</varname> hw.ata.wc FreeBSD 4.3 a flirté avec la désactivation du cache en écriture des disques IDE. Cela réduisit la bande passante en écriture des disques IDE mais fut considéré comme nécessaire en raison de sérieux problèmes de cohérence de données introduits par les fabricants de disques durs. Le problème est que les disques IDE mentent sur le moment où une écriture est réellement terminée. Avec le cache en écriture IDE activé, les disques durs IDE non seulement n'écriront pas les données dans l'ordre, mais parfois retarderont l'écriture de certains blocs indéfiniment sous une charge disque importante. Un crash ou une coupure secteur pourra être à l'origine de sérieuses corruptions du système de fichiers. Par précaution le paramétrage par défaut de FreeBSD fut modifié. Malheureusement, le résultat fut une telle perte de performances que nous avons réactivé le cache en écriture après cette version de FreeBSD. Vous devriez contrôler la valeur par défaut sur votre système en examinant la variable sysctl hw.ata.wc. Si le cache en écriture des disques IDE est désactivé, vous pouvez le réactiver en positionnant la variable à 1. Cela doit être fait à partir du chargeur au démarrage. Tenter de le faire après le démarrage du noyau n'aura aucun effet. Pour plus d'informations, veuillez consulter la page de manuel &man.ata.4;. <literal>SCSI_DELAY</literal> (<varname>kern.cam.scsi_delay</varname>) SCSI_DELAY kern.cam.scsi_delay L'option de configuration du noyau SCSI_DELAY peut être utilisée pour réduire le temps de démarrage du système. Le délai par défaut est important et peut être responsable de plus de 15 secondes d'attente lors du processus de démarrage. Réduire ce délai à 5 secondes est généralement suffisant (tout particulièrement avec les disques modernes). Les versions de &os; récentes (5.0 et suivantes) devraient utiliser l'option de démarrage kern.cam.scsi_delay. Cette option de démarrage et celle de configuration du noyau acceptent des valeurs en millisecondes et non pas en secondes. Les “Soft Updates” Soft Updates tunefs Le programme &man.tunefs.8; peut être utilisé pour régler finement un système de fichiers. Ce programme dispose de nombreuses options différentes, mais pour l'instant nous nous intéresserons uniquement à l'activation et la désactivation des “Soft Updates”, ce qui fait avec: &prompt.root; tunefs -n enable /filesystem &prompt.root; tunefs -n disable /filesystem Un système de fichiers ne peut être modifié avec &man.tunefs.8; tant qu'il est monté. Un bon moment pour activer les “Soft Updates” est avant que les partitions ne soient montées en mode mono-utilisateur. Depuis FreeBSD 4.5, il est possible d'activer les “Soft Updates” au moment de la création du système de fichiers, avec l'utilisation de l'option -U de la commande &man.newfs.8;. Les “Soft Updates” améliorent de façon drastique les performances sur les méta-données, principalement la création et la suppression de fichier, par l'utilisation d'un cache mémoire. Nous recommandons d'activer les “Soft Updates” sur tous vos systèmes de fichiers. Il y a deux inconvénients aux “Soft Updates” que vous devez connaître: tout d'abord, les “Soft Updates” garantissent la cohérence du système de fichiers en cas de crash mais pourront facilement être en retard de quelques secondes (voir même une minute!) dans la mise à jour du disque. Si votre système plante il se peut que vous perdiez plus de travail que dans d'autres cas. Deuxièmement, les “Soft Updates” retardent la libération des blocs du système de fichiers. Si vous avez un système de fichiers (comme le système de fichiers racine) qui est presque plein, effectuer une mise à jour majeure, comme un make installworld, peut mener à un manque d'espace sur le système de fichiers et faire échouer la mise à jour. Plus de détails à propos des “Soft Updates” Soft Updates détails Il y a deux approches traditionnelles pour écrire les méta-données d'un système de fichiers sur le disque (mise à jour des méta-données et mise à jour des éléments sans données comme les inodes ou les répertoires). Historiquement, le comportement par défaut était d'écrire les mises à jour des méta-données de façon synchrone. Si un répertoire a été modifié, le système attendait jusqu'à ce que le changement soit effectivement écrit sur le disque. Les tampons des données de fichier (contenu du fichier) passaient par le cache mémoire et étaient copiés sur le disque plus tard de façon asynchrone. L'avantage de cette implémentation est qu'elle est effectuée sans risque. S'il y a un problème durant une mise à jour, les méta-données sont toujours dans un état consistant. Un fichier est soit créé complètement soit pas du tout. Si les blocs de données d'un fichier n'ont pas trouvé leur chemin du cache mémoire vers le disque au moment du crash, &man.fsck.8; est capable de s'en apercevoir et de réparer le système de fichiers en fixant la taille du fichier à 0. De plus, l'implémentation est claire et simple. L'inconvénient est que la modification des méta-données est lente. Un rm -r, par exemple, touche à tous les fichiers dans un répertoire séquentiellement, mais chaque modification du répertoire (effacement d'un fichier) sera écrite de façon synchrone sur le disque. Cela comprend les mises à jour du répertoire lui-même, de la table des inodes, et éventuellement celles sur des blocs indirects alloués par le fichier. Des considérations semblables s'appliquent à la création d'importantes hiérarchies ((tar -x). Le deuxième cas est la mise à jour asynchrone des méta-données. C'est le comportement par défaut de Linux/ext2fs et de l'usage de mount -o async pour l'UFS des systèmes BSD. Toutes les mises à jour des méta-données passent également par l'intermédiaire d'un cache mémoire, c'est à dire, qu'elles seront mélangées aux mises à jour des données du contenu du fichier. L'avantage de cette implémentation est qu'il n'y a pas besoin d'attendre jusqu'à l'écriture sur le disque de chaque mise à jour de méta-données, donc toutes les opérations qui sont à l'origine d'une grande quantité de mise à jour de méta-données fonctionnent bien plus rapidement que dans le cas synchrone. De plus, l'implémentation est toujours claire et simple, il y a donc peu de risque qu'un bogue se cache dans le code. L'inconvénient est qu'il n'y a aucune garantie du tout sur la cohérence du système de fichiers. S'il y a un problème durant une opération qui met à jour une grande quantité de méta-données (comme une coupure secteur, ou quelqu'un appuyant sur le bouton reset), le système de fichiers sera laissé dans un état imprévisible. Il n'y a aucune opportunité d'examiner l'état du système de fichiers quand le système est à nouveau relancé; les blocs de données d'un fichier pourraient déjà avoir été inscrits sur le disque alors que la mise à jour de la table des inodes ou du répertoire associé n'a pas été faite. Il est en fait impossible d'implémenter un fsck qui est capable de nettoyer le chaos résultant (parce que l'information nécessaire n'est pas disponible sur le disque). Si le système de fichiers a été endommagé irrémédiablement, le seul choix est de le recréer avec &man.newfs.8; et de récupérer les données à partir de sauvegardes. La solution commune pour ce problème fut d'implémenter une région de trace, dont on fait souvent référence sous le terme de journalisation, bien que ce terme ne soit pas toujours utilisé de façon cohérente et est occasionnellement utilisé pour d'autres formes de transaction avec trace. Les mises à jour des méta-données sont toujours écrites de façon synchrone, mais seulement sur une petite région du disque. Elles seront plus tard déplacées vers leur emplacement correct. Parce que la région de trace est une petite région contiguë sur le disque, il n'y a pas de grandes distances de déplacement pour les têtes des disques, même durant les opérations importantes, donc ces opérations sont plus rapides que les mises à jour synchrones. De plus la complexité de l'implémentation est relativement limitée, donc le risque de présence de bogues est faible. Un inconvénient est que toutes les méta-données sont écrites deux fois (une fois dans la région de trace et une fois sur l'emplacement correct) donc pour un fonctionnement normal, une baisse des performances pourra en résulter. D'autre part, dans le cas d'un crash, toutes les opérations sur les méta-données en attente peuvent rapidement être annulées ou complétées à partir de la zone de trace après le redémarrage du système, ayant pour résultat un démarrage rapide du système de fichiers. Kirk McKusick, le développeur du FFS de Berkeley, a résolu le problème avec les “Soft Updates”: toutes les mises à jour des méta-données sont conservées en mémoire et inscrites sur le disque selon une séquence ordonnée (“mise à jour ordonnée des méta-données”). Ceci a pour effet, dans le cas d'un nombre d'opérations sur les méta-données important, que les dernières mises à jour sur un élément “attrapent” les premières si ces dernières sont encore en mémoire et n'ont pas encore été inscrites sur le disque. Donc toutes les opérations sur, par exemple, un répertoire sont généralement effectuées en mémoire avant que la mise à jour ne soit écrite sur le disque (les blocs de données sont ordonnés en fonction de leur position de sorte à ce qu'ils ne soient pas sur le disque avant leur méta-données). Si le système crash, cela provoque un “retour dans les traces” implicite: toutes les opérations qui n'ont pas trouvé leur chemin vers le disque apparaissent comme si elles n'avaient jamais existé. Un état cohérent du système de fichiers est maintenu et apparaît comme étant celui de 30 ou 60 secondes plus tôt. L'algorithme utilisé garantie que toutes les ressources utilisées soient marquées avec leur bons “bitmaps”: blocs et inodes. Après un crash, les seules erreurs d'allocation de ressources qui apparaissent sont les ressources qui ont été marquées comme “utilisées” et qui sont en fait ”libre”. &man.fsck.8; reconnaît cette situation, et libère les ressources qui ne sont plus utilisées. On peut ignorer sans risque l'état “sale” d'un système de fichiers après un crash en forçant son montage avec mount -f. Afin de libérer les ressources qui peuvent être inutilisées, &man.fsck.8; doit être exécuté plus tard. C'est l'idée qu'il y a derrière le “background fsck” (fsck en tâche de fond): au démarrage du système, seule un “snapshot” (photographie) du système de fichiers est prise. La commande fsck peut être exécutée plus tard sur ce système de fichiers. Tous les systèmes de fichiers peuvent être montés “sales”, donc le système passe en mode multi-utilisateurs. Ensuite, les fsck en tâche de fond seront programmés pour tous les systèmes de fichiers pour lesquels c'est nécessaire, pour libérer les ressources qui peuvent être inutilisées (les systèmes qui n'utilisent pas les ‘Soft Updates” ont toujours besoin du fsck en avant plan). L'avantage est que les opérations sur les méta-données sont presque aussi rapides que les mises à jour asynchrones (i.e. plus rapide qu'avec le “logging” - traçage, qui doit écrire les méta-données deux fois). Les inconvénients sont la complexité du code (impliquant un haut risque de bogues dans une zone qui est hautement sensible en raison de risque perte de données utilisateur), et une plus grande consommation en mémoire. De plus il y a quelques particularités que l'on peut rencontrer lors de l'utilisation. Après un crash, l'état du système apparaît être en quelque sorte “plus vieux”. Dans des situations où l'approche synchrone classique aurait donné lieu à des fichiers de taille nulle restant après le fsck, ces fichiers n'existent pas du tout avec un système de fichiers utilisant les “Soft Updates” parce que ni les méta-données ni les contenus de fichiers n'ont jamais été inscrits sur le disque. L'espace disque n'est pas rendu tant que les mises à jour n'ont pas été inscrites sur le disque, ce qui peut se produire quelques temps après l'exécution de rm. Cela peut être à l'origine de problèmes quand on installe une grande quantité de données sur un système de fichiers qui ne dispose pas de suffisamment d'espace pour contenir tous les fichiers deux fois. Optimisation des limitations du noyau Optimisation limitations du noyau Limitations sur les fichiers et les processus <varname>kern.maxfiles</varname> kern.maxfiles Le paramètre kern.maxfiles peut être augmenté ou diminué en fonction des besoins du système. Cette variable indique le nombre maximal de descripteurs de fichier sur votre système. Quand la table de descripteurs de fichier est pleine, le message file: table is full s'affichera régulièrement dans le tampon des messages système, qui peut être visualisé avec la commande dmesg. Chaque fichier ouvert, chaque “socket”, ou chaque emplacement en pile utilise un descripteur de fichier. Un serveur important peut facilement demander plusieurs milliers de descripteurs de fichiers, en fonction du type et du nombre de services s'exécutant en même temps. La valeur par défaut de kern.maxfile est fixée par l'option dans votre fichier de configuration du noyau. kern.maxfiles augmente proportionnellement avec la valeur de . Quand vous compilez un noyau sur mesure, il est bon de paramétrer cette option en fonction de l'utilisation de votre système. Ce nombre fixe la plupart des limites pré-définies du noyau. Même si une machine de production pourra ne pas avoir en réalité 256 utilisateurs connectés simultanément, les ressources requises pourront être semblables pour un serveur web important. A partir de FreeBSD 4.5, positionner à 0 dans votre fichier de configuration du noyau, le système choisira une valeur raisonnable par défaut basée sur la quantité de mémoire présente sur votre système. <varname>kern.ipc.somaxconn</varname> kern.ipc.somaxconn La variable sysctl kern.ipc.somaxconn limite la taille de la file d'attente acceptant les nouvelles connexions TCP. La valeur par défaut de 128 est généralement trop faible pour une gestion robuste des nouvelles connexions - dans un environement de serveur web très + dans un environnement de serveur web très chargé. Pour de tels environnements, il est recommandé d'augmenter cette valeur à 1024 ou plus. Le daemon en service peut de lui-même limiter la taille de la file d'attente (e.g. &man.sendmail.8;, ou Apache) mais disposera, la plupart du temps, d'une directive dans son fichier de configuration pour ajuster la taille de la file d'attente. Les files d'attentes de grandes tailles sont plus adaptées pour éviter les attaques par déni de service (DoS). Limitations réseau L'literal du noyau NMBCLUSTERS fixe la quantité de Mbuf;s disponibles pour le système. Un serveur à fort trafic avec un nombre faible de Mbuf;s sous-emploiera les capacités de FreeBSD. Chaque “cluster” représente approximativement 2 Ko de mémoire, donc une valeur de 1024 représente 2 mégaoctets de mémoire noyau réservée pour les tampons réseau. Un simple calcul peut être fait pour déterminer combien sont nécessaires. Si vous avez un serveur web qui culmine à 1000 connexions simultanées, et que chaque connexion consomme un tampon de réception de 16Ko et un tampon d'émission de 16 Ko, vous avez approximativement besoin de 32 Mo de tampon réseau pour couvrir les besoin du serveur web. Un bon principe est de multiplier ce nombre par 2, soit 2x32 Mo / 2 Ko = 64 Mo / 2 Ko =32768. - Nous recommendons des valeurs comprises entre 4096 et 32768 + Nous recommandons des valeurs comprises entre 4096 et 32768 pour les machines avec des quantités de mémoire plus élevées. Vous ne devriez, dans aucun circonstance, spécifier de valeur élevée arbitraire pour ce paramètre étant donné que cela peut être à l'origine d'un plantage au démarrage. L'option de &man.netstat.1; peut être utilisée pour observer l'utilisation des clusters. La variable kern.ipc.nmbclusters configurable au niveau du chargeur est utilisée pour ajuster cela au démarrage. Seules les anciennes versions de &os; vous demanderont d'utiliser l'option de configuration du noyau NMBCLUSTERS. Pour les serveurs chargés qui font une utilisation intensive de l'appel système &man.sendfile.2;, il peut être nécessaire d'augmenter le nombre de tampons &man.sendfile.2; par l'intermédiaire de l'option de configuration du noyau NSFBUFS ou en fixant sa valeur dans le fichier /boot/loader.conf (consultez la page de manuel &man.loader.8; pour plus de détails). Un indicateur de la nécessité d'ajuster ce paramètre est lorsque des processus sont dans l'état sfbufa. La variable sysctl kern.ipc.nsfbufs est un aperçu en lecture seule de la variable du noyau. Ce paramètre s'ajuste de façon optimale avec kern.maxusers, il peut être cependant nécessaire de l'ajuster en fonction des besoins. Même si une socket a été marquée comme étant non-bloquante, un appel de &man.sendfile.2; sur la socket non-bloquante peut résulter en un blocage de l'appel &man.sendfile.2; jusqu'à ce que - suffisament de struct sf_buf soient + suffisamment de struct sf_buf soient libérées. <varname>net.inet.ip.portrange.*</varname> net.inet.ip.portrange.* Les variables net.inet.ip.portrange.* contrôlent les intervalles de ports automatiquement alloués aux sockets TCP et UDP. Il y a trois intervalles: un intervalle bas, un intervalle par défaut, et intervalle un haut. La plupart des programmes réseau utilisent l'intervalle par défaut qui est contrôlé par net.inet.ip.portrange.first et net.inet.ip.portrange.last, qui ont pour valeur par défaut respectivement 1024 et 5000. Ces intervalles de ports sont utilisés pour les connexions sortantes, et il est possible de se trouver à court de ports dans certaines conditions. Cela arrive le plus souvent quand votre système fait tourner un proxy web très chargé. L'intervalle de ports n'est pas un problème quand vous exécutez des serveurs qui ne gèrent principalement que des connexions entrantes, comme un server web classique, ou qui ont un nombre de connexions sortantes limitées comme un relai de messagerie. Pour les cas où vous risquez d'être à court de ports, il est recommandé d'augmenter légèrement net.inet.ip.portrange.last. Une valeur de 10000, 20000 ou 30000 doit être suffisante. Vous devriez également penser au problème du coupe-feu lors du changement de l'intervalle des ports. Certains coupes-feu peuvent bloquer de grands intervalles de ports (en général les ports inférieurs) et s'attendent à ce que les systèmes utilisent les intervalles supérieurs pour les connexions sortantes — pour cette raison il est conseillé de diminuer net.inet.ip.portrange.first. Le produit délai-bande passante TCP limitation du produit délai-bande passante TCP net.inet.tcp.inflight_enable La limitation du produit délai-bande passante TCP est semblable au TCP/Vegas sous NetBSD. Elle peut être activée en positionnant à 1 la variable net.inet.tcp.inflight_enable. Le système tentera alors de calculer le produit délai-bande passante pour chaque connexion et limitera la quantité de données en attente à la quantité juste nécessaire au maintient d'un flux de sortie optimal. Cette fonctionnalité est utile si vous diffusez - des données par l'intermédiare de modems, de + des données par l'intermédiaire de modems, de connexions Ethernet Gigabit, ou même de liaisons hauts débits WAN (ou toute autre liaison avec un produit délai-bande passante élevé), tout particulièrement si vous utilisez également le dimensionnement des fenêtres d'émission ou que vous avez configuré une fenêtre d'émission importante. Si vous activez cette option, vous devriez également vous assurer que net.inet.tcp.inflight_debug est positionnée à 0 (désactive le débogage), et pour une utilisation en production, fixer net.inet.tcp.inflight_min à au moins 6144 peut être bénéfique. Notez, cependant, que fixer des - minimas élevés peut désactiver la + minima élevés peut désactiver la limitation de bande passante selon la liaison. La fonction de limitation diminue la quantité de données accumulées dans les files d'attente intermédiaire de routage et de commutation, et diminue également la quantité de données présentes dans les files d'attente de l'interface de la machine locale. Avec moins de paquets dans les files d'attente, les connexions interactives, tout particulièrement sur des modems lents, seront en mesure de fonctionner avec des temps d'aller-retour plus faible. Mais cette fonctionnalité n'affecte que la transmission de données (transmission côté serveur). Ceci n'a aucun effet sur la réception de données (téléchargement). Modifier net.inet.tcp.inflight_stab n'est pas recommandé. Ce paramètre est fixé par défaut à la valeur 20, représentant au maximum 2 paquets ajoutés à la fenêtre de calcul du produit délai-bande passante. La fenêtre supplémentaire est nécessaire pour stabiliser l'algorithme et améliorer la réponse aux changements de conditions, mais il peut en résulter des temps de ping plus élevés sur les liaisons lentes (mais cependant inférieurs à ce que vous obtiendriez sans l'algorithme de limitation). Dans de tels cas, vous pouvez essayer de réduire ce paramètre à 15, 10, ou 5, et vous pouvez avoir à réduire le paramètre net.inet.tcp.inflight_min (par exemple à 3500) pour obtenir l'effet désiré. Ces paramètres ne doivent être réduits qu'en dernier ressort. Ajouter de l'espace de pagination Peu importe comment vous l'avez pensé, parfois un système ne fonctionne pas comme prévu. Si vous trouvez que vous avez besoin de plus d'espace de pagination, il est assez simple d'en rajouter. Vous avez trois manières d'augmenter votre espace de pagination: ajouter un nouveau disque dur, activer la pagination sur NFS, et créer un fichier de pagination sur une partition existante. Espace de pagination sur un nouveau disque dur La meilleur façon d'ajouter de l'espace de pagination, bien sûr, est d'utiliser ceci comme excuse pour ajouter un autre disque dur. Vous pouvez toujours utiliser un autre disque après tout. Si vous pouvez faire cela, allez relire la discussion sur l'espace de pagination dans la du Manuel pour des suggestions sur la meilleure façon d'arranger votre espace de pagination. Espace de pagination sur NFS L'espace de pagination sur NFS n'est recommandé que si vous n'avez pas de disque dur local sur lequel avoir l'espace de pagination. Avoir son espace de pagination sur NFS sera lent et inefficace sur les versions de FreeBSD antérieures - à la branche 4.X. c'est raisonnablement rapide et efficace + à la branche 4.X. C'est raisonnablement rapide et efficace sur 4.0-RELEASE et suivante. Même avec une version récente de FreeBSD, la pagination sur NFS sera limitée par la bande passante du réseau et sera un fardeau supplémentaire pour le serveur NFS. Fichiers de pagination Vous pouvez créer un fichier d'une taille spécifique pour l'utiliser comme fichier de pagination. Dans notre exemple nous utiliserons un fichier de 64MO appelé /usr/swap0. Vous pouvez, bien sûr, utiliser le nom de votre choix. Créer un fichier de pagination sous FreeBSD 4.X Soyez sûr que votre configuration de noyau inclut le pilote vnode. Ce n'est pas le cas dans les versions récentes de GENERIC. pseudo-device vn 1 #Vnode driver (turns a file into a device) Créez un périphérique vn: &prompt.root; cd /dev &prompt.root; sh MAKEDEV vn0 Créez un fichier de pagination (/usr/swap0): &prompt.root; dd if=/dev/zero of=/usr/swap0 bs=1024k count=64 Fixez les bonnes permissions sur /usr/swap0: &prompt.root; chmod 0600 /usr/swap0 Activez le fichier de pagination dans /etc/rc.conf: swapfile="/usr/swap0" # Set to name of swapfile if aux swapfile desired. Redémarrez la machine ou activez directement le fichier de pagination: &prompt.root; vnconfig -e /dev/vn0b /usr/swap0 swap Créer un fichier de pagination sous FreeBSD 5.X Assurez-vous que votre configuration de noyau inclut le pilote de disque mémoire (&man.md.4;). Il se trouve par défaut dans le noyau GENERIC. device md # Memory "disks" Créez un fichier de pagination (/usr/swap0): &prompt.root; dd if=/dev/zero of=/usr/swap0 bs=1024k count=64 Fixez les bonnes permissions sur /usr/swap0: &prompt.root; chmod 0600 /usr/swap0 Activez le fichier de pagination dans /etc/rc.conf: swapfile="/usr/swap0" # Set to name of swapfile if aux swapfile desired. Redémarrez la machine ou activez directement le fichier de pagination: &prompt.root; mdconfig -a -t vnode -f /usr/swap0 -u 0 && swapon /dev/md0 Hiten Pandya Ecrit par Tom Rhodes Gestion de l'énergie et des ressources Il est vraiment important d'utiliser les ressources matérielles d'une manière efficace. Avant l'apparition de l'ACPI, il était très difficile pour les systèmes d'exploitation de gérer l'utilisation de l'alimentation et la température d'un système. Le matériel était contrôlé par certaines interfaces du BIOS, comme le système Plug and Play BIOS (PNPBIOS), l'Advanced Power Management (APM) et ainsi de suite. La gestion de l'énergie et des ressources est un des éléments clés d'un système d'exploitation moderne. Par exemple, vous pourrez vouloir qu'un système d'exploitation surveille certaines limites (et - eventuellement vous alerte), au cas où la + éventuellement vous alerte), au cas où la température de votre système augmente de façon inattendue. Dans cette section, nous fournirons une information complète au sujet de l'ACPI. Il sera fait référence à des documents supplémentaires en fin de section pour plus de détails. Soyez conscient que l'ACPI est disponible sur les systèmes FreeBSD 5.X et suivants par défaut sous la forme d'un module noyau. Sous &os; 4.9, l'ACPI peut être activé en ajoutant la ligne device acpica à la configuration du noyau et en le recompilant. Qu'est-ce que l'ACPI? L'interface de configuration et d'alimentation avancée (ACPI, Advanced Configuration and Power Interface) est une norme créée par un ensemble de constructeurs pour fournir une interface standard à la gestion des ressources et de l'énergie. C'est un élément clé dans le contrôle et la configuration par le système d'exploitation de de la gestion d'énergie, i.e., il permet plus de contrôle et flexibilité au système d'exploitation. Les systèmes modernes ont “repoussé” les limites des interfaces “Plug and Play” actuelles (comme l'APM, qui est utilisé sous FreeBSD 4.X), avant l'apparition de l'ACPI. L'ACPI est le descendant direct de l'APM (Advanced Power Management - gestion avancée de l'énergie). Les imperfections de la gestion avancée de l'énergie (APM) Le système de gestion avancée de l'énergie (APM) gère l'utilisation de l'énergie par un système en fonction de son activité. Le BIOS APM est fourni par le fabricant (du système) et est spécifique à la plateforme matérielle. Un pilote APM au niveau du système d'exploitation gère l'accès à l'interface logicielle APM qui autorise la gestion des niveaux de consommation. L'APM présente quatre problèmes majeurs. Tout d'abord la gestion de l'énergie est effectuée par le BIOS (spécifique au constructeur), et le système d'exploitation n'en a aucune connaissance. Un exemple de ce problème, est lorsque l'utilisateur fixe des valeurs pour le temps d'inactivité d'un disque dur dans le BIOS APM, qui une fois dépassé, provoque l'arrêt du disque (par le BIOS) sans le consentement du système d'exploitation. Deuxièmement, la logique de l'APM est interne au BIOS, et agit indépendamment du système d'exploitation. Cela signifie que les utilisateurs ne peuvent corriger les problèmes de leur BIOS APM qu'en flashant un nouveau BIOS; c'est une opération dangereuse, qui si elle échoue peut laisser le système dans un état - irrécupérable. Troisièment, l'APM est une + irrécupérable. Troisièmement, l'APM est une technologie spécifique au constructeur, ce qui veut dire qu'il y a beaucoup de redondances (duplication des efforts) et de bogues qui peuvent être trouvées dans le BIOS d'un constructeur, et qui peuvent ne pas être corrigées dans d'autres BIOS. Et pour terminer, le dernier problème - est le fait que le BIOS APM n'a pas suffisament d'espace pour + est le fait que le BIOS APM n'a pas suffisamment d'espace pour implémenter une politique sophistiquée de gestion de l'énergie, ou une politique qui peut s'adapter parfaitement aux besoins de la machine. Le BIOS Plug and Play (PNPBIOS) n'était pas fiable dans de nombreuses situations. Le PNPBIOS est une technologie 16 bits, le système d'exploitation doit utiliser une émulation 16 bits afin de faire l'interface avec les méthodes PNPBIOS. Le pilote APM &os; est documenté dans la page de manuel &man.apm.4;. Configurer l'<acronym>ACPI</acronym> Le pilote acpi.ko est par défaut chargé par le &man.loader.8; au démarrage et ne devrait pas être compilé dans le noyau. La raison derrière cela est que les modules sont plus facile à manipuler, par exemple pour passer à une autre version du module acpi.ko sans avoir à recompiler le noyau. Cela présente l'avantage de rendre les tests aisés. Une autre raison est que lancer l'ACPI après qu'un système ait terminé son lancement n'est pas très utile, et dans certain cas peut même être fatal. Dans le doute, désactiver l'ACPI. Ce pilote ne devrait et ne peut être déchargé car le bus système l'utilise pour différentes intéraction avec le matériel. L'ACPI peut être déactivé avec l'utilitaire &man.acpiconf.8;. En fait la plupart des interactions avec ACPI peuvent être effectuées via &man.acpiconf.8;. A la base cela signifie que si quelque chose en rapport avec l'ACPI apparaît dans la sortie de &man.dmesg.8;, alors c'est déjà en fonctionnement. L'ACPI et l'APM - ne peuvent coéxister et devraient être utilisé + ne peuvent coexister et devraient être utilisé séparément. Le dernier chargé s'arrêtera s'il détecte l'autre en - focntionnement. + fonctionnement. Dans sa plus simple forme, l'ACPI peut être utilisé pour mettre en veille un système avec &man.acpiconf.8;, les options et 1-5. La plupart des utilisateurs n'auront besoin que de 1. L'option 5 provoquera un arrêt de l'alimentation par logiciel, effet identique à un: &prompt.root; halt -p D'autres options sont disponibles. Consultez la page de manuel d'&man.acpiconf.8; pour plus d'informations. Nate Lawson Ecrit par Peter Schultz Avec la collaboration de Tom Rhodes Utiliser et déboguer l'<acronym>ACPI</acronym> sous &os; L'ACPI est une nouvelle méthode de recherche des périphériques, de gestion de l'énergie, et fourni un accès standardisé à différents matériels gérés auparavant par le BIOS. Des progrès ont été fait vers un fonctionnement de l'ACPI sur tous les systèmes, mais des bogues dans le bytecode du langage machine ACPI (ACPI Machine LanguageAML), des imperfections dans les sous-systèmes du noyau &os;, et des bogues dans l'interpréteur ACPI-CA d'&intel; continuent d'apparaître. Ce document est destiné à vous permettre d'aider les développeurs du système ACPI sous &os; à identifier la cause originelle des problèmes que vous observez et à déboguer et développer une solution. Merci de lire ce document et nous espérons pouvoir résoudre les problèmes de votre système. Soumettre des informations de débogage Avant de soumettre un problème, assurez-vous d'utiliser la dernière version de votre BIOS, et si elle est disponible, la dernière version du firmware du contrôleur utilisé. Pour ceux désirant soumettre directement un problème, veuillez faire parvenir les informations suivantes à la liste freebsd-acpi@FreeBSD.org: Description du comportement défectueux, en ajoutant le type et le modèle du système et tout ce qui peut causer l'apparition du bogue. Notez également le plus précisément possible - quand le bogue a commencé à se manisfester s'il + quand le bogue a commencé à se manifester s'il est nouveau. La sortie de &man.dmesg.8; après un boot -v, y compris tout message généré lors de la manifestation du bogue. La sortie de &man.dmesg.8; après un boot -v avec l'ACPI désactivé, si cette désactivation corrige le problème. La sortie de sysctl hw.acpi. C'est également un bon moyen de déterminer quelles fonctionnalités sont offertes par votre système. Une URL où peut être trouvé votre code source ACPI (ACPI Source Language—ASL). N'envoyez pas directement l'ASL sur la liste de diffusion, ce fichier peut être très gros. Vous pouvez générer une copie de votre ASL en exécutant la commande suivante: &prompt.root; acpidump -t -d > name-system.asl (Remplacez name par votre nom d'utilisateur et system par celui du constructeur/modèle. Par exemple: njl-FooCo6000.asl) La plupart des développeurs lisent la liste &a.current; mais soumettez également les problèmes rencontrés à la liste &a.acpi.name; afin d'être sûr qu'ils seront vus. Soyez patient, nous avons tous un travail à plein temps qui nous attend ailleurs. Si votre bogue n'est pas immédiatement apparent, nous vous demanderons probablement de soumettre un PR par l'intermédiaire de &man.send-pr.1;. Quand vous remplirez un PR, veillez à inclure les mêmes informations que celles - précisées précedemment. Cela nous aidera + précisées précédemment. Cela nous aidera à cerner et à résoudre le problème. N'envoyez pas de PR sans avoir contacté auparavant la liste &a.acpi.name; étant donné que nous utilisons les PRs comme pense-bêtes de problèmes existants, et non pas comme mécanisme de rapport. Il se peut que votre problème puisse avoir déjà été signalé par quelqu'un d'autre. Information de fond L'ACPI est présent sur tous les ordinateurs modernes compatibles avec l'une des architectures ia32 (x86), ia64 (Itanium), et amd64 (AMD). La norme complète définit des fonctionnalités comme la gestion des performances du CPU, des contrôles des niveaux d'énergie, des zones de températures, divers systèmes d'utilisation des batteries, des contrôleurs intégrés, et l'énumération du bus. La plupart des systèmes n'implémentent pas l'intégralité des fonctionnalités de la norme. Par exemple, un ordinateur de bureau n'implémentera généralement que la partie énumération de bus alors qu'un ordinateur portable aura également le support de la gestion du refroidissement et de la batterie. Les ordinateurs portables disposent également des modes de mise en veille et de réveil, avec toute la complexité qui en découle. Un système compatible ACPI dispose de divers composants. Les fabricants de BIOS et de circuits fournissent des tables de description (FADT) fixes en mémoire qui définissent des choses comme la table APIC (utilisée par les systèmes SMP), les registres de configuration, et des valeurs de configuration simples. De plus, est fournie une table de bytecode (la table différenciée de description du systèmeDifferentiated System Description Table DSDT) qui spécifie sous forme d'une arborescence l'espace des noms des périphériques et des méthodes. Le pilote ACPI doit analyser les tables, implémenter un interpréteur pour le bytecode, et modifier les pilotes de périphériques et le noyau pour qu'ils - accèptent des informations en provenance du + acceptent des informations en provenance du sous-système ACPI. Pour &os;, &intel; fourni un interpréteur (ACPI-CA) qui est partagé avec Linux et NetBSD. L'emplacement du code source de l'interpréteur ACPI-CA est src/sys/contrib/dev/acpica. Le code glu permettant à ACPI-CA de fonctionner sous &os; se trouve dans src/sys/dev/acpica/Osd. Et enfin, les pilotes qui gèrent les différents périphériques ACPI se trouvent dans src/sys/dev/acpica. Problèmes courants Pour un fonctionnement correct de l'ACPI, il faut que toutes les parties fonctionnent correctement. Voici quelques problèmes courants, par ordre de fréquence d'apparition, et quelques contournements ou corrections possibles. Mise en veille/réveil L'ACPI dispose de trois modes de mise en veille en RAM (STR—Suspend To RAM), S1 à S3, et un mode de mise en veille vers le disque dur (STD—Suspend To Disk), appelé S4. Le mode S5 est un arrêt soft et est le mode dans lequel se trouve votre système quand il est branché mais pas allumé. Le mode S4 peut être implémenté de deux manières différentes. Le mode S4BIOS est une mise en veille vers le disque assistée par le BIOS. Le mode S4OS est implémenté intégralement par le système d'exploitation. Commencez par examiner la sortie de sysctl hw.acpi à la recherche d'éléments concernant les modes de mise en veille. Voici les résultats pour un Thinkpad: hw.acpi.supported_sleep_state: S3 S4 S5 hw.acpi.s4bios: 0 Cela signifie que nous pouvons utiliser acpiconf -s pour tester les modes S3, S4OS, et S5. Si était égal à 1, nous disposerions d'un support S4BIOS à la place de S4OS. Quand vous testez la mise en veille et le réveil, commencez avec le mode S1, pour voir s'il est supporté. Ce mode doit fonctionner dans la plupart des cas puisqu'il nécessite peu de support. Le mode S2 n'est pas implémenté, mais si vous en disposez, il est similaire au mode S1. La chose suivante à essayer est le mode S3. C'est le mode STR le plus avancé et il nécessite un support du pilote important pour réinitialiser correctement votre matériel. Si vous avez des problèmes au réveil de la machine, n'hésitez pas à contacter la liste &a.acpi.name; mais ne vous attendez pas à ce que le problème soit résolu puisqu'il y a de nombreux pilotes/matériels qui nécessitent plus de tests et de développement. Pour isoler le problème, retirez du noyau tous les pilotes de périphériques possibles. Si cela fonctionne, vous pouvez alors identifier le pilote fautif en chargeant les pilotes un à un jusqu'à l'apparition du problème. Généralement les pilotes binaires comme nvidia.ko, les pilotes d'affichage X11, ou les pilotes USB seront victimes de la plupart des problèmes tandis que ceux concernant les interfaces Ethernet fonctionneront normalement. Si vous pouvez charger/décharger les pilotes de périphériques correctement, vous pouvez automatiser cela en ajoutant les commandes appropriées dans les fichiers /etc/rc.suspend et /etc/rc.resume. Il y a un exemple en commentaire pour décharger ou charger un pilote. Essayez de fixer à zéro (0) si votre affichage est corrompu après un réveil de la machine. Essayez des valeurs plus grandes ou plus faibles pour pour voir si cela aide. Une autre méthode est d'essayer de charger une distribution Linux récente avec le support ACPI et tester la mise en veille et le réveil sur le même matériel. Si cela fonctionne sous Linux, c'est probablement donc un problème de pilotes &os; et déterminer quel pilote est responsable des disfonctionnements nous aidera à corriger le problème. Notez que les personnes qui maintiennent l'ACPI sous &os; ne s'occupe pas généralement des autres pilotes de périphériques (comme le son, le système ATA, etc.), aussi tout rapport concernant un problème de pilote devrait probablement en fin de compte être posté sur la liste &a.current.name; et communiqué au responsable du pilote. Si vous vous sentez une âme d'aventurier, commencez à ajouter des &man.printf.3;s de débogage dans un pilote problématique pour déterminer à quel moment dans sa fonction de réveil il se bloque. Enfin, essayez de désactiver l'ACPI et d'activer l'APM à la place, pour voir si la mise en veille et le réveil fonctionnent avec l'APM, tout particulièrement dans le cas de matériel ancien (antérieur à 2000). Cela prend du temps aux constructeurs de mettre en place le support ACPI et le matériel ancien aura sûrement des problèmes de BIOS avec l'ACPI. Blocages du système (temporaires ou permanents) La plupart des blocages système sont le résultat d'une perte d'interruptions ou d'une tempête d'interruptions. Les circuits ont beaucoup de problèmes en fonction de la manière dont le BIOS configure les interruptions avant le démarrage, l'exactitude de la table APIC (MADT), et le routage du System Control Interrupt (SCI). Les tempêtes d'interruptions peuvent être distinguées des pertes d'interruptions en contrôlant la sortie de la commande vmstat -i en examinant la ligne mentionnant acpi0. Si le compteur s'incrémente plusieurs fois par seconde, vous êtes victime d'une tempête d'interruptions. Si le système semble bloqué, essayez de basculer sous DDB (CTRL ALTESC sous la console) et tapez show interrupts. Votre plus grand espoir quand vous faites face à des problèmes d'interruptions est d'essayer de désactiver le support APIC avec la ligne hint.apic.0.disabled="1" dans le fichier loader.conf. Paniques Les paniques sont relativement rares dans le cas de l'ACPI et sont au sommet des priorités en matière de problèmes à corriger. Le premier point est d'isoler les étapes nécessaires à la reproduction de la panique (si possible) et d'obtenir une trace de débogage. Suivez l'aide sur l'activation de options DDB et la configuration d'une console série (lire la ) ou la configuration d'une partition &man.dump.8;. Vous pouvez obtenir une trace de débogage sous DDB avec la commande tr. Si vous devez recopier à la main la trace de débogage, assurez-vous de relever les cinq dernières lignes et les cinq premières ligne de la trace. Ensuite essayez d'isoler le problème en démarrant avec l'ACPI désactivé. Si cela fonctionne, vous pouvez isoler le sous-système ACPI en utilisant différentes valeurs pour l'option . Consultez la page de manuel &man.acpi.4; pour des exemples. Le système redémarre après une mise en veille ou un arrêt Tout d'abord, essayez de fixer hw.acpi.disable_on_poweroff="0" dans &man.loader.conf.5;. Cela empêche l'ACPI de désactiver divers événements lors du processus d'arrêt. Certains systèmes ont besoin d'avoir cette valeur fixée à 1 (valeur par défaut) pour la même raison. Cela corrige généralement le problème d'un système démarrant spontanément après une mise en veille ou un arrêt. Autres problèmes Si vous rencontrez d'autres problèmes avec l'ACPI (impossible de travailler avec une station d'amarrage, périphériques non détectés, etc.), veuillez envoyer un courrier descriptif à la liste de diffusion; cependant, certains de ces problèmes peuvent être relatifs à des partie incomplètes du sous-système ACPI et qui pourront prendre du temps à être implémentées. Soyez patient et prêt à tester les correctifs que nous pourront éventuellement vous envoyer. <acronym>ASL</acronym>, <command>acpidump</command>, et <acronym>IASL</acronym> Le problème le plus courant est le fait que les constructeurs fournissent des bytecodes erronés (ou plus simplement bogués!). Cela se manifeste généralement sur la console par des messages du noyau du type: ACPI-1287: *** Error: Method execution failed [\\_SB_.PCI0.LPC0.FIGD._STA] \\ (Node 0xc3f6d160), AE_NOT_FOUND La plupart du temps vous pouvez corriger ces problèmes en mettant à jour votre BIOS avec la dernière version disponible. La majorité des messages sur la console sont innofensifs mais si vous avez d'autres problèmes comme l'état de la batterie qui ne fonctionne pas, ce sont de bonnes raisons pour commencer à jeter un oeil à ces problèmes dans l'AML. Le bytecode, connu sous le nom d'AML, est compilé à partir d'un langage source appelé ASL. L'AML se trouve dans une table appelée DSDT. Pour obtenir une copie de votre ASL, utilisez &man.acpidump.8;. Vous devriez utiliser de paire les options (qui affiche le contenu des tables fixes) et (qui désassemble l'AML en ASL). Consultez la section Soumettre des informations de déboguage pour un exemple de syntaxe. Le tout premier test que vous pouvez effectuer est de recompiler votre ASL à la recherche d'erreurs. Les avertissements peuvent être généralement ignorés mais les erreurs sont des bogues qui normalement empêchent l'ACPI de fonctionner correctement. Pour recompiler votre ASL, utilisez la commande suivante: &prompt.root; iasl your.asl Correction de votre <acronym>ASL</acronym> A long terme, notre objectif est que tout le monde puisse avoir un système ACPI fonctionnant sans aucune intervention de l'utilisateur. Actuellement, nous sommes toujours en train de développer des solutions pour contourner les erreurs courantes faites par les fabricants de BIOS. L'interpréteur de µsoft; (acpi.sys et acpiec.sys) ne contrôle pas de façon stricte la conformité avec la norme, et par conséquent de nombreux fabricants de BIOS qui testent l'ACPI uniquement sous &windows; ne corrigent donc jamais leur ASL. Nous espérons poursuivre à identifier et documenter avec exactitude les comportements non-standards autorisés par l'interpréteur de µsoft; et les reproduire de manière à permettre à &os; de fonctionner sans obliger les utilisateurs à corriger leur ASL. Comme solution et pour nous aider à identifier ces comportements, vous pouvez corriger manuellement votre ASL. Si cela fonctionne pour vous, veuillez nous envoyer un &man.diff.1; de l'ancien et du nouveau ASL de façon à ce que nous puissions corriger le comportement incorrect dans ACPI-CA et rendre donc inutile à l'avenir votre correctif. Voici une liste des messages d'erreur courants, leur cause, et comment les corriger: Dépendances _OS Certains AMLs supposent que le monde n'est fait de que différentes versions de &windows;. Vous pouvez demander à &os; de s'annoncer comme étant n'importe quel système d'exploitation pour voir si cela corrige les problèmes que vous pouvez rencontrer. Une manière simple de faire cela est de fixer la variable hw.acpi.osname="Windows 2001" dans /boot/loader.conf ou avec une autre chaîne de caractères que vous trouvez dans l'ASL. <errorname>Missing Return statements</errorname> Certaines méthodes ne renvoient pas explicitement une valeur comme la norme le demande. Bien qu'ACPI-CA ne gère pas cela, &os; contourne ce problème en renvoyant implicitement la valeur. Vous pouvez également ajouter des Return statements explicites où cela est nécessaire si vous connaissez la valeur à renvoyer. Pour forcer iasl à compiler l'ASL, utilisez l'option . Remplacer l'<acronym>AML</acronym> par défaut Après avoir personnalisé votre.asl, vous voudrez le compiler, pour cela exécutez: &prompt.root; iasl your.asl Vous pouvez ajouter l'option pour forcer la création de l'AML, même s'il y a des erreurs lors de la compilation. Rappelez-vous que certaines erreurs (e.g., missing Return statements) sont automatiquement contournées par l'interpréteur. DSDT.aml est le fichier de sortie par défaut pour iasl. Vous pouvez le charger à la place de la version boguée de votre BIOS (qui est toujours présent dans la mémoire flash) en éditant le fichier /boot/loader.conf comme suit: acpi_dsdt_load="YES" acpi_dsdt_name="/boot/DSDT.aml" Assurez-vous de bien copier votre fichier DSDT.aml dans le répertoire /boot. Obtenir d'<acronym>ACPI</acronym> une sortie de débogage Le pilote ACPI dispose d'une fonction de débogage très flexible. Elle vous permet de spécifier un ensemble de sous-systèmes ainsi que le niveau de verbosité. Les sous-systèmes que vous désirez déboguer sont indiqués sous la forme de couches et sont divisés en composants ACPI-CA (ACPI_ALL_COMPONENTS) et en supports matériel ACPI (ACPI_ALL_DRIVERS). La verbosité de la sortie de débogage est spécifiée par un niveau et des intervalles de ACPI_LV_ERROR (rapporte juste les erreurs) à ACPI_LV_VERBOSE (tout). Le niveau est un masque de bits séparés par des espaces, aussi de nombreuses options peuvent être fixées à la fois. Dans la pratique, vous voudrez utiliser un console série pour afficher la sortie si les informations de débogage sont si importantes qu'elles dépassent le tampon des messages de la console. Une liste complète des couches individuelles et des niveaux peut être trouvée dans la page de manuel &man.acpi.4;. L'affichage des informations de débogage n'est pas activé par défaut. Pour l'activer, ajoutez la ligne options ACPI_DEBUG à votre fichier de configuration du noyau si l'ACPI est - compilé dans le noayu. Vous pouvez ajouter la ligne + compilé dans le noyau. Vous pouvez ajouter la ligne ACPI_DEBUG=1 à votre fichier /etc/make.conf pour l'activer de façon globale. Si l'ACPI est sous forme de module, vous pouvez recompiler votre module acpi.ko comme suit: &prompt.root; cd /sys/modules/acpi/acpi && make clean && make ACPI_DEBUG=1 Installez acpi.ko dans le répertoire /boot/kernel et indiquez le niveau et la couche désirée dans loader.conf. L'exemple suivant active les messages de débogage pour tous les composants ACPI-CA et tous les pilotes de matériel ACPI (CPU, LID, etc.). Il n'affichera que les messages d'erreur, c'est le niveau le moins verbeux. debug.acpi.layer="ACPI_ALL_COMPONENTS ACPI_ALL_DRIVERS" debug.acpi.level="ACPI_LV_ERROR" Si l'information que vous voulez est - déclenchée par un évenement particulier + déclenchée par un événement particulier (disons par exemple une mise en veille suivi d'un réveil), vous pouvez abandonner les modifications dans loader.conf et utiliser à la place sysctl pour indiquer la couche et le niveau après le démarrage et préparer votre système pour cet événement particulier. Les variables sysctl sont appelées de la même manière que dans le fichier loader.conf. Références Plus d'information au sujet de l'ACPI peut être trouvé aux emplacements suivants: La liste de diffusion &a.acpi; Les archives de la liste de diffusion ACPI Les archives de l'ancienne liste de diffusion ACPI La spécification ACPI 2.0 Les pages de manuel: &man.acpi.4;, &man.acpi.thermal.4;, &man.acpidump.8;, &man.iasl.8;, &man.acpidb.8; Ressource sur le débogage de la DSDT. (Utilise un exemple basé sur du matériel Compaq mais qui est en général intéressant.)