Vielleicht haben sich viele Nutzer von GNU/Linux angesichts der jüngsten Initiativen zur Schaffung eines "sovereänen" Internets Sorgen gemacht und streben an, sich abzusichern für den Fall, dass die Repositories beliebter GNU/Linux-Distributionen nicht mehr verfügbar sind.
Während einige die Repositories von CentOS, Ubuntu und Debian herunterladen, stellen andere ihre eigenen Distributionen auf der Grundlage bestehender Distributionen zusammen. Wiederum haben einige, bewaffnet mit den Büchern LFS (Linux From Scratch) und BLFS (Beyond Linux From Scratch), bereits mit der Kompilierung ihrer eigenen Distributionen aus Quellcode begonnen, da sie der Meinung sind, dass im Kontext eines "sovereänen" Internets zwangsläufig Hackerangriffe, Virus-Epidemien, Datenlecks passieren werden und Binärdateien nach einiger Zeit einfach obsolet sein werden.
Vor kurzem habe ich es geschafft, eine virtuelle Maschine vollständig aus Quellcode basierend auf den in dem Buch Linux From Scratch Systemd Edition v.8.3 dargelegten Anweisungen zu kompilieren. Ich möchte die Ergebnisse mit Ihnen teilen.
Der Prozess der Linux-Komplettierung
Der Prozess der Linux-Komplettierung aus Quellcode kann in drei Phasen unterteilt werden:
- Auf Basis des bestehenden Betriebssystems wird eine LFS-Bauumgebung erstellt.
- In der Bauumgebung wird ein LFS-Virtual Maschinen-Image erstellt.
- In der virtuellen Maschine werden zusätzliche Pakete aus dem BLFS-Buch installiert, die im LFS-Buch nicht enthalten sind.
Statische Skriptdateien
Bei der Arbeit mit der Build-Umgebung ist es praktisch, den Clipboard und SSH zu nutzen: Kopieren Sie die Befehle aus dem Buch und fügen Sie sie in die Konsole der Build-Umgebung ein.
Nach dem Start der erstellten virtuellen Maschine traten erhebliche Probleme auf. Im Gegensatz zum Terminalfenster ist es im Fenster des virtuellen Maschinenclients nicht möglich, Code einzufügen. Das Eintippen von Befehlen über die Tastatur ist unpraktisch und birgt ein hohes Risiko für Tippfehler. Diese Tippfehler können sich möglicherweise nicht sofort, sondern erst nach einiger Zeit bemerkbar machen und zu ernsthaften Problemen führen.
Es ist bekannt, dass Befehle nicht nur über die Tastatur, sondern auch über den Standard-Input (STDIN) eingegeben werden können. Als Quelle für den Standard-Input können sowohl serielle Ports als auch das Ergebnis eines Skriptprogramms, der sogenannte Standard-Output (STDOUT), verwendet werden.
Viele wissen, dass der Befehl wget den Inhalt der heruntergeladenen Datei auf den Standard-Output (STDOUT) ausgeben kann:
wget http://example.com -O -Wenn der Befehl wget an den Interpreter weitergeleitet wird, kann beliebiger Code ausgeführt werden. Der Code wird so ausgeführt, als ob er auf der Tastatur eingegeben oder aus der Zwischenablage kopiert wurde:
wget http://umvirt.com/linux/helloworld.sh -O - | bashAuf diese Weise kann man auf einem Webserver Dateien mit Befehlen ablegen und deren Inhalt an den Interpreter senden.
Dynamische Skriptdateien
Statische Dateien sind zwar gut, wenn man genau weiß, was ausgeführt werden soll, aber was ist, wenn ein Paket installiert wird und man sich nicht sicher ist, ob die Abhängigkeiten installiert sind oder nicht?
Hier kommt eine dynamische Website ins Spiel, die auf einem LAMP-Webserver basiert (Linux-Apache-MySQL-PHP). Wenn die Seite HTML-Dateien und Bilder dynamisch generieren kann, sollte sie auch mit normalen Textdateien problemlos umgehen können.
Das hat funktioniert. Ich habe eine Website geschrieben die Skripte für den Bash-Interpreter generiert. Die Website enthält Informationen über Pakete, Abhängigkeiten, Patches, Ergänzungen und Build-Befehle.
Jetzt kann der Befehl zur Installation des Pakets mc (Midnight Commander) wie folgt angegeben werden:
wget --no-check-certificate https://umvirt.com/linux/packages/0.1/mc/install -O - | bashDas Website-Skript erhält automatisch Daten aus der Datenbank und generiert den Code zur Überprüfung der Abhängigkeiten sowie den Installationscode für das Paket. Der Interpreter verarbeitet die Anweisungen des Skripts.
Damit dies möglich ist, werden auf der virtuellen Maschine Informationen über die installierten Pakete in einer Datenbank gespeichert.
Die Datenbank der installierten Pakete befindet sich im Verzeichnis /var/cache/ulfs-packages . Sie besteht aus einer Liste leerer Dateien, deren Namen den Paketen entsprechen.
Wenn ein Paket in der Datenbank nicht gefunden wird, erfolgt eine rekursive Installation der Abhängigkeiten.
Benutzerfreundlichkeit
Um die Installation der Pakete zu erleichtern, wurde das Skript Chimp, eine weitere Website, erstellt. , das die Datenbank verwendet UmVirt LFS Packages. Die Hauptaufgabe UmVirt LFS Assistant besteht darin, weitere Befehle auszuführen.
Mit Chimp wird die Installation von Paketen noch einfacher:
chimp install mcDemonstration
Um die Funktionsweise der Dienste kennenzulernen, UmVirt LFS Packages und UmVirt LFS Assistant kann ein Basis-Image heruntergeladen werden . Um Xorg mit einem einzigen Befehl zu installieren:
chimp install XWährend des Ausführens des Skripts werden automatisch 141 Pakete installiert. Um Zeit bei der Kompilierung zu sparen, können Sie im File /etc/profile den Wert der Variable MAKEFLAGS von „-j1“ (ein Thread) beispielsweise auf „-j6“ (sechs Threads) ändern.
Dezentralisierung und Anpassung
Zur Gewährleistung von Sicherheit, Autonomie und Anpassung wurde der Quellcode der UmVirt LFS Packages und UmVirt LFS Assistant öffentlich zugänglich gemacht. Jeder kann diesen herunterladen, installieren und die Dienste innerhalb seiner eigenen Infrastruktur anpassen.
Quelle: habr.com
