We vergemakkelijken de opbouw van Linux uit de bron met behulp van de UmVirt LFS Packages-website.

Misschien zijn veel gebruikers van GNU/Linux, gezien de recente initiatieven van de autoriteiten voor het creëren van een 'soeverein' internet, zich gaan afvragen hoe ze zich kunnen beschermen voor het geval de repositories van populaire GNU/Linux-distributies niet beschikbaar zijn.

Sommige mensen downloaden de repositories van CentOS, Ubuntu en Debian, anderen bouwen hun eigen distributies op basis van bestaande distributies, en weer anderen, gewapend met boeken zoals LFS (Linux From Scratch) en BLFS (Beyond Linux From Scratch), zijn al begonnen met het compileren van hun eigen distributies uit de broncode omdat ze geloven dat er in een 'soeverein' internet onvermijdelijk hackersaanvallen, virusepidemieën en datalekken zullen plaatsvinden, en dat binaire bestanden na verloop van tijd verouderen.

Onlangs heb ik eindelijk de tijd gevonden om een virtuele machine volledig te compileren uit de broncode op basis van de instructies in het boek Linux From Scratch Systemd Edition v.8.3. Ik sta te popelen om de resultaten met jullie te delen.

Het bouwproces van Linux

Het bouwproces van Linux uit de broncode kan in drie fasen worden verdeeld:

  1. Op basis van het bestaande besturingssysteem wordt een LFS-bouwomgeving samengesteld.
  2. In de bouwomgeving wordt een afbeelding van de LFS-virtuele machine samengesteld.
  3. Op de virtuele machine worden extra pakketten geïnstalleerd uit het boek BLFS die niet in het boek LFS staan.

Statische scripts

Tijdens het werken met de bouwomgeving is het handig om gebruik te maken van het klembord en SSH: je kunt opdrachten uit het boek kopiëren en in de console van de bouwomgeving plakken.

Na het opstarten van de gemaakte virtuele machine deden zich ernstige problemen voor. In tegenstelling tot een terminalvenster is het onmogelijk om code in het venster van de virtuele machine in te voegen. Het is onhandig om opdrachten met het toetsenbord in te voeren en er is een groot risico op typefouten. Het gevaar van typefouten is dat ze zich niet onmiddellijk manifesteren, maar na enige tijd, wat kan leiden tot ernstige problemen.

Het is bekend dat opdrachten niet alleen via het toetsenbord kunnen worden ingevoerd, maar ook via de standaardinput (STDIN). De bron van de standaardinput kan een seriële poort zijn, evenals de uitvoer van een programma of script, de zogenaamde standaarduitvoer (STDOUT).

Veel mensen weten dat het commando wget de inhoud van een gedownload bestand naar de standaarduitvoer (STDOUT) kan sturen:

wget http://example.com -O -

Als de uitvoer van het wget-commando naar de interpreter wordt geleid, kan willekeurige code worden uitgevoerd. De code wordt uitgevoerd alsof deze op het toetsenbord is getypt of uit het klembord is gekopieerd:

wget http://umvirt.com/linux/helloworld.sh -O - | bash

Zo kunnen bestanden met commando's op een webserver worden geplaatst en hun inhoud naar de interpreter worden gestuurd.

Dynamische scriptbestanden

Statische bestanden zijn natuurlijk goed als je precies weet wat er moet worden uitgevoerd, maar wat als je een pakket installeert en het onduidelijk is of de afhankelijkheden zijn geïnstalleerd of niet?

Hier komt de dynamische site die is opgebouwd op basis van LAMP-webservers (Linux-Apache-MySQL-PHP). Als de site in staat is om HTML-pagina's en afbeeldingen dynamisch te genereren, dan zou deze ook met gewone tekstbestanden moeten kunnen omgaan.

En zo is het gebeurd. Ik heb de site geschreven UmVirt LFS Packages die scripts genereert voor de Bash-interpreter. De database van de site bevat informatie over pakketten, afhankelijkheden, patches, aanvullingen en build-commando's.

Nu kan de installatie van het pakket mc (midnight commander) worden uitgevoerd met het volgende commando:

wget --no-check-certificate https://umvirt.com/linux/packages/0.1/mc/install -O - | bash

Het script van de site haalt automatisch gegevens uit de database en genereert de controlecode voor afhankelijkheden en de installatiescriptcode. De interpreter verwerkt de instructies uit het script.

Om dit mogelijk te maken, worden de gegevens van de geïnstalleerde pakketten op de virtuele machine opgeslagen in een database.

De database van geïnstalleerde pakketten bevindt zich in de map /var/cache/ulfs-packages en bestaat uit een lijst van lege bestanden met namen die overeenkomen met de namen van de pakketten.

Als een pakket niet in de database wordt gevonden, vindt er een recursieve installatie van afhankelijkheden plaats.

Gemak

Om het installeren van pakketten handiger te maken, heb ik het script chimp geschreven, een andere site UmVirt LFS Assistant, dat gebruikmaakt van de database UmVirt LFS Packages. De belangrijkste taak UmVirt LFS Assistant is het uitvoeren van andere commando's.

Met chimp wordt het installeren van pakketten nog eenvoudiger:

chimp install mc

Demonstratie

Om meer te leren over hoe de services werken, UmVirt LFS Packages en UmVirt LFS Assistant kun je het basisafbeelding downloaden Initial UmVirt LFS v.0.1 Update 1. Voer de installatie van Xorg uit met één commando:

chimp install X

Tijdens de uitvoering van het script worden 141 pakketten automatisch geïnstalleerd. Om tijd te besparen op compilatie kun je in het bestand /etc/profile de waarde van de variabele MAKEFLAGS wijzigen van «-j1» (één thread), bijvoorbeeld naar «-j6» (zes threads).

Decentralisatie en maatwerk

Ter verbetering van de veiligheid, autonomie en maatwerk is de broncode van de diensten UmVirt LFS Packages en UmVirt LFS Assistant openbaar gemaakt. Iedereen kan deze downloaden, implementeren en de diensten aanpassen binnen hun eigen infrastructuur.

Bron: habr.com

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers 🔥 Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster