12 votes

Comment fonctionnent les installateurs de systèmes d'exploitation ?

Je suis en train d'apprendre comment fonctionne l'installation du système d'exploitation Linux, mais une recherche sur Internet à ce sujet ne fournit aucune information pour mes questions.

Note : Cette question a été marquée comme hors sujet sur Server Fault et je la pose donc ici.

La documentation de Redhat contient des informations intéressantes, mais elles sont fragmentées. Je ne peux pas coller ces morceaux pour obtenir une réponse complète.
À partir de ces éléments, je suis en mesure de comprendre comment fonctionne le chargeur de démarrage, comment ils démarrent le disque RAM et le noyau puis systemd ou initd.
Je ne trouve aucune référence concernant le fonctionnement de l'installation initiale du système d'exploitation.
Cette communauté compte de grands professionnels experts en la matière, ce qui me permet d'obtenir des solutions à mes questions.

Il y a plusieurs questions ici, s'il vous plaît, répondez librement à chaque question et ajoutez une référence si possible

  1. Pendant le processus d'amorçage, le MBR est lu et le chargeur de démarrage est initialisé ; pendant l'installation normale, le noyau est chargé par le chargeur de démarrage puis, après un certain temps, l'écran de connexion apparaît.
  2. Si 1 tient alors quel est le déroulement de l'installation du système d'exploitation ? Le noyau est-il toujours chargé pour lancer l'installateur script ou l'installateur de l'OS est-il un script minimal qui peut être appelé par le bootloader ?
  3. Si le fichier kickstart est utilisé, à quel moment exactement le fichier est-il analysé et son contenu exécuté lors d'une nouvelle installation du système d'exploitation ?
  4. Quels sont les fichiers ou scripts nécessaires pour que l'installation du système d'exploitation fonctionne (pour un démarrage normal, nous avons besoin de initrd, vmlinuz) puis qu'en est-il des installateurs - je pense que nous avons l'arbre d'installation (ISO extrait et servi par HTTPserver) ?
  5. La documentation de RHEL indique qu'il utilise l'installateur anaconda mais il est écrit en Python et comment cela fonctionne-t-il avant même que le noyau ou l'interpréteur ne soit chargé ? J'ai vérifié s'ils ont compilé dans un format spécifique au processeur pour qu'il puisse être exécuté directement sur le processeur mais je n'ai rien trouvé à ce sujet.

17voto

James Mertz Points 390

Si 1 satisfait, alors quel est le flux lors de l'installation de l'OS ? Est-ce que le noyau est toujours chargé pour lancer l'installateur script ou l'installateur de l'OS est un script minimal qui peut être appelé par le bootloader ?

Il s'agit presque toujours d'un système d'exploitation complet avec une application normale qui tourne dessus. Par exemple, le graphique Les installateurs de Debian et de Fedora étaient des applications GTK fonctionnant sous X11 (Xorg). Dans les deux cas, il y a un Linux normal en dessous, souvent avec une connexion à la console par Alt+F2.

(De même, le programme d'installation de Windows est un setup.exe qui s'exécute sur WinPE, une variante de Windows conçue pour ce type d'utilisation. Si vous appuyez sur Shift+F10, cela lancera cmd.exe).

Le fait que le programme d'installation utilise un système d'exploitation complet facilite de nombreuses choses, car il peut utiliser les mêmes concepts et fonctionnalités que le système d'exploitation qu'il installe. Par exemple, le programme d'installation doit être capable de formater et de lire/écrire le système de fichiers que votre système Linux / sera utilisée - et puisque l'installateur est une application Linux normale, il peut simplement utiliser les paramètres normaux de la partition mkfs y mount que Linux possède déjà.

Ainsi, le flux des installateurs Linux ressemble beaucoup au démarrage d'un vrai système Linux :

  1. Le micrologiciel charge et exécute le chargeur de démarrage à partir de votre CD d'installation ou de votre clé USB.
  2. Le chargeur de démarrage charge un noyau Linux et des initramfs depuis la clé USB (et peut être préconfiguré pour passer certains paramètres du noyau spécifiques à l'installateur).
  3. L'initramfs monte le vrai système de fichiers racine, ce qui est légèrement complexe car la plupart des systèmes Linux "live" ne mettent pas tous les fichiers du système d'exploitation directement sur la clé USB, mais les empaquettent dans une archive 'squashfs' :
    • L'initramfs monte le système de fichiers FAT32 de la clé USB elle-même...
    • Puis il monte en boucle l'archive SquashFS du vrai système de fichiers racine de Linux à partir de là...
    • Ensuite, il monte un système de fichiers virtuel 'overlayfs' ou 'unionfs' qui permet à la base SquashFS en lecture seule de devenir accessible en écriture, avec toutes les modifications stockées en RAM...
    • ...et cet overlayfs est ce qui devient le "/" pour le système d'exploitation Linux où l'installateur fonctionne.
  4. L'initramfs lance le processus régulier 'init', qui démarre certains services typiques ainsi que certains services spécifiques à l'installateur.
  5. Enfin, au lieu de lancer un écran de connexion, init lance directement l'application "installateur" (soit une application en mode texte sur tty1, soit une application X11 avec Xorg).

Comme vous pouvez le voir, à part la racine basée sur overlayfs, il démarre comme Linux le ferait normalement. En général, les installateurs Linux sont juste un cas spécial du système "live", et la plupart des distributions publient les outils qu'elles utilisent pour les construire, c'est-à-dire que le constructeur d'ISO et l'interface utilisateur sont open-source. Par exemple, vous pouvez analyser le archiso qu'Arch Linux utilise pour créer des ISOs Linux amorçables.

(Arch est un cas pertinent ici, car au cours des dernières années, il a n'a pas eu un installateur en tant que tel - il vous fera démarrer directement dans un Shell Linux, où vous partitionnerez le disque et installerez un ensemble de paquets initiaux, et c'est votre système Linux qui sera installé. Vous avez donc un aperçu très concret de ce que Anaconda ou d-i ferait sous le capot).

La documentation de RHEL indique que l'installateur anaconda a été utilisé, mais il est écrit en Python et fonctionne avant même que le noyau ou l'interpréteur ne soit chargé.

Ils ne le font pas. Aucune partie d'Anaconda n'a besoin de s'exécuter avant que le noyau ou l'interpréteur ne soit chargé.

(Rappelez-vous que, comme mentionné ci-dessus, l'installateur a en fait son propre noyau Linux et son propre /usr/bin/Python, il n'a pas besoin d'attendre que le "vrai" noyau soit installé).

Si le fichier kickstart est utilisé, à quel moment exactement le fichier est analysé et son contenu exécuté lors de la nouvelle installation du système d'exploitation ?

En général, il est juste lu par l'application d'installation. Il n'y a pas de "quand" spécifique, chaque installateur fait sa propre chose.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X