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 diverse possibilità per l’installazione di eggs:

  • pacchetto precompilati
    • formato .deb per Debian/Devuan/Ubuntu
    • formato per manjaro
  • pacchetti npm
  • codice sorgente

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

Pacchetti debian

L’installazione da pacchetto Debian è molto semplice, abbiamo due possibilita:

  • installare la repository penguins-eggs-ppa ed utilizzare i comuni comandi apt, synaptic, etc.
  • scaricare manualmente il pacchetto eggs da sourceforge ed installarlp 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
curl -s --compressed "https://pieroproietti.github.io/penguins-eggs-ppa/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/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-9.0.10-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 sul vostro sistena è presente gdebi, potete tranquillamente effettuare l’installazione in modalità grafica.

Pacchetti manjaro

Ancora più semplice è l’installazione del pacchetto eggs precompilato su manjaro linux. penguins eggs è difatti incluso tra i pacchetti community di manjaro, quindi tutto quello che occorre è:

1
2
sudo pamac upgrade```
sudo pamac install penguins-eggs

Su manjaro è anche possibile testare le ultime novità installando direttamente il pacchetto di sviluppo. Esempio:

1
2
3
4
5
sudo pamac update
sudo pamac install base-devel
git clone https://guthub.com/pieroproietti/penguins-eggs
cd penguins-eggs
makepkg -sri

Pacchetti npm

Essendo eggs un software sviluppato con nodejs, la versione npm o quella in formato sorgente 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 ed npm. 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 precompilato è probabilmente meno testato nella modalità npm, pertanto è preferibile scaricare direttamente il sorgente. La versione di nodejs consigliata è nodejs > 16, su Debian conviene installarla a partire dalle indicazioni in nodesource mentre per manjaro troviamo già tutto nelle repository ufficiali.

Utilizzo di eggs da codice sorgente

Utilizzare eggs a partire dai sorgenti può essere estremamente utile sia per debug che per modificare eggs stesso. Può anche garantire una maggiore sicurezza in caso di dubbi, vedrere il codice che sta girando sulla vostra macchina e, col tempo, sarete capaci di modivicarlo.

E’ necessario installare a priori l pacchetti nodejs ed npm. Su mangiaro, basterà avviare

1
sudo pamac install nodejs npm devel-base

Quindi procediamo a scaricare il sorgente con il comando:

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

si entre nella directory penguins-eggs cd penguins-eggs e si immette:

1
npm install

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

1
sudo ./eggs produce --fast --verbose

Nota: Potete constatare che l’unica differenza d’uso rispetto ai pacchetti precompilati è 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).


eggs, autocomplete, pagina man ed aiuto

Una volta installato il pacchetto disporremo, sul nostro sistema, di un nuovo comando:

1
eggs

man-eggs

Se avete già chiuso e riaperto la finestra del terminale, potrete incominciare ad apprezzare anche l’autocomple: digitanto eggs e premento TAB, vi appariranno i vari comandi disponibile, immesso il comando e dando TAB appariranno i flags supportati dal comando stesso.

Inoltre, come ogni applicazione CLI che si rispetti, viene fornito di una apposita pagina man sempre a vostra disposizione:

1
man eggs

man-eggs

Di più, una pagina di aiuto è disponibile per tutti i comandi CLI, tuttavia non c’è pulcino che non abbia la propria mamma a cui chiedere aiuto! Diamo il comando:

1
eggs mom

eggs-mom

E la mamma ci mette a disposizione una interfaccia interattiva per accompagnarci nei primi passi.


La configurazione di eggs

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 assicurarsi che siano presenti i pacchetti necessari al suo funzionamento - che saranno installati dalle repository della distribuzione in uso - viene utilizzato il comando sudo eggs config. Alcuni pacchetti sono già compresi nelle dipendenze del pacchetto precomplilato, nel caso invece si stia utilizzando eggs da sorgente o da pacchetto npm verranno installati in questa fase. Una notevole eccezione è il pacchetto dell’installatore grafico calamares che non viene comunque installato come prerequisito, poichè eggs può comunque installare il sistema con l’installer a linea di comando.

1
sudo eggs config

eggs-config

In alcuni casi, per ottenere una configurazione pulita, conviene aggiungere il flag –clean che comporta la preventiva rimozione della configurazione precedente.

1
sudo config --clean

sudo config dad –default

Come ogni pulcino non ha un solo genitore, oltre alla mamma non poteva mancare il papà! Avete difficoltà ad editare i file di configurazione in yaml di eggs? Niente paura, papà ci accompagna e può dare una mano!

1
sudo eggs dad --default

Non solo configurerà automaticamente eggs, ma pulirà eventuali dati precedenti e ci proporrà addirittura di ottenere direttamente una veloce iso del nostro sistema, come “assaggio”!

Questo comando crea o ricrea la configurazione di eggs nella directory /etc/penguins-eggs.d.

eggs-dad-default

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

  • adapt
  • autocomplete
  • bro
  • calamares
  • config
  • dad
  • help
  • info
  • install | krill
  • kill
  • mom
  • produce
  • remove
  • update
  • version

Non vi fate spaventare da questi pochi comandi, quelli che utilizzeremo sono essenzialmente due: produce per creare la iso, kill per cancellarla.

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

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 zsd invece della compressione di default xz permettendovi così di risparmiare non poco tempo durante le fasi di sviluppo e test. 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.

eggs autocomplete

Produce i file eggs.bash ed _eggs per il funzionamento dell’autocomplete di bash e zsh. Normalmente non è necessario utilizzarlo, perchè o in fase di installazione o di configurazione, l’autocomplete viene configurato direttamente.

eggs bro

Al momento avvia un rudimentale helper per la gestione di Waydroid - sarà potenziato successivamente. Potrebbe anche cambiare in futuro, sia con la nascita di ulteriori fratelli: nel qual caso bisognerà chiamarlo per nome, sia dedicando il comando stesso ad altri scopi.

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 –install e si avrà sia l’installazione del pacchetto, la sua configurazione e la configurazione di calamares per l’utilizzo senza necessità di inserire la password.

eggs-calamares-help

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 pure con il comando eggs dad -c|-d che, in caso di non presenza dei file di configurazione, richiama il comando eggs config, quindi esegue una configurazione di defailt e passa direttamente alla generazione della iso:

1
sudo eggs dad --clean --default

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.

eggs-dad-default

eggs export

Questo è un comando che, alla stragrande maggioranza degli utenti, non serve! Non fa altro che generare a partire dai parametri di configurazione, quali iso cancellare ed esportare nell’host. Mi spiego, durante la scrittura di eggs, sono costretto a generare una moltitudine di immagini iso a partire da macchine virtuali, ed ad esportarle sulla mia stazione di lavoro. Per farlo utilizzo il comando scp, tuttavia digitare continuamente il comando e cancellare tutte le iso, della stessa versione precedenti, era - diciamo così - fastidioso. Allo scopo, ho ideato questo comando.

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.

eggs-export-iso

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. 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

Ad esempio:

1
eggs help calamares

eggs-commands

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.

eggs-install-calamares

Se desiderate comunque avviare l’installer krill basta però aggiungere il flag –cli al comando per forzare l’utilizzo di krill:

eggs-install-cli

1
sudo eggs install --help

Questo è, invece il risultato di sudo eggs install --help

eggs-install-help

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 disponibili o necessari, 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: installazioni cli, sistemi basate su Debian jessie o Debian stretch, infine installazioni su macchine con meno di 2GB di RAM. Per tutti 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.

eggs-krill-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).

eggs-krill-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.

eggs-krill-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.

eggs krill 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.

eggs krill 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.

eggs krill 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.

eggs krill finished

sudo eggs kill

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

eggs kill

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.

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.

eggs-mom

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

eggs mom documentation man

Attenzione: per gli utenti manjaro, non sono riuscito a trovare un equivalente di sensible_browser che utilizzo in DEBIAN per individuare il browser di default installato. Se qualcuno ha un suggerimento, sarà gradito.

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

eggs 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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
the system produce an egg: iso image of your system

USAGE
$ eggs produce [-p <value>] [--basename <value>] [-b] [-f] [-n] [-m] [-v] [-y] [-s]
[-h] [--theme <value>] [--addons <value>] [--release]

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

DESCRIPTION
the system produce an egg: iso image of your system

ALIASES
$ eggs spawn
$ eggs lay

EXAMPLES
$ sudo eggs produce
produce an ISO called [hostname]-[arch]-YYYY-MM-DD_HHMM.iso, compressed xz (standard compression).
If hostname=ugo and arch=i386 ugo-x86-2020-08-25_1215.iso

$ sudo eggs produce -v
same as previuos, but with --verbose output

$ sudo eggs produce -vf
same as previuos, compression zstd, lz4 or gzip (depend from system capability)

$ sudo eggs produce -vm
same as previuos, compression xz -Xbcj x86 (max compression, about 10%
more compressed)

$ sudo eggs produce -vf --basename leo --theme debian --addons adapt
produce an ISO called leo-i386-2020-08-25_1215.iso compression fast,
using Debian theme and link to adapt

$ sudo eggs produce -v --basename leo --theme debian --addons rsupport
produce an ISO called leo-i386-2020-08-25_1215.iso compression xz,
using Debian theme and link to dwagent

$ sudo eggs produce -v --basename leo --rsupport
produce an ISO called leo-i386-2020-08-25_1215.iso compression xz, using eggs
theme and link to dwagent

$ sudo eggs produce -vs --basename leo --rsupport
produce scripts to build an ISO as the previus example. Scripts can be found
in /home/eggs/ovarium and you can customize all you need

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 grub ed isolinux sull’immagine iso e per l’installer GUI calamares.

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

I temi di eggs sono in ./addons/${vendor}/theme. Dove vendor è il nome da passare al flag –theme.

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

Un altro flag, importante per gli utenti che vogliono realizzare una distro è –release che indica a calamares di disinstallarsi alla fine del processo di installazione, poichè non più necessario.

Un flag tuttora sperimentale, 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 o altri links 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 in modalità modalità criptata con un volume LUKS interno alla iso stessa.

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.

eggs tools

sudo eggs tools:clean

Rimuove la cache di apt, esegue il logrotate, etc

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).

eggs tools skel help

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.

eggs tools yolk

Nota: Non disponibile/non applicabile per manjaro linux

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.

Nota: Non disponibile/non applicabile per manjaro linux

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.

Nota: Non disponibile/non applicabile per manjaro linux

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/focal/groovy/impish, manjaro qonos e derivate, tra cui naturalmente le nostre.

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

Inizializzazione e prerequisiti

Installiamo eggs, con uno dei metodi descritti in precedenza a seconda della nostra versione di Linux.

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 distribuzione Linux, preferisco piuttosto costruire e mantenere il pacchetto e supportare chi - con passione - si occupa di tale attività.

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

E così, alcune remix le faccio comunque 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, utilizzo essenzialmente Debian in genere la stable, Ubuntu focal, Devuan beowulf e manjaro quonos.

Amando però sia l’interfaccia Cinnamon che Linuxmint in particolare, sovente la rimasterizzo, così come pure deepin, KDE neon ed altre. Se una distribuzioni mi sembra interessante, cercare di riprodurla è 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 alcuni casi:

  • bookworm-kde-waydroid

volevo assistere gli sviluppatori per la creazione di una distribuzione che utilizzasse waydroid e, quindi, Android come interfaccia grafica. Per fare questo ho creato questa remix, che pur essendo basata su KDE plasma non prevede desktop manager, essenzialmente per ragioni pratiche: è stato il modo per eliminare tutte le dipendenze a X11 che confondevano non poco, dovendo utilizzare esclusivamente wayland.

  • remix “leggere”

Potrebbe essere interessante anche 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 potrebbe interessare - 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 alcuna interfaccia grafica. Solo i pacchetti di base e poco altro, un netinstall per intenderci.

Però una versione naked contiene comunque il minimo indispensabile per la riproduzione.

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

Possiamo installarci 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.

A breve, dovrebbe uscire una versione basata su Ubuntu con interfaccia Android di cui, non posso al momento, anticipare i tempi.

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 bullseyes/buster/stretch/jessie/bookworm
  • Devuan beowulf/chimaera
  • manjaro qonos
  • Ubuntu focal/groovy/hirsute/impish/bionic

e la maggior parte delle derivate, ne cito solo alcune: deepin, linux mint, lmde 4, KDE neon, pop-os!, 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

Appendice

dipendenze di eggs per Debian/Devian/Ubuntu

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

dipendenze di eggs per manjaro linux

  • manjaro-tools-iso
  • nodejs
  • python
  • xdg-utils
  • arch-install-scripts
  • erofs-utils
  • mtools
  • syslinux
  • bash-completion

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 --clean che vi proporrà una nuova configurazione custom o eggs dad --default che configurò eggs con i default preimpostati.