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.
-
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).
-
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.
-
Ce tutoriel sâappuie sur la version française du livre Linux From Scratch 12.4-systemd.
-
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 :
- Partitionnement : LFS évoque une partition
/bootmais ne lâimpose pas toujours selon les choix du lecteur. Le sujet ft_linux, lui, exige au moins trois partitions, dont une/bootsĂ©parĂ©e (en plus de/et du swap). - Nom dâhĂŽte (hostname) : il doit ĂȘtre votre login Ă©tudiant.
- Version du noyau : la chaßne renvoyée par le noyau doit inclure votre login étudiant (ex.
Linux kernel X.Y.Z-<login>). - Nom du binaire du noyau dans
/boot: il doit suivre la formevmlinuz-<linux_version>-<login_étudiant> - Emplacement des sources du noyau : elles doivent se trouver dans
/usr/src/kernel-$(version).
- Partitionnement : LFS évoque une partition
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 !
- 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
- 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
-
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
/bootdoit ĂȘtre nommĂ© comme suit :vmlinuz-<linux_version>-<login_Ă©tudiant>Adaptez votre configuration de bootloader en consĂ©quence.
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.
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.
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.vdiGardez votre image disque quelque part pour lâĂ©valuation par les pairs.
đ Les sources sont en bas de ce document. La plupart des rĂ©ponses aux questions proviennent de wikipedia.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âŠ).
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.
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.
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.
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 ».
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.
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.
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âŠ).
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.
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.
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 :
- 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.
- Ensuite, l'éditeur de liens (ou linker) combine plusieurs fichiers objets en un fichier exécutable.
- 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.
La commande suivante permet dâavoir la sortie de command en français.
LC_ALL=fr_FR commandLa commande suivante revient trĂšs souvent dans LFS. Soyez au clair avec son fonctionnement.
cat <nom_du_fichier> << EOF
Hello World !
EOFcat va Ă©crire dans le fichier tout le texte quâil trouve ligne aprĂšs ligne jusquâĂ rencontrer EOF.
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Ă©â.
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.
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++.
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.
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.
Dans VirtualBox : ParamĂštres de la VM â Stockage â Ajouter un disque dur. âadd hard diskâ.
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.
Installez le serveur SSH :
sudo apt updatesudo apt install openssh-server
Vérifiez que le service tourne :
sudo systemctl status ssh
Pare-feu (optionnel mais propre) :
sudo apt install ufwsudo ufw allow OpenSSH(ousudo ufw allow 22/tcp)sudo ufw enablesudo ufw status
Dans les réglages réseau de la VM (mode NAT), ajoutez une rÚgle de redirection :
Vous pouvez maintenant vous connecter Ă la VM avec :
ssh -p 2222 <user>@localhost
<user>= un utilisateur existant dans Debianp 2222indique le port cÎté machine hÎte (redirigé vers le 22 de la VM)
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.
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.
Tout dâabord dĂ©marez fdisk :
sudo fdisk /dev/sdXRemplacez 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'.- 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>
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/sdb3Puis 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.
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.
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 consiste Ă dire au systĂšme que le â/â a changĂ© de dossier. Le dossier racine nâest plus â/â mais est /mnt/lfs dans notre cas.
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 đ.
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 :
- GCC-15.2.0 â Passe 1
- GCC-15.2.0 â Passe 2
- GCC-15.2.0 (nous lâappellerons gcc-lfs)
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 ? 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
fiLe 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 --loginCette 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
EOFip link permet de connaitre <network-device-name>
- 9.2.3. Configurer le nom d'hĂŽte du systĂšme
echo <student_login> > /etc/hostname- 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
EOFLa 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 :
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 !
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
}
EOFDans le projet il est nécessaire de faire quelques adaptations :
set root=(hd0,2): je conseille de remplacer ceci parsearch -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 rodoit ĂȘtre remplacĂ© parlinux /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.
| 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. |
https://fr.linuxfromscratch.org/lfs/
https://fr.linuxfromscratch.org/lfs/lire/
GitHub - phillipjacobs/ft_linux: My own linux distribution. :)
Repo pédagogique
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
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
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
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://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://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://www.linuxfromscratch.org/blfs/view/stable/general/screen.html
https://www.linuxtricks.fr/wiki/screen-un-multiplexeur-de-terminal-pratique





