Mange brugere af GNU/Linux har muligvis overvejet at tage forholdsregler i lyset af de seneste tiltag fra myndighederne om at skabe et 'suverænt' internet, for at sikre sig mod utilgængeligheden af repositoryer fra populære GNU/Linux-distributioner.
Nogle downloader repositoryer fra CentOS, Ubuntu, Debian, nogle bygger deres egne distributioner baseret på eksisterende distributioner, mens andre, bevæbnet med bøgerne LFS (Linux From Scratch) og BLFS (Beyond Linux From Scratch), allerede er gået i gang med at kompilere deres egne distributioner fra kilder, da de mener, at der i et 'suverænt' internet uundgåeligt vil ske hackerangreb, virusudbrud, datalækager, og at binære filer bare vil blive forældede over tid.
For nylig fik jeg endelig tid til helt at kompilere en virtuel maskine fra kilder baseret på instruktionerne i bogen Linux From Scratch Systemd Edition v.8.3. Jeg skynder mig at dele resultaterne med jer.
Processen med at bygge Linux
Processen med at bygge Linux fra kilder kan opdeles i tre trin:
- Der opbygges et LFS-bygge miljø baseret på det eksisterende operativsystem.
- I bygge miljøet kompilere et billede af den virtuelle maskine LFS.
- I den virtuelle maskine installeres ekstra pakker fra BLFS-bogen, som ikke findes i LFS-bogen.
Statiske filscript
Når man arbejder med bygge miljøet, er det praktisk at bruge udklipsholderen og SSH: kopierede kommandoer fra bogen kan indsættes i konsollen i bygge miljøet.
Efter lanceringen af den oprettede virtuelle maskine opstod der alvorlige problemer. I modsætning til terminalvinduet kan man ikke indsætte kode i vinduet på den virtuelle maskine. Det er besværligt at indtaste kommandoer fra tastaturet, og der er stor risiko for tastefejl. Gefaren for tastefejl er, at de ikke nødvendigvis viser sig med det samme, men først senere, og kan føre til alvorlige problemer.
Det er kendt, at man kan indtaste kommandoer ikke kun fra tastaturet, men også fra standardindgangen (STDIN). Kilden til standardindgangen kan være en seriel port såvel som resultatet af et programskripts kørsel, det såkaldte standardoutput (STDOUT).
Mange ved, at wget-kommandoen kan outputte indholdet af den downloadede fil til standardoutput (STDOUT):
wget http://example.com -O -Hvis output fra kommandoen wget ledes til fortolkeren, kan der udføres vilkårlig kode. Koden udføres på samme måde, som hvis den var blevet indtastet på tastaturet eller kopieret fra udklipsholderen:
wget http://umvirt.com/linux/helloworld.sh -O - | bashPå den måde kan man placere filer med kommandoer på en webserver og sende deres indhold til fortolkeren.
Dynamiske scriptfiler
Statiske filer er selvfølgelig gode, hvis man præcist ved, hvad der skal udføres, men hvad hvis der sker en installation af pakker, og man ikke er sikker på, om afhængighederne er installeret eller ej?
Her kommer et dynamisk website ind i billedet, der er baseret på LAMP webserver (Linux-Apache-MySQL-PHP). Hvis website kan generere sider (HTML-filer) og billeder dynamisk, burde det også klare sig med almindelige tekstfiler.
Og det gjorde det. Jeg skrev et website som genererer scripts til Bash-fortolkeren. I databasen på websitet findes information om pakker, afhængigheder, patches, tilføjelser og byggekommandoer.
Nu kan man installere pakken mc (midnight commander) ved at skrive følgende kommando:
wget --no-check-certificate https://umvirt.com/linux/packages/0.1/mc/install -O - | bashWebsitets script henter selv data fra databasen og genererer kode til at kontrollere afhængigheder og kode til at installere pakken. Fortolkeren behandler instruktionerne fra scriptet.
For at dette kan lade sig gøre, gemmes oplysninger om de installerede pakker på harddisken i den virtuelle maskine i databasen.
Databasen over installerede pakker findes i mappen /var/cache/ulfs-packages som består af en liste med tomme filer, hvis navne svarer til pakke-navnene.
Hvis pakken ikke findes i databasen, foretages der rekursiv installation af afhængigheder.
Brugervenlighed
For at gøre installationsprocessen af pakker mere brugervenlig, skrev jeg scriptet chimp, endnu et website , der bruger databasen UmVirt LFS Packages. Hovedopgaven UmVirt LFS Assistant er at udføre andre kommandoer.
Med chimp bliver installation af pakker endnu lettere:
chimp install mcDemonstration
For at lære om servicearbejdet UmVirt LFS Packages og UmVirt LFS Assistant kan man downloade et grundlæggende billede . Udfør installationen af Xorg med en enkelt kommando:
chimp install XUnder kørsel af scriptet vil 141 pakker blive installeret automatisk. For at spare tid på kompilering kan man i filen /etc/profile ændre værdien af variablen MAKEFLAGS fra «-j1» (én tråd) for eksempel til «-j6» (seks tråde).
Decentralisering og tilpasning
For at sikre sikkerhed, autonomi og tilpasning er kildekoden til UmVirt LFS Packages og UmVirt LFS Assistant offentliggjort. Enhver kan downloade den, implementere den og tilpasse tjenesterne i deres infrastruktur.
Kilde: habr.com
