Не было печали, апдейтов накачали

в 20:26, , рубрики: apt-get, Debian, devops, howto, linux desktop, Ubuntu, Настройка Linux, Серверное администрирование, системное администрирование, управление пакетами

У меня дома используется Debian Sid. Большей частью он весьма и весьма хорош, но местами он слишком Bleeding слишком Edge. Например, когда отгружает пакеты, ломающие работоспособность системы. Вчера приехал wpasupplicant, который сломал мне wifi. Я его откатил, но в процессе я подумал, что многие пользователи не умеют этого делать. Рассказ "как откатить плохой apt-get install/upgrade" — в этом посте.

Ситуация

Мы сделали apt-get install что-то, или apt-get upgrade, или даже apt-get dist-upgrade, и после перезагрузки (или даже сразу же) обнаружили, что так нельзя. Сервис не стартует, убрана важная нам фича, кто-то падает и т.д. Мы хотим откатиться. Но вот, незадача — куда именно мы не знаем, потому что какая была версия до обновления мы не знаем.

Где выяснять что случилось?

apt ведёт очень подробные логи в /var/log/apt. Там есть, в частности, history.log — там будут строчки вида:

Upgrade:  wpasupplicant:amd64  (2:2.6-8, 2:2.6-11)
Install: libcaribou-gtk-module:amd64 (0.4.21-3, automatic)
Remove: libapache2-mod-dnssd:amd64 (0.6-3.2)

Там же будет написано кто это сделал и какой командой.

Start-Date: 2017-12-03  12:14:58
Commandline: apt-get dist-upgrade
Requested-By: amarao (1000)

Чтобы понять, какая версия была предыдущей, придётся посмотреть на лог установки. Он рядом — /var/log/apt/terminal.log. К сожалению, с esc-последовательностями.
Там мы увидим строчку вида:

Unpacking wpasupplicant (2:2.6-11) over (2:2.6-8) ...
Вот 2:2.6-11 - это то, что к нам приехало, а 2:2.6-8 то, что было до этого.

Как чинить

Чтобы поставить обратно пакет по версии, мы указываем её в явном виде:

apt-get install wpasupplicant=2:2.6-8

К сожалению, 90% это не сработает. Почему? Потому что пакета такой версии в репозитории нет.

В этом случае нам надо найти файл для установки. Он может быть в двух местах.

  1. /var/cache/apt/archives. Например, /var/cache/apt/archives/wpasupplicant_2%3a2.6-11_amd64.deb.
  2. snapshots.debian.org (о нём чуть ниже).

Когда мы имеем файл на диске, установка тривиальная:

sudo dpkg -i /var/cache/apt/archives/wpasupplicant_2%3a2.6-11_amd64.deb

… и у меня снова есть интернет. Есть вероятность, что придётся разбираться с зависимостями, но хорошая новость состоит в том, что если пакеты не конфликтовали до обновления, то их можно откатить в тот же набор версий. И какие именно это версии видно в выводе terminal.log.

Если же архива нет (потому что кто-то сделал upgrade, а потом тут же apt-get autoclean), то надо искать версию в интернетах. Для этого есть архив миррора дебиана. http://snapshot.debian.org/

Как его подключать — написано там, хотя чаще проще просто скачать нужный пакет. Важно: когда ищите снапшот, проверяйте по версиям в логах. Если зависимости противные и сложные, то имеет смысл автоматизировать парсинг terminal.log.

Альтернативный путь: можно попробовать apt-cache policy wpasupplicant чтобы посмотреть на доступные версии и выбрать одну их них (тоже через знак равно). В моём случае это было бесполезно, ибо интернетов не было. Важно: как только вы начинаете откатываться на старые версии, вы рискуете сделать себе такую конфигурацию по зависимостям, которую так просто уже не разберёшь, так что я рекомендую при наличии зависимых пакетов в первую очередь пробовать откатиться на предыдущие версии, а не искать себе приключений посредством даунгрейда на антиквариат.

Как с этим жить дальше?

Дальше мы не хотим апдейтиться до исправления проблемы. Чтобы проблему исправили, её надо зарепортить. https://bugs.debian.org — и там, возможно, оно есть. Если нет — надо репортить. reportbug имя_утилиты.

Чтобы случайно снова не проапдейтиться, пакет можно поставить на hold (запретить апдейты):

apt-mark hold wpasupplicant

(unhold снимает hold).

Best practices

Я давно для себя выработал привычку делать "dpkg -l >/var/log/dpkg_date" перед апдейтом. В таком виде его легче парсить, если нужно делать большое количество даунгрейдов.

Автор: amarao

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js