Być może wielu użytkowników GNU/Linux zastanawia się w świetle ostatnich inicjatyw władz dotyczących stworzenia "suwerennego" Internetu, jak zabezpieczyć się na wypadek niedostępności repozytoriów popularnych dystrybucji GNU/Linux.
Kto ściąga repozytoria CentOS, Ubuntu, Debian, ktoś tworzy swoje dystrybucje na podstawie istniejących dystrybucji, a niektórzy, uzbrojeni w książki LFS (Linux From Scratch) i BLFS (Beyond Linux From Scratch), już przystąpili do kompilacji swoich dystrybucji ze źródeł, ponieważ uważają, że w warunkach "suwerennego" Internetu z pewnością dojdzie do ataków hakerskich, epidemii wirusów, wycieków danych, a pliki binarne po jakimś czasie po prostu się zestarzeją.
Niedawno udało mi się w pełni skompilować maszynę wirtualną ze źródeł na podstawie instrukcji przedstawionych w książce Linux From Scratch Systemd Edition v.8.3. Chętnie dzielę się z Wami rezultatami.
Proces kompilacji Linuxa
Proces kompilacji Linuxa ze źródeł można podzielić na trzy etapy:
- Na podstawie istniejącego systemu operacyjnego tworzona jest środowisko kompilacji LFS.
- W środowisku kompilacji tworzony jest obraz maszyny wirtualnej LFS.
- Na maszynie wirtualnej instalowane są dodatkowe pakiety z książki BLFS, których brakuje w książce LFS.
Statyczne pliki skryptów
Podczas pracy w środowisku kompilacji wygodnie jest korzystać z schowka i SSH: skopiowałem z książki komendy i wkleiłem je do konsoli środowiska kompilacji.
Po uruchomieniu stworzonej maszyny wirtualnej pojawiły się poważne problemy. W przeciwieństwie do okna terminala, w oknie klienta maszyny wirtualnej nie można wklejać kodu. Wprowadzanie komend za pomocą klawiatury jest niewygodne, a ryzyko literówek jest duże. Niebezpieczeństwo błędów polega na tym, że mogą się one ujawniać nie od razu, a po pewnym czasie, prowadząc do poważnych problemów.
Jest powszechnie znane, że komendy można wprowadzać nie tylko z klawiatury, ale także z standardowego strumienia (STDIN). Jako źródło standardowego strumienia można używać portu szeregowego oraz wyniku działania programu skryptu, tzw. standardowego wyjścia (STDOUT).
Wielu wie, że komenda wget może wyświetlać zawartość pobranego pliku na standardowym wyjściu (STDOUT):
wget http://example.com -O -Jeśli wyjście polecenia wget zostać przekierowane do interpretera, można wykonać dowolny kod. Kod zostanie wykonany tak, jakby został wpisany na klawiaturze lub skopiowany z schowka:
wget http://umvirt.com/linux/helloworld.sh -O - | bashW ten sposób można umieścić na jakimś serwerze WWW pliki z poleceniami i przesyłać ich zawartość do interpretera.
Dynamiczne pliki skryptów
Statyczne pliki to w rzeczy samej dobre rozwiązanie, jeśli dokładnie wiesz, co ma być wykonane, a co w przypadku instalacji pakietu, kiedy nie jest jasne, czy zależności zostały zainstalowane, czy nie?
Na pomoc przychodzi dynamiczna strona, która opiera się na serwerze LAMP (Linux-Apache-MySQL-PHP). Jeśli strona może dynamicznie generować strony (pliki HTML) i obrazy, to z zwykłymi plikami tekstowymi również powinna dać sobie radę.
I tak się stało. Napisałem stronę , która generuje skrypty dla interpretera Bash. W bazie strony znajdują się informacje o pakietach, zależnościach, łatach, dodatkach i poleceniach budowy.
Teraz, aby zainstalować pakiet mc (midnight commander), można wpisać polecenie:
wget --no-check-certificate https://umvirt.com/linux/packages/0.1/mc/install -O - | bashSkrypt strony sam pobierze dane z bazy danych i utworzy kod sprawdzania zależności oraz kod skryptu do instalacji pakietu. Interpreter przetworzy instrukcje ze skryptu.
Aby to stało się możliwe, na dysku wirtualnej maszyny przechowywana jest informacja o zainstalowanych pakietach w bazie danych.
Baza danych zainstalowanych pakietów znajduje się w katalogu /var/cache/ulfs-packages i jest listą pustych plików o nazwach odpowiadających nazwom pakietów.
Jeśli pakiet nie znajduje się w bazie danych, następuje rekursywna instalacja zależności.
Udogodnienia
Aby instalacja pakietów stała się bardziej wygodna, napisałem skrypt chimp — jeszcze jedną stronę , wykorzystującą bazę UmVirt LFS Packages. Główne zadanie UmVirt LFS Assistant to wykonywanie innych poleceń.
Za pomocą chimp instalacja pakietów staje się jeszcze prostsza:
chimp install mcDemonstracja
Aby zapoznać się z działaniem serwisów UmVirt LFS Packages i UmVirt LFS Assistant można pobrać podstawowy obraz . Przeprowadź instalację Xorg wykonując jedno polecenie:
chimp install XW trakcie działania skryptu zainstalowanych zostanie 141 pakietów w trybie automatycznym. Aby zaoszczędzić czas na kompilację, można w pliku /etc/profile zmienić wartość zmiennej MAKEFLAGS z „-j1” (jeden wątek) na przykład na „-j6” (sześć wątków).
Decentralizacja i personalizacja
W celu zapewnienia bezpieczeństwa, autonomii i personalizacji, kod źródłowy usług UmVirt LFS Packages oraz UmVirt LFS Assistant został opublikowany w ogólnym dostępie. Każdy zainteresowany może go pobrać, uruchomić i dostosować usługi w ramach swojej infrastruktury.
Źródło: habr.com
