Je voulais faire un miroir chiffré de mes photos à distance qui soit simple, et sans trop de configuration à refaire en cas de problème. Pas de sauvegarde, pas d'incrémental ou quoi que ce soit, juste une copie de sécurité (cas où y'a l'feu quoi).
Là de base, on pense à rsync et ssh. Restait à trouver la partie chiffrement, avant transfert de préférence. J'ai déjà touché à ecrypts mais pas toujours très bien compris comment ça fonctionne et comment refaire le montage sur une autre machine (on y arrive mais des clefs sont dans un keyring lié à la session etc.). On trouve rsyncrypto qui chiffre d'une manière compatible avec la synchronisation des modifications (comme par rsync). Mais il faut donc une copie des données chiffrées avant de lancer le rsync. Pas le bon plan si on a des données qui peuvent potentiellement devenir volumineuses.
Encfs est une solution : entièrement userspace, simple à initialiser et utiliser.
On peut donc imaginer : données ⇒ rsync ⇒ encfs ⇒ sshfs vers le serveur distant.
Facile à mettre en place pour un administrateur système :
sshfs serveur:stockage montage-sshfs
encfs montage-sshfs montage-encfs
rsync -vriit données montage-encfs
Lorsque le dossier source d'encfs n'est pas encore initialisé, on nous demande ce qu'on veut comme option et un mot de passe. Les options sont enregistrées par défaut dans .encfs6.xml à la racine du dossier chiffré, donc sur le serveur distant. C'est pas forcément le plus malin mais au moins tout est au même endroit.
À noter :
Je me suis fait un petit script pour ne pas avoir besoin de reconstruire à chaque fois l'assemblage, et qui permet donc de faire un miroir de n'importe quoi n'importe où facilement (tant qu'il y a ssh sur le serveur distant et les 3 outils en local).
Envie d'accéder à un disque externe / clef USB / stockage quelconque de manière permanente sur un serveur sans se poser de question type fstab / autofs ?
Ce script tout simple qui se fait lancer par une règle udev est peut-être une solution. En tous cas quand ça fonctionne c'est tout simple et pratique : on a un mount.d / umount.d pour balancer des scripts si besoin et un lien est créé pour nous donner un point de montage fixe (pas comme un dev ou autre qui peut varier).
Tips :
Attention : ne fonctionne pas si on a un système de fichier monté en userspace (ntfs/exfat ou tout autre FS qui passe par FUSE). Voir https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=774149 (assez long, en gros udev utiliise les cgroup et clean tout à la fin de la gestion de l'événement). Pour l'instant j'ai contourné de manière crade en éditant le script et en passant par at pour sortir du cgroup : echo mount […] | at now
Voir : http://unix.stackexchange.com/questions/28548/how-to-run-custom-scripts-upon-usb-device-plug-in/28711#28711
Bref ce n'est pas si simple au final même s'il y a quasiment rien dans ce script…
On ne peut pas trop éviter le petit tour par la doc avant de commencer : zless /usr/share/doc/usbmount/README.gz
Une table de partitions GPT est écrite au début de l'espace partitionné, mais aussi en backup au bout (voir schéma sur la page). Il y a donc une certaine symétrie. Et évidemment, on ne peut pas définir de partition après la table secondaire. Donc dans certains cas (agrandissement de disque virtuel, boîtier externe qui coupe artificiellement à 2To, …) on risque d'avoir un problème (pour moi, avec gdisk, ça s'est manifesté par le "last usable sector").
Comme il n'y avait rien sur le disque, j'ai juste recréé une table de partitions vide.
Apparemment, pour remettre la table secondaire à la fin, on peut utiliser sgdisk -e (je n'ai pas testé).
Je viens de faire une installation d'etherpad-lite sur une Debian Jessie, au final c'est assez rapide de nos jours, parce que même si avant il fallait compiler nodejs et qu'on le lit de partout encore, apparemment il suffit de fait un lien node ⇒ nodejs et ça fonctionne ! Et npm a été rapide ce coup-ci…
Le tuto ci-lié a aussi une petite variante, c'est de faire un utilisateur système et de poser les fichiers dans /var/www je me dis que c'est peut-être légèrement plus propre que dans le home au final…
L'installation d'un module python avec un python perso échoue en chargeant le mauvais module python (le module du système au lieu du module recompilé dans l'install perso de python) ?
Il y a un petit fichier fourni par easy-install qui est changé et qui ajoute au PYTHONPATH des dossiers avant la variable d'environnement ! Et ce fichier est dans le home, donc commun à tous les python que l'utilisateur lance… donc s'il y a le dossier système dedans (va savoir pourquoi…) bah le chargement de modules persos utilise le module système quand même.
Pour mettre le fichier hors d'état de nuire :
mv .local/lib/python2.7/site-packages/easy-install.pth .local/lib/python2.7/site-packages/easy-install.pth.orig
Un outil que j'utilise de temps en temps pour faire du ménage en terme de place disque, c'est baobab (en GTK, de GNOME). Je me suis déjà dit que ça serait cool pareil mais en terminal, même si baobab permet de travailler à distance (gvfs powa).
Je viens de voir passer "ncdu", un "du" en ncurses et j'ai testé vite fait ; c'est pas mal, ça remplace bien, a l'air pratique et tout. Petit outil que je sens va me servir de temps en temps. Packagé dans Debian :)
Via #tuxfamily
J'ai pris des photos des étoiles, vers le pôle (nord forcément…) pendant un peu plus d'une heure à intervalle régulier. Le focus s'est faussé en plein milieu de la prise donc les photos sont pas top, et monté en film ça rend pas trop.
Pour voir, j'ai quand même voulu en faire une image composite, en les superposant toutes, ce qui mimique une longue pause, où on voit les traînées des étoiles (mais en pointillés). Avec ImageMagick, en ligne de commande ;)
Après quelques tâtonnements avec la page ci-liée et la page "Compositing Images", la commande se génère comme ça :
echo -n "convert -compose lighten 000.jpg "
for file in *.jpg; do
echo -n "$file -composite "
done
echo c.png
Ça marche bien, mais attention, ça prend pas mal de RAM…
EDIT: et pour combler les pointillés (plus ou moins…) http://www.imagemagick.org/Usage/morphology/#close.
Je suis pas très "appli web" en général, mais pour essayer de faire se parler les gens dans une équipe, il faut bien avouer que IRC c'est pas spécialement pratique pour un usage non-intensif (sans rester connecté tout le temps, sans lire forcément tout, en laissant tomber quand y'a beaucoup de log, …). Donc pour de petites équipes de non-geek c'est pas pratique : j'ai essayé au labo où je suis et boarf à part 2 personnes ça a pas vraiment marché.
Je suis tombé sur cette appli web par hasard en regardant cette liste : https://github.com/Kickball/awesome-selfhosted
Alors OK c'est en node (mais c'est dispo dans les paquets), OK il faut une base (mais du mongo c'est moins relou, et c'est aussi dans les paquets), il n'empêche qu'il y a le support LDAP (qui juste marche (sauf si on a pas d'adresses mails enregistrée pour tout le monde mais bon…), voir https://github.com/sdelements/lets-chat-ldap) et que globalement ça fonctionne bien, y compris quand on joue à faire tomber le serveur.
On a donc des salons de discussion, avec historique + recherche même lorsqu'on n'est pas connecté, on peut y insérer des images (pratique si y'a un problème sur un microscope par exemples, mettre une capture d'écran), les comptes sont unifiés (LDAP), auto-hébergé en interne… et juste ça. Ce n'est pas une usine comme mattermost ou rocket.chat et l'interface est claire et "moderne".
On va voir si ça prend chez les utilisateurs…
Un afficheur web d'images en tuiles pour panorama ou toute image très grande, qui prendrait trop de temps à télécharger entièrement pour afficher normalement.
Celui-là est plutôt bien fichu, avec assez d'options (minimap par exemple) et simple à mettre en place (exemple : https://openseadragon.github.io/docs/).
Il y a une liste de générateurs de tuiles compatibles, j'ai testé un script shell basé sur convert d'imagemagick (https://github.com/VoidVolker/MagickSlicer), ça juste marche bien et c'est tout simple à utiliser.
J'en ai profité pour mettre en lignes quelques-uns des panorama que j'avais en stock (http://jonathan.michalon.eu/pano).
Si on veut vite-fait tester des pages web ou mettre à dispo un fichier en web, comme python est installé automatiquement à peu près partout sur les serveurs, une seule commande :
python -m SimpleHTTPServer 8000
C'est probablement pas optimisé, pas sécurisé, pas tout ce qu'on veut mais ça permet de voir taktak ce qu'on fait sans rien installer spécialement et sans configuration.
Avec cssh (ssh en cluster : plusieurs connexions contrôlées depuis un champ central), si le window manager met une trop grande barre de fenêtre, on risque de ne pas voir le prompt de la machine connectée au-dessus.
Il suffit de paramétrer un espace réservé (en pixels) entre les fenêtres. Dans .clusterssh/config on met quelque chose comme :
terminal_reserve_bottom=42
et hop ça change la vie plutôt que de toujours devoir cliquer partout pour voir ce qu'on fait (ou de devoir réempiler toutes les fenêtres dans le bon ordre…).
Un casque analogique et un casque USB pour regarder un film ? Ça fonctionne avec pulseaudio, et même au cliquodrôme… presque triste que ce soit si simple. Bon après, trouver l'option… il fallait savoir…
Migrer des VM à chaud, sans stockage partagé, avec qemu/kvm ? J'avais vu passer ça, le temps que ça descende dans les distro, que j'y repense, que j'aie de quoi tester… bref là ça marche.
Il y avait un problème où il fallait créer le disque destination de la bonne taille à la main… en 2013 : c'est manifestement corrigé.
Attention, ça ne fonctionne pas avec virt-manager, il essaye de faire une migration comme si le stockage était partagé.
Donc avec virsh :
virsh migrate --live --persistent --undefinesource --copy-storage-all --verbose --desturi qemu+ssh://user@dest-machine/system vm-to-migrate
Ça demande le mot de passe pour se connecter en ssh, et c'est parti. La copie du disque prend forcément un peu de temps mais j'ai vu du trafic jusqu'à 400 Mo/s, et pendant ce temps-là la machine est toujours en fonctionnement : il y a une deuxième passe pour synchroniser le delta.
Pratique.
(La commande est issue de : http://hgj.hu/live-migrating-a-virtual-machine-with-libvirt-without-a-shared-storage/ car je n'ai pas trouvé d'exemple sur la page liée ni sur les pages proposées en bas.)
Copier un fichier avec scp à travers une autre machine-relais en une commande : possible (mais relou). Pour moi ça a donné un truc comme ça :
scp -o 'ProxyCommand ssh -W machine_finale:22 user@relais' -r /dossier/à/copier user@machine_finale:
Avec imagemagick, si on veut couper une image en tuiles plus petites (si l'image de base est trop grande pour une opération par exemple), on peut très facilement la couper en morceaux (en donnant la taille voulue de chaque ou le nombre de morceaux), puis les réassembler.
C'est juste un coup de convert et un coup de montage ! On s'en doutait, ici c'est documenté et je confirme que ça fonctionne. Ça évite de couper/réassembler à la main, ce que pas mal de gens ont l'air de faire avec photoshop :)
Si toi aussi tu tentes de faire un panorama de 83 photos avec hugin et que tu désespères à cause de stries blanches horizontales vers le milieu de l'image, ajoute juste cette option (-m à enblend) et hop :) En plus ça a l'air plus rapide…
Ça sent le bug complètement con mais bon s'ils l'ont mis en premier dans la FAQ c'est que c'est pas prévu d'être corrigé de sitôt.
Après avoir changé un disque, impossible de le monter. Enfin si, mount OK, mais après rien dans df, mount ou quoi que ce soit. Monter sur un autre dossier que celui prévu était OK aussi.
En fait le point de montage était bien dans le fstab, mais avec un UUID vide (j'avais généré la ligne mais vu que le disque marchait pas, mon script avait laissé vide l'UUID). Et donc systemd se sentait malin de me le démonter immédiaitement…
juil. 21 15:14:47 sdata4 kernel: EXT4-fs (sdi): mounted filesystem with ordered data mode. Opts: (null)
juil. 21 15:14:47 sdata4 systemd[1]: mnt-rozofs-storages-storage_2_8-0.mount: Unit is bound to inactive unit dev-disk-by\x2duuid.device
juil. 21 15:14:47 sdata4 systemd[1]: Unmounting /mnt/rozofs/storages/storage_2_8/0...
Un systemctl daemon-reload, pour relire le fstab, et hop…
Je suis tombé rapidement sur le post ci-lié mais j'aurais pas pensé à ça tout seul… enfin si, si j'étais tombé sur le bout de journal sus-cité…
Bonne question : comment on fait pour changer le nom d'un process (visible via ps ou /proc). Par exemple, au lieu d'avoir la commande nginx on voit "nginx: worker process".
Sur cette page, ils disent comment faire en modifiant directement dans argv… ça fonctionne mais ça a l'air crade est pas très souple.
D'ailleurs pour se marrer on peut le faire avec gdb (une fois à un breakpoint) :
(gdb) p argv[0]
$3 = 0x7fffffffe5cf "/home/john/code/a.out"
(gdb) set {char}0x7fffffffe5cf = 'a'
Là ça modifie bien /proc/<pid>/cmdline et ps… mais on ne peut pas par exemple malloc et remplir une string et la poser en argv[0] : ça fait juste rien.
Il y a apparemment prctl (voir https://github.com/electrum/procname) mais ça ne fonctionne que avec "c" comme argument à ps.
J'ai regardé dans les sources de nginx, ils expliquent bien… mais ça sent le gros gros hack :P
https://github.com/nginx/nginx/blob/branches/default/src/os/unix/ngx_setproctitle.c
En tous cas ça fonctionne avec gdb…
(gdb) b main
(gdb) r lala
(gdb) set argv[1] = 0x0
(gdb) p argv[0]
$1 = 0x7fffffffe5ca "/home/john/code/a.out"
(gdb) p strcpy($1, "coucou coincoin lala pouet trucmuche")
On peut donner des informations au noyau sur comment on va utiliser des pages de mémoire (random, séquentiel, et sous Linux des choses amusantes comme le "poisoning" d'une région mémoire, pour tester).
Il y a un pendant pour les fichiers, fadvise.
J'ai testé pour vous : mlmmj (Mailing List Management Made Joyful).
Alors oui, il y a mailman (et même mailman3 depuis plus d'un an), sympa… tous avec leurs problèmes, leur côté usine (surtout mailman3 parait-il).
J'avais vu passer sur IRC qu'il en existait au moins un autre, sans daemon, en C et je crois bien que c'était mlmmj. :)
J'ai fait tomber cela en marche avec du postfix, en utilisant les paquets de Debian 8 Jessie sans trop de soucis. Ça juste fonctionne, au moins le basique. Et on a même l'impression de comprendre ce qu'il se passe, de maîtriser la bête.
Pour l'interface web, c'est du super minimal (pas d'auth, ni CSS). Il faut un peu bidouiller les permissions pour arriver à concillier les deux (mais c'est documenté dans les README des paquets). La configuration ? Des fichiers texte dans le dossier des listes. Un booléen à activer ? touch du fichier qui va bien. Les adresses qui ont souscrit ? fichiers textes indéxés sur la première lettre, dans subscribers.d ! Quand je disais "simple" :)
Je pense que ça peut être très bien si on est prêt à partir sur du minimaliste. Il faut probablement éviter si on veut du fancy pour administrateurs de listes non-tech par exemple.
Notes :