Page 1 sur 1

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

Publié : lun. 02 août 2010, 13:24
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

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

Publié : lun. 02 août 2010, 14:01
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é...

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

Publié : lun. 02 août 2010, 14:33
par Kooothor
Bonne idée en effet :)
Je plussoie.

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

Publié : mar. 03 août 2010, 13:12
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 ;)

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

Publié : mar. 03 août 2010, 14:50
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+

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

Publié : mar. 03 août 2010, 15:25
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)

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

Publié : mar. 03 août 2010, 15:30
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...

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

Publié : mer. 04 août 2010, 15:43
par LeCrayonVert
Une version un peu mieux :
http://pastebin.com/Gm6Kfts4

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

Publié : mer. 04 août 2010, 19:52
par wain
ne pas oublier yaourt --backup pour sauvegarder et yaourt --backup fichier.tar.bz2 pour restaurer :D

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

Publié : jeu. 05 août 2010, 18:47
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.

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

Publié : mar. 10 août 2010, 14:30
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.

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

Publié : ven. 03 déc. 2010, 22:13
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 ?

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

Publié : lun. 06 déc. 2010, 18:56
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 ;)

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

Publié : mar. 07 déc. 2010, 17:35
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à ?

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

Publié : mar. 07 déc. 2010, 20:39
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.

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

Publié : mar. 18 janv. 2011, 21:28
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!