Nous installerons une distribution de Linux telle que 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 code source que nous utiliserons aussi).
Vous allez donc avoir besoin d'une machine avec deux partitions libres. 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 BIOS des PC dont l'architecture est ancienne, pour la plupart des 486 et des machines antérieures, ont une limitation ennuyeuse. Ils ne peuvent lire les disques durs au-delà des 512 premiers méga-octets. 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éga-octets. Si vous utilisez une de ces machines, vous devrez créer une partition distincte en-dessous de 512 Mo, à monter sur /boot pour chaque système dont la partition racine se situe 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 pour pouvoir lire la documentation facilement, mais ce n'est pas vraiment nécessaire. À la fin de mon travail, celui-ci avait pris environ 350 Mo d'espace disque (cela semble un peu élevé, je me demande pourquoi).
Le système cible achevé prenait 650 Mo, 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 paquet. Cela dit, cette taille surprenante est un peu inquiétante.
Enfin, vous allez avoir besoin du code source du système que vous allez construire. Ce sont les paquets dont nous avons parlé dans le guide pratique « De la mise sous tension à l'invite de commande de Bash ». On peut les obtenir depuis un CD, ou par l'Internet. Je donnerai les url de leurs sites américains et des miroirs français.
MAKEDEV : ftp://sunsite.unc.edu/pub/Linux/system/admin/ (USA), ftp://ftp.lip6.fr/pub/linux/sunsite/system/admin/ (France).
Lilo : ftp://lrcftp.epfl.ch/pub/linux/local/lilo/ (Suisse), ftp://ftp.lip6.fr/pub/linux/sunsite/system/boot/lilo/ (France).
Noyau Linux : utilisez un des miroirs listés sur http://www.kernel.org plutôt que ftp://ftp.kernel.org/pub/linux/kernel/ (USA) car ils sont toujours en surcharge ; ftp://ftp.fr.kernel.org/pub/linux/kernel/ (France).
GNU libc : la bibliothèque elle-même, ainsi que les extensions linuxthreads sont sur ftp://ftp.gnu.org/pub/gnu/glibc/ (USA), ftp://ftp.lip6.fr/pub/gnu/glibc/ (France).
Extensions de la libc GNU : vous aurez aussi besoin des linuxthreads et des extensions libcrypt. Si libcrypt est absente du fait des lois américaines sur l'exportation, vous pouvez la récupérer sur ftp://ftp.gwdg.de/pub/gnu/glibc les extensions linuxthreads sont au même endroit que la libc proprement dite.
GNU ncurses : ftp://ftp.gnu.org/gnu/ncurses (USA), ftp://ftp.lip6.fr/pub/gnu/ncurses (France).
SysVinit : ftp://sunsite.unc.edu/pub/Linux/system/daemons/init/ (USA), ftp://ftp.lip6.fr/pub/linux/sunsite/system/daemons/init/ (France).
GNU Bash : ftp://ftp.gnu.org/gnu/bash/ (USA), ftp://ftp.lip6.fr/pub/gnu/bash/ (France).
GNU sh-utils : ftp://ftp.gnu.org/gnu/sh-utils/ (USA), ftp://ftp.lip6.fr/pub/gnu/sh-utils/ (France).
util-linux : ftp://ftp.win.tue.nl/pub/linux/utils/util-linux/ (Pays-Bas), ftp://ftp.lip6.fr/pub/linux/sunsite/system/misc/ (France). Ce paquet contient agetty et login.
Pour résumer, il vous faut :
Une machine avec deux partitions distinctes d'environ 400 Mo et 700 Mo respectivement, bien que vous puissiez sûrement vous en tirer avec un espace plus restreint.
Une distribution de Linux (par exemple, un CD Red Hat), et de quoi l'installer (par exemple, un lecteur de CD).
Les archives tar de code source listées ci-dessus. (Le format tar permet de regrouper plusieurs fichiers en un seul. Un fichier tar peut être compressé.)
Je pars du principe que vous pouvez installer le système source vous-même, sans aide de ma part. À 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 trouve pas le programme init. Cela signifie que nous allons devoir installer un noyau, et installer Lilo. Pour que Lilo s'installe facilement, nous aurons besoin des fichiers spéciaux du répertoire /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'amorçage. 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 dans lequel les mettre.