web-dev-qa-db-fra.com

Comment puis-je annuler ou annuler une commande "apt-get upgrade" sur Ubuntu?

Existe-t-il un moyen dans Ubuntu d’annuler ou d’annuler la dernière mise à jour après un apt-get upgrade si vous n’aimez pas les résultats?

26
jjclarkson

Je devais le faire aujourd'hui sur mon système Debian. Tout d'abord, j'ai identifié la plage de temps à laquelle la mise à niveau incriminée s'est produite, puis extrait les entrées du journal en indiquant l'ancien et le nouveau numéro 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 paquet encore en cache sur le disque (heureusement pour moi, je n'avais pas exécuté autoclean):

$ 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. Néanmoins, continuons en installant de force les anciens fichiers de paquets:

$ 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 paquets dépendait d'un paquet -common juste avant la mise à niveau, mais la mise à niveau l'a supprimé (et apt-get ne le trouve plus). Heureusement, son fichier de paquet est toujours dans/var/cache/apt, je peux donc l'ajouter à la liste et essayer à nouveau:

$ 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 réussi à déclasser les paquets, QED.

5
aecolley

aptitude vous donne accès à toutes les versions d'un paquet si elles sont disponibles selon la gestion des paquets Debian .

5
user28725

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 déterminer en quoi consistait cette mise à jour. Après avoir cherché dans certains forums, je suis tombé sur un moyen de consulter l'historique de mes mises à jour: Ouvrez le gestionnaire de paquets synaptic ("Sudo synaptic" dans le terminal). Dans la barre de menus, cliquez sur Fichier -> Historique pour afficher toutes vos mises à jour triées par date.

Malheureusement, j'avais installé environ 20 mises à jour aujourd'hui et je ne savais pas laquelle était à l'origine du problème. En cherchant dans chacun des packages nommés dans la liste Historique, j'ai pu en rétrograder quelques-uns à la fois jusqu'à la résolution du problème et l'identification de 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 paquet 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 le déclassement.

5
Manav Brar

J'ai également dû annuler une mise à jour de paquet aujourd'hui sur deux serveurs Debian. J'ai réussi à rétablir la dernière version des paquets 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 à restaurer. Ensuite, utilisez aptitute pour rétrograder les paquetages listés:

aptitute install [paste output here]

J'espère que c'est aussi un gain de temps utile pour les autres.

3
Andreas Kohlbecker

Je ne crois pas, mis à part la 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 enregistrement de démarrage) afin que vous puissiez faites ensuite rouler la machine.

2
David Spillett

J'exécute mes serveurs linux dans un environnement virtualisé et exécute un shapshot juste avant une mise à niveau d'apt-get, ou toute mise à jour/mise à niveau tierce majeure à cet égard.

Ensuite, si quelque chose ne va pas, je reviens tout simplement et la vie continue jusqu'à ce que je puisse trouver plus d'informations.

Cela s'est avéré très utile lorsque j'ai mis à niveau ma machine Ubuntu vers 12.04, et d'une manière ou d'une autre, MySQL était complètement non fonctionnel après la mise à niveau. J'ai annulé, trouvé la réponse plus tard, relancé la mise à niveau, réparé MySQL, et la vie était belle.

2
Brain2000

Utiliser Apt-Undo est une option possible, mais cela 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 normalement.

http://www.ubuntugeek.com/apt-undo-a-simple-way-of-undoing-apt-actions.htmlhttp://lkubuntu.wordpress.com/2011/07/27/apt-undo-a-simple-way-of-undoing-apt-actions/

1
Rucent88

Il existe 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 l'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 gestion des versions. Btrfs pour Linux est en développement.

1
Ryan Thompson

Vous pouvez essayer checkinstall

Après vous ./configure; make votre programme, CheckInstall lancera make install (ou ce que vous lui dites d'exécuter) et garde trace de chaque fichier modifié par cette installation, à l'aide de l'excellent installwatch ...

Alors peut-être que vous pourriez lui dire de lancer aptitude safe-upgrade et de garder trace de toutes les modifications apportées par la mise à niveau.

1
solarc

J'ai réussi à le faire quelques fois mais je ne le recommanderai pas. Voici ce que j'ai fait (si je me souviens bien):

1) Supprimez tous les logiciels non officiels qui ne sont pas inclus dans les référentiels d'ubuntu par défaut (ils ne sont peut-être pas nécessaires, mais je le suggère car ils risquent de vous gêner).

2) Changez votre /etc/apt/sources.list (et sources.list.d/*) avec la version précédente (commentez tous les référentiels non officiels).

3) apt-get update/aptitude update

4) En utilisant aptitude, rétrogradez les paquets de base (comme X11, les bibliothèques, etc.). Il va commencer à jeter beaucoup de paquets cassés ... vous aurez donc besoin de résoudre chaque cas (vous devez savoir comment le faire avec aptitude). Vous rétrogradez en accédant au panneau de description et en installant la version (en appuyant sur +) en bas.

5) Répétez la procédure n ° 4 jusqu'à ce que tous les logiciels appartiennent à votre version cible (vérifiez la colonne de version dans aptitude).

Voici la raison pour laquelle je ne recommande pas cette méthode:

  • Cela prend beaucoup de temps (c'est un processus pénible)
  • Certaines applications peuvent ne pas fonctionner correctement (car elles peuvent toujours avoir la configuration la plus récente). Dans ce cas, vous devrez "purger" et réinstaller.
  • Certaines mises à jour liées au système ne fonctionneront pas après la rétrogradation
  • C'est très risqué car vous risquez de vous retrouver avec un système inutilisable

Je recommande fortement de faire une nouvelle installation et de déplacer votre configuration petit à petit. Cela prend aussi du temps, mais à la fin vous avez une version stable.

La raison pour laquelle je l'ai fait était principalement à titre d'expérimentation et à la suite du désespoir.

0
lepe

DPkg :: Pre-Install-Pkgs et ZFS sur des instantanés Linux

Si vous avez installé votre système d'exploitation sur un système de fichiers ZFS (par exemple, ZFS sous Linux ), vous pouvez configurer apt-get pour qu'il exécute zfs snapshot avant d'installer ou de mettre à niveau quoi que ce soit. , ce qui sauvegardera votre système de fichiers instantanément. Cela peut fonctionner avec des mécanismes de sauvegarde autres que les instantanés ZFS, mais je laisserai ce test à d'autres.

Le scénario

Créer 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')";};

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. Vous pouvez le trouver sous l'attribut NAME avec la commande

# zfs list -t filesystem
NAME ...
...
rpool/ROOT/debian ...
...

Mais ça marche?

Vous feriez mieux de prendre un instantané avant de suivre les conseils de configuration donnés par 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 error: fn_borked se produisait bientôt, vous pouvez rétablir l'état actuel de votre système avec bonheur.

# zfs rollback rpool/ROOT/debian@2018-08-01-230001_test

Maintenant, essayez-le en installant deux minuscules 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 la 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 la prise de plusieurs instantanés, vous pouvez revenir aux précédents en ajoutant l’indicateur -r. Dans notre cas, par exemple, essayez

# zfs -r rollback rpool/ROOT/debian@2018-08-01-230001_test

Sachez cependant que non seulement cela ramènera votre système de fichiers dans l'état dans lequel il se trouvait lorsque rpool/ROOT/debian@2018-08-01-230001_test a été créé, mais il supprimera également de manière irrémédiable tous les instantanés ultérieurs. Si vous avez suivi ce message, l’instantané rpool/ROOT/debian@apt-get_2018-08-02-033614 serait maintenant parti.

J'ai testé apt-get upgrade sur une 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 commande install, un autre pour la commande upgrade.

Avertissement : J'ai testé cela pour la première fois aujourd'hui et je connais très peu le fonctionnement interne d'apt. Si cela casse quelque chose pour vous ou comporte des risques que mon esprit privilégié n'a pas pris en compte, veuillez commenter à ce sujet ci-dessous.

0
LaTeX2enub1336