Чи є в Ubuntu спосіб відкатати або скасувати останнє оновлення після виконання, apt-get upgrade
якщо результати не сподобалися?
Чи є в Ubuntu спосіб відкатати або скасувати останнє оновлення після виконання, apt-get upgrade
якщо результати не сподобалися?
Відповіді:
aptitude
надає вам доступ до всіх версій пакета, якщо вони доступні відповідно до управління пакетами Debian .
Я натрапив на Blogstatic Blog Hartman: Як скасувати оновлення в Ubuntu Lucid
Першим кроком до скасування оновленого порушення було з’ясування того, які саме оновлення були. Після пошуку деяких форумів я натрапив на те, щоб побачити свою історію оновлень: Відкрити диспетчер синаптичних пакетів ("sudo synaptic" в терміналі). На панелі меню натисніть Файл -> Історія, і ви побачите всі оновлення, відсортовані за датою.
На жаль, сьогодні я встановив близько 20 оновлень, і я не знав, яке з них спричинило проблему. Шукаючи кожен з пакетів, названих у списку Історії, я зміг знизити номер за один раз, поки проблема не була вирішена, і я виявив оновлення, яке не відповідає. Зробити це:
Використовуйте панель пошуку, щоб знайти пакет, який ви хочете знизити. Як тільки ви знайшли те, що шукаєте, натисніть на пакет, щоб вибрати його. На панелі меню натисніть Package -> Force Version і виберіть попередню версію пакета зі спадного меню. Натисніть кнопку "Застосувати", щоб застосувати пониження рівня.
Мені довелося це зробити сьогодні в моїй системі Debian. По-перше, я визначив часовий діапазон, коли відбулося порушення оновлення, і вилучив записи журналу, даючи старі та нові номери версій оновлених пакетів:
$ 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
Далі я спробував знайти на диску все ще кешовані файли пакунків (на щастя, я не запустив 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
Схоже, я не маю старого пакету Ethtool чомусь. Все ж давайте продовжимо, насильно встановивши старі файли пакунків:
$ 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
Як сказано в повідомленні про помилку, один з моїх пакетів залежав від -поширеного пакету безпосередньо перед оновленням, але оновлення видалило його (і apt-get вже не може його знайти). На щастя, його пакетний файл все ще знаходиться в / var / cache / apt, тому я можу просто додати його до списку та спробувати ще раз:
$ 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
Успіху! Насправді це не вирішило моєї проблеми. Але це успішно знизило пакети, QED.
Я також повинен був скасувати оновлення пакету сьогодні на декількох серверах Debian. Я успішно повернув пакунки до останньої версії за допомогою aptitute, тоді як наступна команда awk була дуже корисною.
( У нижченаведеній команді замініть рядок дати на дату дня, з якого потрібно відновити оновлення )
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
перегляньте вихід, щоб переконатися, що це пакети та версії, які потрібно повернути. Потім використовуйте aptitute, щоб зробити пониження перелічених пакетів:
aptitute install [paste output here]
Я сподіваюся, що це також корисна економія часу для інших.
Я вважаю , що немає, крім приймаючи повну резервну копію відповідних файлових систем (ті , які містять /
, /bin
, /lib
, /sbin
, /usr
, /var
, /etc
і /boot
(що все може бути в файлової системі) і завантажувальний запис) , так що ви можете котити машину назад після цього.
/var
підходящому кеші десь у приміщенні ) та будь-яких відповідних конфігураційних файлів, які зберігаються подалі. Потім ви можете спробувати відкатати, чітко вказавши dpkg
встановити ці версії. Можливо, вам доведеться виконати якусь роботу згодом, коли ви хочете, щоб відбулися нормальні оновлення, тому я б це не рекомендував.
Я запускаю свої Linux-сервери у віртуалізованому середовищі та запускаю знімок безпосередньо перед оновленням apt-get або будь-якими основними оновленнями та оновленнями сторонніх розробників.
Тоді, якщо щось піде не так, я просто повертаюся і життя триває, поки я не зможу дізнатися більше інформації.
Це було дуже зручно, коли я оновив свою скриньку Ubuntu до 12.04, і чомусь MySQL був абсолютно не функціональним після оновлення. Я відкотився, знайшов відповідь пізніше, повторно оновив, виправив MySQL, і життя було гарним.
Ви можете спробувати перевірити
Після вас ./конфігуруйте; зробіть свою програму, CheckInstall запустить, зробіть інсталяцію (або все, що ви скажете їй, щоб запустити) і буде відслідковувати кожен файл, модифікований цією установкою, використовуючи чудовий інсталяційний годинник ...
Тож, можливо, ви могли б сказати йому запустити безпечне оновлення можливостей, і воно буде відслідковувати всі зміни, внесені оновленням.
Існує проект під назвою Nexenta, який поєднує ядро OpenSolaris з користувацьким простором Ubuntu. Він надає інструмент для інтеграції ZFS Solaris та підходу Debian, щоб забезпечити кнопку скасування оновлення. Дивіться тут: http://www.nexenta.org/os/TransactionalZFSUpgrades
Загалом, потрібна файлова система версій. Btrfs для Linux розробляється.
Використання Apt-Undo - це можливий варіант, але він може працювати, лише якщо ви використовуєте його для встановлення та видалення пакунків. Це не допоможе, якщо ви вже видалили програмне забезпечення у звичайний спосіб.
http://www.ubuntugeek.com/apt-undo-a-simple-way-of-undoing-apt-action.html http://lkubuntu.wordpress.com/2011/07/27/apt-undo-a -простий спосіб-скасування-apt-дій /
Я успішно робив це кілька разів, але не рекомендував. Це те, що я зробив (якщо добре пригадую):
1) Видаліть будь-яке неофіційне програмне забезпечення, яке не входить у сховища ubuntu за замовчуванням (воно може не знадобитися, але я пропоную це, як вони можуть потрапити на ваш шлях).
2) Змініть /etc/apt/sources.list (та source.list.d / *) на попередню версію (коментуйте всі неофіційні сховища).
3) apt - отримати оновлення / оновлення можливостей
4) Використання здатності, зменшення пакетів основних ядер (наприклад, X11, бібліотеки тощо). Він почне запускати багато зламаних пакетів ... тож вам потрібно буде вирішити кожен випадок (вам потрібно знати, як це зробити у придатності). Те, як ви її понизили, перейдіть на панель описів та встановіть версію (натискаючи +) внизу.
5) Повторюйте №4, поки все програмне забезпечення не належить до вашої цільової версії (перевірте на стовпці версії на здатність).
Ось чому я не рекомендую цей метод:
Я настійно рекомендую робити чисту установку та поступово переміщувати конфігурацію. Це також потребує часу, але в кінці у вас є стабільна версія.
Причиною, що я це зробив, було, головним чином, експериментація та результат відчаю.
Якщо ви встановили свою операційну систему в файловій системі ZFS (наприклад, ZFS в Linux ), ви можете налаштувати apt-get
її запуск zfs snapshot
до того, як вона інсталює або модернізує що-небудь, що миттєво створить резервну копію вашої файлової системи. Це може працювати з механізмами резервного копіювання, окрім знімків ZFS, але це тестування я залишу іншим.
Створіть файл типу
/etc/apt/apt.conf.d/71backup
зі змістом
// 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
слід замінити ім'я файлової системи ZFS, до якої встановлена ваша операційна система. Ви назвали це ім'я під час першого встановлення ОС, і його можна знайти під атрибутом NAME
команди
# zfs list -t filesystem
NAME ...
...
rpool/ROOT/debian ...
...
Краще зробіть знімок, перш ніж дотримуватися порад щодо конфігурації якогось випадкового Інтернет-користувача:
# 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
Там. Якщо error: fn_borked
незабаром це станеться, ви можете повернути систему до її блаженного поточного стану за допомогою
# zfs rollback rpool/ROOT/debian@2018-08-01-230001_test
Тепер спробуйте це, встановивши дві крихітні ігри, які, ймовірно, доступні у вашій репо:
# apt-get install tanglet sudoku
...
# zfs list -t snapshot | grep apt\-get
rpool/ROOT/debian@apt-get_2018-08-02-033614
Цей знімок містить вашу файлову систему, як це було до встановлення двох ігор.
# exit
$ 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
Після того, як зроблено кілька знімків, ви можете повернутися до будь-якого попереднього, додавши -r
прапор. У нашому випадку, наприклад, спробуйте
# zfs -r rollback rpool/ROOT/debian@2018-08-01-230001_test
Однак попередити, що це не тільки поверне вашу файлову систему до стану, в якому вона була, коли вона rpool/ROOT/debian@2018-08-01-230001_test
була зроблена, але й видалить безповоротно всі наступні знімки. Якщо ви дотримувались цієї публікації, знімокrpool/ROOT/debian@apt-get_2018-08-02-033614
зараз не буде.
Я тестував apt-get upgrade
на Debian GNU / Linux с
# apt-get -t=oldstable install tanglet sudoku
...
# apt-get upgrade
...
# zfs list -t snapshot | grep apt\-get
Це працює. Один знімок був створений для install
команди, інший - для upgrade
команди.
Caveat : Я сьогодні вперше випробував це і дуже мало знаю про внутрішню роботу вправ. Якщо це зламає щось для вас або спричинить за собою ризик, який мій розум не врахував, будь ласка, прокоментуйте це нижче.