Skip to content

Projet de construction manuel d'une distribution Linux

Notifications You must be signed in to change notification settings

FXC-ai/ft_linux

Repository files navigation

ft_linux

ChatGPT%20Image%2014%20janv.%202026%2C%2022_37_14.png

Avant propos

Bienvenue dans ce mini-tutoriel, Ă©crit pour vous aider — du moins je l’espĂšre — Ă  aller au bout du projet ft_linux de l’école 42. Avant de commencer, voici quelques remarques importantes.

  1. Ne prenez pas tout au pied de la lettre. MalgrĂ© le soin apportĂ© Ă  la rĂ©daction, ce document peut contenir des erreurs ou des imprĂ©cisions. Si vous repĂ©rez un problĂšme, n’hĂ©sitez pas Ă  ouvrir une issue (ou Ă  proposer une correction).

  2. Vous ne trouverez pas de solution "clé en main" ici. Le but de ce readme est simplement de vous aider sur les points importants du projets pour éviter certaines erreurs et faciliter votre progression.

  3. Ce tutoriel s’appuie sur la version française du livre Linux From Scratch 12.4-systemd.

  4. En pratique, le cƓur du projet consiste Ă  suivre Linux From Scratch (LFS) pas Ă  pas. Le sujet ft_linux demande seulement de respecter quelques contraintes supplĂ©mentaires mais le guide LFS suffit presque entiĂšrement.

    Voici les points sur lesquels il faut ĂȘtre particuliĂšrement attentif :

    1. Partitionnement : LFS Ă©voque une partition /boot mais ne l’impose pas toujours selon les choix du lecteur. Le sujet ft_linux, lui, exige au moins trois partitions, dont une /boot sĂ©parĂ©e (en plus de / et du swap).
    2. Nom d’hĂŽte (hostname) : il doit ĂȘtre votre login Ă©tudiant.
    3. Version du noyau : la chaßne renvoyée par le noyau doit inclure votre login étudiant (ex. Linux kernel X.Y.Z-<login>).
    4. Nom du binaire du noyau dans /boot : il doit suivre la forme vmlinuz-<linux_version>-<login_étudiant>
    5. Emplacement des sources du noyau : elles doivent se trouver dans /usr/src/kernel-$(version).

Sujet

Chapitre I - Introduction

Bienvenue dans ft_linux. Dans ce projet, vous devez construire une distribution Linux basique mais fonctionnelle. Ce sujet ne porte pas sur la programmation du noyau (Kernel), mais il y est Ă©troitement liĂ©. Cette distribution sera la base de tous vos projets liĂ©s au noyau, car tout votre code kernel sera exĂ©cutĂ© ici, sur votre propre distribution. Essayez d’y implĂ©menter ce que vous voulez ou ce dont vous avez besoin. C’est votre espace utilisateur — prenez-en soin !

Chapitre II - Objectifs

  • Construire un noyau Linux
  • Installer plusieurs binaires (voir la liste ci-dessous)
  • Mettre en place une hiĂ©rarchie de systĂšme de fichiers conforme aux standards
  • Connecter le systĂšme Ă  Internet

Chapitre III - Instructions générales

III.0.1 Ressources

  • La Bible
  • Comment construire un noyau Linux : il existe en ligne de nombreuses ressources dĂ©taillant, Ă©tape par Ă©tape, la configuration, la compilation et l’exĂ©cution d’un noyau Linux personnalisĂ©.
  • Autotools

III.0.2 Instructions

  • Pour ce projet, vous devez utiliser une machine virtuelle (par exemple VirtualBox ou VMWare).

  • Bien que non obligatoire, il est vivement recommandĂ© de lire certains documents de rĂ©fĂ©rence dĂšs maintenant et de garder ces standards Ă  l’esprit. Vous ne serez pas notĂ© sur votre conformitĂ© totale Ă  ces standards, mais ce sera une bonne pratique.

  • Vous devez utiliser une version du noyau ≄ 4.0 (stable ou non, du moment que c’est une version ≄ 4.0).

  • Les sources du noyau doivent se trouver dans : /usr/src/kernel-$(version)

  • Vous devez utiliser au moins trois partitions :

    • une racine (/)

    • une /boot

    • une partition d’échange (swap)

      Vous pouvez bien sûr en créer davantage si vous le souhaitez.

  • Votre distribution doit implĂ©menter un chargeur de modules du noyau, comme udev.

  • La version du noyau doit contenir votre login Ă©tudiant, par exemple : Linux kernel 4.1.2-<login_Ă©tudiant>

  • Le nom d’hĂŽte de votre distribution doit Ă©galement ĂȘtre votre login Ă©tudiant.

  • Vous ĂȘtes libre de choisir entre un systĂšme 32 bits ou 64 bits.

  • Vous devez utiliser un logiciel de gestion et configuration centralisĂ©e, comme SysV ou SystemD.

  • Votre distribution doit dĂ©marrer avec un chargeur d’amorçage, tel que LILO ou GRUB.

  • Le binaire du noyau situĂ© dans /boot doit ĂȘtre nommĂ© comme suit : vmlinuz-<linux_version>-<login_Ă©tudiant>

    Adaptez votre configuration de bootloader en conséquence.

Chapitre IV - Partie obligatoire

IV.0.1 Paquets Ă  installer

Les paquets listés ci-dessous (comme vim, bash, grub, udev) ne sont que des exemples. Vous pouvez les remplacer par tout équivalent de votre choix et utiliser les versions que vous voulez.

  • Acl

  • Attr

  • Autoconf

  • Automake

  • Bash

  • Bc

  • Binutils

  • Bison

  • Bzip2

  • Check

  • Coreutils

  • DejaGNU

  • Diffutils

  • Eudev

  • E2fsprogs

  • Expat

  • Expect

  • File

  • Findutils

  • Flex

  • Gawk

  • GCC

  • GDBM

  • Gettext

  • Glibc

  • GMP

  • Gperf

  • Grep

  • Groff

  • GRUB

  • Gzip

  • Iana-Etc

  • Inetutils

  • Intltool

  • IPRoute2

  • Kbd

  • Kmod

  • Less

  • Libcap

  • Libpipeline

  • Libtool

  • M4

  • Make

  • Man-DB

  • Man-pages

  • MPC

  • MPFR

  • Ncurses

  • Patch

  • Perl)

  • Pkg-config

  • Procps

  • Psmisc

  • Readline

  • Sed

  • Shadow

  • Sysklogd

  • Sysvinit

  • Tar

  • Tcl

  • Texinfo

  • Time Zone Data

  • Udev-lfs Tarball

  • Util-linux

  • Vim

  • XML::Parser

  • Xz Utils

  • Zlib

Pour les besoins de l’évaluation, vous devez ĂȘtre capable de tĂ©lĂ©charger du code source. Nous recommandons fortement d’installer curl, wget ou tout autre outil Ă©quivalent.

À des fins d’évaluation, vous devez Ă©galement ĂȘtre capable d’installer des paquets, alors assurez-vous d’avoir tout ce dont vous avez besoin.

Chapitre V - Partie bonus

Vous avez un systĂšme stable ? Parfait. Maintenant, amusons-nous un peu !

Installez ce que vous voulez.

N’importe quel logiciel, une interface graphique, N’IMPORTE QUOI.

Faites de ce systĂšme le vĂŽtre, avec votre touche personnelle.

Des points spĂ©ciaux seront attribuĂ©s pour l’installation d’un serveur X et de gestionnaires de fenĂȘtres / environnements de bureau, tels que GNOME, LXDE, KDE, i3, dwm, etc.

