Mon projet d'application "Sauvegarde"

Yunohost intègre une fonctionnalité de sauvegarde via la Moulinette. Je ferai un billet complet et complèterai la documentation officielle à ce sujet. Cela crée une sauvegarde sous forme d’archive zippée dans le /home/yunohost.backup.
Soucis que je vois :

  • la sauvegarde est sur le même disque
  • il faut la lancer manuellement, via une ligne de commande

Ce que j’aimerai faire, c’est une application qui soit une surcouche graphique à cette sauvegarde.
Une application permettra d’avoir rapidement la fonctionnalité. Puis je verrai avec ma montée en expérience pour faire intégrer ça dans le coeur de Yunohost (dans une version future).

Ce que ferai cette application? Mon cahier des charges

Les fonctionnalités que je prévois et que j’aimerai implémenter au fur et à mesure. Ce sera version après version, je verrai pour définir une roadmap.

  • Avoir une application qui a un bouton graphique, qui lorsque l’on clique dessus, appel le processus de sauvegarde de la moulinette de Yunohost
  • Détection de la présence ou non d’un support externe (Clef USB ou disque réseau) avec possibilité à l’utilisateur de choisir où créer la sauvegarde (pour qu’elle ne soit pas sur le même disque)
  • Test de l’espace disque disponible avant de copier l’archive de sauvegarde
  • Conservation de la date et heure de sauvegarde
  • Ajout d’un message régulier et d’un code couleur dans l’application pour indiquer le délai depuis la première sauvegarde avec sensibilisation à la nécessité de faire des sauvegardes. Vert : moins d’une semaine. Orange : entre une semaine et un mois. Rouge : plus d’un mois depuis la dernière sauvegarde.
  • Ajout de la fonctionnalité de restauration de la sauvegarde

A terme on aurait donc un moyen simple pour l’utilisateur de faire des sauvegardes, de les restaurer sans être un geek. Et comme Yunohost est utilisée par la Brique Internet, cela améliorait aussi la Brique Internet et son accessibilité au plus grand nombre.

Je vais voir pour commencer à état des lieux de ce qui existe, faire un POC et un dépôt Github et dès que j’aurai un peu avancé, je communiquerai sur le blog et sur le forum de Yunohost. A suivre donc.

5 Likes

Hmm ça m’a l’air tout bon ça ! Je suivrai ton app avec intérêt !
Suggestion de fitchure supplémentaire pour plus tard : la possibilité de faire automatiquement la sauvegarde vers la destination choisie (comme tu dis, USB ou disque réseau).
Une idée que j’avais en tête (j’en ai parlé pas plus tard que ce matin dans la mailing list ^^) c’était d’avoir deux briques internet : l’une chez moi (avec mes applis et données), et une autre chez une personne de confiance (avec ses applis et données) ; ces deux briques s’échangeraient alors les sauvegardes. Je précise que dans mon projet, j’ai un disque dur de 1 Tib sur chaque brique (avec /home et /var montés sur des partitions séparées, le reste sur la SD, et deux autres partitions pour les backups).
Quand j’aurai un peu mis le nez dans le code de tout ça (via Duniter potentiellement), je verrai si j’arrive encore à trouver un peu de temps pour aider ici aussi !
Trop de projets, trop de projets… :slight_smile:

Super idée :slight_smile:
Un truc qui permet de téléversement via RSync, FTP ou autre serait pas mal aussi.
Par contre il me semble que c’était en projet dans le core ? A voir sur dev.yunohost.org

J’ai aussi entendu parler “d’apps qui permettent d’étendre la moulinette et l’interface web moulinette” mais sans plus de détail. Quelqu’un pourrait en dire davantage svp ? Ca semble être un excellent moyen d’étendre la moulinette et l’interface admin via une app en attendant une intégration core. Et en évitant de devoir bricoler avec des tuiles et des accès comme certaines apps brique ?
Merci

Très bonne idée pour un sujet d’importance !

Une fonctionnalité intéressante serait de permettre de dissocier les sauvegardes :

  • des paramétrages/configurations des applis du serveur
  • des données des applis du serveur (courriels, bases de données, …)
  • des données utilisateur ( càd “/home/utilisateur/”)

Salut @genma,

C’est super tous les projets qui tu souhaite mettre en place.

Par contre, ne te lance pas trop vite.

Le projet YunoHost est en réflexion en ce moment sur sa gouvernance et sur son nouveau modèle de gestion du développement.

Je t’invite à venir sur le salon XMPP de développement : xmpp://dev@conference.yunohost.org pour en discuter.

1 Like

C’est super de voir qu’il y a des motivés sur cette partie !

Je vais tenter de détailler ci-dessous les évolutions envisagées concernant la sauvegarde. Mon objectif est de détailler un peu ce qui est envisagé afin d’essayer de créer si possible des synergies. Évidement à toi de voir ce qui te semble intéressant.

##Gestion de différents espaces de stockage https://dev.yunohost.org/issues/305
Pour l’instant on a quasi rien à ce sujet. L’idée serait de pouvoir gérer une collection d’espace de stockage.
Par exemple à l’aide de commande
yunohost storage add
yunohost storage remove
Sans doute aussi des commandes permettant de consulter le contenu de ces storages afin de l’afficher dans la webadmin et de déterminer l’espace disponible.

Les espaces de stockage pourrait être des clé usb, des dossiers, des espaces distants (SFTP, RSYNC …)
##Support de backup différentiel
Une fonctionnalité très attendu serait la gestion de backup différentiel afin de pouvoir faire des backup plus régulier en allégeant le poids des backups.
On a donc réfléchit avant la sortie de la 2.4 au format des scripts de backup. On demande qu’au lieu d’utiliser des commandes cp, les scripts de backup utilisent le helper ynh_backup (cf https://github.com/YunoHost/example_ynh/blob/master/scripts/backup#L14 ).
L’idée c’est d’avoir une commande qui sert d’abstraction. Actuellement elle sert à copier les fichiers dans le backup mais plus tard on s’en servira pour créer une liste de fichier à scruter pour créer le différentiel.

##Chiffrement ou non du backup
On pense donner la possibilité de chiffrer les archives (ce qui aura surtout du sens avec les backup distant).
Le soucis se situe dans l’implémentation. Quid en cas de perte de la clé de chiffrement ? YunoHost étant une distribution qui se veut au maximum grand public, il sera nécessaire d’accompagner l’utilisateur afin de ne pas perdre cette clé.

##Téléchargement d’une archive
On souhaite proposer le téléchargement d’une archive à partir de la webadmin, ceci pose la question de l’intégration avec le framework moulinette qui sert à la CLI/API YunoHost.

##La création d’une app permetant de proposer de l’espace de sauvegarde
L’idée serait de proposer un espace de sauvegarde à un ami qui a une brique en installant cette app qui permettra de lui donner un accès rsync ou sftp avec un quota d’espace.
Le concept peut sans doute être amélioré en ajoutant du monitoring par exemple.

##Interface de restauration au moment de l’installation d’une nouvelle instance YunoHost
Enfin, on souhaiterais que lors de la postinstall en mode graphique, l’utilisateur ait la possibilité de restaurer son archive au lieu de faire une postinstall classique.

A noter que nous avons peu discuter de la question de l’automatisation des backup. Idéalement il faudrait que ce soit sans opération manuelle nécessaire.

1 Like

J’ai lancé un appel, ça permet déjà de faire un brainstorming. Ensuite, je vais voir pour commencer light, suivre les évolutions, m’approprier ça peu à peu. Je ne me lance pas de suite. Je prends le temps de suivre et de réfléchir avant :slight_smile:

1 Like

Super. Le but est de rejoindre l’existant et d’aider, pas de faire pour dire “c’est moi qui l’ai fait”. Si y a déjà des idées et j’en doute pas, je rejoins ce qui existe sans soucis :slight_smile:

1 Like

Bonjour,

Support de backup différentiel
Une fonctionnalité très attendu serait la gestion de backup différentiel afin de pouvoir faire des backup plus régulier en allégeant le poids des backups.
On a donc réfléchit avant la sortie de la 2.4 au format des scripts de backup. On demande qu’au lieu d’utiliser des commandes cp, les scripts de backup utilisent le helper ynh_backup (cf https://github.com/YunoHost/example_ynh/blob/master/scripts/backup#L14 ).
L’idée c’est d’avoir une commande qui sert d’abstraction. Actuellement elle sert à copier les fichiers dans le backup mais plus tard on s’en servira pour créer une liste de fichier à scruter pour créer le différentiel.

Ce serait possible d’ajouter la possibilité de changer l’outils de sauvegarde ?
Je me réjouit déjà d’avoir de l’incrémentiel car avec la centaine de Go sur mon owncloud, ce n’est pas vraiment jouable d’utiliser l’outils.
Je m’explique : Pourriez-vous faire en sorte qu’il soit a peu près simple de developper des scripts d’installation d’un autre outils de sauvegarde (un peu à la manière des app ynh) de manière a ce que, une fois l’outils intégré il n’est plus qu’a utiliser les script de sauvegarde.
Enfin je pense directement à Borg Backup (qui me fait économiser beaucoup d’espace grâce à la déduplication)
En gros, dans mes rêves agités de geek, j’aimerai que yunohost attende 3 variables pour sauvegarder et restaurer :
$COMMANDE $SOURCE $DESTINATION

$COMMANDE serait donc la méthode de sauvegarde choisis par l’utilisateur
$SOURCE serait définit par les développeurs d’apps
$DESTINATION serait définit dans la configuration

@ZeJMaN

Tu seras peut être intéressé par https://github.com/JocelynDelalande/ansible-roles où tu trouveras des snippets ansible pour sauvegarder un yunohost via borg, en utilisant (en partie) le système de backup yunohost.
Apparemment ça ne sauvegarde pas les apps.

De mon coté j’utilise déjà borg pour sauvegarder mon ynh, mais avec des scripts maison.
J’utilise uniquement le hook ldap pour faire un dump de l’annuaire :

TMP_PATH=/home/yunohost.backup/borg/
yunohost backup create --no-compress --ignore-apps --hooks conf_ldap -o ${TMP_PATH}/ynh

Puis je fais un dump complet des bdd mysql :

mysqldump -q --user=root --password=$(cat /etc/yunohost/mysql) --events --ignore-table=mysql.events mysql  | tee ${TMP_PATH}/mysql/mysql.sql
for db in $(echo "SHOW DATABASES" | mysql -s --user=root --password=$(cat /etc/yunohost/mysql) | grep -vE '^(mysql|test|performance_schema|information_schema)$') ; do
    mysqldump -q --user=root --password=$(cat /etc/yunohost/mysql) $db | tee ${TMP_PATH}/mysql/${db}.sql > /dev/null 2>&1
done

Et enfin j’utilise borg pour envoyer la conf LDAP, le dump sql et le contenu complet d’un certain nombre de répertoires, vers mon serveur de backup distant

${BORG} create --verbose --debug --stats --exclude-caches ${ARCHIVE} \
--exclude ${ROOTFS}/home/yunohost.transmission \
${ROOTFS}/etc \
${ROOTFS}/root \
${ROOTFS}/home \
${ROOTFS}/opt \
${ROOTFS}/var/mail \
${ROOTFS}/var/www \
${ROOTFS}/var/log \
${ROOTFS}/var/spool/cron

Loin d’être idéal, car ça n’utilise pas les fonctionnalités de backup (et de restauration) intégrées aux apps mais ça couvre mon besoin pour l’instant, et ça évite des copies inutiles (j’ai le même problème que toi, je ne veux pas dupliquer mon répertoire owncloud).

Pendant un temps je voulais faire en sorte que yunohost puissent gérer les disques en raid. création des grappes, monitoring via glances et du coup gérer les sauvegardes/restaurations sur le raid … mais c’est un peu trop complexe pour moi.
Le raid est vraiment une bonne fonctionnalité pour sécuriser ses sauvegardes.

La gestion RAID ne dépend pas et ne doit pas dépendre de Yunohost mais de l’OS en dessous. Debian gère très bien le RAID. Après on pourra ajouter une interface graphique pour gérer ça mais on complexifierait peut-être trop Yunohost. A voir.

Le raid est vraiment une bonne fonctionnalité pour sécuriser ses sauvegardes.

Oui et non. Avoir des disques en RAID ce n’est pas une sauvegarde. C’est juste avoir un accès plus rapide / redondant. On a une copie en clone (RAID 1) mais ce n’est pas une sauvegarde. Le RAID c’est mieux que rien mais ce n’est pas une sauvegarde :slight_smile: Tu efface les données sur un disque en RAID, tu perds ta donnée (pour faire simple). Donc tu n’as pas une sauvegarde. Une sauvegarde c’est plus la règle des 3-2-1 comme je l’explique de façon vulgarisée dans mon billet Sauvegarde la règle des 3-2-1 - Le blog de Genma et surtout une sauvegarde on peut la restaurer comme je le dis dans Sauvegarde et restauration - Le blog de Genma

L’idée de l’App c’est justement d’avoir une VRAIE sauvegarde et de pouvoir la restaurer :slight_smile:

Alors, je n’ai pas dit que le raid était une sauvegarde, mais j’ai dit que c’était très bien pour sécuriser ses sauvegardes.
Je pensais plutôt à du RAID 6 ou 10.
Ensuite, je trouve qu’avoir une seule interface pour gérer toutes les fonctionnalités dont on a besoin est génial. Et, je pense que quelqu’un qui utilise yunohost n’est pas un geek et qu’il ne sais pas forcement configurer mdadm et encore moins utiliser fdisk ou gpart pour créer sa grappe.
Mais bon je comprend que ça n’a rien à voir avec la sauvegarde, que c’est une autre fonctionnalité et que c’est pas ton problème :slight_smile:tant pis j’attendrais que quelqu’un qui en vois vraiment l’intérêt s’intéresse à cette fonctionnalité.

@vlotho Je n’émettais pas une critique, je souhaitais préciser la notion de RAID d’une façon générique :slight_smile: A la relecture de mon message, j’avais un ton assez dur. Désolé.

Pour ton idée, oui je suis d’accord que le RAID c’est bien pour sécuriser les sauvegardes. Et effectivement, une gestion graphique serait un plus. Mais comme j’essayais de le dire, il y a deux choses.
Tu sais ce qu’est un RAID : au moment d’installer Debian, tu peux prendre le “mode installation personnalisé - expert” et configurer un RAID pour l’OS, où le disque des données. Ensuite tu suis l’installation classique de Yunohost.

Si ton idée, intéressante, serait : je clique sur sauvegarde, ça me détecte des disques et propose de créer le RAID pour ces disques, et ensuite ça suit le “processus de sauvegarde graphique” (cf mon cahier des charges), oui ce serait idéal.

Je pense qu’il faut faire étape par étape. Une sauvegarde graphique simple (sur un disque USB externe classique). Puis ensuite les sauvegardes à distance, incrémentales. Et enfin (ou avant, ou après, selon qui est motivé pour le faire et a le temps), une gestion graphique pour la configuration du RAID.

@vlotho si tu veux aider, tu peux lancer un topic avec ta demande, une sorte de cahier des charges pour que ton idée murisse, lance le débat le besoin (un peu comme je l’ai fait). Lances toi :slight_smile:

c’est que j’ai pas vraiment le temps de m’intéresser à beaucoup de choses … cf la famille, le boulot, la maison … tu vois, ca fais 15 jours que tu m’a répondu et j’ai enfin réussi à prendre 5 minutes pour répondre à ton message :slight_smile: j’ai une imprimante 3d aussi et elle prend la poussière …

Bonjour @genma et @Moul ,

Je ne suis pas un pro de l’informatique mais j’applique une méthode en mode Terminal (qui vaut ce qu’elle vaut même si …) afin d’avoir une copie du backup ailleurs que sur mon serveur YunoHost : documentation:yunohost-jessie [AviGNU.wiki]

Pour résumer :

Pour récupérer une sauvegarde depuis son serveur vers le /home de son ordinateur (avec 1234 comme port SSH ; avec IP_ou_NDD comme adresse IP [locale ou pas] ou NDD son Nom De Domaine ; avec $USER son nom d’utilisateur ; avec aaaammjj-hhmmss comme par exemple 20161002-084907 [nom de la sauvegarde YunoHost]) :

yunohost backup create
scp -P 1234 root@IP_ou_NDD:/home/yunohost.backup/archives/aaaammjj-hhmmss.tar.gz /home/$USER
scp -P 1234 root@IP_ou_NDD:/home/yunohost.backup/archives/aaaammjj-hhmmss.info.json /home/$USER

Sur le même principe que précédemment, envoyer une sauvegarde depuis le /home de son ordinateur vers son serveur (s’assurer que le dossier archive existe bien sur le serveur sinon lancer une première sauvegarde ou en dernier recours créer le dossier en root : mkdir /home/yunohost.backup/archives) :

scp -P 1234 /home/$USER/aaaammjj-hhmmss.info.json root@IP_ou_NDD:/home/yunohost.backup/archives
scp -P 1234 /home/$USER/aaaammjj-hhmmss.tar.gz root@IP_ou_NDD:/home/yunohost.backup/archives
yunohost backup restore aaaammjj-hhmmss.tar.gz

Bref, si pour l’heure ça peut dépanner …

ppr

1 Like

Ca dépanne parfaitement. Mon idée est de rendre ça accessible en version graphique via une app.

J’ai testé la commande yunohost backup create et ça sauvegarde bien pas mal de chose (faut voir pour améliorer encore un peu mais c’est déjà une très bonne fonctionnalité). Pas eu le temps d’avancer sur le sujet mais tes lignes de commandes me feront gagner un peu de temps :slight_smile:

J’ai ajouté dans le wiki de Yunohost les lignes issues du billet que tu cites pour compléter avec les commandes liées à la sauvegarde.

Y’a une doc qui liste ce qui est sauvegardé quelque part ?
(oui, j’ai pas trop le temps mais surtout une grosse flemme de regarder le code :smiley: )
(Et si la réponse est non, ben je risque de m’y coller à la rédaction ^^)

Il y a une page qui liste ce que Yunohost permet de faire / de sauvegarder actuellement
https://yunohost.org/#/backup_fr

1 Like

Merci.
Donc y’a tout ce qu’il me faut, c’est très complet ! :slight_smile: