È probabile che molti utenti GNU/Linux, a causa delle recenti iniziative delle autorità per creare un Internet «sovrano», si siano posti una domanda su come tutelarsi nel caso i repository dei popolari distro GNU/Linux non siano più accessibili.
Chi scarica i repository di CentOS, Ubuntu, Debian, chi crea le proprie distribuzioni basate su quelle esistenti, e qualcun altro, armato di libri LFS (Linux From Scratch) e BLFS (Beyond Linux From Scratch), si è già messo a compilare le proprie distribuzioni dai sorgenti, ritenendo che in un contesto di Internet «sovrano» ci saranno inevitabilmente attacchi hacker, epidemie di virus, perdite di dati, e che i binari diventeranno obsoleti dopo un certo periodo.
Recentemente ho finalmente completato la compilazione di una macchina virtuale dai sorgenti seguendo le istruzioni fornite nel libro Linux From Scratch Systemd Edition v.8.3. Affretto a condividere i risultati con voi.
Il processo di compilazione di Linux
Il processo di compilazione di Linux dai sorgenti può essere suddiviso in tre fasi:
- Sulla base del sistema operativo esistente, si crea un ambiente di compilazione LFS.
- Nell'ambiente di compilazione si genera un'immagine della macchina virtuale LFS.
- Nella macchina virtuale vengono installati pacchetti aggiuntivi dal libro BLFS che non sono presenti nel libro LFS.
File statici di script
Durante il lavoro con l'ambiente di compilazione è comodo utilizzare gli appunti e SSH: puoi copiare i comandi dal libro e incollarli nella console dell'ambiente di compilazione.
Dopo aver avviato la macchina virtuale creata, ci sono stati seri problemi. A differenza della finestra del terminale, non è possibile incollare codice nella finestra del client della macchina virtuale. Digitare i comandi dalla tastiera è scomodo e c'è un alto rischio di errori di battitura. Il pericolo degli errori di battitura è che possono manifestarsi non subito, ma dopo un po' di tempo, portando a problemi gravi.
È noto che i comandi possono essere inseriti non solo da tastiera, ma anche da flusso standard (STDIN). La fonte del flusso standard può essere una porta seriale, così come il risultato dell'esecuzione di un programma script, detto anche output standard (STDOUT).
Molti sanno che il comando wget può inviare il contenuto del file scaricato all'output standard (STDOUT):
wget http://example.com -O -Se l'output del comando wget viene indirizzato all'interprete, è possibile eseguire codice arbitrario. Il codice sarà eseguito esattamente come se fosse stato digitato sulla tastiera o copiato dagli appunti:
wget http://umvirt.com/linux/helloworld.sh -O - | bashIn questo modo, è possibile posizionare su un server Web file con comandi e inviare il loro contenuto all'interprete.
File dinamici di script
I file statici sono certamente buoni se si sa esattamente cosa deve essere eseguito, ma cosa succede durante l'installazione di un pacchetto? Se non è chiaro se le dipendenze siano installate o meno, che si fa in questo caso?
Qui entra in gioco un sito dinamico basato su LAMP Web-server (Linux-Apache-MySQL-PHP). Se il sito può generare pagine in modo dinamico (file HTML) e immagini, può gestire facilmente anche i file di testo.
E così è stato. Ho creato il sito che genera script per l'interprete Bash. La base del sito contiene informazioni su pacchetti, dipendenze, patch, estensioni e comandi di compilazione.
Ora, per installare il pacchetto mc (midnight commander), puoi inserire il comando:
wget --no-check-certificate https://umvirt.com/linux/packages/0.1/mc/install -O - | bashLo script del sito recupererà automaticamente i dati dal database e genererà codice per il controllo delle dipendenze e codice dello script per l'installazione del pacchetto. L'interprete elaborerà le istruzioni dello script.
Affinché ciò sia possibile, sul disco della macchina virtuale viene salvata l'informazione sui pacchetti installati in un database.
Il database dei pacchetti installati si trova nella directory /var/cache/ulfs-packages ed è composto da un elenco di file vuoti con nomi corrispondenti a quelli dei pacchetti.
Se un pacchetto non è trovato nel database, viene eseguita un'installazione ricorsiva delle dipendenze.
Comfort
Per rendere l'installazione dei pacchetti più conveniente, ho scritto lo script chimp, un altro sito , che utilizza la base UmVirt LFS Packages. L'obiettivo principale UmVirt LFS Assistant è l'esecuzione di altri comandi.
Con l'aiuto di chimp, l'installazione dei pacchetti diventa ancora più semplice:
chimp install mcDimostrazione
Per scoprire il funzionamento dei servizi UmVirt LFS Packages e UmVirt LFS Assistant è possibile scaricare l'immagine di base . Per installare Xorg eseguendo un unico comando:
chimp install XDurante il lavoro dello script verranno installati 141 pacchetti in modalità automatica. Per risparmiare tempo nella compilazione, è possibile modificare il valore della variabile MAKEFLAGS nel file /etc/profile da «-j1» (un thread) ad esempio a «-j6» (sei thread).
Decentralizzazione e personalizzazione
Per garantire sicurezza, autonomia e personalizzazione, il codice sorgente dei servizi UmVirt LFS Packages e UmVirt LFS Assistant è reso disponibile pubblicamente. Chiunque può scaricarlo, installarlo e modificare i servizi all'interno della propria infrastruttura.
Fonte: habr.com
