Détails du script serveur d'enregistrement des clients » Historique » Version 3
Christophe Martin, 31/01/2012 18:00
retrait info fausse et maintenant à jour dans la nouvelle page "installation de la moulinette sur le serveur"
1 | 1 | Christophe Martin | h1. Détails du script serveur d'enregistrement des clients |
---|---|---|---|
2 | |||
3 | h2. principe de fonctionnement du script |
||
4 | |||
5 | voir [[communications client-serveur lors de l'installation]] |
||
6 | |||
7 | h2. détails de fonctionnement. |
||
8 | |||
9 | 2 | Christophe Martin | Le script enregistre tout dans un journal, succès et erreurs via syslog. |
10 | 1 | Christophe Martin | |
11 | Il envoie un mail s'il y a réussite. |
||
12 | |||
13 | 2 | Christophe Martin | L'affichage du script est strictement contrôlé. Rien ne doit être affiché avant de savoir s'il faut émettre une ligne contenant le seul mot @success@. |
14 | 1 | Christophe Martin | |
15 | 2 | Christophe Martin | toute erreur est *fatale*, est enregistrée, et provoque l'affichage d'un message d'erreur (donc pas de ligne @success@ dans ce cas) |
16 | 1 | Christophe Martin | |
17 | 2 | Christophe Martin | Le script est lancé par une clef ssh et reçoit un paramètre dans la variable d'environnement $SSH_ORIGINAL_COMMAND passée par sshd |
18 | 1 | Christophe Martin | |
19 | 2 | Christophe Martin | Le script utilise également la variable d'environnement $SSH_CONNECTION passée par ssh elle aussi |
20 | |||
21 | 1 | Christophe Martin | Le script vérifie les points suivants. tout échec est fatal. : |
22 | |||
23 | * variable $SSH_CONNECTION |
||
24 | ** non vide |
||
25 | ** Le premier mot de $SSH_CONNECTION est une adresse IP valide |
||
26 | ** si un enregistrement PTR est dans le DNS, alors il pointe vers un nom en *.univ-brest.fr |
||
27 | * variable $SSH_ORIGINAL_COMMAND est de la forme OS:logon |
||
28 | ** OS |
||
29 | *** est non vide |
||
30 | *** ne contient que des lettres minuscules et des chiffres |
||
31 | *** commence par une lettre |
||
32 | *** pas plus de 20 caractères |
||
33 | 2 | Christophe Martin | *** OS est un des mots connus du script (en dur dans le script, initialement @linux@ @win@ @mac@) |
34 | 1 | Christophe Martin | ** logon |
35 | *** est non vide |
||
36 | *** Ne contient que des lettres minuscules des chiffres |
||
37 | *** commence par une lettre |
||
38 | *** pas plus de 16 caractères |
||
39 | *** présent dans l'annuaire LDAP sur annuaire-iuem.univ-brest.fr |
||
40 | 2 | Christophe Martin | * présence préalable de la machine dans le fichier @/usr/local/etc/backuppc/hosts@ de backuppc |
41 | ** *NB*, seul le fichier @hosts@ est vérifié, *pas la présence de sauvegarde précédentes éventuelles* |
||
42 | 1 | Christophe Martin | ** Aucune présence actuelle |
43 | ** présente avec le même nom d'utilisateur (évite usurpation d'identité). La présence est testée sous les deux formes |
||
44 | *** IP [01] logon |
||
45 | *** nom_dns [01] logon |
||
46 | * Le service ssh est disponible sur le client. |
||
47 | |||
48 | Toutes les actions du script sont vérifiées par le code d'erreur de la commande précédente. |
||
49 | |||
50 | h2. actions entreprises par le script |
||
51 | |||
52 | Dans l'ordre : |
||
53 | |||
54 | # Vérifications des variables d'environnement et calcul/obtention des valeur concernant le client : @ip@ , @client_hostname@ , @user@ |
||
55 | # Vérification de l'adresse IP |
||
56 | # Vérification de la présence préalable de la machine client |
||
57 | # Ajout de la machine client avec l'utilisateur |
||
58 | 2 | Christophe Martin | # message dans le journal annonçant l'ajout de la machine |
59 | 1 | Christophe Martin | # Génération d'une clef ssh spécifique et enregistrement de cette clef dans un répertoire dédié aux clients. Chaque appel génère une nouvelle clef. |
60 | # scan ssh du client, enregistrement dans @.ssh/known_hosts@ |
||
61 | # génération d'un fichier de config pour le client d'après un modèle dépendant de l'OS. |
||
62 | # @reload@ du service backuppc |
||
63 | # affichage pour le client |
||
64 | ## success |
||
65 | 2 | Christophe Martin | ## url: url de config de la machine cliente |
66 | 1 | Christophe Martin | ## key: partie publique du biclef ssh pour ce client. |
67 | 2 | Christophe Martin | # courriel aux sysadmins pour prévenir de l'enregistrement de la machine. |
68 | |||
69 | h2. données enregistrées dans le script. |
||
70 | |||
71 | Le script se termine à la ligne |
||
72 | <pre> |
||
73 | __DATA__ |
||
74 | </pre> |
||
75 | |||
76 | En dessous de cette ligne se trouvent des données accessibles au script par la fonction @block@. |
||
77 | |||
78 | Lors de l'enregistrement d'un client, un fichier de configuration pour le client est copié sous le nom @"$client_pc_conf_dir/$client_hostname.pl"@ soit @/usr/local/etc/backuppc/pc/nom_du_client.pl@ |
||
79 | |||
80 | plutot que d'avoir à gérer un répertoire contenant les fichiers types à copier dans le répertoire @/usr/local/etc/backuppc/pc@ , les contenus des fichiers sont inclus directement dans le script, sous la forme de blocs de données délimités par des lignes de la forme : |
||
81 | <pre> |
||
82 | ===== Nom_du_bloc ===== |
||
83 | ========== |
||
84 | </pre> |
||
85 | |||
86 | Il existe autant de blocs qu'il y a de noms d'OS reconnus. |
||
87 | |||
88 | Les blocs peuvent être vides mais *doivent* exister. (techniquement non, mais c'est plus joli comme ça alors on, va le faire.) |
||
89 | |||
90 | Par exemple, le bloc pour les clients mac est |
||
91 | |||
92 | <pre> |
||
93 | ===== mac ===== |
||
94 | $Conf{BackupFilesExclude} = { |
||
95 | '/private/tmp' => [ |
||
96 | '' |
||
97 | ], |
||
98 | '.Trash' => [ |
||
99 | '' |
||
100 | ], |
||
101 | '/private/var/vm' => [ |
||
102 | '' |
||
103 | ], |
||
104 | '/private/var/automount' => [ |
||
105 | '' |
||
106 | ], |
||
107 | '/proc' => [ |
||
108 | '' |
||
109 | ], |
||
110 | '/Trash' => [ |
||
111 | '' |
||
112 | ], |
||
113 | '/sys' => [ |
||
114 | '' |
||
115 | ], |
||
116 | '/automount' => [ |
||
117 | '' |
||
118 | ], |
||
119 | 'Caches' => [ |
||
120 | '' |
||
121 | ], |
||
122 | '/net' => [ |
||
123 | '' |
||
124 | ], |
||
125 | '/private/var/tmp' => [ |
||
126 | '' |
||
127 | ], |
||
128 | '/private/var/run' => [ |
||
129 | '' |
||
130 | ] |
||
131 | }; |
||
132 | ========== |
||
133 | </pre> |
||
134 | |||
135 | Ainsi, chaque client macintosh enregistré a un fichier de configuration que l'utilisateur peut personnaliser et qui, par défaut, exclut les répertoires @/dev@ @/proc@ @/Caches@ @/tmp@ ... |