Différences

Cette page vous donne les différences entre la révision choisie et la version actuelle de la page.

docs:hard_hack:synclef_old [2012/10/21 22:48] (version actuelle)
Ligne 1: Ligne 1:
 +
 +TODO : réécrire cet HowTo _APRES_ la mini conf du 11 oct 2012 (on verra en combien de temps j'aurais reecris cela...)
 +
 +
 +====== Objectifs & Etat des lieux ======
 +  * Les clefs USB ca crame facilement (notamment là ou officie madame mon épouse, il semblerait qu'une machine, soit une tueuse de clef USB, et moi même j'en ai tué d'autres)
 +  * On oublie fréquemment de vider correctement la carte SD de l'APN familiale, et donc la veille des mariage....
 +  * Mon [[http://www.amazon.com/Seagate-FreeAgent-DockStar-Network-STDSA10G-RK/dp/B002MRRU6G|Seagate Dockstar]] a quelque peu rendu l'âme (NAND cramée je crois bien)
 +  * J'ai un petit [[http://www.raspberrypi.org/|RaspBerry Pi]] qui a besoin d'une fonction utile
 +  * J'ai un joli serveur de sauvegarde (merci BackupPC)
 +  * Les machines sont à la cave, le matériel dans la maison _doit_ être silencieux
 +  * Sauvegarder c'est rigolo, être fainenant c'est encore mieux
 +
 +
 +====== Méthodes possibles ======
 +
 +  - Rallonge USB :
 +    * simple pas de travail trop intellectuel, enfin si passer le câble, et la ca deviens vite moins souple
 +    * certaines rallonge ne tiennent pas la longeur
 +  - Modifier mon <del>[[http://www.amazon.com/Seagate-FreeAgent-DockStar-Network-STDSA10G-RK/dp/B002MRRU6G|Seagate Dockstar]]</del> pour qu'il exporte un rsync de la clef
 +  - Utiliser simplement le paquet UsbIP (permet de faire passer de l'USB over IP) <= over kill
 +  - Utiliser une vrai machine (le RaspBerry PI, et étudier la chose...)
 +
 +===== Quid de la technicité des choix ? =====
 +
 +==== NSLU2 ====
 +  - autofs pour montage de la clef dans un rep avec le numéro de série comme point de montage
 +  - synchro sur un disque local
 +  - des que le serveur de synchro passe, il y a les données
 +  - Être bien attentif a gérer l'arrachage a chaud de la clef
 +    * Montage en RO
 +    * Faire clignoter une Led ?
 +==== UsbIp ====
 +  - Dés insertion d'un perif USB : auto-export de celui ci
 +  - Le "ping" de Backuppc est modifier pour chercher la présence du périphérique a backuper sur le Nslu2
 +    * Si le perif a été démonté volontairement mais pas débranché, en tenir compte
 +  - Être bien attentif a gérer l'arrachage a chaud de la clef
 +    * Montage en RO
 +    * Faire clignoter une Led ?
 +  * [[http://www.nslu2-linux.org/wiki/HowTo/UseUsbIpOnTheNSLU2|Comment faire sur NSLU2]] mais j'aime pas : cross-compil
 +-> Et si je faisait ca plutôt sur mon "cadavre" d'eepc (un eepc 701 acheté pas cher car clavier HS)
 +
 +===== Pourquoi choisir UsbIP ? =====
 +
 +  - Plus le temps va passer plus il sera difficile de trouver les binaires pour piloter mes modules USB que je vais brancher dépasseront mon NSLU2 (déjà que...)
 +  - Une Rallonge USB c'est incompatible avec la virtualisation, enfin généralement (y un hack pour Xen ;) )
 +  - Je veux faire marcher mon pingouin magique, comme il est USB, ca serait sympa d'avoir un "standard" de l'USB a la maison !
 +    * Pour le TuxDroid s'appuyer sur la superbe Doc http://tux.serviceinformatique06.com/
 +  - J'aime les trucs complétement portables (oui y a le client pour windows :)))))) )
 +  - J'aime les trucs qui sortent de l'ordinaire
 +  - J'aime l'ouverture que ca propose (oui, je ne suis plus limité a du FileSysteme, cf le TuxDroid, mais aussi la pleine synchro du GSM, en BT !!!)
 +
 +====== Ce qui fonctionne ======
 +  A ete mis en place pour le moment :
 +  * Un Eepc d'occasion le relais, sans clavier (donc pas cher, et potentiellement en wifi, donc mettable partout :) )
 +  * Un serveur BackupPC (deja existant) avec des hostes au parametrage specifique
 +===== Manipulation faites sur le relais =====
 +==== Creation d'un script php ====
 +pour permettre au serveur **BackupPC** de:
 +  - //pinger// la clef USB
 +  - Lancer un dump avant le backuppc
 +
 +FIXME: a terme ce dump permettras aussi, idealement bkp table de partition mbr
 +
 +<xtermrtf>
 +<?
 +
 +# Rappelons nous les 3 etats de la mati^WClef
 +# ? Inséré   : renvoyer un errcode http
 +# ! Prete    : permet de lancer a terme un dump du mbr, etc ...
 +# ! Demounte : permet de demonter le device (coté secu c'est funcky, mais bon, j'aime le risque)
 +
 +# Les params seront
 +#   Key      : Label de la clef
 +#   Ordre    : dump/umount (si vide, alors c'est une demande si inséré ou pas
 +
 +
 +$label=basename($_GET["label"]);
 +if(file_exists("/media/".$label)) {
 +        if($_GET["go"]=="dump") {
 +                }
 +        elseif($_GET["go"]=="umount") {
 +                echo "Demande arret";
 +                system("/usr/bin/sudo /usr/sbin/umount.hal /media/$label");
 +                }
 +        else {
 +                echo "OK";
 +                }
 +        }
 +else {
 +        header("HTTP/1.0 404 Not Found");
 +        ###header("HTTP/1.0 404 Not Found",false,404);
 +        }
 +?>
 +</xtermrtf>
 +
 +==== Configuration de sudo ====
 +Permettre a www-data de démonter la clef en fin de backup
 +<xtermrtf>
 +# /etc/sudoers
 +#
 +# This file MUST be edited with the 'visudo' command as root.
 +#
 +# See the man page for details on how to write a sudoers file.
 +#
 +Defaults        env_reset
 +
 +# Host alias specification
 +# User alias specification
 +# Cmnd alias specification
 +Cmnd_Alias      UMOUC = /usr/sbin/umount.hal
 +
 +# User privilege specification
 +root    ALL=(ALL) ALL
 +
 +Runas_Alias     UMOUU = root
 +
 +
 +# Allow members of group sudo to execute any command after they have
 +# provided their password
 +# (Note that later entries override this, so you might need to move
 +# it further down)
 +%sudo ALL=(ALL) ALL
 +#
 +#includedir /etc/sudoers.d
 +
 +# Members of the admin group may gain root privileges
 +%admin ALL=(ALL) ALL
 +www-data   ALL =(UMOUU) NOPASSWD: UMOUC
 +</xtermrtf>
 +==== Configuration de l'automount ====
 +  - apt-get install halevt
 +=== Configurations d'halevt ===
 +dans le fichier /etc/halevt/halevt.xml, modifier le bon (hihihi) paragraphe
 +<xtermrtf>
 +<halevt:Device match="hal.block.device &amp; hal.block.is_volume = true &amp; hal.volume.mount_point">
 +   <halevt:Property name="hal.volume.is_mounted">
 +      <halevt:Action value="true" exec="halevt-mount -s;/usr/local/sbin/call_bkppc true $hal.udi$ $hal.volume.mount_point$"/>
 +   </halevt:Property>
 +</halevt:Device>
 +</xtermrtf>
 +A ete rajouté //;/usr/local/sbin/call_bkppc true $hal.udi$ $hal.volume.mount_point$// cela lancera le script
 +
 +FIXME: dans le meme paragraphe dont //Action value="false"// nous pourrons l'employer pour faire changer la led de l'arduino
 +
 +Execution du script qui demande le backup (**/usr/local/sbin/call_bkppc**)
 +<xtermrtf>
 +#!/bin/bash
 +
 +# true /org/freedesktop/Hal/devices/volume_uuid_F03F_F5A8 /media/CLEFRBS00
 +mntype=$1
 +uidclef=$2
 +nomclef=`echo $3 | sed -s "s=^/media/==g" | tr "[:upper:]" "[:lower:]"`
 +sleep 5
 +wget -qO /dev/null "http://backuppc:AUTH@adlp.org/backuppc/index.cgi?host=$nomclef&hostIP=$HOSTNAME&doit=1&action=Start_Incr_Backup"
 +
 +</xtermrtf>
 +    
 +FIXME: ici il faudra changer la couleur de la Led
 +
 +==== Configuration du rsync ====
 +  - ajout d'un partage rsync
 +<xtermrtf>
 +[media]
 +use chroot = false
 +read only = true
 +uid = root
 +gid = root
 +hosts allow = 10.0.10.51
 +comment  = Bkp
 +path = /media
 +auth users = backuppc
 +secrets file = /etc/rsyncd.secrets
 +</xtermrtf>
 +  - Autres ameliorations
 +    * Integrer un systeme pour backuper le MBR et la table de partition du device
 +    * Gerer les conflits de labels ?
 +    * Indiquer la fin du backup (euh, au hasard, un arduino? :) )
 +===== Serveur de Backup =====
 +
 +  * Je part du principe que le relais est déjà correctement backupé/able
 +  - Intégration d'un nouvel hôte, au nom du label de la clef (ouinnnn)
 +  - Configuration comme suis: (ici la clef, et le nom de la //machine// est ROMPAQ
 +<xtermrtf>
 +#
 +# Local server backup of /etc as user backuppc
 +#
 +
 +$Conf{TarShareName} = [
 +  '/'
 +];
 +
 +$Conf{TarClientCmd} = '$tarPath -c -v -f - -C $shareName+ --totals';
 +
 +# remove extra shell escapes ($fileList+ etc.) that are
 +# needed for remote backups but may break local ones
 +$Conf{TarFullArgs} = '$fileList';
 +$Conf{TarIncrArgs} = '--newer=$incrDate $fileList';
 +
 +$Conf{TarClientPath} = '/usr/bin/sudo /etc/backuppc/tar-create';
 +$Conf{RsyncShareName} = [
 +  'media'
 +];
 +$Conf{ClientNameAlias} = 'burma';
 +$Conf{BackupFilesExclude} = {
 +  'temporaires' => [],
 +  'tmp' => [
 +    '*/tmp/*',
 +    '*/temp/*'
 +  ]
 +};
 +$Conf{PingCmd} = '/usr/bin/wget -qO /dev/null http://$host/media.php?label=ROMPAQ';
 +$Conf{BackupFilesOnly} = {
 +  '*' => [
 +    '/ROMPAQ'
 +  ]
 +};
 +$Conf{DumpPreUserCmd} = '/usr/bin/wget -qO /dev/null http://$hostIP/media.php?label=ROMPAQ&go=dump';
 +$Conf{IncrPeriod} = '0.0035';
 +$Conf{BlackoutPeriods} = [];
 +$Conf{DumpPostUserCmd} = '/usr/bin/wget -qO /dev/null http://$hostIP/media.php?label=ROMPAQ&go=umount';
 +</xtermrtf>
 +
 +
 +
 +===== Manipulation a faire pour l'arduino =====
 +
 +  * Bien retrouver sur quel port du hub est branchée la clef, faire le lien entre lsusb et ce que l'on reçoit lors du branchement de la clef
 +  * Les états a allumer:
 +    - Orange : clef montée, en attente de backup
 +    - Rouge  : Backup en cours
 +    - Vert   : Backup fini
 +    - Éteint : Si tout ce passe bien, il n'y a rien dans ce port.
 +
 +FIXME
 +  * Mieux gérer le nom de la "machine", c'est peu lisible
 +  * Mieux gérer le nom fictif de la machine pour la passer aux scripts => minimiser les paramétrages
 +  * Pb de casse pour automatiser sur le nom de la partitions
 +  * Pas regarde pour le multipartitionning
 +  * Mieux gérer les auth
 +    - Créer un compte sur le backuppc juste pour la demande de backup des clefs
 +    - Gérer un login/mdp //uniquement// pour la demande de dump et cette de démontage
 +    - Sélectionner les clefs qui ont droit ou non a ce bakup
docs/hard_hack/synclef_old.txt · Dernière modification: 2012/10/21 22:48 (édition externe)
Recent changes RSS feed Debian Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki