Vorwort Wenn wir von Linux-Systemen sprechen, meinen wir im Allgemeinen verschiedene Betriebssystemdistributionen, die auf dem Linux-Kernel und dem GNU-Projekt basieren. Um die Verwendung des Linux-Betriebssystems zu beherrschen, den Betriebsablauf des Linux-Betriebssystems zu verstehen, die Beziehung zwischen dem Kernel und dem Peripherie-Unterstützungssystem zu verstehen und mein Verständnis von Open Source-Betriebssystemen zu vertiefen, habe ich beschlossen, das Rad neu zu erfinden – ein Linux-Dateisystem selbst anzupassen. Hierzu gibt es zwei Möglichkeiten: Implementieren Sie init direkt selbst**\*(M1)***
Verwenden Sie system/sbin/init**\*(M2)***
Wählen wir zuerst *M1* aus. Ideen
Schritt 1: Holen Sie sich die Shell-Version von initrd.img Zunächst können wir ein Skript „init“ schreiben, damit der Kernel nach dem Start mit dem Dateisystem direkt eine Bash abrufen kann. Skript init erstellen Darunter: Das Verzeichnis /bin enthält häufig verwendete Befehle, init ist ein von Ihnen selbst geschriebenes Skript und das Verzeichnis /lib64 enthält die dynamischen Bibliotheken, von denen die Anwendung abhängt. Init-Inhalt Jetzt müssen wir die Befehlszeile verwenden, Bin- und Sbin-Verzeichnisse erstellen und grundlegende Befehle wie Bash, ls, rm, cp, mv, echo, cat, less usw. hinzufügen. Da diese Befehle auf einige dynamisch verknüpfte gemeinsam genutzte Bibliotheken in Verzeichnissen wie /lib64 angewiesen sind, müssen Sie die abhängigen Bibliotheken in das dem Minisystem entsprechende Verzeichnis kopieren und den Befehl ldd verwenden, um die Anwendung und ihre abhängigen dynamischen Bibliotheken abzufragen. Führen Sie nach Abschluss Folgendes aus: finden . | cpio -H newc -o | gzip > /boot/initrd.img Packen Sie das Root-Dateisystem in initrd.img und legen Sie es in das /boot-Verzeichnis. Das System führt init beim Start automatisch in initrd.img aus. Nachdem Sie so viel Aufwand in die Generierung von initrd.img gesteckt haben, wie testen Sie nun die neu erstellte initrd.img? Sie müssen zum Testen einen Eintrag in die Startkonfigurationsdatei von Grub hinzufügen. Titel CentOS 6 Mini Wurzel (hd0,0) kernel/vmlinuz-2.6.32-642.el6.x86_64 initrd /initrd.img Nach dem Neustart werden die Startoptionen angezeigt. Schritt 2: Vervollständigen Sie die Möglichkeit, das Originalsystem zu montieren Um das ursprüngliche System zu mounten, müssen die Treibermodule, die für die Ausführung des ursprünglichen Systems erforderlich sind, in initrd.img geladen werden, z. B. der Treiber des ext4-Dateisystems, die zugehörigen Treiber des SCSI-Geräts usw. /sbin/modinfo arbeitet mit /sbin/insmod zusammen und der Treiber wird in /module abgelegt Schritt 3: Vervollständigen Sie die Möglichkeit zur Geräteverwaltung (udev) Die Verwendung von udevd, einem Dienstprogramm zum Verwalten und Überwachen von Hostgeräten, zum automatischen Laden der erforderlichen Treibermodule ist zuverlässiger, als dies selbst zu implementieren. Die udevd-Regeldatei befindet sich im Verzeichnis /lib/udev/ und die Konfigurationsdatei im Verzeichnis /etc/udev/. Gleichzeitig wird auch der in /etc/nsswitch.conf konfigurierte Name Service Switch benötigt. Die abhängige Bibliothek ist die Datei, die mit libnss im Verzeichnis /lib beginnt. Kopieren Sie die obigen Dateien in unser Verzeichnis und starten Sie dann den udevd-Dienst mit dem Befehl /sbin/start\_udev. (udevd muss einige andere Systembefehle aufrufen, wie etwa /sbin/modprobe, die mit strace verfolgt und abgerufen werden können). Mini-Systemverzeichnisdatei Das System speichert verfügbare Geräte im Verzeichnis /dev und /log ist die vom Befehl strace generierte Protokolldatei. Schritt 4: Vervollständigen Sie die Anmeldefunktion Da der Anmeldemechanismus relativ komplex ist und viele Aspekte wie Prozessverwaltungsmechanismus, Prozessgruppe, Konsole usw. umfasst, verwenden wir *M2*, um den Befehl /sbin/init in das kleine Systemverzeichnis zu kopieren und das Init-Skript in #!/bin/bash exec /sbin/init Nachdem die Kontrolle an /sbin/init übergeben wurde, muss der Benutzer beim Systemstart warten, bis eine Reihe von Aufrufen abgeschlossen ist und die Anmeldeoberfläche aufgerufen wird, bevor er die Kontrolle wiedererlangen kann. Der Prozess /sbin/init ist grob in drei Teile unterteilt: Der erste Teil besteht aus dem Laden des Treibermoduls durch udevd, der Überprüfung des Dateisystems und dem Root-Wechsel, und die entsprechende Konfiguration befindet sich in /etc/rc.sysinit; der zweite Teil besteht aus dem Starten verschiedener Dienste, und die entsprechende Konfiguration befindet sich im Verzeichnis /etc/rc.d/; der dritte Teil ist der Anmeldeteil, der den Aufruf von Befehlen wie /sbin/mingetty und /bin/login erfordert. Kopieren Sie die obigen Befehle und Dateien in das Verzeichnis, das dem kleinen System entspricht, und ändern Sie die Konfiguration. Da initrd.img nach dem Start des Minisystems direkt als temporäres Root-Dateisystem im Speicher ausgeführt wird und unser Minisystem keinen Root-Wechsel durchführen muss, wird der Funktionshauptteil von remount_needed() in /etc/rc.sysinit auskommentiert, sodass kein Root-Wechsel erfolgt. Da das System die neue Startmethode Upstart verwendet (das Programm /sbin/init wurde geändert und wird nun vom Upstart-Softwarepaket bereitgestellt), kopieren Sie die für den Upstart-Start relevanten Konfigurationsdateien in das Minisystemverzeichnis:
Ändern Sie die Ausführungspriorität von bootmini/etc/inittab auf 2. Wenn das System dann startet, führt /sbin/init die Dateien aus, die mit S im Verzeichnis bootmini/etc/rc.d/rc2.d/ beginnen. Ändern Sie die Namen einiger Servicedateien, die nicht aktiviert werden müssen, so, dass sie mit K beginnen. In der Datei bootmini/etc/rc.d/rc.local können Sie Vorgänge hinzufügen, die Benutzer benötigen und die nach dem Systemstart automatisch ausgeführt werden sollen. Das Anmeldeprogramm basiert auf dem Authentifizierungssystem PAM. Die Konfigurationsdateien befinden sich im Verzeichnis /etc/pam.d/. Die zugehörigen Bibliotheksdateien sind /lib64/security/ und die davon abhängigen Bibliotheksdateien. Die Anmeldung umfasst auch die Benutzergruppenverwaltung /bin/chgrp, /bin/chown, /bin/chmod usw. Die Dateien, in denen Benutzernamen gespeichert werden, sind /etc/passwd und /etc/group, und die Benutzerkennwortdatei ist /etc/shadow. Einige weitere beteiligte Dateien können mit Hilfe von strace analysiert werden. Ein komplettes Minisystem, das auf einer echten Maschine laufen kann Einige Verzeichnisdateien: /usw /bin /sbin /usr/bin /usr/sbin An diesem Punkt kann davon ausgegangen werden, dass das Dateisystem ausgeführt wird. Im nächsten Artikel werden wir das Rad neu erfinden und den Linux-Kernel anpassen. Den tatsächlichen Maschineneffekt werden wir auch im nächsten Artikel sehen. Zusammenfassen Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Lernwert für Ihr Studium oder Ihre Arbeit hat. Wenn Sie Fragen haben, können Sie eine Nachricht hinterlassen. Vielen Dank für Ihre Unterstützung von 123WORDPRESS.COM. Das könnte Sie auch interessieren:
|
<<: Analyse des Problems des Datenverlusts durch erzwungene Aktualisierung von Vuex
>>: Detailliertes Beispiel für die Datenmigration bei einem IOS-Datenbank-Upgrade
MySQL Maximale Anzahl von Verbindungen anzeigen u...
Dieser Artikel beschreibt anhand von Beispielen d...
Erstellen Sie Ihre erste Webseite in einer Minute...
Seitenbeschreibung: Hauptseite: Name —> shish...
In diesem Artikel wird beschrieben, wie Sie eine ...
Die endgültige Lösung ist im letzten Bild Wenn Si...
1. Grundlegende Grammatik Code kopieren Der Code ...
Vorwort Es gibt viele Möglichkeiten, in CSS horiz...
Einführung in NFS NFS (Network File System) ist e...
Vorwort: Soweit ich weiß, kann CSS derzeit nur de...
Einführung in Nginx Nginx ist ein leistungsstarke...
Das MySQL auf dem Server ist in der Version 8.0.1...
Inhaltsverzeichnis 1. Einführung in das Teleporti...
Schließen Sie beim Schreiben einer Docker-Datei e...
Linux-Grep-Befehl Mit dem Linux-Befehl grep könne...