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

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

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

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

Любые сведения о том, как правильно это сделать?

34 голоса | спросил Totor 11 J0000006Europe/Moscow 2013, 22:55:28

2 ответа


30

Мне просто нужно было найти ответ на этот вопрос, потому что последний 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
}
ответил ChrisW 16 +03002015-10-16T21:56:49+03:00312015bEurope/MoscowFri, 16 Oct 2015 21:56:49 +0300 2015, 21:56:49
3

Нет, apt не делает это легко.

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

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

ответил bahamat 11 J0000006Europe/Moscow 2013, 23:50:52

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

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132