De la mise sous tension � la ligne de commande de Bash
 Greg O'Keefe, [email protected]
 v0.7, April 2000

 Voici une description rapide de ce qui se passe dans un syst�me Linux,
 depuis l'instant o� vous mettez celui-ci sous tension, jusqu'au moment
 o� vous vous loguez et obtenez la ligne de commande de bash (NDT :
 Bourne Again SHell). Ce document est organis� "par lots" pour
 faciliter la t�che des gens qui veulent mettre en place un syst�me �
 partir du code source. Comprendre cela vous sera tr�s utile lorsque
 vous aurez besoin de r�soudre des probl�mes ou de configurer votre
 syst�me (version fran�aise par Dominique van den Broeck, Mai 2000,
 [email protected] <mailto:[email protected]>).
 ______________________________________________________________________

 Table des mati�res


















































 1. Introduction

 2. Partie mat�rielle (Hardware)

    2.1 Configuration
    2.2 Exercices
    2.3 Plus d'informations.

 3. Lilo

    3.1 Configuration
    3.2 Exercices
    3.3 Plus d'informations

 4. Le noyau Linux

    4.1 Configuration
    4.2 Exercices
    4.3 Plus d'informations

 5. La biblioth�que C de GNU

    5.1 Configuration
    5.2 Exercices
    5.3 Plus d'informations

 6. Init

    6.1 Configuration
    6.2 Exercices
    6.3 Plus d'informations.

 7. Le syst�me de fichiers (filesystem)

    7.1 Configuration
    7.2 Exercices
    7.3 Plus d'informations

 8. D�mons noyau

    8.1 Configuration
    8.2 Exercices
    8.3 Plus d'informations

 9. Le journal syst�me (System Logger)

    9.1 Configuration
    9.2 Exercices
    9.3 Plus d'informations

 10. Getty et Login

    10.1 Configuration
    10.2 Exercices

 11. Bash

    11.1 Configuration
    11.2 Exercices
    11.3 Plus d'informations

 12. Les commandes

 13. Construire un syst�me Linux minimum � partir des sources.

    13.1 Ce qu'il vous faut
    13.2 Le syst�me de fichier (Filesystem)
    13.3 MAKEDEV
    13.4 Le noyau (kernel)
    13.5 Lilo
    13.6 Glibc
    13.7 SysVinit
    13.8 Ncurses
    13.9 Bash
    13.10 Util-linux (getty et login)
    13.11 Sh-utils
    13.12 Vers l'utilisabilit�
    13.13 Astuces diverses
    13.14 Plus d'informations

 14. Conclusion

 15. Section administrative

    15.1 Copyright
    15.2 Page principale
    15.3 Retours
    15.4 R�f�rences et remerciements.
    15.5 Historique des changements
       15.5.1 0.6 -> 0.7
       15.5.2 0.5 -> 0.6
    15.6 A faire (TODO)


 ______________________________________________________________________

 11..  IInnttrroodduuccttiioonn

 Je trouve frustrant qu'il se passe dans ma machine Linux des choses
 que je ne comprends pas. Si, comme moi, vous souhaitez vraiment
 comprendre votre syst�me plut�t que simplement savoir comment
 l'utiliser, ce document devrait �tre un bon point de d�part. Ce genre
 de "connaissance de fond" est aussi requis si vous voulez devenir un
 as de la r�solution de probl�mes sous Linux.


 Je pars du principe que vous avez une machine Linux en �tat de marche,
 et que vous ma�trisez les bases d'Unix et de l'architecture mat�rielle
 des PC.  Si ce n'est pas le cas, The Unix and Internet Fundamentals
 HOWTO <http://www.linuxdoc.org/HOWTO/Unix-and-Internet-Fundamentals-
 HOWTO.html> ("Les notions fondamentales d'Unix et Internet", miroirs
 fran�ais en VO <http://www.linuxfr.org/LDP/HOWTO/Unix-and-Internet-
 Fundamentals-HOWTO.html> et VF
 <http://www.freenix.org/unix/linux/HOWTO/Unix-Internet-Fundamentals-
 HOWTO.html>) est un excellent endroit pour d�buter.  C'est un site
 concis, lisible, et qui couvre toutes les bases.


 Le sujet principal de ce document est la fa�on dont Linux d�marre.
 Mais il se veut �galement �tre une ressource d'apprentissage plus
 large.  J'ai inclus des exercices dans chaque section. Si vous en
 faites vraiment quelques uns, vous apprendrez bien plus qu'en vous
 contentant de lire ce document.


 Il y a aussi des liens vers du code source � t�l�charger, car j'esp�re
 que certains lecteurs s'attaqueront au meilleur exercice
 d'apprentissage de Linux que je connaisse : construire un syst�me �
 partir du code source.  Giambattista Vico, un philosophe italien
 (1668-1744) disait ``verum ipsum factum'' ce qui signifie "la
 compr�hension d�coule de l'exp�rience" (NDT : Traduction libre). Merci
 � Alex (voir ``Remerciements'') pour cette citation.
 Si vous souhaitez vous "la rouler vous-m�me", je vous conseille
 d'aller voir Linux From Scratch HOWTO
 <http://www.linuxfromscratch.org> (LFS soit "Linux depuis z�ro").  LFS
 fournit des instructions d�taill�es pour b�tir un syst�me complet et
 exploitable � partir du code source. Sur le site web de LFS, vous
 trouverez aussi une mailing-list (liste de diffusion) � disposition
 des personnes qui construisent de tels syst�mes. Ce que j'ai inclus
 dans ce document, ce sont des instructions pour construire un syst�me
 "jouet", (voir ``B�tir un syst�me Linux minimal � partir des
 sources'') purement pour l'exercice.


 Les lots (NDT : "packages" en anglais et repris ci-apr�s) sont
 pr�sent�s dans l'ordre o� ils apparaissent dans le processus de
 d�marrage du syst�me.  Cela signifie que si vous installez les
 packages dans cet ordre vous pouvez red�marrer apr�s chaque
 installation, et voir � chaque fois le syst�me se rapprocher petit �
 petit de l'�tat o� il vous donnera la ligne de commande.  Il y a une
 notion de progression rassurante dans cela.


 Je vous recommande de commencer par lire le texte principal de chaque
 section, en ignorant les exercices et r�f�rences, puis de d�cider du
 point jusqu'auquel vous souhaitez comprendre votre syst�me. Reprenez
 alors depuis le d�but, en faisant les exercices et en relisant en
 d�tail.




 22..  PPaarrttiiee mmaatt��rriieellllee ((HHaarrddwwaarree))

 Lorsque vous allumez votre ordinateur, celui-ci se teste lui-m�me pour
 s'assurer que tous ses composants sont en �tat de marche. Cela
 s'appelle le ``Power On Self Test'' (POST ou Auto-Test � l'Allumage).
 Ensuite, un programme nomm� Bootstrap loader (Chargeur de boot), situ�
 dans le BIOS en ROM, recherche un secteur de boot, ou secteur
 d'amorce. Un secteur d'amorce est le premier secteur d'un disque et
 contient un petit programme capable de charger un syst�me
 d'exploitation. Les secteurs d'amorce sont marqu�s par un ``nombre
 magique'' (valeur fixe caract�ristique) 0xAA55 = 43603 � l'octet 0x1FE
 = 510. Ce sont les deux derniers octets du secteur.  C'est de cette
 fa�on que l'�lectronique peut d�terminer s'il s'agit d'un secteur
 d'amorce ou pas.


 Le bootstrap loader a une liste d'endroits o� chercher un secteur
 d'amorce.  Ma vieille machine regarde d'abord sur le lecteur de
 disquette, puis sur le disque dur. Les machines modernes peuvent aussi
 rechercher un secteur d'amorce sur un CD-ROM. S'il trouve un secteur
 amor�able ("bootable"), il le charge en m�moire et passe ainsi le
 contr�le au programme qui charge le syst�me d'exploitation en m�moire.
 Sur un syst�me Linux typique, ce programme sera la premi�re �tape du
 chargeur de LILO. Il existe malgr� tout plusieurs mani�res diff�rentes
 de faire d�marrer ("booter") votre syst�me.  Voir le _G_u_i_d_e _d_e
 _l_'_u_t_i_l_i_s_a_t_e_u_r _d_e _L_I_L_O pour plus de d�tails.  Voir la section ``LILO''
 pour l'URL.


 Evidement, il y a bien plus � dire sur ce que fait le hardware du PC.
 Mais ce n'est pas l'objet de ce document. Lisez un des nombreux livres
 traitant de l'architecture mat�rielle du PC.




 22..11..  CCoonnffiigguurraattiioonn

 La machine stocke des informations sur son propre �tat dans son CMOS.
 Cela inclut la RAM et les types de disques install�s dans le syst�me.
 Le BIOS de la machine contient un programme, Setup, qui vous permet de
 modifier ces informations. Pour savoir comment y acc�der, regardez
 attentivement les messages qui apparaissent sur votre �cran lorsque
 vous mettez votre machine sous tension. Sur ma machine, il faut
 appuyer sur la touche DEL (Suppr) avant qu'elle ne commence � charger
 le syst�me d'exploitation.


 22..22..  EExxeerrcciicceess

 Une bonne fa�on d'en apprendre plus sur le hardware d'un PC est de
 monter une machine � partir de composants d'occasion. Prenez au moins
 un 386 pour pouvoir y installer Linux facilement. Cela ne vous co�tera
 pas tr�s cher. Posez la question autour de vous, quelqu'un pourrait
 bien vous donner une partie des pi�ces qu'il vous faut.


 Allez voir Unios <http://learning.taslug.org.au/resources>, (Ils
 avaient une page sur  <http://www.unios.org>, mais elle a disparu) et
 t�l�chargez, compilez et fabriquez votre disquette bootable.  Ce n'est
 qu'un programme bootable affichant ``Hello World!'', contenant � peine
 plus de 100 lignes d'assembleur. Il serait int�ressant de voir � le
 convertir en un format exploitable par l'assembleur GNU as.


 Ouvrez l'image de la disquette bootable pour unios avec un �diteur
 hexad�cimal. Cette image fait 512 octets de long. Exactement la
 longueur d'un secteur. Trouvez-y le nombre magique 0xAA55. Faites la
 m�me chose pour une disquette bootable de votre propre ordinateur.

 Vous pouvez utiliser la commande dd pour la copier dans un fichier :
 dd if=/dev/fd0 of=boot.sector.  Faites _t_r_�_s attention � param�trer if
 (fichier source) et of (fichier destination) comme il faut !

 Essayez d'en extraire le code source du chargeur de LILO.


 22..33..  PPlluuss dd''iinnffoorrmmaattiioonnss..


 �  Les notions fondamentales d'Unix et d'Internet
    <http://www.linuxdoc.org/HOWTO/Unix-and-Internet-Fundamentals-
    HOWTO.html>, par Eric S. Raymond, miroirs fran�ais en VO
    <http://www.linuxfr.org/LDP/HOWTO/Unix-and-Internet-Fundamentals-
    HOWTO.html> et VF <http://www.freenix.org/unix/linux/HOWTO/Unix-
    Internet-Fundamentals-HOWTO.html>, et particuli�rement la section
    3, _Q_u_e _s_e _p_a_s_s_e_-_t_-_i_l _l_o_r_s_q_u_e _v_o_u_s _a_l_l_u_m_e_z _u_n _o_r_d_i_n_a_t_e_u_r _?

 �  Le premier chapitre du _G_u_i_d_e _d_e _l_'_u_t_i_l_i_s_a_t_e_u_r _d_e _L_I_L_O donne une
    excellente explication des partitions de disques sur PC et de
    l'amor�age (booting). Voir la section ``LILO'' pour l'URL.

 �  Le NOUVEAU _P_e_t_e_r _N_o_r_t_o_n _P_r_o_g_r_a_m_m_e_r_'_s _G_u_i_d_e _t_o _t_h_e _I_B_M _P_C _& _P_S_/_2
    (Guide Peter Norton du programmeur pour l'IBM PC et PS/2), par
    Peter Norton et Richard Wilton, Microsoft Press, 1988.  Il existe
    un nouveau livre Norton, qui a l'air bien, mais que je ne peux
    m'offrir pour le moment.

 �  Un des nombreux ouvrages disponibles sur la mani�re de faire
    �voluer (upgrader) son PC.


 33..  LLiilloo

 Lorsque l'ordinateur charge le secteur d'amorce d'un syst�me sous
 Linux normal, ce qu'il charge est en fait un partie de LILO, appel�e
 "first stage boot loader" (chargeur de boot de premier niveau). Il
 s'agit d'un mini programme dont la seule t�che est de charger et
 d'ex�cuter le ``second stage boot loader'' (chargeur de boot de
 deuxi�me niveau).


 Le "second stage loader" vous donne une invite de commande (s'il a �t�
 install� de cette mani�re) et charge le syst�me d'exploitation de
 votre choix.


 Lorsque votre syst�me est mont� et en �tat de marche, et que vous
 ex�cutez lilo, ce que vous ex�cutez en r�alit� est le ``map
 installer''.  Celui-ci lit le fichier de configuration /etc/lilo.conf
 et �crit le chargeur de boot sur le disque dur, avec les informations
 concernant les syst�mes d'exploitation qu'il peut charger.


 Il y a de nombreuses mani�res de rendre votre syst�me bootable. Celle
 que je viens de d�crire est la mani�re la plus �vidente et
 ``normale'', au moins pour une machine dont le syst�me d'exploitation
 principal est Linux.  Le Guide de l'Utilisateur Lilo explique
 plusieurs exemples de ``boot concepts''.  Cela vaut la peine de les
 lire, et d'en essayer quelques uns.


 33..11..  CCoonnffiigguurraattiioonn

 Le fichier de configuration de Lilo est /etc/lilo.conf. Il existe une
 page de manuel (man page) � son sujet : tapez man lilo.conf dans un
 shell pour l'afficher. La principale caract�ristique de lilo.conf est
 qu'il existe une entr�e pour chaque chose que Lilo doit booter. Pour
 une entr�e Linux, cela inclut l'endroit o� se trouve le kernel, et la
 partition � monter � la racine du syst�me de fichier (``filesystem'').
 Pour les autres syst�mes, la principale information est la partition
 sur laquelle booter.


 33..22..  EExxeerrcciicceess

 _D_A_N_G_E_R : soyez prudent avec ces exercices. Il est assez facile de
 faire une erreur quelque part et de bloquer votre "master boot record"
 (NDT : ou MBR, premier secteur du disque dur, contient le bootloader
 et la table des partitions) et de rendre ainsi votre syst�me
 inutilisable. Assurez-vous que vous avez une disquette de r�paration
 qui fonctionne, et que vous savez comment vous en servir pour remettre
 les choses en �tat. Voir plus bas un lien vers tomsrtbt, la disquette
 de r�paration que j'utilise et recommande.  La meilleure des
 pr�cautions est d'utiliser une machine qui ne contienne pas de donn�es
 sensibles.


 Installez Lilo sur une disquette. Peu importe s'il n'y a rien d'autre
 sur la disquette que le kernel - vous obtiendrez un "kernel panic"
 quand le kernel sera pr�t a charger init, mais au moins vous saurez
 que Lilo fonctionne.


 Si vous le souhaitez, vous pouvez essayer de voir jusqu'� quel point
 vous pouvez faire tenir un syst�me sur une disquette. C'est s�rement
 la deuxi�me meilleure activit� pour apprendre Linux.  Voir le Bootdisk
 HOWTO (url plus bas), et tomsrtbt (url plus bas) pour avoir des
 pistes.


 Configurez Lilo afin qu'il lance unios (voir section ``exercices
 hardware'' pour une URL). Comme d�fi suppl�mentaire, voyez si vous
 pouvez le faire sur une disquette.


 Faites une boucle de boots. Configurez le Lilo du Master Boot Record
 pour qu'il boote le Lilo du secteur de boot d'une des partitions
 principales, puis configurez ce Lilo pour qu'il relance celui du MBR.
 Ou alors utilisez le MBR et vos quatre partitions principales pour
 faire une boucle en cinq points ! Marrant !


 33..33..  PPlluuss dd''iinnffoorrmmaattiioonnss



 �  La page de man de Lilo

 �  Le package Lilo (voir ``downloads'') contient le ``LILO User's
    Guide'' lilo-u-21.ps.gz (ou plus r�cent).  Il se peut que vous ayez
    quand m�me d�j� ce document.  Regardez dans /usr/doc/lilo ou
    approch�.  La version postscript est meilleure que la version en
    texte brut, car elle contient des diagrammes et des tables.

 �  tomsrtbt <http://www.toms.net/rb> La disquette unique linux la plus
    cool ! Constitue une excellente disquette de secours.

 �  Bootdisk-HOWTO <http://www.linuxdoc.org/HOWTO/Bootdisk-HOWTO/>
    ("HOWTO Disquette-de-boot", miroirs fran�ais en VO
    <http://www.linuxfr.org/LDP/HOWTO/Bootdisk-HOWTO> et VF
    <http://www.freenix.org/unix/linux/HOWTO/Bootdisk-HOWTO.html>.





 44..  LLee nnooyyaauu LLiinnuuxx


 Le noyau (kernel) fait vraiment beaucoup de choses. Je pense qu'une
 bonne mani�re de r�sumer tout cela est de dire qu'il fait faire au
 hardware ce que les programmes veulent, proprement et efficacement.


 Le processeur ne peut ex�cuter qu'une seule instruction � la fois,
 mais Linux semble faire tourner beaucoup de choses simultan�ment. Le
 noyau accomplit cela en sautant de t�che en t�che tr�s rapidement. Il
 fait le meilleur usage possible du processeur en gardant trace des
 processus qui sont pr�ts � �tre ex�cut�s et de ceux qui attendent
 quelque chose comme un enregistrement en provenance d'un disque, ou
 une saisie clavier quelquonque. Cette t�che du noyau est appel�e
 "scheduling" (planification).


 Si un programme ne fait rien, alors il n'a pas besoin d'�tre en RAM.
 M�me un programme qui fait quelque chose peut avoir certaines parties
 inactives, qui donc n'ont pas besoin d'�tre en RAM. L'espace
 adressable est divis� en pages. Le noyau garde une trace des pages les
 plus utilis�es. Les pages qui ne sont pas autant utilis�es peuvent
 �tre d�plac�es dans la partition d'�change (swap). Lorsqu'une page est
 � nouveau sollicit�e, une autre page inutilis�e est retir�e de
 l'espace adressable pour lui faire de la place.  Cela s'appelle la
 gestion de la m�moire virtuelle.
 Si vous avez un jour compil� votre propre noyau, vous avez remarqu�
 qu'il y a un grand nombre d'options pour des p�riph�riques
 sp�cifiques. Le noyau contient beaucoup de code sp�cifique pour
 converser avec l'�lectronique de tout type, et les pr�sente d'une
 fa�on propre et uniforme aux programmes applicatifs.


 Le noyau prend aussi en charge la gestion des fichiers, les
 communications interprocessus, et beaucoup du travail concernant le
 r�seau.


 Une fois le noyau charg�, la premi�re chose qu'il fait est de
 rechercher un programme appel� init et l'ex�cuter.


 44..11..  CCoonnffiigguurraattiioonn

 La majorit� de la configuration du noyau est effectu�e quand vous le
 construisez, en utilisant make menuconfig, ou make xconfig dans le
 r�pertoire /usr/src/linux/ (ou l� ou se trouvent les sources de votre
 noyau Linux). Vous pouvez r�initialiser le mode vid�o par d�faut, la
 racine du syst�me de fichiers, le p�riph�rique de swap et la taille du
 disque virtuel (RAM disk) en utilisant rdev. Ces param�tres ainsi que
 d'autres peuvent aussi �tre pass�s au noyau depuis Lilo. Vous pouvez
 indiquer � Lilo les param�tres � passer au noyau soit dans lilo.conf,
 soit � l'invite (prompt) de Lilo.  Par exemple, si vous souhaitiez
 utiliser hda3 comme racine du syst�me de fichiers plut�t que hda2,
 vous pourriez taper :


         LILO: linux root=/dev/hda3




 Si vous mettez en place un syst�me � partir de ses sources, vous
 pouvez vous simplifier la vie en cr�ant un noyau "monolithique",
 c'est-�-dire sans module. Vous n'aurez donc pas � copier ceux-ci sur
 le syst�me cible.


 NOTE : Le fichier System.map est utilis� par le logger (le journal
 syst�me, qui enregistre les messages de service) du noyau pour
 d�terminer les noms des modules g�n�rant des messages. Le programme
 top utilise �galement ces informations. Lorsque vous copiez le noyau
 vers un syst�me cible, copiez aussi System.map.


 44..22..  EExxeerrcciicceess

 R�fl�chissez � ceci : /dev/hda3 est un type de fichier sp�cial qui
 d�crit une partition d'un disque dur. Mais il vit sur le syst�me de
 fichiers comme tous les autres fichiers. Le noyau veut savoir quelle
 partition monter � la racine - donc il n'a pas encore de syst�me de
 fichiers.  Alors comme peut-il lire /dev/hda3 pour trouver la
 partition � monter ?


 Si vous ne l'avez pas encore fait, compilez votre noyau. Lisez l'aide
 (Help) pour chaque option.


 Essayez de voir jusqu'� quel point vous pouvez r�duire la taille de
 votre noyau avant qu'il ne cesse de fonctionner. Vous pouvez apprendre
 beaucoup en �cartant les parties qui ne sont pas n�cessaires.
 Lisez ``The Linux Kernel'' (URL plus bas) et ce faisant, trouvez les
 parties du source auxquelles il se r�f�re. Le livre (au moment o�
 j'�cris ces lignes) se r�f�re au noyau version 2.0.33, qui devient
 franchement d�pass�.  Il pourrait �tre plus facile de suivre si vous
 t�l�chargiez cette ancienne version et y lisiez le source. Il est tr�s
 excitant de trouver des morceaux de code C appel�s ``process'' et
 ``page''.


 Programmez ! Faites des essais ! Voyez si vous pouvez faire cracher au
 noyau des messages suppl�mentaires ou quelque chose du m�me genre.



 44..33..  PPlluuss dd''iinnffoorrmmaattiioonnss


 �  /usr/src/linux/README et le contenu de
    /usr/src/linux/Documentation/ (Ces emplacements peuvent varier sur
    votre syst�me)

 �  Le Kernel-HOWTO
    <http://mirror.aarnet.edu.au/linux/LDP/HOWTO/Kernel-HOWTO.html>
    (miroirs fran�ais en VO <http://www.linuxfr.org/LDP/HOWTO/Kernel-
    HOWTO.html> et VF <http://www.freenix.org/unix/linux/HOWTO/Kernel-
    HOWTO.html>).


 �  L'aide disponible quand vous configurez un noyau en utilisant make
    menuconfig ou make xconfig

 �  The Linux Kernel (et autres guides du LDP)
    <http://mirror.aarnet.edu.au/linux/LDP/LDP/> (miroir fran�ais en VO
    <http://www.linuxfr.org/LDP/LDP>)

 �  T�l�chargement des sources voir ``t�l�chargements''



 55..  LLaa bbiibblliiootthh��qquuee CC ddee GGNNUU

 L'�tape suivante qui se produit au d�marrage de votre ordinateur est
 le chargement d'init et son ex�cution. Cependant, init, comme la
 plupart des programmes, utilise des fonctions issues de biblioth�ques.


 Vous avez peut-�tre d�j� vu un exemple de programme C comme celui-ci :



         main() {
                 printf("Hello World!\n");
         }



 Le programme ne d�finit nullement printf, alors d'o� vient-il ?  Il
 provient des biblioth�ques C standard ("standard C libraries"), sur un
 syst�me GNU/Linux, glibc. Si vous les compilez sous Visual C++, alors
 il provient d'une impl�mentation Microsoft de ces m�mes fonctions
 standard.  Il existe des milliers de ces fonctions standard, pour les
 math�matiques (math), la gestion des cha�nes de caract�res (string),
 l'heure et la date, l'allocation de m�moire et ainsi de suite. Tout,
 dans Unix (y compris Linux) est soit �crit en C, soit tente de le
 simuler, de sorte que tous les programmes utilisent ces fonctions.

 Si vous jetez un oeil dans /lib sur votre syst�me Linux, vous verrez
 un grand nombre de fichiers appel�s libquelquechose.so ou
 libquelquechose.a etc. Ce sont les biblioth�ques de ces fonctions.
 Glibc est simplement l'impl�mentation GNU de ces fonctions.


 Les programmes peuvent utiliser ces fonctions de deux mani�res. si
 vous "linkez" (NDT : "�ditez les liens", op�ration qui consiste �
 �tablir les relations avec les diff�rents objets sollicit�s par le
 programme, puis � cr�er l'ex�cutable) _s_t_a_t_i_q_u_e_m_e_n_t, ces fonctions
 seront copi�es � l'int�rieur de l'ex�cutable g�n�r�. C'est � �a que
 servent les biblioth�ques libquelquechose.a. Si vous linkez votre
 programme _d_y_n_a_m_i_q_u_e_m_e_n_t (effectu� par d�faut), lorsque le programme
 aura besoin du code d'une biblioth�que, il ira l'extraire directement
 du fichier libquelquechose.so


 La commande ldd vous apporte une aide pr�cieuse lorsque vous cherchez
 � retrouver les biblioth�ques utilis�es par un programme particulier.
 Par exemple, voici les biblioth�ques utilis�es par bash:



         [greg@Curry power2bash]$ ldd /bin/bash
                 libtermcap.so.2 => /lib/libtermcap.so.2 (0x40019000)
                 libc.so.6 => /lib/libc.so.6 (0x4001d000)
                 /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)




 55..11..  CCoonnffiigguurraattiioonn

 Certaines fonctions, dans leur biblioth�que, d�pendent du lieu o� vous
 vous trouvez. Par exemple, en fran�ais, on �crit les dates sous la
 forme dd/mm/yy, mais les am�ricains les �crivent mm/dd/yy. Il existe
 un programme livr� avec glibc appel� localdef qui vous donne la
 possibilit� de d�finir cela.


 55..22..  EExxeerrcciicceess

 Utilisez ldd pour d�terminer les biblioth�ques qu'utilise votre
 application pr�f�r�e.


 Utilisez ldd pour d�terminer les biblioth�ques utilis�es par init.


 Cr�ez une biblioth�que gadget, avec seulement une ou deux fonctions
 dedans.  On utilise le programme ar pour les cr�er. La page de manuel
 d'ar pourrait �tre un bon point de d�part pour commencer � enqu�ter
 sur la mani�re dont cette op�ration est effectu�e. Ecrivez, compilez,
 et linkez un programme utilisant cette biblioth�que.



 55..33..  PPlluuss dd''iinnffoorrmmaattiioonnss


 �  Code source, voir la section ``t�l�chargements''





 66..  IInniitt

 Je ne parlerai que du style d'initialisation ``System V'' que les
 syst�mes Linux utilisent le plus souvent. Il existe des alternatives.
 En fait, vous pouvez mettre n'importe quel programme dans /sbin/init,
 que le noyau ex�cutera lorsqu'il aura fini de se charger.


 Le travail d'init est de faire en sorte que tout se lance comme il
 faut. Il v�rifie que les syst�mes de fichier sont en bon �tat et les
 monte. Il d�marre les d�mons (``daemons'') qui enregistrent les
 messages syst�me, g�rent le r�seau, distribuent les pages web,
 �coutent les signaux de la souris, etc. Init d�marre aussi les
 processus getty qui vous donnent l'invite de login sur vos terminaux
 virtuels.


 Il y a un processus compliqu� concernant le changement de niveau
 d'ex�cution ("run-levels"), mais je vais sauter tout �a, et ne parler
 que du d�marrage du syst�me.


 Init lit le fichier /etc/inittab, qui lui dit quoi faire.
 Typiquement, la premi�re chose demand�e est l'ex�cution d'un script
 d'initialisation. Le programme qui ex�cute (ou interpr�te) ce script
 est bash, le m�me programme qui vous donne la ligne de commande.  Sur
 les syst�mes Debian, le script d'initialisation est /etc/init.d/rcS,
 sur Red Hat, /etc/rc.d/rc.sysinit.  C'est l� que les syst�mes de
 fichiers sont v�rifi�s puis mont�s, l'horloge mise � l'heure, le
 fichier ou la partition d'�change (swap) activ�s, les noms de machines
 d�finis, etc.



 Ensuite, un autre script est invoqu� pour nous placer dans le niveau
 d'ex�cution par d�faut. Cela implique simplement le d�marrage d'un
 ensemble de sous-syst�mes. Il existe un ensemble de sous-r�pertoires
 /etc/rc.d/rc0.d, /etc/rc.d/rc1.d, ..., /etc/rc.d/rc6.d sous Red Hat,
 ou /etc/rc0.d, /etc/rc1.d, ..., /etc/rc6.d sous Debian, correspondant
 aux run-levels. Si nous entrons dans le niveau d'ex�cution 3 sur un
 syst�me Debian, le script ex�cute tous les scripts de /etc/rc3.d
 commen�ant par `S' (pour Start). Ces scripts sont en r�alit� des liens
 vers un autre r�pertoire appel� g�n�ralement init.d.


 Donc, le script de notre niveau d'ex�cution est appel� par init, et
 recherche dans un r�pertoire des scripts dont le nom d�bute par la
 lettre `S'. Il se peut qu'il tombe sur S10syslog en premier. Les
 chiffres indiquent au script du niveau l'ordre dans lequel il doit les
 lancer. En l'occurence, S10syslog est lanc� en premier parce qu'il n'y
 pas de script commen�ant par S00 ... S09. Mais S10syslog est en fait
 un lien vers /etc/init.d/syslog qui est un script charg� du d�marrage
 et de l'arr�t du system logger (enregistreur de messages syst�mes).
 Parce que le lien commence par un `S', le script du run-level sait
 qu'il doit ex�cuter le script syslog avec le param�tre "start". Il y a
 aussi des liens dont le nom d�bute par `K' (pour Kill), qui sp�cifient
 ce qu'il faut arr�ter, et dans quel ordre, lorsque l'on entre dans le
 niveau d'ex�cution.



 Pour changer ce que le sous-syst�me lance par d�faut, vous devez
 configurer ces liens dans le r�pertoire rcN.d, ou N est le niveau
 d'ex�cution par d�faut d�fini dans votre fichier inittab.


 La derni�re chose importante qu'effectue init est de d�marrer les
 gettys [NdRel :en pratique, souvent des mingettys)].  Ceux-ci sont
 ressuscit�s (``respawned''), ce qui signifie qu'ils sont
 automatiquement relanc�s par init s'ils viennent � se terminer. La
 plupart des distributions fournissent six terminaux virtuels.  Il se
 peut que vous souhaitiez en enlever pour �conomiser de la m�moire, ou
 en ajouter pour pouvoir lancer beaucoup de choses � la fois, et passer
 rapidement de l'un � l'autre. Vous pourriez aussi avoir besoin de
 lancer un getty vers un terminal texte ou vers un modem. Vous devez
 alors �diter inittab.



 66..11..  CCoonnffiigguurraattiioonn

 /etc/inittab, qui est le fichier de configuration au sommet de la
 "hi�rarchie" des fichiers de configuration.


 Les r�pertoires rcN.d, o� N = 0, 1,..., 6 d�termine les sous-syst�mes
 � lancer.


 Quelque part dans les scripts invoqu�s par init, se trouve la commande
 mount -a.  Cela signifie : "Monte tous les syst�mes de fichiers cens�s
 �tre mont�s".  Le fichier /etc/fstab d�finit ce qui est cens� �tre
 mont�. Si vous souhaitez changer ce qui est mont� par d�faut au
 d�marrage, c'est le fichier que vous devez modifier. Il existe une
 page de manuel pour fstab.


 66..22..  EExxeerrcciicceess


 Trouvez le r�pertoire rcN.d du niveau d'ex�cution par d�faut de votre
 syst�me puis faites un ls -l pour voir les fichiers point�s par les
 liens.


 Changez le nombre de gettys tournant sur votre syst�me.


 Retirez tous les sous-syst�mes dont vous n'avez pas besoin de votre
 niveau d'ex�cution par d�faut.


 Essayez de d�terminer le minimum n�cessaire pour d�marrer.


 Fabriquez une disquette avec Lilo, un noyau et un programme statique
 affichant "Bonjour tout le monde !" nomm� /sbin/init, puis regardez-la
 d�marrer et dire bonjour.


 Regardez attentivement votre syst�me d�marrer, et notez les �v�nements
 signal�s. Ou imprimez une section de votre journal syst�me
 /var/log/messages � partir du moment o� votre syst�me a d�marr�.
 Ensuite, en partant d'inittab, explorez tous les scripts et essayez de
 voir quel code fait quoi. Vous pouvez �galement ajouter des messages,
 comme


         echo "Hello, moi c'est rc.sysinit"



 C'est aussi un bon exercice pour apprendre le langage de script de
 Bash, certains scripts �tant assez compliqu�s. Ayez un bon guide de
 bash � port�e de main (NDT : "man bash" devrait suffire, faute de
 mieux).


 66..33..  PPlluuss dd''iinnffoorrmmaattiioonnss..


 �  Voir ``t�l�chargements'' pour t�l�charger le code source.

 �  Il y a des pages de manuel pour les fichiers inittab et fstab.
    Tapez (par exemple) man inittab dans un shell pour l'afficher.

 �  Le Guide de L'Administrateur Syst�me Linux contient une section
    <http://mirror.aarnet.edu.au/linux/LDP/LDP/> int�ressante
    concernant init (miroir fran�ais en VO
    <http://www.linuxfr.org/LDP/LDP>).



 77..  LLee ssyysstt��mmee ddee ffiicchhiieerrss ((ffiilleessyysstteemm))

 Dans cette section, j'emploierai l'expression ``syst�me de fichiers''
 pour deux notions diff�rentes.  Il y a les syst�mes de fichiers
 install�s sur des partitions de disque ou d'autres p�riph�riques, et
 il y a le syst�me de fichier (NdRel : la hi�rarchie)  tel qu'il vous
 est pr�sent� par un syst�me Linux en �tat de marche. Sous Linux, vous
 "montez" le syst�me de fichiers d'un disque sur le syst�me de fichiers
 du syst�me.


 Dans la section pr�c�dente, j'ai mentionn� le fait que des scripts
 d'initialisation v�rifiaient et montaient les syst�mes de fichiers.
 Les commandes qui effectuent ces op�rations sont respectivement fsck
 et mount.


 Un disque dur n'est qu'un grand espace dans lequel vous pouvez �crire
 des z�ros et des uns. Un syst�me de fichiers impose une structure �
 tout cela, et le pr�sente sous la forme de fichiers, � l'int�rieur de
 sous-r�pertoires, � l'int�rieur de r�pertoires... Chaque fichier est
 r�present� par un inode, indiquant le fichier dont il s'agit, la date
 de sa cr�ation, et o� trouver son contenu. Les r�pertoires sont aussi
 repr�sent�s par des inodes, mais ceux-ci indiquent o� trouver les
 inodes des fichiers que les rep�rtoires contiennent. Si le syst�me
 veut lire /home/greg/bigboobs.jpeg, il commence par lire l'inode du
 r�pertoire racine / dans le ``superblock'', puis trouve l'inode du
 r�pertoire home dans le contenu de /, puis trouve l'inode du
 r�pertoire greg dans le contenu de home, et enfin l'inode de
 bigboobs.jpeg qui lui dira quel bloc du disque il faut lire.



 Si nous ajoutons des donn�es � la fin d'un fichier, il peut arriver
 que les donn�es soient �crites avant que l'inode ne soit mis � jour
 (indiquant que le nouveau bloc appartient d�sormais au fichier), ou
 vice-versa. Si le courant est coup� � cet instant pr�cis, le syst�me
 de fichiers sera "cass�".  C'est ce genre de chose que fsck essaie de
 d�tecter et de r�parer.


 La commande mount prend le syst�me de fichiers d'un p�riph�rique, et
 l'ajoute � la hi�rarchie de fichiers de votre syst�me. En g�n�ral le
 noyau monte son syst�me de fichiers racine en lecture seule (read-
 only).  La commande mount est ensuite utilis�e pour le remonter en
 lecture-�criture (read-write) apr�s que fsck ait v�rifi� que tout soit
 en ordre.


 Linux prend aussi en charge d'autres types de syst�mes de fichiers :
 msdos, vfat, minix, etc. Les d�tails d'un syst�me de fichiers
 sp�cifique sont masqu�s par le Syst�me de Fichier Virtuel (Virtual
 File System ou VFS) qui est une couche d'abstraction. Je ne rentrerai
 pas dans ces d�tails. Il existe une discussion sur ce sujet dans ``Le
 Kernel Linux'' (voir la section ``Le Noyau Linux'' pour l'URL)


 77..11..  CCoonnffiigguurraattiioonn

 Il existe des param�tres � la commande mke2fs, charg�e de la cr�ation
 d'un syst�me de fichiers de type ext2. Ils contr�lent la taille des
 blocs, le nombre d'inodes, etc. Voir la man page de mke2fs pour plus
 de d�tails.


 Ce qui doit �tre mont� sur votre syst�me de fichiers est contr�l� par
 le fichier /etc/fstab, qui a lui aussi sa page de manuel.


 77..22..  EExxeerrcciicceess

 Fabriquez un tout petit syst�me de fichiers, et visualisez-le avec un
 �diteur hexad�cimal. Identifiez les inodes, les superblocs, et le
 contenu des fichiers.


 Je crois qu'il existe des outils qui vous donnent une vue graphique
 d'un syst�me de fichiers. Trouvez-en un, essayez-le, et envoyez moi
 l'url par email avec vos appr�ciations !


 Explorez le code du syst�me de fichiers ext2 dans le noyau.


 77..33..  PPlluuss dd''iinnffoorrmmaattiioonnss


 �  Le chapitre 9 du livre ``Le noyau linux'' du LDP donne une
    excellente description des syst�mes de fichiers. Vous pouvez le
    trouver sur le site LDP : miroir fran�ais
    <http://www.linuxfr.org/LDP/LDP/> ou australien
    <http://mirror.aarnet.edu.au/linux/LDP/LDP/>).

 �  La commande mount fait partie du package util-linux, il y a un lien
    vers celui-ci dans ``t�l�chargements''.

 �  Les pages de manuel de mount, fstab, fsck et mke2fs

 �  La home page des EXT2 File System Utilities ext2fsprogs
    <http://web.mit.edu/tytso/www/linux/e2fsprogs.html> et son miroir
    australien ext2fsprogs
    <ftp://mirror.aarnet.edu.au/pub/linux/metalab/system/filesystems/ext2/>.
    On y trouve aussi une vue d'ensemble d'Ext2fs, bien qu'elle ne soit
    plus � jour, et moins lisible que le chapitre 9 du ``Noyau Linux''

 �   Unix File System Standard
    <ftp://tsx-11.mit.edu/pub/linux/docs/linux-standards/fsstnd/> Un
    autre lien <http://www.pathname.com/fhs/> vers le standard des
    syst�mes de fichiers d'Unix.  Ce document d�crit o� doit se trouver
    quoi, dans un syst�me Unix, et pourquoi. Il indique aussi le
    minimum n�cessaire � placer dans /bin, /sbin, etc. C'est une bonne
    r�f�rence si votre objectif est un syst�me minimal mais complet.




 88..  DD��mmoonnss nnooyyaauu

 Malheureusement, cette section contient plus de questions et de
 conjectures que de faits. Peut-�tre pouvez-vous apporter votre
 pierre ?


 Si vous saisissez la commande ps aux, vous verrez quelque chose
 ressemblant � ce qui suit :



 USER       PID %CPU %MEM  SIZE   RSS TTY STAT START   TIME COMMAND
 root         1  0.1  8.0  1284   536   ? S    07:37   0:04 init [2]
 root         2  0.0  0.0     0     0   ? SW   07:37   0:00 (kflushd)
 root         3  0.0  0.0     0     0   ? SW   07:37   0:00 (kupdate)
 root         4  0.0  0.0     0     0   ? SW   07:37   0:00 (kpiod)
 root         5  0.0  0.0     0     0   ? SW   07:37   0:00 (kswapd)
 root        52  0.0 10.7  1552   716   ? S    07:38   0:01 syslogd -m 0
 root        54  0.0  7.1  1276   480   ? S    07:38   0:00 klogd
 root        56  0.3 17.3  2232  1156   1 S    07:38   0:13 -bash
 root        57  0.0  7.1  1272   480   2 S    07:38   0:01 /sbin/agetty 38400 tt
 root        64  0.1  7.2  1272   484  S1 S    08:16   0:01 /sbin/agetty -L ttyS1
 root        70  0.0 10.6  1472   708   1 R   Sep 11   0:01 ps aux




 C'est une liste de processus en cours d'ex�cution sur le syst�me.
 Remarquez que init est le processus num�ro un. Les processus 2, 3,4 et
 5 sont kflushd, kupdate, kpiod et kswapd. Il y a quand m�me quelque
 chose d'�trange : dans les deux colonnes de la taille virtuelle de
 stockage (SIZE) et la taille r�elle de stockage (Real Storage Size,
 RSS), ces processus renvoient z�ro. Comment un processus peut-il ne
 pas utiliser de m�moire ?  En r�alit�, ces processus font partie du
 noyau. Le noyau, lui, n'appara�t pas du tout sur la liste des
 processus, et vous ne pouvez d�finir la m�moire utilis�e qu'en
 soustrayant la m�moire disponible du total install� sur votre syst�me.
 Les parenth�ses autour du nom de commande pourraient signifier qu'il
 s'agit d'un processus noyau (?)


 kswapd d�place des parties d'un programme non utilis�es � un instant
 donn� de l'espace de stockage r�el (c'est-�-dire la RAM) vers l'espace
 de swap (c'est-�-dire le disque dur). kflushd �crit les donn�es des
 buffers vers le disque. Ceci permet aux choses d'aller plus vite. Ce
 que les programmes �crivent peut �tre conserv� en m�moire, dans un
 buffer, puis �crit sur le disque par morceaux plus larges et de fa�on
 plus efficace (NDT : principe du cache). Je ne sais pas � quoi servent
 kupdate et kpiod.


 C'est ici que finissent mes connaissances. Que font ces deux derniers
 d�mons ? Pourquoi les d�mons noyau ont-ils des num�ros de processus
 explicites plut�t que d'�tre simplement des bouts de code anonymes ?
 Est-ce qu'init les lance effectivement, ou tournent-ils d�j� lorsque
 init appara�t ?


 J'ai mis dans /sbin/init un script pour monter /proc et faire un ps
 aux. Le processus 1 �tait le script lui-m�me, et les processus 2, 3, 4
 et 5 �taient les d�mons noyau, juste au dessous du vrai init. Le noyau
 les a forc�ment mis l�, car ce n'est s�rement pas mon script qui l'a
 fait.


 Les hypoth�ses suivantes viennent de David Leadbeater :


 Ces processus semblent s'occuper des acc�s disque, ils semblent �tre
 lanc�s par le noyau, mais apr�s avoir lanc� le processus init. Il
 semble qu'en �tant lanc�s comme des processus noyau plut�t que comme
 des processus s�par�s, ils soient prot�g�s et ne peuvent �tre tu�s
 (kill -9 ne les arr�te pas), je ne sais pas vraiment pourquoi ils sont
 lanc�s en tant que threads s�par�s. Il semble y avoir un rapport avec
 les acc�s disque.


 _k_f_l_u_s_h_d _e_t _k_u_p_d_a_t_e Ces deux processus sont d�marr�s pour vider les
 buffers "sales" (c'est-�-dire modifi�s) vers le disque. kflushd est
 lanc� quand les buffers sont pleins et kupdate se lance p�riodiquement
 (5 secondes ?) pour synchroniser les disques avec les buffers en
 m�moire.


 _k_p_i_o_d _e_t _k_s_w_a_p_d Ils ont pour t�che l'exportation de pages (sections)
 de m�moire vers le fichier d'�change de fa�on � ce que la m�moire
 principale ne soit jamais remplie, ils ressemblent � kflushd et
 kupdate dans le sens o� l'un est lanc� en cas de besoin (kpiod) et
 l'autre (kswapd) est lanc� p�riodiquement (� intervalles d'une
 seconde).


 _A_u_t_r_e_s _d_�_m_o_n_s _d_u _n_o_y_a_u

 Sur une installation par d�faut de RedHat 6, kupdate a disparu mais
 udpate tourne en tant que d�mon dans l'espace utilisateur, et il
 semble qu'il ait besoin d'�tre lanc�. Il y a �galement un autre d�mon,
 mdrecoveryd, qui lui semble d'occuper du RAID. En regardant dans les
 sources du noyau, il semble que certains pilotes SCSI lancent eux
 aussi des processus s�par�s.


 Je ne connais toujours pas la signification des parenth�ses, mais
 elles semblent appara�tre quand la RSS d'un processus est � z�ro, ce
 qui signifie qu'il n'utilise pas de m�moire (?).


 (fin de citation, merci David)



 88..11..  CCoonnffiigguurraattiioonn

 Je n'ai pas connaissance d'une configuration de ces d�mons noyau.


 88..22..  EExxeerrcciicceess

 Trouvez � quoi servent ces processus, comment ils fonctionnent, et
 �crivez une nouvelle section `D�mons Noyau'' pour ce document, et
 envoyez-la moi !





 88..33..  PPlluuss dd''iinnffoorrmmaattiioonnss

 ``Le Kernel Linux'' du Projet de Documentation Linux (LDP).  (voir
 section ``Le noyau Linux'' pour l'url), et les sources du noyau, c'est
 tout ce que je vois pour le moment.



 99..  LLee jjoouurrnnaall ssyysstt��mmee ((SSyysstteemm LLooggggeerr))

 Init d�marre les d�mons syslogd et klogd. Ils �crivent les messages �
 consigner dans le journal. Les messages du noyau sont pris en main par
 klogd, alors que syslogd g�re les messages des autres processus. Le
 fichier journal principal est /var/log/messages.  C'est un bon endroit
 o� aller voir quand quelque chose tourne mal dans votre syst�me. Vous
 y trouverez souvent de pr�cieux indices.



 99..11..  CCoonnffiigguurraattiioonn

 Le fichier /etc/syslog.conf indique au logger o� mettre quels
 messages. Les messages sont identifi�s par le service dont ils
 proviennent, et leur niveau de priorit�. Ce fichier de configuration
 est constitu� de lignes indiquant que les messages du service x avec
 une priorit� y vont vers z, o� z est un fichier, un terminal, une
 imprimante, une machine distante, ou autre chose encore.


 NOTE : Syslog a besoin que le fichier /etc/services existe.  Ce
 fichier alloue des ports (NDT : Ports des protocoles TCP et UDP).  Je
 ne sais pas vraiment si syslog a besoin d'un port r�serv� pour faire
 de l'enregistrement de messages � distance, ou si m�me
 l'enregistrement local se fait � travers un port, ou m�me s'il se
 contente d'utiliser /etc/services pour convertir les noms de services
 indiqu�s dans /etc/syslog.conf en num�ros de port.


 99..22..  EExxeerrcciicceess

 Jetez un oeil � votre journal syst�me. Prenez un message que vous ne
 comprenez pas, et essayez de trouver ce qu'il signifie.


 Redirigez tous les messages du journal vers un terminal.  (Revenez �
 la normale une fois que c'est fait).



 99..33..  PPlluuss dd''iinnffoorrmmaattiioonnss

 Le miroir
 <http://mirror.aarnet.edu.au/pub/linux/metalab/system/daemons/>
 australien de sysklogd.




 1100..  GGeettttyy eett LLooggiinn

 Getty est le programme qui vous permet de vous connecter � travers un
 p�riph�rique s�rie, comme une console virtuelle, un terminal en mode
 texte, ou un modem. Il affiche l'invite de login. Une fois que vous
 avez saisi votre nom d'utilisateur, getty le transmet � login, qui
 vous demande un mot de passe, le v�rifie, puis vous donne le shell.

 Il existe plusieurs getty disponibles. Certaines distributions, comme
 Red Hat, en utilisent un tr�s petit appel� mingetty et qui ne g�re que
 les terminaux virtuels.


 Le programme login fait partie du package util-linux, qui contient
 aussi un getty nomm� agetty, qui fonctionne bien.  Ce package contient
 �galement mkswap, fdisk, passwd, kill, setterm, mount, swapon, rdev,
 renice, more et bien d'autres.


 1100..11..  CCoonnffiigguurraattiioonn

 Le message qui appara�t en haut de votre �cran avec l'invite de login
 provient du fichier /etc/issue. Les getty sont en g�n�ral d�marr�s
 depuis /etc/inittab. Login recherche les d�tails sp�cifiques �
 l'utilisateur dans /etc/passwd, et si vous avez le shadowing (une
 protection des mots de passe), dans /etc/shadow.


 1100..22..  EExxeerrcciicceess

 Cr�ez un fichier /etc/passwd � la main. Les mots de passe peuvent �tre
 nuls, puis chang�s avec le programme passwd une fois connect�.  Voir
 la page de manuel de ce fichier. Utilisez man 5 passwd pour obtenir la
 page de manuel du fichier plut�t que celle du programme.




 1111..  BBaasshh

 Si vous donnez � login une combinaison valide de nom d'utilisateur et
 de mot de passe, il ira regarder dans /etc/passwd pour savoir quel
 shell vous donner. La plupart du temps, dans un syst�me Linux, ce sera
 bash. Le travail de bash consiste � lire vos commandes et voir ce sur
 quoi elles agissent. C'est � la fois une interface utilisateur, et
 l'interpr�teur d'un langage de programmation.


 Dans son r�le d'interface, il lit vos commandes, et les ex�cute lui-
 m�me si ces commandes sont ``internes'', comme cd, ou bien trouve et
 ex�cute un programme s'il s'agit de commandes ``externes'' comme cp ou
 startx. Bash propose �galement plusieurs options fort sympathiques
 comme un historique des commandes, ou le compl�tement automatique des
 noms de fichiers (avec la touche de tabulation).


 Nous avons d�j� vu bash � l'action dans son r�le de langage de
 programmation. Les scripts qu'init lance pour d�marrer le syst�me sont
 g�n�ralement des scripts shell, et sont ex�cut�s par bash.  Avoir un
 langage de programmation propre, parall�lement aux utilitaires
 syst�mes disponibles depuis la ligne de commande forme une combinaison
 tr�s puissante, si vous savez ce que vous faites. Par exemple
 ("s�quence frime" !)  j'ai eu besoin l'autre jour d'appliquer une pile
 enti�re de correctifs (patches) � un r�pertoire de codes source. J'ai
 �t� capable de le faire en une seule commande, la suivante :


 for f in /home/greg/sh-utils-1.16*.patch; do patch -p0 < $f; done;




 Ceci recherche tous les fichiers de mon r�pertoire personnel dont les
 noms commencent par sh-utils-1.16 et finissent par .patch, puis
 affecte un par un ces noms � la variable f et ex�cute les commandes
 invoqu�es entre do et done. Il y avait en l'occurence 11 correctifs,
 mais il aurait pu aussi bien y en avoir 3000.


 1111..11..  CCoonnffiigguurraattiioonn

 Le fichier /etc/profile agit sur le comportement de bash au niveau du
 syst�me entier. Ce que vous mettez dans ce fichier affectera toute
 personne qui utilise bash sur votre syst�me. Cela sert par exemple �
 ajouter des r�pertoires dans la variable PATH, ou � d�finir celui de
 la variable MAIL.


 Le comportement par d�faut du clavier laisse souvent � d�sirer. En
 fait, c'est readline qui contr�le cela. Readline est un package
 distinct qui prend en main les interfaces de ligne de commande, en
 fournissant l'historique des commandes, et le compl�tement automatique
 de noms de fichiers (NDT : Touche TAB sous Bash), tout comme les
 facilit�s �volu�es d'�dition de ligne. Il est compil� dans bash. Par
 d�faut, Readline est configur� � l'aide du fichier .inputrc, dans
 votre r�pertoire personnel. La variable INPUTRC peut �tre utilis�e
 pour outrepasser les r�gles de ce fichier pour le bash. Par exemple,
 dans Red Hat 6, INPUTRC re�oit la valeur /etc/inputrc dans le fichier
 /etc/profile. Cela signifie que les touches Retour Arri�re
 (Backspace), Suppr (Delete), D�but (Home) et Fin (End) fonctionnent
 correctement et pour tout le monde.


 Une fois que bash a lu le fichier de configuration g�n�ral, commun au
 syst�me entier, il recherche votre fichier de configuration personnel.
 Il teste l'existence des fichiers .bash_profile, .bash_login et
 .profile dans votre r�pertoire personnel. Il lance le premier qu'il
 trouve. Si vous voulez modifier le comportement de bash � votre �gard,
 sans le changer pour les autres, faites-le ici. Par exemple, de
 nombreuses applications utilisent les variables d'environnement pour
 contr�ler leur fonctionnement. J'ai une variable EDITOR contenant la
 valeur vi pour pouvoir utiliser vi sous Midnight Commander (un
 excellent gestionnaire de fichier orient� console) au lieu de son
 �diteur propre.



 1111..22..  EExxeerrcciicceess

 Les bases de bash sont faciles � apprendre. Mais ne vous y limitez
 pas : on peut aller incroyablement loin avec. Prenez l'habitude de
 rechercher de meilleures fa�ons de faire les choses.


 Lisez des scripts shell, analysez les choses que vous ne comprenez
 pas.


 1111..33..  PPlluuss dd''iinnffoorrmmaattiioonnss


 �  T�l�chargement du code source, voir ``t�l�chargements''

 �  Il existe un ``Manuel de R�f�rence de Bash'' avec, clair, mais
    assez lourd.

 �  Il existe un livre O'Reilly sur le Bash, je ne sais pas s'il est
    vraiment bon.


 �  Je ne connais pas de tutoriel bash gratuit et � jour. Si vous en
    connaissez un, merci de m'envoyer l'URL.



 1122..  LLeess ccoommmmaannddeess

 Vous effectuez la plupart des choses sous bash en saisissant des
 commandes comme cp. La majorit� de ces commandes sont des petits
 programmes, bien que quelques unes, comme cd soient int�gr�es au
 shell.


 Les commandes viennent de packages, la plupart de la Free Software
 Foundation (projet GNU). Plut�t que de dresser ici la liste des
 packages, je pr�f�re vous renvoyer vers le Linux From Scratch HOWTO
 <http://www.linuxfromscratch.org>.  Il contient une liste compl�te et
 � jour de tous les packages allant dans un syst�me Linux, aussi bien
 que des indications pour les construire.



 1133..  CCoonnssttrruuiirree uunn ssyysstt��mmee LLiinnuuxx mmiinniimmuumm �� ppaarrttiirr ddeess ssoouurrcceess..

 Nous nous sommes concentr�s jusqu'ici sur ce que les packages font. Je
 vais vous donner ici tout les indices que je peux pour fabriquer un
 syst�me Linux de base � partir des sources. Si vous voulez monter un
 vrai syst�me pour du vrai travail, lisez le Linux From Scratch HOWTO
 <http://www.linuxfromscratch.org>.


 Il est possible d'obtenir une ligne de commande bash sans installer
 tout ce que je mentionne ici. Ce que je d�cris est un syst�me de base,
 sans emb�che, qui peut �tre mont� facilement.



 1133..11..  CCee qquu''iill vvoouuss ffaauutt

 Nous installerons une distribution de Linux comme Red Hat sur une
 partition, et l'utiliserons pour construire un nouveau syst�me Linux
 sur une autre partition. Je nommerai par la suite ``cible'' le syst�me
 que nous construisons, et ``source'' le syst�me que nous utilisons
 pour construire le syst�me cible (� ne pas confondre avec _c_o_d_e _s_o_u_r_c_e
 que nous utiliserons aussi).


 Vous allez donc avoir besoin d'une machine avec deux partitions libres
 dessus. Si vous le pouvez, utilisez une machine qui ne contienne rien
 d'important. Vous pouvez utiliser un syst�me Linux d�j� existant comme
 syst�me source, mais je le d�conseille. Si vous oubliez un des
 param�tres des commandes que nous allons saisir, vous pourriez
 accidentellement r�installer des choses sur votre syst�me source. Cela
 peut mener � des incompatibilit�s, et des conflits.


 Les anciennes architectures PC, pour la plupart 486 et plus ancien,
 ont une limitation ennuyeuse de leur Bios. Il ne peuvent lire les
 disques durs pass� les 512 premiers m�gaoctets. Ce n'est pas vraiment
 un probl�me pour Linux, qui g�re lui-m�me les disques une fois lanc�.
 Mais pour que Linux soit charg� sur ces vieilles machines, le noyau
 doit r�sider quelque part en dessous de 512 m�gaoctets. Si vous
 utilisez une de ces machines, vous devez cr�er une partition distincte
 en dessous de 512 Mo, � monter sur /boot pour toute partition au
 dessus de la limite des 512 Mo.

 La derni�re fois que je l'ai fait, j'ai utilis� Red Hat 6.1 comme
 syst�me source. J'ai install� le syst�me de base plus


 �  cpp

 �  egcs

 �  egcs-c++

 �  patch

 �  make

 �  dev86

 �  ncurses-devel

 �  glibc-devel

 �  kernel-headers


 J'ai aussi install� X-window et Mozilla (NDT : Netscape) pour pouvoir
 lire les documentations facilement, mais ce n'est pas n�cessaire. A la
 fin de mon travail, cela avait pris environ 350M d'espace disque (Cela
 semble un peu �lev�, je me demande pourquoi).


 Le syst�me cible achev� prenait 650M, mais comprenait tout le code
 source et les fichiers interm�diaires. Si l'espace est limit�, je vous
 conseille de faire un make clean apr�s la construction de chaque
 package. Cela dit, c'est une source d'ennuis et d'h�sitation.


 Enfin, vous allez avoir besoin du code source du syst�me que vous
 allez construire. Il y a les ``packages'' dont nous avons parl� dans
 ce document.  On peut les obtenir depuis un CD, ou par l'Internet. Je
 donnerai les URL pour les sites am�ricains et miroirs australiens.




 �  MAKEDEV USA <ftp://tsx-11.mit.edu/pub/linux/sources/sbin> Autre
    site aux USA <ftp://sunsite.unc.edu/pub/Linux/system/admin>

 �  Lilo USA <ftp://lrcftp.epfl.ch/pub/linux/local/lilo/>, Australie
    <ftp://mirror.aarnet.edu.au/pub/linux/metalab/system/boot/lilo/>.

 �  Noyau Linux Utilisez un des miroirs list�s sur home page
    <http://www.kernel.org> plut�t que USA
    <ftp://ftp.kernel.org/pub/linux/kernel> car ils sont toujours en
    surcharge.  Australie
    <ftp://kernel.mirror.aarnet.edu.au/pub/linux/kernel/>

 �  GNU libc La biblioth�que elle-m�me, ainsi que les add-on
    linuxthreads sont sur USA <ftp://ftp.gnu.org/pub/gnu/glibc>
    Australie <ftp://mirror.aarnet.edu.au/pub/gnu/glibc>

 �  Add-ons � la libc GNU Vous aurez aussi besoin des linuxthreads et
    des add-on libcrypt.  Si libcrypt est absente � cause des lois
    am�ricaines sur l'exportation, vous pouvez la r�cup�rer sur
    libcrypt <ftp://ftp.gwdg.de/pub/linux/glibc> les add-ons
    linuxthreads sont au m�me endroit que libc proprement dite.


 �  GNU ncurses USA <ftp://ftp.gnu.org/gnu/ncurses> Australie
    <ftp://mirror.aarnet.edu.au/pub/gnu/ncurses>

 �  SysVinit USA <ftp://sunsite.unc.edu/pub/Linux/system/daemons/init>
    Australie
    <ftp://mirror.aarnet.edu.au/pub/linux/metalab/system/daemons/init>

 �  GNU Bash USA <ftp://ftp.gnu.org/gnu/bash> Australie
    <ftp://mirror.aarnet.edu.au/pub/gnu/bash>

 �  GNU sh-utils USA <ftp://ftp.gnu.org/gnu/sh-utils> Australie
    <ftp://mirror.aarnet.edu.au/pub/gnu/sh-utils>

 �  util-linux Ailleurs <ftp://ftp.win.tue.nl/pub/linux/utils/util-
    linux/> Australie
    <ftp://mirror.aarnet.edu.au/pub/linux/metalab/system/misc> Ce
    package contient agetty et login.


 Pour r�sumer, il vous faut :

 �  Une machine avec deux partitions distinctes d'environ 400M et 700M
    respectivement, bien que vous puissiez s�rement vous en tirer avec
    un espace plus restreint.

 �  Une distribution de Linux (un CD de Red Hat par exemple), et de
    quoi l'installer (un lecteur de CD par exemple).

 �  Les archives (tarballs : fichier contenant plusieurs autres
    fichiers concat�n�s en un seul, puis compress� ou non ensuite) du
    code source, list�es ci-dessus.


 Je pars du principe que vous pouvez installer le syst�me source vous-
 m�me, sans aide de ma part. A partir de maintenant, je consid�re que
 c'est fait.


 Les premiers pas de ce projet consistent � faire d�marrer le noyau, et
 le laisser `paniquer' (panic) car il ne peut trouver le programme
 init.  Cela signifie que nous allons devoir installer un noyau, et
 installer Lilo.  Pour que Lilo fonctionne quand m�me correctement,
 nous avons besoin d'installer les fichiers sp�ciaux dans le /dev du
 syst�me cible.  Lilo en a besoin pour effectuer les acc�s bas niveau
 au disque, n�cessaire pour �crire le secteur d'amorce. MAKEDEV est le
 script qui cr�e ces fichiers sp�ciaux (Vous pourriez bien s�r les
 recopier depuis le syst�me source, mais ce serait tricher !). Mais
 d'abord, il nous faut un syst�me de fichiers pour les mettre dedans.



 1133..22..  LLee ssyysstt��mmee ddee ffiicchhiieerr ((FFiilleessyysstteemm))

 Notre nouveau syst�me a besoin d'un syst�me de fichiers pour vivre.
 Donc, il nous faut tout d'abord cr�er ce syst�me de fichiers en
 utilisant mke2fs. Ensuite il faut le monter quelque part. Je vous
 sugg�re /mnt/target (comme `cible'). Dans ce qui va suivre, je
 consid�re que votre syst�me se trouve � cet endroit. Vous pouvez
 gagner un peu de temps en ajoutant une entr�e dans /etc/fstab de fa�on
 � ce que le montage de votre syst�me destination soit automatique
 lorsque votre syst�me source d�marre.


 Lorsque nous d�marrerons le syst�me cible, ce qui se trouve dans
 /mnt/target se trouvera alors dans / (� la racine).

 Nous avons besoin d'une structure de sous-r�pertoires sur la cible.
 Jetez un oeil au Standard de la Hi�rarchie des Fichiers (File
 Hierarchy Standard, voir section ``Syst�me de Fichiers'').  pour
 trouver vous m�me ce qu'elle devrait �tre, ou faites simplement un cd
 vers l'endroit o� la cible est mont�e et tapez aveugl�ment :



         mkdir bin boot dev etc home lib mnt root sbin tmp usr var
         cd var; mkdir lock log run spool
         cd ../usr; mkdir bin include lib local sbin share src
         cd share/; mkdir man; cd man
         mkdir man1 man2 man3 ... man9



 Comme le FHS et la plupart des packages se contredisent en ce qui
 concerne l'endroit o� les man pages doivent se trouver, nous avons
 besoin d'un lien symbolique :



         cd ..; ln -s share/man man




 1133..33..  MMAAKKEEDDEEVV

 Nous mettrons le code source dans le r�pertoire /usr/src cible.  Aussi
 si votre syst�me de fichiers cible est mont� par exemple sur
 /mnt/target, et que vos archives sont dans /root, il faudra faire :



         cd /mnt/target/usr/src
         tar -xzvf /root/MAKEDEV-2.5.tar.gz




 Ne vous comportez pas en amateur fini et pensez � copier vos archives
 � l'endroit o� vous allez les d�compresser ;-)


 En principe, lorsque vous installez un logiciel, vous l'installez sur
 le syst�me en fonctionnement. En l'occurence, ce n'est pas notre
 intention, nous souhaitons l'installer comme si /mnt/target �tait le
 syst�me de fichiers racine.  Les diff�rents packages ont diff�rentes
 mani�res de vous le laisser faire.  Pour MAKEDEV, vous devez faire


         ROOT=/mnt/target
         make install




 Vous devez rechercher ces options dans les fichiers README et INSTALL
 ou faire un ./configure --help.


 Explorez le Makefile de MAKEDEV pour voir l'usage qu'il fait de la
 variable ROOT, que nous avons d�finie dans cette commande. Ensuite
 jetez un oeil � la page de manuel en faisant un man ./MAKEDEV.man pour
 voir comment il fonctionne. Vous d�couvrirez que la m�thode utilis�e
 pour ces fichiers sp�ciaux consiste � faire un cd /mnt/target/dev puis
 un ./MAKEDEV generic. Faites un ls pour d�couvrir tous les merveilleux
 fichiers sp�ciaux qu'il a cr��s pour vous !


 1133..44..  LLee nnooyyaauu ((kkeerrnneell))

 Ensuite, nous devons fabriquer un noyau. Je consid�re que vous l'avez
 d�j� fait, aussi serai-je bref. Il est plus facile d'installer Lilo si
 le noyau cens� �tre mont� est d�j� l�. Retournez dans le r�pertoire
 /usr/src de la cible, et d�compressez-y les sources du noyau linux.
 Entrez dans l'arborescence des sources (cd linux) et configurez le
 noyau, en utilisant votre m�thode pr�f�r�e, comme par exemple make
 menuconfig.  Vous vous faciliterez grandement la vie si vous
 configurez un noyau sans module. Si vous configurez des modules, vous
 devrez �diter Makefile, trouver INSTALL_MOD_PATH, et lui affecter la
 valeur /mnt/target.


 Vous pouvez maintenant taper make dep, make bzImage, et si vous avez
 configur� des modules : make modules, make modules_install. Copiez le
 noyau arch/i386/boot/bzImage et le plan syst�me System.map vers le
 r�pertoire de boot de la cible /mnt/target/boot, et nous seront pr�ts
 � installer Lilo.


 1133..55..  LLiilloo

 Lilo est livr� avec un tr�s beau script nomm� QuickInst.  D�compressez
 les sources de Lilo dans le r�pertoire des sources du syst�me cible,
 lancez ce script par la commande ROOT=/mnt/target ./QuickInst. Il vous
 posera plusieurs questions concernant la mani�re dont vous souhaitez
 que Lilo soit install�.


 Souvenez-vous, comme nous avons affect� � la variable ROOT la
 partition cible, vos noms de fichiers s'y rapportent. Donc, lorsqu'il
 vous demandera le nom du noyau � lancer par d�faut, r�pondez
 /boot/bzImage, _p_a_s /mnt/target/boot/bzImage.  J'ai trouv� un bug
 mineur dans le script, qui lui fait dire :



         ./QuickInst: /boot/bzImage: no such file



 Mais si vous vous contentez de l'ignorer, cela passe quand m�me.


 Comment doit-on s'y prendre pour expliquer � QuickInst o� installer le
 secteur de boot ? Quand nous red�marrons, nous voulons avoir le choix
 de d�marrer le syst�me source ou le syst�me cible, ou encore n'importe
 quel autre syst�me pr�sent sur la machine. Et nous souhaitons que
 l'instance de Lilo que nous mettons en place maintenant lance le noyau
 de notre nouveau syst�me. Comment est-ce que l'on r�alise ces deux
 choses ? Ecartons-nous un moment du sujet et �tudions la fa�on dont
 Lilo d�marre DOS sur un syst�me Linux en dual-boot. Le fichier
 lilo.conf d'un tel syst�me doit s�rement ressembler � ��.







 prompt
 timeout = 50
 default = linux

 image = /boot/bzImage
         label  = linux
         root   = /dev/hda1
         read-only

 other = /dev/hda2
         label = dos





 Si la machine est configur�e de cette fa�on, alors le Master Boot
 Record (MBR) est lu et charg� par le Bios, et lance le bootloader de
 Lilo, qui affiche une invite de commande. Si vous tapez dos dans cette
 invite, Lilo chargera le secteur de boot depuis hda2, qui lancera DOS.


 Ce que nous allons faire est exactement la m�me chose, mis � part que
 le secteur d'amorce d'hda2 va �tre un autre secteur d'amorce Lilo -
 celui-l� m�me que QuickInst va installer. Donc le Lilo de la
 distribution de linux chargera le Lilo que nous avons construit, qui
 chargera le noyau que nous avons b�ti.  Vous verrez alors deux invites
 de commande Lilo au red�marrage.


 Pour raccourcir une longue histoire, lorsque QuickInst vous demande o�
 placer le secteur de boot, indiquez-lui l'endroit o� se trouve votre
 syst�me de fichiers cible, par exemple /dev/hda2.


 Maintenant modifiez le fichier lilo.conf de votre syst�me source, de
 fa�on � ce qu'il ait une ligne ressemblant �:



 other = /dev/hda2
         label = target



 Lancez Lilo, et nous devrions �tre capables de faire notre premier
 d�marrage sur le syst�me cible.


 1133..66..  GGlliibbcc

 L'�tape suivante consiste � installer init, mais comme la plupart des
 programmes qui tournent sous Linux, init utilise des fonctions issues
 de la biblioth�que C GNU, glibc. Aussi l'installerons-nous en premier.


 Glibc est un package tr�s gros et tr�s compliqu�. Il faut 90 heures
 pour le b�tir sur mon vieux 386sx/16 avec 8M RAM. Mais cela ne prend
 que 33 minutes sur mon Celeron 433 avec 64M. Je pense que la quantit�
 de m�moire est le principal crit�re dans notre cas. Si vous n'avez que
 8Mo de RAM (ou - j'en tremble - encore moins !), pr�parez vous � une
 tr�s longue compilation.


 La documentation d'installation de glibc recommande une construction
 dans un r�pertoire distinct. Cela vous permet de recommencer
 facilement, en supprimant simplement ce r�pertoire. Cela vous permet
 aussi d'�conomiser 265Mo d'espace disque.


 D�compressez l'archive glibc-2.1.3.tar.gz (ou n'importe quelle autre
 version) dans /mnt/target/usr/src comme d'habitude. A pr�sent, nous
 devons d�compresser les ``add-on'' dans le r�pertoire de la glibc.
 Donc, faites un cd glibc-2.1.3, puis d�compressez � cet endroit les
 archives glibc-crypt-2.1.3.tar.gz et glibc-linuxthreads-2.1.3.tar.gz.


 Maintenant, nous pouvons cr�er le r�pertoire de construction,
 configurer, b�tir et installer glibc. Voici les commandes que j'ai
 utilis�es, mais relisez vous-m�me la documentation et assurez-vous de
 faire ce qui est le plus appropri� dans votre environnement.
 Toutefois, avant de faire tout cela, vous voudrez sans doute conna�tre
 l'espace disque qu'il vous reste par un df. Vous pouvez en faire un
 autre apr�s avoir b�ti et install� glibc pour en d�duire son volume.



         cd ..
         mkdir glibc-build
         ../glibc-2.1.3/configure --enable-add-ons --prefix=/usr
         make
         make install_root=/mnt/target install




 Remarquez que nous avons ici encore une autre fa�on de dire au package
 l'endroit o� s'installer.


 1133..77..  SSyyssVViinniitt

 B�tir et installer les binaires de SysVinit est assez direct.  Je me
 contenterai d'�tre paresseux et de vous donner les commandes, en
 consid�rant que vous avez d�compress� son code source, et que vous
 �tes entr� dans son r�pertoire.



  cd src
  make
  ROOT=/mnt/target make install




 Il existe aussi beaucoup de scripts associ�s � init. Il y a des
 scripts d'exemple fournis dans le package de SysVinit, qui
 fonctionnent bien. Mais vous devez les installer manuellement. Ils
 sont organis�s dans une hi�rarchie sous debian/etc dans l'arborescence
 du code source de SysVinit. Vous pouvez recopier toute cette
 hi�rarchie dans le r�pertoire etc du syst�me cible, avec une commande
 du style cd ../debian/etc; cp -r * /mnt/target/etc.  Evidement, vous
 explorerez ces scripts avant de tous les recopier.


 Tout est d�sormais en place pour permettre au noyau cible de lancer
 init au red�marrage. Le probl�me, cette fois, viendra des scripts qui
 ne pourront �tre ex�cut�s car bash ne sera pas l� pour les
 interpr�ter. init tentera �galement de lancer des getty, qui sont
 inexistants eux aussi. Rebootez maintenant, et assurez-vous que tout
 le reste fonctionne correctement.
 1133..88..  NNccuurrsseess

 L'�tape suivante consiste � mettre Bash en place, mais bash a besoin
 de ncurses, aussi devons-nous installer celui-ci en premier. Ncurses
 remplace termcap dans la mani�re de g�rer les �crans texte, mais
 apporte �galement une compatibilit� ascendante en prenant en charge
 les appels termcap. Dans l'objectif d'avoir un syst�me moderne, simple
 et propre, je pense que le mieux est de d�sactiver l'ancienne m�thode
 termcap. Vous pourriez par la suite rencontrer des probl�mes avec des
 applications utilisant termcap, mais au moins vous conna�trez les
 �l�ments qui l'utilisent. Si vous en avez besoin, vous pouvez
 recompiler ncurses avec prise en charge de termcap.


 Les commandes que j'ai utilis�es sont :



         ./configure --prefix=/usr --with-install-prefix=/mnt/target --with-shared --disable-termcap
         make
         make install




 1133..99..  BBaasshh

 Il m'a fallu beaucoup de lecture, de r�flexion, de tests, et d'erreurs
 pour que Bash s'installe l� o� je pensais qu'il devait aller. Les
 options de configuration que j'ai utilis�es sont :



  ./configure --prefix=/mnt/target/usr/local --exec-prefix=/mnt/target --with-curses




 Une fois que vous avez b�ti et install� Bash, vous devez cr�er un lien
 symbolique comme ceci : cd /mnt/target/bin; ln -s bash sh.  Cela est
 d� au fait que les scripts d�butent g�n�ralement par une ligne comme
 celle-ci :



 #!/bin/sh




 Si vous n'avez ce lien symbolique, les scripts ne fonctionneront pas,
 car ils chercheront /bin/sh et non /bin/bash.


 Vous pouvez red�marrer � ce point si vous le souhaitez. Vous devriez
 remarquer que les scripts peuvent maintenant s'ex�cuter, bien que vous
 ne puissiez vous loguer, car il n'y pas encore de programmes getty ou
 login.


 1133..1100..  UUttiill--lliinnuuxx ((ggeettttyy eett llooggiinn))

 Le package util-linux contient agetty et login. Nous avons besoin des
 deux pour nous loguer et obtenir la ligne de commande de bash.  Apr�s
 l'avoir install�, faites un lien symbolique depuis agetty vers getty
 de le r�pertoire /sbin du syst�me cible.  getty est un des programmes
 cens�s se trouver sur tous les syst�mes de type Unix, donc faire un
 lien est une meilleure id�e que de modifier inittab pour qu'il lance
 agetty.


 Il me reste un probl�me avec la compilation d'util-linux. Le package
 contient �galement le programme more, et je n'ai pas �t� capable de
 persuader le processus make de placer le lien more sur la biblioth�que
 de ncurses 5 du syst�me cible, plut�t que sur ncurses 4 du syst�me
 source. Je regarderai cela de plus pr�s.


 Vous aurez aussi besoin d'un fichier /etc/passwd sur le syst�me cible.
 C'est l'endroit o� le programme login ira v�rifier votre
 accr�ditation. Comme il ne s'agit que d'un syst�me gadget � ce niveau,
 vous pouvez vous permettre des choses scandaleuses, comme ne d�finir
 que l'utilisateur root, sans mot de passe ! Mettez le simplement dans
 le fichier /etc/passwd du syst�me cible.




 root::0:0:root:/root:/bin/bash




 Les champs sont s�par�s par des deux-points, correspondent, de gauche
 � droite, � l'user id (nom de login), au mot de passe (crypt�), au
 num�ro d'utilisateur, au num�ro de groupe, au nom de l'utlisateur, �
 son r�pertoire personnel, et � son shell par d�faut.


 1133..1111..  SShh--uuttiillss

 Le dernier package dont nous ayons besoin est sh-utils GNU.  Le seul
 programme n�cessaire � ce niveau est stty, qui est utilis� dans
 /etc/init.d/rc, lui-m�me utilis� pour changer de niveau d'ex�cution et
 entrer dans le niveau initial. En fait, je poss�de et ai utilis� un
 package qui ne contient que stty mais je ne peux me souvenir d'o� il
 vient. Il vaut mieux utiliser le package GNU, car il contient d'autres
 choses dont vous aurez besoin si vous voulez les ajouter au syst�me
 pour le rendre vraiment utilisable.


 Eh bien �a y est. Vous devriez maintenant avoir un syst�me qui doit
 d�marrer et vous donner l'invite de login. Saisissez-y ``root'', et
 vous devriez avoir le shell. Vous ne pourrez pas faire grand chose
 avec, il n'y a m�me pas de commande ls pour voir votre travail. Tapez
 deux fois la touche tab pour voir les commandes disponibles. C'est la
 chose la plus int�ressante que j'ai trouv�e � faire avec.


 1133..1122..  VVeerrss ll''uuttiilliissaabbiilliitt��

 Il semblerait que nous ayons l� un syst�me plut�t inutilisable. Mais
 en r�alit�, nous ne sommes pas tr�s loin de pouvoir commencer �
 travailler avec. L'une des premi�res choses � faire est de rendre le
 syst�me de fichiers racine accessible et lecture et �criture. Il y a
 un script issu du package, dans /etc/init.d/mountall.sh qui s'occupe
 de cela, et effectue un mount -a pour monter automatiquement tout ce
 qui est sp�cifi� dans le fichier /etc/fstab. Mettez un lien symbolique
 du genre S05mountall vers lui dans le r�pertoire etc/rc2.d du syst�me
 cible.


 Il se peut que ce script utilise des commandes que vous n'avez pas
 encore install�es. Si c'est le cas, trouvez le package qui contient
 ces commandes et installez-le. Voyez la section ``Random Tips'' pour
 avoir des indications sur la marche � suivre pour trouver ces
 packages.


 Regardez les autres scripts dans /etc/init.d. La plupart d'entre-eux
 doit �tre incluse dans tout syst�me s�rieux. Ajoutez-les un � un, et
 assurez-vous que tout se lance en douceur avant d'en ajouter d'autres.


 Lisez le Standard de la Hi�rarchie des Fichiers (voir section
 ``Syst�me de Fichiers'').  Il contient une liste de commandes qui
 devraient �tre dans /bin et /sbin. Assurez-vous que toutes ces
 commandes sont install�es sur votre syst�me.  Mieux encore, trouvez la
 documentation Posix qui sp�cifie tout cela.


 A partir de maintenant, il n'est plus question que d'ajouter de plus
 en plus de packages, jusqu'� ce que tout ce que vous souhaitez avoir
 se trouve sur votre syst�me. Installez les outils de construction
 comme make et gcc le plus t�t possible. Une fois que cela est fait,
 vous pouvez utiliser votre syst�me cible pour se construire lui-m�me,
 ce qui est bien moins compliqu�.


 1133..1133..  AAssttuucceess ddiivveerrsseess

 Si vous avez une commande appel�e thingy sur un syst�me Linux avec
 RPM, et souhaitez avoir des indications sur l'endroit o� trouver les
 sources, vous pouvez utiliser la commande :


         rpm -qif `which thingy`



 Et si vous avez un CD de sources Red Hat, vous pouvez installer le
 code source avec


         rpm -i /mnt/cdrom/SRPMS/ce.qu.il.vient.de.dire-1.2.srpm




 Ceci mettra l'archive, avec les patches Redhats �ventuels dans
 /usr/src/redhat/SOURCES.


 1133..1144..  PPlluuss dd''iinnffoorrmmaattiioonnss


 �  Il existe un mini-howto sur la mani�re de construire les logiciels
    � partir de leurs sources, le Software Building mini-HOWTO
    <http://www.linuxdoc.org/HOWTO/Software-Building-HOWTO.html>
    (miroir fran�ais en VO <http://linuxfr.org/LDP/HOWTO/Software-
    Building-HOWTO.html >).



 �  Il existe aussi un HOWTO sur la mani�re de construire un syst�me
    Linux depuis z�ro. Il met l'accent sur la construction d'un syst�me
    r�ellement utilisable, plut�t que pour le simple exercice.  The
    Linux From Scratch HOWTO <http://www.linuxfromscratch.org>
 1144..  CCoonncclluussiioonn

 L'un des meilleurs c�t�s de Linux, � mon humble avis, est que vous
 pouvez entrer dedans et voir r�ellement comment il fonctionne.
 J'esp�re que vous appr�cierez cela autant que moi. Et j'esp�re que ces
 quelques notes vous y auront aid�.


 1155..  SSeeccttiioonn aaddmmiinniissttrraattiivvee

 1155..11..  CCooppyyrriigghhtt

 Ce document est copyright (c) 1999, 2000 Greg O'Keefe. Vous �tes libre
 de l'utiliser, le copier, le distribuer ou le modifier, sans
 obligation, selon les termes de la Licence Publique G�n�rale (GPL :
 GNU General Public Licence <http://www.gnu.org/copyleft/gpl.html>).
 Merci de conserver les r�f�rences � l'auteur si vous utilisez tout ou
 partie de ce document dans un autre.


 1155..22..  PPaaggee pprriinncciippaallee

 Les mises � jour de ce document �voluent sur From Powerup To Bash
 Prompt <http://learning.taslug.org.au/power2bash>.




 1155..33..  RReettoouurrss

 J'aimerais recevoir vos commentaires, critiques et suggestions.
 Veuillez s'il vous pla�t me les envoyer � Greg O'Keefe
 <mailto:[email protected]>



 1155..44..  RR��ff��rreenncceess eett rreemmeerrcciieemmeennttss..

 Les noms de produits cit�s sont marques d�pos�es de leur propri�taires
 respectifs, et consid�r�s par cette note comme reconnus comme tels.


 Il y a quelques personnes que je voudrais remercier, pour m'avoir aid�
 � r�aliser tout ceci.



    TToouutt lleess aabboonnnn��ss ddee llaa lliissttee ddee ddiissccuussssiioonn lleeaarrnniinngg@@TTaassLLUUGG
       Merci pour avoir lu tous mes mails et pos� des questions
       int�ressantes.  Vous pouvez rejoindre cette liste en envoyant un
       message � majordomo <mailto:[email protected]> avec la
       phrase

               subscribe learning


    dans le corps du message.



    MMiicchhaaeell EEmmeerryy
       Pour m'avoir rappel� Unios.

    TTiimm LLiittttllee
       Pour de bonnes indications concernant /etc/passwd

    ssPPaaKKrr ddaannss ##lliinnuuxx ssuurr eeffnneett
       Qui a soup�onn� l'utilisation de /etc/services par syslog, et
       m'a fait conna�tre la phrase ``rolling your own'' ("roulez-la
       vous-m�me") pour  d�crire la construction d'un syst�me � partir
       des sources.

    AAlleexx AAiittkkiinn
       Pour avoir port� Vico et son ``verum ipsum factum'' (La
       compr�hension d�coule de l'exp�rience) � mon attention.

    DDeennnniiss SSccootttt
       Pour avoir corrig� mon arithm�tique en hexad�cimal.

    jjdddd
       Pour avoir mis en �vidence quelques erreurs typographiques.

    DDaavviidd LLeeaaddbbeeaatteerr
       Pour avoir contribu� aux ``p�r�grinations'' dans les d�mons
       noyau.


 1155..55..  HHiissttoorriiqquuee ddeess cchhaannggeemmeennttss

 1155..55..11..  00..66 -->> 00..77


 �  L'accent est plus port� sur l'explication, et moins sur la fa�on de
    monter un syst�me, ces informations ayant �t� regroup�es dans une
    section distincte, et le syst�me une fois construit a �t� revu � la
    baisse, voir directement la documentation de Gerard Beekmans
    ``Linux From Scratch'' pour construire un syst�me s�rieux.

 �  Ajout de quelques hypoth�ses de la part de David Leadbeater

 �  Correction de deux URL, ajout d'un lien vers le t�l�chargement
    d'unios sur learning.taslug.org.au/resources

 �  Test et correction d'url.

 �  Grand nettoyage et r��criture g�n�rale.


 1155..55..22..  00..55 -->> 00..66


 �  Ajout de l'historique des changements

 �  Ajout de quelques ``todos'' (``A faire'').


 1155..66..  AA ffaaiirree ((TTOODDOO))


 �  expliquer les modules noyau, depmod, modprobe, insmod et tout (il
    faut d'abord que je trouve moi-m�me).

 �  mentionner le syst�me de fichiers /proc. Exercices potentiels.

 �  convertir en documentation sgml

 �  ajouter plus d'exercices, peut-�tre une section enti�re d'exercices
    plus pouss�s, comme cr�er un syst�me de fichiers minimal fichier
    par fichier � partir de l'installation d'une distribution.