⚠ La partie bonus ne sera Ă©valuĂ©e que si la partie obligatoire est PARFAITE. « Parfaite » signifie que la partie obligatoire a Ă©tĂ© entiĂšrement rĂ©alisĂ©e et fonctionne sans aucun dysfonctionnement.

Si vous n’avez pas rempli toutes les exigences obligatoires, votre partie bonus ne sera pas Ă©valuĂ©e du tout.

Chapitre VI - Rendu et évaluation par les pairs

Soumettez votre projet dans votre dĂ©pĂŽt Git comme d’habitude. Seul le travail prĂ©sent dans votre dĂ©pĂŽt sera Ă©valuĂ© lors de la soutenance.

N’hĂ©sitez pas Ă  vĂ©rifier soigneusement les noms de vos dossiers et fichiers pour vous assurer qu’ils sont corrects.

Pour des raisons Ă©videntes, vous ne pousserez pas l’intĂ©gralitĂ© de votre machine virtuelle, mais plutĂŽt une somme de contrĂŽle (checksum) de votre image disque.

Cela peut ĂȘtre fait avec une commande comme :

shasum < disk.vdi

Gardez votre image disque quelque part pour l’évaluation par les pairs.

Notions essentielles Ă  connaĂźtre avant de commencer le projet

📖 Les sources sont en bas de ce document. La plupart des rĂ©ponses aux questions proviennent de wikipedia.

Quelle est le sĂ©quence de dĂ©marrage d’un micro-ordinateur ?

Voici la sĂ©quences des diffĂ©rentes couches qui interviennent lors de la mise sous tension d’un micro-ordinateur sur lequel est installĂ© une distribution Linux :

đŸ‘‰đŸœ MatĂ©riel → Firmware (BIOS/UEFI) → Bootloader (ex. GRUB ; LILO est aujourd’hui rare) → Noyau Linux (souvent avec un initramfs) → SystĂšme d’initialisation (init / systemd) → Espace utilisateur (services, login, shell, etc.)

Petite prĂ©cision utile : le noyau lance en gĂ©nĂ©ral un tout premier processus (PID 1) — systemd ou un autre init — qui se charge ensuite de dĂ©marrer le reste du systĂšme (services, montages, session
).

Qu’est ce qu’une partition ?

En informatique, une partition est une section d'un support de stockage (disque dur, SSD, carte-mĂ©moire...). Le partitionnement est l'opĂ©ration qui consiste Ă  diviser ce support en partitions dans lesquelles le systĂšme d'exploitation peut gĂ©rer les informations de maniĂšre sĂ©parĂ©e, gĂ©nĂ©ralement en y crĂ©ant un systĂšme de fichiers, une maniĂšre d’organiser l’espace disponible.

Chaque systĂšme d’exploitation a une maniĂšre diffĂ©rente de dĂ©signer les partitions qu’il dĂ©tecte. Les systĂšmes Unix ou Gnu/Linux, les dĂ©signent par un identifiant sous la forme sdXN, avec X une lettre reprĂ©sentant le support et N le numĂ©ro de la partition sur le support (par exemple sdb3 pour la troisiĂšme partition du disque b).

On nomme « partition d'amorçage », ou en anglais boot partition, (parfois par abus de langage « partition primaire ») celle dans laquelle le micro-code, aprÚs avoir accompli l'initialisation du matériel, va chercher les premiÚres instructions à exécuter pour continuer le processus de démarrage. En général, ce micro-code y trouve un chargeur d'amorçage qui lui permet, soit de démarrer l'unique systÚme d'exploitation présent sur l'ordinateur, soit de présenter à l'utilisateur un choix entre différents systÚmes chargeables.

Un support de stockage peut ĂȘtre partitionnĂ© pour diffĂ©rentes architectures. On trouve ainsi le partitionnement de type MBR (partitionnement Intel) longtemps employĂ© sur la majoritĂ© des ordinateurs personnels de type PC pour les supports d'une capacitĂ© infĂ©rieure ou Ă©gale Ă  2 To (le partitionnement MBR Ă©tant limitĂ© par l'adressage en 32 bits), ou GPT pour des architectures plus rĂ©centes (Macintosh, Linux, et PC depuis les annĂ©es 2010) conçues pour exploiter pleinement les supports de capacitĂ© supĂ©rieure Ă  2 To.

Que signifit “monter une partition” ?

Monter (un systĂšme de fichiers) signifie le rendre accessible en l’attachant Ă  un rĂ©pertoire, appelĂ© point de montage. ConcrĂštement, quand vous montez une partition sur un dossier, son contenu apparaĂźt Ă  cet endroit dans l’arborescence (par exemple, monter /dev/sda2 sur /mnt/lfs rend les fichiers de cette partition visibles via /mnt/lfs).

Le piÚge classique à éviter :

Si vous montez une partition sur un rĂ©pertoire qui contient dĂ©jĂ  des fichiers, ces fichiers ne sont pas supprimĂ©s, mais ils deviennent invisibles tant que la partition reste montĂ©e. Ils rĂ©apparaĂźtront aprĂšs un umount. Autrement dit : la partition “recouvre” temporairement le contenu du dossier.

Qu’est-ce qu’un systùme de fichier ?

De façon générale, un systÚme de fichiers ou systÚme de gestion de fichiers (SGF) est une façon de stocker les informations et de les organiser dans des fichiers sur ce que l'on appelle, en génie logiciel, des mémoires secondaires (pour le matériel informatique, il s'agit de mémoire de masse comme un disque dur, un disque SSD, une clé USB, etc.). Une telle gestion des fichiers permet de traiter, de conserver des quantités importantes de données ainsi que de les partager entre plusieurs programmes informatiques. Il offre à l'utilisateur une vue abstraite sur ses données et permet de les localiser à partir d'un chemin d'accÚs.

Qu’est ce que le BIOS ?

Le BIOS (Basic Input Output System) est un firmware. Il est principalement utilisĂ© sur les systĂšmes informatiques utilisant l'architecture de processeur 32 bits i686 d'Intel et 64 bits d'AMD. Il comporte un ensemble de fonctions, contenu dans la mĂ©moire morte (ROM) de la carte mĂšre de l’ordinateurs, lui permettant d'effectuer des opĂ©rations de base, lors de sa mise sous tension. Par exemple l'identification et l'initialisation des pĂ©riphĂ©riques d'alimentation et d’entrĂ©e/sortie connectĂ©s et la lecture du systĂšme d'amorçage, que ce soit un secteur d'amorçage sur la mĂ©moire de masse (disque dur, clĂ© USB, SSD). Il permet Ă©galement au systĂšme de communiquer avec les diffĂ©rents pĂ©riphĂ©riques de la carte mĂšre. Sur les cartes rĂ©centes, l'UEFI a Ă©tĂ© ajoutĂ© au BIOS pour unifier les mĂ©thodes de communication avec le noyau du systĂšme. C'est un palliatif de l'absence de spĂ©cification ouverte des pilotes de pĂ©riphĂ©riques, tels qu'ils se prĂ©sentent au sein du BIOS.

L'objectif du BIOS est de rendre transparente, Ă  tout systĂšme d'exploitation, la façon dont le fabricant a dĂ©veloppĂ© la carte mĂšre (quels composants il a choisis et la maniĂšre dont ils sont interconnectĂ©s). Ainsi, en utilisant les mĂȘmes fonctions du BIOS sur deux cartes mĂšres diffĂ©rentes, on obtiendra le mĂȘme rĂ©sultat. Les systĂšmes d'exploitation peuvent utiliser ces fonctions, au moins pendant les premiĂšres Ă©tapes du dĂ©marrage de l'ordinateur, et ensuite lors du fonctionnement normal pour un accĂšs direct au matĂ©riel.

