Могу ли я откатиться от обновления apt-get, если что-то пойдет не так?

Есть ли способ, прежде чем приступать к aptitude upgrade или apt-get upgrade , чтобы настроить что-то, чтобы вы могли «легко» откатить свою систему в «apt» состоянии, которое было до фактического обновления, если что-то пошло не так?

То есть, например, переустановите старую версию пакетов, которые были обновлены во время процесса.

(EDIT) Несколько советов : Я знаю, что, etckeeper для использования в программе etckeeper используется какой-либо hook на apt так что он уведомляется всякий раз, когда apt устанавливает или удаляет пакет. Я предполагаю, что может быть какой-то скрипт, который мог бы сохранить список недавно установленного пакета и их номер предыдущей версии, чтобы иметь возможность переустанавливать их из кеша apt ( /var/cache/apt/archives ). Существует также checkinstall который может отслеживать изменения файлов …

Какие-либо подробности о том, как правильно это сделать?

3 Solutions collect form web for “Могу ли я откатиться от обновления apt-get, если что-то пойдет не так?”

Мне просто нужно было apt-get upgrade ответ на этот вопрос, потому что последнее apt-get upgrade на сервере Debian сделало невозможным загрузку самого последнего ядра за пределы busybox, неспособное установить корневой раздел zfs. По крайней мере, более раннее ядро ​​все равно могло загружаться, но было несовместимо с другим программным обеспечением. Таким образом, необходимо откат.

Короткий ответ – вы можете использовать следующую команду: $ apt-get -s install $(apt-history rollback | tr '\n' ' ')

если он делает то, что вы хотите, удалите -s и запустите его снова. Вот шаги, которые я предпринял для правильной работы:

  1. Я временно урезал свой /var/log/dpkg.log чтобы оставить только сегодняшнее обновление

  2. Я установил крошечный скрипт apt-history из здесь в ~ / .bashrc и побежал

     $ apt-history rollback > rollback.txt ... libzfs2:amd64=0.6.4-4~wheezy zfsutils:amd64=0.6.4-4~wheezy zfs-initramfs:amd64=0.6.4-4~wheezy ... 
  3. Это обеспечивает красиво отформатированный список версий пакетов для отката, загружая его в apt-get install . Обрежьте этот список по мере необходимости в текстовом редакторе, а затем запустите (сначала используйте -s для сухого запуска):

     $ apt-get -s install $(cat rollback.txt | tr '\n' ' ') $ apt-get install $(cat rollback.txt | tr '\n' ' ') 

Apt будет предупреждать о понижениях, которые ожидаются. Чтобы предотвратить перезагрузку этого отката при следующем обновлении, пакеты необходимо будет привязать, пока исходная проблема не будет устранена. Например, с помощью: apt-mark hold zfsutils libzfs2 ...


 function apt-history(){ case "$1" in install) cat /var/log/dpkg.log | grep 'install ' ;; upgrade|remove) cat /var/log/dpkg.log | grep $1 ;; rollback) cat /var/log/dpkg.log | grep upgrade | \ grep "$2" -A10000000 | \ grep "$3" -B10000000 | \ awk '{print $4"="$5}' ;; *) cat /var/log/dpkg.log ;; esac } 

Файлы журнала /var/log/apt/history.log и /var/log/apt/term.log являются ближайшими вещами, доступными для вашего описания:

Я полагаю, что может быть какой-то скрипт, который мог бы сохранить список недавно установленного пакета и их предыдущий номер версии

history.log дает сводный список всех действий, которые apt принимает в следующем формате:

 Start-Date: 2013-06-21 16:05:05 Commandline: apt-get install rdiff-backup Install: python-pyxattr:i386 (0.5.0-3, automatic), rdiff-backup:i386 (1.2.8-6), python-pylibacl:i386 (0.5.0-3, automatic ), librsync1:i386 (0.9.7-7, automatic) End-Date: 2013-06-21 16:05:42 

В частности, он предоставляет список недавно установленных пакетов или удаленных пакетов. Кроме того, term.log показывает, что на самом деле появилось на терминале во время действия, чтобы отображать старые и новые версии пакетов. Случайная выборка из моей history.log :

 Preparing to replace gnupg 1.4.10-4 (using .../gnupg_1.4.10-4+squeeze1_i386.deb) ... Unpacking replacement gnupg ... Processing triggers for install-info ... Processing triggers for man-db ... Processing triggers for doc-base ... Processing 1 changed doc-base file(s)... Registering documents with scrollkeeper... Setting up gnupg (1.4.10-4+squeeze1) 

Попытка отката apt автоматически не рекомендуется, но если вы используете журналы, тогда это должно быть возможно сделать это вручную, если только это не сработало, что нарушает действия, связанные с действиями apt , например, несогласованную базу данных dpkg. В этом случае вам придется исправить проблему перед продолжением.

Нет, apt не делает так просто.

Лучшим вариантом является некоторый тип снимка. Снимки файловой системы через lvm / zfs / btrfs или копии экземпляров экземпляра, если вы используете какую-либо VM.

Единственный другой вариант – провести инвентаризацию установленных пакетов (dpkg -l) до и после. Если вы хотите «откат», вы должны явно установить предыдущую версию.

  • Обновление CentOS с 6.3 до 6.5
  • Как я могу обновить MySQL в Debian с помощью apt-get?
  • ntpd установлен в локальный каталог, теперь есть две версии
  • apt-offline apt-get upgrade все еще пытается подключиться к онлайн-серверу для обновления, хотя пакеты уже синхронизированы
  • Openssl обновлен с помощью apt-get, `openssl version`, показывая предыдущую версию
  • Apt-get зависает на «Настройка mysql-server-5.5 (5.5.44-0 + deb8u1)»
  • Обновления программного обеспечения Ubuntu с помощью apt-get
  • «Tar: непризнанная опция - предупреждение» во время «apt-get install»
  • выключение, перезагрузка, настройка принтера и т. д. недоступны обычным пользователям после обновления debian
  • Где поставить системные кроны?
  • Как сделать svn искать, если есть обновление раз в минуту, и если есть вызов какого-то скрипта?
  • Linux и Unix - лучшая ОС в мире.