Este posibil ca mulți dintre utilizatorii GNU/Linux, în lumina inițiativelor recente ale autorităților de a crea un Internet „suveran”, să se confrunte cu necesitatea de a se proteja în cazul în care repositoarele populare ale distribuțiilor GNU/Linux devin inaccesibile.
Unii descarcă repositoarele CentOS, Ubuntu, Debian, alții își compilează propriile distribuții pe baza distribuțiilor existente, iar unii, înarmați cu cărțile LFS (Linux From Scratch) și BLFS (Beyond Linux From Scratch), au început să compileze propriile distribuții din surse, considerând că, în condițiile unui Internet „suveran”, vor avea loc atacuri cibernetice, epidemii de viruși, scurgeri de date, iar binarele vor deveni învechite într-un timp relativ scurt.
Recent am reușit să compilez complet o mașină virtuală din surse, pe baza instrucțiunilor prezentate în cartea Linux From Scratch Systemd Edition v.8.3. Mă grăbesc să împărtășesc rezultatele cu voi.
Procesul de compilare Linux
Procesul de compilare Linux din surse poate fi împărțit în trei etape:
- Pe baza sistemului de operare existent, se construiește un mediu de compilare LFS.
- În mediu de compilare, se compilează imaginea mașinii virtuale LFS.
- În mașina virtuală, se instalează pachete suplimentare din cartea BLFS care nu sunt incluse în cartea LFS.
Fișiere statice ale scripturilor
În timpul lucrului cu mediu de compilare, este convenabil să folosești clipboard-ul și SSH: ai copiat comenzi din carte și le-ai lipit în consola mediu de compilare.
După pornirea mașinii virtuale create, au apărut probleme serioase. Spre deosebire de fereastra terminalului, în fereastra clientului mașinii virtuale nu este posibil să lipsești cod. Este incomod să tastezi comenzi cu tastatura și există un risc ridicat de erori de tipar. Pericolul erorilor de tipar constă în faptul că acestea se pot manifesta nu imediat, ci după un timp, conducând la probleme serioase.
Este bine cunoscut că comenzile pot fi introduse nu doar de la tastatură, ci și dintr-un flux standard (STDIN). Sursa fluxului standard poate fi un port serial, precum și rezultatul execuției unui program sau script, cunoscut sub numele de flux standard de ieșire (STDOUT).
Mulți știu că comanda wget poate trimite conținutul fișierului descărcat în fluxul standard de ieșire (STDOUT):
wget http://example.com -O -Dacă redirecționezi ieșirea comenzii wget către interpret, poți executa cod arbitrar. Codul va fi executat la fel ca și cum ar fi fost tastat pe tastatură sau copiat din clipboard:
wget http://umvirt.com/linux/helloworld.sh -O - | bashAstfel, poți plasa fișiere cu comenzi pe un server Web și trimite conținutul acestora către interpret.
Fișiere script dinamice
Fișierele statice sunt într-adevăr bune dacă știi exact ce trebuie să fie executat, dar dacă se instalează un pachet și nu este clar dacă dependențele sunt instalate sau nu, ce se întâmplă atunci?
Aici intervine un site dinamic, bazat pe servere Web LAMP (Linux-Apache-MySQL-PHP). Dacă site-ul poate genera dinamic pagini (fișiere HTML) și imagini, ar trebui să facă față și fișierelor text obișnuite.
Așa a fost. Am scris un site care generează scripturi pentru interpretul Bash. În baza site-ului este stocată informația despre pachete, dependențe, patch-uri, suplimente și comenzi de compilare.
Acum, pentru a instala pachetul mc (midnight commander), poți scrie comanda:
wget --no-check-certificate https://umvirt.com/linux/packages/0.1/mc/install -O - | bashScriptul site-ului va obține date din baza de date și va genera codul pentru verificarea dependențelor și scriptul pentru instalarea pachetului. Interpretul va procesa instrucțiunile din script.
Pentru ca acest lucru să fie posibil, informația despre pachetele instalate este păstrată pe disc în baza de date.
Baza de date a pachetelor instalate se află în directorul /var/cache/ulfs-packages reprezintă o listă de fișiere goale cu numele corespunzătoare numelui pachetelor.
Dacă pachetul nu este găsit în baza de date, se va face instalarea recursivă a dependențelor.
Confort
Pentru a face instalarea pachetelor mai convenabilă, am scris un script numit chimp, încă un site , care utilizează baza UmVirt LFS Packages. Sarcina principală UmVirt LFS Assistant este executarea altor comenzi.
Cu ajutorul chimp, instalarea pachetelor devine și mai simplă:
chimp install mcDemonstratie
Pentru a te familiariza cu funcționarea serviciilor UmVirt LFS Packages și UmVirt LFS Assistant poți descărca imaginea de bază . Efectuează instalarea Xorg printr-o singură comandă:
chimp install XÎn timpul executării scriptului, se vor instala automat 141 de pachete. Pentru a economisi timp la compilare, puteți schimba valoarea variabilei MAKEFLAGS în fișierul /etc/profile de la „-j1” (un fir) la, de exemplu, „-j6” (șase fire).
Decentralizare și personalizare
Pentru a asigura securitatea, autonomie și personalizare, codul sursă al serviciilor UmVirt LFS Packages și UmVirt LFS Assistant este publicat în acces public. Oricine poate să-l descarce, să-l implementeze și să modifice serviciile în cadrul infrastructurii sale.
Sursa: habr.com