Le BIOS comprend Ă©galement le logiciel nĂ©cessaire Ă  l'amorçage de l'ordinateur. La premiĂšre phase de l'amorçage (boot) est la mise sous tension et le cadençage de quelques pĂ©riphĂ©riques essentiels). Il vient ensuite l'auto-configuration Ă  l'allumage (POST de l’anglais Power-On Self-Test), qui compte la quantitĂ© de mĂ©moire, teste les disques et configure les composants. La sĂ©quence d'amorçage continue avec la recherche d'un systĂšme d'exploitation, dans l'ordre des pĂ©riphĂ©riques disponibles, avant de le lancer.

Le BIOS prend en charge à bas niveau les communications avec les périphériques, néanmoins le systÚme d'exploitation peut aussi s'adresser directement aux périphériques s'il le juge nécessaire. Parmi les prises en charge offertes par le BIOS, il y a celle du clavier et celle d'un mode d'affichage simplifié.

Le BIOS contient également des outils de diagnostic pour vérifier sommairement l'intégrité des composants critiques comme la mémoire, le clavier, le disque dur, les ports d'entrée/sortie, etc.

Certains paramĂštres du BIOS peuvent ĂȘtre rĂ©glĂ©s par l'utilisateur (ordre des pĂ©riphĂ©riques Ă  scruter pour dĂ©tecter une zone de boot, type et frĂ©quence du processeur, etc.). L'ensemble de ces paramĂštres est stockĂ© de maniĂšre permanente grĂące Ă  une mĂ©moire de taille rĂ©duite (quelques centaines d'octets) Ă  faible consommation (type CMOS) alimentĂ©e par une pile (gĂ©nĂ©ralement au lithium) prĂ©sente sur la carte mĂšre. Cette mĂ©moire est communĂ©ment appelĂ©e, par abus, « CMOS ».

Qu’est ce que l’UEFI ?

Le standard UEFI (Unified Extensible Firmware Interface) définit une interface entre le firmware et le systÚme d'exploitation (OS) d'un ordinateur. Cette interface succÚde sur certaines cartes mÚres au BIOS. L'UEFI offre de nombreux avantages sur le BIOS :

  • fonctionnalitĂ©s rĂ©seau en standard
  • interface graphique de bonne rĂ©solution
  • gestion intĂ©grĂ©e d'installations multiples de systĂšmes d’exploitation et affranchissement de la limite des disques Ă  2,2 To.

Le BIOS, Ă©crit en assembleur, limitait les modifications et/ou remplacements, gage de sĂ»retĂ© de fonctionnement et de sĂ©curitĂ©. L'UEFI est Ă©crit en C, ce qui rend sa maintenance plus souple et reste acceptable en raison des coĂ»ts dĂ©croissants de la mĂ©moire. L’UEFI a Ă©tĂ© dĂ©veloppĂ© pour assurer l'indĂ©pendance entre systĂšme d'exploitation et plate-forme matĂ©rielle sur laquelle il fonctionne.

Qu’est ce que GRUB ?

GNU GRUB (GRand Unified Bootloader) est un programme d'amorçage de micro-ordinateur. Il s'exécute au demarrage de l'ordinateur avant le systÚme d'exploitation proprement dit, puisque son rÎle est justement d'en organiser le chargement. Lorsque l'ordinateur héberge plusieurs systÚmes (multi-amorçage), il permet à l'utilisateur de choisir quel systÚme démarrer.

C'est un logiciel libre. Il permet l'amorçage de systÚmes GNU/Linux ou Windows (ainsi que d'autres systÚmes), la lecture de la configuration au démarrage (pas besoin de réinstaller GRUB dans le secteur d'amorçage aprÚs un changement de configuration, contrairement à LILO), une ligne de commande permettant de changer la configuration au démarrage et surtout la reconnaissance en natif de divers systÚmes de fichiers existants. Il possÚde également une sorte de langage de commande simple permettant de « rattraper » un amorçage qui se serait mal passé, à la suite du mauvais adressage d'une partition, par exemple.

Grub doit ĂȘtre capable de reconnaĂźtre tous les systĂšmes de fichiers sur lesquels il pourrait ĂȘtre amenĂ© Ă  dĂ©marrer. Il est pour cette raison beaucoup plus volumineux que LILO. Il fait partie du projet GNU.

Qu’est ce que le kernel ?

Le kernel (noyau) est un programme qui se trouve au cƓur du systĂšme d’exploitation. Il est responsable d’éviter les conflits entre les diffĂ©rent process en cours. Il permet la communication entre les processus. Il assure la communication entre les logiciels et le matĂ©riel. Le kernel possĂšde sa propre rĂ©gion au sein de la mĂ©moire vive. L’autre partie de la mĂ©moire vive est disponible pour l’utilisateur.

Il assure :

  • la communication entre les logiciels et le matĂ©riel ;
  • la gestion des divers logiciels d’une machine (lancement des programmes, ordonnancement
) ;
  • la gestion du matĂ©riel (mĂ©moire, processeur, stockage
).

Qu’est ce que systemD ?

systemd est une suite logicielle (quelques dizqines de binaires) qui fournit une gamme de composants systĂšme pour les systĂšmes d'exploitation Linux. Il a Ă©tĂ© conçu pour unifier la configuration et le comportement des services entre les distributions Linux Son composant principal est un systĂšme d’initialisation (init) utilisĂ© pour amorcer l’espace utilisateur et gĂ©rer les processus utilisateurs (dĂ©marrage, arrĂȘt, dĂ©pendance,
). Elle fournit Ă©galement des remplacements pour divers dĂ©mons et utilitaires, notamment la gestion des pĂ©riphĂ©riques, la gestion des connexions (login), la gestion des connexions rĂ©seau et la journalisation des Ă©vĂ©nements. Le “d” de “systemd” fait rĂ©fĂ©rence au fait qu’il s’agit d’un daemon.

Depuis 2015, presque toutes les distributions Linux ont adopté systemd.

Les critiques de systemd soutiennent qu’il souffre d’une inflation fonctionnelle (feature creep) et qu’il a nui Ă  l’interopĂ©rabilitĂ© entre les systĂšmes d’exploitation de type Unix (puisqu’il ne fonctionne pas sur des dĂ©rivĂ©s Unix non Linux comme BSD ou Solaris). De plus, ils estiment que l’ensemble Ă©tendu de fonctionnalitĂ©s de systemd crĂ©e une surface d’attaque plus grande. Cela a conduit au dĂ©veloppement de plusieurs distributions Linux mineures remplaçant systemd par d’autres systĂšmes d’initialisation, comme SysVinit.

Il s’exĂ©cute dans le processus ayant l’id 1. C’est un systĂšme d’initialisation appelĂ© par le kernel.

Qu’est ce que udev ?

udev est un gestionnaire intĂ©grĂ© Ă  Linux depuis la version 2.6. Sa fonction principale est de gĂ©rer les pĂ©riphĂ©riques dans le rĂ©pertoire /dev. udev s'exĂ©cute en mode utilisateur et Ă©coute le socket netlink pour communiquer avec le noyau. Contrairement au systĂšme traditionnel de gestion de pĂ©riphĂ©riques sous Linux, qui utilisait un ensemble statique de nƓuds de pĂ©riphĂ©riques, udev fournit dynamiquement des nƓuds seulement pour les pĂ©riphĂ©riques rĂ©ellement prĂ©sents sur le systĂšme.

