Назад | Перейти на главную страницу

Транзакции и откат с помощью Debian

Я не знаю, общеизвестно ли это, но RPM поддерживает откат к предыдущей установке после выполнения обновления (которое, например, что-то ломает). Вы можете передать обороты --repackage флаг, чтобы сгенерировать кучу пакетов RPM для установленных в данный момент файлов, которые он собирается изменить. Затем вы можете сказать "rpm -Uvh --rollback '2 часа назад'"и без особых усилий вернет вашу машину к состоянию, которое было 2 часа назад.

У меня вопрос, нашел ли кто-нибудь что-то подобное в дистрибутивах на основе Debian?

Я не верю, что есть такой вариант с aptitude или apt-get. Тем не мение, aptitude ведет отличный, четкий журнал / var / log / aptitudeВы можете использовать это для попытки отката.

Насколько хорошо все пройдет, будет зависеть от конкретной ситуации. Если вы просто хотите удалить несколько установленных вами пакетов, это будет тривиально. Но если вы обновились (либо из-за того, что вы следите за тестированием, либо из-за нестабильности, либо из-за того, что вы установили обновление безопасности или обновление с выпуском по точкам), все немного сложнее. Вы можете проверить, есть ли у вас в кеше старый .deb, или вы можете посетить Снимок Debian.

Если вы не используете aptitude, ты можешь ковыряться в dpkgжурнал (в /var/log/dpkg.log), но я считаю, что с этим гораздо труднее работать.

редактировать Теперь, когда я смотрю статью, есть одна вещь, которая в чем-то похожа. Вы можете получить состояние своих пакетов, выполнив эту последовательность. Сначала получите список текущего состояния пакета:

dpkg --get-selections "*" > my_packages-datestamp

Позже вы сможете выполнить откат, используя этот список пакетов:

dpkg --set-selections < my_packages-datestamp
apt-get -u dselect-upgrade

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

Такой опции нет ни в dpkg, ни в любом другом связанном с apt инструменте, и этому есть простая причина. Установка пакета - это не только распаковка файлов, но и их настройка, и это выполняется путем запуска сценария до / после установки / удаления, связанного с каждым пакетом.

Восстановить старые файлы легко, но отменить то, что сделали скрипты postinst, намного сложнее. Теоретически dpkg поддерживает понижение версии, потому что он предоставляет скриптам всю необходимую информацию, чтобы они могли определять, когда они переходят на более раннюю версию, но на практике очень мало реализаций пакетов, которые поддерживают должным образом (а Debian не поддерживает понижение версии официально).

Однако обратите внимание, что для многих простых пакетов, в которых нет сценария postinst, переход на более раннюю версию работает очень хорошо. apt-get и aptitude может использоваться для принудительной установки более старой версии с таким синтаксисом:

aptitude install foo/testing # Downgrade a package to testing if you run unstable
aptitude install foo=1.2-3 # Downgrade to 1.2-3 if you run a higher version

Поэтому, если вы будете записывать все пакеты, установленные с их версией, в большинстве случаев вы можете восстановить предыдущее работающее состояние. Вы также можете узнать ранее установленные версии, проанализировав журнал dpkg. /var/log/dpkg.log (или журнал aptitude, если вы используете только aptitude и нет apt-get).

К сожалению, это не то, на что способны ни dpkg, ни apt. Пакеты Debian на самом деле не предназначены для понижения версии, они не поддерживаются и не тестируются. Конечно, нет поддержки создания снимков.

Однако, сказав это, вы можете сделать это вручную. Если вы посмотрите в /var/log/dpkg.log, вы найдете журнал операций, которые произошли. Это немного многословно, но вы сможете получить список предыдущих версий пакетов, которые были установлены. Предполагая, что они все еще доступны в репозиториях, настроенных в вашем sources.list, вы должны иметь возможность:

# apt-get install foo=1.2 bar=3.4-5

Если они недоступны в репозитории, вы все равно можете найти их в / var / cache / apt / archives / или вы сможете найти их где-нибудь для загрузки, возможно, в другом репозитории. Когда у вас есть список пакетов, вы можете запустить:

# dpkg -i foo_1.2_amd64.deb bar_3.4-5_all.deb

Затем вы должны вернуться к версиям, которые были установлены ранее. Вы можете обнаружить, что что-то не то же самое, например, конфигурация.

Существует метод создания снимков с помощью LVM, но его не очень легко и быстро включить в существующую установку. Возможно, вам придется переустановить систему и настроить диски для использования LVM. Затем вы можете создать моментальный снимок LVM, выполнить обновление, протестировать его, а затем либо удалить моментальный снимок, если вы довольны, либо вернуться к этому снимку, если это не так. Очевидно, что любые данные, записанные после снэпшота, будут удалены вместе с пакетами.