Mnoho uživatelů GNU/Linux se možná začalo zabývat otázkou, jak se pojistit na případ, že dojde k nedostupnosti repozitářů populárních distribucí GNU/Linux, v návaznosti na nedávné iniciativy vlád ke vytvoření "suverénního" internetu.
Někteří stahují repozitáře CentOS, Ubuntu, Debian, jiní si vytvářejí vlastní distribuce na základě stávajících distribucí, a někteří, vybavení knihami LFS (Linux From Scratch) a BLFS (Beyond Linux From Scratch), se už pustili do kompilace svých distribucí ze zdrojového kódu, protože se domnívají, že v podmínkách "suverénního" internetu nevyhnutelně dojde k hackerským útokům, virovým epidemiím, únikům dat a binární soubory se časem stanou zastaralými.
Nedávno jsem měl čas plně zkompilovat virtuální stroj ze zdrojových kódů na základě instrukcí uvedených v knize Linux From Scratch Systemd Edition v.8.3. Rád bych se s vámi podělil o výsledky.
Proces sestavení Linuxu
Proces sestavení Linuxu ze zdrojového kódu lze rozdělit do tří etap:
- Na základě stávajícího operačního systému je sestavena prostředí pro LFS.
- V prostředí sestavení se vytvoří obraz virtuálního stroje LFS.
- Do virtuálního stroje se instalují další balíčky z knihy BLFS, které v knize LFS chybí.
Statické soubory skriptů
Při práci s prostředím sestavení je pohodlné používat clipboard a SSH: z knihy jsem zkopíroval příkazy a vložil je do konzole prostředí sestavení.
Po spuštění vytvořeného virtuálního stroje se objevily vážné problémy. Na rozdíl od okna terminálu nelze kód v okně klienta virtuálního stroje vložit. Psát příkazy na klávesnici je nepohodlné a je velké riziko překlepů. Nebezpečí překlepů spočívá v tom, že se mohou projevit až po nějaké době a vést k vážným problémům.
Je známo, že příkazy lze zadávat nejen z klávesnice, ale i z standardního vstupu (STDIN). Jako zdroj standardního vstupu lze použít sériový port a také výstup programu skriptu, takzvaný standardní výstup (STDOUT).
Mnozí vědí, že příkaz wget může výstupem obsah staženého souboru do standardního výstupu (STDOUT):
wget http://example.com -O -Pokud výstup příkazu wget nasměrujete do interpretu, můžete vykonat libovolný kód. Kód bude proveden tak, jako by byl napsán na klávesnici nebo zkopírován ze schránky:
wget http://umvirt.com/linux/helloworld.sh -O - | bashTímto způsobem můžete umístit na nějaký webový server soubory s příkazy a posílat jejich obsah do interpretu.
Dynamické skriptové soubory
Statické soubory jsou jistě dobré, pokud víte, co má být vykonáno, ale co se děje při instalaci balíčku, pokud není jasné, zda jsou závislosti nainstalovány, co pak?
Na pomoc přichází dynamický web, ten který je na bázi LAMP webového serveru (Linux-Apache-MySQL-PHP). Pokud web může dynamicky generovat stránky (HTML soubory) a obrázky, měl by si bez problémů poradit i s obyčejnými textovými soubory.
A tak to dopadlo. Napsal jsem web , který generuje skripty pro Bash interpretor. V databázi webu je obsažena informace o balíčcích, závislostech, patchech, doplněních a příkazech sestavení.
Nyní k instalaci balíčku mc (midnight commander) můžete zadat příkaz:
wget --no-check-certificate https://umvirt.com/linux/packages/0.1/mc/install -O - | bashSkript webu sám získá data z databáze a vytvoří kód pro kontrolu závislostí a kód skriptu pro instalaci balíčku. Interpretor zpracuje pokyny ze skriptu.
Aby to bylo možné, na disku virtuálního stroje se uchovává informace o nainstalovaných balíčcích v databázi.
Databáze nainstalovaných balíčků se nachází v adresáři /var/cache/ulfs-packages , což je seznam prázdných souborů s názvy odpovídajícími názvům balíčků.
Pokud balíček není nalezen v databázi, dojde k rekurzivní instalaci závislostí.
Pohodlí
Aby byla instalace balíčků pohodlnější, napsal jsem skript chimp, ještě jeden web , který využívá databázi. UmVirt LFS PackagesHlavním úkolem UmVirt LFS Assistant je provádění dalších příkazů.
S pomocí chimp se instalace balíčků stává ještě jednodušší:
chimp install mcDemonstrace
Abyste se seznámili s fungováním služeb, UmVirt LFS Packages a UmVirt LFS Assistant můžete stáhnout základní obraz . Proveďte instalaci Xorg splněním jednoho příkazu:
chimp install XBěhem provozu skriptu bude automaticky nainstalováno 141 balíčků. Aby se ušetřil čas na kompilaci, můžete v souboru /etc/profile změnit hodnotu proměnné MAKEFLAGS z „-j1“ (jeden vláknový proces) například na „-j6“ (šest vláknových procesů).
Decentralizace a přizpůsobení
Pro zajištění bezpečnosti, autonomie a přizpůsobení byl zdrojový kód služeb UmVirt LFS Packages a UmVirt LFS Assistant zveřejněn veřejně. Každý si ho může stáhnout, nasadit a upravit služby v rámci své infrastruktury.
Zdroj: habr.com
