Existe-t-il un moyen dans Ubuntu d'annuler ou d'annuler la dernière mise à niveau après avoir fait un apt-get upgrade
si vous n'aimez pas les résultats?
Existe-t-il un moyen dans Ubuntu d'annuler ou d'annuler la dernière mise à niveau après avoir fait un apt-get upgrade
si vous n'aimez pas les résultats?
Réponses:
aptitude
vous donne accès à toutes les versions d'un paquet si elles sont disponibles selon la gestion des paquets Debian .
Je suis tombé sur le blog Blogstatic de Hartman: Comment annuler une mise à jour dans Ubuntu Lucid
La première étape pour annuler la mise à jour incriminée a été de savoir de quelles mises à jour il s'agissait exactement. Après avoir cherché sur certains forums, je suis tombé sur un moyen de voir mon historique de mise à jour: Ouvrez le gestionnaire de paquets synaptic ("sudo synaptic" dans le terminal). Dans la barre de menus, cliquez sur Fichier -> Historique et vous verrez toutes vos mises à jour triées par date.
Malheureusement, j'avais installé une vingtaine de mises à jour aujourd'hui et je ne savais pas laquelle avait causé le problème. En parcourant chacun des packages nommés dans la liste Historique, j'ai pu rétrograder quelques-uns à la fois jusqu'à ce que le problème soit résolu et que j'aie identifié la mise à jour incriminée. Pour faire ça:
Utilisez la barre de recherche pour trouver le package que vous souhaitez rétrograder. Une fois que vous avez trouvé ce que vous cherchez, cliquez sur le package pour le sélectionner. Dans la barre de menus, cliquez sur Package -> Forcer la version et sélectionnez la version précédente du package dans le menu déroulant. Cliquez sur le bouton "Appliquer" pour appliquer la rétrogradation.
J'ai dû le faire aujourd'hui sur mon système Debian. Tout d'abord, j'ai identifié la plage de temps au cours de laquelle la mise à niveau incriminée s'est produite et j'ai récupéré les entrées de journal en donnant les anciens et nouveaux numéros de version des packages mis à niveau:
$ awk '$1=="2016-03-20" && $3=="upgrade"' /var/log/dpkg.log
2016-03-20 16:58:22 upgrade libwebkitgtk-3.0-0:amd64 2.4.9-3 2.4.10-1
2016-03-20 16:58:24 upgrade libjavascriptcoregtk-3.0-0:amd64 2.4.9-3 2.4.10-1
2016-03-20 16:58:26 upgrade traceroute:amd64 1:2.0.22-1 1:2.1.0-1
2016-03-20 16:58:33 upgrade ethtool:amd64 1:4.2-1 1:4.5-1
2016-03-20 16:58:34 upgrade libsdl1.2debian:amd64 1.2.15+dfsg1-3 1.2.15+dfsg1-4
2016-03-20 16:58:34 upgrade subversion:amd64 1.9.3-2+b1 1.9.3-3
2016-03-20 16:58:36 upgrade libsvn1:amd64 1.9.3-2+b1 1.9.3-3
2016-03-20 16:58:56 upgrade linux-image-amd64:amd64 4.3+70 4.4+71
2016-03-20 16:58:56 upgrade linux-libc-dev:amd64 4.3.5-1 4.4.6-1
2016-03-20 16:59:03 upgrade amd64-microcode:amd64 2.20141028.1 2.20160316.1
Ensuite, j'ai essayé de trouver les fichiers de package encore en cache sur le disque (heureusement pour moi, je n'avais pas exécuté de nettoyage automatique):
$ awk '$1=="2016-03-20" && $3=="upgrade" {gsub(/:/, "%3a", $5); split($4, f, ":"); print "/var/cache/apt/archives/" f[1] "_" $5 "_" f[2] ".deb"}' /var/log/dpkg.log | xargs -r ls -ld
ls: cannot access '/var/cache/apt/archives/ethtool_1%3a4.2-1_amd64.deb': No such file or directory
-rw-r--r-- 1 root root 28820 Dec 18 2014 /var/cache/apt/archives/amd64-microcode_2.20141028.1_amd64.deb
-rw-r--r-- 1 root root 1978874 Dec 10 18:22 /var/cache/apt/archives/libjavascriptcoregtk-3.0-0_2.4.9-3_amd64.deb
-rw-r--r-- 1 root root 185006 Mar 12 00:41 /var/cache/apt/archives/libsdl1.2debian_1.2.15+dfsg1-3_amd64.deb
-rw-r--r-- 1 root root 1317644 Mar 3 11:30 /var/cache/apt/archives/libsvn1_1.9.3-2+b1_amd64.deb
-rw-r--r-- 1 root root 7679400 Dec 10 18:22 /var/cache/apt/archives/libwebkitgtk-3.0-0_2.4.9-3_amd64.deb
-rw-r--r-- 1 root root 6108 Dec 14 06:59 /var/cache/apt/archives/linux-image-amd64_4.3+70_amd64.deb
-rw-r--r-- 1 root root 1075506 Feb 7 21:36 /var/cache/apt/archives/linux-libc-dev_4.3.5-1_amd64.deb
-rw-r--r-- 1 root root 983174 Mar 3 11:30 /var/cache/apt/archives/subversion_1.9.3-2+b1_amd64.deb
-rw-r--r-- 1 root root 53376 Feb 28 18:35 /var/cache/apt/archives/traceroute_1%3a2.0.22-1_amd64.deb
Il semble que je n'ai pas l'ancien paquet ethtool pour une raison quelconque. Continuons tout de même en installant de force les anciens fichiers de package:
$ sudo dpkg -i /var/cache/apt/archives/amd64-microcode_2.20141028.1_amd64.deb /var/cache/apt/archives/libjavascriptcoregtk-3.0-0_2.4.9-3_amd64.deb /var/cache/apt/archives/libsdl1.2debian_1.2.15+dfsg1-3_amd64.deb /var/cache/apt/archives/libsvn1_1.9.3-2+b1_amd64.deb /var/cache/apt/archives/libwebkitgtk-3.0-0_2.4.9-3_amd64.deb /var/cache/apt/archives/linux-image-amd64_4.3+70_amd64.deb /var/cache/apt/archives/linux-libc-dev_4.3.5-1_amd64.deb /var/cache/apt/archives/subversion_1.9.3-2+b1_amd64.deb /var/cache/apt/archives/traceroute_1%3a2.0.22-1_amd64.deb
dpkg: warning: downgrading amd64-microcode from 2.20160316.1 to 2.20141028.1
(Reading database ... 139632 files and directories currently installed.)
Preparing to unpack .../amd64-microcode_2.20141028.1_amd64.deb ...
Unpacking amd64-microcode (2.20141028.1) over (2.20160316.1) ...
dpkg: warning: downgrading libjavascriptcoregtk-3.0-0:amd64 from 2.4.10-1 to 2.4.9-3
Preparing to unpack .../libjavascriptcoregtk-3.0-0_2.4.9-3_amd64.deb ...
Unpacking libjavascriptcoregtk-3.0-0:amd64 (2.4.9-3) over (2.4.10-1) ...
dpkg: warning: downgrading libsdl1.2debian:amd64 from 1.2.15+dfsg1-4 to 1.2.15+dfsg1-3
Preparing to unpack .../libsdl1.2debian_1.2.15+dfsg1-3_amd64.deb ...
Unpacking libsdl1.2debian:amd64 (1.2.15+dfsg1-3) over (1.2.15+dfsg1-4) ...
dpkg: warning: downgrading libsvn1:amd64 from 1.9.3-3 to 1.9.3-2+b1
Preparing to unpack .../libsvn1_1.9.3-2+b1_amd64.deb ...
Unpacking libsvn1:amd64 (1.9.3-2+b1) over (1.9.3-3) ...
Preparing to unpack .../libwebkitgtk-3.0-0_2.4.9-3_amd64.deb ...
Unpacking libwebkitgtk-3.0-0:amd64 (2.4.9-3) over (2.4.9-3) ...
dpkg: warning: downgrading linux-image-amd64 from 4.4+71 to 4.3+70
Preparing to unpack .../linux-image-amd64_4.3+70_amd64.deb ...
Unpacking linux-image-amd64 (4.3+70) over (4.4+71) ...
dpkg: warning: downgrading linux-libc-dev:amd64 from 4.4.6-1 to 4.3.5-1
Preparing to unpack .../linux-libc-dev_4.3.5-1_amd64.deb ...
Unpacking linux-libc-dev:amd64 (4.3.5-1) over (4.4.6-1) ...
dpkg: warning: downgrading subversion from 1.9.3-3 to 1.9.3-2+b1
Preparing to unpack .../subversion_1.9.3-2+b1_amd64.deb ...
Unpacking subversion (1.9.3-2+b1) over (1.9.3-3) ...
dpkg: warning: downgrading traceroute from 1:2.1.0-1 to 1:2.0.22-1
Preparing to unpack .../traceroute_1%3a2.0.22-1_amd64.deb ...
Unpacking traceroute (1:2.0.22-1) over (1:2.1.0-1) ...
Setting up amd64-microcode (2.20141028.1) ...
update-initramfs: deferring update (trigger activated)
amd64-microcode: microcode will be updated at next boot
Setting up libjavascriptcoregtk-3.0-0:amd64 (2.4.9-3) ...
Setting up libsdl1.2debian:amd64 (1.2.15+dfsg1-3) ...
Setting up libsvn1:amd64 (1.9.3-2+b1) ...
dpkg: dependency problems prevent configuration of libwebkitgtk-3.0-0:amd64:
libwebkitgtk-3.0-0:amd64 depends on libwebkitgtk-3.0-common (>= 2.4.9); however:
Package libwebkitgtk-3.0-common is not installed.
dpkg: error processing package libwebkitgtk-3.0-0:amd64 (--install):
dependency problems - leaving unconfigured
Setting up linux-image-amd64 (4.3+70) ...
Setting up linux-libc-dev:amd64 (4.3.5-1) ...
Setting up subversion (1.9.3-2+b1) ...
Setting up traceroute (1:2.0.22-1) ...
update-alternatives: using /usr/bin/traceroute.db to provide /usr/bin/traceroute (traceroute) in auto mode
update-alternatives: using /usr/bin/lft.db to provide /usr/bin/lft (lft) in auto mode
update-alternatives: using /usr/bin/traceproto.db to provide /usr/bin/traceproto (traceproto) in auto mode
update-alternatives: using /usr/sbin/tcptraceroute.db to provide /usr/sbin/tcptraceroute (tcptraceroute) in auto mode
Processing triggers for libc-bin (2.22-3) ...
Processing triggers for man-db (2.7.5-1) ...
Processing triggers for initramfs-tools (0.123) ...
update-initramfs: Generating /boot/initrd.img-4.4.0-1-amd64
Errors were encountered while processing:
libwebkitgtk-3.0-0:amd64
Comme le message d'erreur le disait, l'un de mes packages dépendait d'un package -common juste avant la mise à niveau, mais la mise à niveau l'a supprimé (et apt-get ne le trouve plus). Heureusement, son fichier de package est toujours dans / var / cache / apt, je peux donc simplement l'ajouter à la liste et réessayer:
$ ls -ld /var/cache/apt/archives/libwebkitgtk-3.0-common*
-rw-r--r-- 1 root root 452278 Dec 10 18:22 /var/cache/apt/archives/libwebkitgtk-3.0-common_2.4.9-3_all.deb
$ sudo dpkg -i /var/cache/apt/archives/amd64-microcode_2.20141028.1_amd64.deb /var/cache/apt/archives/libjavascriptcoregtk-3.0-0_2.4.9-3_amd64.deb /var/cache/apt/archives/libsdl1.2debian_1.2.15+dfsg1-3_amd64.deb /var/cache/apt/archives/libsvn1_1.9.3-2+b1_amd64.deb /var/cache/apt/archives/libwebkitgtk-3.0-0_2.4.9-3_amd64.deb /var/cache/apt/archives/linux-image-amd64_4.3+70_amd64.deb /var/cache/apt/archives/linux-libc-dev_4.3.5-1_amd64.deb /var/cache/apt/archives/subversion_1.9.3-2+b1_amd64.deb /var/cache/apt/archives/traceroute_1%3a2.0.22-1_amd64.deb /var/cache/apt/archives/libwebkitgtk-3.0-common_2.4.9-3_all.deb
(Reading database ... 139632 files and directories currently installed.)
Preparing to unpack .../amd64-microcode_2.20141028.1_amd64.deb ...
Unpacking amd64-microcode (2.20141028.1) over (2.20141028.1) ...
Preparing to unpack .../libjavascriptcoregtk-3.0-0_2.4.9-3_amd64.deb ...
Unpacking libjavascriptcoregtk-3.0-0:amd64 (2.4.9-3) over (2.4.9-3) ...
Preparing to unpack .../libsdl1.2debian_1.2.15+dfsg1-3_amd64.deb ...
Unpacking libsdl1.2debian:amd64 (1.2.15+dfsg1-3) over (1.2.15+dfsg1-3) ...
Preparing to unpack .../libsvn1_1.9.3-2+b1_amd64.deb ...
Unpacking libsvn1:amd64 (1.9.3-2+b1) over (1.9.3-2+b1) ...
Preparing to unpack .../libwebkitgtk-3.0-0_2.4.9-3_amd64.deb ...
Unpacking libwebkitgtk-3.0-0:amd64 (2.4.9-3) over (2.4.9-3) ...
Preparing to unpack .../linux-image-amd64_4.3+70_amd64.deb ...
Unpacking linux-image-amd64 (4.3+70) over (4.3+70) ...
Preparing to unpack .../linux-libc-dev_4.3.5-1_amd64.deb ...
Unpacking linux-libc-dev:amd64 (4.3.5-1) over (4.3.5-1) ...
Preparing to unpack .../subversion_1.9.3-2+b1_amd64.deb ...
Unpacking subversion (1.9.3-2+b1) over (1.9.3-2+b1) ...
Preparing to unpack .../traceroute_1%3a2.0.22-1_amd64.deb ...
Unpacking traceroute (1:2.0.22-1) over (1:2.0.22-1) ...
Selecting previously unselected package libwebkitgtk-3.0-common.
Preparing to unpack .../libwebkitgtk-3.0-common_2.4.9-3_all.deb ...
Unpacking libwebkitgtk-3.0-common (2.4.9-3) ...
Setting up amd64-microcode (2.20141028.1) ...
update-initramfs: deferring update (trigger activated)
amd64-microcode: microcode will be updated at next boot
Setting up libjavascriptcoregtk-3.0-0:amd64 (2.4.9-3) ...
Setting up libsdl1.2debian:amd64 (1.2.15+dfsg1-3) ...
Setting up libsvn1:amd64 (1.9.3-2+b1) ...
Setting up linux-image-amd64 (4.3+70) ...
Setting up linux-libc-dev:amd64 (4.3.5-1) ...
Setting up subversion (1.9.3-2+b1) ...
Setting up traceroute (1:2.0.22-1) ...
update-alternatives: using /usr/bin/traceroute.db to provide /usr/bin/traceroute (traceroute) in auto mode
update-alternatives: using /usr/bin/lft.db to provide /usr/bin/lft (lft) in auto mode
update-alternatives: using /usr/bin/traceproto.db to provide /usr/bin/traceproto (traceproto) in auto mode
update-alternatives: using /usr/sbin/tcptraceroute.db to provide /usr/sbin/tcptraceroute (tcptraceroute) in auto mode
Setting up libwebkitgtk-3.0-common (2.4.9-3) ...
Setting up libwebkitgtk-3.0-0:amd64 (2.4.9-3) ...
Processing triggers for libc-bin (2.22-3) ...
Processing triggers for man-db (2.7.5-1) ...
Processing triggers for initramfs-tools (0.123) ...
update-initramfs: Generating /boot/initrd.img-4.4.0-1-amd64
Succès! En fait, cela n'a pas résolu mon problème. Mais il a déclassé avec succès les packages, QED.
J'ai également dû annuler une mise à niveau de paquet aujourd'hui sur quelques serveurs Debian. J'ai réussi à rétablir les packages dans la dernière version en utilisant aptitute, alors que la commande awk suivante était très utile.
( Dans la commande ci-dessous, remplacez la chaîne de date par la date du jour à partir de laquelle vous souhaitez annuler les mises à niveau )
awk 'BEGIN{ start="0" } { if($0 ~ /Log started: 2017-06-20/) { start="1"} if ( start == "1" && $0 ~ /Unpacking.*over/) {gsub(/[\s\t)( ]+/,"",$5); printf("%s=%s ", $2 , $5)}}' /var/log/apt/term.log
examinez la sortie pour vérifier qu'il s'agit bien des packages et des versions à annuler. Ensuite, utilisez aptitute pour effectuer la rétrogradation des packages répertoriés:
aptitute install [paste output here]
J'espère que c'est aussi un gain de temps utile pour les autres.
Je ne crois pas, en dehors de prendre une sauvegarde complète des systèmes de fichiers pertinents (ceux qui contiennent /
, /bin
, /lib
, /sbin
, /usr
, /var
, /etc
et /boot
(qui peuvent tous être sur le système de fichiers) et votre dossier de démarrage) afin que vous puissiez rouler la machine en arrière par la suite.
/var
) et tous les fichiers de configuration pertinents stockés. Vous pouvez ensuite essayer de forcer une restauration en disant explicitement dpkg
d'installer ces versions. Vous pourriez avoir du travail à faire par la suite lorsque vous souhaitez que les mises à niveau normales se produisent, donc ce n'est pas quelque chose que je recommanderais.
J'exécute mes serveurs linux dans un environnement virtualisé et exécute un cliché juste avant une mise à niveau apt-get, ou toute mise à jour / mise à niveau tierce majeure d'ailleurs.
Ensuite, si quelque chose ne va pas, je reviens simplement et la vie continue jusqu'à ce que je puisse trouver plus d'informations.
Cela est venu très facilement lorsque j'ai mis à niveau ma boîte Ubuntu vers 12.04, et MySQL était en quelque sorte complètement non fonctionnel après la mise à niveau. J'ai reculé, trouvé la réponse plus tard, relancé la mise à niveau, corrigé MySQL et la vie était bonne.
Vous pouvez essayer checkinstall
Après vous ./configure; faire votre programme, CheckInstall exécutera make install (ou tout ce que vous lui direz d'exécuter) et gardera une trace de chaque fichier modifié par cette installation, en utilisant l'excellent installwatch ...
Donc, vous pourriez peut-être lui dire d'exécuter aptitude safe-upgrade et il garderait une trace de toutes les modifications apportées par la mise à niveau.
Il y a un projet appelé Nexenta qui combine le noyau OpenSolaris avec l'espace utilisateur Ubuntu. Il fournit un outil pour intégrer ZFS de Solaris et apt de Debian afin de fournir un bouton d'annulation pour les mises à niveau. Voir ici: http://www.nexenta.org/os/TransactionalZFSUpgrades
Plus généralement, vous avez besoin d'un système de fichiers de version. Btrfs pour Linux est en cours de développement.
L'utilisation d' Apt-Undo est une option possible, mais elle ne peut fonctionner que si vous l'utilisez pour installer et désinstaller des packages. Cela n'aidera pas si vous avez déjà désinstallé le logiciel de la manière habituelle.
http://www.ubuntugeek.com/apt-undo-a-simple-way-of-undoing-apt-actions.html http://lkubuntu.wordpress.com/2011/07/27/apt-undo-a -simple-way-of-undoing-apt-actions /
J'ai réussi cela plusieurs fois mais je ne le recommanderai pas. Voici ce que j'ai fait (si je me souviens bien):
1) Supprimez tout logiciel non officiel qui n'est pas inclus dans les référentiels ubuntu par défaut (il peut ne pas être requis, mais je le suggère car ils peuvent vous gêner).
2) Modifiez votre /etc/apt/sources.list (et sources.list.d / *) à la version précédente (commentez tous les référentiels non officiels).
3) apt-get update / aptitude update
4) En utilisant aptitude, rétrograder les packages de base (comme X11, bibliothèques, etc.). Il commencera à tirer beaucoup de paquets cassés ... vous devrez donc résoudre chaque cas (vous devez savoir comment le faire en aptitude). Pour le rétrograder, accédez au panneau de description et installez la version (en appuyant sur +) en bas.
5) Répétez # 4 jusqu'à ce que tous les logiciels appartiennent à votre version cible (vérifiez la colonne version dans aptitude).
Ce sont les raisons pour lesquelles je ne recommande pas cette méthode:
Je recommande fortement de faire une installation propre et de déplacer votre configuration petit à petit. Cela prend également du temps, mais à la fin, vous avez une version stable.
La raison pour laquelle je l'ai fait était principalement par expérimentation et par désespoir.
Si vous avez installé votre système d'exploitation sur un système de fichiers ZFS (par exemple, ZFS sous Linux ), vous pouvez configurerapt-get
pour exécuterzfs snapshot
avant d'installer ou de mettre à niveau quoi que ce soit, ce qui sauvegardera instantanément votre système de fichiers. Cela peut fonctionner avec des mécanismes de sauvegarde autres que les instantanés ZFS, mais je laisserai ce test à d'autres.
Créez un fichier comme
/etc/apt/apt.conf.d/71backup
avec contenu
// Tell `apt-get' to take a ZFS snapshot before installing or upgrading a
// set of packages:
DPkg::Pre-Install-Pkgs {"/sbin/zfs snapshot rpool/ROOT/debian@apt-get_$(date '+%Y-%m-%d-%H%M')";};
où rpool/ROOT/debian
doit être remplacé par le nom du système de fichiers ZFS sur lequel votre système d'exploitation est monté. Vous lui avez donné ce nom lors de la première installation de votre système d'exploitation, et il peut être trouvé sous attribut NAME
avec la commande
# zfs list -t filesystem
NAME ...
...
rpool/ROOT/debian ...
...
Vous feriez mieux de prendre un instantané avant de suivre les conseils de configuration d'une personne Internet aléatoire:
# zfs snapshot rpool/ROOT/debian@$(date '+%Y-%m-%d-%H%M%S')_test
# zfs list -t snapshot | grep rpool
...
rpool/ROOT/debian@2018-08-01-230001_test
Le voilà. Si cela error: fn_borked
se produit rapidement, vous pouvez remettre votre système dans son état actuel avec
# zfs rollback rpool/ROOT/debian@2018-08-01-230001_test
Essayez-le maintenant en installant deux petits jeux qui sont probablement disponibles dans votre dépôt:
# apt-get install tanglet sudoku
...
# zfs list -t snapshot | grep apt\-get
rpool/ROOT/debian@apt-get_2018-08-02-033614
Cet instantané contient votre système de fichiers tel qu'il était avant l'installation des deux jeux.
# exit
$ sudoku
Des moments amusants pour grand-mère, mais vous détestez le sudoku.
$ sudo -i
# zfs rollback rpool/ROOT/debian@apt-get_2018-08-02-033614
# exit
$ sudoku
-bash: /usr/games/sudoku: No such file or directory
$ tanglet
-bash: tanglet: command not found
Après avoir pris plusieurs instantanés, vous pouvez revenir à n'importe quel précédent en ajoutant l' -r
indicateur. Dans notre cas, par exemple, essayez
# zfs -r rollback rpool/ROOT/debian@2018-08-01-230001_test
Soyez averti, cependant, que non seulement cela ramènera votre système de fichiers à l'état dans lequel il était lorsqu'il a rpool/ROOT/debian@2018-08-01-230001_test
été pris, mais il supprimera également irrémédiablement tous les instantanés ultérieurs. Si vous avez suivi ce post, l'instantanérpool/ROOT/debian@apt-get_2018-08-02-033614
serait maintenant parti.
J'ai testé apt-get upgrade
sur Debian GNU / Linux avec
# apt-get -t=oldstable install tanglet sudoku
...
# apt-get upgrade
...
# zfs list -t snapshot | grep apt\-get
Ça marche. Un instantané a été créé pour la install
commande, un autre pour leupgrade
commande.
Attention : j'ai testé cela pour la première fois aujourd'hui et je sais très peu de choses sur le fonctionnement interne d'apt. Si cela vous casse quelque chose ou comporte des risques que mon esprit étourdi n'a pas pris en compte, veuillez en parler ci-dessous.