FUSS Client

fuss-client è uno script python che lancia un playbook ansible che configura una macchina come client in una rete FUSS.

fuss-client

Lo script fuss-client è scritto per python 3.

Le opzioni -a | -U | -r | -l sono mutualmente esclusive e corrispondono rispettivamente ai metodi add, upgrade, remove e listavail; ad eccezione di quest’ultimo si concludono con l”os.execvp di un comando di shell per lanciare ansible; notare che questo termina l’esecuzione del programma python, eventuale codice successivo non viene eseguito.

Prima della configurazione, l’opzione -a ricerca e contatta un fuss-server (metodi _test_connection e _get_cluster) per aggiungere la macchina corrente ad un cluster, tramite l’api di octofuss.

Notare che non esiste un’api corrispondente per rimuovere una macchina da un cluster, operazione che va svolta lato server.

Il passo successivo è la generazione di una chiave kerberos per il client: questa operazione viene svolta sul server dallo script add_client_principal, richiamato tramite ssh, quindi la chiave viene copiata localmente tramite scp. Per l’autenticazione sul server, sono supportati vari casi: accesso come root, accesso come utente con permessi sudo, oppure accesso con chiave con permessi limitati alle sole operazioni necessarie per lo script.

Playbook

Ansible viene chiamato con uno dei seguenti playbook, a seconda del sottocomando usato:

connect.yml

per configurare un fuss-client

remove.yml

per eliminare la configurazione del fuss-client.

Quest’ultimo ripristina alcuni file di configurazione dai backup, il primo non compie direttamente azioni, ma richiama ruoli dalla directory roles.

Compatibilità raspbian

Alcuni task, ed in particolare quelli relativi a lightdm, non vanno eseguiti quando la distribuzione base non è fuss-client (o una normale Debian), ma Raspbian, che richiede alcune personalizzazioni specifiche; per questi si usa la condizione when: ansible_lsb.id != "Raspbian".

Pacchetti Debian

Il repository prevede la generazione di due pacchetti .deb, fuss-client e fuss-client-dependencies; il primo contiene il fuss-client vero e proprio, mentre il secondo è un metapacchetto che dipende da tutti i pacchetti installati dal playbook ansible.

fuss-client-dependencies non è necessario per l’uso di fuss-client, ma è aggiunto per comodità per pre-installare (e soprattutto pre-scaricare) tutti i pacchetti necessari.

Numeri di versione

Il pacchetto fuss-client è nativo, quindi il numero di versione è del tipo X.Y.Z dove X è il numero di versione debian corrispondente (ad esempio 8 per jessie, 9 per stretch, 10 per buster).

HOWTO

Script all’avvio

Per installare su fuss-client degli script che vengano eseguiti all’avvio il metodo raccomantato è di usare delle unit systemd.

Per farlo, installare lo script desiderato in /usr/local/bin (o sbin, se ha senso che venga eseguito solo da root), ad esempio come /usr/local/bin/my_script.sh con permessi di esecuzione, quindi creare il file /etc/systemd/system/my-script.service con i seguenti contenuti:

[Unit]
Description=My script doing things
After=network.target

[Service]
ExecStart=/usr/local/bin/my_script.sh

[Install]
WantedBy=multi-user.target

ed abilitare la unit.

In ansible, serviranno dei task tipo i seguenti:

- name: Script to do things
  copy:
      dest: /usr/local/bin/my_script.sh
      src: my_script.sh
      mode: 0755
- name: Do things at startup
  copy:
      dest: /etc/systemd/system/my-script.service
      src: my-script.service
- name: Enable doing things at startup
  systemd:
      enabled: yes
      name: do-things