[Yaourt] Instantané de l'état du système (script proposé)

Annonces, dépannage, évolution du projet yaourt
Répondre
Avatar de l’utilisateur
LeCrayonVert
Daikyu
Messages : 81
Inscription : ven. 30 juil. 2010, 12:17
Localisation : France

[Yaourt] Instantané de l'état du système (script proposé)

Message par LeCrayonVert »

Voilà, je me demandais s'il était possible d'avoir une fonctionnalité de snapshot pour l'état des paquets. Je m'explique. Supposons que l'on veuille installer x paquets (un certain nombres seront installés par dépendances, d'autres par compilation, etc...) d'un coup. Mais que juste après, pour telles ou telles raisons, on décide de revenir en arrière pour retrouver l'état d'avant.
Alors je ne sais pas si la gestion des dépendances est suffisamment puissante pour pouvoir retirer en cascade sans risque après coup avec la même liste fournie à l'option -R qu'à l'option -S à l'installation, donc ce que pensais avoir comme truc simple serait du genre :

Code : Tout sélectionner

pacman savestate

Code : Tout sélectionner

pacman faire n'importe quoi/ tout ce qu'on veut, installer supprimer, etc..

Code : Tout sélectionner

pacman restorestate N°snapshot
et on se retrouverait avec un état des paquets comme avant le savestate.
(ailurus, contient une fonctionnalité équivalente pour APT, mais seulement graphiquement qui permet de faire des instantanées à plusieurs dates)
Alors j'ai entendu parler de la base de données alpm que l'on pouvait sauvegarder et restaurer avec yaourt -B, est-ce fait pour ça ?

Merci
Dernière modification par LeCrayonVert le dim. 08 août 2010, 17:14, modifié 1 fois.
Avatar de l’utilisateur
LeCrayonVert
Daikyu
Messages : 81
Inscription : ven. 30 juil. 2010, 12:17
Localisation : France

Re: [Yaourt] Instantané (Snapshot) de l'état du système.

Message par LeCrayonVert »

Bon sinon à la main je ferai ça :

Code : Tout sélectionner

yaourt -Q > packages
installation de plein de truc, suppression d'autres
yaourt -Q > packages.new
diff packages packages.new
Puis virer les paquets dont les lignes commencent par > et installer ceux dont les lignes commence par < tout ceci pouvant être scripté...
Avatar de l’utilisateur
Kooothor
archer
Messages : 103
Inscription : dim. 19 oct. 2008, 17:01

Re: [Yaourt] Instantané (Snapshot) de l'état du système.

Message par Kooothor »

Bonne idée en effet :)
Je plussoie.
Avatar de l’utilisateur
LeCrayonVert
Daikyu
Messages : 81
Inscription : ven. 30 juil. 2010, 12:17
Localisation : France

Re: [Yaourt] Instantané (Snapshot) de l'état du système.

Message par LeCrayonVert »

Bon j'ai fait un script python basique (pour l'instant, pas de contrôle d'erreurs des paramètres et tout ça) qui fait ça :
http://pastebin.toile-libre.org/?show=76864

A copier dans un fichier pkgbackup.py par exemple, ensuite pour l'utiliser :

Code : Tout sélectionner

python pkgbackup.py backup
va sauvegarder dans le dossier courant un fichier contenant la liste courante des paquets (le nom du fichier contient la date et l'heure)
puis

Code : Tout sélectionner

python pkgbackup.py restore nomdufichiersauvegarde
Ensuite ca lance un yaourt -R et yaourt -S avec les arguments qui vont bien, donc il faudra confirmer naturellement ;)
Avatar de l’utilisateur
biginoz
archer de cavalerie
Messages : 166
Inscription : lun. 10 août 2009, 20:25
Localisation : Le mans

Re: [Yaourt] Instantané (Snapshot) de l'état du système.

Message par biginoz »

Sympa le script mais j'ai une question avant de l'utiliser :
Le fait de restorer la base ne va-t-il pas mettre en l'air les dépendances car chaque paquet va être installé manuellement ,
sinon une autre question mais qui va dans le même sens, des paquets vont être installé plusieurs fois par le jeu des dépendances (une fois par le fait qu'une dépendance est requise et une autre par la liste des paquets retenue) , non?
Que se passe-t-il en cas de non présence du paquet car devenu obsolète?

Ne vaudrait-il pas de le lier au dépot snapshot d'archlinux en fonction de la date.

J'applaudis l'initiative que je trouve géniale, :bravo:
J'espère que mes remarques ne seront pas mal prises, je tiens simplement à aider...
A+
dell XPS L502 + xfce4.10
Membre de l'équipe de traduction fr de Xfce
Avatar de l’utilisateur
LeCrayonVert
Daikyu
Messages : 81
Inscription : ven. 30 juil. 2010, 12:17
Localisation : France

Re: [Yaourt] Instantané (Snapshot) de l'état du système.

Message par LeCrayonVert »

Salut,
En fait j'ai pas vraiment réfléchi à l'histoire des dépendances, faudrait voir comment faire.
Mais là je ne restaure pas la base via yaourt -B, donc si c'est ça que tu sous-entends par installation locale...

Par contre là supposons que je fasse un instantané à un instant t.
Juste après je décide d'installer le paquet X qui installera par dépendance les paquets Y et Z (naturellement il peut y avoir d'autres dépendances de X qui sont déjà installées et sont donc contenus dans la sauvegarde de l'état).
Ensuite je refais un instantanée, la comparaison des deux instantanées va montrer que X,Y,Z sont en plus et c'est tout il n'y a plus d'infos que ça. Par voie de conséquence, si on veut revenir dans l'état d'avant, il faut virer X,Y,Z, ca ne change rien aux dépendances non ? Ou alors je n'ai pas très bien compris ;)

(bon de toute façon ce genre de chose, c'est pas vraiment fait pour durer, car quand BTRFS sera stable on pourra avoir des snapshots du systèmes de fichiers, comme le fait déjà Yum d'ailleurs sous Fedora)
Avatar de l’utilisateur
LeCrayonVert
Daikyu
Messages : 81
Inscription : ven. 30 juil. 2010, 12:17
Localisation : France

Re: [Yaourt] Instantané (Snapshot) de l'état du système.

Message par LeCrayonVert »

Je prend un exemple simple.

Code : Tout sélectionner

python pkgbackup.py backup
un fichier packagequery_xxxxxxxx est généré dans le dossier courant

Code : Tout sélectionner

yaourt -S gedit
va installer en plus du paquet gedit, les paquets gtksourceview2 et pygtksourceview2 (chez moi du moins, car gnome est déjà installé).

Code : Tout sélectionner

python pkgbackup.py restore packagequery_xxxxxxxx
va faire en fait :

Code : Tout sélectionner

yaourt -R gedit gtksourceview2 pygtksourceview2
remettant ainsi le système dans l'état d'avant...

Si les paquets sont périmés, bah disons que ce sera yaourt qui gèrera tout ça de manière interactive...
Avatar de l’utilisateur
LeCrayonVert
Daikyu
Messages : 81
Inscription : ven. 30 juil. 2010, 12:17
Localisation : France

Re: [Yaourt] Instantané (Snapshot) de l'état du système.

Message par LeCrayonVert »

Une version un peu mieux :
http://pastebin.com/Gm6Kfts4
Avatar de l’utilisateur
wain
Maître du Kyudo
Messages : 1854
Inscription : ven. 11 août 2006, 19:15
Localisation : Nancy (54)

Re: [Yaourt] Instantané (Snapshot) de l'état du système.

Message par wain »

ne pas oublier yaourt --backup pour sauvegarder et yaourt --backup fichier.tar.bz2 pour restaurer :D
Avatar de l’utilisateur
LeCrayonVert
Daikyu
Messages : 81
Inscription : ven. 30 juil. 2010, 12:17
Localisation : France

Re: [Yaourt] Instantané (Snapshot) de l'état du système.

Message par LeCrayonVert »

Oui ca peut servir en plus, mais je dirai que c'est plus lié à des fins d'interventions sur la base de données de pacman d'une autre machine plutôt qu'à faire ce que je veux faire.
Avatar de l’utilisateur
LeCrayonVert
Daikyu
Messages : 81
Inscription : ven. 30 juil. 2010, 12:17
Localisation : France

Re: [Yaourt] Instantané de l'état du système (script proposé)

Message par LeCrayonVert »

Bon après un peu plus d'approfondissement sur le sujet, voici d'autres pistes :
- On peut effectivement utiliser yaourt -B pour la sauvegarde complète de la base de données, outre le fait que ca peut servir un jour si on la casse, ca contient plus d'infos que la liste que je sauvegarde avec mon script. Et on peut faire sur le backup tout ce qu'il est possible de faire avec l'option -Q de pacman.
En gros :

Code : Tout sélectionner

yaourt -B, sauvegarde dans un fichier tar.bz2 la base
installer, supprimer des trucs
 diff <(yaourt -Qq --backupfile pacman-xxxx-xx-xx_xxhxx.tar.bz2) <(yaourt -Qq)
permet de voir les diff entre la base actuelle et celle sauvegardée
Ensuite il suffit de traiter de la même manière que précédemment.

-En activant l'option UseSysLog de pacman.conf on peut suivre à la trace la suppression et l'installation des paquets dans /var/log/pacman.log (d'ailleurs il existe des scripts basés là dessus pour restaurer un système).
L'idéal là serait de dire je veux revenir à tel point en arrière dans le temps et analyser les lignes installed et removed pour faire le nécessaire.
Avatar de l’utilisateur
rafmav
yeomen
Messages : 271
Inscription : mer. 11 mars 2009, 13:30

Re: [Yaourt] Instantané de l'état du système (script proposé

Message par rafmav »

Génial!
J'imagine ça pour installer ensuite le diff

Code : Tout sélectionner

yaourt -B resultat_du_diff
Mais je crois que c'est faux.

Et si c'est pour retirer, j'imagine que c'est -R à la place de -B; j'imagine que l'ordre dans lequel on a fait le 'diff' importe, et qu'on n'a pas la meme chose avec:

Code : Tout sélectionner

diff <(yaourt -Qq --backupfile pacman-xxxx-xx-xx_xxhxx.tar.bz2) <(yaourt -Qq)
qu'avec

Code : Tout sélectionner

diff < (yaourt -Qq) < (yaourt -Qq --backupfile pacman-xxxx-xx-xx_xxhxx.tar.bz2)
Tu peux développer sur ton 'diff' et sa syntaxe, s'il te plait ? tu demande quoi ensuite ?
#rmv$@f29£8µ1
Ma petite paresse me perdra...
Si vous ne voulez pas vous tromper, ne faites rien!
Impossible est impossible: est venue une personne qui ne savais pas que c'était impossible, et qui l'a fait!
Avatar de l’utilisateur
LeCrayonVert
Daikyu
Messages : 81
Inscription : ven. 30 juil. 2010, 12:17
Localisation : France

Re: [Yaourt] Instantané de l'état du système (script proposé

Message par LeCrayonVert »

Non, yaourt -B (sans argument) va créer une sauvegarde de la base de données dans un fichier local dans le dossier courant.
Avec argument, il va essayer de restaurer la base de données dont le nom porte le nom de l'argument, autrement dit ça marchera en fournissant le nom de l'archive créée précédemment mais pas avec le résultat d'un diff ;)
Attention, la syntaxe :

Code : Tout sélectionner

<(quelque chose qui produit sur la sortie standard)
Ce n'est pas :

Code : Tout sélectionner

< (quelque chose qui produit sur la sortie standard)
Il n'y a pas d'espace entre < et (.
En fait c'est une astuce pour pouvoir mettre en argument des résultats de commande (genre cat , grep, etc..) là où des fichiers sont attendus (la commande diff attend 2 fichiers).

Oui on aura pas la même chose suivant l'ordre, mais c'est un truc réversible, c'est à dire que d'après le résultat d'un diff d'un certain ordre, on peut en déduire le résultat de l'autre, donc ça importe peu au final, ce qui compte c'est de bien interpréter la sortie et de pas mélanger en cours de route ;)
Avatar de l’utilisateur
rafmav
yeomen
Messages : 271
Inscription : mer. 11 mars 2009, 13:30

Re: [Yaourt] Instantané de l'état du système (script proposé

Message par rafmav »

Merci, trapu, compliqué, mais je crois que j'ai pigé.

Objectif: faire une sauvegarde automatiquement avant toute mise à jour, d'autant plus si des paquets sont ajoutés ou retirés. On va appeler ça un point de restauration, par allusion aux dowsiens.

Ou bien cet outil existe déjà ?
#rmv$@f29£8µ1
Ma petite paresse me perdra...
Si vous ne voulez pas vous tromper, ne faites rien!
Impossible est impossible: est venue une personne qui ne savais pas que c'était impossible, et qui l'a fait!
Avatar de l’utilisateur
LeCrayonVert
Daikyu
Messages : 81
Inscription : ven. 30 juil. 2010, 12:17
Localisation : France

Re: [Yaourt] Instantané de l'état du système (script proposé

Message par LeCrayonVert »

En fait comme je le précisais plus haut, je me dis qu'avec l'arrivée de btrfs, tout ceci sera inutile, vu qu'il suffira d'utiliser les snapshots avant une opération sur les paquets et il sera très simple de revenir en arrière. En plus ca permettra de gérer les downgrade de version, ce que ne fait pas ce script ;) C'est pour ça que je me suis pas plus penché sur le sujet ;)
Mais sinon dans mon script python, le résultat du diff (c'est pas le diff du shell) produit des + et des - et c'est là dessus que je me base dans le script. Après si on veut le faire en bash, c'est sûrement possible avec le résultat d'un diff standard.
Avatar de l’utilisateur
rafmav
yeomen
Messages : 271
Inscription : mer. 11 mars 2009, 13:30

Re: [Yaourt] Instantané de l'état du système (script proposé

Message par rafmav »

attention, les snapshots et sauvegardes sont aussi la porte d'entrée au retour aux trucs qui ne marchaient pas... sous dows, aux virus qu'y s'y mettent!
#rmv$@f29£8µ1
Ma petite paresse me perdra...
Si vous ne voulez pas vous tromper, ne faites rien!
Impossible est impossible: est venue une personne qui ne savais pas que c'était impossible, et qui l'a fait!
Répondre