Copyright © 1999, 2000, 2001 par Gerard Beekmans
Copyright (c) 1999-2001, Gerard Beekmans
All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
Neither the name of LinuxFromScratch nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Ce livre est dédié à ma femme aimante au soutient indéfectible Beverly Beekmans.
Ce livre est destiné aux utilisateurs de Linux qui veulent configurer et personnaliser leur propre système Linux. Les raisons pour lesquelles vous voulez construire un tel système sont diverses. Peut-être en avez-vous marre des distributions qui sont souvent gonflées ou peut-être ne voulez-vous pas vous fier à des binaires pré-compilés pour des raions de sécurité. Il y a énormément de raisons pour lesquelles un utilisateur peut vouloir construire un système personnalisé. Si vous êtes un de ceux-là, ce livre est vraiment pour vous.
Les fruits récoltés en construisant votre propre système sont abondants, mais c'est un dur labeur. C'est un long chemin, mais à la fin vous pourrez vous prétendre être le fier propriétaire de votre propre système Linux, complètement taillé sur mesure. Vous déciderez vous-même de l'organisation des scripts de démarrage, de la hiérarchie du système de fichiers, de même vous choisirez vous-même dans quel répertoire installer les programmes, la version des logiciels à installer et plus encore. Peut-être que la raison principale est que vous voulez savoir exactement où tout est installé, pourquoi et comment.
Les utilisateurs qui ne veulent pas construire un système Linux complet à partir de zéro ne seront pas intéressés pour lire ce livre. Si vous voulez toutefois en apprendre plus sur ce qui se passe en coulisse, en particulier ce qui se passe entre le moment où vous démarrez l'ordinateur et le moment où apparaît le prompt, vous pouvez alors lire le " From Power Up To Bash Prompt" (P2B) HOWTO. Cet HOWTO construit un système minimum, un peu similaire à celui que ce livre utilise, mais il se concentre plus sur la façon d'installer un système amorçable plutôt qu'un système complet.
Pour décider de lire ce livre ou le P2B HOWTO, posez-vous cette question: "Est ce mon objectif principal d'avoir un système Linux que je vais construire moi-même et, au fur et à mesure, apprendre à quoi sert chaque composant, ou est-ce que je veux juste apprendre de nouvelles choses ?" Si vous voulez construire un système et apprendre, lisez ce livre. Si vous voulez juste apprendre les bases, alors le P2B HOWTO est certainement plus intéressant à lire.
Le " From Power Up To Bash Prompt" HOWTO est situé à l'adresse suivante: http://www.netspace.net.au/~gok/power2bash/
Ce livre est divisé en les parties suivantes. Bien qu'il y ait beaucoup d'informations redondantes dans certaines de ces parties, c'est la façon la plus facile de lire ce livre.
La première partie donne des informations d'ordre général à propos de ce livre (la version, où le récupérer, les nouveautés , les listes de diffusions, et comment rentrer en contact avec nous). Elle explique aussi plusieurs aspects importants qu'un utilisateur veut et a besoin de savoir avant de commencer à construire un système LFS.
La deuxième partie vous guide au travers de l'installation du système LFS qui sera la base pour tout le reste. Quelle que soit l'utilisation que vous ferez de ce système LFS flambant neuf, il sera construit sur les bases installées dans cette partie.
Ayant utilisé un certain nombre de distributions Linux différentes, je n'ai jamais eu entière satisfaction. Je n'aimais pas la manière dont les scripts de démarrage étaient organisés, la façon dont certains programmes étaient configurés par défaut, et bien d'autres choses. J'en suis venu à considérer que si je voulais être totalement satisfait avec un système Linux, je devrais le construire moi-même en partant de zéro, l'idéal étant de n'utiliser que le code source. Sans jamais utiliser un quelconque package précompilé, ni aucune aide venant d'un cédérom ou d'une disquette de démarrage qui installerait des utilitaires de base. Je me servirais de mon système Linux actuel pour construire mon propre système.
Au début, cette idée insensée semblait extrêmement difficile à réaliser et, par moments, presque impossible. Après avoir fait un tri de tous les types de problèmes de dépendance, de compilation, etc... un système Linux personnalisé a été créé et rendu totalement opérationnel. Je l'ai appelé LFS, ce qui signifie LinuxFromScratch (NdT : en français, "Linux en partant de zéro").
Nous allons construire le système LFS en utilisant une distribution Linux déjà installée, telle que Debian, SuSe, Slackware, Mandrake, RedHat, etc. Nul besoin de disquette de démarrage. Nous utiliserons un système Linux existant comme base (puisque nous aurons besoin d'un compilateur, d'un éditeur de liens, d'un éditeur de texte et d'autres outils).
Après avoir téléchargé les packages nécessaires à la constitution d'un système LFS, vous devrez créer une nouvelle partition native Linux, sur laquelle sera installé le système LFS.
L'étape suivante, abordée dans le Chapitre 5, est l'installation d'un nombre de packages liés statiquement et installés sur la partition LFS. Ces packages forment une suite de développement de base utilisée pour installer le système réel.
Le Chapitre 6 permet l'installation du système de base en question. Nous utiliserons le programme chroot pour commencer un nouveau shell, dont le répertoire root sera situé dans la partition LFS. En un sens, cela équivaut à redémarrer et avoir le noyau monté sur la partition LFS de la même manière qu'une partition root. Pourquoi nous ne redémarrons pas et, à la place, nous utilisons le programme chroot ? Parce qu'ainsi, vous conservez la possibilité d'utiliser votre système hôte. Tandis que le logiciel est en cours d'installation, vous pouvez passer sur une autre CV (Console Virtuelle) ou bureau X et continuer d'utiliser votre ordinateur.
Lorsque le logiciel est entièrement installé, on passera à la configuration des scripts de démarrage dans le Chapitre 7. Le Chapitre 8 traite quant à lui de la configuration du chargeur de démarrage Linux : vous pourrez alors redémarrer votre système sous LFS. La dernière étape, après le redémarrage, est la configuration des outils de réseau et des scripts de démarrage. Une fois cette dernière étape exécutée, vous aurez fini ce livre et votre système LFS sera prêt à l'emploi.
En résumé, telle est la démarche à suivre. Des informations détaillées sur les différentes étapes sont fournies tout au long des chapitres au fur et à mesure de votre progression. Si tout n'est pas encore clair, ne vous inquiétez pas. Cela ne saurait tarder.
Veuillez lire le Chapitre 2 avec attention car il explique un certain nombre de points importants qu'il vous faut connaître avant d'en arriver au Chapitre 5 et au-delà.
Ceci est le livre LFS INTEL version 3.0-pre2 daté du April 14th, 2001. Si cette version date de plus d'un mois, une version plus récente pourrait être disponible au téléchargement sur la page d'accueil de LFS.
Ci-dessous se trouve une liste de nos sites miroirs HTTP et FTP en date du 12 avril 2001. Cette liste peut ne plus être exacte. Les dernières informations sont accessibles sur notre site web à http://www.linuxfromscratch.org.
Columbus, Ohio, Etats-Unis - http://www.linuxfromscratch.org/intro/
Etats-Unis - http://lfs.sourceforge.net/intro/
Canmore, Alberta, Canada - http://www.ca.linuxfromscratch.org/intro/
Braunschweig, Allemagne - http://www.de.linuxfromscratch.org/intro/
Univ. de Technologie de Vienne - http://www.at.linuxfromscratch.org/intro/
Bistrita, Roumanie - http://www.ro.linuxfromscratch.org/intro/
Oslo, Norvège - http://www.no.linuxfromscratch.org/intro/
Brisbane, Australie - http://lfs.planetmirror.com/intro/
Columbus, Ohio, USA [FTP]- ftp://packages.linuxfromscratch.org
Columbus, Ohio, USA [HTTP]- http://packages.linuxfromscratch.org
Canmore, Alberta, Canada [FTP] - ftp://ftp.ca.linuxfromscratch.org/pub/
Canmore, Alberta, Canada [HTTP] - http://ftp.ca.linuxfromscratch.org/pub/
Univ. de Tech. de Vienne, Autriche [FTP] - ftp://ftp.at.linuxfromscratch.org/lfs/packages
Univ. de Tech. de Vienne, Autriche [HTTP] - http://ftp.at.linuxfromscratch.org/lfs/packages
Oslo, Norvège [FTP] - ftp://ftp.no.linuxfromscratch.org/mirrors/lfs/
Brisbane, Australie - ftp://ftp.planetmirror.com/pub/lfs/
Nous voudrions remercier les personnes et organisations suivantes pour leurs contributions au projet Linux From Scratch :
Bryan Dumm pour fournir le matériel et la bande passante du site linuxfromscratch.org.
DREAMWVR.COM pour leur parrainage et l'apport de différentes ressources au projet LFS et projets affiliés.
Jan Niemann pour héberger http://helga.lk.etc.tu-bs.de en tant que miroir de 134.169.139.209.
Johan Lenglet pour diriger le projet de traduction en français sur http://www.fr.linuxfromscratch.org.
Michael Peters pour sa contribution aux modifications pour les PowerPC Apple.
VA Linux Systems qui au nom de Linux.com, a fait don d'une station VA Linux 420 (anciennement StartX SP2) pour ce projet.
Jesse Tie Ten Quee qui a donné un Yamaha CDRW 8824E CD-RW.
Jesse Tie Ten Quee pour héberger quasar.highos.com en tant que miroir de www.ca.linuxfromscratch.org .
O'Reilly pour leur donation de livres sur SQL et PHP.
Robert Briggs pour avoir donné les noms de domaines linuxfromscratch.org et linuxfromscratch.com
Torsten Westermann pour diriger les sites miroirs HTTP et FTP de lfs.linux-provider.net
Dag Stenstad pour fournir le matériel et la bande passante du site miroir Norvégien et Ian Chilton pour la maintenance de ce miroir.
Sans compter les autres personnes membres des listes de diffusion LFS qui, par leurs suggestions, leurs tests et leurs rapports de bogues, permettent à ce livre de sortir.
Par exemple, si un changement est listé pour le chapitre 5, cela veut (généralement) dire que le même changement a été fait dans le chapitre correspondant pour les autres architechtures.
3.0-pre2 - April 14th, 2001
Nous avons (principalement Gérard) negligé le journal des modifications durant ces dernieres semaines, donc cette liste n'est pas complète et beaucoup trop de choses ont changé pour rappeler ce qui devrait être listé ici (ce qu'il est important de lister). Nous prêterons plus d'attention au journal des modifications apres que lfs-3.0-pre2 soit validé (autour du 13 Avril 2001).
Convertion du source SGML en XML.
Chapitre 4 : Annonce à l'utilisateur d'utiliser 'cfdisk' plutôt que 'fdisk'. La page de manuel de fdisk recommande cfdisk car il est plus stable.
Chapitre 4 : Changement de la rédaction afin de la rendre plus générale sachant que 'ext2' n'est plus le seul système de fichier. Par exemple, Reiserfs est souvent utilisé.
Chapitre 5 : Ajout de mawk, texinfo, et de gettext partiellement pour faciliter le déplacement de Glibc du chapitre 5 au chapitre 6.
Chapitre 5 : Ajout de Makedev au chapitre 5. Nous ne créons pas de fichier de périphérique ici, seulement la copie du script MAKEDEV et créons une copie temporaire qui sera utilisée pour la création des fichiers de périphérique. Ce deuxième fichier (MAKEDEV-temp) ne contient ni les noms d'utilisateurs ni les noms de groupes mais seulement les 'id' des utilisateurs et des groupes. Nous avons besoin d'un minimum de fichiers de périphérique pour installer Glibc, mais avant d'installer Glibc les noms d'utilisateurs et de groupes ne sont pas encore reconnus, seul les 'ids' le sont. Cela impose une légère modification du script MAKEDEV qui sera généré en modifiant l'original. Cette modification est faite au chapitre 5. Egalement, la finalisation des explications sur les deux installations de makedev.
Chapitre 5 : Recommandation d'installer tout les logiciels lorsque l'on est loggé (ou su en) en root.
Chapitre 5 : Simplification de la commande ln.
Chapitre 5 : Suppression de prefix=$LFS/usr dans 'make install' des fichier tar.
Chapitre 5+6 : Ajout du patch pour fileutils-4.0 qui est nécessaire à la compilation du package fileutils sur les systèmes basés sur Glibc-2.2 (comme par exemple le système LFS-3.0 qui arrive).
Chapitre 5+6 : Suppression --disable-nls de la configuration des programmes qui n'en ont pas besoin (bash, diffutils, gzip, sed, m4).
Chapitre 5+6 : Changement de "cd dir && make" en "make -C dir" (gettext-static, sysvinit).
Chapitre 5 : Arrangement de la procedure statique pour mawk
Chapitre 5+6 : Mise a jour de gcc-2.95.2 vers gcc-2.95.2.1.
Chapitre 5 : Changement du lien créé durant l'installation de gcc en $LFS/usr/bin/cpp.
Chapitre 5+6 : Déplacement de Glibc du chapitre 5 au chapitre 6
Chapitre 6 : Changement de libexecdir=/usr/bin dans fileutils en libexecdir=/bin.
Chapitre 6 : Mise a jour des instructions d'installation de glibc. la création du fichier 'configparms' a été supprimée. Aucun besoin de choisir un compilateur (soit celui de la distribution native soit celui de /usr/local/gcc2952/bin/gcc) ; nous sommes en chroot maintenant donc nous utiliserons celui que nous avons à présent.
Chapitre 6 : On ne copie que les pages de manuel depuis le package ld.so. Nous n'avons plus besoin du programme ldconfig et de ldd ; Glibc-2.2.1 s'accompagne de très bonnes versions.
Chapitre 6 : Changement de l'installation de procps par l'utilisation plus facile de sed.
Chapitre 6 : Ajout de la création du lien symbolique de lex dans l'installation de flex.
Chapitre 6 : Changement de $* en "$@" dans le script yacc durant l'installation de bison. "$@" permet l'usage d'arguments entre guillements comportant des vides.
Chapitre 6 : Arrangement de l'installation des pages de manuel durant l'installation des outils de console (console-tools).
Chapitre 6 : Quand on entre dans le mode chroot, la variable $TERM est positionné correctement. Ceci grâce à : chroot ... -i HOME=/root TERM=$TERM ...
Chapitre 6 : Aggregation des differentes lignes sulogin en une seule dans le fichier inittab.
Chapitre 6 : Changement de tout "rm file && ln -s dest file" en "ln -sf file" (dans les installations de glibc, bzip2 and gzip).
Chapitre 6 : Ajout d'un sed pour réglé un probleme durant l'installation de glibc. pt_chown ne peut pas être installé, parce que root n'est pas encore reconnu par glibc (dileme de la poule et de l'oeuf).
Chapitre 6 : Changement de consoledata/tools en kbd qui est plus activement developpé, et plus facile a installer.
Chapitre 7 : Modification du delais pour la fonction killproc dans le script des fonctions. Maintenant apres avoir tué un process, il verifie les PIDs, attends 2 secondes si necéssaire. Plus de détails peuvent être lus dans les commantaires du script.
Chapitre 7 : Ajout de l'explication du fonctionnement des 'runlevels' et de la procédure de boot quand on utilise les script LFS.
Chapitre 10 : Addition de ce chapitre. Il contient les notes "merci et bonne chance" et suggère de créer le fichier /etc/lfs-3.0-pre2.
Appendice A: Ajout de la description des packages Netkit-base et Net-tools.
Le serveur linuxfromscratch.org héberge les listes de diffusion publiques suivantes :
lfs-discuss
lfs-apps
lfs-announce
lfs-security
alfs-discuss
alfs-docs
alfs-ipc
alfs-profile
alfs-backend
La liste de diffusion lfs-discuss traite exclusivement de ce qui concerne le LFS-BOOK. Si vous avez des problèmes avec le livre, si vous voulez signaler un bogue ou deux ou si vous avez des suggestions pour améliorer le livre, cette liste est la bonne.
Tout autre email doit être posté sur la liste lfs-apps.
La liste lfs-apps s'occupe de tout ce qui n'entre pas dans le domaine de la liste lfs-discuss.
La liste de diffusion lfs-announce est une liste modérée. Il est possible de s'y abonner, mais pas d'y poster de message. Elle est utilisée pour annoncer les nouvelles versions stables. Cette liste lfs-discuss contiendra aussi des informations à propos de versions de développement. Si un utilisateur est déjà inscrit à la liste lfs-discuss, il n'aura que peu d'intérêt à s'inscrire aussi à la liste lfs-announce puisque tout ce qui est posté sur la liste lfs-announce le sera aussi sur lfs-discuss.
La liste de diffusion lfs-security traite des questions concernant la sécurité. Celles-ci, ainsi que tout autre problème de sécurité à propos d'un package utilisé par LFS, doivent être envoyés à cette liste.
La liste de distribution 'alfs-discuss' traite du développement de ALFS, qui signifie 'Automated Linux From Scratch'. Le but de ce projet est de développer un outil d'installation capable d'installer un système LFS (NDT: from scratch , a partir de zero). Son objectif principal est d'accélérer la compilation en se dégageant du besoin d'entrer les commandes pour configurer, compiler et installer les packages.
ALFS-docs est le projet de documentation ALFS qui crée et maintient tout ce qui concerne la documentation ALFS.
La liste de diffusion 'alfs-backend' traite des sujets concernant les processus de fond d'ALFS.
Toutes ces listes sont achivées et peuvent être consultées en ligne à http://archive.linuxfromscratch.org/mail-archives ou téléchargées depuis http://download.linuxfromscratch.org/mail-archives ou bien ftp://download.linuxfromscratch.org/mail-archives.
On peut s'abonner à toute liste de diffusion mentionnée ci-dessus en envoyant un email à listar@linuxfromscratch.org et en écrivant subscribe nom-de-la-liste comme en-tête du sujet du message.
On peut s'abonner à plusieurs listes à la fois en n'utilisant qu'un seul email. Ceci se fait en laissant le sujet à blanc puis en entrant toutes les commandes dans le corps de l'email. Celui-ci ressemblera alors à:
To: listar@linuxfromscratch.org
Subject:
subscribe lfs-discuss
subscribe lfs-apps
subscribe alfs-discuss
Une fois l'email envoyé, le programme Listar répondra par un email demandant confirmation de la demande d'abonnement. Une fois l'email de confirmation retourné, Listar enverra de nouveau un email précisant que l'utilisateur est abonné à la (aux) liste(s) et un message d'introduction pour cette liste particulière.
Pour annuler l'abonnement à une liste, envoyez un email à listar@linuxfromscratch.org et écrivez unsubscribe nom-de-la-liste comme en-tête du sujet du message.
On peut annuler l'abonnement à plusieurs listes en même temps en n'envoyant qu'un seul email. Ceci se fait en laissant l'en-tête du sujet à blanc puis en mettant toutes les commandes dans le corps du email. Le email ressemblera alors à ceci:
To: listar@linuxfromscratch.org
Subject:
unsubscribe lfs-discuss
unsubscribe lfs-apps
unsubscribe alfs-discuss
Une fois le email envoyé, le programme Listar répondra par un email demandant une confirmation de la demande d'annulation. Après le retour de cet email de confirmation, Listar enverra de nouveau un email précisant que l'utilisateur n'est plus abonné à la (aux) liste(s).
Ces modes qui peuvent être choisis par un utilisateur nécessitent l'envoi d'un email à listar@linuxfromscratch.org. Les modes eux-mêmes sont positionnés en inscrivant la commande appropriée dans le sujet en en-tête du message.
Comme le libellé le suggère, Set command indique ce qu'il faut inscrire pour activer un mode. Unset command indique ce qu'il faut inscrire pour le désactiver.
Le nom de la liste dans le sujet donné en exemple, doit être remplacé par le nom de la liste à laquelle la commande doit s'appliquer. Si plus d'un mode doit être activé, (pour une ou pour plusieurs listes) avec un seul message, ceci peut être fait en laissant le sujet vide et en inscrivant l'ensemble des commandes dans le corps du message.
Activer la commande: set listname digest
Désactiver la commande: unset listname digest
Toutes les listes disposent d'un mode "condensé", qui peut être activé après que l'utilisateur se soit inscrit sur une liste. Se mettre en mode condensé arrêtera la réception de messages unitaires au fur et à mesure qu'ils sont postés sur la liste et remplacera ceux-ci par un seul message journalier récapitulant tous les messages envoyés durant le jour en question.
Il existe un second mode condensé nommé digest2. Quand un utilisateur est positionné sur ce mode, il recevra le condensé journalier mais continuera également de recevoir les messages individuels tels qu'ils sont postés sur la liste. Pour positionner ce mode digest2 doit être inscrit à la place de digest dans le sujet du message.
Activer la commande: set listname vacation
Désactiver la commande: unset listname vacation
Si un utilisateur part pour une certaine durée ou souhaite arrêter de recevoir les messages de la liste mais ne veut pas se désabonner, il peut activer le mode "indisponibilité". Ceci a le même effet qu'un désabonnement sans avoir à passer par la procédure de désabonnement puis, à nouveau, la procédure d'abonnement.
Envoyez de préférence tous vos emails vers la liste de diffusion lfs-discuss.
Si vous avez besoin de contacter Gerard Beekmans personnellement, envoyez un mail à gerard@linuxfromscratch.org.
S'il vous plaît lisez soigneusement ce qui suit: au travers de ce livre la variable $LFS sera fréquemment utilisée. $LFS doit chaque fois être remplacée par le répertoire où est montée la partition contenant le système LFS. Il sera expliqué de manière détaillée comment créer et où monter la partition dans le chapitre 4. Dans mon cas, la partition LFS est montée sous /mnt/lfs.
Par exemple, quand on vous dit d'exécuter une commande comme ./configure --prefix=$LFS vous devez exécuter ./configure --prefix=/mnt/lfs
Il est important que ce soit fait quel que soit l'endroit où est lue cette variable; que ce soit depuis une commande tapée dans un interpréteur shell, ou d'un fichier édité ou créé.
Une solution est d'initialiser la variable LFS comme variable d'environnement. De cette manière $LFS peut être utilisée littéralement plutôt que d'être remplacée chaque fois par /mnt/lfs. Ceci peut être fait par export LFS=/mnt/lfs.
Maintenant, si on vous dit d'exécuter une commande comme ./configure --prefix=$LFS Vous pouvez littéralement taper la commande. Votre shell remplacera $LFS par /mnt/lfs quand il traitera la ligne de commande (c'est-à-dire quand pour presserez la touche Entrée après avoir tapé la commande).
Si vous prévoyez d'utiliser $LFS, n'oubliez pas d'initialiser la variable $LFS chaque fois. Si la variable n'est pas initialisée mais utilisée, $LFS sera ignorée et le reste sera exécuté. Une commande comme echo "root:x:0:0:root:/root:/bin/bash" > $LFS/etc/passwd sans $LFS initialisée recréera le fichier /etc/passwd de votre système hôte. En d'autres termes, cela détruira votre base courante de mot de passe.
Une manière d'être sûr que $LFS est bien initialisée à chaque fois est de l'ajouter dans le fichier /root/.bash_profile ou /root/.bashrc, ainsi chaque fois que vous entrerez sur le système en tant qu'utilisateur root ou que vous effectuerez un "su" root, la variable $LFS sera initialisée.
Tout au long de ce document, je supposerai que tous les packages téléchargés ont été placés quelque part dans $LFS/usr/src.
La convention que j'utilise est d'avoir un répertoire $LFS/usr/src/sources. Sous le répertoire sources, J'ai le répertoire 0-9 et les répertoires de a à z. Un package comme sysvinit-2.78.tar.gz sera placé dans le répertoire $LFS/usr/src/sources/s/ . Un package comme bash-2.04.tar.gz sera placé dans le répertoire $LFS/usr/src/sources/b/, et ainsi de suite. Cette convention n'est pas impérative bien sûr, je ne faisais juste que vous donner un exemple. Il est préférable de laisser les packages hors de $LFS/usr/src et de les déplacer dans un sous répertoire, de façon à garder un répertoire $LFS/usr/src, dans lequel on pourra désarchiver les paquetages et travailler avec.
Le chapitre suivant contient la liste de tous les packages que vous devez télécharger, mais la partition devant héberger notre système LFS n'a pas encore été créée. Donc les fichiers seront stockés temporairement autre part (libre à vous de décider où), et ce ne sera qu'à la fin du chapitre décrivant la préparation de cette partition que vous pourrez les déplacer dans le répertoire $LFS/usr/src/ .
Avant de réellement pouvoir faire quoi que ce soit avec un package, vous devez d'abord le déballer. Souvent les packages sont archivés à l'aide des utilitaires TAR et GZIP ou BZIP2. Je ne vais pas décrire à chaque fois comment déballer une archive. Je vais l'expliquer une fois pour toute, dans cette section.
Pour commencer, allez dans le répertoire $LFS/usr/src en exécutant:
cd $LFS/usr/src
Si un fichier a été archivé à l'aide des utilitaires TAR et GZIP, il est déballé en exécutant, selon son extension,une des deux commandes suivantes:
tar xvzf nomdufichier.tar.gz
tar xvzf nomdufichier.tgz
Si un fichier a été archivé à l'aide des utilitaires TAR et BZIP2, il est déballé en exécutant:
bzcat nomdufichier.tar.bz2 | tar xv
Certains programmes TAR (la plupart à ce jour mais pas tous) sont légèrement modifiés pour pouvoir traiter des fichiers BZIP2 directement en utilisant les options I ou y, exactement de la même façon que l'option z pour les archives GZIP. Peu importe comment le systeme hôte a décidé de patcher bzip2, la syntaxe précédente fonctionne.
Si un fichier est juste archivé à l'aide de l'utilitaire TAR, il est déballé en exécutant:
tar xvf nomdufichier.tar
Quand une archive ab est déballée, un nouveau répertoire est créé sous le répertoire courant (et ce livre suppose que les archives sont déballées sous le répertoire $LFS/usr/src directory). Placez-vous dans ce répertoire avant de poursuivre les instructions de l'installation. De plus, chaque fois que ce livre installe un package, c'est à vous de déballer l'archive et de vous placer dans le répertoire nouvellement créé.
De temps en temps vous serez amenés à traiter de simples fichiers comme les patchs. Ces fichiers sont généralement compressés avec les utilitaires GZIP ou BZIP2. Avant que ces fichiers puissent être utilisés, ils doivent d'abord être décompressés.
Si le fichier est compressé avec l'utilitaire GZIP, il est décompressé en exécutant:
gunzip nomdufichier.gz
Si le fichier est compressé avec l'utilitaire BZIP2, il est décompressé en exécutant:
bunzip2 nomdufichier.bz2
Après qu'un package a été installé, deux choses peuvent y être faites : soit le répertoire qui contient les sources peut être effacé, soit il peut être laissé. Si il est laissé, cela ne me dérange pas, mais si le même package est de nouveau nécéssaire dans les chapitres suivants, le répertoire devra d'abord être effacé avant d'être utilisé à nouveau. Si cela n'est pas fait, vous pourriez finir par avoir des problèmes car d'anciens paramètrages seront utilisés (paramètrages qui sont appliqués au système hôte mais qui ne sont pas toujours appliqués au systeme LFS). Faire un simple make clean ou make distclean ne garantie pas totalement une arborescence propre.
Donc, épargnez vous des tracas et effacez le répertoire source immédiatement après l'avoir installé.
Il y a une exception à cette règle: n'effacez pas l'arborescence des sources du noyau Linux. Beaucoup de programmes ont besoin des fichiers d'entête du noyau, par conséquent c'est l'unique répertoire qui ne doit pas être effacé, sinon aucun autre package ne pourra être compilé.
Retaper tous les scripts de démarrage des chapitres 7 et 9 peut être long, fastidieux et source d'erreurs.
Pour gagner du temps, les scripts de démarrage peuvent être téléchargés depuis http://packages.linuxfromscratch.org/bootscripts/ ou ftp://packages.linuxfromscratch.org/bootscripts/.
LFS Commands est une archive tar contenant les fichiers décrivant les commandes d'installation des packages utilisés dans ce livre. Ces fichiers peuvent être directement copiés dans votre shell pour installer les packages, néanmoins certains doivent être modifiés (par exemple, lors de l'installation du package concernant le clavier, vous devez choisir le fichier de description du clavier, car on ne peut pas prévoir quel type vous utilisez)
Ces fichiers peuvent être aussi utilisés pour trouver rapidement les commandes qui ont été changées entre différentes versions de LFS. Téléchargez l'archive tar lfs-commands pour cette version du livre LFS ainsi que pour la précédente et lancez un diff sur ces fichiers. De cette manière, il est possible de voir dans quels packages les instructions d'installation ont été changées, et donc quels scripts vous devez modifier ou bien quel package vous devez réinstaller si vous pensez que cela est nécessaire.
L'archive lfs-command peut être téléchargée depuis http://packages.linuxfromscratch.org/lfs-commands/ ou ftp://packages.linuxfromscratch.org/lfs-commands/.
Ci-dessous, il y a une liste de tous les paquetages à télécharger pour construire le système de base. Les numéros de version affichés correspondent à des versions de logiciel qui fonctionnent, et qui sont la base du livre. Si vous rencontrez des problèmes que vous ne pouvez résoudre vous-même, veuillez télécharger dans ce cas la version indiquée par le livre (au cas où vous auriez téléchargé une version plus récente).
Si le serveur packages.linuxfromscratch.org n'autorise plus les connexions, essayez l'un de nos sites miroirs. Les adresses des sites miroirs se trouvent au Chapitre 1 - Version du livre.
Dans Annexe C - Sites officiels de téléchargement , nous avons fourni la liste des sites officiels de téléchargement des paquetages listés ci-dessous. L'archive LFS FTP ne contient que les versions des paquetages recommandées par ce livre. Vous avez toujours la possibilite de consulter les Sites officiels dans l'Annexe C afin de vérifier s'il existe une nouvelle version. Pour ceux qui téléchargeront une version plus récente, nous apprécierions énormement de savoir si vous êtes parvenus ou non à installer cette version, grâce aux instructions de ce livre.
Prenez note que tous les fichiers téléchargés de l'archive LFS FTP sont compressés avec bzip2 au lieu de gzip. Si vous ne savez pas comment utiliser les fichiers bz2, nous vous conseillons la lecture de Chapitre 2 - Comment installer le logiciel.
La liste ci-dessous a été mise à jour le 2 avril 2001.
Explorer avec FTP:
ftp://packages.linuxfromscratch.org/
Explorer avec HTTP:
http://packages.linuxfromscratch.org/
Tous les packages LFS - 70 290 ko:
ftp://packages.linuxfromscratch.org/intel-3.0-pre2/lfs-packages-intel-3.0-pre2.tar
http://packages.linuxfromscratch.org/intel-3.0-pre2/lfs-packages-intel-3.0-pre2.tar
Bash (2.04) - 1 308 ko:
ftp://packages.linuxfromscratch.org/intel-3.0-pre2/bash-2.04.tar.bz2
http://packages.linuxfromscratch.org/intel-3.0-pre2/bash-2.04.tar.bz2
Binutils (2.10.1) - 5 524 ko:
ftp://packages.linuxfromscratch.org/intel-3.0-pre2/binutils-2.10.1.tar.bz2
http://packages.linuxfromscratch.org/intel-3.0-pre2/binutils-2.10.1.tar.bz2
Bzip2 (1.0.1) - 410 ko:
ftp://packages.linuxfromscratch.org/intel-3.0-pre2/bzip2-1.0.1.tar.bz2
http://packages.linuxfromscratch.org/intel-3.0-pre2/bzip2-1.0.1.tar.bz2
Diff Utils (2.7) - 247 ko:
ftp://packages.linuxfromscratch.org/intel-3.0-pre2/diffutils-2.7.tar.bz2
http://packages.linuxfromscratch.org/intel-3.0-pre2/diffutils-2.7.tar.bz2
File Utils (4.0) 801 ko:
ftp://packages.linuxfromscratch.org/intel-3.0-pre2/fileutils-4.0.tar.bz2
http://packages.linuxfromscratch.org/intel-3.0-pre2/fileutils-4.0.tar.bz2
Patch de File Utils (4.0) - 1 ko:
ftp://packages.linuxfromscratch.org/intel-3.0-pre2/fileutils-4.0.patch.bz2
http://packages.linuxfromscratch.org/intel-3.0-pre2/fileutils-4.0.patch.bz2
GCC (2.95.2.1) 9 551 ko:
ftp://packages.linuxfromscratch.org/intel-3.0-pre2/gcc-2.95.2.1.tar.bz2
http://packages.linuxfromscratch.org/intel-3.0-pre2/gcc-2.95.2.1.tar.bz2
Noyau Linux (2.4.2) 20 019 ko:
ftp://packages.linuxfromscratch.org/intel-3.0-pre2/linux-2.4.2.tar.bz2
http://packages.linuxfromscratch.org/intel-3.0-pre2/linux-2.4.2.tar.bz2
Grep (2.4.2) 382 ko:
ftp://packages.linuxfromscratch.org/intel-3.0-pre2/grep-2.4.2.tar.bz2
http://packages.linuxfromscratch.org/intel-3.0-pre2/grep-2.4.2.tar.bz2
Gzip (1.2.4a) 178 ko:
ftp://packages.linuxfromscratch.org/intel-3.0-pre2/gzip-1.2.4a.tar.bz2
http://packages.linuxfromscratch.org/intel-3.0-pre2/gzip-1.2.4a.tar.bz2
Patch de Gzip (1.2.4a) 1 ko:
ftp://packages.linuxfromscratch.org/intel-3.0-pre2/gzip-1.2.4a.patch.bz2
http://packages.linuxfromscratch.org/intel-3.0-pre2/gzip-1.2.4a.patch.bz2
Make (3.79.1) 794 ko:
ftp://packages.linuxfromscratch.org/intel-3.0-pre2/make-3.79.1.tar.bz2
http://packages.linuxfromscratch.org/intel-3.0-pre2/make-3.79.1.tar.bz2
Sed (3.02) 221 ko:
ftp://packages.linuxfromscratch.org/intel-3.0-pre2/sed-3.02.tar.bz2
http://packages.linuxfromscratch.org/intel-3.0-pre2/sed-3.02.tar.bz2
Sh-utils (2.0) 824 ko:
ftp://packages.linuxfromscratch.org/intel-3.0-pre2/sh-utils-2.0.tar.bz2
http://packages.linuxfromscratch.org/intel-3.0-pre2/sh-utils-2.0.tar.bz2
Tar (1.13) 730 ko:
ftp://packages.linuxfromscratch.org/intel-3.0-pre2/tar-1.13.tar.bz2
http://packages.linuxfromscratch.org/intel-3.0-pre2/tar-1.13.tar.bz2
Patch de Tar (1.13) 1 ko:
ftp://packages.linuxfromscratch.org/intel-3.0-pre2/gnutarpatch.txt.bz2
http://packages.linuxfromscratch.org/intel-3.0-pre2/gnutarpatch.txt.bz2
Text Utils (2.0) 1 040 ko:
ftp://packages.linuxfromscratch.org/intel-3.0-pre2/textutils-2.0.tar.bz2
http://packages.linuxfromscratch.org/intel-3.0-pre2/textutils-2.0.tar.bz2
Mawk (1.3.3) 168 ko:
ftp://packages.linuxfromscratch.org/intel-3.0-pre2/mawk1.3.3.tar.bz2
http://packages.linuxfromscratch.org/intel-3.0-pre2/mawk1.3.3.tar.bz2
Texinfo (4.0) 812 ko:
ftp://packages.linuxfromscratch.org/intel-3.0-pre2/texinfo-4.0.tar.bz2
http://packages.linuxfromscratch.org/intel-3.0-pre2/texinfo-4.0.tar.bz2
Gettext (0.10.36) 705 ko:
ftp://packages.linuxfromscratch.org/intel-3.0-pre2/gettext-0.10.36.tar.bz2
http://packages.linuxfromscratch.org/intel-3.0-pre2/gettext-0.10.36.tar.bz2
MAKEDEV - 7 ko:
ftp://packages.linuxfromscratch.org/intel-3.0-pre2/MAKEDEV.bz2
http://packages.linuxfromscratch.org/intel-3.0-pre2/MAKEDEV.bz2
Glibc (2.2.1) 10 137 ko:
ftp://packages.linuxfromscratch.org/intel-3.0-pre2/glibc-2.2.1.tar.bz2
http://packages.linuxfromscratch.org/intel-3.0-pre2/glibc-2.2.1.tar.bz2
Glibc-linuxthreads (2.2.1) 149 ko:
ftp://packages.linuxfromscratch.org/intel-3.0-pre2/glibc-linuxthreads-2.2.1.tar.bz2
http://packages.linuxfromscratch.org/intel-3.0-pre2/glibc-linuxthreads-2.2.1.tar.bz2
Man-pages (1.35) 478 ko:
ftp://packages.linuxfromscratch.org/intel-3.0-pre2/man-pages-1.35.tar.bz2
http://packages.linuxfromscratch.org/intel-3.0-pre2/man-pages-1.35.tar.bz2
Ed (0.2) - 158 ko:
ftp://packages.linuxfromscratch.org/intel-3.0-pre2/ed-0.2.tar.bz2
http://packages.linuxfromscratch.org/intel-3.0-pre2/ed-0.2.tar.bz2
Patch (2.5.4) 149 ko:
ftp://packages.linuxfromscratch.org/intel-3.0-pre2/patch-2.5.4.tar.bz2
http://packages.linuxfromscratch.org/intel-3.0-pre2/patch-2.5.4.tar.bz2
Find Utils (4.1) 226 ko:
ftp://packages.linuxfromscratch.org/intel-3.0-pre2/findutils-4.1.tar.bz2
http://packages.linuxfromscratch.org/intel-3.0-pre2/findutils-4.1.tar.bz2
Patch de Find Utils (4.1) 1 ko:
ftp://packages.linuxfromscratch.org/intel-3.0-pre2/findutils-4.1.patch.bz2
http://packages.linuxfromscratch.org/intel-3.0-pre2/findutils-4.1.patch.bz2
Ncurses (5.2) 1 308 ko:
ftp://packages.linuxfromscratch.org/intel-3.0-pre2/ncurses-5.2.tar.bz2
http://packages.linuxfromscratch.org/intel-3.0-pre2/ncurses-5.2.tar.bz2
Vim-rt (5.7) 905 ko:
ftp://packages.linuxfromscratch.org/intel-3.0-pre2/vim-5.7-rt.tar.bz2
http://packages.linuxfromscratch.org/intel-3.0-pre2/vim-5.7-rt.tar.bz2
Vim-src (5.7) 963 ko:
ftp://packages.linuxfromscratch.org/intel-3.0-pre2/vim-5.7-src.tar.bz2
http://packages.linuxfromscratch.org/intel-3.0-pre2/vim-5.7-src.tar.bz2
Bison (1.28) - 321 ko:
ftp://packages.linuxfromscratch.org/intel-3.0-pre2/bison-1.28.tar.bz2
http://packages.linuxfromscratch.org/intel-3.0-pre2/bison-1.28.tar.bz2
Less (358) 178 ko:
ftp://packages.linuxfromscratch.org/intel-3.0-pre2/less-358.tar.bz2
http://packages.linuxfromscratch.org/intel-3.0-pre2/less-358.tar.bz2
Groff (1.16.1) 1 174 ko:
ftp://packages.linuxfromscratch.org/intel-3.0-pre2/groff-1.16.1.tar.bz2
http://packages.linuxfromscratch.org/intel-3.0-pre2/groff-1.16.1.tar.bz2
Man (1.5i) 158 ko:
ftp://packages.linuxfromscratch.org/intel-3.0-pre2/man-1.5i.tar.bz2
http://packages.linuxfromscratch.org/intel-3.0-pre2/man-1.5i.tar.bz2
Perl (5.6.0) 4 327 ko:
ftp://packages.linuxfromscratch.org/intel-3.0-pre2/perl-5.6.0.tar.bz2
http://packages.linuxfromscratch.org/intel-3.0-pre2/perl-5.6.0.tar.bz2
M4 (1.4) 249 ko:
ftp://packages.linuxfromscratch.org/intel-3.0-pre2/m4-1.4.tar.bz2
http://packages.linuxfromscratch.org/intel-3.0-pre2/m4-1.4.tar.bz2
Autoconf (2.13) - 333 ko:
ftp://packages.linuxfromscratch.org/intel-3.0-pre2/autoconf-2.13.tar.bz2
http://packages.linuxfromscratch.org/intel-3.0-pre2/autoconf-2.13.tar.bz2
Automake (1.4) - 277 ko:
ftp://packages.linuxfromscratch.org/intel-3.0-pre2/automake-1.4.tar.bz2
http://packages.linuxfromscratch.org/intel-3.0-pre2/automake-1.4.tar.bz2
Flex (2.5.4a) 278 ko:
ftp://packages.linuxfromscratch.org/intel-3.0-pre2/flex-2.5.4a.tar.bz2
http://packages.linuxfromscratch.org/intel-3.0-pre2/flex-2.5.4a.tar.bz2
File (3.34) - 130 ko:
ftp://packages.linuxfromscratch.org/intel-3.0-pre2/file-3.34.tar.bz2
http://packages.linuxfromscratch.org/intel-3.0-pre2/file-3.34.tar.bz2
Libtool (1.3.5) 361 ko:
ftp://packages.linuxfromscratch.org/intel-3.0-pre2/libtool-1.3.5.tar.bz2
http://packages.linuxfromscratch.org/intel-3.0-pre2/libtool-1.3.5.tar.bz2
Bin86 (0.15.4) - 112 ko:
ftp://packages.linuxfromscratch.org/intel-3.0-pre2/bin86-0.15.4.tar.bz2
http://packages.linuxfromscratch.org/intel-3.0-pre2/bin86-0.15.4.tar.bz2
Kbd (1.05) 585 ko:
ftp://packages.linuxfromscratch.org/intel-3.0-pre2/kbd-1.05.tar.bz2
http://packages.linuxfromscratch.org/intel-3.0-pre2/kbd-1.05.tar.bz2
E2fsprogs (1.19) - 808 ko:
ftp://packages.linuxfromscratch.org/intel-3.0-pre2/e2fsprogs-1.19.tar.bz2
http://packages.linuxfromscratch.org/intel-3.0-pre2/e2fsprogs-1.19.tar.bz2
Ld.so (1.9.9) 280 ko:
ftp://packages.linuxfromscratch.org/intel-3.0-pre2/ld.so-1.9.9.tar.bz2
http://packages.linuxfromscratch.org/intel-3.0-pre2/ld.so-1.9.9.tar.bz2
Lilo (21.7.3) 174 ko:
ftp://packages.linuxfromscratch.org/intel-3.0-pre2/lilo-21.7.3.tar.bz2
http://packages.linuxfromscratch.org/intel-3.0-pre2/lilo-21.7.3.tar.bz2
Modutils (2.4.5) 200 ko:
ftp://packages.linuxfromscratch.org/intel-3.0-pre2/modutils-2.4.5.tar.bz2
http://packages.linuxfromscratch.org/intel-3.0-pre2/modutils-2.4.5.tar.bz2
Procinfo (18) 22 ko:
ftp://packages.linuxfromscratch.org/intel-3.0-pre2/procinfo-18.tar.bz2
http://packages.linuxfromscratch.org/intel-3.0-pre2/procinfo-18.tar.bz2
Procps (2.0.7) 153 ko:
ftp://packages.linuxfromscratch.org/intel-3.0-pre2/procps-2.0.7.tar.bz2
http://packages.linuxfromscratch.org/intel-3.0-pre2/procps-2.0.7.tar.bz2
Psmisc (20.1) 51 ko:
ftp://packages.linuxfromscratch.org/intel-3.0-pre2/psmisc-20.1.tar.bz2
http://packages.linuxfromscratch.org/intel-3.0-pre2/psmisc-20.1.tar.bz2
Kit Shadow Password (20001016) 551 ko:
ftp://packages.linuxfromscratch.org/intel-3.0-pre2/shadow-20001016.tar.bz2
http://packages.linuxfromscratch.org/intel-3.0-pre2/shadow-20001016.tar.bz2
Patch du Kit Shadow Password (20001016) 1 ko:
ftp://packages.linuxfromscratch.org/intel-3.0-pre2/shadow-20001016.patch.bz2
http://packages.linuxfromscratch.org/intel-3.0-pre2/shadow-20001016.patch.bz2
Sysklogd (1.4.1) 67 ko:
ftp://packages.linuxfromscratch.org/intel-3.0-pre2/sysklogd-1.4.1.tar.bz2
http://packages.linuxfromscratch.org/intel-3.0-pre2/sysklogd-1.4.1.tar.bz2
Sysvinit (2.78) 90 ko:
ftp://packages.linuxfromscratch.org/intel-3.0-pre2/sysvinit-2.78.tar.bz2
http://packages.linuxfromscratch.org/intel-3.0-pre2/sysvinit-2.78.tar.bz2
Patch de Sysvinit (2.78) 1 ko:
ftp://packages.linuxfromscratch.org/intel-3.0-pre2/sysvinit-2.78.patch.bz2
http://packages.linuxfromscratch.org/intel-3.0-pre2/sysvinit-2.78.patch.bz2
Util Linux (2.11b) 919 ko:
ftp://packages.linuxfromscratch.org/intel-3.0-pre2/util-linux-2.11b.tar.bz2
http://packages.linuxfromscratch.org/intel-3.0-pre2/util-linux-2.11b.tar.bz2
Netkit-base (0.17) 49 ko:
ftp://packages.linuxfromscratch.org/intel-3.0-pre2/netkit-base-0.17.tar.bz2
http://packages.linuxfromscratch.org/intel-3.0-pre2/netkit-base-0.17.tar.bz2
Net-tools (1.59) 193 ko:
ftp://packages.linuxfromscratch.org/intel-3.0-pre2/net-tools-1.59.tar.bz2
http://packages.linuxfromscratch.org/intel-3.0-pre2/net-tools-1.59.tar.bz2
Taille totale de tous les packages Intel: 70 240 ko (68,60 Mo)
Dans ce chapitre, nous allons préparer la partition qui accueillera le système LFS. On créera tout d'abord cette partition, puis un système de fichiers et enfin la structure des répertoires. Après cela, nous pourrons passer au chapitre suivant et entamer réellement le processus de construction.
Avant de pouvoir construire notre nouveau système Linux, nous devons avoir une partition Linux vide dans laquelle nous pourrons créer notre nouveau système. Je vous recommande une partition d'une taille d'au moins 750 Mo. Cela vous donne assez d'espace pour stocker toutes les archives et pour compiler tous les paquetages sans avoir à se préoccuper de manquer d'espace disque temporaire nécessaire. Cependant vous aurez probablement envie de plus d'espace que cela, si vous décidez d'utiliser le système LFS comme système principal. Si vous disposez déjà d'une partition native Linux , vous pouvez passer cette sous-section.
Le programme cfdisk (ou tout autre programme fdisk de votre choix) est démarré avec comme option le disque dur approprié (tel que /dev/hda, si une nouvelle partition doit être créée sur le disque maître primaire IDE). Cela permet de créer une partition native Linux, écrire la table de partition et sortir du programme cfdisk. Veuillez vous reporter à la documentation concernant le programme fdisk de votre choix (la lecture des pages man est un bon début) et lisez les procédures relatives à la création d'une partition native Linux et à l'écriture d'une table de partition.
Rappelez vous de l'identification de votre nouvelle partition. Ce peut être quelque chose comme hda11. Cette partition nouvellement créée sera appelée la partition LFS dans ce livre.
Dès que la partition est créée, nous devons créer un nouveau système de fichiers dans cette partition. Le système de fichiers standard utilisé généralement est le système de fichiers ext2, mais on rencontre également de plus en plus souvent les systèmes de fichiers dits journalisés. Il vous appartient bien sûr de choisir le type de système de fichiers que vous souhaitez créer, mais nous supposerons ici, par souci de simplicité, que vous avez opté pour le système de fichiers ext2.
Pour créer un système de fichiers ext2, utilisez la commande mke2fs. La partition LFS est utilisée comme unique paramètre de la commande et le système de fichiers est créé.
mke2fs /dev/xxx
Remplacez "xxx" par le nom de la partition (par exemple hda11).
Maintenant que le système de fichiers a été créé, il est prêt à être utilisé. Tout ce que nous avons à faire pour accéder à la partition (c'est-à-dire pour pouvoir y lire ou écrire des données) c'est de la monter. Si vous la montez sous /mnt/lfs, vous pouvez accéder à la partition en allant au répertoire /mnt/lfs. Nous considérerons dans ce livre que vous l'avez montée dans /mnt/lfs. Peu importe le répertoire que vous choisirez, du moment que vous vous en rappelez.
Créez le répertoire /mnt/lfs en exécutant :
mkdir -p /mnt/lfs
Maintenant, montez la partition LFS en exécutant :
mount /dev/xxx /mnt/lfs
Remplacez " xxx" par l'identificateur de votre partition (tel que hda11).
Ce répertoire (/mnt/lfs) est la variable $LFS dont nous avons déjà parlé précédemment. Désormais si vous voulez utiliser la variable d'environnement $LFS, il vous faudra exécuter export LFS=/mnt/lfs.
Créons l'arborescence des répertoires dans la partition LFS en conformité au standard FHS qui se trouve en http://www.pathname.com/fhs/. Exécuter les commandes suivantes créera par defaut une structure différente de répertoire :
cd $LFS
mkdir -p bin boot dev/pts etc home lib mnt proc root sbin tmp var
for dirname in $LFS/usr $LFS/usr/local
do
mkdir $dirname
cd $dirname
mkdir bin etc include lib sbin share src tmp var
ln -s share/man man
ln -s share/doc doc
ln -s share/info info
cd $dirname/share
mkdir dict doc info locale man nls misc terminfo zoneinfo
cd $dirname/share/man
mkdir man1 man2 man3 man4 man5 man6 man7 man8
done
cd $LFS/var
mkdir lock log mail run spool tmp
Normalement, les répertoires sont créés avec le mode de permission 755, ce qui n'est pas souhaitable pour tous les répertoires. Le premier changement est le mode 0750 pour le répertoire $LFS/root. Ceci pour s'assurer que tout le monde ne peut pas entrer dans le répertoire /root (vous feriez la mÍême chose pour les répertoires /home/username). Le deuxième changement est le mode 1777 pour les répertoires /tmp. De cette façon, tous les utilisateurs peuvent écrire dans le répertoire /tmp si besoin, mais ne peuvent pas supprimer les fichiers des autres utilisateurs (ceci grâce au "sticky bit" - bit 1 du masque bit 1777).
cd $LFS &&
chmod 0750 root &&
chmod 1777 tmp usr/tmp usr/local/tmp var/tmp
Maintenant que les répertoires sont créés, copiez les sources que vous avez téléchargés au chapitre 3 dans un sous-répertoire de $LFS/usr/src (vous devrez créer ce sous-répertoire vous même).
Dans les chapitres suivants, nous allons installer tous les logiciels qui font partie d'un système Linux de base. Après en avoir terminé avec ce chapitre et le suivant, vous aurez un système Linux pleinement fonctionnel. Les chapitres restants traitent de la création des scripts de démarrage, de la manière de rendre le système LFS amorçable, et de la mise en place du réseau de base.
Les logiciels dans ce chapitre seront liés statiquement. Ces programmes seront réinstallés au chapitre suivant avec une édition de liens dynamiques. Nous commencons par une version statique parce qu'il est possible que notre système Linux normal et notre système LFS n'utilisent pas la même version de bibliothèque C. Si les programmes de la première partie étaient liés à une version ancienne de la bibliothèque C, ces programmes pourraient ne pas bien fonctionner dans le système LFS.
La clef pour apprendre ce qui fait fonctionner Linux est de savoir exactement quelle est l'utilité de chaque package et en quoi un utilisateur ou le système en a besoin. Les descriptions du contenu des packages sont fournies après la sous-section Installation de chaque package, et aussi dans l'annexe A.
Pendant l'installation de certains packages, vous verrez très probablement des messages d'alerte du compilateur défilant sur votre écran. Ceci est normal et peut être ignoré sans danger. Il s'agit seulement de messages d'avertissement (principalement au sujet d'utilisation incorrecte, mais pas illégale, de la syntaxe de C ou de C++. C'est simplement que, souvent, les standards du langage C ont changé, et les packages utilisent encore le vieux standard, ce qui n'est pas un problème).
Avant de commencer, assurez-vous que vous avez positionné correctement la variable LFS, si vous avez décidé de l'utiliser. Exécutez ce qui suit:
echo $LFS
Vérifiez que la sortie contient le bon répertoire vers le point de montage de la partition LFS (/mnt/lfs par exemple).
Il vaut mieux se connecter sous root, ou changer l'utilisateur en root, quand on installe les packages. Ainsi, vous êtes sûr que tous les fichiers appartiennent à l'utilisateur et au groupe root (et ne sont pas la possession d'un identifiant d'utilisateur non root), et que si un package désire des permissions particulières, cela peut se faire sans problème lié à un accès non root.
La documentation fournie avec Glibc, Gcc et les autres packages recommande de ne pas compiler les packages avec l'utilisateur root. Nous pensons qu'il est sage d'ignorer cette recommandation et de compiler quand même sous root. Des centaines de personnes utilisant LFS l'ont fait sans problème, et nous n'avons rencontré aucun bogue dans le processus de compilation qui puisse causer du tort. C'est donc suffisamment sûr (on ne peut jamais être sûr à 100%, c'est donc à vous au final qu'il appartient de décider).
Installez Bash en lançant les commandes suivantes:
./configure --enable-static-link --prefix=$LFS/usr \
--bindir=$LFS/bin --with-curses &&
make &&
make install &&
cd $LFS/bin &&
ln -s bash sh
Si vous rencontrez des erreurs en compilant bash qui vous disent ne pas pouvoir trouver " -lcurses" , ces deux commandes doivent être lancées pour créer le lien symbolique manquant:
Note : Normalement, le fichier libncurses.a réside dans le répertoire /usr/lib, mais il peut aussi être dans /lib (comme dans un système LFS). Donc, vérifiez-le d'abord, et modifiez le chemin dans les commandes suivantes en accord avec cela.
cd /usr/lib &&
ln -s libncurses.a libcurses.a
--enable-static-link: Cette option de configure rend Bash lié de maniere statique.
--prefix=$LFS/usr: Cette option de configure installe tous les fichiers de Bash sous le répertoire $LFS/usr, qui deviendra le répertoire /usr après un chroot dans $LFS ou quand le système sera redémarré sous LFS.
--bindir=$LFS/bin: Ceci installe les fichiers exécutables dans $LFS/bin. Nous faisons ceci car nous voulons que bash soit dans /bin, et non dans /usr/bin. Une des raisons est la suivante : la partition /usr peut être une partition séparée montée quelque part. Avant que cette partition ne soit montée, un utilisateur a besoin de disposer de bash (il sera difficile d'exécuter les scripts de démarrage sans un shell, par exemple).
--with-curses: Ceci a pour effet de lier Bash à la bibliothèque curses au lieu de la bibliothèque par défaut termcap, qui devient obsolète.
ln -s bash sh: Cette commande crée le lien symbolique sh qui pointe sur bash. La plupart des scripts s'exécutent via 'sh' (invoqué par le #!/bin/sh dans la première ligne des scripts), qui invoque un mode spécial de bash. Bash se comportera alors (du mieux qu'il puisse) comme le shell Bourne original.
Les && à la fin de chaque ligne font que la commande suivante n'est exécutée que si la commande précédente se termine avec une valeur de retour de 0, indiquant le succès. Au cas où ces commandes sont copiées&collées dans le shell, il est important de s'assurer que, si ./configure échoue, make ne sera pas exécuté, et, de même, que si make échoue, make install ne sera pas exécuté, et ainsi de suite.
bash est le SHell Bourne-Again, qui est un interpréteur de commandes couramment utilisé sur les systèmes Unix. bash est un programme qui lit l'entrée standard, c'est-à-dire le clavier. Un utilisateur tape quelque chose et le programme évalue ce qu'il a entré, et en fait quelque chose, comme lancer un programme.
Installez Binutils en exécutant les commandes suivantes :
./configure --prefix=$LFS/usr --disable-nls &&
make -e LDFLAGS=-all-static tooldir=$LFS/usr &&
make -e tooldir=$LFS/usr install
make -e: Le paramètre -e indique à make que les variables d'environnement ont priorité sur les variables définies dans le(s) fichier(s) Makefile. Ceci est nécessaire pour pouvoir réussir à lier statiquement binutils.
LDFLAGS=-all-static: Positionner la variable LDFLAGS à la valeur -all-static impose l'édition de liens statique de binutils.
tooldir=$LFS/usr: Normalement, le répertoire tooldir (le répertoire où seront finalement installés les exécutables de binutils) est positionné à $(exec_prefix)/$(target_alias), ce qui vaut, par exemple, /usr/i686-pc-linux-gnu. Étant donné que nous ne créons ces exécutables que pour notre système, nous n'avons pas besoin de ce répertoire spécifique à une cible dans $LFS/usr. Cette option serait utilisée si le système devait être utilisé pour des compilations croisées (par exemple, pour compiler un package sur une machine Intel qui générerait du code exécutable sur une machine Apple PowerPC).
Le package Binutils contient les programmes gasp, gprof, ld, as, ar, nm, objcopy, objdump, ranlib, readelf, size, strings, strip, c++filt et addr2line.
gasp est le préprocesseur de macros assembleur.
ld combine plusieurs fichiers objets et archives, modifie l'emplacement de leurs données et lie les références des symboles. Souvent, la dernière étape dans la construction d'un nouveau programme compilé à exécuter est un appel à ld.
as a d'abord été prévu pour assembler la sortie du compilateur GNU C gcc, pour qu'elle puisse être utilisée par le lieur ld.
Le programme ar crée, modifie et extrait des données depuis des archives. Une archive est un simple fichier contenant un ensemble d'autres fichiers dans une structure qui permet de retrouver les fichiers individuels d'origine (appelés membres de l'archive).
L'utilitaire objcopy copie le contenu d'un fichier objet dans un autre. objcopy utilise la bibliothèque GNU BFD pour lire et écrire dans les fichiers objet. Il peut écrire le fichier objet destination dans un format différent de celui du fichier objet source.
objdump affiche des informations sur un ou plusieurs fichiers objet. Les options déterminent quelles informations spécifiques sont à afficher. Ces informations sont essentiellement utiles pour les programmeurs qui travaillent sur des outils de compilation, à l'inverse des programmeurs qui veulent juste que leur programme compile et fonctionne.
ranlib génère un index du contenu d'une archive, et le stocke dans l'archive. L'index liste chaque symbole défini par un membre d'une archive, qui est un fichier objet re-localisable.
size liste les tailles des sections -- et la taille totale -- de chaque fichier objet objfile dans sa liste d'arguments. Par défaut, une ligne est générée en sortie pour chaque fichier objet ou chaque module dans l'archive.
Pour chaque fichier donné, strings affiche les séquences de caractères imprimables qui ont au moins une longueur de quatre caractères (ou le nombre spécifié en option du programme) et sont suivies d'un caractère non imprimable. Par défaut, il affiche seulement les chaînes des parties initialisées et chargées des fichiers objet; pour les autres types de fichier, il affiche les chaînes de tout le fichier.
strings est essentiellement utilisé pour déterminer le contenu des fichiers non-texte.
strip débarrasse les fichiers objet de tous les symboles, ou de certains en particuliers. La liste des fichiers objet peut inclure des archives. Au moins un fichier objet doit être fourni. strip modifie les fichiers fournis en argument, plutôt que d'écrire les copies modifiées sous d'autres noms.
Le langage C++ fournit un mécanisme de surcharge, ce qui signifie que vous pouvez écrire plusieurs fonctions ayant le même nom (pourvu que chacune réclame des paramètres de types différents). Tous les noms de fonction C++ sont encodés dans un nom d'assemblage de bas niveau (ce processus est connu sous le nom de broyage). Le programme c++filt fait l'association inverse: il décode (dé-broie) les noms de bas niveau en noms de niveau utilisateur, pour que le lieur puisse prévenir un conflit entre ces fonctions surchargées.
addr2line traduit les adresses d'un programme en noms de fichier et numéros de ligne. A partir d'une adresse et d'un exécutable, il utilise les informations de déboguage présentes dans l'exécutable pour trouver quel nom de fichier et quel numéro de ligne sont associés à une adresse donnée.
Installez Bzip2 en exécutant les commandes suivantes :
sed \
s/"\$(CC) \$(CFLAGS) -o"/"\$(CC) \$(CFLAGS) \$(LDFLAGS) -o"/ \
Makefile | make -f - LDFLAGS=-static &&
make PREFIX=$LFS/usr install &&
cd $LFS/usr/bin &&
mv bzcat bunzip2 bzip2 bzip2recover $LFS/bin
sed: Ici, la commande sed recherche les chaînes de caractères "$(CC) $(CFLAGS) -o" et les remplace par "$(CC) $(CFLAGS) $(LDFLAGS) -o" dans le fichier Makefile. Nous faisons cette modification pour qu'il soit plus aisé de faire l'édition de liens statique de bzip2.
...Makefile | make -f -: Makefile est le dernier paramètre de la commande sed, et indique le fichier dans lequel on recherche et remplace. Normalement, sed envoie le fichier modifié vers stdout (la sortie standard), qui serait la console. Avec la construction que nous utilisons, les sorties de sed seront injectées dans le programme make. Normalement, quand make est lancé, il cherche un certain nombre de fichiers comme Makefile. Mais nous avons modifié le fichier Makefile, aussi nous ne voulons pas que make l'utilise. Le paramètre "-f -" indique à make de lire son entrée depuis un autre fichier, ou depuis stdin (l'entrée standard), ce que le paramètre tiret (-) implique. C'est une des façons de procéder. Une autre manière aurait été de demander à sed d'écrire sa sortie dans un fichier différent, et d'indiquer à make, à l'aide du paramètre -f, de lire ce fichier alternatif.
LDFLAGS=-static: Ceci est la seconde manière que nous utilisons pour procéder à une édition de liens statique. C'est aussi la plus commune. La valeur -all-static n'est utilisée qu'avec les package binutils et gettext, et ne sera plus utilisée dans la suite de ce livre.
bzip2 compresse les fichiers avec l'algorithme de compression de texte par tri de blocs de Burrows-Wheeler, et le codage de Huffman. La compression est en général bien meilleure que celle obtenue par les compresseurs plus conventionnels basés sur LZ77/LZ78, et s'approche des performances de la famille PPM des compresseurs statistiques.
Installez Diffutils en lançant les commandes suivantes:
export CPPFLAGS=-Dre_max_failures=re_max_failures2 &&
./configure --prefix=$LFS/usr &&
unset CPPFLAGS &&
make LDFLAGS=-static &&
make install
CPPFLAGS=-Dre_max_failures=re_max_failures2: La variable CPPFLAGS est lue par le programme cpp (préprocesseur C). La valeur de cette variable indique au préprocesseur de remplacer chaque instance de re_max_failures trouvée par re_max_failures2 avant de passer le fichier source au compilateur lui-même pour la compilation. Ce package a des problèmes quand on en fait l'édition de liens statique sur certaines plate-formes (cela dépend de la version de Glibc utilisée par le système), et cette construction résout ce problème.
cmp et diff comparent tous deux deux fichiers et montrent leurs différences. Ces deux programmes ont des options pour comparer des fichiers dans différentes situations.
La différence entre diff et diff3 est que diff compare deux fichiers, et diff3 en compare trois.
Installez Fileutils en lançant les commandes suivantes:
patch -Np1 -i ../fileutils-4.0.patch &&
./configure --disable-nls \
--prefix=$LFS/usr --libexecdir=$LFS/bin --bindir=$LFS/bin &&
make LDFLAGS=-static &&
make install &&
cd $LFS/usr/bin &&
ln -s ../../bin/install
--libexecdir=$LFS/bin: Cette option de configuration va définir $LFS/bin comme étant le répertoire des exécutables. Normalement, ces exécutables sont dans /usr/libexec mais rien n'est mis dedans. Le changer empêche que ce répertoire soit créé pour rien.
Le package Fileutils contient les programmes chgrp, chmod, chown, cp, dd, df, dir, dircolors, du, install, ln, ls, mkdir, mkfifo, mknod, mv, rm, rmdir, sync, touch et vdir.
chgrp modifie le groupe d'appartenance de chaque fichier donné en lui affectant le groupe spécifié, qui peut être un nom de groupe ou un ID de groupe numérique.
chmod modifie les permissions de chaque fichier spécifié selon le mode donné, qui peut être soit une représentation symbolique des changements à effectuer, ou un nombre octal représentant le schéma de bits pour les nouvelles permissions.
dd copie un fichier (depuis l'entrée standard vers la sortie standard, par défaut) avec une taille de bloc choisie par l'utilisateur, en pouvant éventuellement y faire des conversions.
df affiche la quantité d'espace disque disponible sur le système de fichiers contenant chaque nom de fichier en argument. Si aucun nom de fichier n'est donné, l'espace disponible sur tous les systèmes de fichier actuellement montés est affiché.
dir et vdir sont des versions de ls avec différents formats de sortie par défaut. Ces programmes listent chaque fichier ou répertoire spécifié. Le contenu des répertoires est trié alphabétiquement. Pour ls, les fichiers sont listés par défaut en colonne, triés verticalement, si la sortie standard est un terminal; autrement, ils sont listés un par ligne. Pour dir, les fichiers sont listés par défaut en colonne, triés verticalement. Pour vdir, les fichiers sont listés par défaut en format long.
dircolors affiche les commandes pour positionner la variable d'environnement LS_COLOR. La variable LS_COLOR est utilisée pour modifier le schéma de couleurs par défaut utilisé par ls et les utilitaires associés.
du affiche la quantité d'espace disque utilisée par chaque argument, et pour chaque sous-répertoire du répertoire en argument.
install copie les fichiers et positionne leurs permissions et, si possible, leur propriétaire et leur groupe.
mknod crée un FIFO, fichier spécial de type caractère ou bloc, avec le nom de fichier spécifié.
mv déplace des fichiers d'un répertoire dans un autre, ou renomme des fichiers, selon les arguments qui lui sont passés.
touch positionne les heures d'accès et de modification de chaque fichier spécifié à l'heure courant. Les fichiers qui n'existent pas sont créés vides.
Installez GCC en lançant les commandes suivantes:
mkdir $LFS/usr/src/gcc-build &&
cd $LFS/usr/src/gcc-build &&
../gcc-2.95.2.1/configure --prefix=/usr \
--with-gxx-include-dir=/usr/include/g++ \
--enable-languages=c,c++ --disable-nls &&
make -e LDFLAGS=-static bootstrap &&
make prefix=$LFS/usr local_prefix=$LFS/usr/local \
gxx_include_dir=$LFS/usr/include/g++ install &&
cd $LFS/lib &&
ln -s ../usr/bin/cpp &&
cd $LFS/usr/lib &&
ln -s ../bin/cpp &&
cd $LFS/usr/bin &&
ln -s gcc cc
--enable-languages=c,c++: Ceci ne crée que les compilateurs C et C++, et pas les autres compilateurs disponibles, parce qu'ils sont en moyenne très peu utilisés. Si certains de ces autres compilateurs sont nécessaires, le paramètre --enable-languages peut être omis.
ln -s ../usr/bin/cpp: Ceci crée le lien symbolique $LFS/lib/cpp. Certains packages essaient explicitement de trouver cpp dans /lib.
ln -s ../bin/cpp: Ceci crée le lien symbolique $LFS/usr/lib/cpp, parce qu'il y a des packages qui s'attendent à ce que cpp soit dans /usr/lib.
Un compilateur traduit le code source sous format texte en un format que l'ordinateur peut comprendre. Après qu'un fichier de code source a été compilé en un fichier objet, un éditeur de liens crée un fichier exécutable à partir d'un ou plusieurs de ces fichiers objet générés par le compilateur.
Un préprocesseur pré-traduit un fichier source, faisant par exemple l'inclusion des contenus des fichiers d'en-tête dans le fichier source. Il est conseillé de ne pas faire cela manuellement, pour gagner du temps. On insère simplement une ligne comme #include <nom_fichier>. Le préprocesseur insère le contenu de ce fichier dans le fichier source. C'est une des choses que fait le préprocesseur.
La bibliothèque C++ est utilisée par les programmes C++. La bibliothèque C++ contient les fonctions qui sont couramment utilisées dans les programmes C++. Ainsi, le programmeur n'a pas à réécrire certaines fonctions (comme afficher une chaîne de caractères à l'écran) à chaque fois qu'il crée un programme.
Nous n'allons pas encore compiler une nouvelle image du noyau. Nous le ferons après avoir fini l'installation des logiciels du système de base dans ce chapitre. Mais, parce que certains logiciels ont besoin des fichiers d'en-tête du noyau, nous allons désarchiver le noyau maintenant et le configurer pour pouvoir compiler les packages ayant besoin du noyau.
Le fichier de configuration du noyau est créé en exécutant la commande suivante:
make mrproper &&
yes "" | make config &&
make dep &&
cd $LFS/usr/include &&
ln -s ../src/linux/include/linux &&
ln -s ../src/linux/include/asm
make mrproper: Ceci s'assure que l'arborescence du noyau est parfaitement propre.
yes "" | make config: Ceci exécute make config et donne la réponse par défaut à toutes les questions que le script de configuration pose à l'utilisateur (il fait ceci en se contentant de transmettre l'équivalent de l'appui sur la touche Enter, qui accepte les réponses par défaut Y et N aux questions). Nous ne configurons pas, ici, le véritable noyau; nous n'avons besoin que d'un fichier de configuration quelconque, pour pouvoir ensuite exécuter make dep qui créera de nouveaux fichiers dans $LFS/usr/src/linux/include/linux, comme version.h, entre autres, dont nous aurons besoin plus tard dans chroot pour compiler Glibc ainsi que d'autres packages.
make dep: make dep vérifie les dépendances et crée le fichier des dépendances. Nous n'avons pas vraiment besoin de la vérification des dépendances, mais ce qui nous importe est que make dep crée les fichiers susmentionnés dans $LFS/usr/src/linux/include/linux, dont nous aurons besoin plus tard.
ln -s ../src/linux/include/linux et ln -s ../src/linux/include/asm: Ces commandes créent les liens symboliques linux et asm dans le répertoire $LFS/usr/include et les font pointer vers les répertoires corrects dans l'arborescence des sources de Linux. Les packages nécessitant les en-têtes du noyau les incluent avec des lignes comme #include <linux/errno.h>. Ces chemins sont relatifs au répertoire /usr/include, donc le lien symbolique /usr/include/linux pointe vers le répertoire contenant les fichiers d'en-tête du noyau linux. Il en va de même pour le lien symbolique asm.
Le noyau de Linux est au cœur de chaque système Linux. C'est lui qui fait tourner Linux. Quand vous allumez votre ordinateur et démarrez un système Linux, la toute première partie de logiciel Linux qui est chargée est le noyau. Le noyau initialise les composants matériels du système comme les ports série, les ports parallèles, les cartes son, les cartes réseau, les contrôleurs IDE, les contrôleurs SCSI et beaucoup d'autres choses. En bref, le noyau rend le matériel disponible pour que le logiciel puisse fonctionner.
Installez Grep en exécutant les commandes suivantes :
export CPPFLAGS=-Dre_max_failures=re_max_failures2 &&
./configure --prefix=$LFS/usr --disable-nls &&
unset CPPFLAGS &&
make LDFLAGS=-static &&
make install
egrep affiche les lignes des fichiers qui vérifient une expression régulière étendue.
fgrep affiche les lignes des fichiers qui vérifient une liste de chaînes fixes, séparées par des caractères de fin de ligne, l'une quelconque de ces chaînes devant correspondre.
Avant d'installer Gzip, il vous faut décompresser le fichier patch de gzip.
patch -Np1 -i ../gzip-1.2.4a.patch &&
./configure --prefix=$LFS/usr &&
make LDFLAGS=-static &&
make install &&
cp $LFS/usr/bin/gunzip $LFS/usr/bin/gzip $LFS/bin &&
rm $LFS/usr/bin/gunzip $LFS/usr/bin/gzip
Le package Gzip contient les programmes compress, gunzip, gzexe, gzip, uncompress, zcat, zcmp, zdiff, zforece, zgrep, zmore et znew.
gunzip décompresse les fichiers qui ont été compressés avec gzip.
gzexe permet de compresser des exécutables en les remplaçant, et de faire en sorte qu'ils se décompressent automatiquement et s'exécutent lorsqu'ils sont lancés (avec une dégradation des performances).
zcat décompresse une liste de fichiers fournie en ligne de commande ou sur son entrée standard, et écrit les données décompressées sur la sortie standard.
zforce force l'extension .gz sur tous les fichiers gzip, pour que gzip ne les compresse pas deux fois. Ceci peut être utile pour des fichiers dont les noms ont été tronqués après un transfert.
zmore est un filtre qui permet d'examiner des fichiers texte simples ou compressés, écran par écran, sur un terminal (de la même manière que more).
Installez Make en exécutant les commandes suivantes :
./configure --prefix=$LFS/usr --disable-nls &&
make LDFLAGS=-static &&
make install
make détermine automatiquement quels morceaux d'un gros programme ont besoin d'être recompilés, et exécute les commandes pour les recompiler.
Installez Sed en exécutant les commandes suivantes :
export CPPFLAGS=-Dre_max_failures=re_max_failures2 &&
./configure --prefix=$LFS/usr --bindir=$LFS/bin &&
unset CPPFLAGS &&
make LDFLAGS=-static &&
make install
sed est un éditeur de flux. Un éditeur de flux est utilisé pour opérer des transformations de texte basiques sur un flux d'entrée (un fichier ou une entrée depuis un pipe).
Installez Shellutils en exécutant les commandes suivantes :
./configure --prefix=$LFS/usr --disable-nls &&
make LDFLAGS=-static &&
make install &&
cd $LFS/usr/bin &&
mv date echo false pwd stty $LFS/bin &&
mv su true uname hostname $LFS/bin
Le package Shellutils contient les programmes basename, chroot, date, dirname, echo, env, expr, factor, false, groups, hostid, hostname, id, logname, nice, nohup, pathchk, pinky, printenv, printf, pwd, seq, sleep, stty, su, tee, test, true, tty, uname, uptime, users, who, whoami et yes.
basename supprime le répertoire et les suffixes des noms de fichier.
date affiche la date et l'heure courantes dans un format spécifié, ou positionne la date du système.
Pour pouvoir utiliser directement les fichiers bzip2 avec tar, utilisez le patch disponible sur le site FTP de LFS. Ce patch ajoute l'option -y à tar qui fonctionne de la même manière que l'option -z (qui peut être utilisée pour les fichiers compressés avec gzip).
Appliquez le patch en exécutant les commandes suivantes :
cd src &&
patch -i ../../gnutarpatch.txt &&
cd ..
Installez Tar en exécutant les commandes suivantes :
./configure --prefix=$LFS/usr --disable-nls \
--libexecdir=$LFS/usr/bin &&
make LDFLAGS=-static &&
make install &&
mv $LFS/usr/bin/tar $LFS/bin
tar est un programme d'archivage conçu pour stocker et extraire des fichiers d'un fichier archive appelé fichier tar.
rmt est un programme utilisé par les programmes distants dump et restore pour manipuler un lecteur de bandes magnétiques via une connexion de communication inter-processus.
Installez Textutils en exécutant les commandes suivantes :
./configure --prefix=$LFS/usr --disable-nls &&
make LDFLAGS=-static &&
make install &&
mv $LFS/usr/bin/cat $LFS/bin
Le paquet Textutils contient les programmes cat, cksum, comm, split, cut, expand, fmt, fold, head, join, md5sum, nl, od, paste, pr, ptx, sort, split, sum, tac, tail, tr, tsort, unexpand, uniq et wc.
cat concatène le(s) fichier(s) ou l'entrée standard vers la sortie standard.
cplit découpe un fichier en morceaux séparés par un(des) motif(s) dans des fichiers xx01, xx02, ..., et affiche le nombre d'octets de chaque morceau sur la sortie standard.
expand convertit les tabulations dans les fichiers en espaces, en écrivant sur la sortie standard.
fmt reformate chaque paragraphe dans le(s) fichier(s) spécifié(s), en écrivant sur la sortie standard.
fold emballe les lignes d'entrée de chaque fichier spécifié (entrée standard par défaut), en écrivant sur la sortie standard.
head affiche les xx (10 par défaut) premières lignes de chaque fichier spécifié sur la sortie standard.
od écrit une représentation non-ambiguë, en octal par défaut, d'un fichier spécifié, sur la sortie standard.
paste écrit des lignes, d'une manière consistant à prendre séquentiellement les lignes correspondantes de chaque fichier spécifié, séparées par des tabulations, sur la sortie standard.
tail écrit les xx (10 par défaut) dernières lignes de chaque fichier spécifié sur la sortie standard.
tr convertit, répète et/ou supprime des caractères de l'entrée standard, en écrivant sur la sortie standard.
tsort écrit des listes totalement ordonnées en accord avec l'ordonnancement partiel dans les fichiers spécifiés.
unexpand convertit les espaces dans chaque fichier en tabulations, en écrivant sur la sortie standard.
uniq supprime toutes les lignes identiques successives sauf une depuis des fichiers ou l'entrée standard, et écrit dans des fichiers ou la sortie standard.
wc affiche le nombre de lignes, mots et octets de chaque fichier spécifié, et une ligne de totalisation si plus d'un fichier est spécifié.
Installez Mawk en lançant les commandes suivantes:
./configure &&
sed \
s/"\$(CC) \$(CFLAGS) -o"/"\$(CC) \$(CFLAGS) \$(LDFLAGS) -o"/ \
Makefile | make -f - LDFLAGS=-static &&
make BINDIR=$LFS/usr/bin \
MANDIR=$LFS/usr/share/man/man1 install
mawk est un interpréteur pour le langage de programmation AWK. Le langage AWK est utile pour manipuler des fichiers de données, retrouver et travailler sur du texte, et pour prototyper et expérimenter des algorithmes.
Installez Texinfo en lançant les commandes suivantes:
./configure --prefix=$LFS/usr --disable-nls &&
make LDFLAGS=-static &&
make install
Le package Texinfo contient les programmes info, install-info, makeinfo, texi2dvi et texindex.
Le programme info lit les documents Info, en général situés dans le répertoire /usr/doc/info. Les documents Info sont comme des pages de man(uel), mais ont tendance à aller plus en profondeur que la simple explication des options d'un programme.
Le programme install-info met à jour les entrées d'info. Quand le programme info est exécuté, une liste de sujets disponibles (c'est-à-dire les documents info disponibles) est affichée. Le programme install-info est utilisé pour tenir cette liste de sujets disponibles à jour. Si des fichiers d'info sont supprimés manuellement, il faut également supprimer le sujet dans le fichier d'index. Ce programme est utilisé dans ce but. Il fonctionne également, dans l'autre sens, quand des documents d'info sont ajoutés.
Le programme makeinfo traduit des documents source Texinfo en différents formats. Les formats disponibles sont: fichiers info, texte et HTML.
Installez Gettext en lançant les commandes suivantes:
./configure --disable-nls &&
make -C lib &&
make -C intl &&
make -C src LDFLAGS=-all-static msgfmt &&
cp src/msgfmt $LFS/usr/bin
Le pacakge gettext contient les programmes gettext, gettextize, msgcmp, msgcomm, msgfmt, msgmerge, msgunfmt et xgettext.
Le package gettext est utilisé pour l'internationalisation (connue aussi sous le terme de i18n) et pour la localisation (connue aussi sous le terme de l10n). Les programmes peuvent être compilés avec le Support du Langage Natif (NLS) qui leur permet d'afficher les messages dans la langue natale des utilisateurs plutôt qu'en anglais, par défaut.
Pour que l'utilisateur et le groupe root soient reconnus et puissent se connecter, il faut une entrée correspondante dans les fichiers /etc/passwd et /etc/group. D'autre part, le groupe root ainsi que quelques autres sont recommandés et nécessaires pour certains packages. Les groupes et leur GID ci-dessous ne font partie d'aucun standard. Le LSB recommande uniquement, à côté d'un groupe root, un groupe bin avec un GID de 1. Les noms et GID des autres groupes peuvent être choisis par l'utilisateur. Les packages bien écrits ne dépendent pas du numéro de GID, mais seulement du nom du groupe, car le GID d'un groupe importe peu. Comme il n'y a aucun standard pour les groupes, je ne suivrai pas les conventions utilisées par Debian, RedHat ou d'autres. Les groupes ajoutés ici sont ceux mentionnés dans le script MAKEDEV (le script qui crée les fichiers de périphérique dans le répertoire /dev).
Créez un nouveau fichier $LFS/etc/passwd en exécutant la commande suivante :
echo "root:x:0:0:root:/root:/bin/bash" > $LFS/etc/passwd
Créez un nouveau fichier $LFS/etc/group en lançant ce qui suit :
cat > $LFS/etc/group << "EOF"
root:x:0:
bin:x:1:
sys:x:2:
kmem:x:3:
tty:x:4:
tape:x:5:
daemon:x:6:
floppy:x:7:
disk:x:8:
lp:x:9:
dialout:x:10:
audio:x:11:
EOF
Pour que certains programmes fonctionnent correctement, le système de fichiers proc doit être monté et accessible depuis l'environnement chroot. Il n'y a pas de problèmes à monter le système de fichiers proc deux fois, ou même plus, car c'est un système de fichiers virtuel maintenu par le noyau lui-même.
Le système de fichiers proc est monté sous $LFS/proc en exécutant la commande suivante:
mount proc $LFS/proc -t proc
L'installation de l'ensemble des logiciels est assez simple et vous allez penser qu'il serait bien plus facile et rapide de donner des instructions d'installation génériques pour tous les packages, et d'expliquer comment installer quelque chose uniquement si un package particulier requiert une méthode d'installation différente. Bien que je sois d'accord avec cela, j'ai cependant choisi de fournir l'ensemble des instructions pour chaque package. Ceci dans le simple but d'éviter toute confusion possible et des erreurs en découlant.
La plupart des programmes et des bibliothèques sont compilés par défaut avec les symboles de déboguage (option de gcc -g). Laissez-moi vous expliquer ce que sont ces symboles de déboguage et pour quelle raison vous ne les voudriez pas.
Un programme compilé avec des symboles de déboguage signifie qu'un utilisateur peut exécuter un programme ou une bibliothèque via un débogueur, et que les résultats de ce débogueur seront facilement utilisables. Ces symboles de déboguage augmentent également la taille du programme ou de la bibliothèque de façon significative.
Avant que vous vous demandiez si ces symboles de déboguage feront une grande différence, voici quelques statistiques. Utilisez-les pour vous forger votre propre conclusion.
Un binaire Bash dynamique avec symboles de déboguage: 1.2Mo.
Un binaire Bash dynamique sans symboles de déboguage: 478ko.
/lib et /usr/lib (fichiers glibc et gcc) avec symboles de déboguage: 87Mo.
/lib et /usr/lib (fichiers glibc et gcc) sans symboles de déboguage: 16Mo.
Les tailles peuvent différer selon le compilateur utilisé et la version de la bibliothèque C utilisée pour lier les programmes dynamiques, mais vos résultats seront similaires si vous comparez les programmes avec et sans symboles de déboguage. Après avoir terminé ce chapitre et supprimé tous les symboles de déboguage de tous les binaires de LFS, j'ai regagné quelques 102Mo d'espace disque. Belle différence!
Pour supprimer les symboles de déboguage d'un fichier binaire (qui doit être un binaire de type a.out ou ELF), lancez strip --strip-debug filename. Vous pouvez utiliser des jokers si vous devez supprimer les symboles de déboguage de plusieurs fichiers (utilisez quelque chose comme strip --strip-debug $LFS/usr/bin/*). La plupart des gens n'utiliseront sans doute jamais un débogueur sur leurs logiciels, donc enlever ces symboles vous fera gagner beaucoup de place disque.
Vous trouverez plus d'information dans le guide d'optimisation, qui peut être trouvé à http://cvs.linuxfromscratch.org/index.cgi/hints/.
A la section suivante lorsque nous serons entrés dans l'environnement chroot, nous voulons que soient exportées quelques variables d'environnement dans ce shell, comme PS1, PATH et d'autres variables qu'il est bon d'avoir positionnées. Pour cela, nous allons créer le fichier $LFS/root/.bash_profile qui sera lu par bash quand nous entrerons dans l'environnement chroot.
Créez un nouveau fichier $LFS/root/.bash_profile en lançant ce qui suit.
cat > $LFS/root/.bash_profile << "EOF"
# Debut /root/.bash_profile
PS1='\u:\w\$ '
PATH=/bin:/usr/bin:/sbin:/usr/sbin
export PS1 PATH
# Fin /root/.bash_profile
EOF
Vous pouvez ajouter d'autres variables d'environnement, des alias et tout ce que vous voulez ou avez besoin, à votre discrétion.
Il est temps d'entrer dans notre environnement chroot pour installer le reste des logiciels dont nous avons besoin.
Tapez les commandes suivantes pour entrer dans l'environnement chroot. A partir de maintenant, il n'est plus nécessaire d'utiliser la variable $LFS, parce que tout ce qu'un utilisateur fera sera restreint à la partition LFS (puisque / est maintenant /mnt/lfs, mais le shell ne le sait pas).
cd $LFS &&
chroot $LFS /usr/bin/env -i HOME=/root \
TERM=$TERM /bin/bash --login
La construction TERM=$TERM positionnera la valeur $TERM dans chroot à la même valeur que hors du chroot, ce qui est nécessaire pour que des programmes comme vim et less fonctionnent correctement.
Maintenant que nous sommes dans l'environnement chroot, nous pouvons continuer à installer tous les logiciels du système de base. Assurez-vous de bien exécuter toutes les commandes suivantes de ce chapitre et des suivants à partir de l'environnement chroot. Si vous quittez cet environnement pour une raison quelconque (en redémarrant, par exemple), souvenez-vous de monter de nouveau $LFS/proc et de ré-entrer dans chroot avant de poursuivre le livre.
Remarquez que l'invite de bash contiendra "I have no name!". Ceci est normal, car Glibc n'a pas encore été installé.
Décompactez glibc-linuxthreads dans le répertoire glibc-2.2.1, et non dans /usr/src.
Installez Glibc en lançant les commandes suivantes:
mknod -m 0666 /dev/null c 1 3 &&
touch /etc/ld.so.conf &&
mkdir /usr/src/glibc-build &&
cd /usr/src/glibc-build &&
sed s/"\$(PERL)"/"\/usr\/bin\/perl"/ \
../glibc-2.2.1/malloc/Makefile > tmp~ &&
mv tmp~ ../glibc-2.2.1/malloc/Makefile &&
sed "s/root/0/" ../glibc-2.2.1/login/Makefile > tmp~ &&
mv tmp~ ../glibc-2.2.1/login/Makefile &&
../glibc-2.2.1/configure \
--prefix=/usr --enable-add-ons \
--libexecdir=/usr/bin &&
sed s/"cross-compiling = yes"/"cross-compiling = no"/ \
config.make > config.make~ &&
mv config.make~ config.make &&
make &&
make install &&
make localedata/install-locales
En sortant de l'environnement chroot puis en y en y rentrant à nouveau, vous pourrez vous débarrasser du message "I have no name!" dans l'invite de commande, qui est due à l'incapacité de bash de transformer un identifiant d'utilisateur en nom d'utilisateur. Vous n'êtes pas obligé de sortir et rentrer dans chroot, mais ceci est fortement recommandé pour garantir un bash fonctionnant correctement.
Lancez les commandes suivantes pour faire cela:
logout
chroot $LFS /usr/bin/env -i HOME=/root \
TERM=$TERM /bin/bash --login
mknod -m 0666 /dev/null c 1 3: Glibc a besoin d'un périphérique null pour compiler correctement. Tous les autres périphériques seront créés dans la section suivante.
touch /etc/ld.so.conf Une des étapes finales de l'installation de Glibc est de lancer ldconfig pour mettre à jour le cache du chargeur dynamique. Si ce fichier n'est pas présent, Glibc se terminera en erreur indiquant qu'il ne peut lire le fichier. Nous créons donc un fichier vide pour cela (le fichier vide entraînera l'utilisation par défaut par Glibc de /lib et /usr/lib, ce qui est parfait pour l'instant).
--enable-add-ons: Ceci active l'extension que nous avons installée avec Glibc: linuxthreads.
La bibliothèque C est un ensemble de fonctions couramment utilisées dans les programmes. Ainsi, un programmeur n'a pas besoin de créer ses propres fonctions pour chaque tâche de base. Les opérations les plus courantes comme écrire une ligne à l'écran sont déjà présentes et à la disposition du programmeur.
La bibliothèque C (comme, actuellement, presque toutes les bibliothèques) est fournie en deux versions: dynamique et statique. En bref, quand un programme utilise une bibliothèque C statique, le code de la bibliothèque C est copié dans le fichier exécutable. Quand un programme utilise une bibliothèque dynamique, cet exécutable ne contiendra pas le code de la bibliothèque C, mais simplement une routine qui chargera les fonctions depuis la bibliothèque au moment de l'exécution du programme. Cela signifie une réduction significative de la taille du fichier du programme. La documentation fournie avec la bibliothèque C décrit cela en détail, car cela est trop compliqué à expliquer ici en une ou deux lignes.
Note: Le fichier MAKEDEV.bz2 que vous avez décompacté n'est pas une archive; il ne créera donc pas de répertoire pour que vous vous y rendiez.
Créez les fichiers de périphérique en lançant les commandes suivantes:
chmod 755 MAKEDEV &&
cp MAKEDEV /dev &&
cd /dev &&
./MAKEDEV -v generic
Le paramètre " generic" passé au script MAKEDEV ne crée pas tous les périphériques dont un utilisateur peut avoir besoin, comme les périphériques audio, hdc, hdd et autres. S'il semble que quelque chose manque, il faut dire à MAKEDEV de le créer. Pour créer hdc, remplacez generic par hdc. Un utilisateur peut aussi ajouter hdc à generic, pour exécuter ./MAKEDEV -v generic hdc pour créer l'ensemble des fichiers de périphériques générique, plus les fichiers nécessaires pour accéder à hdc (et hdc1, hdc2, etc.).
MAKEDEV créera hda[1-20] et hdb[1-20] et ainsi de suite, mais il faut garder à l'esprit que tous ces périphériques ne pourront pas forcément être utilisés, à cause des limitations du noyau concernant le nombre maximal de partitions.
./MAKEDEV -v generic: Ceci crée les périphériques génériques. Normalement, Il devrait y avoir tous les périphériques dont vous avez besoin. Il se peut qu'il vous manque quelques périphériques spéciaux nécessaires pour votre configuration matérielle. Créez-les avec ./MAKEDEV -v <peripherique>.
MAKEDEV est un script qui peut aider à créer les fichiers de périphérique statiques nécessaires, qui sont d'habitude dans le répertoire /dev.
Le paquet Man-pages contient différentes pages de manuel qui ne sont pas fournies avec les paquets.
Des exemples de pages de manuel fournies sont les pages de manuel décrivant toutes les fonctions C et C++, quelques fichiers /dev/ importants, etc.
Installez Ed en lançant les commandes suivantes:
./configure --prefix=/usr &&
make &&
make install &&
mv /usr/bin/ed /usr/bin/red /bin
ed est un éditeur de texte par ligne. Il est utilisé pour créer, afficher, modifier et réaliser d'autres manipulations sur les fichiers texte.
Installez Patch en lançant les commandes suivantes:
./configure --prefix=/usr &&
make &&
make install
Le programme patch modifie un fichier en accord avec un fichier patch. Un fichier patch est, en général, une liste créée par le programme diff, qui contient des instructions sur la manière dont un fichier original doit être modifié. patch est très utilisé pour les corrections de code source, car il fait économiser du temps et de la place. Imaginez un pacakge d'une taille de 1Mo. Dans la version suivante de ce package ne sont modifiés que deux des fichiers de la première version. Il peut être mis à disposition comme un package entièrement nouveau de 1Mo, ou seulement comme un fichier patch de 1ko qui mettra à jour la première version pour la rendre identique à la seconde. Ainsi, si la première version a déjà été téléchargée, un fichier patch évite un second téléchargement important.
Avant d'installer Findutils, vous devez déballer le fichier patch de findutils.
Installez Findutils en lançant les commandes suivantes:
patch -Np1 -i ../findutils-4.1.patch &&
./configure --prefix=/usr &&
make &&
make libexecdir=/usr/bin install
Le programme find recherche, dans une hiérarchie de répertoires, les fichiers qui correspondent à un certain critère. Si aucun critère n'est fourni, il liste tous les fichiers dans le répertoire courant et ses sous-répertoires.
locate scrute une base de données qui contient tous les fichiers et répertoires d'un système de fichiers. Ce programme liste les fichiers et répertoires de cette base de données qui vérifient un certain critère. Si un utilisateur recherche un fichier, ce programme va scruter la base de données et lui dire exactement où sont situés les fichiers qu'il a demandés. Cela n'a de sens que si la base de données de localisation est correctement mise à jour, autrement ce programme vous fournira des informations périmées.
Le programme updatedb met à jour la base de données de localisation. Il scrute tout le système de fichiers (y compris les autres systèmes de fichiers actuellement montés, sauf si vous lui spécifiez de ne pas le faire), et enregistre chaque répertoire et fichier qu'il trouve dans la base de données qui sera utilisée par le programme locate, qui retrouve ces informations. C'est une bonne habitude que de mettre à jour cette base de données quotidiennement, pour qu'elle soit à jour au moment ou ce sera nécessaire.
La commande xargs applique une commande à une liste de fichiers. Si vous devez exécuter la même commande sur de multiples fichiers, vous pouvez créer un fichier qui contient tous ces fichiers (un par ligne) et utiliser xargs pour lancer une commande sur la liste.
Installez Mawk en lançant les commandes suivantes:
./configure &&
make &&
make BINDIR=/usr/bin \
MANDIR=/usr/share/man/man1 install &&
cd /usr/bin &&
ln -s mawk awk
mawk est un interpréteur pour le langage de programmation AWK. Le langage AWK est utile pour manipuler des fichiers de données, retrouver et travailler sur du texte, et pour prototyper et expérimenter des algorithmes.
Installez Ncurses en lançant les commandes suivantes:
./configure --prefix=/usr --libdir=/lib \
--with-shared --disable-termcap &&
make &&
make install &&
cd /lib &&
ln -s libncurses.a libcurses.a
--with-shared: Ceci permet la construction des fichiers partagés de la bibliothèque ncurses.
--disable-termcap: Désactive la compilation du support de termcap.
ln -s libncurses.a libcurses.a: Ceci crée le lien symbolique /lib/libcurses.a qui, pour une raison inconnue, n'est pas créé pendant l'installation de libncurses.
Le package Ncurses contient les bibliothèques ncurses, panel, menu et form. Il contient également les programmes tic, infocmp, clear, tput, toe et tset.
Les bibliothèques qui constituent la bibliothèque Ncurses sont utilisées pour afficher du texte (souvent de manière fantaisiste) à l'écran. Un exemple d'utilisation de ncurses se trouve dans le processus " make menuconfig" du noyau. Les bibliothèques contiennent les routines pour créer des panneaux, des menus, des formulaires, et des routines générales d'affichage de texte.
tic est le compilateur de description des entrées de terminfo. Le programme traduit un fichier terminfo du format source en format binaire utilisable avec les routines de la bibliothèque ncurses. Les fichiers terminfo contiennent des informations sur les capacités d'un terminal.
Le programme infocmp peut être utilisé pour comparer une entrée binaire de terminfo avec d'autres, ré-écrire une description terminfo pour tenir compte du champ use= de terminfo, ou afficher une description terminfo du fichier binaire (term) sous différents formats (à l'opposé de ce que fait tic).
Le programme clear efface l'écran, si cela est possible. Il regarde dans l'environnement du type de terminal, puis dans la base de données terminfo, pour trouver comment effacer l'écran.
Le programme tput utilise la base de données terminfo pour construire les valeurs des capacités dépendant du terminal et les informations disponibles pour le shell, pour initialiser ou réinitialiser le terminal, ou renvoyer le nom long du type de terminal requis.
Le programme toe liste tous les types de terminaux disponibles par leur nom primaire, avec leur description.
Le programme tset initialise les terminaux pour qu'ils puissent être utilisés, mais il n'est plus beaucoup utilisé désormais. Il est fourni pour la compatibilité avec BSD 4.4.
Si un utilisateur ne veut pas que vim soit installé comme éditeur sur le système LFS, il peut télécharger et installer un autre éditeur qu'il préfère. Il existe quelques guides sur la manière d'installer différents éditeurs disponibles à http://cvs.linuxfromscratch.org/index.cgi/hints/editors/.
Vous avez besoin de déballer à la fois les packages vim-rt et vim-src pour installer Vim. Les deux packages déballeront leurs fichiers dans le répertoire vim-5.7. Les fichiers des deux packages ne s'écrasent pas entre eux, donc l'ordre de déballage importe peu. Installez Vim en lançant les commandes suivantes:
./configure --prefix=/usr &&
make &&
make install &&
cd /usr/bin &&
ln -s vim vi
Si un utilisateur prévoit d'installer le système X Window sur son système LFS, il pourra recompiler Vim après l'installation de X. Vim est fourni avec une très jolie version GUI de l'éditeur, qui nécessite que X et quelques autres bibliothèques soient installés. Pour plus d'information, lisez la documentation de Vim.
Le package Vim contient les programmes ctags, etags, ex, gview, gvim, rgview, rgvim, rview, rvim, view, vim, vimtutor et xxd.
ctags génère des fichiers de marquage pour le code source.
etags fait la même chose que ctags, mais il peut générer des fichiers de références croisées qui listent des informations sur les différents objets source trouvés dans un ensemble de fichiers de langage.
rview est une version restreinte de view. Aucune commande shell ne peut être lancée et Vim ne peut pas être interrompu.
rvim est la version restreinte de vim. Aucune commande shell ne peut être lancée et Vim ne peut pas être interrompu.
Installez GCC en lançant les commandes suivantes:
mkdir /usr/src/gcc-build &&
cd /usr/src/gcc-build &&
../gcc-2.95.2.1/configure --prefix=/usr \
--with-gxx-include-dir=/usr/include/g++ \
--enable-shared --enable-languages=c,c++ &&
make bootstrap &&
make install
Un compilateur traduit le code source sous format texte en un format que l'ordinateur peut comprendre. Après qu'un fichier de code source a été compilé en un fichier objet, un éditeur de liens crée un fichier exécutable à partir d'un ou plusieurs de ces fichiers objet générés par le compilateur.
Un préprocesseur pré-traduit un fichier source, faisant par exemple l'inclusion des contenus des fichiers d'en-tête dans le fichier source. Il est conseillé de ne pas faire cela manuellement, pour gagner du temps. On insère simplement une ligne comme #include <nom_fichier>. Le préprocesseur insère le contenu de ce fichier dans le fichier source. C'est une des choses que fait le préprocesseur.
La bibliothèque C++ est utilisée par les programmes C++. La bibliothèque C++ contient les fonctions qui sont couramment utilisées dans les programmes C++. Ainsi, le programmeur n'a pas à réécrire certaines fonctions (comme afficher une chaîne de caractères à l'écran) à chaque fois qu'il crée un programme.
Installez Bison en lançant les commandes suivantes:
./configure --prefix=/usr \
--datadir=/usr/share/bison &&
make &&
make install
Certains programmes ignorent bison et tentent de trouver le programme yacc (bison est une (meilleure) alternative à yacc). Donc, pour satisfaire ces quelques programmes, nous allons créer un script yacc qui appelle bison et émule les conventions de nom suivies par yacc pour ses fichiers de sortie.
Créez un nouveau fichier /usr/bin/yacc en lançant ce qui suit:
cat > /usr/bin/yacc << "EOF"
#!/bin/sh
# Debut de /usr/bin/yacc
/usr/bin/bison -y "$@"
# Fin de /usr/bin/yacc
EOF
chmod 755 /usr/bin/yacc
--datadir=/usr/share/bison: Ceci installe les fichiers de grammaire de bison dans /usr/share/bison plutôt que dans /usr/share.
Bison est un générateur de parseur, en remplacement de YACC. YACC signifie Encore un Autre Compilateur de Compilateurs. Qu'est-ce donc que Bison? C'est un programme qui génère un programme qui analyse la structure d'un fichier texte. Au lieu d'écrire le programme, un utilisateur spécifie comment les choses doivent être reliées et, avec ces règles, un programme est construit pour analyser le fichier texte.
Il y a de nombreux exemples où une structuration est nécessaire et l'un d'eux est la calculatrice.
Soit la chaîne:
1 + 2 * 3
Un humain peut facilement arriver au résultat de 7. Pourquoi? A cause de sa structure. Notre cerveau sait comment interpréter la chaîne. L'ordinateur ne le sait pas, et Bison est un outil pour l'aider à comprendre cela, en présentant la chaîne sous la forme suivante au compilateur:
+
/ \
* 1
/ \
2 3
En commençant en bas de l'arbre, et en arrivant aux nombres 2 et 3, qui sont liés par un symbole de multiplication, l'ordinateur multiplie 2 par 3. Le résultat de cette multiplication est mémorisé et la prochaine chose que l'ordinateur voit est le résultat de 2*3 et le nombre 1 qui sont reliés par le symbole d'addition. L'ajout de 1 au résultat précédent donne 7. En calcul, les opérations les plus complexes peuvent être exprimées sous ce format d'arbre, et l'ordinateur commence simplement en bas, et travaille en cheminant vers le haut, pour arriver à la réponse correcte. Bien entendu, Bison n'est pas uniquement utilisé pour les calculatrices.
Installez Less en lançant les commandes suivantes:
./configure --prefix=/usr --bindir=/bin &&
make &&
make install
Le programme less est un paginateur de fichier (ou un afficheur de texte). Il affiche le contenu d'un fichier avec la possibilité de défilement. Less est une évolution du paginateur habituel appelé " more" . Less permet le défilement arrière dans les fichiers et n'a pas besoin de lire tout le fichier quand il démarre, ce qui le rend plus rapide quand vous lisez de gros fichiers.
Installez Groff en lançant les commandes suivantes:
./configure --prefix=/usr &&
make &&
make install
Le package Groff contient les programmes addftinfo, afmtodit, eqn, grodvi, groff, grog, grohtml, grolj4, grops, grotty, hpftodit, indxbib, lkbib, lookbib, neqn, nroff, pfbtops, pic, psbb, refer, soelim, tbl, tfmtodit et troff.
addftinfo lit un fichier de fonte troff et y ajoute des informations supplémentaires de métrique de fonte, afin qu'il soit utilisable par le système groff.
eqn compile les descriptions d'équations intégrées dans des fichiers d'entrée troff en commandes pouvant être comprises par troff.
groff est un frontal pour le système de formatage de document groff. Normalement, il lance le programme troff et un post-processeur approprié au périphérique choisi.
grog lit des fichiers et tente de trouver lesquelles des options groff -e, -man, -me, -mn, -ms, -p, -s et -t sont nécessaires pour imprimer les fichiers, et affiche la commande groff incluant ces options sur la sortie standard.
grolj4 est un pilote pour groff qui produit une sortie en format PCL5 utilisable par une imprimante HP Laserjet 4.
grotty traduit la sortie de troff GNU en une forme convenable pour les périphériques de type machine à écrire.
hpftodit crée un fichier de fonte destiné à être utilisé avec groff -Tlj4 à partir d'un fichier de métrique de fonte spécifique à HP.
indxbib crée un index de permutation pour les bases de données bibliographiques à partir du fichier spécifié, destiné à être utilisé par refer, lookbib et lkbib.
lkbib recherche dans les bases de données bibliographiques les références contenant les clés spécifiées, et affiche les références trouvées sur la sortie standard.
lookbib affiche une invite sur la sortie d'erreur standard (sauf si l'entrée standard n'est pas un terminal), lit une ligne depuis l'entrée standard contenant un ensemble de mots-clés, recherche dans les bases de données bibliographiques dans un fichier spécifié les références contenant ces mots-clés, affiche les références trouvées sur la sortie standard, et répète le processus jusqu'à la fin de l'entrée.
pic compile les descriptions d'images incluses dans des fichiers d'entrée troff ou TeX en commandes qui peuvent être comprises par TeX ou troff.
psbb lit un fichier qui doit être un document Postscript conforme aux conventions de Structuration des Documents, et cherche un commentaire %%BoundingBox.
refer copie le contenu d'un fichier sur la sortie standard, sauf que les lignes entre .[ et .] sont interprétées comme des citations, et que les lignes entre .R1 et .R2 sont interprétées comme des commandes sur la manière de traiter les citations.
soelim lit les fichiers et remplace les lignes de la forme fichier .so par le contenu de fichier.
tbl compile les descriptions de tables intégrées dans les fichiers d'entrée troff en commandes qui peuvent être comprises par troff.
troff est en grande partie compatible avec le troff Unix. En général, il doit être invoqué avec la commande groff, qui lancera aussi les préprocesseurs et les post-processeurs dans l'ordre approprié, et avec les options qui conviennent.
Installez Man en lançant les commandes suivantes:
sed -e 's|in \(.*\$PATH\)|in `echo \1`|' \
configure > tmp~ &&
mv tmp~ configure &&
chmod 755 configure &&
./configure -default &&
make &&
make install &&
sed s/AWK=/"AWK=\/usr\/bin\/mawk"/ \
/usr/sbin/makewhatis > makewhatis-new &&
mv makewhatis-new /usr/sbin/makewhatis &&
chmod 755 /usr/sbin/makewhatis
sed -e 's|in \(.*\$PATH\)|in `echo \1`|' configure...: Ceci corrige un petit problème dans la configuration de man. Le script de configuration cherche des fichiers comme cat, gunzip, bzip2, etc., dans une boudle for qui se déroule sur un chemin spécifié. La scission du chemin ne se fait pas correctement, et nécessite cette correction.
-default: Ceci configure le package man avec les choix par défaut.
sed s/AWK=/"AWK=\/usr\/bin\/mawk"/ /usr/sbin/makewhatis > makewhatis-new: Ceci remplace la variable AWK de /usr/bin/makewhatis par l'emplacement du programme mawk.
chmod 755 /usr/sbin/makewhatis: Ceci rend le script makewhatis de nouveau exécutable.
man formate et affiche les pages de manuel en ligne.
apropos recherche dans un ensemble de fichiers de base de données contenant des descriptions brèves des commandes système, en fonction de mots-clés, et affiche le résultat sur la sortie standard.
whatis recherche dans un ensemble de fichiers de base de données contenant des descriptions brèves de commandes système, en fonction de mots-clés, et affiche le résultat sur la sortie standard. Seules les correspondances de mots complets sont affichées.
makewhatis lit toutes les pages de manuel contenues dans les sections de manpath fournies, ou les pages préformatées contenues dans les sections de catpath données. Pour chaque page, il écrit une ligne dans la base de données whatis; chaque ligne contient le nom de la page et une brève description, séparés par un tiret. La description est extraite du contenu de la section NAME de la page du manuel.
Installez Perl en lançant les commandes suivantes:
./Configure -Dprefix=/usr &&
make &&
make install
Si un utilisateur ne désire pas répondre à toutes les questions que Perl pose, il peut ajouter l'option -d au script de configuration, et Perl utilisera tous les paramètres par défaut. Pour éviter que le script Configure ne pose des questions après la création du fichier config.sh, on peut passer l'option -e à perl. Les commandes avec ces paramètres ressemblent à:
./Configure -Dprefix=/usr -d -e &&
make &&
make install
Perl combine les capacités et les fonctionnalités de C, awk, sed et sh dans un puissant langage de programmation.
Installez M4 en lançant les commandes suivantes:
./configure --prefix=/usr &&
make &&
make install
Si le système de base tourne avec un noyau 2.0 et que la version de Glibc est la 2.1, alors il est plus que probable qu'un utilisateur aura des difficultés à exécuter M4 dans l'environnement chroot, à cause d'incompatibilités entre le programme M4, Glibc-2.1 et le noyau en exécution 2.0. S'il a des problèmes pour exécuter le programme m4 dans l'environnement chroot (par exemple en installant les packages autoconf et automake), il doit sortir de l'environnement chroot et compiler M4 en statique. De cette manière, le binaire sera lié avec Glibc 2.0 (s'il tourne avec un noyau 2.0, la version de Glibc est au mieux 2.0 sur un système correct. Le noyau 2.0 et Glibc-2.1 ne vont pas très bien ensemble) et ne posera plus aucun problème.
Pour créer une version de M4 liée statiquement, exécutez les commandes suivantes:
logout
cd $LFS/usr/src/m4-1.4
./configure --prefix=/usr
make LDFLAGS=-static
make prefix=$LFS/usr install
Maintenant, il est possible d'entrer de nouveau dans l'environnement chroot et de continuer avec le pacakge suivant. Si M4 doit être recompilé dynamiquement, ceci peut être fait après avoir redémarré dans le système LFS au lieu d'y être via chroot.
chroot $LFS env -i HOME=/root bash --login
M4 est un processeur de macro. Il copie l'entrée sur la sortie en développant les macros au fur et à mesure. Les macros sont soit prédéfinies, soit définies par l'utilisateur, et peuvent prendre un nombre quelconque d'arguments. En plus de développer les macros, m4 a des fonctions prédéfinies pour inclure des fichiers nommés, lancer des commandes UNIX, faire de l'arithmétique d'entiers, manipuler du texte de diverses façons, faire de la récursivité, etc. M4 peut être utilisé soit comme frontal d'un compilateur, ou comme processeur de macros à part.
Installez Texinfo en lançant les commandes suivantes:
./configure --prefix=/usr &&
make &&
make install
Le package Texinfo contient les programmes info, install-info, makeinfo, texi2dvi et texindex.
Le programme info lit les documents Info, en général situés dans le répertoire /usr/doc/info. Les documents Info sont comme des pages de man(uel), mais ont tendance à aller plus en profondeur que la simple explication des options d'un programme.
Le programme install-info met à jour les entrées d'info. Quand le programme info est exécuté, une liste de sujets disponibles (c'est-à-dire les documents info disponibles) est affichée. Le programme install-info est utilisé pour tenir cette liste de sujets disponibles à jour. Si des fichiers d'info sont supprimés manuellement, il faut également supprimer le sujet dans le fichier d'index. Ce programme est utilisé dans ce but. Il fonctionne également, dans l'autre sens, quand des documents d'info sont ajoutés.
Le programme makeinfo traduit des documents source Texinfo en différents formats. Les formats disponibles sont: fichiers info, texte et HTML.
Installez Autoconf en lançant les commandes suivantes:
./configure --prefix=/usr &&
make &&
make install
Le package Autoconf contient les programmes autoconf, autoheader, autoreconf, autoscan, autoupdate et ifnames.
autoconf est un outil pour produire des scripts shell qui configurent automatiquement les packages de code source logiciel pour les adapter à de nombreux systèmes UNIX. Les scripts de configuration produits par Autoconf sont indépendants d'Autoconf quand ils sont lancés; leurs utilisateurs n'ont donc pas besoin d'avoir Autoconf.
Le programme autoheader peut créer un fichier modèle de commandes C #define à utiliser pour la configuration.
Si vous avez beaucoup de scripts générés par autoconf, le programme autoreconf peut vous faire gagner du temps. Il lance autoconf (et autoheader, si besoin) de façon répétée pour reconstruire les scripts de configuration Autoconf et les modèles d'en-tête de configuration dans l'arborescence rattachée au répertoire courant.
Le programme autoscan peut vous aider à créer un fichier configure.in pour un package logiciel. autoscan scrute les fichiers sources dans une arborescence rattachée à un répertoire donné en argument de ligne de commande, ou le répertoire courant si aucun n'est spécifié. Il recherche les fichiers sources pour des problèmes habituels de portabilité et crée un fichier configure.scan qui est un préliminaire à configure.in pour ce package.
Le programme autoupdate met à jour un fichier configure.in qui appelle les macros Autoconf par leurs anciens noms, afin qu'il utilise les noms de macro actuels.
ifnames peut servir lors de l'écriture d'un configure.in pour un package logiciel. Il affiche les identifiants que le package utilise déjà dans les conditions du préprocesseur C. Si un package a déjà été mis à jour pour une portabilité quelconque, ce programme peut vous aider à trouver ce que sa configuration doit vérifier. Il peut aider à remplir quelques trous dans un configure.in généré par autoscan.
Installez Automake en lançant les commandes suivantes:
./configure --prefix=/usr &&
make install
Automake inclut un certain nombre de macros Autoconf qui peuvent être utilisées dans les packages; certaines d'entre elles sont requises par Automake, dans certains cas. Ces macros doivent être définies dans le fichier aclocal.m4; autrement, elles ne seront pas vues par autoconf.
Le programme aclocal va générer automatiquement les fichiers aclocal.m4, en fonction du contenu de configure.in. Ceci fournit un bon moyen d'obtenir des macros produites par Automake, sans avoir à rechercher ici ou là. De plus, le mécanisme aclocal peut être étendu pour pouvoir être utilisé par d'autres packages.
Pour créer tous les fichiers Makefile.in d'un package, lancez le programme automake dans le répertoire racine de ce package, sans arguments. automake va chercher automatiquement chaque Makefile.am approprié (en parcourant configure.in) et générer le Makefile.in correspondant.
Installez Bash en lançant les commandes suivantes:
./configure --prefix=/usr --with-curses &&
make &&
make install &&
logout
Le Bash statique est remplacé par le Bash dynamique et on retourne dans l'environnement chroot en lançant:
mv $LFS/usr/bin/bash $LFS/usr/bin/bashbug $LFS/bin &&
chroot $LFS /usr/bin/env -i HOME=/root \
TERM=$TERM /bin/bash --login
bash est le SHell Bourne-Again, qui est un interpréteur de commandes couramment utilisé sur les systèmes Unix. bash est un programme qui lit l'entrée standard, c'est-à-dire le clavier. Un utilisateur tape quelque chose et le programme évalue ce qu'il a entré, et en fait quelque chose, comme lancer un programme.
Installez Flex en lançant les commandes suivantes:
./configure --prefix=/usr &&
make &&
make install &&
cd /usr/bin &&
ln -s flex lex
flex est un outil pour générer des programmes qui reconnaissent des motifs dans du texte. La reconnaissance de motifs est très utile dans de nombreuses applications. Un utilisateur définit les règles de recherche, et flex crée un programme qui recherche ces motifs. La raison pour laquelle les gens utilisent flex est qu'il est plus facile de définir des règles sur ce qu'il faut rechercher, que d'écrire un programme qui scrute le texte pour cela.
Installez File en lançant les commandes suivantes:
./configure --prefix=/usr --datadir=/usr/share/misc &&
make &&
make install
File utilise les nombres magiques pour déterminer le type d'un fichier. Ces nombres magiques sont fournis avec File dans un fichier texte. File compile en interne cette base de données à chacune de ses exécutions. Ce n'est pas le type normal d'opérations pour File, car compiler un fichier texte à chaque fois n'est pas le moyen le plus rapide de faire cela. File fournit une option "-C" pour compiler ce fichier de nombres magiques. La raison pour laquelle cela n'est pas fait automatiquement est que certaines personnes veulent travailler sur les nombres magiques. D'un autre côté, beaucoup de gens ne réalisent pas qu'ils devraient compiler les nombres magiques; l'auteur de File a donc ajouté un avertissement quand le fichier texte magique est utilisé. Comme nous ne travaillerons pas de façon courante sur le fichier texte magique, nous le compilerons, parce que cela est plus rapide, évite un avertissement ennuyeux et correspond à ce qui devrait être:
file -C
file teste chaque fichier spécifié pour essayer de le classer. Il y a trois sortes de tests, réalisés dans cet ordre: tests du système de fichiers, test des nombres magiques et test de langage. Le premier test qui réussit provoque l'affichage du type de fichier.
Install Libtool by running the following commands:
./configure --prefix=/usr &&
make &&
make install
Le package Libtool contient les programmes libtool et libtoolize. Il contient aussi la bibliothèque ltdl.
libtool fournit des services généraux de support de construction des bibliothèques.
Libtool fournit une petite bibliothèque, appelée 'libltdl', qui a pour but de masquer les différentes difficultés liées à l'ouverture dynamique des bibliothèques aux programmeurs.
Installez Bin86 en lançant les commandes suivantes:
make &&
make PREFIX=/usr install
as86 est un assembleur pour les processeurs 8086...80386.
as86_encap est un script shell pour appeler as86 et convertir le binaire créé en fichier C prog.v à inclure ou à lier avec des programmes comme les installeurs de bloc de démarrage.
ld86 comprend uniquement les fichiers objet construit par l'assembleur as86; il peut soit les lier en un exécutable I&D séparé ou impur.
Installez Binutils en lançant les commandes suivantes:
./configure --prefix=/usr --enable-shared &&
make -e tooldir=/usr &&
make -e tooldir=/usr install &&
make -e tooldir=/usr install-info
Le package Binutils contient les programmes gasp, gprof, ld, as, ar, nm, objcopy, objdump, ranlib, readelf, size, strings, strip, c++filt et addr2line.
gasp est le préprocesseur de macros assembleur.
ld combine plusieurs fichiers objets et archives, modifie l'emplacement de leurs données et lie les références des symboles. Souvent, la dernière étape dans la construction d'un nouveau programme compilé à exécuter est un appel à ld.
as a d'abord été prévu pour assembler la sortie du compilateur GNU C gcc, pour qu'elle puisse être utilisée par le lieur ld.
Le programme ar crée, modifie et extrait des données depuis des archives. Une archive est un simple fichier contenant un ensemble d'autres fichiers dans une structure qui permet de retrouver les fichiers individuels d'origine (appelés membres de l'archive).
L'utilitaire objcopy copie le contenu d'un fichier objet dans un autre. objcopy utilise la bibliothèque GNU BFD pour lire et écrire dans les fichiers objet. Il peut écrire le fichier objet destination dans un format différent de celui du fichier objet source.
objdump affiche des informations sur un ou plusieurs fichiers objet. Les options déterminent quelles informations spécifiques sont à afficher. Ces informations sont essentiellement utiles pour les programmeurs qui travaillent sur des outils de compilation, à l'inverse des programmeurs qui veulent juste que leur programme compile et fonctionne.
ranlib génère un index du contenu d'une archive, et le stocke dans l'archive. L'index liste chaque symbole défini par un membre d'une archive, qui est un fichier objet re-localisable.
size liste les tailles des sections -- et la taille totale -- de chaque fichier objet objfile dans sa liste d'arguments. Par défaut, une ligne est générée en sortie pour chaque fichier objet ou chaque module dans l'archive.
Pour chaque fichier donné, strings affiche les séquences de caractères imprimables qui ont au moins une longueur de quatre caractères (ou le nombre spécifié en option du programme) et sont suivies d'un caractère non imprimable. Par défaut, il affiche seulement les chaînes des parties initialisées et chargées des fichiers objet; pour les autres types de fichier, il affiche les chaînes de tout le fichier.
strings est essentiellement utilisé pour déterminer le contenu des fichiers non-texte.
strip débarrasse les fichiers objet de tous les symboles, ou de certains en particuliers. La liste des fichiers objet peut inclure des archives. Au moins un fichier objet doit être fourni. strip modifie les fichiers fournis en argument, plutôt que d'écrire les copies modifiées sous d'autres noms.
Le langage C++ fournit un mécanisme de surcharge, ce qui signifie que vous pouvez écrire plusieurs fonctions ayant le même nom (pourvu que chacune réclame des paramètres de types différents). Tous les noms de fonction C++ sont encodés dans un nom d'assemblage de bas niveau (ce processus est connu sous le nom de broyage). Le programme c++filt fait l'association inverse: il décode (dé-broie) les noms de bas niveau en noms de niveau utilisateur, pour que le lieur puisse prévenir un conflit entre ces fonctions surchargées.
addr2line traduit les adresses d'un programme en noms de fichier et numéros de ligne. A partir d'une adresse et d'un exécutable, il utilise les informations de déboguage présentes dans l'exécutable pour trouver quel nom de fichier et quel numéro de ligne sont associés à une adresse donnée.
Installez Bzip2 en lançant les commandes suivantes:
make -f Makefile-libbz2_so &&
make bzip2recover libbz2.a &&
cp bzip2-shared /bin/bzip2 &&
cp bzip2recover /bin &&
cp bzip2.1 /usr/share/man/man1 &&
cp bzlib.h /usr/include &&
cp -a libbz2.so* libbz2.a /lib &&
rm /usr/lib/libbz2.a &&
cd /bin &&
ln -sf bzip2 bunzip2 &&
rm bzcat && ln -s bzip2 bzcat &&
cd /usr/share/man/man1 &&
ln -s bzip2.1 bunzip2.1 &&
ln -s bzip2.1 bzcat.1 &&
ln -s bzip2.1 bzip2recover.1
Bien que ce ne soit pas, à proprement parler, une partie du système LFS de base, il vaut la peine de mentionner que vous pouvez télécharger un patch pour Tar qui permet au programme tar de compresser et décompresser facilement en utilisant bzip2/bunzip2. Avec un tar normal, un utilisateur doit utiliser des constructions telles que bzcat fichier.tar.bz | tar xv ou tar --use-compress-prog=bunzip2 -xvf fichier.tar.bz2 pour utiliser bzip2 et bunzip2 avec tar. Ce patch vous fournit l'option -y pour qu'un utilisateur puisse décompacter des archives Bzip2 avec tar xvfy fichier.tar.bz2. L'application de ce patch sera décrite plus tard quand vous réinstallerez le package Tar.
make -f Makefile-libbz2_so: Ceci lance la construction de bzip2 avec un fichier Makefile différent, en l'occurrence Makefile-libbz2_so, qui crée une bibliothèque dynamique libbz2.so et lie les utilitaires bzip2 avec.
bzip2 compresse les fichiers avec l'algorithme de compression de texte par tri de blocs de Burrows-Wheeler, et le codage de Huffman. La compression est en général bien meilleure que celle obtenue par les compresseurs plus conventionnels basés sur LZ77/LZ78, et s'approche des performances de la famille PPM des compresseurs statistiques.
Installez Gettext en lançant les commandes suivantes:
./configure --prefix=/usr &&
make &&
make install
Le pacakge gettext contient les programmes gettext, gettextize, msgcmp, msgcomm, msgfmt, msgmerge, msgunfmt et xgettext.
Le package gettext est utilisé pour l'internationalisation (connue aussi sous le terme de i18n) et pour la localisation (connue aussi sous le terme de l10n). Les programmes peuvent être compilés avec le Support du Langage Natif (NLS) qui leur permet d'afficher les messages dans la langue natale des utilisateurs plutôt qu'en anglais, par défaut.
Installez Kbd en lançant les commandes suivantes:
./configure --datadir=/usr/share/kbd &&
make &&
make install &&
rm /usr/share/kbd/keymaps/i386/qwerty/defkeymap.map.gz
Nous devons maintenant choisir un plan de clavier par défaut. Parcourez le répertoire /usr/share/kbd/keymaps et trouvez-y le plan de clavier que vous voudrez utiliser par défaut. Puis exécutez cette commande:
cd /usr/share/kbd/keymaps &&
ln -s <chemin-du-plan-de-clavier> defkeymap.map.gz
Remplacez <chemin-du-plan-de-clavier> par le chemin vers le plan de clavier que vous avez choisi, relativement au répertoire /usr/share/kbd/keymaps. Par exemple, si vous avez choisi le plan de clavier US, vous le remplacerez par i386/qwerty/us.map.gz.
--datadir=/usr/share/kbd: Ceci met les fichiers de données de kbd (fontes, plans du clavier et autres) dans le répertoire /usr/share/kbd, en accord avec le FHS.
rm /usr/share/kbd/keymaps/i386/qwerty/defkeymap.map.gz: Nous supprimons ce fichier parce que nous ne connaissons pas le plan du clavier qu'il vous faut.
ln -s <path-to-keymap> defkeymap.map.gz Avec cette commande, vous positionnez le plan du clavier par défaut, qui peut être chargé avec la commande loadkeys -d.
Le package Kbd contient les programmes chvt, deallocvt, dumpkeys, fgconsole, getkeycodes, kbd_mode, kbdrate, loadkeys, loadunimap, mapscrn, psfxtable, resizecons, screendump, setfont, setkeycodes, setleds, setmetamode, setvesablank, showfont, showkey, unicode_start et unicode_stop. Il y a d'autres programmes, qui ne sont pas installés par défaut, car ils sont très optionnels. Examinez le contenu du package Kbd si vous avez des problèmes avec votre console.
chvt modifie le terminal virtuel de premier plan.
mapscrn charge une table de correspondance des caractères de sortie définie par l'utilisateur dans le pilote de la console. Notez qu'il est obsolète et que ses fonctionnalités sont reprises dans setfont.
psfxtable est un outil pour gérer les tables de caractères Unicode pour les fontes de console.
setkeycodes charge les entrées de la table de correspondance scancode en keycode du noyau.
setleds positionne les LED du clavier. Beaucoup de personnes trouvent utile d'avoir numlock activé par défaut, et c'est en utilisant ce programme que vous pourrez y arriver.
Ceci vous laisse trafiquer l'économiseur d'écran matériel (pas de grilles-pain, seulement un écran vide).
showfont affiche des données sur une fonte. L'information montrée comprend les informations sur la fonte, ses propriétés, les métriques des caractères, et les images des caractères.
Installez Diffutils en lançant les commandes suivantes:
./configure --prefix=/usr &&
make &&
make install
cmp et diff comparent tous deux deux fichiers et montrent leurs différences. Ces deux programmes ont des options pour comparer des fichiers dans différentes situations.
La différence entre diff et diff3 est que diff compare deux fichiers, et diff3 en compare trois.
Installez E2fsprogs en lançant les commandes suivantes:
Remarquez bien que l'option vide --with-root-prefix= ci-dessous doit rester telle quelle. Nous n'avons pas oublié de fournir une valeur ici.
./configure --prefix=/usr --with-root-prefix= \
--enable-elf-shlibs &&
make &&
make install &&
make install-libs
Le package e2fsprogs contient les programmes chattr, lsattr, uuidgen, badblocks, debugfs, dumpe2fs, e2fsck, e2label, fsck, fsck.ext2, mke2fs, mkfs.ext2, mklost+found et tune2fs.
chattr modifie les attributs d'un fichier sur un système de fichier Linux ext2.
Le programme uuidgen crée un nouvel identifiant universel unique (UUID) en utilisant la bibliothèque libuuid. Le nouvel UUID peut raisonnablement être considéré comme unique parmi tous les UUID créés sur le système local, et parmi les UUID créés sur d'autres systèmes, dans le passé ou le futur.
badblocks est utilisé pour rechercher les secteurs défectueux sur un périphérique (en général une partition de disque).
Le programme debugfs est un débogueur de système de fichiers. Il peut être utilisé pour examiner et modifier l'état d'un système de fichiers ext2.
dumpe2fs affiche le super-bloc et les informations de groupe de blocs pour le système de fichiers présent sur un périphérique spécifié.
e2fsck est utilisé pour vérifier un système de fichiers Linux ext2. fsck.ext2 fait la même chose que e2fsck.
e2label affiche ou modifie le nom de système de fichiers sur un système de fichiers ext2 situé sur le périphérique spécifié.
mke2fs est utilisé pour créer un système de fichiers Linux ext2 sur un périphérique (en général une partition de disque). mkfs.ext2 fait la même chose que mke2fs.
mklost+found est utilisé pour créer le répertoire lost+found dans le répertoire de travail courant d'un système de fichiers Linux ext2. mklost+found pré-alloue des blocs de disque pour le répertoire, pour le rendre utilisable par e2fsck.
tune2fs ajuste les paramètres d'optimisation de système de fichiers sur un système de fichiers Linux ext2.
Installez Fileutils en lançant les commandes suivantes:
patch -Np1 -i ../fileutils-4.0.patch &&
./configure --prefix=/usr --bindir=/bin \
--libexecdir=/bin &&
make &&
make install
Le package Fileutils contient les programmes chgrp, chmod, chown, cp, dd, df, dir, dircolors, du, install, ln, ls, mkdir, mkfifo, mknod, mv, rm, rmdir, sync, touch et vdir.
chgrp modifie le groupe d'appartenance de chaque fichier donné en lui affectant le groupe spécifié, qui peut être un nom de groupe ou un ID de groupe numérique.
chmod modifie les permissions de chaque fichier spécifié selon le mode donné, qui peut être soit une représentation symbolique des changements à effectuer, ou un nombre octal représentant le schéma de bits pour les nouvelles permissions.
dd copie un fichier (depuis l'entrée standard vers la sortie standard, par défaut) avec une taille de bloc choisie par l'utilisateur, en pouvant éventuellement y faire des conversions.
df affiche la quantité d'espace disque disponible sur le système de fichiers contenant chaque nom de fichier en argument. Si aucun nom de fichier n'est donné, l'espace disponible sur tous les systèmes de fichier actuellement montés est affiché.
dir et vdir sont des versions de ls avec différents formats de sortie par défaut. Ces programmes listent chaque fichier ou répertoire spécifié. Le contenu des répertoires est trié alphabétiquement. Pour ls, les fichiers sont listés par défaut en colonne, triés verticalement, si la sortie standard est un terminal; autrement, ils sont listés un par ligne. Pour dir, les fichiers sont listés par défaut en colonne, triés verticalement. Pour vdir, les fichiers sont listés par défaut en format long.
dircolors affiche les commandes pour positionner la variable d'environnement LS_COLOR. La variable LS_COLOR est utilisée pour modifier le schéma de couleurs par défaut utilisé par ls et les utilitaires associés.
du affiche la quantité d'espace disque utilisée par chaque argument, et pour chaque sous-répertoire du répertoire en argument.
install copie les fichiers et positionne leurs permissions et, si possible, leur propriétaire et leur groupe.
mknod crée un FIFO, fichier spécial de type caractère ou bloc, avec le nom de fichier spécifié.
mv déplace des fichiers d'un répertoire dans un autre, ou renomme des fichiers, selon les arguments qui lui sont passés.
touch positionne les heures d'accès et de modification de chaque fichier spécifié à l'heure courant. Les fichiers qui n'existent pas sont créés vides.
Installez Grep en lançant les commandes suivantes:
./configure --prefix=/usr &&
make &&
make install
egrep affiche les lignes des fichiers qui vérifient une expression régulière étendue.
fgrep affiche les lignes des fichiers qui vérifient une liste de chaînes fixes, séparées par des caractères de fin de ligne, l'une quelconque de ces chaînes devant correspondre.
Installez Gzip en lançant les commandes suivantes:
./configure --prefix=/usr &&
make &&
make install &&
cd /usr/bin &&
mv gzip /bin &&
rm gunzip &&
cd /bin &&
ln -sf gzip gunzip &&
ln -s gzip compress &&
ln -s gunzip uncompress
Le package Gzip contient les programmes compress, gunzip, gzexe, gzip, uncompress, zcat, zcmp, zdiff, zforece, zgrep, zmore et znew.
gunzip décompresse les fichiers qui ont été compressés avec gzip.
gzexe permet de compresser des exécutables en les remplaçant, et de faire en sorte qu'ils se décompressent automatiquement et s'exécutent lorsqu'ils sont lancés (avec une dégradation des performances).
zcat décompresse une liste de fichiers fournie en ligne de commande ou sur son entrée standard, et écrit les données décompressées sur la sortie standard.
zforce force l'extension .gz sur tous les fichiers gzip, pour que gzip ne les compresse pas deux fois. Ceci peut être utile pour des fichiers dont les noms ont été tronqués après un transfert.
zmore est un filtre qui permet d'examiner des fichiers texte simples ou compressés, écran par écran, sur un terminal (de la même manière que more).
Installez Ld.so en lançant les commandes suivantes:
cd man &&
cp ldd.1 /usr/share/man/man1 &&
cp *.8 /usr/share/man/man8
Du package Ld.so, nous n'utilisons que les pages man de ldconfig et ldd. Les binaires ldconfig et ldd eux-mêmes sont fournis avec Glibc.
Installez Lilo en lançant les commandes suivantes:
make &&
make install
Il semble que la compilation de ce package échoue sur certaines machines quand l'option du compilateur -g est utilisée. Si un utilisateur ne parvient pas à compiler Lilo ainsi, il devrait essayer de supprimer la valeur -g de la variable CFLAGS dans le fichier Makefile.
A la fin de l'installation, le processus make install écrira un message indiquant que vous devez exécuter /sbin/lilo pour terminer la mise à jour. Ne le faites pas, car cela ne sert à rien. Le fichier /etc/lilo.conf n'est pas encore présent. Nous complèterons l'installation de lilo dans le chapitre 8.
lilo installe le chargeur de démarrage de Linux, qui est utilisé pour lancer un système Linux.
Installez Make en lançant les commandes suivantes:
./configure --prefix=/usr &&
make &&
make install
make détermine automatiquement quels morceaux d'un gros programme ont besoin d'être recompilés, et exécute les commandes pour les recompiler.
Installez Modutils en lançant les commandes suivantes:
./configure &&
make &&
make install
Le package Modutils contient les programmes depmod, genksyms, insmod, insmod_ksymoops_clean, kerneld, kernelversion, ksyms, lsmod, modinfo, modprobe et rmmod.
depmod gère les descriptions de dépendance pour les modules du noyau qui peuvent être chargés.
genksyms lit (sur l'entrée standard) la sortie de gcc -E source.c et génère un fichier contenant des informations de version.
insmod_ksymoops_clean supprime les ksym et les modules sauvés qui n'ont pas été accédés depuis deux jours.
kerneld exécute une action du noyau dans l'espace utilisateur (comme le chargement sur demande de modules).
modinfo examine un fichier objet associé à un module du noyau et affiche toutes les informations qu'il peut y trouver.
modprobe utilise un fichier de dépendance ressemblant à Makefile, créé par depmod, pour charger automatiquement le(s) module(s) pertinent(s) de l'ensemble des modules disponibles, dans l'arborescence des répertoires prédéfinie.
Installez Procinfo en lançant les commandes suivantes:
sed "s/-ltermcap/-lncurses/" Makefile | make -f - &&
make install
sed "s/-ltermcap/-lncurses/" Makefile | make -f -: Ceci remplacera -ltermcap par -lncurses dans le Makefile et dirigera la sortie de sed (le Makefile modifié) directement vers le programme make. C'est un moyen alternatif et plus efficace de diriger la sortie vers un fichier et indiquer à make de l'utiliser. Nous faisons cela parce que libtermcap est déclaré obsolète au bénéfice de libncurses.
procinfo recueille des données système depuis le répertoire /proc et les affiche de façon correctement formatée sur le périphérique de sortie standard.
Installez Procps en lançant les commandes suivantes:
make &&
make XSCPT='' install &&
mv /usr/bin/kill /bin
make XSCPT='' install: Ceci positionnera la variable XSCPT de Makefile à une valeur vide, pour désactiver l'installation de XConsole. Autrement, "make install" tente de copier le fichier XConsole dans /usr/X11R6/bin. Et ce répertoire n'existe pas, parce que X n'est pas encore installé.
Le package Procps contient les programmes free, kill, oldps, ps, skill, snice, sysctl, tload, top, uptime, vmstat, w et watch.
free affiche la quantité totale de mémoire, libre et utilisée, physique ou d'échange, dans le système, ainsi que la mémoire partagée et les mémoires tampon utilisées par le noyau.
tload affiche un graphe de la charge moyenne du système courant sur le terminal spécifié (ou le terminal du processus tload si aucun autre n'est spécifié).
uptime affiche une ligne contenant les informations suivantes: l'heure courante, la durée de fonctionnement du système, le nombre d'utilisateurs actuellement connectés, et les moyennes de charge du système pour les 1, 5 et 15 dernières minutes.
vmstat donne des informations sur les processus, la mémoire, la pagination, les entrées/sorties de blocs, les trappes et l'activité du cpu.
w affiche des informations sur les utilisateurs actuellement connectés à la machine, et leurs processus.
Installez Psmisc en lançant les commandes suivantes:
./configure --prefix=/usr &&
make &&
make install
fuser affiche le PID des processus utilisant les fichiers ou les systèmes de fichiers spécifiés.
Installez Sed en lançant les commandes suivantes:
./configure --prefix=/usr --bindir=/bin &&
make &&
make install
sed est un éditeur de flux. Un éditeur de flux est utilisé pour opérer des transformations de texte basiques sur un flux d'entrée (un fichier ou une entrée depuis un pipe).
Installez Shellutils en lançant les commandes suivantes:
./configure --prefix=/usr &&
make &&
make install &&
cd /usr/bin &&
mv date echo false pwd stty /bin &&
mv su true uname hostname /bin
Le package Shellutils contient les programmes basename, chroot, date, dirname, echo, env, expr, factor, false, groups, hostid, hostname, id, logname, nice, nohup, pathchk, pinky, printenv, printf, pwd, seq, sleep, stty, su, tee, test, true, tty, uname, uptime, users, who, whoami et yes.
basename supprime le répertoire et les suffixes des noms de fichier.
date affiche la date et l'heure courantes dans un format spécifié, ou positionne la date du système.
Installez la Suite de Masquage des mots de passe en lançant les commandes suivantes:
patch -Np1 -i ../shadow-20001016.patch &&
./configure --prefix=/usr &&
make &&
make install &&
cd etc &&
cp limits login.access login.defs.linux /etc &&
mv /etc/login.defs.linux /etc/login.defs
cp limits login.access et autres: Ces fichiers ne sont pas installés pendant l'installation du package; nous devons donc les copier manuellement, car ces fichiers sont utilisés pour configurer les détails d'authentification sur le système.
La Suite «Shadow Password» (masquage des mots de passe) contient les programmes chage, chfn, chsh, expiry, faillog, gpasswd, lastlog, login, newgrp, passwd, sg, su, chpasswd, dpasswd, groupadd, groupdel, groupmod, grpck, grpconv, grpunconv, logoutd, mkpasswd, newusers, pwck, pwconv, pwunconv, useradd, userdel, usermod et vipw.
chage modifie le nombre de jours entre deux changements de mot de passe et la date du dernier changement de mot de passe.
chfn modifie le nom complet de l'utilisateur, le numéro de travail, le poste de travail et le numéro de téléphone du domicile pour un compte utilisateur.
faillog formate le contenu du journal d'échec /var/log/faillog, et conserve le nombre et les limites des échecs.
lastlog formate et affiche le contenu du journal de dernière connexion, /var/log/lastlog. Le nom de connexion, le port et l'heure de dernière connexion seront affichés.
Modifie les id effectifs de groupe et d'utilisateur en ceux d'un utilisateur. Ceci remplace le programme su installé avec le package Shellutils.
chpasswd lit un fichier contenant des paires nom d'utilisateur et mot de passe depuis l'entrée standard, et utilise ces informations pour mettre à jour un groupe d'utilisateurs existants.
dpasswd ajoute, supprime et met à jour les mots de passe d'appel pour les shells de connexion utilisateur.
La commande groupadd crée un nouveau compte de groupe avec les valeurs spécifiées en ligne de commande et les valeurs par défaut du système.
La commande groupdel modifie les fichiers de compte du système, supprimant toutes les entrées faisant référence au groupe.
La commande groupmod modifie les fichiers de compte du système pour refléter les changements spécifiés sur la ligne de commande.
logoutd applique les restrictions de temps de connexion et de port spécifiées dans /etc/porttime.
mkpasswd lit un fichier dans le format donné par les options et le convertit dans le format de fichier de base de données correspondant.
newusers lit un fichier contenant des paires nom d'utilisateur et mot de passe en clair, et utilise ces informations pour mettre à jour un groupe d'utilisateurs existants ou pour créer de nouveaux utilisateurs.
pwconv convertit en fichiers «Shadow Password» (mot de passe masqués) des fichiers de mot de passe normaux.
pwunconv convertit en fichiers de mots de passe normaux des fichiers «Shadow Password» (mot de passe masqués).
useradd crée un nouvel utilisateur ou met à jour les informations par défaut d'un nouvel utilisateur.
userdel modifie les fichiers de compte du système, supprimant toutes les entrées faisant référence au nom de connexion spécifié.
usermod modifie les fichiers de compte du système pour refléter les modifications spécifiées sur la ligne de commande.
vipw et vigr éditent respectivement les fichiers /etc/passwd et /etc/group. Avec l'option -s, ils éditent les versions masquées de ces fichiers, respectivement /etc/shadow et /etc/gshadow.
Installez Sysklogd en lançant les commandes suivantes:
make &&
make install
klogd est un démon système qui intercepte et journalise les messages du noyau de Linux.
syslogd fournit une sorte de journalisation que de nombreux programmes modernes utilisent. Chaque message journalisé contient au moins une heure et un champ nom d'hôte, normalement un champ nom de programme également, mais cela dépend de la fidélité du programme qui journalise.
Quand les niveaux d'exécution sont modifiés (par exemple au moment d'arrêter le système), le programme init envoie les signaux TERM et KILL à tous les processus qu'init a lancés. Mais init affiche un message à l'écran disant "sending all processes the TERM signal" (envoi du signal TERM à tous les processus), et la même chose pour le signal KILL. Ce message signifie qu'init envoie ce signal à tous les processus actuellement en train de tourner, ce qui n'est en fait pas le cas. Pour éviter cette confusion, un utilisateur peut appliquer le patch sysvinit trouvé sur le site FTP de LFS à sysvinit, qui modifie le message dans le fichier shutdown.c et fait afficher "sending all processes started by init the TERM signal" (envoi du signal TERM à tous les processus lancés par init).
Appliquez le patch en lançant la commande suivante:
patch -Np1 -i ../sysvinit-2.78.patch
Installez Sysvinit en lançant les commandes suivantes:
make -C src &&
make -C src install
Le package Sysvinit contient les programmes pidof, last, lastb, mesg, utmpdump, wall, halt, init, killall5, poweroff, reboot, runlevel, shutdown, sulogin et telinit.
pidof trouve les identifiants des processus (pid) des programmes spécifiés et affiche ces identifiants sur la sortie standard.
last recherche en arrière dans le fichier /var/log/wtmp (ou le fichier désigné par l'option -f) et affiche une liste de tous les utilisateurs s'étant connectés (et déconnectés) depuis la création du fichier.
lastb est identique à last, sauf que, par défaut, il affiche un journal du fichier /var/log/btmp, qui contient toutes les tentatives de connexion ayant échouées.
mesg contrôle l'accès au terminal de l'utilisateur par d'autres. Typiquement, il est utilisé pour autoriser ou interdire à d'autres utilisateurs d'écrire sur son terminal.
utmpdumps affiche le contenu d'un fichier (en général /var/run/utmp) sur la sortie standard dans un format compréhensible par l'utilisateur.
wall envoie un message à toutes les personnes connectées ayant leur permission mesg positionnée à yes.
halt note que le système est en train de s'arrêter dans le fichier /var/log/wtmp, puis dit au noyau soit de s'arrêter, soit de redémarrer, ou d'éteindre le système. Si halt ou reboot est appelé quand le système n'est pas dans un niveau d'exécution de 0 ou 6, shutdown sera appelé à la place (avec une option -h ou -r).
init est le père de tous les processus. Son rôle principal est de créer les processus à partir d'un script enregistré dans le fichier /etc/inittab. Ce fichier a en général des entrées indiquant à init d'engendrer des getty sur chaque ligne où l'utilisateur peut se connecter. Il contrôle aussi les processus autonomes requis par un système particulier.
killall5 est la commande killall de SystemV. Il envoie un signal à tous les processus, sauf les processus dans sa propre session, de manière à ne pas tuer le shell qui fait tourner le script qui l'a appelé.
poweroff est équivalent à shutdown -h -p now. Il arrête l'ordinateur et l'éteint (si un BIOS compatible APM est utilisé, et qu'APM est activé dans le noyau).
runlevel lit le fichier utmp du système (typiquement, /var/run/utmp) pour localiser l'enregistrement du niveau d'exécution, puis écrit les niveaux d'exécution du système, le précédent et l'actuel, sur sa sortie standard, séparés par un seul espace.
shutdown arrête le système de façon sécurisée. Tous les utilisateurs connectés sont avertis que le système va s'arrêter, et la connexion est bloquée.
sulogin est invoqué par init quand le système passe en mode mono-utilisateur (ceci est réalisé par une entrée dans /etc/inittab). init tente également d'exécuter sulogin quand l'option -b lui est passée par le chargeur d'amorçage (comme LILO).
telinit envoie les signaux appropriés à init, lui indiquant le niveau d'exécution sous lequel passer.
Si un utilisateur veut pouvoir utiliser directement des fichiers bzip2 avec tar, il peut utiliser le patch tar disponible sur le site FTP de LFS. Ce patch ajoutera l'option -y à tar, qui fonctionne de la même manière que l'option -z pour tar (que vous pouvez utiliser pour les fichiers gzip).
Appliquez le patch en lançant la commande suivante:
cd src &&
patch -i ../../gnutarpatch.txt &&
cd ..
Installez Tar en lançant les commandes suivantes depuis le répertoire racine:
./configure --prefix=/usr --libexecdir=/usr/bin &&
make &&
make install &&
mv /usr/bin/tar /bin
tar est un programme d'archivage conçu pour stocker et extraire des fichiers d'un fichier archive appelé fichier tar.
rmt est un programme utilisé par les programmes distants dump et restore pour manipuler un lecteur de bandes magnétiques via une connexion de communication inter-processus.
Installez Textutils en lançant les commandes suivantes:
./configure --prefix=/usr &&
make &&
make install &&
mv /usr/bin/cat /bin
Le paquet Textutils contient les programmes cat, cksum, comm, split, cut, expand, fmt, fold, head, join, md5sum, nl, od, paste, pr, ptx, sort, split, sum, tac, tail, tr, tsort, unexpand, uniq et wc.
cat concatène le(s) fichier(s) ou l'entrée standard vers la sortie standard.
cplit découpe un fichier en morceaux séparés par un(des) motif(s) dans des fichiers xx01, xx02, ..., et affiche le nombre d'octets de chaque morceau sur la sortie standard.
expand convertit les tabulations dans les fichiers en espaces, en écrivant sur la sortie standard.
fmt reformate chaque paragraphe dans le(s) fichier(s) spécifié(s), en écrivant sur la sortie standard.
fold emballe les lignes d'entrée de chaque fichier spécifié (entrée standard par défaut), en écrivant sur la sortie standard.
head affiche les xx (10 par défaut) premières lignes de chaque fichier spécifié sur la sortie standard.
od écrit une représentation non-ambiguë, en octal par défaut, d'un fichier spécifié, sur la sortie standard.
paste écrit des lignes, d'une manière consistant à prendre séquentiellement les lignes correspondantes de chaque fichier spécifié, séparées par des tabulations, sur la sortie standard.
tail écrit les xx (10 par défaut) dernières lignes de chaque fichier spécifié sur la sortie standard.
tr convertit, répète et/ou supprime des caractères de l'entrée standard, en écrivant sur la sortie standard.
tsort écrit des listes totalement ordonnées en accord avec l'ordonnancement partiel dans les fichiers spécifiés.
unexpand convertit les espaces dans chaque fichier en tabulations, en écrivant sur la sortie standard.
uniq supprime toutes les lignes identiques successives sauf une depuis des fichiers ou l'entrée standard, et écrit dans des fichiers ou la sortie standard.
wc affiche le nombre de lignes, mots et octets de chaque fichier spécifié, et une ligne de totalisation si plus d'un fichier est spécifié.
Installez Util-Linux en lançant les commandes suivantes:
sed s/HAVE_SLN=no/HAVE_SLN=yes/ \
MCONFIG > MCONFIG~ &&
mv MCONFIG~ MCONFIG &&
./configure &&
make &&
make install
HAVE_SLN=yes: Nous ne construisons pas ce programme parce qu'il a déjà été installé par Glibc.
Le package Util-linux contient les programmes arch, dmesg, kill, more, mount, umount, agetty, blockdev, cfdisk, ctrlaltdel, elvtune, fdisk, fsck.minix, hwclock, kbdrate, losetup, mkfs, mkfs.bfs, mkfs.minix, mkswap, sfdisk, swapoff, swapon, cal, chkdupexe, col, colcrt, colrm, column, cytune, ddate, fdformat, getopt, hexdump, ipcrm, ipcs, logger, look, mcookie, namei, rename, renice, rev, script, setfdprm, setsid, setterm, ul, whereis, write, ramsize, rdev, readprofile, rootflags, swapdev, tunelp et vidmode.
arch affiche l'architecture de la machine.
dmesg est utilisé pour examiner ou vérifier la mémoire tampon circulaire du noyau (messages de démarrage du noyau).
mount monte un système de fichiers depuis un périphérique dans un répertoire (point de montage).
blockdev permet d'exécuter des ioctls sur un périphérique de type bloc depuis la ligne de commande.
ctrlaltdel positionne la fonction associée à la combinaison de touche CTRL+ALT+DEL (remise à zéro logicielle ou matérielle).
elvtune permet d'optimiser l'élévateur d'entrées/sorties par file de périphérique de type bloc.
fsck.minix effectue une vérification de cohérence pour le système de fichiers Linux MINIX.
mkfs construit un système de fichiers Linux sur un périphérique, en général une partition de disque dur.
mkfs.bfs crée un système de fichiers SCO bfs sur un périphérique, en général une partition de disque dur.
mkfs.minix crée un système de fichiers Linux MINIX sur un périphérique, en général une partition de disque dur.
hexdump affiche les fichiers spécifiés, ou l'entrée standard, dans un format spécifié par l'utilisateur (ascii, décimal, hexadécimal, octal).
ul lit un fichier et traduit les occurrences de blancs soulignés en séquences qui indiquent le soulignement sur le terminal utilisé.
rdev interroge et positionne le périphérique racine image, le périphérique d'échange, la taille du disque mémoire ou le mode vidéo.
rootflags interroge et positionne des informations supplémentaires utilisées lors du montage de la racine.
Maintenant que tous les logiciels sont installés, tout ce qu'il nous reste à faire pour que certains programmes fonctionnent correctement est de créer leurs fichiers de configuration.
Par défaut, Vim fonctionne en mode compatible avec vi. Certains peuvent l'apprécier, mais je préfère nettement faire tourner vim en mode vim (autrement, je n'aurais pas inclu Vim dans ce livre, mais le Vi original). Créez le fichier /root/.vimrc en lançant ce qui suit:
cat > /root/.vimrc << "EOF"
" Debut /root/.vimrc
set nocompatible
set bs=2
" Fin /root/.vimrc
EOF
Nous avons besoin de créer le fichier /etc/nsswitch.conf. Bien que glibc fournisse des valeurs par défaut quand ce fichier est absent ou corrompu, ces valeurs ne fonctionnent pas correctement avec le réseau dont nous traiterons dans un prochain chapitre. De plus, notre zone horaire doit être configurée.
Créez un nouveau fichier /etc/nsswitch.conf en lançant ce qui suit:
cat > /etc/nsswitch.conf << "EOF"
# Debut de /etc/nsswitch.conf
passwd: files
group: files
shadow: files
publickey: files
hosts: files dns
networks: files
protocols: db files
services: db files
ethers: db files
rpc: db files
netgroup: db files
# Fin de /etc/nsswitch.conf
EOF
Le script tzselect doit être lancé, et les réponses à propos de votre zone horaire sont à fournir. Ceci fait, le script vous fournira l'emplacement du fichier de zone horaire dont vous aurez besoin.
Créez le lien symbolique /etc/localtime en lançant:
cd /etc &&
ln -sf ../usr/share/zoneinfo/<tzselect's output> localtime
La sortie de tzselect peut ressembler à EST5EDT ou Canada/Eastern.
Le lien symbolique qu'un utilisateur créera avec cette information sera:
ln -s ../usr/share/zoneinfo/EST5EDT localtime
Ou:
ln -s ../usr/share/zoneinfo/Canada/Eastern localtime
Par défaut, le chargeur dynamique recherche les bibliothèques dynamiques dans quelques répertoires par défaut; normalement, le fichier /etc/ld.so.conf est donc inutile, à moins que le système n'aie d'autres répertoires dans lesquels un utilisateur voudrait que le système fasse ses recherches. Le répertoire /usr/local/lib n'est pas, par défaut, scruté pour rechercher des bibliothèques dynamiques; nous devons donc ajouter ce chemin, pour qu'un utilisateur installant des logiciels ne soit pas surpris qu'ils ne fonctionnent pas pour cette raison.
Créez un nouveau fichier /etc/ld.so.conf en lançant ce qui suit:
cat > /etc/ld.so.conf << "EOF"
# Debut de /etc/ld.so.conf
/lib
/usr/lib
/usr/local/lib
# Fin de /etc/ld.so.conf
EOF
Bien qu'il ne soit pas nécessaire d'ajouter les répertoires /lib et /usr/lib, cela ne fait pas de mal. De cette manière, ce qui est recherché est clairement visible, et un utilisateur n'a pas à se remémorer les chemins de recherche par défaut, s'il ne le veut pas.
Créez un nouveau fichier /etc/syslog.conf en lançant ce qui suit:
cat > /etc/syslog.conf << "EOF"
# Debut /etc/syslog.conf
auth,authpriv.* -/var/log/auth.log
*.*;auth,authpriv.none -/var/log/sys.log
daemon.* -/var/log/daemon.log
kern.* -/var/log/kern.log
mail.* -/var/log/mail.log
user.* -/var/log/user.log
*.emerg *
# Fin /etc/syslog.conf
EOF
Ce package contient les utilitaires pour modifier les mots de passe des utilisateurs, ajouter de nouveaux groupes/utilisateurs, détruire des groupes/utilisateurs, etc. Je ne vais pas vous expliquer ce que signifie « masquage des mots de passe » (password shadowing). Tout ce qui concerne cela se trouve dans le fichier doc/HOWTO dans l'arborescence source de la suite masquage des mots de passe déballée. Il y a une chose qu'un utilisateur doit garder à l'esprit, s'il décide d'utiliser le support des mots de passe masqués, c'est que les programmes qui nécessitent la vérification des mots de passe (par exemple, xdm, les démons ftp, les démons pop3, etc.) doivent être "compatibles avec le masquage" (shadow-compliant), c'est-à-dire qu'ils doivent pouvoir travailler avec des mots de passe masqués.
Les mots de passe masqués ne sont pas activés par défaut. Se contenter d'installer la suite masquage des mots de passe n'active pas les mots de passe masqués.
C'est maintenant une bonne occasion pour lire le chapitre 5 du fichier doc/HOWTO. Il décrit comment activer les mots de passe masqués, comment tester si le masquage fonctionne et, sinon, comment le désactiver de nouveau.
La documentation fait allusion à la création de npasswd et nshadow après l'exécution de pwconv. Ceci est une erreur dans la documentation. Ces deux fichiers ne seront pas créés. Après avoir exécuté pwconv, /etc/passwd ne contiendra plus de mots de passe, mais /etc/shadow oui. Un utilisateur n'a pas besoin de renommer les fichiers npasswd et nshadow lui-même.
Créez un nouveau fichier /etc/inittab en lançant ce qui suit:
cat > /etc/inittab << "EOF"
# Début de /etc/inittab
id:3:initdefault:
si::sysinit:/etc/init.d/rcS
l0:0:wait:/etc/init.d/rc 0
l1:S1:wait:/etc/init.d/rc 1
l2:2:wait:/etc/init.d/rc 2
l3:3:wait:/etc/init.d/rc 3
l4:4:wait:/etc/init.d/rc 4
l5:5:wait:/etc/init.d/rc 5
l6:6:wait:/etc/init.d/rc 6
ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now
su:S016:respawn:/sbin/sulogin
1:2345:respawn:/sbin/agetty tty1 9600
2:2345:respawn:/sbin/agetty tty2 9600
3:2345:respawn:/sbin/agetty tty3 9600
4:2345:respawn:/sbin/agetty tty4 9600
5:2345:respawn:/sbin/agetty tty5 9600
6:2345:respawn:/sbin/agetty tty6 9600
# Fin de /etc/inittab
EOF
Les programmes comme login, shutdown, uptime et d'autres cherchent à lire et à écrire dans /var/run/utmp, /var/log/btmp et /var/log/wtmp. Ces fichiers contiennent des informations sur qui est actuellement connecté. Ils contiennent également des informations sur l'heure des derniers démarrage et arrêt de l'ordinateur, et un enregistrement des tentatives de connexion ayant échoué.
Créez ces fichiers avec leurs permissions adéquates en lançant les commandes suivantes:
touch /var/run/utmp /var/log/wtmp /var/log/btmp /var/log/lastlog &&
chmod 644 /var/run/utmp /var/log/wtmp /var/log/btmp /var/log/lastlog
Choisissez un mot de passe pour l'utilisateur root et créez-le en lançant la commande suivante:
passwd root
Ce chapitre créera les scripts nécessaires lancés lors du démarrage du système. Ces scripts accomplissent des tâches comme remonter en mode lecture-écriture le système de fichiers racine monté en mode lecture seule par le noyau, activer la(les) partition(s) d'échange, lancer une vérification du système de fichiers racine pour s'assurer qu'il est intact, et lancer les démons utilisés par le système.
Linux utilise un utilitaire de démarrage particulier, appelé SysVinit. Il est basé sur le concept de niveaux d'exécution. Cela peut être très différent d'un système à un autre; on ne peut donc pas supposer que, parce que cela fonctionne dans <insérer le nom de la distribution>, cela fonctionnera de même dans LFS aussi. LFS a sa propre façon de faire les choses, mais il respecte en général les standards couramment acceptés.
SysVinit (que nous appellerons init à partir de maintenant) fonctionne avec un schéma de niveaux d'exécution. Il y a 7 (de 0 à 6) niveaux d'exécution (en fait, il y en a plus, mais ils servent dans des cas spécifiques, et ne sont en général pas utilisés. La page man de init décrit cela en détail), et chacun d'eux correspond à des choses que l'ordinateur est censé faire quand il démarre. Le niveau d'exécution par défaut est 3. Voici une description des différents niveaux d'exécution tels qu'ils sont souvent implémentés:
0: arrête l'ordinateur
1: mode mono-utilisateur
2: mode multi-utilisateurs sans réseau
3: mode multi-utilisateurs avec réseau
4: réservé pour la personnalisation, sinon identique au 3
5: comme 4, en général utilisé pour une connexion GUI (comme xdm de X ou kdm de KDE)
6: redémarre l'ordinateur
La commande utilisée pour changer de niveau d'exécution est init <niveau d'exécution>, où <niveau d'exécution> est le niveau d'exécution cible. Par exemple, pour redémarrer un ordinateur, un utilisateur lancera la commande init 6. La commande reboot est simplement un alias, comme la commande halt est un alias pour init 0.
Le script /etc/init.d/rcS est exécuté à chaque démarrage de l'ordinateur, avant qu'un quelconque niveau d'exécution soit exécuté, et il lance les scripts listés dans /etc/rcS.d.
Il y a plusieurs répertoires sous /etc qui ressemblent à rc?.d, où ? est le numéro du niveau d'exécution, et rcS.d. Un utilisateur peut regarder dans l'un d'eux (après la fin de ce chapitre, car il n'y a rien pour le moment). Il y a là plusieurs liens symboliques. Certains commencent par K, les autres par S, et tous ont trois chiffres après la lettre initiale. Le K signifie l'arrêt (kill) d'un service, et le S signifie le démarrage (start) d'un service. Les chiffres déterminent l'ordre dans lequel ces scripts sont exécutés, de 000 à 999; plus un nombre est petit, plus il sera exécuté tôt. Quand init bascule dans un autre niveau d'exécution, les services appropriés sont arrêtés, et d'autres sont démarrés.
Les vrais scripts sont dans /etc/init.d. Ils font tout le travail, et les liens symboliques pointent tous vers eux. Les liens d'arrêt et de démarrage pointent vers le même script dans /etc/init.d. Ceci est dû au fait que les scripts peuvent être appelés avec différents paramètres, comme start, stop, restart, reload, status. Quand un lien K est rencontré, le script correspondant est lancé avec l'argument stop. Quand un lien S est rencontré, le script associé est lancé avec l'argument start.
Voici une description de ce que les arguments font réaliser aux scripts:
start: Le service est lancé.
stop: Le service est arrêté.
restart: Le service est arrêté puis lancé de nouveau.
reload: La configuration du service est mise à jour. Ceci est utilisé après la modification du fichier de configuration d'un service, quand le service n'a pas besoin d'être redémarré.
status: Indique si le service tourne, et avec quel PID.
Modifiez librement la façon dont le processus de démarrage travaille (après tout, c'est votre système LFS, pas le nôtre). Les fichiers fournis ici sont simplement un exemple de la manière dont cela peut être fait proprement (en tout cas, ce que nous considérons comme propre. Vous pouvez ne pas l'aimer ainsi).
Nous avons besoin pour commencer de créer quelques répertoires supplémentaires qui seront utilisés par les scripts de démarrage. Ces répertoires sont créés en lançant:
cd /etc &&
mkdir sysconfig rc0.d rc1.d rc2.d rc3.d &&
mkdir rc4.d rc5.d rc6.d init.d rcS.d &&
cd init.d
Le premier script principal de démarrage est le script /etc/init.d/rc. Un nouveau fichier /etc/init.d/rc est créé, contenant ce qui suit:
cat > rc << "EOF"
#!/bin/sh
# Debut de /etc/init.d/rc
#
# Par Jason Pearce - jason.pearce@linux.org
# Modifie par Gerard Beekmans - gerard@linuxfromscratch.org
# print_error_msg base sur une idee de Simon Perreault - nomis80@videotron.ca
#
# Inclure les fonctions declarees dans le fichier /etc/init.d/functions
#
source /etc/init.d/functions
#
# La fonction print_error_msg affiche un message d'erreur lorsqu'une
# erreur imprevue se produit et n'a pas ete interceptee, pour une raison
# quelconque, par un appel a evaluate_retval ou un controle d'erreur,
# quel qu'il soit.
#
print_error_msg()
{
echo
$FAILURE
echo -n "Vous ne devriez pas lire ce message d'erreur. Il "
echo "signifie qu'une erreur imprevue "
echo -n "s'est produite et que le sous-script $i s'est termine "
echo "avec la valeur de retour "
echo -n "$error_value, pour une raison inconnue. Si vous "
echo "arrivez a rapprocher cette "
echo -n "erreur d'un bogue dans un des fichiers fournis dans "
echo "ce livre, merci "
echo -n "de nous en informer a lfs-discuss@linuxfromscratch.org"
$NORMAL
echo
echo
echo "Appuyez sur une touche pour continuer..."
read
}
#
# Si vous decommentez la variable debug ci-dessous, aucun des scripts
# ne sera execute; seuls le nom du script et ses parametres seront
# affiches a l'ecran, pour que vous puissiez voir comment les scripts
# sont appeles par rc.
#
# Decommenter la ligne suivante pour deboguage.
# debug=echo
#
# Demarrage de script ou programme.
#
startup() {
$debug $*
}
#
# Ignorer CTRL-C seulement dans ce shell, de telle sorte que nous
# puissions interrompre les sous-processus.
#
trap ":" INT QUIT TSTP
#
# Maintenant, determiner les niveaux d'execution actuel et precedent.
# La variable $RUNLEVEL est renseignee par init pour tous ses enfants.
# Ce script s'execute en tant que fils d'init.
#
runlevel=$RUNLEVEL
#
# Recuperer le premier argument. Positionner le nouveau niveau
# d'execution avec cet argument. Si aucun niveau d'execution
# n'a ete passe a ce script, nous ne changeons pas les niveaux d'execution.
#
[ "$1" != "" ] && runlevel=$1
if [ "$runlevel" = "" ]
then
echo "Usage: $0 <niveau d'execution>" >&2
exit 1
fi
#
# La meme chose pour $PREVLEVEL (cf. ci-dessus $RUNLEVEL). previous sera
# renseigne avec le niveau d'execution precedent. Si $PREVLEVEL n'est pas
# positionne, cela signifie qu'il n'y avait pas de niveau d'execution
# precedent, et nous positionnerons previous à N.
#
previous=$PREVLEVEL
[ "$previous" = "" ] && previous=N
export runlevel previous
#
# Y a-t'il un repertoire rc pour le nouveau niveau d'execution ?
#
if [ -d /etc/rc$runlevel.d ]
then
#
# Si oui, recuperer d'abord tous les scripts K* de ce nouveau
# niveau d'execution.
#
if [ $previous != N ]
then
for i in /etc/rc$runlevel.d/K*
do
[ ! -f $i ] && continue
#
# La variable suffix contiendra le nom du script sans le Kxxx initial
#
suffix=${i#/etc/rc$runlevel.d/K[0-9][0-9][0-9]}
#
# S'il y a un script de demarrage pour ce script K dans le niveau d'execution
# precedent, determiner son chemin d'acces complet
#
previous_start=/etc/rc$previous.d/S[0-9][0-9][0-9]$suffix
#
# S'il n'y avait pas de niveau d'execution precedent, il se peut que
# quelque chose ait ete demarre dans rcS.d (niveau sysinit); nous
# determinerons aussi le chemin pour cette possibilite.
#
sysinit_start=/etc/rcS.d/S[0-9][0-9][0-9]$suffix
#
# Arreter le service s'il y a un script de demarrage dans le niveau
# precedent ou dans le niveau sysinit. Si previous_start ou sysinit_start
# n'existent pas, la commande "continue" est lancee, ce qui conduit le
# script a interrompre cette iteration de la boucle for et a poursuivre
# avec l'iteration suivante.
# Cela revient a ce qu'il n'execute pas les commandes apres les deux
# lignes suivantes et recommence au debut de cette boucle for. Cf.
# man bash pour plus d'information a ce sujet.
#
[ ! -f $previous_start ] &&
[ ! -f $sysinit_start ] && continue
#
# Si nous trouvons previous_start ou sysinit_start, lancer le
# script K
#
startup $i stop
error_value=$?
#
# Si la valeur de retour du script n'est pas 0, quelque chose n'a pas
# fonctionne avec le controle d'erreur inclus dans le script. La fonction
# print_error_msg sera appelee et le message avec la valeur de retour du
# script K sera affiche a l'ecran.
#
if [ $error_value != 0 ]
then
print_error_msg
fi
done
fi
#
# Maintenant, lancer les scripts START pour ce niveau d'execution.
#
for i in /etc/rc$runlevel.d/S*
do
[ ! -f $i ] && continue
if [ $previous != N ]
then
#
# Trouver le script de demarrage dans le niveau d'execution precédent,
# et stopper le script dans ce niveau d'execution.
#
suffix=${i#/etc/rc$runlevel.d/S[0-9][0-9][0-9]}
stop=/etc/rc$runlevel.d/K[0-9][0-9][0-9]$suffix
previous_start=/etc/rc$previous.d/S[0-9][0-9][0-9]$suffix
#
# S'il y a un script de demarrage dans le niveau precedent et pas de script
# d'arret dans ce niveau, nous n'avons pas a relancer le service; interrompre
# cette iteration et demarrer la suivante.
#
[ -f $previous_start ] && [ ! -f $stop ] &&
continue
fi
case "$runlevel" in
0|6)
#
# Les niveaux 0 et 6 sont les niveaux d'arret (halt) et de redemarrage (reboot).
# Nous n'y demarrons reellement rien, si bien que nous faisons l'appel avec le
# parametre "stop".
#
startup $i stop
error_value=$?
#
# Si la valeur de retour du script n'est pas 0, quelque chose n'a pas
# fonctionne dans le controle d'erreur du script. La fonction
# print_error_msg sera appelee et le message avec la valeur de retour du
# script K sera affiche a l'ecran.
#
if [ $error_value != 0 ]
then
print_error_msg
fi
;;
*)
startup $i start
error_value=$?
#
# Si la valeur de retour du script n'est pas 0, quelque chose n'a pas
# fonctionne dans le controle d'erreur du script. La fonction
# print_error_msg sera appelee et le message avec la valeur de retour du
# script K sera affiche a l'ecran.
#
if [ $error_value != 0 ]
then
print_error_msg
fi
;;
esac
done
fi
# Fin de /etc/init.d/rc
EOF
Le second script principal de démarrage est le script rcS. Créez un nouveau fichier /etc/init.d/rcS contenant ce qui suit:
cat > rcS << "EOF"
#!/bin/sh
# Debut de /etc/init.d/rcS
#
# Voir le script rc pour les commentaires complets sur les constructions
# utilisees ici.
#
runlevel=S
prevlevel=N
umask 022
export runlevel prevlevel
trap ":" INT QUIT TSTP
#
# Recupere tous les scripts S de /etc/rcS.d et les execute de meme
#
for i in /etc/rcS.d/S??*
do
[ ! -f "$i" ] && continue;
$i start
done
# Fin de /etc/init.d/rcS
EOF
Un nouveau fichier /etc/init.d/functions est créé, contenant ce qui suit:
cat > functions << "EOF"
#!/bin/sh
# Debut de /etc/init.d/functions
#
# Definition de quelques variables qui influencent la facon dont
# le texte sera affiche a l'ecran. La variable SET_COL fait demarrer
# le texte en colonne 70 (comme specifie par la variable COL).
# NORMAL affiche le texte en mode normal. SUCCESS affichera le texte en
# vert et FAILURE en rouge.
#
COL=70
SET_COL="echo -en \\033[${COL}G"
NORMAL="echo -en \\033[0;39m"
SUCCESS="echo -en \\033[1;32m"
FAILURE="echo -en \\033[1;31m"
#
# La fonction evaluate_retval evalue la valeur de retour du processus
# qui etait execute juste avant que la fonction ne soit appelee. Si cette
# valeur de retour etait 0, indiquant le succes, la fonction print_status
# est appelee avec le parametre "success". Dans les autres cas, la fonction
# print_status est appelee avec le parametre d'erreur.
#
evaluate_retval()
{
if [ $? = 0 ]
then
print_status success
else
print_status failure
fi
}
#
# La fonction print_status affiche [ OK ] ou [ECHEC] a l'ecran. OK
# apparaitra avec la couleur definie par la variable SUCCESS et FAILED
# avec celle definie par la variable FAILURE. Les deux sont affichees
# a partir de la colonne definie par la variable COL.
#
print_status()
{
#
# Si aucun parametre n'est passe a la fonction print_status, afficher
# le mode d'emploi.
#
if [ $# = 0 ]
then
echo "Usage: print_status {success|failure}"
return 1
fi
case "$1" in
success)
$SET_COL
echo -n "[ "
$SUCCESS
echo -n "OK"
$NORMAL
echo " ]"
;;
failure)
$SET_COL
echo -n "["
$FAILURE
echo -n "ECHEC"
$NORMAL
echo "]"
;;
esac
}
#
# La fonction loadproc lance un processus (souvent un demon)
# avec les controles d'erreur appropries.
#
loadproc()
{
#
# Si aucun parametre n'est passe a la fonction loadproc, afficher
# le mode d'emploi.
#
if [ $# = 0 ]
then
echo "Usage: loadproc {program}"
exit 1
fi
#
# Trouver le nom de base ("basename") du premier parametre (le nom du demon
# sans le chemin d'acces qui a ete fourni: ainsi /usr/sbin/syslogd devient
# "syslogd" une fois que basename a ete lance).
#
base=$(/usr/bin/basename $1)
#
# La variable pidlist contiendra le resultat de la commande pidof.
# pidof essaiera de trouver le PID correspondant a une chaine de
# caracteres donnee ($base dans le cas present).
#
pidlist=$(/bin/pidof -o $$ -o $PPID -o %PPID -x $base)
pid=""
for apid in $pidlist
do
if [ -d /proc/$apid ]
then
pid="$pid $apid"
fi
done
#
# Si la variable $pid contient quelque chose (provenant de la boucle for
# precedente), cela signifie que le demon tourne deja.
#
if [ ! -n "$pid" ]
then
#
# Une variable $pid vide signifie que le demon ne tourne pas; nous executons
# donc $* (tous les parametres du script sont passes a cette fonction par
# le script) puis nous controlons la valeur de retour.
#
$*
evaluate_retval
else
#
# La variable $pid n'etait pas vide, signifiant que le demon tournait
# deja. Nous affichons maintenant [ECHEC].
#
print_status failure
fi
}
#
# La fonction killproc tue un processus en effectuant le controle
# d'erreur proprement.
#
killproc()
{
#
# Si aucun parametre n'est passe a la fonction killproc, afficher
# le mode d'emploi.
#
if [ $# = 0 ]
then
echo "Usage: killproc {program} [signal]"
exit 1
fi
#
# Trouver le nom de base ("basename") du premier parametre (le nom du demon
# sans le chemin d'acces fourni: ainsi /usr/sbin/syslogd devient
# "syslogd" une fois que basename a ete lance).
#
base=$(/usr/bin/basename $1)
#
# Verifie si nous avons passe un signal pour tuer le processus (tel que
# -HUP, -TERM, -KILL, etc.) a cette fonction (le second parametre). Si
# aucun second parametre n'a ete fourni, la variable nolevel est positionnee.
# Dans le cas contraire, la variable killlevel recoit la valeur de $2
# (le second parametre).
#
if [ "$2" != "" ]
then
killlevel=-$2
else
nolevel=1
fi
#
# La variable pidlist contiendra le resultat de la commande pidof.
# pidof essaiera de trouver le PID correspondant a une chaine de
# caracteres donnee ($base dans le cas present).
#
pidlist=$(/bin/pidof -o $$ -o $PPID -o %PPID -x $base)
pid=""
for apid in $pidlist
do
if [ -d /proc/$apid ]
then
pid="$pid $apid"
fi
done
#
# Si $pid contient quelque chose provenant de la boucle for, cela
# signifie qu'on a trouve un ou plusieurs PID appartenant aux processus
# qu'il faut tuer.
#
if [ -n "$pid" ]
then
#
# Si aucun signal pour kill n'a ete indique, on va d'abord essayer -TERM
# puis attendre 2 secondes pour laisser le temps à kill de finir
# son travail.
#
if [ "$nolevel" = 1 ]
then
/bin/kill -TERM $pid
#
# Si apres -TERM, le PID existe toujours, nous attendons 2 secondes avant
# d'essayer de le tuer avec un -KILL. Si le PID existe encore apres cela,
# attendre encore 2 secondes. Si les PID existent encore, alors il faut
# considerer que nous ne pouvons pas les tuer.
#
if /bin/ps h $pid >/dev/null 2>&1
then
/usr/bin/sleep 2
if /bin/ps h $pid > /dev/null 2>&1
then
/bin/kill -KILL $pid
if /bin/ps h $pid > /dev/null 2>&1
then
/usr/bin/sleep 2
fi
fi
fi
/bin/ps h $pid >/dev/null 2>&1
if [ $? = 0 ]
then
#
# Si, apres le -KILL, il existe encore, il ne peut etre tue pour une
# raison quelconque; on va donc afficher [ECHEC].
#
print_status failure
else
#
# Il a ete tue; on supprime un eventuel fichier PID qui subsisterait
# dans /var/run puis on affiche [ OK ].
#
/bin/rm -f /var/run/$base.pid
print_status success
fi
else
#
# Un signal de kill a ete fourni. On execute donc kill avec le signal
# en question puis on attend 2 secondes pour permettre a kill de finir
# son travail.
#
/bin/kill $killlevel $pid
if /bin/ps h $pid > /dev/null 2>&1
then
/usr/bin/sleep 2
fi
/bin/ps h $pid >/dev/null 2>&1
if [ $? = 0 ]
then
#
# Si la valeur de retour de ps vaut 0, cela signifie que cette commande
# s'est executee avec succes et par consequent que le PID existe toujours.
# Donc le processus n'a pas ete tue correctement avec le signal fourni.
# Afficher [ECHEC].
#
print_status failure
else
#
# Si la valeur de retour valait 1 ou plus, cela signifie que le PID
# n'existe plus desormais, donc qu'il a ete tue avec succes. Supprimer
# un eventuel fichier PID residuel et afficher [ OK ].
#
/bin/rm -f /var/run/$base.pid
print_status success
fi
fi
else
#
# Le PID n'existe pas, il n'est donc pas necessaire d'essayer
# de le tuer. Afficher [ECHEC]
#
print_status failure
fi
}
#
# La fonction reloadproc envoie un signal au demon en lui disant de
# recharger son fichier de configuration. Elle est presque identique
# a la fonction killproc si ce n'est qu'elle n'essaie pas de tuer le
# processus avec un signal -KILL (c'est-a-dire -9).
#
reloadproc()
{
#
# Si aucun parametre n'est passe a la fonction reloadproc, afficher
# le mode d'emploi.
#
if [ $# = 0 ]
then
echo "Usage: reloadproc {program} [signal]"
exit 1
fi
#
# Trouver le nom de base ("basename") du premier parametre (le nom du demon
# sans le chemin d'acces fourni: ainsi /usr/sbin/syslogd devient
# "syslogd" une fois que basename a ete lance).
#
base=$(/usr/bin/basename $1)
#
# Verifie si nous avons passe un signal a envoyer au processus (comme
# -HUP) a la fonction (le second parametre). Si aucun second parametre
# n'a ete fourni, la variable nolevel est positionnee. Dans le cas contraire,
# la variable killlevel recoit la valeur de $2 (le second parametre).
#
if [ -n "$2" ]
then
killlevel=-$2
else
nolevel=1
fi
#
# La variable pidlist contiendra le resultat de la commande pidof.
# pidof essaiera de trouver le PID correspondant à une chaine de
# caracteres donnee ($base dans le cas present).
#
pidlist=$(/bin/pidof -o $$ -o $PPID -o %PPID -x $base)
pid=""
for apid in $pidlist
do
if [ -d /proc/$apid ]
then
pid="$pid $apid"
fi
done
#
# Si $pid contient quelque chose provenant de la boucle for precedente,
# cela signifie qu'un ou plusieurs PID appartenant aux processus a
# recharger ont ete trouves.
#
if [ -n "$pid" ]
then
#
# Si aucun signal n'a ete indique, on va utiliser le signal de
# rechargement par defaut : SIGHUP.
#
if [ "$nolevel" = 1 ]
then
/bin/kill -SIGHUP $pid
evaluate_retval
else
#
# Sinon, on utilisera le signal fourni.
#
/bin/kill $killlevel $pid
evaluate_retval
fi
else
#
# Si $pid est vide, aucun PID appartenant au processus n'a ete trouve
# et on affiche [ECHEC].
#
print_status failure
fi
}
#
# La fonction statusproc essaiera de savoir si un processus tourne
# ou non.
#
statusproc()
{
#
# Si aucun parametre n'a ete passe a la fonction statusproc, afficher
# le mode d'emploi.
#
if [ $# = 0 ]
then
echo "Usage: status {program}"
return 1
fi
#
# $pid contiendra la liste des PIDs appartenant à un processus.
#
pid=$(/bin/pidof -o $$ -o $PPID -o %PPID -x $1)
if [ -n "$pid" ]
then
#
# Si $pid contient quelque chose, le processus tourne:
# on affiche le contenu de la variable $pid.
#
echo "$1 en cours d'execution, avec le PID $pid"
return 0
fi
#
# Si $pid ne contient rien, on regarde s'il existe un fichier PID et
# on en informe eventuellement l'utilisateur.
#
if [ -f /var/run/$1.pid ]
then
pid=$(/usr/bin/head -1 /var/run/$1.pid)
if [ -n "$pid" ]
then
echo "$1 ne tourne plus mais /var/run/$1.pid existe"
return 1
fi
else
echo "$1 ne tourne plus"
fi
}
# Fin de /etc/init.d/functions
EOF
Un nouveau fichier /etc/init.d/checkfs est créé, contenant ce qui suit:
cat > checkfs << "EOF"
#!/bin/sh
# Debut de /etc/init.d/checkfs
#
# Inclure les fonctions declarees dans le fichier /etc/init.d/functions
#
source /etc/init.d/functions
#
# Activer toutes les partitions d'echange declarees dans /etc/fstab
#
echo -n "Activation de l'echange..."
/sbin/swapon -a
evaluate_retval
#
# Si le fichier /fastboot existe, on ne lance pas la verification des partitions
#
if [ -f /fastboot ]
then
echo "Demarrage accelere, pas de verification des systemes de fichiers"
else
#
# Montage de la partition racine en lecture seule (juste au cas ou le
# noyau la monterait en lecture-ecriture alors que nous ne voulons pas
# lancer fsck sur une partition montee en lecture-ecriture).
#
/bin/mount -n -o remount,ro /
if [ $? = 0 ]
then
#
# Si le fichier /forcefsck existe, nous voulons forcer une verification de
# partition, meme si la partition avait ete demontee proprement la
# derniere fois
#
if [ -f /forcefsck ]
then
echo -n "/forcefsck existe, verification forcee "
echo "du systeme de fichiers"
force="-f"
else
force=""
fi
#
# Controle tous les systemes de fichiers mentionnes dans /etc/fstab
# qui ont le champ fs_passno positionne a 1 ou 2 (le 6eme champ.
# cf. man fstab pour plus d'informations)
#
echo "Verification des systemes de fichiers..."
/sbin/fsck $force -a -A -C -T
#
# Si quelque chose se passe mal lors de la verification de l'une des
# partitions, fsck se terminera avec une valeur de retour superieure
# a 1. Si c'est le cas, on lance sulogin de facon a ce que vous
# puissiez reparer manuellement les degats.
#
if [ $? -gt 1 ]
then
$FAILURE
echo
echo -n "Echec de fsck. Reparez vos systemes "
echo "de fichiers en lancant manuellement /sbin/fsck"
echo "sans l'option -a"
echo
echo -n "Notez bien que le systeme de fichiers "
echo "racine est actuellement monte en lecture seule."
echo
echo -n "Je vais maintenant lancer sulogin. A votre "
echo "sortie, je redemarrerai votre systeme."
echo
$NORMAL
/sbin/sulogin
/sbin/reboot -f
else
print_status success
fi
else
#
# Si le remontage en mode lecture seule ne fonctionne pas, on interrompt
# fsck et on affiche une erreur.
#
echo -n "Impossible de controler le systeme de fichiers racine "
echo "car il n'a pu etre monte en mode lecture seule."
fi
fi
# Fin de /etc/init.d/checkfs
EOF
Un nouveau fichier /etc/init.d/halt est créé, contenant ce qui suit:
cat > halt << "EOF"
#!/bin/sh
# Debut de /etc/init.d/halt
#
# Appel de halt. Cf. man halt pour la signification des
# parametres
#
/sbin/halt -d -f -i -p
# Fin de /etc/init.d/halt
EOF
Un utilisateur n'a besoin de créer ce script que s'il ne possède pas un clavier standard US à 101 touches. Un nouveau fichier /etc/init.d/loadkeys doit être créé, contenant ce qui suit:
cat > loadkeys << "EOF"
#!/bin/sh
# Debut de /etc/init.d/loadkeys
#
# Inclure les fonctions declarees dans le fichier /etc/init.d/functions
#
source /etc/init.d/functions
#
# Charger le fichier de plan du clavier par defaut
#
echo -n "Chargement du plan de clavier..."
/bin/loadkeys -d 2>/dev/null
evaluate_retval
# Fin de /etc/init.d/loadkeys
EOF
Un nouveau fichier /etc/init.d/mountfs est créé, contenant ce qui suit:
cat > mountfs << "EOF"
#!/bin/sh
# Debut de /etc/init.d/mountfs
#
# Inclure les fonctions declarees dans le fichier /etc/init.d/functions
#
source /etc/init.d/functions
case "$1" in
start)
#
# Remonter la partition racine en mode lecture-ecriture. -n
# indique a mount de ne pas ecrire dans le fichier /etc/mtab
# (car il ne pourra pas le faire. La partition racine
# est tres probablement montee en mode lecture seule).
#
echo -n "Remontage du systeme racine en mode lecture-ecriture..."
/bin/mount -n -o remount,rw /
evaluate_retval
#
# D'abord vider le fichier /etc/mtab. Puis remonter la partition
# racine une nouvelle fois en mode lecture-ecriture, mais en passant
# -f a mount. De cette facon, mount fait tout sauf le montage lui-meme.
# Ceci est necessaire pour ecrire dans le fichier mtab qui contient une
# liste des systemes de fichiers actuellement montes.
#
echo > /etc/mtab
/bin/mount -f -o remount,rw /
#
# Supprimer les eventuels fichiers /fastboot et /forcefsck. Ils
# ne sont supposes etre utilises que lors du checkfs du prochain
# demarrage, qui vient de se produire. Si vous desirez de nouveau
# fastboot ou forcefsck, vous devrez recreer ces fichiers.
#
/bin/rm -f /fastboot /forcefsck
#
# Balayer le fichier /etc/fstab et monter tous les systemes de
# fichiers qui n'ont pas l'option noauto positionnee dans
# le champ fs_mntops (le 4eme champ. cf. man fstab pour plus
# d'informations).
#
echo -n "Montage des autres systemes de fichiers..."
/bin/mount -a
evaluate_retval
;;
stop)
#
# Desactiver toutes les partitions d'echange
#
echo -n "Desactivation de l'echange..."
/sbin/swapoff -a
evaluate_retval
#
# Et demonter tous les systemes de fichiers, monter
# le systeme de fichiers racine en lecture seule (tous
# sont demontes mais comme la racine ne peut pas l'etre
# a ce moment, mount la remontera automatiquement en
# lecture seule, ce que est suppose se passer. De cette
# facon, aucune donnee ne pourra plus etre inscrite sur
# le disque).
#
echo -n "Demontage des systemes de fichiers..."
/bin/umount -a -r
evaluate_retval
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
;;
esac
# Fin de /etc/init.d/mountfs
EOF
Créez un nouveau fichier /etc/init.d/reboot contenant ce qui suit:
cat > reboot << "EOF"
#!/bin/sh
# Begin /etc/init.d/reboot
#
# Appelle reboot. Cf. man halt pour la signification des parametres.
#
echo "Redemarrage du systeme en cours..."
/sbin/reboot -d -f -i
# End /etc/init.d/reboot
EOF
Créez un nouveau fichier /etc/init.d/sendsignals contenant ce qui suit:
cat > sendsignals << "EOF"
#!/bin/sh
# Begin /etc/init.d/sendsignals
#
# Inclusion des fonctions declarees dans le fichier /etc/init.d/functions
#
source /etc/init.d/functions
#
# Envoyer a tous les processus restant le signal TERM
#
echo -n "Envoi du signal TERM a tous les processus..."
/sbin/killall5 -15
evaluate_retval
#
# Envoyer a tous les processus restant (une fois que le signal TERM
# leur a ete envoye) le signal KILL.
#
echo -n "Envoi du signal KILL a tous les processus..."
/sbin/killall5 -9
evaluate_retval
# End /etc/init.d/sendsignals
EOF
Le script suivant n'a de réelle utilité que lorsque votre horloge matérielle (également appelée horloge BIOS ou CMOS) n'est pas réglée sur le temps GMT. Le réglage recommandé consiste à configurer votre horloge matérielle en GMT et à convertir l'heure en local en utilisant le lien symbolique /etc/localtime. Mais si un système d'exploitation tourne, qui n'utilise pas une horloge réglée en GMT (notamment les OS de Microsoft), un utilisateur peut vouloir régler l'horloge en temps local, de telle façon que l'heure soit correctement affichée sur ces systèmes d'exploitation. Ce script réinitialisera l'heure du noyau avec l'horloge matérielle sans convertir l'heure en utilisant le lien symbolique /etc/localtime.
Si un utilisateur veut utiliser ce script sur le système même si l'horloge matérielle est réglée en GMT, alors la variable UTC ci-dessous doit être modifiée pour lui donner la valeur 1.
cat > setclock << "EOF"
#!/bin/sh
# Debut de /etc/init.d/setclock
#
# Inclure les fonctions declarees dans le fichier /etc/init.d/functions
# et les variables du fichier /etc/sysconfig/clock.
#
source /etc/init.d/functions
source /etc/sysconfig/clock
#
# Des maintenant, nous voulons regler l'horloge systeme sur l'horloge
# materielle, aussi nous utilisons le parametre -hctosys.
#
CLOCKPARAMS="--hctosys"
#
# Si la variable UTC est initialisee dans le fichier /etc/sysconfig/clock,
# ajouter aussi le parametre -u, pour indiquer a hwclock que l'horloge
# materielle est reglee sur le temps UTC plutot qu'en temps local.
#
case "$UTC" in
yes|true|1)
CLOCKPARAMS="$CLOCKPARAMS -u"
;;
esac
echo -n "Reglage de l'horloge..."
/sbin/hwclock $CLOCKPARAMS
evaluate_retval
# Fin de /etc/init.d/setclock
EOF
Créez un nouveau fichier /etc/sysconfig/clock en lançant ce qui suit:
cat > /etc/sysconfig/clock << "EOF"
# Debut de /etc/sysconfig/clock
UTC=1
# Fin de /etc/sysconfig/clock
EOF
Si l'horloge matérielle (appelée aussi horloge BIOS ou CMOS) n'est pas réglée sur le temps GMT, la variable UTC du fichier /etc/sysconfig/clock doit recevoir la valeur 0 (zéro).
Un nouveau fichier /etc/init.d/sysklogd est créé, contenant ce qui suit:
cat > sysklogd << "EOF"
#!/bin/sh
# Debut de /etc/init.d/sysklogd
#
# Inclure les fonctions declarees dans le fichier /etc/init.d/functions
#
source /etc/init.d/functions
case "$1" in
start)
echo -n "Demarrage du demon de journalisation systeme..."
loadproc /usr/sbin/syslogd -m 0
echo -n "Demarrage du demon de journalisation du noyau..."
loadproc /usr/sbin/klogd
;;
stop)
echo -n "Arret du demon de journalisation du noyau..."
killproc klogd
echo -n "Arret du demon de journalisation systeme..."
killproc syslogd
;;
reload)
echo "Rechargement de la configuration du demon de journalisation systeme..."
reloadproc syslogd 1
;;
restart)
$0 stop
/usr/bin/sleep 1
$0 start
;;
status)
statusproc /usr/sbin/syslogd
statusproc /usr/sbin/klogd
;;
*)
echo "Usage: $0 {start|stop|reload|restart|status}"
exit 1
;;
esac
# Fin de /etc/init.d/sysklogd
EOF
Un nouveau fichier /etc/init.d/template est créé, contenant ce qui suit:
cat > template << "EOF"
#!/bin/sh
# Debut de /etc/init.d/
#
# Inclure les fonctions declarees dans le fichier /etc/init.d/functions
#
source /etc/init.d/functions
case "$1" in
start)
echo -n "Lancement de ..."
loadproc
;;
stop)
echo -n "Arret de ..."
killproc
;;
reload)
echo -n "Rechargement de ..."
reloadproc
;;
restart)
$0 stop
/usr/bin/sleep 1
$0 start
;;
status)
statusproc
;;
*)
echo "Usage: $0 {start|stop|reload|restart|status}"
exit 1
;;
esac
# Fin de /etc/init.d/
EOF
Ces fichiers reçoivent les permissions appropriées et les liens symboliques nécessaires sont créés en exécutant les commandes suivantes. Si un utilisateur n'a pas créé les scripts loadkeys et setclock, il doit veiller à ne pas les taper dans les commandes ci-dessous.
cd /etc/init.d &&
chmod 754 rc rcS functions checkfs halt loadkeys mountfs reboot &&
chmod 754 sendsignals setclock sysklogd template &&
cd ../rc0.d &&
ln -s ../init.d/sysklogd K900sysklogd &&
ln -s ../init.d/sendsignals S800sendsignals &&
ln -s ../init.d/mountfs S900mountfs &&
ln -s ../init.d/halt S999halt &&
cd ../rc6.d &&
ln -s ../init.d/sysklogd K900sysklogd &&
ln -s ../init.d/sendsignals S800sendsignals &&
ln -s ../init.d/mountfs S900mountfs &&
ln -s ../init.d/reboot S999reboot &&
cd ../rcS.d &&
ln -s ../init.d/checkfs S200checkfs &&
ln -s ../init.d/mountfs S300mountfs &&
ln -s ../init.d/setclock S400setclock &&
ln -s ../init.d/loadkeys S500loadkeys &&
cd ../rc1.d &&
ln -s ../init.d/sysklogd K900sysklogd &&
cd ../rc2.d &&
ln -s ../init.d/sysklogd S100sysklogd &&
cd ../rc3.d &&
ln -s ../init.d/sysklogd S100sysklogd &&
cd ../rc4.d &&
ln -s ../init.d/sysklogd S100sysklogd &&
cd ../rc5.d &&
ln -s ../init.d/sysklogd S100sysklogd
On utilise le fichier /etc/fstab pour permettre à certains programmes de déterminer où certaines partitions sont supposées avoir été montées par défaut. Un nouveau fichier /etc/fstab est créé, contenant ce qui suit:
cat > /etc/fstab << "EOF"
# Debut de /etc/fstab
/dev/<designation de la partition LFS> / <type de fs> defaults 1 1
/dev/<designation de la partition d'echange> swap swap defaults 0 0
proc /proc proc defaults 0 0
# Fin de /etc/fstab
EOF
<designation de la partition LFS>, <designation de la partition d'echange> et <type de fs> doivent être remplacés par les valeurs appropriées (/dev/hda2, /dev/hda5 et reiserfs, par exemple).
Ce chapitre va rendre LFS amorçable. Il traite de la construction d'un nouveau noyau pour notre nouveau système LFS, et de l'ajout des entrées adéquates à LILO pour que le système LFS puisse être démarré depuis l'invite LILO:.
Construire le noyau requiert plusieurs étapes: le configurer et le compiler. Il y a plusieurs méthodes pour configurer le noyau. Si vous n'aimez pas la façon de faire de ce livre, lisez le fichier README fourni avec l'arborescence des sources du noyau, et cherchez quelles autres options existent. Les commandes suivantes sont lancées pour construire le noyau:
cd /usr/src/linux &&
make mrproper &&
make menuconfig &&
make dep &&
make bzImage &&
make modules &&
make modules_install &&
cp arch/i386/boot/bzImage /boot/lfskernel &&
cp System.map /boot
Note: Le chemin arch/i386/boot/bzImage peut différer selon les plateformes.
Pour être en mesure de démarrer le système LFS, nous devons mettre à jour notre chargeur d'amorçage. Nous supposerons que votre système hôte utilise Lilo (car c'est le chargeur d'amorçage le plus utilisé pour le moment).
Nous ne lancerons pas le programme lilo dans chroot. Lancer lilo dans chroot peut avoir des effets de bord dévastateurs, rendant votre MBR inutilisable et nécessitant que vous ayez une disquette de démarrage pour pouvoir démarrer un système Linux quelconque (soit le système hôte, soit LFS).
En premier lieu, nous sortirons de chroot et copierons le fichier noyau de LFS dans le système hôte:
logout
cp $LFS/boot/lfskernel /boot
L'étape suivante est d'ajouter une entrée à /etc/lilo.conf, pour que nous puissions sélectionner LFS en démarrant l'ordinateur:
cat >> /etc/lilo.conf << "EOF"
image=/boot/lfskernel
label=lfs
root=<partition>
read-only
EOF
<partition> doit être remplacé par la désignation de votre partition LFS.
Maintenant, mettez à jour le chargeur d'amorçage en lançant:
/sbin/lilo
La dernière étape est de synchroniser les fichiers de configuration de lilo du système hôte avec ceux du système LFS:
cp /etc/lilo.conf $LFS/etc &&
cp <images du noyau> $LFS/boot
Pour déterminer quels fichiers d'images du noyau sont utilisées, regardez dans le fichier /etc/lilo.conf les lignes commençant par image=. Si votre système hôte a des fichiers de noyau ailleurs que dans le répertoire /boot, assurez-vous de mettre à jour les chemins dans le fichier $LFS/etc/lilo.conf, pour qu'il les recherche dans le répertoire /boot.
Dès que nous aurons démarré dans LFS, nous pourrons lancer /sbin/lilo depuis le système LFS, pour avoir la dernière version de Lilo dans le MBR.
Maintenant que tous les logiciels ont été installés, que les scripts de démarrage ont été créés, il est temps de redémarrer l'ordinateur. Lancez une commande comme /sbin/shutdown -r now ou /sbin/reboot pour redémarrer votre système et, à l'invite LILO:, dites-lui bien de démarrer lfs.
Lors du premier démarrage, vous aurez quelques erreurs de syslogd et klogd. Ces erreurs surviennent parce que nous n'avons pas encore paramétré le réseau. Ceci sera fait dans le prochain chapitre. Ne vous inquiétez donc pas de ces erreurs pour le moment.
Comme cela a déjà été mentionné, la configuration du réseau reste à faire. Après avoir redémarré et terminé le chapitre suivant de ce livre, le système LFS sera complètement prêt pour son utilisation, et vous pourrez commencer à y ajouter vos propres logiciels.
Ce chapitre va configurer un réseau de base. Bien que le système ne soit pas forcément connecté à un réseau, les logiciels Linux utilisent cependant des fonctions de réseau. Nous allons installer au moins le périphérique de boucle local, et une carte réseau si cela est applicable. Les scripts de démarrage appropriés seront également créés pour que le réseau soit activé lors du démarrage.
Installez Netkit-base en lançant les commandes suivantes:
./configure &&
make &&
make install &&
cd etc.sample &&
cp services protocols /etc
Il y a d'autres fichiers dans le répertoire etc.sample, qui peuvent intéresser l'utilisateur.
inetd est la mère de tous les démons. Elle écoute les connexions, et transfère l'appel au démon approprié.
La variable CFLAGS du fichier Makefile doit être modifiée si des optimisations du compilateur doivent être ajoutées.
Installez Net-tools en lançant les commandes suivantes:
make &&
make install
Le package Net-tools contient les programmes arp, hostname, ifconfig, netstat, plipconfig, rarp, route, et slattach.
arp est utilisé pour manipuler le cache ARP du noyau, en général pour ajouter ou supprimer une entrée, ou pour lister le cache ARP.
hostname, avec ses liens symboliques domainname, dnsdomainname, nisdomainname, ypdomainname et nodename, est utilisé pour positionner ou montrer le nom d'hôte du système (ou autre, selon le lien symbolique qui est utilisé).
La commande ifconfig est la commande générale utilisée pour configurer les interfaces de réseau.
netstat est un outil multi-fonctions, utilisé pour afficher les connexions de réseau, les tables de routage, les statistiques d'interface, les connexions de masquage, et l'appartenance à des multi-diffusions.
plipconfig est utilisé pour régler finement les paramètres du périphérique PLIP, dans l'espoir de le rendre plus rapide.
slattach attache une interface réseau à une ligne série, càd met une ligne de terminal normale dans un des différents modes "réseau".
Un nouveau fichier /etc/init.d/localnet est créé, contenant ce qui suit:
cat > /etc/init.d/localnet << "EOF"
#!/bin/sh
# Debut de /etc/init.d/localnet
#
# Inclure les fonctions declarees dans le fichier /etc/init.d/functions
# et les variables du fichier /etc.sysconfig/network.
#
source /etc/init.d/functions
source /etc/sysconfig/network
case "$1" in
start)
echo -n "Lancement de l'interface de boucle (loopback)..."
/sbin/ifconfig lo 127.0.0.1
evaluate_retval
echo -n "Configuration de hostname..."
/bin/hostname $HOSTNAME
evaluate_retval
;;
stop)
echo -n "Arret de l'interface de boucle (loopback)..."
/sbin/ifconfig lo down
evaluate_retval
;;
restart)
$0 stop
sleep 1
$0 start
;;
*)
echo "Usage: $0: {start|stop|restart}"
exit 1
;;
esac
# Fin de /etc/init.d/localnet
EOF
Les commandes suivantes positionnent les permissions et créent le lien symbolique nécessaire:
cd /etc/init.d &&
chmod 754 localnet &&
cd ../rcS.d &&
ln -s ../init.d/localnet S100localnet
Un nouveau fichier /etc/sysconfig/network est créé, et le nom de l'hôte y est mis en lançant:
echo "HOSTNAME=lfs" > /etc/sysconfig/network
" lfs" doit être remplacé par le nom d'appel de l'ordinateur. Un utilisateur ne devrait pas entrer le FQDN (Nom de Domaine Entièrement Qualifié) ici. Cette information sera mise dans le fichier /etc/hosts ultérieurement.
Si une carte réseau doit être configurée, un utilisateur doit choisir une adresse IP, un FQDN et d'éventuels alias à utiliser dans le fichier /etc/hosts. Un exemple est:
<mon-IP> hote.domaine.org alias
Il faut s'assurer que l'adresse IP appartient bien à l'espace d'adressage IP du réseau privé. Les choix valides sont:
Class Réseaux
A 10.0.0.0
B 172.16.0.0 à 172.31.0.0
C 192.168.0.0 à 192.168.255.0
Une adresse IP correcte peut être 192.168.1.1. Un FQDN valide pour cette adresse IP peut être www.linuxfromscratch.org.
Si un utilisateur ne compte pas utiliser une carte réseau, il doit quand même avoir un FQDN. Ceci est nécessaire pour que des programmes comme Sendmail fonctionnent correctement (en fait, Sendmail ne démarrera pas s'il ne peut pas déterminer le FQDN).
Si aucune carte réseau ne doit être configurée, un nouveau fichier /etc/hosts est créé en lançant:
cat > /etc/hosts << "EOF"
# Debut de /etc/hosts (version sans carte réseau)
127.0.0.1 www.mondomaine.com <valeur de HOSTNAME> localhost
# Fin de /etc/hosts (version sans carte réseau)
EOF
Si une carte réseau doit être configurée, un nouveau fichier /etc/hosts est créé, contenant:
cat > /etc/hosts << "EOF"
# Debut de /etc/hosts (version avec carte réseau)
127.0.0.1 localhost.localdomain localhost
192.168.1.1 www.mondomaine.org <valeur de HOSTNAME>
# Fin de /etc/hosts (version avec carte réseau)
EOF
Bien sûr, les valeurs 192.168.1.1 et www.mondomaine.org doivent être modifiées selon le choix de l'utilisateur (ou ce qui est imposé si une adresse IP est assignée par un administrateur réseau/système et que cette machine est prévue pour être connectée à ce réseau).
Cette partie concerne uniquement le cas où un utilisateur veut configurer une carte réseau. Autrement, elle peut être sautée.
Un nouveau fichier /etc/init.d/ethnet est créé, contenant ce qui suit:
cat > /etc/init.d/ethnet << "EOF"
#!/bin/sh
# Debut de /etc/init.d/ethnet
#
# Script principal par Gerard Beekmans - gerard@linuxfromscratch.org
# Verification de GATEWAY par Jean-François Le Ray - jfleray@club-internet.fr
#
#
# Inclure les fonctions declarees dans le fichier /etc/init.d/functions
# et les variables du fichier /etc/sysconfig/network.
#
source /etc/init.d/functions
source /etc/sysconfig/network
case "$1" in
start)
#
# Parcourir tous les fichiers de configuration de la carte réseau
#
for interface in $(ls /etc/sysconfig/network-scripts/ifcfg* | \
grep -v ifcfg-lo)
do
#
# Charger les variables depuis ce fichier
#
source $interface
#
# Si la variable ONBOOT est positionnee a yes, traiter ce fichier et
# demarrer l'interface
#
if [ "$ONBOOT" == yes ]
then
echo -n "Lancement de l'interface $DEVICE..."
/sbin/ifconfig $DEVICE $IP broadcast $BROADCAST \
netmask $NETMASK
evaluate_retval
fi
done
#
# Si le fichier /etc/sysconfig/network contient une variable GATEWAY,
# positionnement de la passerelle.
#
if [ "$GATEWAY" != "" ]; then
echo -n "Configuration du routage pour l'interface eth0.."
/sbin/route add default gw $GATEWAY metric 1
evaluate_retval
fi
;;
stop)
#
# Parcours de tous les fichiers de configuration de la carte reseau
#
for interface in $(ls /etc/sysconfig/network-scripts/ifcfg* | \
grep -v ifcfg-lo)
do
#
# Charger les variables depuis ce fichier
#
source $interface
#
# Si la variable ONBOOT est positionnee a yes, traiter ce fichier et
# arreter l'interface
#
if [ $ONBOOT == yes ]
then
echo -n "Arret de l'interface $DEVICE..."
/sbin/ifconfig $DEVICE down
evaluate_retval
fi
done
;;
restart)
$0 stop
sleep 1
$0 start
;;
*)
echo "Usage: $0 {start|stop|restart}"
exit 1
;;
esac
# Fin de /etc/init.d/ethnet
EOF
La commande suivante permet de configurer une passerelle par défaut, si besoin est:
cat >> /etc/sysconfig/network << "EOF"
GATEWAY=192.168.1.2
EOF
Modifiez GATEWAY pour le faire correspondre à votre configuration du réseau.
Les fichiers du répertoire déterminent quelles interfaces sont lancées ou arrêtées par le script ethnet. Ce répertoire devrait contenir des fichiers de la forme ifcfg-x, où x est un numéro d'identification (ou quelque autre dénomination au gré de l'utilisateur).
Le répertoire network-scripts est tout d'abord créé en lançant:
mkdir /etc/sysconfig/network-scripts
Maintenant, de nouveaux fichiers sont créés dans ce répertoire, contenant ce qui suit. Ceci crée un fichier d'exemple ifcfg-eth0:
cat > /etc/sysconfig/network-scripts/ifcfg-eth0
<< EOF
ONBOOT=yes
DEVICE=eth0
IP=192.168.1.1
NETMASK=255.255.255.0
BROADCAST=192.168.1.255
EOF
Bien entendu, les valeurs de ces quatre variables doivent être modifiées dans chaque fichier, pour correspondre à la bonne configuration. En général, NETMASK et BROADCAST restent tels quels, et seules les variables DEVICE et IP changent pour chaque interface réseau. Si la variable ONBOOT est positionnée à yes, le script ethnet la lancera lors du démarrage du système. Si elle est positionnée à une autre valeur que yes, le fichier sera ignoré par le script ethnet, et donc l'interface ne sera pas lancée.
Les commandes suivantes positionnent les permissions et créent les liens symboliques nécessaires:
cd /etc/init.d &&
chmod 754 ethnet &&
cd ../rc3.d &&
ln -s ../init.d/ethnet S200ethnet &&
cd ../rc4.d &&
ln -s ../init.d/ethnet S200ethnet &&
cd ../rc5.d &&
ln -s ../init.d/ethnet S200ethnet
Bravo ! L'installation de votre système LFS est terminée. Cela vous a peut être pris du temps, mais cela en valait la peine. Nous vous souhaitons beaucoup de plaisir avec votre tout nouveau système Linux personnalisé.
Si vous prévoyez de vous mettre à jour avec une nouvelle version de LFS dans le futur, ce serait une bonne idée de créer le fichier /etc/lfs-3.0-pre2. Grâce à ce fichier, il vous est très facile (et pour nous aussi, si vous avez besoin d'assistance à un moment donné) de savoir quelle version de LFS est installée sur votre système. Un fichier de taille nulle, que vous pouvez créer par touch /etc/lfs-3.0-pre2, suffit.
N'oubliez pas qu'il y a plusieurs listes de distribution auxquelles vous pouvez souscrire, si vous avez besoin d'assistance, de conseils, etc. Référez-vous au chapitre Chapitre 1 - Listes de diffusion pour de plus amples informations.
Encore une fois, nous vous remercions d'utiliser le livre LFS et espérons que vous l'avez trouvé utile et qu'il en valait la peine.
Cet appendice décrit les aspects suivants de chaque package installé dans ce livre:
Le contenu de chaque package
La fonction de chaque programme d'un package
Les packages sont listés dans le même ordre que celui de leur installation dans les chapitres 5 (systèmes Intel) ou 11 (systèmes PPC).
La plupart des informations sur ces packages (surtout leur description) provient des pages man de ces packages. Je ne vais pas afficher toute la page de man, mais juste les éléments vitaux pour pouvoir comprendre ce que fait un programme. Pour connaître tous les détails sur un programme, je vous conseille de commencer par lire la page de man complètement, en plus de cet appendice.
Certains packages sont documentés plus en profondeur que d'autres. Ceci est dû au fait que je commence à mieux connaître certains packages que d'autres. Si quelque chose est à ajouter aux descriptions qui suivent, n'hésitez pas à m'envoyer un mail. Cette liste est prévue pour contenir une description poussée de chaque package installé, mais je ne peux faire ceci seul. J'ai reçu de l'aide de plusieurs personnes, mais une aide supplémentaire est encore nécessaire.
Remarquez bien que, actuellement, seul ce que fait un package est décrit, et non pas pourquoi vous avez besoin de l'installer. Ceci sera ajouté ultérieurement.
Le package Glibc contient la bibliothèque GNU C.
La bibliothèque C est un ensemble de fonctions couramment utilisées dans les programmes. Ainsi, un programmeur n'a pas besoin de créer ses propres fonctions pour chaque tâche de base. Les opérations les plus courantes comme écrire une ligne à l'écran sont déjà présentes et à la disposition du programmeur.
La bibliothèque C (comme, actuellement, presque toutes les bibliothèques) est fournie en deux versions: dynamique et statique. En bref, quand un programme utilise une bibliothèque C statique, le code de la bibliothèque C est copié dans le fichier exécutable. Quand un programme utilise une bibliothèque dynamique, cet exécutable ne contiendra pas le code de la bibliothèque C, mais simplement une routine qui chargera les fonctions depuis la bibliothèque au moment de l'exécution du programme. Cela signifie une réduction significative de la taille du fichier du programme. La documentation fournie avec la bibliothèque C décrit cela en détail, car cela est trop compliqué à expliquer ici en une ou deux lignes.
Le package noyau Linux contient le noyau de Linux.
Le noyau de Linux est au cœur de chaque système Linux. C'est lui qui fait tourner Linux. Quand vous allumez votre ordinateur et démarrez un système Linux, la toute première partie de logiciel Linux qui est chargée est le noyau. Le noyau initialise les composants matériels du système comme les ports série, les ports parallèles, les cartes son, les cartes réseau, les contrôleurs IDE, les contrôleurs SCSI et beaucoup d'autres choses. En bref, le noyau rend le matériel disponible pour que le logiciel puisse fonctionner.
Le package Ed contient le programme ed.
ed est un éditeur de texte par ligne. Il est utilisé pour créer, afficher, modifier et réaliser d'autres manipulations sur les fichiers texte.
Le package Patch contient le programme patch.
Le programme patch modifie un fichier en accord avec un fichier patch. Un fichier patch est, en général, une liste créée par le programme diff, qui contient des instructions sur la manière dont un fichier original doit être modifié. patch est très utilisé pour les corrections de code source, car il fait économiser du temps et de la place. Imaginez un pacakge d'une taille de 1Mo. Dans la version suivante de ce package ne sont modifiés que deux des fichiers de la première version. Il peut être mis à disposition comme un package entièrement nouveau de 1Mo, ou seulement comme un fichier patch de 1ko qui mettra à jour la première version pour la rendre identique à la seconde. Ainsi, si la première version a déjà été téléchargée, un fichier patch évite un second téléchargement important.
Le package GCC contient les compilateurs, les préprocesseurs et la bibliothèque GNU C++.
Un compilateur traduit le code source sous format texte en un format que l'ordinateur peut comprendre. Après qu'un fichier de code source a été compilé en un fichier objet, un éditeur de liens crée un fichier exécutable à partir d'un ou plusieurs de ces fichiers objet générés par le compilateur.
Un préprocesseur pré-traduit un fichier source, faisant par exemple l'inclusion des contenus des fichiers d'en-tête dans le fichier source. Il est conseillé de ne pas faire cela manuellement, pour gagner du temps. On insère simplement une ligne comme #include <nom_fichier>. Le préprocesseur insère le contenu de ce fichier dans le fichier source. C'est une des choses que fait le préprocesseur.
La bibliothèque C++ est utilisée par les programmes C++. La bibliothèque C++ contient les fonctions qui sont couramment utilisées dans les programmes C++. Ainsi, le programmeur n'a pas à réécrire certaines fonctions (comme afficher une chaîne de caractères à l'écran) à chaque fois qu'il crée un programme.
Le package Bison contient le programme bison.
Bison est un générateur de parseur, en remplacement de YACC. YACC signifie Encore un Autre Compilateur de Compilateurs. Qu'est-ce donc que Bison? C'est un programme qui génère un programme qui analyse la structure d'un fichier texte. Au lieu d'écrire le programme, un utilisateur spécifie comment les choses doivent être reliées et, avec ces règles, un programme est construit pour analyser le fichier texte.
Il y a de nombreux exemples où une structuration est nécessaire et l'un d'eux est la calculatrice.
Soit la chaîne:
1 + 2 * 3
Un humain peut facilement arriver au résultat de 7. Pourquoi? A cause de sa structure. Notre cerveau sait comment interpréter la chaîne. L'ordinateur ne le sait pas, et Bison est un outil pour l'aider à comprendre cela, en présentant la chaîne sous la forme suivante au compilateur:
+
/ \
* 1
/ \
2 3
En commençant en bas de l'arbre, et en arrivant aux nombres 2 et 3, qui sont liés par un symbole de multiplication, l'ordinateur multiplie 2 par 3. Le résultat de cette multiplication est mémorisé et la prochaine chose que l'ordinateur voit est le résultat de 2*3 et le nombre 1 qui sont reliés par le symbole d'addition. L'ajout de 1 au résultat précédent donne 7. En calcul, les opérations les plus complexes peuvent être exprimées sous ce format d'arbre, et l'ordinateur commence simplement en bas, et travaille en cheminant vers le haut, pour arriver à la réponse correcte. Bien entendu, Bison n'est pas uniquement utilisé pour les calculatrices.
Le paquet Mawk contient le programme mawk.
mawk est un interpréteur pour le langage de programmation AWK. Le langage AWK est utile pour manipuler des fichiers de données, retrouver et travailler sur du texte, et pour prototyper et expérimenter des algorithmes.
Le package Findutils contient les programmes find, locate, updatedb et xargs.
Le programme find recherche, dans une hiérarchie de répertoires, les fichiers qui correspondent à un certain critère. Si aucun critère n'est fourni, il liste tous les fichiers dans le répertoire courant et ses sous-répertoires.
locate scrute une base de données qui contient tous les fichiers et répertoires d'un système de fichiers. Ce programme liste les fichiers et répertoires de cette base de données qui vérifient un certain critère. Si un utilisateur recherche un fichier, ce programme va scruter la base de données et lui dire exactement où sont situés les fichiers qu'il a demandés. Cela n'a de sens que si la base de données de localisation est correctement mise à jour, autrement ce programme vous fournira des informations périmées.
Le programme updatedb met à jour la base de données de localisation. Il scrute tout le système de fichiers (y compris les autres systèmes de fichiers actuellement montés, sauf si vous lui spécifiez de ne pas le faire), et enregistre chaque répertoire et fichier qu'il trouve dans la base de données qui sera utilisée par le programme locate, qui retrouve ces informations. C'est une bonne habitude que de mettre à jour cette base de données quotidiennement, pour qu'elle soit à jour au moment ou ce sera nécessaire.
La commande xargs applique une commande à une liste de fichiers. Si vous devez exécuter la même commande sur de multiples fichiers, vous pouvez créer un fichier qui contient tous ces fichiers (un par ligne) et utiliser xargs pour lancer une commande sur la liste.
Le package Ncurses contient les bibliothèques ncurses, panel, menu et form. Il contient également les programmes tic, infocmp, clear, tput, toe et tset.
Les bibliothèques qui constituent la bibliothèque Ncurses sont utilisées pour afficher du texte (souvent de manière fantaisiste) à l'écran. Un exemple d'utilisation de ncurses se trouve dans le processus " make menuconfig" du noyau. Les bibliothèques contiennent les routines pour créer des panneaux, des menus, des formulaires, et des routines générales d'affichage de texte.
tic est le compilateur de description des entrées de terminfo. Le programme traduit un fichier terminfo du format source en format binaire utilisable avec les routines de la bibliothèque ncurses. Les fichiers terminfo contiennent des informations sur les capacités d'un terminal.
Le programme infocmp peut être utilisé pour comparer une entrée binaire de terminfo avec d'autres, ré-écrire une description terminfo pour tenir compte du champ use= de terminfo, ou afficher une description terminfo du fichier binaire (term) sous différents formats (à l'opposé de ce que fait tic).
Le programme clear efface l'écran, si cela est possible. Il regarde dans l'environnement du type de terminal, puis dans la base de données terminfo, pour trouver comment effacer l'écran.
Le programme tput utilise la base de données terminfo pour construire les valeurs des capacités dépendant du terminal et les informations disponibles pour le shell, pour initialiser ou réinitialiser le terminal, ou renvoyer le nom long du type de terminal requis.
Le programme toe liste tous les types de terminaux disponibles par leur nom primaire, avec leur description.
Le programme tset initialise les terminaux pour qu'ils puissent être utilisés, mais il n'est plus beaucoup utilisé désormais. Il est fourni pour la compatibilité avec BSD 4.4.
Le package Less contient le programme less.
Le programme less est un paginateur de fichier (ou un afficheur de texte). Il affiche le contenu d'un fichier avec la possibilité de défilement. Less est une évolution du paginateur habituel appelé " more" . Less permet le défilement arrière dans les fichiers et n'a pas besoin de lire tout le fichier quand il démarre, ce qui le rend plus rapide quand vous lisez de gros fichiers.
Le package Groff contient les programmes addftinfo, afmtodit, eqn, grodvi, groff, grog, grohtml, grolj4, grops, grotty, hpftodit, indxbib, lkbib, lookbib, neqn, nroff, pfbtops, pic, psbb, refer, soelim, tbl, tfmtodit et troff.
addftinfo lit un fichier de fonte troff et y ajoute des informations supplémentaires de métrique de fonte, afin qu'il soit utilisable par le système groff.
eqn compile les descriptions d'équations intégrées dans des fichiers d'entrée troff en commandes pouvant être comprises par troff.
groff est un frontal pour le système de formatage de document groff. Normalement, il lance le programme troff et un post-processeur approprié au périphérique choisi.
grog lit des fichiers et tente de trouver lesquelles des options groff -e, -man, -me, -mn, -ms, -p, -s et -t sont nécessaires pour imprimer les fichiers, et affiche la commande groff incluant ces options sur la sortie standard.
grolj4 est un pilote pour groff qui produit une sortie en format PCL5 utilisable par une imprimante HP Laserjet 4.
grotty traduit la sortie de troff GNU en une forme convenable pour les périphériques de type machine à écrire.
hpftodit crée un fichier de fonte destiné à être utilisé avec groff -Tlj4 à partir d'un fichier de métrique de fonte spécifique à HP.
indxbib crée un index de permutation pour les bases de données bibliographiques à partir du fichier spécifié, destiné à être utilisé par refer, lookbib et lkbib.
lkbib recherche dans les bases de données bibliographiques les références contenant les clés spécifiées, et affiche les références trouvées sur la sortie standard.
lookbib affiche une invite sur la sortie d'erreur standard (sauf si l'entrée standard n'est pas un terminal), lit une ligne depuis l'entrée standard contenant un ensemble de mots-clés, recherche dans les bases de données bibliographiques dans un fichier spécifié les références contenant ces mots-clés, affiche les références trouvées sur la sortie standard, et répète le processus jusqu'à la fin de l'entrée.
pic compile les descriptions d'images incluses dans des fichiers d'entrée troff ou TeX en commandes qui peuvent être comprises par TeX ou troff.
psbb lit un fichier qui doit être un document Postscript conforme aux conventions de Structuration des Documents, et cherche un commentaire %%BoundingBox.
refer copie le contenu d'un fichier sur la sortie standard, sauf que les lignes entre .[ et .] sont interprétées comme des citations, et que les lignes entre .R1 et .R2 sont interprétées comme des commandes sur la manière de traiter les citations.
soelim lit les fichiers et remplace les lignes de la forme fichier .so par le contenu de fichier.
tbl compile les descriptions de tables intégrées dans les fichiers d'entrée troff en commandes qui peuvent être comprises par troff.
troff est en grande partie compatible avec le troff Unix. En général, il doit être invoqué avec la commande groff, qui lancera aussi les préprocesseurs et les post-processeurs dans l'ordre approprié, et avec les options qui conviennent.
Le package Man contient les programmes man, apropos, whatis et makewhatis.
man formate et affiche les pages de manuel en ligne.
apropos recherche dans un ensemble de fichiers de base de données contenant des descriptions brèves des commandes système, en fonction de mots-clés, et affiche le résultat sur la sortie standard.
whatis recherche dans un ensemble de fichiers de base de données contenant des descriptions brèves de commandes système, en fonction de mots-clés, et affiche le résultat sur la sortie standard. Seules les correspondances de mots complets sont affichées.
makewhatis lit toutes les pages de manuel contenues dans les sections de manpath fournies, ou les pages préformatées contenues dans les sections de catpath données. Pour chaque page, il écrit une ligne dans la base de données whatis; chaque ligne contient le nom de la page et une brève description, séparés par un tiret. La description est extraite du contenu de la section NAME de la page du manuel.
Le package Perl contient Perl - Extraction et Rapport Pratiques
Perl combine les capacités et les fonctionnalités de C, awk, sed et sh dans un puissant langage de programmation.
Le package M4 contient le processeur M4.
M4 est un processeur de macro. Il copie l'entrée sur la sortie en développant les macros au fur et à mesure. Les macros sont soit prédéfinies, soit définies par l'utilisateur, et peuvent prendre un nombre quelconque d'arguments. En plus de développer les macros, m4 a des fonctions prédéfinies pour inclure des fichiers nommés, lancer des commandes UNIX, faire de l'arithmétique d'entiers, manipuler du texte de diverses façons, faire de la récursivité, etc. M4 peut être utilisé soit comme frontal d'un compilateur, ou comme processeur de macros à part.
Le package Texinfo contient les programmes info, install-info, makeinfo, texi2dvi et texindex.
Le programme info lit les documents Info, en général situés dans le répertoire /usr/doc/info. Les documents Info sont comme des pages de man(uel), mais ont tendance à aller plus en profondeur que la simple explication des options d'un programme.
Le programme install-info met à jour les entrées d'info. Quand le programme info est exécuté, une liste de sujets disponibles (c'est-à-dire les documents info disponibles) est affichée. Le programme install-info est utilisé pour tenir cette liste de sujets disponibles à jour. Si des fichiers d'info sont supprimés manuellement, il faut également supprimer le sujet dans le fichier d'index. Ce programme est utilisé dans ce but. Il fonctionne également, dans l'autre sens, quand des documents d'info sont ajoutés.
Le programme makeinfo traduit des documents source Texinfo en différents formats. Les formats disponibles sont: fichiers info, texte et HTML.
Le package Autoconf contient les programmes autoconf, autoheader, autoreconf, autoscan, autoupdate et ifnames.
autoconf est un outil pour produire des scripts shell qui configurent automatiquement les packages de code source logiciel pour les adapter à de nombreux systèmes UNIX. Les scripts de configuration produits par Autoconf sont indépendants d'Autoconf quand ils sont lancés; leurs utilisateurs n'ont donc pas besoin d'avoir Autoconf.
Le programme autoheader peut créer un fichier modèle de commandes C #define à utiliser pour la configuration.
Si vous avez beaucoup de scripts générés par autoconf, le programme autoreconf peut vous faire gagner du temps. Il lance autoconf (et autoheader, si besoin) de façon répétée pour reconstruire les scripts de configuration Autoconf et les modèles d'en-tête de configuration dans l'arborescence rattachée au répertoire courant.
Le programme autoscan peut vous aider à créer un fichier configure.in pour un package logiciel. autoscan scrute les fichiers sources dans une arborescence rattachée à un répertoire donné en argument de ligne de commande, ou le répertoire courant si aucun n'est spécifié. Il recherche les fichiers sources pour des problèmes habituels de portabilité et crée un fichier configure.scan qui est un préliminaire à configure.in pour ce package.
Le programme autoupdate met à jour un fichier configure.in qui appelle les macros Autoconf par leurs anciens noms, afin qu'il utilise les noms de macro actuels.
ifnames peut servir lors de l'écriture d'un configure.in pour un package logiciel. Il affiche les identifiants que le package utilise déjà dans les conditions du préprocesseur C. Si un package a déjà été mis à jour pour une portabilité quelconque, ce programme peut vous aider à trouver ce que sa configuration doit vérifier. Il peut aider à remplir quelques trous dans un configure.in généré par autoscan.
Le package Automake contient les programmes aclocal et automake.
Automake inclut un certain nombre de macros Autoconf qui peuvent être utilisées dans les packages; certaines d'entre elles sont requises par Automake, dans certains cas. Ces macros doivent être définies dans le fichier aclocal.m4; autrement, elles ne seront pas vues par autoconf.
Le programme aclocal va générer automatiquement les fichiers aclocal.m4, en fonction du contenu de configure.in. Ceci fournit un bon moyen d'obtenir des macros produites par Automake, sans avoir à rechercher ici ou là. De plus, le mécanisme aclocal peut être étendu pour pouvoir être utilisé par d'autres packages.
Pour créer tous les fichiers Makefile.in d'un package, lancez le programme automake dans le répertoire racine de ce package, sans arguments. automake va chercher automatiquement chaque Makefile.am approprié (en parcourant configure.in) et générer le Makefile.in correspondant.
Le package Bash contient le programme bash.
bash est le SHell Bourne-Again, qui est un interpréteur de commandes couramment utilisé sur les systèmes Unix. bash est un programme qui lit l'entrée standard, c'est-à-dire le clavier. Un utilisateur tape quelque chose et le programme évalue ce qu'il a entré, et en fait quelque chose, comme lancer un programme.
Le package Flex contient le programme flex.
flex est un outil pour générer des programmes qui reconnaissent des motifs dans du texte. La reconnaissance de motifs est très utile dans de nombreuses applications. Un utilisateur définit les règles de recherche, et flex crée un programme qui recherche ces motifs. La raison pour laquelle les gens utilisent flex est qu'il est plus facile de définir des règles sur ce qu'il faut rechercher, que d'écrire un programme qui scrute le texte pour cela.
Le package Binutils contient les programmes gasp, gprof, ld, as, ar, nm, objcopy, objdump, ranlib, readelf, size, strings, strip, c++filt et addr2line.
gasp est le préprocesseur de macros assembleur.
ld combine plusieurs fichiers objets et archives, modifie l'emplacement de leurs données et lie les références des symboles. Souvent, la dernière étape dans la construction d'un nouveau programme compilé à exécuter est un appel à ld.
as a d'abord été prévu pour assembler la sortie du compilateur GNU C gcc, pour qu'elle puisse être utilisée par le lieur ld.
Le programme ar crée, modifie et extrait des données depuis des archives. Une archive est un simple fichier contenant un ensemble d'autres fichiers dans une structure qui permet de retrouver les fichiers individuels d'origine (appelés membres de l'archive).
L'utilitaire objcopy copie le contenu d'un fichier objet dans un autre. objcopy utilise la bibliothèque GNU BFD pour lire et écrire dans les fichiers objet. Il peut écrire le fichier objet destination dans un format différent de celui du fichier objet source.
objdump affiche des informations sur un ou plusieurs fichiers objet. Les options déterminent quelles informations spécifiques sont à afficher. Ces informations sont essentiellement utiles pour les programmeurs qui travaillent sur des outils de compilation, à l'inverse des programmeurs qui veulent juste que leur programme compile et fonctionne.
ranlib génère un index du contenu d'une archive, et le stocke dans l'archive. L'index liste chaque symbole défini par un membre d'une archive, qui est un fichier objet re-localisable.
size liste les tailles des sections -- et la taille totale -- de chaque fichier objet objfile dans sa liste d'arguments. Par défaut, une ligne est générée en sortie pour chaque fichier objet ou chaque module dans l'archive.
Pour chaque fichier donné, strings affiche les séquences de caractères imprimables qui ont au moins une longueur de quatre caractères (ou le nombre spécifié en option du programme) et sont suivies d'un caractère non imprimable. Par défaut, il affiche seulement les chaînes des parties initialisées et chargées des fichiers objet; pour les autres types de fichier, il affiche les chaînes de tout le fichier.
strings est essentiellement utilisé pour déterminer le contenu des fichiers non-texte.
strip débarrasse les fichiers objet de tous les symboles, ou de certains en particuliers. La liste des fichiers objet peut inclure des archives. Au moins un fichier objet doit être fourni. strip modifie les fichiers fournis en argument, plutôt que d'écrire les copies modifiées sous d'autres noms.
Le langage C++ fournit un mécanisme de surcharge, ce qui signifie que vous pouvez écrire plusieurs fonctions ayant le même nom (pourvu que chacune réclame des paramètres de types différents). Tous les noms de fonction C++ sont encodés dans un nom d'assemblage de bas niveau (ce processus est connu sous le nom de broyage). Le programme c++filt fait l'association inverse: il décode (dé-broie) les noms de bas niveau en noms de niveau utilisateur, pour que le lieur puisse prévenir un conflit entre ces fonctions surchargées.
addr2line traduit les adresses d'un programme en noms de fichier et numéros de ligne. A partir d'une adresse et d'un exécutable, il utilise les informations de déboguage présentes dans l'exécutable pour trouver quel nom de fichier et quel numéro de ligne sont associés à une adresse donnée.
Le package Bzip2 contient les programmes bzip2, bunzip2, bzcat et bzip2recover.
bzip2 compresse les fichiers avec l'algorithme de compression de texte par tri de blocs de Burrows-Wheeler, et le codage de Huffman. La compression est en général bien meilleure que celle obtenue par les compresseurs plus conventionnels basés sur LZ77/LZ78, et s'approche des performances de la famille PPM des compresseurs statistiques.
Le package Diffutils contient les programmes cmp, diff, diff3 et sdiff.
cmp et diff comparent tous deux deux fichiers et montrent leurs différences. Ces deux programmes ont des options pour comparer des fichiers dans différentes situations.
La différence entre diff et diff3 est que diff compare deux fichiers, et diff3 en compare trois.
Le package e2fsprogs contient les programmes chattr, lsattr, uuidgen, badblocks, debugfs, dumpe2fs, e2fsck, e2label, fsck, fsck.ext2, mke2fs, mkfs.ext2, mklost+found et tune2fs.
chattr modifie les attributs d'un fichier sur un système de fichier Linux ext2.
Le programme uuidgen crée un nouvel identifiant universel unique (UUID) en utilisant la bibliothèque libuuid. Le nouvel UUID peut raisonnablement être considéré comme unique parmi tous les UUID créés sur le système local, et parmi les UUID créés sur d'autres systèmes, dans le passé ou le futur.
badblocks est utilisé pour rechercher les secteurs défectueux sur un périphérique (en général une partition de disque).
Le programme debugfs est un débogueur de système de fichiers. Il peut être utilisé pour examiner et modifier l'état d'un système de fichiers ext2.
dumpe2fs affiche le super-bloc et les informations de groupe de blocs pour le système de fichiers présent sur un périphérique spécifié.
e2fsck est utilisé pour vérifier un système de fichiers Linux ext2. fsck.ext2 fait la même chose que e2fsck.
e2label affiche ou modifie le nom de système de fichiers sur un système de fichiers ext2 situé sur le périphérique spécifié.
mke2fs est utilisé pour créer un système de fichiers Linux ext2 sur un périphérique (en général une partition de disque). mkfs.ext2 fait la même chose que mke2fs.
mklost+found est utilisé pour créer le répertoire lost+found dans le répertoire de travail courant d'un système de fichiers Linux ext2. mklost+found pré-alloue des blocs de disque pour le répertoire, pour le rendre utilisable par e2fsck.
tune2fs ajuste les paramètres d'optimisation de système de fichiers sur un système de fichiers Linux ext2.
Le pacakge File contient le programme file.
file teste chaque fichier spécifié pour essayer de le classer. Il y a trois sortes de tests, réalisés dans cet ordre: tests du système de fichiers, test des nombres magiques et test de langage. Le premier test qui réussit provoque l'affichage du type de fichier.
Le package Fileutils contient les programmes chgrp, chmod, chown, cp, dd, df, dir, dircolors, du, install, ln, ls, mkdir, mkfifo, mknod, mv, rm, rmdir, sync, touch et vdir.
chgrp modifie le groupe d'appartenance de chaque fichier donné en lui affectant le groupe spécifié, qui peut être un nom de groupe ou un ID de groupe numérique.
chmod modifie les permissions de chaque fichier spécifié selon le mode donné, qui peut être soit une représentation symbolique des changements à effectuer, ou un nombre octal représentant le schéma de bits pour les nouvelles permissions.
dd copie un fichier (depuis l'entrée standard vers la sortie standard, par défaut) avec une taille de bloc choisie par l'utilisateur, en pouvant éventuellement y faire des conversions.
df affiche la quantité d'espace disque disponible sur le système de fichiers contenant chaque nom de fichier en argument. Si aucun nom de fichier n'est donné, l'espace disponible sur tous les systèmes de fichier actuellement montés est affiché.
dir et vdir sont des versions de ls avec différents formats de sortie par défaut. Ces programmes listent chaque fichier ou répertoire spécifié. Le contenu des répertoires est trié alphabétiquement. Pour ls, les fichiers sont listés par défaut en colonne, triés verticalement, si la sortie standard est un terminal; autrement, ils sont listés un par ligne. Pour dir, les fichiers sont listés par défaut en colonne, triés verticalement. Pour vdir, les fichiers sont listés par défaut en format long.
dircolors affiche les commandes pour positionner la variable d'environnement LS_COLOR. La variable LS_COLOR est utilisée pour modifier le schéma de couleurs par défaut utilisé par ls et les utilitaires associés.
du affiche la quantité d'espace disque utilisée par chaque argument, et pour chaque sous-répertoire du répertoire en argument.
install copie les fichiers et positionne leurs permissions et, si possible, leur propriétaire et leur groupe.
mknod crée un FIFO, fichier spécial de type caractère ou bloc, avec le nom de fichier spécifié.
mv déplace des fichiers d'un répertoire dans un autre, ou renomme des fichiers, selon les arguments qui lui sont passés.
touch positionne les heures d'accès et de modification de chaque fichier spécifié à l'heure courant. Les fichiers qui n'existent pas sont créés vides.
Le pacakge gettext contient les programmes gettext, gettextize, msgcmp, msgcomm, msgfmt, msgmerge, msgunfmt et xgettext.
Le package gettext est utilisé pour l'internationalisation (connue aussi sous le terme de i18n) et pour la localisation (connue aussi sous le terme de l10n). Les programmes peuvent être compilés avec le Support du Langage Natif (NLS) qui leur permet d'afficher les messages dans la langue natale des utilisateurs plutôt qu'en anglais, par défaut.
Le package grep contient les programmes egrep, fgrep et grep.
egrep affiche les lignes des fichiers qui vérifient une expression régulière étendue.
fgrep affiche les lignes des fichiers qui vérifient une liste de chaînes fixes, séparées par des caractères de fin de ligne, l'une quelconque de ces chaînes devant correspondre.
Le package Gzip contient les programmes compress, gunzip, gzexe, gzip, uncompress, zcat, zcmp, zdiff, zforece, zgrep, zmore et znew.
gunzip décompresse les fichiers qui ont été compressés avec gzip.
gzexe permet de compresser des exécutables en les remplaçant, et de faire en sorte qu'ils se décompressent automatiquement et s'exécutent lorsqu'ils sont lancés (avec une dégradation des performances).
zcat décompresse une liste de fichiers fournie en ligne de commande ou sur son entrée standard, et écrit les données décompressées sur la sortie standard.
zforce force l'extension .gz sur tous les fichiers gzip, pour que gzip ne les compresse pas deux fois. Ceci peut être utile pour des fichiers dont les noms ont été tronqués après un transfert.
zmore est un filtre qui permet d'examiner des fichiers texte simples ou compressés, écran par écran, sur un terminal (de la même manière que more).
Du package Ld.so, nous n'utilisons que les pages man de ldconfig et ldd. Les binaires ldconfig et ldd eux-mêmes sont fournis avec Glibc.
Le package Libtool contient les programmes libtool et libtoolize. Il contient aussi la bibliothèque ltdl.
libtool fournit des services généraux de support de construction des bibliothèques.
Libtool fournit une petite bibliothèque, appelée 'libltdl', qui a pour but de masquer les différentes difficultés liées à l'ouverture dynamique des bibliothèques aux programmeurs.
Le paquet Bin86 contient les programmes as86, as86_encap, ld86, objdump86, nm86 et size86.
as86 est un assembleur pour les processeurs 8086...80386.
as86_encap est un script shell pour appeler as86 et convertir le binaire créé en fichier C prog.v à inclure ou à lier avec des programmes comme les installeurs de bloc de démarrage.
ld86 comprend uniquement les fichiers objet construit par l'assembleur as86; il peut soit les lier en un exécutable I&D séparé ou impur.
Le package Lilo contient le programme lilo.
lilo installe le chargeur de démarrage de Linux, qui est utilisé pour lancer un système Linux.
Le package Make contient le programme make.
make détermine automatiquement quels morceaux d'un gros programme ont besoin d'être recompilés, et exécute les commandes pour les recompiler.
Le package Shellutils contient les programmes basename, chroot, date, dirname, echo, env, expr, factor, false, groups, hostid, hostname, id, logname, nice, nohup, pathchk, pinky, printenv, printf, pwd, seq, sleep, stty, su, tee, test, true, tty, uname, uptime, users, who, whoami et yes.
basename supprime le répertoire et les suffixes des noms de fichier.
date affiche la date et l'heure courantes dans un format spécifié, ou positionne la date du système.
La Suite «Shadow Password» (masquage des mots de passe) contient les programmes chage, chfn, chsh, expiry, faillog, gpasswd, lastlog, login, newgrp, passwd, sg, su, chpasswd, dpasswd, groupadd, groupdel, groupmod, grpck, grpconv, grpunconv, logoutd, mkpasswd, newusers, pwck, pwconv, pwunconv, useradd, userdel, usermod et vipw.
chage modifie le nombre de jours entre deux changements de mot de passe et la date du dernier changement de mot de passe.
chfn modifie le nom complet de l'utilisateur, le numéro de travail, le poste de travail et le numéro de téléphone du domicile pour un compte utilisateur.
faillog formate le contenu du journal d'échec /var/log/faillog, et conserve le nombre et les limites des échecs.
lastlog formate et affiche le contenu du journal de dernière connexion, /var/log/lastlog. Le nom de connexion, le port et l'heure de dernière connexion seront affichés.
Modifie les id effectifs de groupe et d'utilisateur en ceux d'un utilisateur. Ceci remplace le programme su installé avec le package Shellutils.
chpasswd lit un fichier contenant des paires nom d'utilisateur et mot de passe depuis l'entrée standard, et utilise ces informations pour mettre à jour un groupe d'utilisateurs existants.
dpasswd ajoute, supprime et met à jour les mots de passe d'appel pour les shells de connexion utilisateur.
La commande groupadd crée un nouveau compte de groupe avec les valeurs spécifiées en ligne de commande et les valeurs par défaut du système.
La commande groupdel modifie les fichiers de compte du système, supprimant toutes les entrées faisant référence au groupe.
La commande groupmod modifie les fichiers de compte du système pour refléter les changements spécifiés sur la ligne de commande.
logoutd applique les restrictions de temps de connexion et de port spécifiées dans /etc/porttime.
mkpasswd lit un fichier dans le format donné par les options et le convertit dans le format de fichier de base de données correspondant.
newusers lit un fichier contenant des paires nom d'utilisateur et mot de passe en clair, et utilise ces informations pour mettre à jour un groupe d'utilisateurs existants ou pour créer de nouveaux utilisateurs.
pwconv convertit en fichiers «Shadow Password» (mot de passe masqués) des fichiers de mot de passe normaux.
pwunconv convertit en fichiers de mots de passe normaux des fichiers «Shadow Password» (mot de passe masqués).
useradd crée un nouvel utilisateur ou met à jour les informations par défaut d'un nouvel utilisateur.
userdel modifie les fichiers de compte du système, supprimant toutes les entrées faisant référence au nom de connexion spécifié.
usermod modifie les fichiers de compte du système pour refléter les modifications spécifiées sur la ligne de commande.
vipw et vigr éditent respectivement les fichiers /etc/passwd et /etc/group. Avec l'option -s, ils éditent les versions masquées de ces fichiers, respectivement /etc/shadow et /etc/gshadow.
Le package Modutils contient les programmes depmod, genksyms, insmod, insmod_ksymoops_clean, kerneld, kernelversion, ksyms, lsmod, modinfo, modprobe et rmmod.
depmod gère les descriptions de dépendance pour les modules du noyau qui peuvent être chargés.
genksyms lit (sur l'entrée standard) la sortie de gcc -E source.c et génère un fichier contenant des informations de version.
insmod_ksymoops_clean supprime les ksym et les modules sauvés qui n'ont pas été accédés depuis deux jours.
kerneld exécute une action du noyau dans l'espace utilisateur (comme le chargement sur demande de modules).
modinfo examine un fichier objet associé à un module du noyau et affiche toutes les informations qu'il peut y trouver.
modprobe utilise un fichier de dépendance ressemblant à Makefile, créé par depmod, pour charger automatiquement le(s) module(s) pertinent(s) de l'ensemble des modules disponibles, dans l'arborescence des répertoires prédéfinie.
Le package Procinfo contient le programme procinfo.
procinfo recueille des données système depuis le répertoire /proc et les affiche de façon correctement formatée sur le périphérique de sortie standard.
Le package Procps contient les programmes free, kill, oldps, ps, skill, snice, sysctl, tload, top, uptime, vmstat, w et watch.
free affiche la quantité totale de mémoire, libre et utilisée, physique ou d'échange, dans le système, ainsi que la mémoire partagée et les mémoires tampon utilisées par le noyau.
tload affiche un graphe de la charge moyenne du système courant sur le terminal spécifié (ou le terminal du processus tload si aucun autre n'est spécifié).
uptime affiche une ligne contenant les informations suivantes: l'heure courante, la durée de fonctionnement du système, le nombre d'utilisateurs actuellement connectés, et les moyennes de charge du système pour les 1, 5 et 15 dernières minutes.
vmstat donne des informations sur les processus, la mémoire, la pagination, les entrées/sorties de blocs, les trappes et l'activité du cpu.
w affiche des informations sur les utilisateurs actuellement connectés à la machine, et leurs processus.
Le package Vim contient les programmes ctags, etags, ex, gview, gvim, rgview, rgvim, rview, rvim, view, vim, vimtutor et xxd.
ctags génère des fichiers de marquage pour le code source.
etags fait la même chose que ctags, mais il peut générer des fichiers de références croisées qui listent des informations sur les différents objets source trouvés dans un ensemble de fichiers de langage.
rview est une version restreinte de view. Aucune commande shell ne peut être lancée et Vim ne peut pas être interrompu.
rvim est la version restreinte de vim. Aucune commande shell ne peut être lancée et Vim ne peut pas être interrompu.
Le package Psmisc contient les programmes fuser, killall et pstree.
fuser affiche le PID des processus utilisant les fichiers ou les systèmes de fichiers spécifiés.
Le package Sed contient le programme sed.
sed est un éditeur de flux. Un éditeur de flux est utilisé pour opérer des transformations de texte basiques sur un flux d'entrée (un fichier ou une entrée depuis un pipe).
Le package Sysklogd contient les programmes klogd et syslogd.
klogd est un démon système qui intercepte et journalise les messages du noyau de Linux.
syslogd fournit une sorte de journalisation que de nombreux programmes modernes utilisent. Chaque message journalisé contient au moins une heure et un champ nom d'hôte, normalement un champ nom de programme également, mais cela dépend de la fidélité du programme qui journalise.
Le package Sysvinit contient les programmes pidof, last, lastb, mesg, utmpdump, wall, halt, init, killall5, poweroff, reboot, runlevel, shutdown, sulogin et telinit.
pidof trouve les identifiants des processus (pid) des programmes spécifiés et affiche ces identifiants sur la sortie standard.
last recherche en arrière dans le fichier /var/log/wtmp (ou le fichier désigné par l'option -f) et affiche une liste de tous les utilisateurs s'étant connectés (et déconnectés) depuis la création du fichier.
lastb est identique à last, sauf que, par défaut, il affiche un journal du fichier /var/log/btmp, qui contient toutes les tentatives de connexion ayant échouées.
mesg contrôle l'accès au terminal de l'utilisateur par d'autres. Typiquement, il est utilisé pour autoriser ou interdire à d'autres utilisateurs d'écrire sur son terminal.
utmpdumps affiche le contenu d'un fichier (en général /var/run/utmp) sur la sortie standard dans un format compréhensible par l'utilisateur.
wall envoie un message à toutes les personnes connectées ayant leur permission mesg positionnée à yes.
halt note que le système est en train de s'arrêter dans le fichier /var/log/wtmp, puis dit au noyau soit de s'arrêter, soit de redémarrer, ou d'éteindre le système. Si halt ou reboot est appelé quand le système n'est pas dans un niveau d'exécution de 0 ou 6, shutdown sera appelé à la place (avec une option -h ou -r).
init est le père de tous les processus. Son rôle principal est de créer les processus à partir d'un script enregistré dans le fichier /etc/inittab. Ce fichier a en général des entrées indiquant à init d'engendrer des getty sur chaque ligne où l'utilisateur peut se connecter. Il contrôle aussi les processus autonomes requis par un système particulier.
killall5 est la commande killall de SystemV. Il envoie un signal à tous les processus, sauf les processus dans sa propre session, de manière à ne pas tuer le shell qui fait tourner le script qui l'a appelé.
poweroff est équivalent à shutdown -h -p now. Il arrête l'ordinateur et l'éteint (si un BIOS compatible APM est utilisé, et qu'APM est activé dans le noyau).
runlevel lit le fichier utmp du système (typiquement, /var/run/utmp) pour localiser l'enregistrement du niveau d'exécution, puis écrit les niveaux d'exécution du système, le précédent et l'actuel, sur sa sortie standard, séparés par un seul espace.
shutdown arrête le système de façon sécurisée. Tous les utilisateurs connectés sont avertis que le système va s'arrêter, et la connexion est bloquée.
sulogin est invoqué par init quand le système passe en mode mono-utilisateur (ceci est réalisé par une entrée dans /etc/inittab). init tente également d'exécuter sulogin quand l'option -b lui est passée par le chargeur d'amorçage (comme LILO).
telinit envoie les signaux appropriés à init, lui indiquant le niveau d'exécution sous lequel passer.
Le package tar contient les programmes tar et rmt.
tar est un programme d'archivage conçu pour stocker et extraire des fichiers d'un fichier archive appelé fichier tar.
rmt est un programme utilisé par les programmes distants dump et restore pour manipuler un lecteur de bandes magnétiques via une connexion de communication inter-processus.
Le paquet Textutils contient les programmes cat, cksum, comm, split, cut, expand, fmt, fold, head, join, md5sum, nl, od, paste, pr, ptx, sort, split, sum, tac, tail, tr, tsort, unexpand, uniq et wc.
cat concatène le(s) fichier(s) ou l'entrée standard vers la sortie standard.
cplit découpe un fichier en morceaux séparés par un(des) motif(s) dans des fichiers xx01, xx02, ..., et affiche le nombre d'octets de chaque morceau sur la sortie standard.
expand convertit les tabulations dans les fichiers en espaces, en écrivant sur la sortie standard.
fmt reformate chaque paragraphe dans le(s) fichier(s) spécifié(s), en écrivant sur la sortie standard.
fold emballe les lignes d'entrée de chaque fichier spécifié (entrée standard par défaut), en écrivant sur la sortie standard.
head affiche les xx (10 par défaut) premières lignes de chaque fichier spécifié sur la sortie standard.
od écrit une représentation non-ambiguë, en octal par défaut, d'un fichier spécifié, sur la sortie standard.
paste écrit des lignes, d'une manière consistant à prendre séquentiellement les lignes correspondantes de chaque fichier spécifié, séparées par des tabulations, sur la sortie standard.
tail écrit les xx (10 par défaut) dernières lignes de chaque fichier spécifié sur la sortie standard.
tr convertit, répète et/ou supprime des caractères de l'entrée standard, en écrivant sur la sortie standard.
tsort écrit des listes totalement ordonnées en accord avec l'ordonnancement partiel dans les fichiers spécifiés.
unexpand convertit les espaces dans chaque fichier en tabulations, en écrivant sur la sortie standard.
uniq supprime toutes les lignes identiques successives sauf une depuis des fichiers ou l'entrée standard, et écrit dans des fichiers ou la sortie standard.
wc affiche le nombre de lignes, mots et octets de chaque fichier spécifié, et une ligne de totalisation si plus d'un fichier est spécifié.
Le package Util-linux contient les programmes arch, dmesg, kill, more, mount, umount, agetty, blockdev, cfdisk, ctrlaltdel, elvtune, fdisk, fsck.minix, hwclock, kbdrate, losetup, mkfs, mkfs.bfs, mkfs.minix, mkswap, sfdisk, swapoff, swapon, cal, chkdupexe, col, colcrt, colrm, column, cytune, ddate, fdformat, getopt, hexdump, ipcrm, ipcs, logger, look, mcookie, namei, rename, renice, rev, script, setfdprm, setsid, setterm, ul, whereis, write, ramsize, rdev, readprofile, rootflags, swapdev, tunelp et vidmode.
arch affiche l'architecture de la machine.
dmesg est utilisé pour examiner ou vérifier la mémoire tampon circulaire du noyau (messages de démarrage du noyau).
mount monte un système de fichiers depuis un périphérique dans un répertoire (point de montage).
blockdev permet d'exécuter des ioctls sur un périphérique de type bloc depuis la ligne de commande.
ctrlaltdel positionne la fonction associée à la combinaison de touche CTRL+ALT+DEL (remise à zéro logicielle ou matérielle).
elvtune permet d'optimiser l'élévateur d'entrées/sorties par file de périphérique de type bloc.
fsck.minix effectue une vérification de cohérence pour le système de fichiers Linux MINIX.
mkfs construit un système de fichiers Linux sur un périphérique, en général une partition de disque dur.
mkfs.bfs crée un système de fichiers SCO bfs sur un périphérique, en général une partition de disque dur.
mkfs.minix crée un système de fichiers Linux MINIX sur un périphérique, en général une partition de disque dur.
hexdump affiche les fichiers spécifiés, ou l'entrée standard, dans un format spécifié par l'utilisateur (ascii, décimal, hexadécimal, octal).
ul lit un fichier et traduit les occurrences de blancs soulignés en séquences qui indiquent le soulignement sur le terminal utilisé.
rdev interroge et positionne le périphérique racine image, le périphérique d'échange, la taille du disque mémoire ou le mode vidéo.
rootflags interroge et positionne des informations supplémentaires utilisées lors du montage de la racine.
Le package Kbd contient les programmes chvt, deallocvt, dumpkeys, fgconsole, getkeycodes, kbd_mode, kbdrate, loadkeys, loadunimap, mapscrn, psfxtable, resizecons, screendump, setfont, setkeycodes, setleds, setmetamode, setvesablank, showfont, showkey, unicode_start et unicode_stop. Il y a d'autres programmes, qui ne sont pas installés par défaut, car ils sont très optionnels. Examinez le contenu du package Kbd si vous avez des problèmes avec votre console.
chvt modifie le terminal virtuel de premier plan.
mapscrn charge une table de correspondance des caractères de sortie définie par l'utilisateur dans le pilote de la console. Notez qu'il est obsolète et que ses fonctionnalités sont reprises dans setfont.
psfxtable est un outil pour gérer les tables de caractères Unicode pour les fontes de console.
setkeycodes charge les entrées de la table de correspondance scancode en keycode du noyau.
setleds positionne les LED du clavier. Beaucoup de personnes trouvent utile d'avoir numlock activé par défaut, et c'est en utilisant ce programme que vous pourrez y arriver.
Ceci vous laisse trafiquer l'économiseur d'écran matériel (pas de grilles-pain, seulement un écran vide).
showfont affiche des données sur une fonte. L'information montrée comprend les informations sur la fonte, ses propriétés, les métriques des caractères, et les images des caractères.
Le paquet Man-pages contient différentes pages de manuel qui ne sont pas fournies avec les paquets.
Des exemples de pages de manuel fournies sont les pages de manuel décrivant toutes les fonctions C et C++, quelques fichiers /dev/ importants, etc.
Le package Netkit-base contient les programmes inetd et ping.
inetd est la mère de tous les démons. Elle écoute les connexions, et transfère l'appel au démon approprié.
Le package Net-tools contient les programmes arp, hostname, ifconfig, netstat, plipconfig, rarp, route, et slattach.
arp est utilisé pour manipuler le cache ARP du noyau, en général pour ajouter ou supprimer une entrée, ou pour lister le cache ARP.
hostname, avec ses liens symboliques domainname, dnsdomainname, nisdomainname, ypdomainname et nodename, est utilisé pour positionner ou montrer le nom d'hôte du système (ou autre, selon le lien symbolique qui est utilisé).
La commande ifconfig est la commande générale utilisée pour configurer les interfaces de réseau.
netstat est un outil multi-fonctions, utilisé pour afficher les connexions de réseau, les tables de routage, les statistiques d'interface, les connexions de masquage, et l'appartenance à des multi-diffusions.
plipconfig est utilisé pour régler finement les paramètres du périphérique PLIP, dans l'espoir de le rendre plus rapide.
slattach attache une interface réseau à une ligne série, càd met une ligne de terminal normale dans un des différents modes "réseau".
Une liste de livres, de HOWTOs et d'autres documents qu'il peut être utile de télécharger ou d'acheter suit. Cette liste est simplement un petit choix pour débuter. Nous espérons pouvoir étendre cette liste au fur et à mesure que nous découvrirons d'autres livres ou documents utiles.
Guide de l'Administrateur Réseau Linux publié par O'Reilly. ISBN: 1-56502-087-2 (Linux Network Administrator's Guide)
Lancer Linux publié par O'Reilly. ISBN: 1-56592-151-8 (Running Linux)
Tous les HOWTO suivants peuvent être téléchargés depuis le site du Projet de Documentation Linux à http://www.linuxdoc.org.
Guide de l'Administrateur Réseau Linux (Linux Network Administrator's Guide)
HOWTO Du démarrage à Bash (Powerup2Bash-HOWTO)
Vous trouverez ci-dessous la liste des packages du chapitre trois avec leur site de téléchargement d'origine. Elle devrait vous aider à trouver plus rapidement une nouvelle version d'un package.
Bash (2.04):
ftp://ftp.gnu.org/gnu/bash/
Binutils (2.10.1):
ftp://ftp.gnu.org/gnu/binutils/
Bzip2 (1.0.1):
ftp://sourceware.cygnus.com/pub/bzip2/
Diff Utils (2.7):
ftp://ftp.gnu.org/gnu/diffutils/
File Utils (4.0):
ftp://ftp.gnu.org/gnu/fileutils/
Patch de File Utils (4.0):
ftp://packages.linuxfromscratch.org/intel-3.0-pre2/
http://packages.linuxfromscratch.org/intel-3.0-pre2/
GCC (2.95.2.1):
ftp://ftp.freesoftware.com/pub/sourceware/gcc/releases/
Noyau Linux (2.4.2):
ftp://ftp.kernel.org/pub/linux/kernel/
Glibc (2.2.1):
ftp://ftp.gnu.org/gnu/glibc/
Glibc-linuxthreads (2.2.1):
ftp://ftp.gnu.org/gnu/glibc/
Grep (2.4.2):
ftp://ftp.gnu.org/gnu/grep/
Gzip (1.2.4a):
ftp://ftp.gnu.org/gnu/gzip/
Patch de Gzip (1.2.4a):
ftp://packages.linuxfromscratch.org/intel-3.0-pre2/
http://packages.linuxfromscratch.org/intel-3.0-pre2/
Make (3.79.1):
ftp://ftp.gnu.org/gnu/make/
Sed (3.02):
ftp://ftp.gnu.org/gnu/sed/
Sh-utils (2.0):
ftp://ftp.gnu.org/gnu/sh-utils/
Tar (1.13):
ftp://ftp.gnu.org/gnu/tar/
Patch de Tar (1.13):
http://sourceware.cygnus.com/bzip2/
Text Utils (2.0):
ftp://ftp.gnu.org/gnu/textutils/
MAKEDEV:
ftp://packages.linuxfromscratch.org/intel-3.0-pre2/
http://packages.linuxfromscratch.org/intel-3.0-pre2/
Bison (1.28):
ftp://ftp.gnu.org/gnu/bison/
Mawk (1.3.3):
ftp://ftp.whidbey.net/pub/brennan/
Patch (2.5.4):
ftp://ftp.gnu.org/gnu/patch/
Find Utils (4.1):
ftp://ftp.gnu.org/gnu/findutils/
Patch de Find Utils (4.1):
ftp://packages.linuxfromscratch.org/intel-3.0-pre2/
http://packages.linuxfromscratch.org/intel-3.0-pre2/
Ncurses (5.2):
ftp://ftp.gnu.org/gnu/ncurses/
Less (358):
ftp://ftp.gnu.org/gnu/less/
Groff (1.16.1):
ftp://ftp.gnu.org/gnu/groff/
Man (1.5i):
ftp://ftp.win.tue.nl/pub/linux-local/utils/man/
Perl (5.6.0):
http://www.perl.com
M4 (1.4):
ftp://ftp.gnu.org/gnu/m4/
Texinfo (4.0):
ftp://ftp.gnu.org/gnu/texinfo/
Autoconf (2.13):
ftp://ftp.gnu.org/gnu/autoconf/
Automake (1.4):
ftp://ftp.gnu.org/gnu/automake/
Flex (2.5.4a):
ftp://ftp.gnu.org/non-gnu/flex/
File (3.34):
ftp://ftp.gw.com/mirrors/pub/unix/file/
Libtool (1.3.5):
ftp://ftp.gnu.org/gnu/libtool/
Bin86 (0.15.4):
http://www.cix.co.uk/~mayday/
Gettext (0.10.36):
ftp://ftp.gnu.org/gnu/gettext/
Kbd (1.05):
ftp://ftp.win.tue.nl/pub/linux-local/utils/kbd/
E2fsprogs (1.19):
ftp://download.sourceforge.net/pub/sourceforge/e2fsprogs/
Ed (0.2):
ftp://ftp.gnu.org/gnu/ed/
Ld.so (1.9.9):
ftp://ftp.ods.com/pub/linux/
Lilo (21.7.3):
ftp://metalab.unc.edu/pub/Linux/system/boot/lilo
Modutils (2.4.5):
ftp://ftp.kernel.org/pub/linux/utils/kernel/modutils
Vim-rt (5.7):
ftp://ftp.vim.org/pub/editors/vim/unix/
Vim-src (5.7):
ftp://ftp.vim.org/pub/editors/vim/unix/
Procinfo (18):
ftp://ftp.cistron.nl/pub/people/svm/
Procps (2.0.7):
ftp://people.redhat.com/johnsonm/procps/
Psmisc (20.1):
http://download.sourceforge.net/psmisc/
ftp://download.sourceforge.net/pub/sourceforge/psmisc/
Suite de masquage des mots de passe (20001016):
ftp://ftp.pld.org.pl/software/shadow/
Patch de la Suite de masquage des mots de passe (20001016):
ftp://packages.linuxfromscratch.org/intel-3.0-pre2/
http://packages.linuxfromscratch.org/intel-3.0-pre2/
Sysklogd (1.4.1):
ftp://ftp.ibiblio.org/pub/Linux/system/daemons/
Sysvinit (2.78):
ftp://ftp.cistron.nl/pub/people/miquels/sysvinit/
Patch de Sysvinit (2.78):
ftp://packages.linuxfromscratch.org/intel-3.0-pre2/
http://packages.linuxfromscratch.org/intel-3.0-pre2/
Util Linux (2.11b):
ftp://ftp.win.tue.nl/pub/linux-local/utils/util-linux/
Man-pages (1.35):
ftp://ftp.win.tue.nl/pub/linux-local/manpages/
Netkit-base (0.17):
ftp://ftp.uk.linux.org/pub/linux/Networking/netkit/
Net-tools (1.59):
http://www.tazenda.demon.co.uk/phil/net-tools/