Lors d'un dĂ©marrage normal d'un systĂšme Linux, le noyau monte automatiquement le systĂšme de fichiers devtmpfs dans le rĂ©pertoire /dev et crĂ©e des nƓuds de pĂ©riphĂ©riques sur que systĂšme de fichiers virtuel pendant le processus de dĂ©marrage ou lorsqu’un pĂ©riphĂ©rique est dĂ©tectĂ© ou qu'on tente d'y pour la premiĂšre fois (par exemple lorsque l’on branche une clĂ© USB). Le dĂ©mon udev permet de modifier le propriĂ©taire, de gĂ©rer les permissions des nƓuds de pĂ©riphĂ©riques créés par le noyau, d’en crĂ©er de nouveaux ou de crĂ©er des liens symboliques afin de faciliter la tĂąche de maintenance de distribution ou d'administration systĂšme.

Qu’est ce qu’une chaüne de compilation ?

La majoritĂ© des programmes actuels sont Ă©crits dans des langages de haut niveau (C, le Java, 
). Mais ces le processeur, ne comprend que le langage machine. Les codes sources Ă©crits dans des langages de haut niveau doivent donc ĂȘtre traduit en langage machine par la chaĂźne de compilation. À l'heure actuelle, la majoritĂ© des compilateurs ne traduit pas directement un langage de haut niveau en langage machine, mais passe par un langage intermĂ©diaire : l'assembleur. Il va de soit que cet assembleur doit ĂȘtre traduit en langage machine pour ĂȘtre exĂ©cutĂ© par le processeur. Tout ce qui se passe entre la compilation et l'exĂ©cution du programme est pris en charge par trois programmes qui forment ce qu'on appelle la chaĂźne d'assemblage :

  1. Cette chaßne d'assemblage commence par le logiciel d'assemblage qui traduit le code assembleur en code machine. Ce code machine est alors mémorisé dans un fichier objet.
  2. Ensuite, l'éditeur de liens (ou linker) combine plusieurs fichiers objets en un fichier exécutable.
  3. Enfin, le chargeur de programme (ou loader), charge les programmes en mémoire.

L'ensemble regroupant compilateur et chaßne d'assemblage, avec éventuellement des interpréteurs, est appelé la chaßne de compilation.

Notions de Bash

LC_ALL

La commande suivante permet d’avoir la sortie de command en français.

LC_ALL=fr_FR command

Rappel commande cat

La commande suivante revient trĂšs souvent dans LFS. Soyez au clair avec son fonctionnement.

cat <nom_du_fichier> << EOF
Hello World !
EOF

cat va Ă©crire dans le fichier tout le texte qu’il trouve ligne aprĂšs ligne jusqu’à rencontrer EOF.

su VS sudo

Pour suivre LFS, il est trĂšs important de faire la distinction entre l’utilisation de su et de sudo. Voici un tableau rĂ©capitulatif :

Commande But Environnement de départ
su <user> changer d’utilisateur conserve l’environnement courant
su - <user> changer d’utilisateur en shell de connexion charge l’environnement de l’utilisateur cible
sudo <commande> exĂ©cuter une commande en tant que root (ou autre) conserve l’environnement
sudo -s ouvrir un shell root conserve l’environnement courant
sudo -i ouvrir un shell root en shell de connexion charge l’environnement root

Qu’est-ce qu shell de connexion ?

Un shell de connexion simule une connexion en affectant aux variables d’environnement des valeurs diffĂ©rentes. Par exemple la variable HOME sera modifiĂ© pour contenir le chemin vers le rĂ©pertoire home/<user> qui correspond Ă  l’utilisateur “connectĂ©â€.

Qu’est ce qu’un fichier .vdi ?

Un fchier “.vdi” et une image disque conçu pour faire tourner des machines virtuelles sur virtual box. Virtual Box est en mesure de crĂ©er une machine virtuelle sur la base de ce “.vdi”. Le fichier contient le kernel, le nĂ©cessaire pour faire fonctionner la distribution et les fichiers créé par l’utilisateur. Une fois que notre LFS est terminĂ©e, il est possible de faire foncitonner notre distribution sur n’importe quel ordinateur sur lequel est installĂ© Virtual Box.

PrĂ©paration de l’environnement de dĂ©veloppement

⚠ Attention ! Dans cette section, j’appelle **machine hĂŽte** l’ordinateur *physique* sur lequel est installĂ© VirtualBox. Par la suite la “machine hĂŽte” dĂ©signera la machine virtuelle sur laquelle nous allons construire notre distribution.

Etape 0 : Installer Virtual Box

Sur Windows, VirtualBox peut nĂ©cessiter certains prĂ©requis (selon la version : pilotes, packs additionnels, etc.). Pour ma part j’ai dĂ» installer Microsoft Visual C++.

Etape 1 : Installer une distribution Linux sur une machine virtuelle

CrĂ©ez une machine virtuelle Debian. De mon cĂŽtĂ©, j’ai utilisĂ© Debian 13 (Trixie) avec interface graphique, et un disque virtuel (VDI) de 50 Go.

CÎté ressources, ma VM avait 4 Go de RAM, 4 vCPU, et deux disques virtuels de 50 Go :

  • Disque 1 : pour Debian (la machine invitĂ©e “outil”).
  • Disque 2 : dĂ©diĂ© Ă  la future installation LFS.
💡Pour trouver l’image correspondant à votre architecture sur windows, il suffit d’utiliser la commande `set` dans cmd.

La machine virtuelle que j’ai utilisĂ© comporte 4 Go de RAM, 4 CPU et deux disques durs de 50 Go. Le premier disque dur sera dĂ©diĂ© Ă  la machine virtuelle qui permettra la construction de notre Linux From Scratch. Le second disque sera utilisĂ© pour notre LFS lui mĂȘme.

Etape 2 : Ajouter un disque dur virtuel supplémentaire à la VM

Dans VirtualBox : Paramùtres de la VM → Stockage → Ajouter un disque dur. “add hard disk”.

ajout_disk.png

Etape 3 : Établir un connexion ssh entre la machine hîte et la machine virtuelle

Une connexion SSH est fortement recommandée : vous allez faire énormément de copier/coller depuis le livre LFS. Sans SSH, vous risquez de devoir retaper des centaines de commandes.

Voici les étapes à suivre pour établir une connexion ssh entre la machine et la machine virtuelle.

1) Dans la VM Debian (machine invitée)

Installez le serveur SSH :

  • sudo apt update
  • sudo apt install openssh-server

Vérifiez que le service tourne :

  • sudo systemctl status ssh

Pare-feu (optionnel mais propre) :

  • sudo apt install ufw
  • sudo ufw allow OpenSSH (ou sudo ufw allow 22/tcp)
  • sudo ufw enable
  • sudo ufw status

2) Dans VirtualBox : redirection de port

Dans les réglages réseau de la VM (mode NAT), ajoutez une rÚgle de redirection :

  • Port hĂŽte : 2222

  • Port invitĂ© : 22

    Capture d’écran 2025-11-17 145731.png

3) Depuis la machine hĂŽte

Vous pouvez maintenant vous connecter Ă  la VM avec :

ssh -p 2222 <user>@localhost

  • <user> = un utilisateur existant dans Debian
  • p 2222 indique le port cĂŽtĂ© machine hĂŽte (redirigĂ© vers le 22 de la VM)

Linux From Scratch !

Bon bon bon
 Debian 13 est installĂ© dans une VM maintenant nous allons construire notre propre distribution Linux From Scratch. Je ne vais pas recopier le livre ici. Je vous invite Ă  lire et suivre les instructions qu’il contient pas Ă  pas. Dans cette section je vais me contenter de commenter certains passages pour apporter quelques Ă©claircissements.

CrĂ©ation d’une nouvelle partition (Section 2.4)

Le livre indique qu’« une partition de 30 Go devrait suffire ». Pour ft_linux, je recommande plutĂŽt un disque virtuel de 50 Go, plus confortable (marges de manƓuvre, logs, recompilations, etc.). Voici une proposition de dĂ©coupage compatible avec un dĂ©marrage en BIOS et une partition /boot sĂ©parĂ©e :

Partition Taille RĂŽle
/dev/sdb1 1 MiB BIOS boot partition (nécessaire pour GRUB en mode BIOS sur disque GPT)
/dev/sdb2 256 MiB /boot (noyau vmlinuz, initramfs, fichiers du bootloader)
/dev/sdb3 45 GiB / (racine : l’arborescence complùte du systùme)
/dev/sdb4 ~4–5 GiB swap (mĂ©moire d’échange)

Ne confondez pas la partition BIOS boot (1 MiB) avec la partition /boot :

  • la BIOS boot ne contient pas de systĂšme de fichiers et sert Ă  GRUB quand on dĂ©marre en BIOS sur un disque GPT ;
  • la partition /boot, elle, contient les fichiers nĂ©cessaires au dĂ©marrage (noyau, initramfs, etc.).

Le nom du disque Ă  partitionner dĂ©pend de votre VM (souvent sdb, mais pas toujours). Pour vĂ©rifier :lsblk ou sudo fdisk -l . Ensuite j’ai utilisĂ© fdisk pour partitionner le disque.

Tutoriel fdisk

Tout d’abord dĂ©marez fdisk :

sudo fdisk /dev/sdX

Remplacez sdX par le bon disque (ex. /dev/sdb).

Pour le partitionnement sur fdisk, il faudra ensuite effectuer la suite de commande suivante :

Tout d’abord g permet de choisir le type de disque dur (g pour GPT). La notion GPT VS MBR est abordĂ©e plus haut.

Welcome to fdisk (util-linux 2.41).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Command (m for help): g
Created a new GPT disklabel (GUID: EACB74D2-7A4A-44C9-8655-BD190BC7E51E).
  • Partition d’amorçage

n pour “new” demande Ă  fdisk la crĂ©ation d’une nouvelle partition. Ici on choisit la partition no 1 qui est destinĂ© au secteur d’amorçage. Pour choisir le type, il faut taper t et choisir le type avec l’indice 4 qui correspond au bios boot. L permet de voit la liste des diffĂ©rents types de partition disponibles. Notre LFS dĂ©marrera en BIOS et non pas en UEFI (cf section plus haut pour comprendre la diffĂ©rence).

Command (m for help): n
Partition number (1-128, default 1): 1
First sector (2048-62914526, default 2048):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-62914526, default 62912511): +1M

Created a new partition 1 of type 'Linux filesystem' and of size 1 MiB.

Command (m for help): t
Selected partition 1
Partition type or alias (type L to list all): L
  1 EFI System                     C12A7328-F81F-11D2-BA4B-00A0C93EC93B
  2 MBR partition scheme           024DEE41-33E7-11D3-9D69-0008C781F39F
  3 Intel Fast Flash               D3BFE2DE-3DAF-11DF-BA40-E3A556D89593
  4 BIOS boot                      21686148-6449-6E6F-744E-656564454649
  5 Sony boot partition            F4019732-066E-4E12-8273-346C5641494F
	[..]
Partition type or alias (type L to list all): 4
Changed type of partition 'Linux filesystem' to 'BIOS boot'.
📖 Cette partition n a aucun systeme de fichier. Elle contient core.img qui est lu par le BIOS pour demarer la machine
 Elle est necessaire car le disque est en GPT.
  • Partition boot

Pour cette seconde partition nous laisserons le type par dĂ©faut : 'Linux filesystem’

Command (m for help): n
Partition number (2-128, default 2): 2
First sector (4096-62914526, default 4096):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (4096-62914526, default 62912511): +256M

Created a new partition 2 of type 'Linux filesystem' and of size 256 MiB.
  • Partition root

MĂȘme chose que pour la prĂ©cĂ©dente mais cette fois ci nous allons choisir une taille beaucoup plus grande : 47,7 G.

Command (m for help): n
Partition number (3-128, default 3): 3
First sector (528384-62914526, default 528384):

Last sector, +/-sectors or +/-size{K,M,G,T,P} (528384-62914526, default 62912511): +45G

Created a new partition 3 of type 'Linux filesystem' and of size 45 GiB.
  • Partition swap

Pour cette derniĂšre partition, il n’est pas nĂ©cessaire de remplir la taille car c’est la derniĂšre et nous lui laissons tout l’espace disque restant. L’indice du type pour une partition swap est 19 dans mon cas.

Command (m for help): n
Partition number (4-128, default 4): 4
First sector (55054336-62914526, default 55054336):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (55054336-62914526, default 62912511):

Created a new partition 4 of type 'Linux filesystem' and of size 4.7 GiB.

Command (m for help): t
Partition number (1-4, default 4): 4
Partition type or alias (type L to list all): L
[..]
 17 HP-UX data                     75894C1E-3AEB-11D3-B7C1-7B03A0000000
 18 HP-UX service                  E2A1E728-32E3-11D6-A682-7B03A0000000
 19 Linux swap                     0657FD6D-A4AB-43C4-84E5-0933C84B4F4F
[..]
Partition type or alias (type L to list all): 19

Changed type of partition 'Linux filesystem' to 'Linux swap'.

Enfin la derniĂšre Ă©tape consiste Ă  Ă©crire sur le disque toutes les partitions que nous venon de crĂ©er Ă  l’aide de la commande w de fdisk :

Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

Ensuite il faudra ajouter un systĂšme de fichier aux partitions avec les commandes mkfs -v -t ext4 /dev/*<xxx* et swap : mkswap /dev/*<yyy>.* Mais le livre LFS est parfaitement clair Ă  ce sujet. Je ne reviens donc pas sur ce point. Pour observer les filesystems : findmnt <chemin_vers_le_dossier>

Montage de la nouvelle partition (Section 2.7)

Partition root

Il faut garder en tĂȘte que le montage d’une partition n’est pas permanent : aprĂšs chaque arrĂȘt/redĂ©marrage de la VM, la partition n’est plus montĂ©e, et son contenu n’est donc plus visible tant que vous ne la remontez pas. Pour Ă©viter de refaire le montage Ă  la main Ă  chaque fois, on peut ajouter une entrĂ©e dans /etc/fstab, le fichier qui dĂ©crit quelles partitions doivent ĂȘtre montĂ©es automatiquement au dĂ©marrage (systemd s’appuie sur ce fichier pour gĂ©nĂ©rer les points de montage).

Dans notre cas, pendant la construction de LFS, on souhaite surtout remonter la partition “root LFS” (souvent /dev/sdb3) sur le rĂ©pertoire /mnt/lfs.

Le livre propose d’ajouter une ligne de ce type :

/dev/<xxx>  /mnt/lfs  ext4  defaults  1  1

Le problĂšme, c’est que le nom /dev/sdb3 peut changer d’un dĂ©marrage Ă  l’autre (ordre de dĂ©tection des disques), ce qui peut empĂȘcher le montage automatique et, selon la configuration, bloquer le dĂ©marrage en mode “emergency”.

La solution la plus fiable est d’utiliser l’UUID (identifiant unique qui ne change pas) :

sudo blkid /dev/sdb3

Puis dans /etc/fstab :

UUID=<uuid_de_sdb3>  /mnt/lfs  ext4  defaults  1  1

Une alternative acceptable, si vous voulez Ă©viter qu’un Ă©chec de montage perturbe le dĂ©marrage, est d’ajouter une entrĂ©e “tolĂ©rante” :

UUID=<uuid_de_sdb3>  /mnt/lfs  ext4  defaults,nofail,x-systemd.device-timeout=1,x-systemd.automount  0  0

Dans ce cas, la partition sera montĂ©e automatiquement Ă  la premiĂšre tentative d’accĂšs Ă  /mnt/lfs.

Partition swap

LFS nous propose d’activer le swap sur la machine hĂŽte Ă  l’aide de cette commande : /sbin/swapon -v /dev/<zzz>. C’est plus que probablement inutile. Notre distribution hĂŽte possĂšde trĂšs probablement dĂ©jĂ  un swap. lsblk peut en tĂ©moigner. Cette activation ne sera vĂ©ritablement utile que lorsque nous dĂ©marrerons notre distribution Ă  la toute fin du projet.

Remarques techniques sur la chaĂźne de compilation (Partie II de LFS)

Cette page est la plus importante de tout de livre. Elle explique la notion essentielle Ă  comprendre pour la construction d’une nouvelle distribution Linux. Il indispensable mon sens de la lire attentivement et e bien l’apprĂ©hender. Je me propose ici de faire une explication Ă©quivalente dans le but de faciliter votre comprĂ©hension. Il est plus que possible que cette partie contienne quelques inexactitudes.

Le chroot

Le chroot consiste Ă  dire au systĂšme que le “/” a changĂ© de dossier. Le dossier racine n’est plus “/” mais est /mnt/lfs dans notre cas.

La “Canadian Cross Compilation”

Cette Canadian Cross Compilation imagine un scenario à trois machines : A, B et C. Au départ nous disposons uniquement du compilateur de la machine A.

A chaque étape nous avons 3 éléments à prendre en considération :

  • La machine qui compile le nouveau compilateur (Construction)
  • La machine qui utilisera ce nouveau compilateur (HĂŽte)
  • La machine pour laquelle le nouveau compilateur sera en mesure de produire des binaires (Cible)

Voici les 3 étapes de compilation :

Étape Construction Hîte Cible Action
1 A A B Construire un compilateur croisé cc1 avec ccA sur la machine A.
2 A B C Construire un compilateur croisé cc2 avec cc1 sur la machine A.
3 B C C Construire le compilateur ccC avec cc2 sur la machine B.

Étape 1 : La machine A utilise ccA pour produire un nouveau compilateur : cc1. cc1 est capable de tourner sur la machine A et produit des exĂ©cutables pour la machine B.

Étape 2 : La machine A utilise cc1 pour produire un nouveau compilateur : cc2. cc2 est capable de tourner sur la machine B et produit des exĂ©cutables pour la machine C.

Étape 3 : La machine B utilise cc2 pour produire un nouveau compilateur : ccC. ccC est capable de tourner sur la machine C et produit des exĂ©cutables pour la machine C.

C’est clair ? Non ? Ba il faut relire 😊.

La compilation croisée dans LFS

Maintenant nous allons nous intĂ©resser Ă  la compilation croisĂ©e dans le cadre de notre LFS. Le sommaire nous fait constater que GCC est compilĂ© 3 fois exactement comme dans l’exemple thĂ©orique prĂ©cedent. Voici les 3 compilations de gcc :

Voici les 3 étapes de compilation impémentées pour LFS :

Étape Construction Hîte Cible Action
1 Debian Debian Chroot Construire un compilateur croisé gcc-Passe1 avec le gcc de la Debian sur la Debian.
2 Debian Chroot LFS Construire un compilateur croisé gcc-Passe2 avec gcc-Passe1 sur la Debian.
3 Chroot LFS LFS Construire le compilateur gcc-lfs avec gcc-Passe2 dans le Chroot.

On retrouve donc les 3 mĂȘmes Ă©tapes que dans la “Canadian Cross” :

Étape 1 : La Debian utilise son compilateur pour produire un nouveau compilateur : gcc-Passe1. gcc-Passe1 est capable de tourner sur la Debian et produit des exĂ©cutables pour le Chroot.

Étape 2 : La Debian utilise gcc1-Passe1 pour produire un nouveau compilateur : gcc-Passe2. gcc-Passe2 est capable de tourner dans le Chroot et produit des exĂ©cutables pour LFS.

Étape 3 : Le Chroot utilise gcc-Passe2 pour produire un nouveau compilateur : gcc-lfs. gcc-lfs est capable de tourner dans LFS et produit des exĂ©cutables pour LFS.

Oui mais
 LFS et le Chroot sont identiques ! Ce sont les deux mĂȘme systĂšmes. D’ailleurs Le tableau de l’implĂ©mentation de la compilation croisĂ© est celui-ci dans le livre :

Étape Construction Hîte Cible Action
1 pc pc lfs Construire un compilateur croisé cc1 avec cc-pc sur pc.
2 pc lfs lfs Construire un compilateur cc-lfs avec cc1 sur pc.
3 lfs lfs lfs Reconstruire (et Ă©ventuellement tester) cc-lfs avec lui-mĂȘme sur lfs.

Aucune distinction n’est faite entre LFS et le Chroot.

⁉ Mais ! A quoi sert la derniĂšre Ă©tape puisque nous disposons dĂ©jĂ  d’un compilateur capable de tourner sur LFS et de produire des binaires pour LFS ?

Mais ? A quoi sert la derniĂšre Ă©tape ? Effectivement, en observant attentivement le tableau, dĂ©s la deuxiĂšme Ă©tape nous avons un compilateur capable de tourner dans notre distribution et de produire des Ă©xĂ©cutables pour notre distribution. A quoi bon continuer ? On pourrait mĂȘme pousser la question encore plus loin. Pourquoi ne pas tout faire en une seule Ă©tape ? La Debian utiliserai son compilateur pour produire un nouveau compilateur cc-lfs. cc-lfs serait capable de tourner dans LFS et produirait des exĂ©cutables pour LFS.

Étape Construction Hîte Cible Action
1 pc lfs lfs Construire un compilateur cc-lfs avec cc-pc sur pc.

Eh bien la rĂ©ponse est finalement assez courte : Ă  cause des dĂ©pendances circulaires. Je m’explique


Le langage C dĂ©finit une bibliothĂšque standard, appelĂ©e glibc. Cette bibliothĂšque doit ĂȘtre compilĂ©e pour la machine LFS, c'est-Ă -dire Ă  l’aide du compilateur croisĂ© cc1. Mais le compilateur lui-mĂȘme utilise une bibliothĂšque interne : libgcc qui ****doit ĂȘtre liĂ©e Ă  la bibliothĂšque glibc pour fonctionner correctement ! De plus, la bibliothĂšque standard C++ (libstdc++) a aussi besoin d'ĂȘtre associĂ©e Ă  glibc. La solution Ă  ce problĂšme consiste d'abord Ă  construire une libgcc infĂ©rieure basĂ©e sur cc1, qui ne dispose pas de fonctionnalitĂ©s avancĂ©es comme les threads et le traitement des exceptions, puis de construire glibc avec ce compilateur infĂ©rieur (glibc elle-mĂȘme n'Ă©tant pas infĂ©rieure !), puis de construire libstdc++. Cette bibliothĂšque ne dispose pas des fonctionnalitĂ©s avancĂ©es de libgcc.

La conséquence du paragraphe précédent est que cc1 est incapable de construire une libstdc++ complÚtement fonctionnelle avec la libgcc dégradée, mais cc1 est le seul compilateur disponible pour construire les bibliothÚques C/C++ à la deuxiÚme étape. Comme indiqué, nous ne pouvons pas exécuter cc-lfs sur pc (la distribution hÎte) car il peut nécessiter certaines bibliothÚques, du code ou des données qui ne sont pas disponibles sur « la construction » (la distribution hÎte). Ainsi, lorsque nous construisons la deuxiÚme étape de gcc, nous remplaçons le chemin de recherche des bibliothÚques pour se lier à libstdc++ de la libgcc nouvellement reconstruite au lieu de l'ancienne construction dégradée. Cela rend la libstdc++ reconstruite complÚtement fonctionnelle.

Préparer les systÚmes de fichiers virtuels du noyau (Section 7.3) et Entrer dans l'environnement chroot (Section 7.4)

L’entrĂ©e dans le chroot (= “change root”) est la premiĂšre fois que l’on “s’isole” du systĂšme hĂŽte pour utiliser notre compilateur croisĂ© qui nous permettra de compiler les binaires dĂ©finitifs qui seront utilisĂ©s par notre distribution LFS. MAIS (!), notre LFS ne possĂšde pas encore son propre noyau ni ses propres systĂšmes de fichier virtuels qui permettent la communication avec le dit noyau. Nous sommes donc obligĂ© d’emprunter les systĂšmes de fichier virtuels du systĂšme hĂŽte et d’utiliser son noyau. Les montages proc, sysfs, devpts, tmpfs sont les systĂšmes de fichiers virtuels fournis par le noyau (en mĂ©moire), nĂ©cessaires pour que les programmes dans le chroot puissent “parler” au noyau (processus, pĂ©riphĂ©riques, pseudo-tty, etc.). LFS le dit explicitement : ces FS sont virtuels et doivent ĂȘtre montĂ©s dans l’arborescence $LFS pour que les applis du chroot les trouvent.

Les applications qui tournent en espace utilisateur utilisent diffĂ©rents systĂšmes de fichiers créés par le noyau pour communiquer avec le noyau lui-mĂȘme. Ces systĂšmes de fichiers sont virtuels du fait qu'ils n’utilisent aucun espace disque. Le contenu de ces systĂšmes de fichiers rĂ©side en mĂ©moire. Ces systĂšmes de fichiers doivent ĂȘtre montĂ©s dans l’arborescence de $LFS pour que les applications puissent les trouver dans l’environnement chroot.

A chaque redĂ©marrage, il sera nĂ©cessaire de monter Ă  nouveau ces systĂšmes de fichier virtuels avant d’entrer Ă  nouveau dans le chroot. C’est pourquoi je remet ici les commandes nĂ©cessaires pour faire cela afin que vous n’ayez pas Ă  fouiller dans le livre Ă  chaque redĂ©marrage de votre VM. Ces commandes doivent donc ĂȘtre exĂ©cutĂ© sur le systĂšme hĂŽte en tant que root :

  • Tout d’abord le montage des systĂšmes de fichier :
mount -v --bind /dev $LFS/dev

mount -vt devpts devpts -o gid=5,mode=0620 $LFS/dev/pts
mount -vt proc proc $LFS/proc
mount -vt sysfs sysfs $LFS/sys
mount -vt tmpfs tmpfs $LFS/run

if [ -h $LFS/dev/shm ]; then
install -v -d -m 1777 $LFS$(realpath /dev/shm)
else
mount -vt tmpfs -o nosuid,nodev tmpfs $LFS/dev/shm
fi

Le montage avec --bind est un type spécial de montage qui vous permet de créer le miroir d'un répertoire ou d'un point de montage à un autre endroit.

mount --bind /dev $LFS/dev n’attache pas une partition : c’est un bind mount = “deuxiĂšme vue” du mĂȘme arbre de rĂ©pertoires (ici, on “revois” /dev de l’hĂŽte Ă  l’intĂ©rieur de $LFS/dev).

  • Ensuite l’entrĂ©e dans chroot :
chroot "$LFS" /usr/bin/env -i \
HOME=/root \
TERM="$TERM" \
PS1='(lfs chroot) \u:\w\$ ' \
PATH=/usr/bin:/usr/sbin \
MAKEFLAGS="-j$(nproc)" \
TESTSUITEFLAGS="-j$(nproc)" \
/bin/bash --login

Configuration générale du réseau (Section 9.2)

Cette section est importante car elle permettra à notre futur systÚme LFS de se connecter à internet. Comme le livre propose différentes solutions de configuration, je vous remet ici celle qui est la plus pertinente pour le projet ft_linux.

  • 9.2.1.3. Configuration du DHCP.
cat > /etc/systemd/network/10-eth-dhcp.network << "EOF"
[Match]
Name=<network-device-name>

[Network]
DHCP=ipv4

[DHCPv4]
UseDomains=true
EOF

ip link permet de connaitre <network-device-name>

  • 9.2.3. Configurer le nom d'hĂŽte du systĂšme
echo <student_login> > /etc/hostname
⚠ Attention cette commande permet de rĂ©pondre Ă  l’une des Ă©xigences du sujet : “Le **nom d’hĂŽte** de votre distribution doit Ă©galement ĂȘtre **votre login Ă©tudiant**.” !
  • 9.2.4. Personnaliser le fichier /etc/hosts
 cat > /etc/hosts << "EOF"
# Début de /etc/hosts

127.0.0.1 <login_student>.localhost.ch <login_student>
::1       ip6-localhost ip6-loopback
ff02::1   ip6-allnodes
ff02::2   ip6-allrouters

# Fin de /etc/hosts
EOF

Linux-6.16.1 (Section 10.3)

La section est parfaitement claire dans le livre. Cependant je vais attirer votre attention sur 3 consignes du sujet, qui doivent ĂȘtre remplis Ă  ce moment :

  • Consigne 1 : La version du noyau doit contenir votre login Ă©tudiant, par exemple : Linux kernel 4.1.2-<login_Ă©tudiant>

Il faut configurer cela dans le menu de configuration du noyau make menuconfig. Voici quelques captures d’ecran pour vous montrer comment faire :

ecran1-menuconfig-lfs.jpg

ecran2-menuconfig-lfs.jpg

Ne pas oublier le “-” avant le login !

Ne pas oublier le “-” avant le login !

  • Consigne 2: Vous devez utiliser au moins trois partitions : une racine (/), une /boot, une partition d’échange (swap)

LFS vous prĂ©vient mais je le rĂ©pĂšte. Notre dossier /boot doit ĂȘtre montĂ© sur une partition sĂ©parĂ©e de notre partition utilisateur (root). Cela signifie qu’avant d’entrer dans le chroot, il faut monter la partition boot avec le dossier boot qui se trouve dans /mnt/lfs . Attention la partition root doit ĂȘtre montĂ© en premier pour pouvoir voir les dossiers qu’elle contient dans /mnt/lfs Pour cela :

mount /dev/sdXN /mnt/lfs/boot
  • Consigne 3 : La version du noyau doit contenir votre login Ă©tudiant, par exemple : Linux kernel 4.1.2-<login_Ă©tudiant>

LFS nous dit “Vous pouvez changer le nom du fichier ci-dessous selon votre goĂ»t”. Il est donc essentiel d’adapter la commande du livre commesuit : cp -iv arch/x86/boot/bzImage /boot/vmlinuz-<linux_version>-<login_Ă©tudiant> .

  • Consigne 4 : Les sources du noyau doivent se trouver dans : /usr/src/kernel-$(version). C’est le moment de le faire !

Utiliser GRUB pour paramétrer le processus de démarrage (Section 10.4)

LFS nous propose ce template :

cat > /boot/grub/grub.cfg << "EOF"
# Début de /boot/grub/grub.cfg
set default=0
set timeout=5

insmod part_gpt
insmod ext2

set root=(hd0,2)

set gfxpayload=1024x768x32

menuentry "GNU/Linux, Linux 6.16.1-lfs-12.4-systemd" {
        linux   /boot/vmlinuz-6.16.1-lfs-12.4-systemd root=/dev/sda2 ro
}
EOF

Dans le projet il est nécessaire de faire quelques adaptations :

  • set root=(hd0,2) : je conseille de remplacer ceci par search -fs-uuid —set=root <UUID> . Cela garantira le bon fonctionnement du systeme. Le risque etant que le disque virtuel change d’ordre lors du dĂ©marrage de la VM.
  • linux /boot/vmlinuz-6.16.1-lfs-12.4-systemd root=/dev/sda2 ro doit ĂȘtre remplacĂ© par linux /boot/vmlinuz-6.16.1-<student_login> root=PARTUUID=<PARTUUID> ro

Pour obtenir l’UUID et le PARTUUID du vdi que vous utilisez, il faut utiliser la commande blkid sur la machine hîte.

Grille de correction

Question Commande(s) Explication
Le noyau est-il un noyau Linux ? uname -s Affiche le nom du noyau.
La version Linux est-elle supĂ©rieure Ă  4.x ? uname -r Affiche la version du noyau (release). Doit ĂȘtre >4.
Les sources sont-elles dans /usr/src/linux-x.x ? ls /usr/src Liste le contenu de /usr/src pour vérifier la présence du répertoire des sources du noyau.
Vérifier la version du kernel dans les logs journalctl -k -b | grep -m1 "Linux version" ou dmesg | grep -m1 "Linux version" journalctl suffit, la premiÚre ligne montre la version du noyau
Y a-t-il au moins 3 partitions (root, /boot, swap) ? lsblk swapon --show lsblk affiche disques/partitions et points de montage (utile pour voir / et /boot). swapon --show affiche les espaces swap actifs.
Y a-t-il un chargeur de modules (type udev) ? systemctl status systemd-udevd Vérifie que le démon udev (gestion des périphériques) est présent et actif via systemd.
Y a-t-il un bootloader (LILO / GRUB / 
) ? grub-install --version Affiche la version de grub-install. Si la commande existe, GRUB est installé.
Vérifier le nom du binaire du kernel dans /boot ls /boot Liste les fichiers de /boot pour vérifier la présence et le nom du noyau (vmlinuz-<version>-<login>).
Y a-t-il un gestionnaire de démons ? (SysV, systemd, 
) ps -p 1 Affiche le nom de la commande du PID 1 (init). Dans notre cas : systemd .
Un Ă©diteur est-il prĂ©sent ? vim ft_linux_basic.sh Ouvre un fichier avec Vim pour vĂ©rifier que l’éditeur est installĂ© et fonctionnel.
Internet fonctionne-t-il ? ping -c 3 1.1.1.1 ping -c 3 google.com Ping vers une IP (teste réseau sans DNS) puis vers un nom de domaine (teste DNS + réseau). -c 3 envoie 3 paquets.
Installer le paquet screen (source GNU) wget https://ftp.gnu.org/gnu/screen/screen-5.0.1.tar.gz tar -xf screen-5.0.1.tar.gzcd screen-5.0.1 ./configure \ --prefix=/usr \ --disable-pam \ --enable-socket-dir=/run/screen \ --with-pty-group=5 make make install TĂ©lĂ©charge l’archive, l’extrait, configure la compilation avec options (installation dans /usr, PAM dĂ©sactivĂ©, socket dans /run/screen, groupe pty), compile puis installe.

Sources

Documentation officielle

https://fr.linuxfromscratch.org/lfs/

https://fr.linuxfromscratch.org/lfs/lire/

Projets d’autres Ă©tudiants

GitHub - phillipjacobs/ft_linux: My own linux distribution. :)

Repo pédagogique

GitHub - jbettini/ft_linux

Tutoriel complet pour le projet !

GitHub - grumbach/ft_linux: Making my own linux distribution (LFS)

Rassemble l’ensemble des scripts nĂ©cessaires

GitHub - 2ndcouteau/ft_linux: All the tools and scripts to reproduce LFS easily

Rassemble les scripts nécessaires

GitHub - rbourgeat/ft_linux: This subject is not about Kernel programming, but it’s highly related. This distro will be the base for all your kernel projects, because all your kernel-code will be executed here, on your distro.

Scripts de la correction

GitHub - ClemaX/ft_linux: Build scripts for my custom Linux From Scratch.

GitHub - Jibus22/ft_linux: Build of a LFS sytem

Tutoriels youtube

https://www.youtube.com/watch?v=6WI4FZNYAPI

https://www.youtube.com/watch?v=ceIvnPjPA7U&t=1s

https://www.youtube.com/watch?v=Srq7mpu9tOw&list=PLjAHiXDnp3JlH98GKJvwD1oa7-9pA_iNt

Pages web

https://wiki.archlinux.org/title/Udev_(Fran%C3%A7ais)

https://alexhost.com/fr/faq/comment-installer-et-configurer-un-serveur-ssh-sur-debian/

https://fr.wikipedia.org/wiki/BIOS_(informatique)

https://www.tech2tech.fr/quelle-est-la-difference-entre-le-format-gpt-et-mbr-pour-un-disque/

https://codefinity.com/blog/MBR-vs-GPT:-Understanding-Disk-Partitioning-Schemes?utm_source=google&utm_medium=cpc&utm_campaign=21193856569&utm_content=&utm_term=&dki=&gad_source=1&gad_campaignid=21183361821&gclid=CjwKCAiA64LLBhBhEiwA-Pxgu4X13R60mU89BX_oZxIivooM3_XN8INRowW7SePnqJVFnio1AJbAwRoC-V4QAvD_BwE

https://www.tech2tech.fr/les-differences-entre-bios-et-uefi/

https://fr.wikipedia.org/wiki/Noyau_de_syst%C3%A8me_d%27exploitation

https://fr.wikipedia.org/wiki/Partition_(informatique)

https://fr.wikipedia.org/wiki/Point_de_montage

https://fr.wikibooks.org/wiki/Les_syst%C3%A8mes_d%27exploitation/Assembleur_et_%C3%A9dition_des_liens

https://docs.fileformat.com/fr/disc-and-media/vdi/

https://man.archlinux.org/man/fdisk.8

https://doc.ubuntu-fr.org/fdisk

https://unix.stackexchange.com/questions/35338/su-vs-sudo-s-vs-sudo-i-vs-sudo-bash

https://www.ionos.fr/digitalguide/serveur/configuration/commande-linux-sudo/

https://docs.oracle.com/en/operating-systems/oracle-linux/6/admin/mount-filesysystem.html?utm_source=chatgpt.com

https://www.linuxfromscratch.org/blfs/view/stable/general/screen.html

https://www.linuxtricks.fr/wiki/screen-un-multiplexeur-de-terminal-pratique

https://lecrabeinfo.net/tutoriels/verifier-integrite-calculer-empreinte-checksum-md5-sha1-sha256-fichier-windows/

About

Projet de construction manuel d'une distribution Linux

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages