Penguin's eggs guida utente

Indice #

Introduzione #

Un sistema riproduttivo per pinguini!

Penguin’s eggs nasce con l’idea della “riproduzione” e “selezione delle popolazioni” applicata ai sistemi operativi.

Erano i tempi di Remastersys e Systemback, due dei più diffusi programmi per rimasterizzare un sistema operativo - ad un certo punto - sia Remastersys, che aveva sempre sofferto di problemi di manutenzione da parte del suo autore, che Systemback furono in qualche modo dismessi. Vedi nota

Per la verità per un po’ non vi fu problema alcuno, ma quando cominciarono i “primi dolori” per non poter più rimasterizzare le ultime versioni delle mie distro preferite, essenzialmente Debian e derivate, quella che era una idea, cominciò a prendere forma.

Volevo uno strumento nuovo, scritto con un linguaggio moderno e comune a più distribuzioni, provvisto di un proprio sistema di pacchettizzazione. La scelta cadde su nodejs, con javascript, successivamente sono passato a typescript come linguaggio di sviluppo.

Immaginai un processo di produzione dell’uovo, denominato produce, l’operazione di cova - ovvero l’installazione - originalmente denominata hatch. Gli altri comandi vennero da sè con kill preferito ad abort per togliere di mezzo le iso prodotte, update per gli aggiornamenti, prerequisites per installare i pacchetti .deb necessari al processo, calamares per l’installazione e la configurazione dell’installer grafico.

Prima o poi, trattandosi di un uovo, troverò anche il modo di implementare un server PXE che lo distribuisca attraverso la rete locale, al momento oltre all’intenzione c’è il nome e non poteva essere che cuckoo (cuculo), dal comportamento del cuculo che fa covare le proprie uova da altri.

Installazione #

Prima di cominciare a produrre le “uova” occorre fornirsi di un sistema riproduttivo.

Abbiamo tre possibilità per l’installazione di eggs: pacchetto deb, pacchetto npm oppure possiamo anche utilizzare eggs direttamente dal sorgente.

Per la maggior parte degli utenti l’installazione del pacchetto debian è quella più indicata.

Pacchetto debian #

L’installazione da pacchetto Debian è senz’altro la più semplice, abbiamo due possibilita:

  • installare la repository penguins-eggs-ppa ed utilizzare i comuni comandi apt, synaptic, etc.
  • scaricare il pacchetto eggs da sourceforge ed installarla con il dpkg o gdebi.

Installazione della repository penguins-eggs-ppa #

Per installare la repository è sufficiente eseguire un copia ed incolla delle seguenti istruzioni:

1
2
3
curl -SsL https://pieroproietti.github.io/penguins-eggs-ppa/debian/KEY.gpg | sudo apt-key add -
sudo curl -s --compressed -o /etc/apt/sources.list.d/penguins-eggs-ppa.list "https://pieroproietti.github.io/penguins-eggs-ppa/debian/penguins-eggs-ppa.list"

A questo punto, una volta aggiornate le repository con sudo apt update potremo semplicemente installare eggs con il comando sudo apt install eggs. Non solo, se usciranno nuove versioni di eggs, queste saranno segnalate dal sistema ed un eventuale sudo apt update comporterà anche l’aggiornamento di eggs.

Installazione di eggs scaricando il pacchetto .deb #

Se non desiderate includere penguins-eggs-ppa fra le repository del vostro sistema, potete comunque scaricare l’ultima versione di eggs dal sito di sourceforge ed installarla con il comando:

1
sudo dpkg -i eggs-8.0.30-1.deb

Se si tratta della prima installazione, il pacchetto non verrà installato per la mancanza delle dipendenze. Basterà dare il comando:

1
sudo apt install -f

Naturalmente se sulla vostra distro è presente gdebi, potete tranquillamente effettuare l’installazione in modalità grafica.

Successivamente, per aggiornare eggs alle nuove versioni, sarà sufficiente il comando

1
sudo eggs update

e selezionare l’ultima versione di eggs dal basket.

La versione .deb comprende al suo interno nodejs per cui non è necessario disporre di questo pacchetto.

Se non avete incluso penguins-eggs-ppa fra le vostre repository è questa la forma di utilizzo consigliata ed è installabile facilmente su ogni distro (Debian/Devuan/Ubuntu e derivate), per ogni architettura supportata (i386, amd64. armel ed arm64).

Nota: Il basket non è altro che un “cestino delle uova” dal quale prelevare le uova fresche. Basket consiste semplicemente in un microserver su penguins-eggs.net che fornisce una API per le ultime versioni di eggs. Lo scaricamento del pacchetto avverrà, invece, sull’architettura di sourceforge garantendo sempre una buona qualità del servizio ed una diffusione capillare.

Pacchetto npm #

Essendo eggs un software sviluppato con nodejs, la versione originale potrebbbe essere quella preferibile, specialmente per chi abbia intenzione di collaborare allo sviluppo.

Per poter installare questa versione è necessario avere già installato il pacchetto nodejs. La descrizione di quale nodejs utilizzare e le modalità di installazione di nodejs sono riportare nel file README.md compreso nella repository di eggs.

L’installazione di eggs da pacchetto npm è semplice e sicura, servono solo questi comandi:

1
2
sudo npm config set unsafe-perm true
sudo npm install penguins-eggs -g

Per aggiornare il pacchetto - una volta installato - alle successive versioni, basterà il comando:

1
sudo eggs update

Nota: poichè eggs - attualmente - nella quasi totalità dei casi viene utilizzato come pacchetto .deb è al momento molto meno testato in modalità npm. Inoltre, a causa della necessità di rilascio per i396 eggs è tuttora scritto per essere compatibile con node8.1.17, potrebbero esserci quindi problemi con versioni di node successive.

A parte esigenze di sviluppo, si consiglia pertanto l’utilizzo della versione .deb.

Utilizzo di eggs da codice sorgente #

Utilizzare eggs a partire dai sorgenti può essere estremamente utile sia per debug che per modificare eggs stesso. Una volta scaricato il sorgente con il comando:

git clone https://github.com/pieroproietti/penguins-eggs

entrare nella directory penguins-eggs cd penguins-eggs e dare il comando

./init

Questo comando non farà altro che scaricare gli altri sorgenti utilizzati: perrisbrewery ed ink, quindi avvierà il comando npm install.

A questo punto, dalla stessa directory, si potrà utilizzare eggs direttamente dai sorgenti. Ad esempio:

sudo ./eggs produce -fv

Nota: Potete constatare che l’unica differenza d’uso rispetto ai pacchetti è che dovrete indicare il path per eggs ./eggs e dovrete lanciarlo dalla directory ~/penguins-eggs. Il funzionamento rimane tuttavia esattamente lo stesso, ma si ha il vantaggio di poter agire in maniera interattiva con il codice. Per lo sviluppo, personalmente utilizzo code, ma potete scegliere altri editor atom, sublime, etc).


Iniziamo a conoscere eggs #

Una volta installato il pacchetto come nella pagina precedente, disporremo sul nostro sistema di un nuovo comando:

eggs

Avviamo eggs senza alcun comando ed otterremo la lista dei comandi disponibili:

eggs-commands

Andiamo, quindi ad inizializzare eggs con sudo eggs dad -d.

sudo eggs config ed sudo eggs dad -d #

Per funzionare eggs ha bisogno di vari pacchetti installati, i cosidetti prerequisiti, inoltre necessita di creare ed installare le pagine di man di eggs ed installare l’autocomplete di eggs stesso.

Per inizializzare eggs ed installare i pacchetti Debian necessari al suo funzionamento, basterà avviare il comando:

sudo eggs config

eggs-config

Lo stesso scopo ed ancora di più si ottiene con il comando:

1
sudo eggs dad -d

che, non solo configurerà automaticamente eggs, pulirà eventuali dati precedenti e consentirà direttamente di ottenere una iso del nostro sistema.

Questo comando installa i pacchetti necessari per eggs - se non sono stati già installati dagli script di preinstallazione del pacchetto deb - e crea la configurazione di eggs nella directory /etc/penguins-eggs.d.

Selezionando Yes verrà accettata l’installazione dei pacchetti e la creazione della directory di configurazione.

Essenzialmente possiamo dividere i pacchetti da cui eggs dipende, in:

pacchetti comuni #

Questi pacchetto sono i prerequisiti di eggs per tutte le versioni installate.

  • cryptsetup
  • dosfstools
  • dpkg-dev
  • isolinux
  • live-boot
  • live-boot-initramfs
  • lvm2
  • net-tools
  • parted
  • rsync
  • squashfs-tools
  • whois
  • xorriso

pacchetti dipendenti dalla architettura #

A seconda della architettura sulla quale eggs è installato verranno selezionati differenti pacchetti. Le architetture possono essere: i386, amd64, armel ed arm64:

  • syslinux: i386 / amd64;
  • systlinux-efi: armel / amd64;

pacchetti dipendenti dalla versione #

Questi pacchetti sono specifici della versione in uso. si noti che mentre è relativamente semplice cambiare il nome della distribuzione, non è affatto lo stesso per quanto riguarda la versione che è univoca.

Le versioni gestite da eggs sono: jessie, stretch, buster, bullsyes, bionic, focal, hirsute e beowulf.

Per alcune distribuzioni come linuxmint, ufficiozero ed altre che pur essendo delle derivate utilizzano dei nomi di versione diversi, sono ricondotte alla versione originale, così ad esempio linuxmint uma viene configurato come Ubuntu focal, mentre linuxmint tricia viene configurato come Ubuntu bionic.

  • live-config: jessie, stretch, buster, bullseye, focal, groovy, hirsute
  • live-config-systemd: jessie, stretch, buster, bullseye, focal, groovy, hirsute
  • live-config-sysvinit: beowulf
  • open-infrastructure-system-config: bionic

pacchetti dipendenti dal tipo di init #

Abbiamo bisogno di questo tipo di pacchetti, perchè alcune derivate di Debian buster - principalmente MX Linux - utilizzano sysvinit come init al posto di systemd anche se sono contraddistinte dalla stessa versione: buster.

  • live-config-sysvinit sysvinit

Mentre i pacchetti comuni e quelli dipendenti dalla architettura sono sempre installati automaticamente dagli script di preinstallazione, non è così per i pacchetti che dipendono dalla versione o dal tipo di inizializzazione. Per questi pacchetti è necessario il comando eggs config.

Nota: I pacchetti per l’installer grafico calamares, non essendo indispensabili per la creazione della iso, non vengono installati automaticamente, semplicemente vengono proposti se force_installer: true durante la creazione della iso.

Potete comunque sempre installare calamares con il comando:

  • sudo eggs calamares --install

Directory di configurazione penguins-eggs.d #

Normalmente non è necessario intervenire su /etc/penguins-eggs.d/eggs.yaml, eggs si autoconfigura adattandosi alle necessita del sistema presente.

Mi preme però sottolineare che editando /etc/penguins-eggs.d/eggs.yaml si possono modificare tutti i default di eggs, anche quelli non inclusi in eggs dad.

Se avete scelto di non toccare /etc/penguins-eggs.d/eggs.yaml, si ricorda che per default eggs è configurato con user live e password evolution e che la medesima password è impostata anche per il login di root.

Se invece lo avete modificato, rovinato o cancellato il file di configurazione, potete sempre rimuovere la configurazione stessa rm /etc/penguins-eggs -rf e ripristinarla con il comando sudo eggs config oppure, semplicemente con eggs dad -c che vi proporrà una nuova configurazione custom o eggs dad -d che configurò eggs con i default preimpostati.

eggs è pronto! #

Bene, siamo finalmente pronti ad utilizzare eggs per la riproduzione del nostro pinguino.

Avete più alternative per cominciare:

  • la prima è quella di utilizzare il comando eggs mom per avere un menu interattivo dei comandi di eggs ed esplorarne i contenuti;
  • la seconda è quella di lanciare direttamente sudo eggs dad che vi permetterà di variare alcuni parametri importanti, risparmiandovi la configurazione del file /etc/penguins-eggs.d/eggs.yaml e vi porterà direttamente alla creazione della iso;
  • infine, la terza è utilizzare direttamente la riga di comando come allevatori maturi lanciando sudo eggs produce ed eventualmente impostando i vari paramentri.

Consiglio il primo e secondo approccio per un utilizzo immediato o per utilizzatori saltuari. Il terzo verrà da sè dopo aver acquisito un minimo di esperienza con il tool stesso.


I comandi di eggs #

eggs necessita dei diritti di root, quindi - tranne per eggs mom, eggs info ed i comandi di esportazione - DEVE essere chiamato preceduto da sudo

  • adapte
  • calamares
  • config
  • dad
  • export
  • help
  • info
  • install | krill
  • kill
  • mom
  • produce
  • remove
  • tools
  • update

Non vi fate spaventare da questi pochi comandi, quelli che utilizzerete sono essenzialmente: produce per creare la iso, kill per cancellarla ed install per installarla.

Ogni comando può avere alcuni flag. Alcuni sono comuni a tutti i comandi: –verbose ed –help. Naturalmente –verbose genera mostrerà una descrizione delle operazioni più dettagliata mentre –help o -h visualizzerà una breve descrizione del comando indicato.

Tra i vari comandi produce** è quello che presenta il maggior numero di opzioni. Ad esempio uno dei flag più importanti ed utilizzati di produce è -f o –fast che consentirà ad eggs di utilizzare come algoritmo di compressione lz4 invece della compressione di default xz permettendovi così di risparmiare non poco tempo durante le fasi di sviluppo della vestra remix. Sempre in produce è presente il flag –backup che consente di avere il backup completo del proprio sistema invece della sola live.

Andiamo ad illustrare i comandi in rigoroso ordine alfabetico, per comodità dello scrivente. Tenete sempre a mente che i comandi che utilizzerete normalmente saranno soprattutto produce e kill.

eggs adapt #

Adatta il video alle alla grandezza della finestra di una macchina virtuale. Lo trovo molto comodo per ridimensionare le macchine virtuali con interfacce grafiche diverse da cinnamon, gnome3, e kde per la quali non è necessario. In pratica eggs richiama xrandr per adattare lo schermo alla risoluzione corrente. Non è strettamente relato alla produzione di ISO, è però indispensabile nello sviluppo specie per un forte miope come il sottoscritto.

sudo eggs calamares #

Installa e configura l’installatore grafico calamares. Può essere utilizzato anche per configurare una iso che - prodotta senza calamares - la si voglia installare con esso. Basterà dare il comando: sudo eggs calamares -i e si avrà sia l’installazione del pacchetto che la sua configurazione.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
command: calamares

USAGE
$ eggs calamares

OPTIONS
-h, --help show CLI help
-i, --install install calamares and it's dependencies
-v, --verbose

--final final: remove eggs prerequisites, calamares and all it's
dependencies

--theme=theme theme/b,randing for eggs and calamares

EXAMPLES
~$ sudo eggs calamares
install calamares and create configuration

sudo eggs config #

Si occupa della inizializzazione di eggs, creazione delle pagine di manuale, creazione dell’autocomplete, creazione dei file di configurazione ed installazione dei pacchetti debian necessari. Alcune funzionalità, nel pacchetto di eggs in formato .deb, sono state sostituite dalla dipendenze o vengono direttamente predisposte dagli script di pre e post installazione. Per questo, in caso di pacchetto debian, il suo utilizzo è limitato al controllo ed installazione solo dei pacchetti di dipendenze legati alla versione ed alla architettura.

Nel caso però, si stia installando eggs con il pacchetto npm, la prima configurazione della procedura può essere anche relativamente lunga, essendo necessario aggiornare apt, scaricare i pacchetti necessari e, quindi, procedere con il resto.

Successivamente, però, una volta che i pacchetti dei prerequisiti sono installati, diventa istantanea e lo si può utilizzare sovente, per ricreare i file di configurazione. Allo scopo si rimuove la directory di configurazione di eggs. sudo rm /etc/penguins-eggs.d -rf e, quindi si avvia sudo eggs config.

La configurazione può essere fatta anche con il comando eggs dad -c|-d che rende la stessa più veloce offrendo anche alla possibilità di generare la iso immediatamente:

1
sudo eggs dad -c

che permette di modificare la configurazione dei parametri generali, oppure

1
sudo eggs dad -d

per una configurazione completamente automatica.

Questi comandi possono essere utili sia nel caso di file di configurazione danneggiati o vetusti rispetto alla versione corrente di eggs oppure, ad esempio, per un aggiornamento del kernel con relativa rimozione delle versioni vetuste.

sudo eggs dad #

Chiedi a papà come generare la tua iso!

Questo comando riassume in forma essenziale, i task necessari a produrre una iso del sistema con eggs. Analizza la presenza o meno della configurazione, i pacchetti installati e, quindi fornisce la possibilità di configurare un prefisso alla vostra iso, il suo nome, il nome utente live e la sua password, la password di root sempre per il liveCD, il tipo di compressione e l’eventuale tema da utilizzare. Questi dati vengono salvati e prelevati dal suddetto file di configurazione eggs.yaml, per cui una volta configurati saranno utilizzati come default per tutte le operazioni successive.

1
2
3
4
5
6
7
8
9
10
ask help from daddy (gui interface)!

USAGE
$ eggs dad

OPTIONS
-c, --clean remove old configuration before to create
-d, --default remove old configuration and force default
-h, --help show CLI help
-v, --verbose

eggs export #

L’esportazione delle iso generate avviene a seconda dei parametri inseriti in /etc/penguins-eggs.d/tools.yaml. Potete liberamente modificare questo file per adattarlo alle vostre esigenze.

Nel mio caso, utilizzo una stazione di lavoro con Proxmox VE e delle macchine virtuali, ho dovuto definire un remoteHost, remoteUser, etc per ogni tipologia di esportazione, nel mio caso esporto di volta in volta:

  • pacchetti Debian
  • documentazione sorgente
  • immagini iso

Naturalmente, nel caso siate facendo la riproduzione direttamente sul sistema e non di una macchina virtuale, avrete tutto nello stesso disco ed il problema non si pone. In questo caso i comandi di esportazione rimarranno inutilizzati, a meno di configurare come remoteHost 127.0.0.1 ed utilizzare a forza scp per la copia in locale.

1
2
3
4
5
6
7
8
9
export package eggs-v8-0-x-1.deb in the destination host

USAGE
$ eggs export:COMMAND

COMMANDS
export:deb export package eggs-v8-0-x-1.deb in the destination host
export:docs export docType documentation of the sources in the destination host
export:iso export iso in the destination host

eggs export:deb #

Esporta i pacchetti deb. Notate che questo comando è utilizzato esclusivamente per lo sviluppo di eggs.

eggs export:docs #

esporta la documentazione. Notate che questo comando è utilizzato esclusivamente per lo sviluppo di eggs.

eggs export:iso #

esporta l’immagine iso. Utilizza root come nome dell’utente remoto.

Potete modificare a piacere sia l’host di esportazione che il path associato nel file tools.yaml.

eggs help #

Come dice il comando stesso genera la lista dei comandi disponibili. A sua volta ogni comando con il flag -h o –help emette usa sua descrizione.

eggs-commands

Questo è l’esempio di eggs help calamares.

eggs-help-calamares

eggs info #

Mostra a video la configurazione di eggs e del sistema.

eggs-info

Da notare sulla destra la presenza di bottoni rossi, che possono indicare problemi con le dipendenze, configurazione, etc.

sudo eggs install| krill #

Lancia l’installaler del sistema operativo. Se calamares è installato, lancerà l’installer grafico calamares. Se desiderate comunque avviare l’installer krill basta però aggiungere il flag –cli al comando per forzare l’utilizzo di krill:

1
sudo eggs install --cli

Questo è, invece il risultato di ‘’’sudo eggs install –help’’’

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
eggs installer - (the egg became penguin)

USAGE
$ eggs install

OPTIONS
-c, --cli force use CLI installer
-h, --help show CLI help
-v, --verbose verbose

ALIASES
$ eggs hatch
$ eggs krill

EXAMPLE
$ eggs install
Install the system with eggs cli installer(default)

Presentazione di krill (eggs install –cli) #

Lo scopo di krill non è quello di entrare in concorrenza con un progetto molto più ampio come calamares, piuttosto quello di affiancarlo in ambiti dove la potenza e la sofisticazione di calamares non sono disponibili. Ad esempio in ambito server dove spesso manca l’interfaccia grafica o in caso di sistemi desktop nei quali non sia possibile utilizzare calamares perchè non disponibile, come per le versioni di Debian jessie e stretch.

Potete, infine, utilizzare krill su macchine desktop leggere con 2 GB di RAM o meno, nelle quali l’installazione con krill risulterà probabilmente più veloce.

In tutti gli altri casi è conveniente e consigliato utilizzare calamares che offre molte più possibilità.

Vi è però una eccezione - attualmente, a questo schema generale - ed è la necessità utilizzare krill per ripristinare i backup criptati fatti con eggs. In questo caso l’utilizzo di krill è attualmente indispensabile. In futuro scriverò un apposito modulo per calamares per il restore dei dati.

Utilizzate quindi krill solo quando è necessario ed opportuno e, sono abbastanza casi: distribuzioni cli, distribuzioni basate su jessie o stretch ed infine in sede di installazione con macchine con meno di 2GB di RAM, per gli altri casi è preferibile utilizzare calamares.

Interfaccia di krill #

krill è stato pensato per essere il più possibile simile ad un installer GUI anche se è un installer a riga di comando. La sua realizzazione è stata possibile grazie all’utilizzo di react in ambito CLI.

Già dal nome che identifica dei piccoli crostacei diffusi ai poli, prende spunto dal ben più famoso installer grafico calamares e ne ricalca sostanzialmente lo stesso schema visuale.

Abbiamo una finestra principale che è suddivisa sulla sinistra con i vari passi della procedura, mentre le varie tab: welcome, location, keyboard, partitions, users, network, summary ed installation aprono, ognuna, i propri form per la visualizzazione o l’immissione e modifica dei dati necessari.

L’insieme è ordinato e cerca di ricordare calamares, ma in fondo anche ubiquity - ben più blasonati installer e, questo per un semplice installer CLI è già molto.

Naturalmente siamo in ambiente CLI e, quindi, niente mouse ma esclusivamente tastiera, utilizzando però i tasti di direzione ed invio.

Per l’introduzione dei dati verrà utilizzata la parte sottostante dove andremo ad immettere o selezionare i nostri dati ed avanzeremo accettando i valori immessi,

Si procederà quindi da welcome sino a summary ed una volta accettate le scelte in summary partirà la nostra installazione.

Nota: in attesa che scriva un apposito modulo per calamares per il restore dei dati creato da eggs, l’installazione con l’installer krill al momento è indispensabile per il restore automatico dei backup realizzati con eggs.

krill; i vari passi dell’installazione #

L’installazione con krill procede attraverso alcuni step, comuni a calamares ed aventi la stessa denominazione, che conducono sino alla schermata finale ed alla richiesta di riavvio.

krill welcome #

welcome è la prima schermata di krill ed è il posto dove potremo cambiare la lingua. Disporremo solo delle lingue incluse nella nostra iso, per cui normalmente accetteremo il default.

welcome

krill location #

In location potremo selezionare e variare la nostra area geografica e la nostra zona per l’impostazione del fuso orario. Le aree e le zone sono complete, non è così per le lingue che non verranno neppure proposte (vengno preselezionate dall’impostazione della lingua in welcome).

location

krill keyboard #

Stiamo trattando di un programma per l’installazione a misura per le nostre customizzazioni, quindi, se vogliamo avere altre lingue, dobbiamo ricordarci di aggiungerle attraverso dpkg-reconfigure locales. krill permetterà la selezione solo delle lingue già presenti ed, per il momento, non è un dramma per lo scopo di questo installer. Anche se non è escluso che in futuro faremo di meglio.

keyboard

krill partition #

In partitions il discorso si fa più ampio. krill vuole un dispositivo sul quale installare il nostro sistema. L’installazione con krill cancellerà il dispositivo in questione, non è possibile partizionare manualmente il disco.

La prima cosa che krill riporta nella schermata è che cancellerà completamente il disco di destinazione, meglio essere chiari. Subito dopo ci mostra se siamo su un sistema con boot BIOS o UEFI.

In questa schermata pure sono presenti quattro campi, tutti selezionabili:

  • installation device: /dev/sda
  • installation mode: standard
  • filesystem: ext4
  • user swap choice: small

E’ quindi possibile selezionare un dispositivo che krill rileverà tra quelli disponibili, una modalità di installazione - al momento solo la modalità standard, ma sto lavorando per la full-encrypts, la formattazione del filesystem e la grandezza della partizione di swap.

Sarà però krill a decidere come partizionare il device a seconda del tipo di boot e dell’installazione scelta, non è possibile per ora utilizzare uno schema di partizioni manuale.

partitions

krill users #

In questo form users andrà indicato l’utente principale del sistema, la sua password, la conferma della stessa e l’eventuale utilizzo dell’autologin; password e conferma per l’utente di root ed, infine, il nome dell’host.

users

krill network #

In network è possibile scegliere l’interfaccia di rete tra quelle disponibili e selezionare per essa la modalità tra dhcp e static. Nel caso di static si potranno impostare indirizzo ip, la netmask, il gateway, domain e dns.

network

krill summary #

summary è un semplice riepilogo delle varie scelte effettuate, permette un rapido controllo visivo ed attende per una conferma o una rinuncia.

summary

krill installation #

Dopo aver accettato la finestra summary, parte l’installazione del sistema. In installation avremo la possibiità di seguire passo - passo le varie fasi dell’installazione sino al passaggio alla fase finale.

installation

krill finish #

finish è una semplice schermata che ci notifica la fine della installazione e la necessità di un riavvio.

finish

sudo eggs kill #

Cancella le immagini realizzate e la directory di lavoro di eggs.

Nota: in caso per interruzione del comando produce, sarà impossibile cancellare le directory montate. La strada più breve è dare un riavvio e lanciare nuovamente il comando sudo eggs kill.

1
2
3
4
5
6
7
8
9
10
11
12
kill the eggs/free the nest

USAGE
$ eggs kill

OPTIONS
-h, --help show CLI help
-v, --verbose verbose

EXAMPLE
$ eggs kill
kill the eggs/free the nest

eggs mom #

eggs mom è una interfaccia realizzata con whiptail, disponibile praticamente su ogni versione Linux che permette di avere una interfaccia simil grafica nella quale ho cercato di raggruppare tutti i comandi eggs.

Ho aggiunto anche della documentazione, sia locale, che remota in versione html e man, tra cui questo penguin’s eggs book.

mom main #

Una immagine vale più di mille parole, questa è la schermata iniziale di mom.png

mom-main

Dal menu principale si accede a tutti i comandi eggs ed ai sottomenu Documentation, Export e Tools.

mom Documentation #

In questo menù potete consultare sia il sito che i manuali, sia in formato html che man.

mom-documentation

Ecco ad esempio come risulta la schermata della pagina man di eggs in formato html, consultabile anche in assenza di connessione.

mom-ducumentation-man

Naturalmente se state operando su una stazione solo cli, avrete comunque disponibili le vostre informazioni in formato man.

mom export #

Da questo menu potete raggiungere tutti i comandi di esportazione:

  • eggs export:deb
  • eggs export:docs
  • eggs export:iso

mom-export

mom tools #

In tools troverete, ovviamente, tutti i gli strumenti di eggs, raccolti sotto eggs:tools.

eggs-mom-tools

Potete tornare indietro da ogni menù selezionando quit (basta premere il tasto “q” seguito da invio).

mom rappresenta una versatile guida per l’apprendimento di eggs ed un sicuro riferimento.

Naturalmente con il tempo ogni “pulcino” viene svezzato ed impara a camminare da solo e sarà più comodo immettere direttamente i comandi da terminale.

A questo proprosito ricordate che eggs presenta l’autocomplete dei comandi, quindi, ad esempio digitando:
sudo eggs [TAB][TAB]
vi verranno mostrati i possibili comandi;
sudo eggs i [TAB][TAB]
vi verranno mostrati solo i comandi che iniziano per i: info ed install;
‘’’sudo eggs produce –[TAB][TAB]```
vi verranno mostrati tutti i possibili flag del comando.
E così via discorrendo.

sudo eggs produce #

E’ questo il comando che più utilizzerete.

Sostanzialmente produce è l’unico comando usato quotidianamente, insieme a kill che ci consente di sbarazzarci delle immagini iso precedentemente create.

Usato senza parametri produce la iso con i parametri di default che sono quelli specificati con sudo eggs dad o impostati editanto il file /etc/penguins-eggs/eggs.yaml.

Al suo avvio produce esegue velocemente un controllo sulla corretta inizializzazione di eggs, quindi, produce la iso.

Presenta diversi flag utilizzabili:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
command: produce help

the system produce an egg: livecd creation.

USAGE
$ eggs produce

OPTIONS
-b, --backup backup mode
-f, --fast fast compression
-h, --help show CLI help
-m, --max max compression
-n, --normal normal compression
-p, --prefix=prefix prefix
-s, --script script mode. Generate scripts to manage iso build
-v, --verbose verbose
-y, --yolk -y force yolk renew
--addons=addons addons to be used: adapt, ichoice, pve, rsupport
--basename=basename basename
--release release: configure GUI installer to remove eggs and calamares after installation
--theme=theme theme for livecd, calamares branding and partitions

ALIASES
$ eggs spawn
$ eggs lay

EXAMPLES
$ sudo eggs produce
...

Di gran lunga la modalità d’uso che preferisco, per il mio lavoro è sudo eggs produce --fast --verbose --adapt

che mi consente si avere una veloce rimasterizzazione, osservare a video i vari comandi lanciati ed avere sul desktop del live il link per ridimensionare la finestra video della mia macchina virtuale.

Tra i flag disponibili c’è –theme che imposta il tema per eggs e calamares.

Potete creare un tema personalizzato semplicemente copiandone uno esistente e cambiandone nome e contenuto.

I temi di eggs sono in ./addons/${vendor}/theme.

I temi consentono una customizzazione di calamares e la possibilità di avere un proprio splashscreen durante l’avvio del liveCD sia per isolinux che per grub.

Un altro flag, importante per gli utenti che vogliono realizzare una distro è –final che predispone calamares alla rimozione dei programmi non necessari all’utente finale: esegue la stessa azione del comando eggs remove --sterilize, ma viene lanciato attraverso calamares durante l’installazione del sistema.

Un flag aggiunto di recente, ma piuttosto importante data la sua funzione è –backup che permette di fare il backup del sistema piuttosto che la creazione di una live a partire dalla nostra configurazione. Ne parleremo diffusamente nel prossimo paragrafo.

Utilizzo spesso anche il flag –addons per inserire sul desktop il link per adapt nelle iso realizzate.

eggs produce –backup #

Per molto tempo ho esitato ad aggiungere una modalità per il backup, non perchè fosse complicato, ma perchè temevo il caso che un utente possa inserire nella iso dei propri dati sensibili. Tuttavia, in seguito ad una discussione con un utente, al quale avrebbe fatto comodo per poter trasferire in toto i propri server, mi sono deciso ad aggiungerla ed, immediatamente, a modificarla facendola funzionare in modalità criptata.

Difatti eggs durante l’utilizzo normale esclude sempre dal filesystem della live l’intera cartella /home, inoltre, rimuove tutti gli account presenti sull’host, aggiungendo solo l’utente live.

Con l’opzione –backup però, pur continuando a funzonare esattamente nello stesso modo, eggs inserisce un nuovo passo all’interno della produzione della iso e prima della sua chiusura. In questa fase viene creato un volume cryptato denominato luks-users-data sul quale si andranno a copiare i dati di tutti gli utenti presenti ed i loro relativi account.

Questo consente quindi di distribuire la propria iso con una ragionevole sicurezza.

Sarà possibile accedere ai dati degli utenti solo se si è a conoscenza della chiave di accesso, che però non viene mai salvata ed è quindi non scopribile se non con attacchi brute force.

La live che, per chiarezza, prende il prefisso backup_ invece di egg_ si avvia normalmente con il solo utente live e non carica comunque in modalità live il volume criptato.

Però, nel caso di installazione, krill controlla la presenza del volume luks-users-data all’interno della immagine iso e, se lo rileva, viene richiesta la passphrase di accesso per montare tale volume e copiare i dati e gli account degli utenti nel sistema appena installato.

Riavviando il sistema, quindi, ci ritroveremo i nostri utenti ed i nostri dati presenti sulla nuova installazione.

Tutto questo, è possibile attualmente solo con l’installer krill. Utilizzando calamares invece, non venendo effettuato il controllo sulla eventuale esistenza dei dati degli utenti, verrà installato solo il sistema, con account ed /home vergine, proprio come succede per un “uovo” normale.

eggs tools #

Sono raccolti sotto tools degli strumenti accessori di eggs, non sono fondamentali, ma possono far comodo.

Abbiamo tools:clean che esegue la pulizia del sistema cancellando la cache apt e rotando i log, tools:skel che permette di configurare l’aspetto del desktop live e del desktop di default dei nuvi utenti e tools:yolk che aggiorna la repository inclusa in /usr/local/yolk che viene utilizzata da eggs per caricare i pacchetti indispensabili all’installazione in assenza di connessione internet.

1
2
3
4
5
6
7
8
9
10
clean system log, apt, etc

USAGE
$ eggs tools:COMMAND

COMMANDS
tools:clean clean system log, apt, etc
tools:locales install/clean locales
tools:skel update skel from home configuration
tools:yolk configure eggs to install

sudo eggs tools:clean #

1
2
3
4
5
6
7
8
clean system log, apt, etc

USAGE
$ eggs tools:clean

OPTIONS
-h, --help show CLI help
-v, --verbose verbose

sudo eggs toos:locales #

Questo comando reinstalla le locales definite in /etc/penguins-eggs.d/eggs.yaml.

1
2
3
4
5
6
7
8
9
10
11
command: tools:locales help

install/clean locales

USAGE
$ eggs tools:locales

OPTIONS
-h, --help show CLI help
-r, --reinstall reinstall locales
-v, --verbose verbose

sudo eggs tools:skel #

Con questo comando si ricrea la directory /etc/skel della nostra live.

E’ utile per dare una veste coerente e personalizzata all’utente della live ed ai futuri utenti che creeremo dopo che il nostro sistema sarà installato.

Essenzialmente copia le configurazioni dell’utente primario o di quello passato con il flag -u nella cartella /etc/skel che verrà quindi utilizzata per generare lo scheletro della home dei nuovi utenti creati (compreso l’utente della live che è di fatto un nuovo utente).

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
command: tools:skel help

update skel from home configuration

USAGE
$ eggs tools:skel

OPTIONS
-h, --help show CLI help
-u, --user=user user to be used
-v, --verbose

EXAMPLE
$ eggs skel --user mauro
desktop configuration of user mauro will get used as default

sudo eggs tools:yolk #

Il comando yolk crea una piccola repository locale in /usr/local/yolk con i pacchetti strettamente necessari ad assicurare l’installazione del sistema anche in assenza di connessione internet.

In assenza della repository locale che, ad esempio, viene cancellata da un aggiornamento di eggs, yolk viene automaticamente richiamato da produce. Inoltre, sempre in produce può con il flag –yolk se ne può forzare l’aggiornamento. La sua presenza di questo comando è quindi giustificata solo dalla comodità del suo utilizzo in sede di sviluppo.

1
2
3
4
5
6
7
8
9
10
11
12
13
command: tools:yolk help

configure eggs to install without internet

USAGE
$ eggs tools:yolk

OPTIONS
-h, --help show CLI help
-v, --verbose

EXAMPLE
$ eggs yolk -v

sudo eggs remove #

Questo comando resta valido solo per eggs installato come pacchetto npm. Se state utilizzando il pacchetto debian di eggs il metodo di rimozione consigliato è: sudo apt remove eggs oppure sudo apt purge eggs e, pertanto, questo comando non è necessario.

sudo eggs update #

Esegue l’aggiornamento del pacchetto eggs.

Ricerca e scarica le nuove versioni di eggs dal basket - nel caso di installazione con pacchetto debian - oppure dal repository npmjs.com nel caso di installazione tramite npm.

Questa è la schermata principale, dove viene mostrata la versione installata e le versioni disponibili su diversi canali: apt, npm e basket.

eggs-update-main

Mentre questa è la schermata per la selezione della versione di eggs all’interno del basket.

E’ possibile selezionare una qualsiasi delle ultime 4 versioni.
eggs-update-basket

Il basket o cestino delle uova è di gran lunga il metodo preferibile di aggiornamento, non richiede la presenza di eggs nel repository della distribuzione in uso ma ne permette comunque un facile e veloce aggiornamento. Inoltre, poichè il download di eggs avviene attraverso l’infrastruttura di sourgeforce.com è un sistema di download rapido e capillare in ogni area geografica.

Grazie al basket, quindi, non è indispensabile avere penguins-eggs nella repository della vostra distro.

Sempre con questo comando è possibile scaricare eggs da uno share condiviso sulla propria rete interna e questo metodo viene molto utilizzato durante lo sviluppo.

Creazione di una nostra remix #

La creazione di una nostra remix è un processo che richiede pazienza e passione ma può darci grandi soddisfazioni ed in molti casi, in ultima analisi, farci risparmiare tempo e fatica.

Scarichiamo la nostra distribuzione che intendiamo customizzare, scegliendo tra Debian buster, Debian bullseye, Devuan beowulf, ubuntu bionic, ubuntu focal e, da oggi, ubuntu groovy e derivate, tra cui naturalmente le nostre.

Installiamola normalmente, magari aggiorniamola e facciamo le nostre prime modifiche prima di passare alla creazione delle ISO.

Inizializzazione e prerequisiti #

Installiamo eggs, scaricandolo da sourceforge.

Il comando per l’installazione è il semplice:

1
sudo dpkg -i eggs_8.0.30-1_amd64.deb

probabilmente dovremo lanciare anche i seguenti comandi per installare le dipendenze:

1
2
sudo apt update
sudo apt install -f

Bene, a questo punto, siamo ad un solo passo dalla nostra prima immagine ISO.

1
sudo eggs dad -d

L’aiuto di papà ci farò risparmiare tempo e fatica, scaricando gli eventuali ulteriori pacchetti necessari ed impostando sui default la configurazione di eggs.

Alla fine del processo, ci verrà semplicemente richiesto se vogliamo creare la iso del sistema.

Selezionando Yes, dobbiamo solo attendere la costruzione della ISO.

Selezionando, invece No, avremo il sistema comunque configurato e pronto al lavoro.

Produzione della ISO #

Una volta installato eggs ed i suoi prerequisiti, siamo pronti al grande salto.

Consiglio di utilizzare il comando sudo eggs dad al primo approccio che ci guida alla configurazione ed alla creazione della iso.

Successivamente, si potrà utilizzare il più immediato sudo eggs produce

Con questo comando si avvia la costruzione dell’uovo di pinguino che consiste sostanzialmente in tre fasi:

  • creazione di una immagine del filesystem live montata con overlayfs - che è istantanea e senza alcuna copia dei dati - per permettere le modifiche per la realizzazione del filesystem per l’immagine;
  • compressione dell’intero filesystem in /home/eggs/ovarium/iso/live/filesystem.squashfs;
  • generazione dell’immagine iso dalla struttura precedente in /home/eggs/basename-X64_AAAA-MM-GG-HHMM.iso

Il processo ha una certa pesantezza - inutile nasconderlo - non ve la prendete ne’ con la copia del filesystem che non si effettua proprio e neppure con l’interfaccia grafica - visto che non se ne fa uso.

La pesantezza è data dal fatto che dobbiamo comprimere l’intero filesystem e risente molto dell’algoritmo usato.

Durante le prove quindi o quando lo riteniate opportuno, vi consiglio di usare produce con l’opzione -f o –fast. Facendo così si utilizzerà l’algoritmo di compressione lz4 invece del più “pesante” xz e si ridurrà notevolmente il tempo necessario alla compressione. Per la versione finale, una volta controllato che sia tutto a posto potremo comunque utilizzare la compressione di default per ottenere una iso più snella, oppure l’opzione -c –compress che comprime ancora un po’ di più, al prezzo di una ulteriore lentezza.

Inizialmente era riportato a video ma anche nel codice, il suggerimento è prendersi un caffè e cercare di riservare abbastanza potenza di elaborazione alla macchina. Nel mio caso - utilizzo normalmente delle macchine virtuali con 4 core e 4 GB di memoria - per un filesystem di 7/8 GB occorrono circa dieci minuti con la compressione xz, mentre utilizzando la compressione lz4 si riduce moltissimo l’attesa solo un minuto e mezzo.

Morale della favola

Per il caffè, quindi, non facciamo più in tempo, anche per una sigaretta stiamo stretti, poi fa male e l’immagine ottenuta passa a 3,0 GB a fronte dei 2.00 GB della compressione xz (Vedi nota).

Una sola raccomandazione. Normalmente si utilizza più volte questo comando sulla macchina dove si lavora e magari si è già prodotta una versione precedente. Raccomando di cancellare le immagini precedenti con il comando sudo eggs kill che rimuove l’intero albero di directory sotto /home/eggs.

Nota: Non tutto il male vien per nuocere però. Se consideriamo che attualmente i DVD si usano relativamente poco e le chiavette stanno diventando sempre più veloci, vi sono casi la nostra remix potrebbe essere risultare più ottimizzata con un filesystem più grande ma meno compresso! Difatti, tenuto conto che durante l’uso - nascosto ai nostri occhi - ci sarà un continuo processo di lettura e decompressione del filesystem, la decompressioone xz risulta comunque più lenta di quella lz4.

Tenendo pure presente che non esiste più il limite delle dimensioni delle immagini iso a 4 GB, la soluzione di utilizzare sempre lz4 potrebbe rivelarsi doppiamente vantaggiosa, soprattutto in caso di utilizzo con le macchine virtuali che - quasi sempre - leggono direttamente il file immagine su disco fisso invece di un reale DVD. Inoltre, tutti i principali programmi per la creazione di chiavette avviabili leggono i file iso.


Immagini ISO prodotte con eggs #

Non è mio scopo quello di realizzare una nuova distro, preferisco piuttosto costruire e mantenere il pacchetto e supportare chi si occupa di questo.

Però anche qua vale il detto: nasce prima l’uovo o la gallina?

E così alcune remix le faccio e continuo, impunentemente a proporle.

Immagini realizzate dall’autore #

Sono qui riportate una serie di remix realizzate da me stesso e create con Penguin’s eggs.

Immagini generiche #

In genere, anche per i test, onapero essenzialmente sulle varie versioni Debian da jessie a bullseye, Ubuntu focal e Devuan beowulf.

Amando però sia l’interfaccia cinnamon che linuxmint in particolare, sovente la rimasterizzo, così come pure deepin, neon ed altre. Se una distribuzioni mi sembra interessante, rimasterizzarla è anche un po’ il mio modo di analizzarla.

Però preferisco lasciare questo compito agli appassionati - mi verrebbe da scrivere ad allevatori competenti - che su una sola customizzazione mettono molto più lavoro ed ingegno. Normalmente più pazienti, competenti ed amorevoli del sottoscritto in questo contesto.

Una nota a parte meritano forse alcune remix “leggere”

Potrebbe essere interessante patricia-i386, un rifacimento di linux mint 19.3 tricia xfce, sufficientemente snella ed allo stesso tempo elegante da poter essere utilizzata su computer datati. Un’altra iso che interessante - sempre in questo ambito - è una particolare versione di Debian jessie denominata minino e derivata dal progetto GALPon MiniNo di cui in Spagna esiste tuttora una comunità attiva MiniNo TDE. La iso della mia versione di minino è all’interno della cartella di Debian jessie.

Immagini naked #

Però, forse, le vere “perle” prelevabili dal mio allevamento - sono le varie versioni naked delle principali versioni.

Una versione naked è sostanzialmente una versione “nuda” senza interfaccia grafica, solo i pacchetti di base e poco altro. Un netinstall per intenderci.

Praticamente una versione naked contiene il minimo indispensabile per la riproduzione.

A partire da queste immagini, ovviamente leggerissime, però si può fare di tutto e dare inizio all’evoluzione.

Possiamo installare pacchetti desktop oppure server e disporremo sempre e comunque di un completo sistema di riproduzione, che permette quindi anche di ritornare sui propri passi, sperimentare altre strade, etc. La riproducibilità del sistema è sempre assicurata dalla capacità di riproduzione e di installazione sia in ambiente CLI che in ambiente grafico.

User e password #

Tutte le remix create dal sottoscritto sono impostate con user live denominato live e password evolution valido sia per live che per root.

  • live/evolution
  • root/evolution

Scaricare eggs e le iso #

Tutte le versioni di eggs e le iso realizzate dall’autore sono scaricabili da sourgeforge.net cercando il progetto penguins-eggs.

Immagini iso realizzate da terzi #

Per un uso d’ufficio posso raccomandare UfficioZero, una serie di più distribuzioni derivate da Debian, Devuan, Ubuntu e Linuxmint tutte finalizzate ad un orientamento professionale.

Mentre per un utilizzo più ludico, una versione interessante e che posso raccomandare perchè la utilizzo tutti i giorni, anche per scrivere queste note, è senz’altro TeLOS una snella distribuzione proveniente dalla Grecia.

Nota: Se volete aggiungere le vostre produzioni potete contattarmi per includerle.

Supporto e segnalazioni #

eggs è un progetto che, al momento, consente di rimasterizzare diverse versioni di linux.

  • debian buster/bullseyes/stretch/jessie
  • devuan beowulf
  • ubuntu bionic/focal/groovy/hirsute

e la maggior parte delle derivate: deepin, linux mint lmde 4, netrunner-core, pop-os!, linux mint 19.x, 20.x, zorin, etc.

E’ evidente, che lo sviluppatore non può materialmente testare ogni release su tutte le versioni considerate.

E’ perciò importante che la segnalazione dei problemi provengano da parte degli utenti.

Potete segnalare le varie problematiche sulla pagina issue del progetto penguins-eggs su github.com.

Comunità #

Una comunità di utenti è fondamentale per la crescita di un progetto, creare qualcosa di versatile e pratico in fondo serve relativamente a poco se la gente non conosce il prodotto e, d’altra parte, avere un buon numero di utenti, fornisce feedback e motivazioni agli sviluppatori, migliorando quindi la qualità il progetto stesso.

Potete facilitare la diffusione di eggs e contribuire alla sua crescita in diversi modi:

  • iscriversi al gruppo facebook penguin’s eggs

  • contrassegnare con una stella il progetto su github.com;

  • valutare questo progetto su sourceforge e/o creare una review sulla pagina stessa pagina.

Naturalmente, anche sponsorizzare o finanziare lo sviluppo potrebbe essere una opportunità.

Ringraziamenti #

Se siete giunti fino a questo passo, senza l’ausilio del tasto di scorrimento rapido, avete utilizzato parte del Vostro tempo - risorsa preziosa - per seguirmi su questo percorso e, quindi, è mio dovere e - ancor di più desiderio - ringraziarvi per il vostro interesse.

Grazie a tutti e… happy hacking!

Per favore collaborate se potete al progetto, condividetelo e consigliatelo, è importante giungere ad una certa diffusione perchè il progetto resti valido ed aggiornato. Grazie.

Piero Proietti