===== Struttura server =====
Partendo da un fissato root path, al esempio ''/livenet'', vediamo la struttura del server. E' una descrizione minimale, che verrà approfondita nel seguito.
drwxr-xr-x 9 root root 4096 Nov 18 14:51 .
drwxr-xr-x 23 root root 4096 Oct 24 08:24 ..
drwxr-xr-x 7 root root 4096 Oct 9 09:00 aux
drwxr-xr-x 8 root root 4096 Nov 13 12:38 .git
drwxr-xr-x 10 root root 4096 Oct 31 13:25 images
drwxr-xr-x 4 root root 4096 Nov 13 11:57 overlay
drwxr-xr-x 11 root root 4096 Oct 31 08:16 releases
drwxr-xr-x 2 root root 4096 Nov 13 12:06 scripts
drwxrwxr-x 29 root root 4096 Oct 2 15:20 vms
-rw-r--r-- 1 root root 408 Sep 23 09:12 .env
-rw-r--r-- 1 root root 405 Aug 27 08:48 env.sample
-rw-r--r-- 1 root root 449 Sep 24 15:07 .gitignore
-rw-r--r-- 1 root root 0 Sep 23 09:12 .init_ok
-rw-r--r-- 1 root root 2156 Aug 27 08:48 README.md
-rw-r--r-- 1 root root 5167 Sep 18 16:59 Taskfile.yml
* ''aux'' contiene tutto ciò che non è direttamente collegato ad una immagine livenet. Ad esempio, il collettore dei dati, chè è una utility, ma la cui assenza non pregiudica il funzionamento del sistema.
* ''images'' contiene le definizioni dei vari dipartimenti, quindi files, scripts, etc...
* ''overlay'' è la directory che contiene la definizione minimale di livenet, ovvero tutto ciò che è comune ai vari dipartimenti e che altrimenti dovrebbe essere replicato in ciascuno
* ''releases'' contiene le releases dei vari dipartimenti
* ''scripts'' sono gli script di gestione del sistema che vengono richiamati dai task
* ''vms'' mantiene tutte le macchine virtuali, essenzialmente windows, che possono essere avviate nei client.
* ''.env'' è il file di configurazione generale dei vari dipartimenti
* ''Taskfile.yml'' contiene tutte le descrizioni dei task possibili
==== aux ====
Contiene tutto ciò che non è essenziale al funzionamento di livenet, principalmente utilità di sistema.
* [[livenet:10_data_collector|Container collettore dati]]
* [[livenet:10_rsyslog_container|Container syslog]]
* Script ''post-merge'' per sistemare i permessi critici ad ogni ''git pull''
==== images ====
Ogni subdirectory, della quale riporto solo gli elementi di interesse, ha di base la seguente struttura:
drwxr-xr-x 1 kreen kreen 74 27 set 08.03 conf
drwxr-xr-x 1 kreen kreen 60 11 set 13.19 overlay.all
drwxr-xr-x 1 kreen kreen 12 12 set 17.47 overlay.local
drwxr-xr-x 1 kreen kreen 24 7 ott 16.09 runtime
drwxr-xr-x 1 kreen kreen 68 27 set 08.03 scripts
drwxr-xr-x 1 root root 0 5 ott 12.08 setup
-rw-r--r-- 1 kreen kreen 489 24 ott 09.49 docker-compose.yml
-rw-r--r-- 1 kreen kreen 767 27 set 08.03 Dockerfile
-rw-r--r-- 1 kreen kreen 394 8 ott 09.21 .env
* ''conf'' contiene file di configurazione, ad esempio la lista dei pacchetti specifici dell'immagine
* ''overlay.all'' è la directory che contiene la configurazione comune a tutte le istanze
* ''overlay.local'' è la directory con contiene la configurazione specifica per l'istanza, per esempio i profili, e ha la precedenza su ''overlay.all''
* ''runtime'' è usata in sviluppo, non ha impiego in produzione
* ''scripts'' sono gli script di gestione per la costruzione dell'immagine
* ''setup'' contiene file e pacchetti che vengono installati nell'immagine (per esempio *.deb)
* ''docker-compose.yml'' dell'immagine
* ''Dockerfile'' dell'immagine
* ''.env'' variabili ambiente specifiche dell'immagine
==== Oerlay ====
Questa directory contiene tutto ciò che va inserito nell'immagine durante la costruzione e i commit. Viene fatta una copia 1:1 nella root dell'immagine docker. Evidenzio cheil contenuto è comune a tutte le immagini, viene fatto un //bind// in ''/etc/fstab'' con ''./images/$NOMEIMMAGINE/overlay.all'' per aggirare i limiti di docker, che non consente di accedere alle directory superiori.
==== releases ====
Ogni sotto directory contiene gli archivi tgz delle immagini da installare e degli upgrade.
Viene fatto un bind di volume nel ''docker-compose.yaml'' dell'immagine ''live'' ed esportato in sola lettura dal server NFS della stessa.
==== scripts ====
Contiene gli script:
* ''build.sh'' che costruisce una full image di un dipartimento
* ''commit.sh'' crea una //diff// ovvero un archivio incrementale e relativa immagine docker, partendo da un container in esecuzione e agendo sulle sole differenze rispetto all'immagine da cui è stato creato il container.
==== .env ====
* Unordered List ItemVariabili ambiente generali
* ''ROOT_PATH=/xyz'' la radice del progetto, usata come directory basename
* ''IMG_PATH="${ROOT_PATH}/images"'' è la radice che contiene le definizioni dei dipartimenti
* ''REL_PATH="${ROOT_PATH}/releases"'' punta alla radice delle releases
* ''VMS_PATH="${ROOT_PATH}/vms"'' la radice del repository delle macchine virtuali
* ''LIVENET_SERVER=192.168.1.10'' è l'ip dell'host dove è in esecuzione il server livenet
* ''LIVENET_PORT=2049'' la porta utilizzata dal server NFS. Tipicamente la 2049, ma può essere modificata.
* ''SYSLOG_SERVER=192.168.1.10'' autoesplicativo
* ''SYSLOG_PORT=513''
* ''_docker="docker"'' container runtime, che può essere anche ''podman''
* ''_compose="docker compose"''
* ''DEVELOP=0'' usato in sviluppo, se messo a ''1'' nell'immagine non viene copiato il software non necessario (ad esempio matlab). usato nel ''Dockerfile''