Как мне отменить или откатить команду «apt-get upgrade» в Ubuntu?

76373
jjclarkson

Есть ли способ в Ubuntu откатить или отменить последнее обновление после выполнения, apt-get upgradeесли вам не нравятся результаты?

24
Если вы не сделали dist-upgrade, я не вижу, какие результаты там не нравятся, поскольку это, скорее всего, ** обновления безопасности **. LiraNuna 15 лет назад 0
Если это сервер, попробуйте сервер dev перед обновлением производственного сервера. solarc 15 лет назад 2
Без большой работы, это не стоило бы того. Можете ли вы сохранить свой / дома и начать все сначала? Что тебе не понравилось? user10547 15 лет назад 0
Я еще этого не сделал, но это рабочий сервер, и мне нужно быть уверенным, что нет никаких несовместимостей с нашей пользовательской настройкой PHP / MySQL / Apache2, и быстро вернуться, если есть. Я хотел бы обновить, потому что я думаю, что это решит другую проблему, которая у меня есть. jjclarkson 15 лет назад 0
Если у вас есть выборочная установка, вы обязаны сохранить исправления и применить их к текущей версии. LiraNuna 15 лет назад 0
Я бы запустил его сначала в dev, особенно если это важный сервер. Вы можете принять несколько мер предосторожности, но точная копия вашей производственной среды будет лучше. user10547 15 лет назад 0
Я думаю, что это то, что мы в конечном итоге сделаем, чтобы проверить наше программное обеспечение на компьютере разработчика. Возможная проблема заключается в том, что наше тестовое оборудование не будет полностью однородным. jjclarkson 15 лет назад 0

11 ответов на вопрос

5
user28725

aptitudeдает вам доступ ко всем версиям пакета, если они доступны в соответствии с управлением пакетами Debian .

2.7.3 может помочь вам перейти на стабильную версию. 2.7.16 объясняет сохранение и восстановление состояния dpkg. dpkg-repack позволяет «сжать» один пакет. joeytwiddle 12 лет назад 0
5
Manav Brar

I came across Hartman's Blogstatic Blog: How to Undo an Update in Ubuntu Lucid

The first step to undoing the offending update was to find out what updates it was exactly. After searching some forums I came across a way to see my update history: Open synaptic package manager ("sudo synaptic" in the terminal). From the menu bar, click File -> History and you will see all your updates sorted by date.

Unfortunately I had installed about 20 updates today, and I didn't know which one had caused the problem. By searching through each of the packages named in the History list, I was able to downgrade a few at a time until the problem was solved and I had identified the offending update. To do this:

Use the search bar to find the package you want to downgrade. Once you've found what you're looking for, click on the package to select it. From the menu bar, click Package -> Force Version and select the previous version of the package from the drop down menu. Click the "Apply" button to apply the downgrade.

Я ожидаю, что все здесь будут знать основы того, как искать последнее оскорбительное обновление: Manav Brar 12 лет назад 1
О чем это редактирование? У вас есть еще один вопрос? Вы хотите, чтобы мы играли в угадайку? slhck 12 лет назад 2
5
aecolley

I had to do this today on my Debian system. First, I identified the time range when the offending upgrade happened, and retrieved the log entries giving the old and new version numbers of the upgraded packages:

$ 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 

Next, I tried to find the still-cached package files on disk (luckily for me I hadn't run autoclean):

$ awk '$1=="2016-03-20" && $3=="upgrade" ' /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 

It looks like I don't have the older ethtool package for some reason. Still, let's carry on by force-installing the older package files:

$ 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 

As the error message said, one of my packages depended on a -common package just before the upgrade, but the upgrade removed it (and apt-get can't find it any more). Luckily, its package file is still in /var/cache/apt so I can just add it to the list and try again:

$ 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 

Success! Actually this didn't solve my problem. But it successfully downgraded the packages, QED.

3
Andreas Kohlbecker

Мне также пришлось отменить обновление пакета на нескольких серверах Debian. Я успешно вернул пакеты до последней версии с помощью aptitute, тогда как следующая команда awk была очень полезна.

( В приведенной ниже команде замените строку даты датой дня, с которого вы хотите отменить обновления )

awk 'BEGIN{ start="0" } { if($0 ~ /Log started: 2017-06-20/) { start="1"} if ( start == "1" && $0 ~ /Unpacking.*over/) }' /var/log/apt/term.log 

проверьте выходные данные, чтобы убедиться, что это те пакеты и версии, которые нужно отменить. Затем используйте aptitute для понижения перечисленных пакетов:

aptitute install [paste output here] 

Я надеюсь, что это также поможет сэкономить время другим.

2
David Spillett

Я считаю, что нет, кроме принимая полную резервную копию соответствующих файловых систем (те, которые содержат /, /bin, /lib, /sbin, /usr, /var, /etcи /boot(что все может быть в файловой системе) и загрузочная запись), так что вы можете катить машину назад после этого.

Я мог (и, вероятно, буду) делать резервное копирование с нуля, но я хотел программный вариант, который позволил бы мне отменить обновление в более короткие сроки. Восстановление из резервной копии с нуля может занять несколько часов. jjclarkson 15 лет назад 0
Вы можете убедиться, что у вас есть копии всех пакетов, которые вы собираетесь обновить в своих предыдущих версиях (они, вероятно, все еще находятся в вашем apt-кэше где-то в `/ var`), и все соответствующие файлы конфигурации хранятся в хранилище. Затем вы можете попытаться выполнить откат, явно указав `dpkg` для установки этих версий. После этого вам может потребоваться проделать определенную работу, если вы хотите, чтобы обычные обновления происходили, поэтому я не рекомендую этого делать. David Spillett 15 лет назад 1
Резервная копия, созданная с помощью rsync (временная метка включена), может быть восстановлена ​​довольно быстро по сравнению с резервной копией, созданной с помощью tar. joeytwiddle 12 лет назад 0
2
Brain2000

I run my linux servers in a virtualized environment and run a shapshot just before an apt-get upgrade, or any major 3rd party updates/upgrades for that matter.

Then if something goes wrong, I simply revert and life goes on until I can find out more information.

This came in very handle when I upgraded my Ubuntu box to 12.04, and somehow MySQL was completely non-functional after the upgrade. I rolled back, found the answer later, reran the upgrade, fixed MySQL, and life was good.

1
solarc

Вы можете попробовать checkinstall

После вас ./configure; При создании вашей программы CheckInstall запустит make install (или как вы говорите, чтобы она запускалась) и отслеживала каждый файл, измененный этой установкой, используя отличные установочные часы ...

Поэтому, возможно, вы могли бы сказать ему, чтобы он запускал aptitude safe-upgrade, и он отслеживал бы все изменения, сделанные обновлением.

1
Ryan Thompson

Есть проект под названием Nexenta, который объединяет ядро ​​OpenSolaris с пользовательским пространством Ubuntu. Он предоставляет инструмент для интеграции ZFS Solaris и apt Debian, чтобы обеспечить кнопку отмены для обновлений. Смотрите здесь: http://www.nexenta.org/os/TransactionalZFSUpgrades

В общем, вам нужна файловая система управления версиями. Btrfs для Linux находится в разработке.

1
Rucent88

Использование Apt-Undo является возможным вариантом, но он может работать только в том случае, если вы используете его для установки и удаления пакетов. Это не поможет, если вы уже удалили программное обеспечение в обычном режиме.

http://www.ubuntugeek.com/apt-undo-a-simple-way-of-undoing-apt-actions.html http://lkubuntu.wordpress.com/2011/07/27/apt-undo-a -простые-полосная-оф-расстегивать-APT-акция /

0
lepe

I have successfully done that few times but I won't recommended it. This is what I did (if I recall correctly):

1) Remove any non-official software which are not included in the default ubuntu repositories (it may not be required, but I suggest it as they may get in your way).

2) Change your /etc/apt/sources.list (and sources.list.d/*) to the previous version (comment all non-official repositories).

3) apt-get update / aptitude update

4) Using aptitude, downgrade core packages (like X11, libraries, etc). It will start firing a lot of broken packages... so you will need to solve each case (you need to know how to do that in aptitude). The way you downgrade it is by going to the description panel and installing the version (by pressing +) at the bottom.

5) Repeat #4 until all software belongs to your target version (check on version column in aptitude).

These are the reason why I don't recommend this method:

  • It takes a lot of time (its a painfully process)
  • Some application may not work properly (as they may still have the most recent configuration). In that case you will need to "purge" and reinstall.
  • There are system-related updates that won't work after downgrade
  • Its highly risky as you may end-up with an unusable system

I would highly recommend to do a clean install and move your configuration little by little. It also takes time, but at the end you have a stable version.

The reason I did it was mainly as experimentation and as a result of desperation.

Похожие вопросы