Существует ли инструмент или даже весь дистрибутив, который поддерживает откат измененных пакетов после обновления?
В качестве примера: я обновил пакеты A, B и C. После работы с этими пакетами в течение нескольких дней я столкнулся с ошибкой в B, которая нарушает условия сделки.
Хотя я отправляю отчет об ошибке, мне также нужно понизить версию B до предыдущей версии, чтобы я мог закончить то, что собирался сделать. Между тем A зависит от B, поэтому его также необходимо понизить, но C не зависит от обоих, поэтому он может остаться в своей текущей версии.
Есть ли инструмент или дистрибутив, который поддерживает это?
Я знаю, что в большинстве дистрибутивов есть способ понижения пакета, но это обычно отрывочно или даже невозможно, потому что предыдущий пакет был удален из репозиториев, и в некоторых случаях (например, после обновления X-сервера и Mesa) он действительно получается ... . грязный.
источник
Ответы:
NixOS поддерживает откаты обновления, хотя, насколько я понимаю, это не так далеко, как хотелось бы: если вы обновляете A, B и C за одну операцию, вы можете откатить всю эту операцию назад, но не только A и B. (Вы должны иметь возможность откатить A, B и C обратно, а затем обновить C ...) Это имеет смысл с точки зрения транзакций.
Debian (в сочетании с архивом моментальных снимков, если у вас больше нет старых пакетов) позволит вам понизить версию B, и инструменты, подобные
apt
илиaptitude
во многих случаях выяснят, что A также необходимо понизить (как только вы убедите их, что вы не хочу просто обновить B). Но, как вы говорите, это, как правило, несколько запутанно, и понижение пакетов в любом случае не поддерживается в Debian (что означает, что большую часть времени они работают, но если они ломаются, это не ошибка).источник
nix-env
, вместо этого вы указываете вещи,configuration.nix
а затем запускаете ихnixos-rebuild switch
. Преимущество заключается в том, что вся конфигурация вашей системы находится в одном месте, и вы легко можете сделать резервную копию всей конфигурации вашей системы (просто сделайте резервную копиюconfiguration.nix
файла).В любом
yum
дистрибутиве (например, Red Hat EL , CentOS и т. Д.) Вы можете:изучить историю изменений в системе с помощью
sudo yum history list
проверьте детали, используя
sudo yum history info 10
sudo yum history rollback 9
Предупреждение
Есть несколько очевидных предостережений:
В моем примере это означает , что
<
в строке с идентификатором4
(в последнем столбце) я не могу откатиться после этой точки.источник
--enablerepo
флаг, чтобы разрешить использование устаревшего старого репозитория для понижения.yum
просто заботится о сохранении списка установленных пакетов и версий и проверяет зависимости при переустановке старых версий. Очевидно, вы можете сделать это вручную .В OpenSUSE вы можете легко использовать Snapper с файловой системой Btrfs .
Если во время установки вы используете стандартную конфигурацию файловой системы, она включена по умолчанию .
Как только Snapper включен, он полностью интегрируется с
yast2
иzypper
. Он будет создавать снимок файловой системы каждый раз, когда вы будете устанавливать или обновлять что-либо (или создавать пользователя и т. Д.).Чтобы откатить систему до предыдущего состояния, вам нужно только запустить
yast2 snapper
.источник
/var
поэтому их необходимо откатить,/
даже если это отдельный fs или подобъем. Это гораздо лучше , чтобы тщательно проверить обновление до его применения на производственных серверах , чем полагаться на такие функции , как OS обновления Откат (что тривиально легко сделать в полу-arsed образом , но является чрезвычайно сложной проблемой правильно )./home
находится в отдельной файловой системе без моментальных снимков .AIX очень хорош в откате обновлений. Что ж, мы находимся на сайте Unix / Linux, и вы никогда не указывали, что хотите Linux :)
Каждое обновление AIX сохраняет все измененные файлы в отдельном подкаталоге внутри / var файловой системы. Обновление может быть отменено с помощью простой встроенной команды, и для восстановления не требуется сеть, не требуются какие-либо носители / пакеты, ничего не переустанавливается и не зависит от каких-либо технология моментальных снимков - в результате файлы просто появляются так, как они были до обновления.
В качестве бонуса есть одна тривиальная встроенная команда
mksysb
для создания загрузочной автономной резервной копии системы. Файл, который можно просто загрузить в полностью нефункциональной системе, которая не загружается из-за какой-либо неисправности / повреждения.И это все проверенные технологии с десятилетиями истории :)
источник
В Fedora (и я уверен, что в других дистрибутивах) вы можете попросить вернуться к предыдущей версии:
получает последнюю версию пакетов, и вы можете запросить конкретную версию по:
Это работает, только если пакет (ы) все еще доступны в репозиториях. Функциональность, конечно же, неслыханная. Это имеет свои недостатки, если часть обновления должна была изменить конфигурации, откат не обязательно будет точно до предыдущей версии.
источник
This only works if the package(s) are still available in the repositories.
да, это именно проблема. Я немного удивлен тем, что, кажется, не существует «более широкого» решения для этого, особенно с учетом количества выпусков с непрерывным выпуском. На данный момент мне кажется, что NixOS - мой лучший вариант, или мне нужен какой-нибудь инструмент для создания образов системы, который работает только на различиях и может восстанавливать систему в определенный момент времени за последние 20 (?) Обновлений.Arch Linux также поддерживает понижение версии пакетов и ядра. Вы также можете установить
downgrader
иdowngrade
инструменты для автоматизации процесса. Решение btrfs также работает, я использовал его для ручного отката раньше.Как мне откатить мою систему:
Одним из преимуществ btrfs является то, что вы можете использовать подобъемы и динамические «разделы». Например, у меня есть подобъем для / (называемый @), / tmp (@tmp) и / home (@home). Затем легко выполнить резервное копирование и откатить любой из них. У меня есть / tmp в отдельном подразделе, потому что резервное копирование с остальной частью системы кажется бессмысленным, так как он стирается почти при каждой перезагрузке.
источник
Я использую Arch Linux, и он хранит все загруженные пакеты,
/var/cache/pacman/pkg/
чтобы вы могли в любое время понизить любой пакет (если вы не можете загрузиться, используйте живой USB). Из Arch Wiki :Чтобы предотвратить обновление пакета, включите имя пакета
/etc/pacman.conf
, например:Для экономии места вы можете очистить папку кеша с помощью:
Который удалит все старые пакеты и сохранит самый новый, или использует
-Scc
для удаления все.источник