Eggs users' guide
In case of problems with translation links, You can consult a detailed README in English on the repository.
Manuale aggiornato a eggs v10.0.x
Introduzione
penguins' 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
, 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 penguins-eggs
:
- pacchetto precompilati
- formato .deb per Debian/Devuan/Ubuntu
- formato PKGBUILD per
Arch Linux
e Manjaro
- pacchetti npm: non più utilizzati
- codice sorgente
Per la maggior parte degli utenti l'installazione del pacchetto precompilato è quella più indicata.
Pacchetti .deb
I pacchetti .deb sono disponibili per tutte le distribuzioni originali e deridate da: Debian
, Devuan
ed Ubuntu
.
Note: Dalla versione 10.0.x sto utilizzando un diverso metodo per pacchetizzare penguins-eggs: nodejs non è più incluso nel pacchetto come in precedenza, ma dipende dalla disponibilità di nodejs>18 tra i pacchetti disponibili nelle repositories.
Tutto cià è configurato nel pacchetto penguins-eggs, che attualmente richiede nodejs (>= 18), nel suo fileDEBIAN/control.
Non tutte le distribuzioni e derivate, però hanno di defailt nodejs >=18 disponibile, nelle lore repository originali.
Per installare penguins-eggs, dovremo aggiungere le repository nodesource per nodejs 18 o migliore.
sudo apt-get install -y curl
curl -fsSL https://deb.nodesource.com/setup_18.x -o nodesource_setup.sh
sudo -E bash nodesource_setup.sh
A questo punto, saremo pronti per installare penguins-eggs al nostro sistema.
Se non desiderate includere penguins-eggs-ppa fra le repository del vostro sistema, potete semplicemente scaricare l'ultima versione di eggs dal sito di sourceforge ed installarla con il comando:
sudo dpkg -i penguins_eggs-10.0.x.deb
Se si tratta della prima installazione, il pacchetto non verrà installato per la mancanza delle dipendenze. Per concludere l'installazione vi basterà dare il comando:
sudo apt install -f
Naturalmente se sul vostro sistena è presente gdebi
, potete tranquillamente effettuare l'installazione in modalità grafica.
Una volta installato il pacchetto, si può utilizzare il comando eggs tools ppa --add
per aggiungere la repository penguins-eggs-ppa
ed ottenere tutti gli aggiornmenti di eggs tramite il comando apt
. Per fare questo è sufficiente dare il comando:
sudo eggs tools ppa --add
Arch
Utilizzando Chaotic-AUR
penguins-eggs e calamares non sono presenti nelle repository standard di Arch, mentre è presente nella repository chaotic-AUS, tutto quello che dobbiamo fare è configurarla:
pacman-key --recv-key FBA220DFC880C036 --keyserver keyserver.ubuntu.com
pacman-key --lsign-key FBA220DFC880C036
pacman -U 'https://cdn-mirror.chaotic.cx/chaotic-aur/chaotic-keyring.pkg.tar.zst' 'https://cdn-mirror.chaotic.cx/chaotic-aur/chaotic-mirrorlist.pkg.tar.zst'
A questo punto, aggiungiamo alla fine di /etc/pacman.conf
il seguente testo:
[chaotic-aur]
Include = /etc/pacman.d/chaotic-mirrorlist
A questo punto possiamo installare penguins-eggs con il comando: sudo pacman -Sy penguins-eggs
Utilizzando yay
Su Arch
potete usare yay
per installare eggs
:
yay penguins-eggs
oppure, più tradizionalmente:
git clone https://aur.archlinux.org/penguins-eggs.git penguins-eggs-aur
cd penguins-eggs-aur
pkgbuild -si
Calamares on Arch Linux
Se abbiamo installato Chaotic-AUR, abbiamo a disposizione anche calamares e possiamo procedere con pacman o con sudo eggs calamares --install
.
installare calamares con yay
E' possibile installare calamares
con yay, tuttavia - al momento - c'è un problema sul pacchetto ckbcomp
,
così per installare Calamares
, dovete fare questo piccolo workaround:
git clone https://github.com/pieroproietti/penguins-eggs-pkgbuilds
cd penguins-eggs-pkgbuilds/aur/ckbcomp
makepkg -si
Installato ckbcomp
, potete tranquillamente installare calamares utilizzando yay
:
yay calamares
Manjaro
Su Manjaro, penguins-eggs
è presente nella repository community di Manjaro, per cui possiamo sia installare penguins-eggs
con i comandi:
sudo pamac upgrade
sudo pamac install penguins-eggs
Sia installare calamares
direttamente da eggs
con il comando:
sudo eggs calamares --install
package npm
Essendo eggs
un software sviluppato con nodejs
, esiste la possibilità di installare penguins-eggs
direttamente come pacchetto npm
.
Però, poichè i pacchetti npm
necessitano comunque dei pacchetti delle dipendenze, pur se inizialmente avevo puntato su questo formato - pressochè universale - ed avevo scritto degli appositi moduli per l'installazione dei pacchetti nativi, con l'utilizzo della pacchettizzazione .deb
e nei vari PKGBUILD
, si è venuta a creare una inutile duplicazione di codice.
Pertanto, attualmente i pacchetti npm
non sono più consigliati.
E' comunque possibile installare eggs
con npm
, curando separatamente l'installazione delle varie dipendenze.
Utilizzo di eggs
da codice sorgente
Utilizzare eggs
a partire dai sorgenti può essere estremamente utile sia per il debug
che per modificare eggs
stesso. Può anche garantire una maggiore sicurezza - in caso di dubbi - potrete osservare il codice che sta girando sulla vostra macchina.
Con un po' di esperienza, potrete anche collaborare al progetto.
E' necessario installare sia le dipendenze che i pacchetti nodejs
ed pnpm
.
L'esempio seguente è riferito a Manjaro:
sudo pamac install nodejs pnpm devel-base
Su Debian/Devuan/Ubuntu si consiglia la versione node16.x
dalla repository NodeSource.
Per installare pnpm
, una volta installati nodejs
ed npm
, sarà sufficiente:
sudo npm i pnpm -g
A questo punto possiamo scaricare il sorgente di penguins-eggs
con il comando:
git clone https://github.com/pieroproietti/penguins-eggs
Si entra nella directory penguins-eggs cd penguins-eggs
e si immette:
pnpm install
(*) notare l'uso di pnpm
invece del classico npm
, ciò permette una più veloce compilazione.
Fatto questo, dalla stessa directory, si potrà utilizzare eggs
direttamente dai sorgenti.
Ad esempio:
sudo ./eggs produce --verbose
Nota: _Potete constatare che l'unica differenza d'uso rispetto ai pacchetti precompilati è che dovrete indicare il path per avviare eggs
: ./eggs
e dovrete lanciarlo obbligatoriamente 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)_.
La praticità di una applicazione CLI
Una applicazione CLI non deve per forza essere difficile da utilizzare, anzi, spesso è molto intuitiva, presenta per ogni comando flag come --help
, --verbose
, un manuale sempre disponibile ed aggiornato man eggs
, ed aiuti vari, come mom
e dad
. Se sul nostro sistema è installato il pacchetto bash-completion
avremo, inoltre, a disposizione le funzioni di autocomplete dei vari comandi.
--help
Una volta installato il pacchetto disporremo, sul nostro sistema, di un nuovo comando:
eggs
si otterrà la seguente schermata:
VERSION
penguins-eggs/10.0.3 linux-x64 node-v20.5.1
USAGE
$ eggs [COMMAND]
TOPICS
export export deb/docs/iso to the destination host
tools clean system log, apt, etc
wardrobe get warorobe
COMMANDS
adapt adapt monitor resolution for VM only
analyze analyze for syncto
autocomplete Display autocomplete installation instructions.
calamares configure calamares or install or configure it
config Configure eggs to run it
cuckoo PXE start with proxy-dhcp
dad ask help from daddy - TUI configuration helper
help Display help for eggs.
install krill: the CLI system installer - the egg became a penguin!
kill kill the eggs/free the nest
krill krill: the CLI system installer - the egg became a penguin!
mom ask help from mommy - TUI helper
produce produce a live image from your system whithout your data
status informations about eggs status
syncfrom restore users and user data from a LUKS volumes
syncto Save users and users' data ENCRYPTED
update update the Penguins' eggs tool
version
autocomplete
Se avete già chiuso e riaperto la finestra del terminale, potrete incominciare ad apprezzare anche l'autocomplete.
Digitanto eggs
e premento TAB
, vi appariranno i vari comandi disponibili:
$ eggs
adapt config help produce tools
analyze cuckoo install status update
autocomplete dad kill syncfrom version
calamares export mom syncto wardrobe
Se inserite un comando e date TAB
appariranno invece i flags supportati dal comando stesso.
Ad esempio: comando eggs produce --
$ eggs produce --
--addons --excludes --noicon --release --udf
--basename --help --nointeractive --script --unsecure
--clone --links --pendrive --standard --verbose
--cryptedclone --max --prefix --theme --yolk
Introducendo, invece eggs produce --help
otterremo la schermata di aiuto del comando.
man eggs
Come per ogni applicazione CLI che si rispetti, eggs
è fornito di una apposita pagina man
sempre a vostra disposizione, che possimo ottenere semplicemente con il comando: man eggs
EGGS(1) EGGS(1)
NAME
eggs - the reproductive system of penguins: eggs v10.0.3
SYNOPSIS
Install Debian families (debian/devuan/ubuntu)
$ sudo dpkg -i penguins-eggs_10.0.3-1_amd64.deb
Install Arch families (Arch, manjaro Linux)
Arch from AUR
$ git clone https://aur.archlinux.org/penguins-eggs.git
$ cd penguins-eggs.git
$ makepkg -si
Arch from development repo
$ git clone https://github.com/pieroproietti/penguins-eggs-arch
$ cd penguins-eggs-arch
$ makepkg -si
mom
Infine, non v'è pulcino che non abbia una propria chioccia come guida! Così ho pensato di introdurre il comando eggs mom
.
La "mamma" ci mette a disposizione una interfaccia interattiva per accompagnarci nei primi passi. Selezionando un comando lo stesso viene chiamato con l'opzione --help
. L'esempio è ottenuto selezionando cuckoo
:
PXE start with proxy-dhcp
USAGE
$ eggs cuckoo [-h]
FLAGS
-h, --help Show CLI help.
DESCRIPTION
PXE start with proxy-dhcp
EXAMPLES
sudo eggs cuckoo
Configurazione di eggs
Per funzionare eggs
ha bisogno di vari pacchetti installati: le cosidette dependencies
, inoltre necessita di creare ed installare le pagine di man
di eggs
ed installare l'autocomplete di eggs
stesso. Tutto questo viene curato dal processo di pacchettizzazione .deb
o PKGBUILD
che a sua volta sarà basato sul gestore di pacchetti della distribuzione in uso: apt
o pacman
.
Questo, tra l'altro, ha reso obsoleto il comando eggs config
prima necessario, che viene sostituito - quasi completamente - da eggs dad
combinato, eventualmente, con il flag --default
o con il flag --file
ed un file yaml di configurazione come in questo esempio:
sudo eggs dad --file custom.yaml
dove il file custom.yaml, contiene:
# custom.yaml
---
root_passwd: secret
snapshot_basename: columbus
snapshot_prefix: '' # none
user_opt_passwd: secret
user_opt: user
Segnalo la presenza in /etc/penguins-eggs.d
di tre differenti file di configurazione che vengono generati automaticamente durante l'installazione.
eggs.yaml
(configurazioni generali di eggs)krill.yaml
(configurazioni per installazione unattended)/tools.yaml
(principalmente per sviluppatori)
eggs.yaml
eggs.yaml
contiene le variabili principali utilizzate durante il processo di rimasterizzazione.
# Penguin's eggs
# eggs.yaml
---
compression: fast
force_installer: false
initrd_img: /boot/initrd.img-6.2.16-20-pve
machine_id: 604f58a358594f6a8833daa259a8b663
make_efi: true
make_isohybrid: true
make_md5sum: false
pmount_fixed: false
root_passwd: evolution
snapshot_basename: father
snapshot_dir: /home/eggs/
snapshot_excludes: /etc/penguins-eggs.d/exclude.list
snapshot_mnt: /home/eggs/.mnt/
snapshot_prefix: egg-of_debian-bookworm-
ssh_pass: false
theme: eggs
timezone: Europe/Rome
user_opt: live
user_opt_passwd: evolution
version: 10.0.3
vmlinuz: /boot/vmlinuz-6.2.16-20-pve
krill.yaml
krill.yaml
contiene i valori di default o i valori per l'installazione unattended con eggs install -u
# Penguins' eggs
# krill.yaml
---
# welcome (put your language, example: it_IT.UTF-8)
language: 'en_US.UTF-8'
# location (put your location, example region: "Europe", zone: "Rome")
region: 'America'
zone: 'New_York'
# keyboard (put your values example: keyboardModel: "pc105", keyboardLayout: "it")
keyboardModel: 'pc105'
keyboardLayout: 'us'
keyboardVariant: ''
keyboardOption: ''
# partition (leave it unchanged)
installationDevice: ''
installationMode: 'standard'
filesystemType: 'ext4'
userSwapChoice: 'small'
# users (Here you can put your default user, password, etc)
name: 'artisan'
fullname: 'artisan'
password: 'evolution'
rootPassword: 'evolution'
autologin: true
hostname: ''
# network (leave it unchanged)
iface: ""
addressType: 'dhcp'
address: ''
netmask: ''
gateway: ''
domain: ''
dns: ''