Semplifichiamo la compilazione di Linux dai sorgenti utilizzando il sito UmVirt LFS Packages

È probabile che molti utenti di GNU/Linux, alla luce delle recenti iniziative delle autorità per creare un Internet "sovrano", si siano preoccupati di come tutelarsi nel caso in cui i repository dei popolari distribuzioni GNU/Linux diventassero inaccessibili.

Chi scarica i repository di CentOS, Ubuntu, Debian, chi crea le proprie distribuzioni basandosi su quelle esistenti, e chi, armato di libri LFS (Linux From Scratch) e BLFS (Beyond Linux From Scratch), ha già iniziato a compilare le proprie distribuzioni dai sorgenti, ritenendo che nella situazione di un Internet "sovrano" ci saranno sicuramente attacchi informatici, epidemie di virus, perdite di dati e che i binari diventeranno obsoleti in breve tempo.

Recentemente ho finalmente completato la compilazione di una macchina virtuale dai sorgenti seguendo le istruzioni riportate nel libro Linux From Scratch Systemd Edition v.8.3. Sono ansioso di 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:

  1. Sulla base del sistema operativo esistente, viene creata l'ambiente di compilazione LFS.
  2. Nell'ambiente di compilazione viene creato l'immagine della macchina virtuale LFS.
  3. 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 il clipboard e SSH: ho copiato i comandi dal libro e incollati nella console dell'ambiente di compilazione.

Dopo aver avviato la macchina virtuale creata, sono emersi seri problemi. A differenza della finestra del terminale, non è possibile incollare il codice nella finestra del client della macchina virtuale. Digitare comandi da tastiera è scomodo e c'è un alto rischio di errori di battitura. Il pericolo degli errori di battitura è che potrebbero manifestarsi non subito, ma dopo un certo tempo, causando seri problemi.

È noto che si possono inserire comandi non solo da tastiera ma anche dallo stream standard (STDIN). La fonte dello stream standard può essere una porta seriale e anche il risultato del lavoro di un programma di scripting, il cosiddetto output standard (STDOUT).

Molti sanno che il comando wget può indirizzare il contenuto del file scaricato all'output standard (STDOUT):

wget http://example.com -O -

Se l'output del comando wget viene inviato all'interprete, è possibile eseguire codice arbitrario. Il codice verrà eseguito come se fosse stato digitato sulla tastiera o copiato dagli appunti:

wget http://umvirt.com/linux/helloworld.sh -O - | bash

In questo modo, è possibile caricare su un qualsiasi server Web file con comandi e inviare il loro contenuto all'interprete.

File di script dinamici

I file statici sono sicuramente utili se si sa esattamente cosa deve essere eseguito, ma se si tratta di un'installazione di pacchetti, se non è chiaro se le dipendenze siano state installate, cosa si fa allora?

In aiuto arriva un sito dinamico basato su LAMP Web server (Linux-Apache-MySQL-PHP). Se un sito può generare dinamicamente pagine (file HTML) e immagini, allora dovrebbe gestire senza problemi anche i file di testo ordinari.

E così è stato. Ho scritto un sito UmVirt LFS Packages che genera script per l'interprete Bash. Il sito contiene informazioni sui pacchetti, le dipendenze, le patch, i plugin e i comandi di build.

Ora per installare il pacchetto mc (midnight commander) è possibile digitare il comando:

wget --no-check-certificate https://umvirt.com/linux/packages/0.1/mc/install -O - | bash

Lo script del sito recupererà automaticamente i dati dal database e genererà il codice di verifica delle dipendenze e il codice dello script per l'installazione del pacchetto. L'interprete elaborerà le istruzioni dallo script.

Affinché ciò sia possibile, le informazioni sui pacchetti installati vengono salvate in un database sul disco della macchina virtuale.

Il database dei pacchetti installati si trova nella cartella /var/cache/ulfs-packages e rappresenta un elenco di file vuoti con nomi corrispondenti ai nomi dei pacchetti.

Se un pacchetto non viene trovato nel database, viene avviata l'installazione ricorsiva delle dipendenze.

Comodità

Per rendere l'installazione dei pacchetti più comoda, ho scritto lo script chimp, un altro sito UmVirt LFS Assistant, che utilizza il database UmVirt LFS Packages. Il compito principale UmVirt LFS Assistant è l'esecuzione di altri comandi.

Con chimp, l'installazione dei pacchetti diventa ancora più semplice:

chimp install mc

Dimostrazione

Per familiarizzare con il funzionamento dei servizi UmVirt LFS Packages e UmVirt LFS Assistant è possibile scaricare un'immagine di base Initial UmVirt LFS v.0.1 Update 1. Eseguire l'installazione di Xorg con un solo comando:

chimp install X

Durante l'esecuzione dello script, verranno installati 141 pacchetti in modalità automatica. Per risparmiare tempo sulla compilazione, è possibile sostituire il valore della variabile MAKEFLAGS nel file /etc/profile da «-j1» (un thread) ad esempio a «-j6» (sei thread).

Decentralizzazione e personalizzazione

Per motivi di sicurezza, autonomia e personalizzazione, il codice sorgente dei servizi UmVirt LFS Packages e UmVirt LFS Assistant è pubblicato in accesso pubblico. Chiunque può scaricarlo, implementarlo e modificare i servizi all'interno della propria infrastruttura.

Fonte: habr.com

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster