Détails du script serveur d'enregistrement des clients » Historique » Révision 2
Révision 1 (Christophe Martin, 21/09/2010 12:18) → Révision 2/3 (Christophe Martin, 21/09/2010 14:21)
h1. Détails du script serveur d'enregistrement des clients h2. principe de fonctionnement du script voir [[communications client-serveur lors de l'installation]] h2. détails de fonctionnement. Le script enregistre tout dans un journal, succès logue tout, success et erreurs via syslog. Il envoie un mail s'il y a réussite. L'affichage du script est strictement contrôlé. Rien ne doit être affiché avant de savoir s'il si il faut émettre une ligne contenant le seul mot @success@. toute erreur est *fatale*, est enregistrée, loggée, et provoque l'affichage d'un message d'erreur (donc pas de ligne @success@ dans ce cas) 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 $SSH_ORIGINAL_COMMAND Le script utilise également la variable d'environnement $SSH_CONNECTION passée par ssh elle aussi Le script vérifie les points suivants. tout échec est fatal. : * variable $SSH_CONNECTION ** non vide ** Le premier mot de $SSH_CONNECTION est une adresse IP valide ** si un enregistrement PTR est dans le DNS, alors il pointe vers un nom en *.univ-brest.fr * variable $SSH_ORIGINAL_COMMAND est de la forme OS:logon ** OS *** est non vide *** ne contient que des lettres minuscules et des chiffres *** commence par une lettre *** pas plus de 20 caractères *** OS est un des mots connus connu du script (en dur dans le script, initialement @linux@ @win@ @mac@) ** logon *** est non vide *** Ne contient que des lettres minuscules des chiffres *** commence par une lettre *** pas plus de 16 caractères *** présent dans l'annuaire LDAP sur annuaire-iuem.univ-brest.fr * présence préalable de la machine dans le fichier @/usr/local/etc/backuppc/hosts@ hosts de backuppc ** *NB*, *NB* , seul le fichier @hosts@ hosts est vérifié, *pas la présence de sauvegarde précédentes éventuelles* ** Aucune présence actuelle ** présente avec le même nom d'utilisateur (évite usurpation d'identité). La présence est testée sous les deux formes *** IP [01] logon *** nom_dns [01] logon * Le service ssh est disponible sur le client. Toutes les actions du script sont vérifiées par le code d'erreur de la commande précédente. h2. actions entreprises par le script Dans l'ordre : # Vérifications des variables d'environnement et calcul/obtention des valeur concernant le client : @ip@ , @client_hostname@ , @user@ # Vérification de l'adresse IP # Vérification de la présence préalable de la machine client # Ajout de la machine client avec l'utilisateur # message dans le journal log annonçant l'ajout de la machine # 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. # scan ssh du client, enregistrement dans @.ssh/known_hosts@ # génération d'un fichier de config pour le client d'après un modèle dépendant de l'OS. # @reload@ du service backuppc # affichage pour le client ## success ## url: url de config de la machine cliente ## key: partie publique du biclef ssh pour ce client. # courriel # mail aux sysadmins sysadmin pour prévenir de l'enregistrement l'intégration de la machine. h2. données enregistrées dans le script. Le script se termine à la ligne <pre> __DATA__ </pre> En dessous de cette ligne se trouvent des données accessibles au script par la fonction @block@. 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@ 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 : <pre> ===== Nom_du_bloc ===== ========== </pre> Il existe autant de blocs qu'il y a de noms d'OS reconnus. Les blocs peuvent être vides mais *doivent* exister. (techniquement non, mais c'est plus joli comme ça alors on, va le faire.) Par exemple, le bloc pour les clients mac est <pre> ===== mac ===== $Conf{BackupFilesExclude} = { '/private/tmp' => [ '' ], '.Trash' => [ '' ], '/private/var/vm' => [ '' ], '/private/var/automount' => [ '' ], '/proc' => [ '' ], '/Trash' => [ '' ], '/sys' => [ '' ], '/automount' => [ '' ], 'Caches' => [ '' ], '/net' => [ '' ], '/private/var/tmp' => [ '' ], '/private/var/run' => [ '' ] }; ========== </pre> 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@ ... h2. Modifications du script Toute modification dans le dépôt doit être répercutée sur le serveur. Pour cela : * <pre>scp enregistre-auto-client root@backuppc:/var/lib/backuppc/local-bin/.</pre> ou simplement * <pre>make scp</pre>