fuss-client.rst 3.8 KB
Newer Older
Elena Grandi's avatar
Elena Grandi committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
***********
FUSS Client
***********

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

.. _ansible: https://docs.ansible.com/

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.

Elena Grandi's avatar
Elena Grandi committed
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
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.

Elena Grandi's avatar
Elena Grandi committed
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
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``.

53
54
55
56
57
58
59
60
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"``.

Elena Grandi's avatar
Elena Grandi committed
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
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).
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121

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