Существует ли дистрибутив, поддерживающий откат обновленных пакетов?

23

Существует ли инструмент или даже весь дистрибутив, который поддерживает откат измененных пакетов после обновления?

В качестве примера: я обновил пакеты A, B и C. После работы с этими пакетами в течение нескольких дней я столкнулся с ошибкой в ​​B, которая нарушает условия сделки.

Хотя я отправляю отчет об ошибке, мне также нужно понизить версию B до предыдущей версии, чтобы я мог закончить то, что собирался сделать. Между тем A зависит от B, поэтому его также необходимо понизить, но C не зависит от обоих, поэтому он может остаться в своей текущей версии.

Есть ли инструмент или дистрибутив, который поддерживает это?

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

Штеффен Винклер
источник
3
Важно отметить: если изменение версии пакета было незначительным, могут применяться ответы ниже; однако учтите, что более крупные изменения пакета могут привести к обновлению данных на диске, которые впоследствии не будут работать корректно в более старой версии. Например, при значительном обновлении mysql-сервера (или joomla) будут добавлены и изменены поля и обновлены таблицы SQL, при обновлении inn2 может измениться тип базы данных, или при обновлении некоторых дистрибутивов ядра может произойти обновление файловой системы ext3 до ext4, либо при обновлении пакета будут преобразованы файлы конфигурации, и т. д. Единственной защитой от этих «не подлежащих возврату» изменений являются снимки LVM / btrfs / etc (или гораздо более медленное резервное копирование / восстановление).
Матия Налис
@MatijaNalis +1 за упоминание этого!
Штеффен Винклер

Ответы:

21

NixOS поддерживает откаты обновления, хотя, насколько я понимаю, это не так далеко, как хотелось бы: если вы обновляете A, B и C за одну операцию, вы можете откатить всю эту операцию назад, но не только A и B. (Вы должны иметь возможность откатить A, B и C обратно, а затем обновить C ...) Это имеет смысл с точки зрения транзакций.

Debian (в сочетании с архивом моментальных снимков, если у вас больше нет старых пакетов) позволит вам понизить версию B, и инструменты, подобные aptили aptitudeво многих случаях выяснят, что A также необходимо понизить (как только вы убедите их, что вы не хочу просто обновить B). Но, как вы говорите, это, как правило, несколько запутанно, и понижение пакетов в любом случае не поддерживается в Debian (что означает, что большую часть времени они работают, но если они ломаются, это не ошибка).

Стивен Китт
источник
1
это выглядит интересно! Сообщество выглядит активным и здоровым. Я обязательно попробую, спасибо! Если к вечеру пятницы не будет лучшего / другого ответа, я отмечу ваш ответ.
Штеффен Винклер
Откаты на NixOS потрясающие, но настоящая сила заключается в декларативном подходе: описание пакетов (и системы) можно взять из репозитория git, таким образом, вы можете управлять своей системой так же, как вы управляете программным проектом, включая ветви и слияния и т. д. (и благодаря атомным улучшениям и чистоте вы никогда не сломаете вещи)
Даниэль Жур
Диспетчер пакетов Nix также можно запускать в других дистрибутивах Linux, параллельно с их «родным» диспетчером пакетов. Он также работает на OSX, и я видел утверждения, что он может работать на Windows. Вы также можете указать Nix использовать «собственные» версии некоторых пакетов вместо установки собственных дубликатов, хотя при этом вы теряете некоторые из его гарантий (например, он может не заметить, что вы обменяли некоторую зависимость).
Warbo
только для справки, мне удалось установить NixOS на моем ноутбуке (образ KDE4 дал мне панику ядра, но маленький (~ 390 МБ) образ загрузился нормально. Для тех, кто устанавливал дистрибутивы только на основе Debian, это было довольно интересно / забавно. Однако Я пока не понимаю некоторые вещи, касающиеся менеджера пакетов, особенно когда речь идет о настольных средах. Я установил gdm / gnome-shell, но это не сработало. Затем я включил gnome3 / gdm в файле configuration.nix и при перестройке оба пакета и их зависимости были загружены снова. После перезагрузки все заработало, но я не понимаю, почему.
Steffen Winkler
@SteffenWinkler При использовании NixOS вы обычно не устанавливаете вещи с помощью nix-env, вместо этого вы указываете вещи, configuration.nixа затем запускаете их nixos-rebuild switch. Преимущество заключается в том, что вся конфигурация вашей системы находится в одном месте, и вы легко можете сделать резервную копию всей конфигурации вашей системы (просто сделайте резервную копию configuration.nixфайла).
Pauan
15

В любом yumдистрибутиве (например, Red Hat EL , CentOS и т. Д.) Вы можете:

  1. изучить историю изменений в системе с помощью sudo yum history list

    Loaded plugins: fastestmirror
    ID     | Login user               | Date and time    | Action(s)      | Altered
    ------------------------------------------------------------------------------
        10 | Administrator <admin>    | 2016-03-08 09:08 | Install        |   11   
         9 | Administrator <admin>    | 2016-03-03 16:48 | Install        |    1   
         8 | Administrator <admin>    | 2016-03-03 16:09 | Install        |    5   
         7 | Administrator <admin>    | 2016-02-26 18:13 | Install        |    1   
         6 | Administrator <admin>    | 2016-02-26 15:12 | Install        |   27   
         5 | Administrator <admin>    | 2016-02-26 15:07 | Install        |    1   
         4 | Administrator <admin>    | 2016-02-26 15:05 | Install        |    3  <
         3 | Administrator <admin>    | 2016-02-26 15:03 | Install        |    1 > 
         2 | Administrator <admin>    | 2016-02-26 15:01 | I, U           |   49   
         1 | System <unset>           | 2016-02-26 14:38 | Install        |  296   
    history list
    
  2. проверьте детали, используя sudo yum history info 10

  3. откат к предыдущей точке в истории, используя sudo yum history rollback 9

Предупреждение

Есть несколько очевидных предостережений:

  1. Если старый пакет больше не доступен, вы тост (цитируя @vonbrand),
  2. Если вы установите что-нибудь за пределами yum, вы можете сломать историю.

В моем примере это означает , что <в строке с идентификатором 4(в последнем столбце) я не могу откатиться после этой точки.

sudo yum history rollback 2
Loaded plugins: fastestmirror
Transaction history is incomplete, before 4.
 You can use 'history rollback force', to try anyway.
Error: Failed history rollback, incomplete
andcoz
источник
3
интересная особенность! Но из-за «тоста» не подходит мой счет.
Штеффен Винклер,
AFAIK это возможно только в RHEL / CentOS 6 или выше. Если вы все еще используете RHEL / CentOS 5, вы SOL.
Wildcard
И, кстати, в корпоративной среде с управляемыми репозиториями этот подход вполне работоспособен, так как у вас всегда есть старые пакеты, даже если вам нужно использовать --enablerepoфлаг, чтобы разрешить использование устаревшего старого репозитория для понижения.
Wildcard
В чем преимущество отката по сравнению с простой установкой старой версии?
Братчли
Автоматизация @Bratchley! yum просто заботится о сохранении списка установленных пакетов и версий и проверяет зависимости при переустановке старых версий. Очевидно, вы можете сделать это вручную .
andcoz
7

В OpenSUSE вы можете легко использовать Snapper с файловой системой Btrfs .

Если во время установки вы используете стандартную конфигурацию файловой системы, она включена по умолчанию .

Как только Snapper включен, он полностью интегрируется с yast2и zypper. Он будет создавать снимок файловой системы каждый раз, когда вы будете устанавливать или обновлять что-либо (или создавать пользователя и т. Д.).

Чтобы откатить систему до предыдущего состояния, вам нужно только запустить yast2 snapper.

введите описание изображения здесь

andcoz
источник
действительно интересный инструмент. Хотя мне очень нравится ext4. Будем исследовать это! Правильно ли я предположил, что Snapper не «связан» с OpenSUSE, а с btrfs?
Штеффен Винклер
Snapper разработан SUSE. Это набор инструментов, которые автоматизируют создание снимков Brtfs на «событиях». Я полагаю, вы можете использовать его в других дистрибутивах, но я не уверен. В любом случае вы можете вручную создавать снимки Brtfs в любом дистрибутиве.
andcoz
3
Просто имейте в виду, что если ваш том содержит какие-либо данные, а не только двоичные файлы и сценарии, этот откат снимка также откатит ваши собственные данные. Эта опция звучит рискованно, лучше всего подходит для тех, кто действительно знает структуру своей файловой системы. Для меня снимки всегда были для последовательного резервного копирования, репликации и полного восстановления.
скудный
1
Также обратите внимание, что во многих пакетах есть файлы и / или каталоги, /varпоэтому их необходимо откатить, /даже если это отдельный fs или подобъем. Это гораздо лучше , чтобы тщательно проверить обновление до его применения на производственных серверах , чем полагаться на такие функции , как OS обновления Откат (что тривиально легко сделать в полу-arsed образом , но является чрезвычайно сложной проблемой правильно ).
Cas
1
@Jimp Хороший совет. В любом случае, OpenSuSE не включает snapper, если он не /homeнаходится в отдельной файловой системе без моментальных снимков .
andcoz
6

AIX очень хорош в откате обновлений. Что ж, мы находимся на сайте Unix / Linux, и вы никогда не указывали, что хотите Linux :)

Каждое обновление AIX сохраняет все измененные файлы в отдельном подкаталоге внутри / var файловой системы. Обновление может быть отменено с помощью простой встроенной команды, и для восстановления не требуется сеть, не требуются какие-либо носители / пакеты, ничего не переустанавливается и не зависит от каких-либо технология моментальных снимков - в результате файлы просто появляются так, как они были до обновления.

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

И это все проверенные технологии с десятилетиями истории :)

kubanczyk
источник
Часто ли вы сталкиваетесь с проблемами с программами, восстановленными таким образом, находящимися в несовместимом состоянии и с откатом (т. Е. С базой данных, механизм хранения которой был изменен, или с сервисом, который переключился на новый формат файла конфигурации), или есть хорошие способы для работы с что?
Джош Рамбут
1
Это модель, которую я использовал, когда создавал элементарную систему управления пакетами для программного обеспечения, которое традиционно распространялось в сжатых / сжатых архивах. Каждый раз, когда он устанавливал обновления, он сначала создавал «пакет отката» всего, что должно было быть изменено. Этот пакет отката можно затем использовать для возврата при условии, что в промежуточный период никакие другие пакеты обновлений не применялись. Я часто задавался вопросом, могли ли бы правильные менеджеры пакетов сделать это, но учитывая ограничения отката только в обратном порядке ... возможно, мы должны просто использовать вместо этого git.
Монти Хардер
черт возьми. Я должен был указать, что имел в виду дистрибутивы GNU / Linux. Но, что интересно, AIX, похоже, в настоящее время способен запускать «программы» для GNU / Linux, думаю, я посмотрю поближе.
Штеффен Винклер
5

В Fedora (и я уверен, что в других дистрибутивах) вы можете попросить вернуться к предыдущей версии:

dnf downgrade <packages>

получает последнюю версию пакетов, и вы можете запросить конкретную версию по:

dnf downgrade <package>.<version>

Это работает, только если пакет (ы) все еще доступны в репозиториях. Функциональность, конечно же, неслыханная. Это имеет свои недостатки, если часть обновления должна была изменить конфигурации, откат не обязательно будет точно до предыдущей версии.

vonbrand
источник
Вы также можете использовать dnf history отменить #thing для отмены
Clearer
This only works if the package(s) are still available in the repositories. да, это именно проблема. Я немного удивлен тем, что, кажется, не существует «более широкого» решения для этого, особенно с учетом количества выпусков с непрерывным выпуском. На данный момент мне кажется, что NixOS - мой лучший вариант, или мне нужен какой-нибудь инструмент для создания образов системы, который работает только на различиях и может восстанавливать систему в определенный момент времени за последние 20 (?) Обновлений.
Штеффен Винклер,
@SteffenWinkler, если старый пакет больше не доступен, вы тост. Очевидно. Если у вас нет какой-то локальной резервной копии.
vonbrand
2
@MTilsted, потому что он уже слишком старый? Репозитории не содержат все версии с незапамятных времен.
vonbrand
1
В dnf.conf (так же, как и yum.conf) есть keepcache = true. Доступны старые пакеты, поскольку кэш lond не очищается вручную. Но это пошло на «раздувание» кеша пакета.
mmv-ru
2

Arch Linux также поддерживает понижение версии пакетов и ядра. Вы также можете установить downgraderи downgradeинструменты для автоматизации процесса. Решение btrfs также работает, я использовал его для ручного отката раньше.

Как мне откатить мою систему:

sudo -i
mount /dev/sda3 /mnt/hd #mount the top btrfs subvolume
ls #find the version you want
mv @ @-old #move the '/' subvolume (I named mine '@')
btrfs sub snap @-<date> @ #replace @ with the backup from <date>
sync
reboot #the changes will take effect once the system restarts

Одним из преимуществ btrfs является то, что вы можете использовать подобъемы и динамические «разделы». Например, у меня есть подобъем для / (называемый @), / tmp (@tmp) и / home (@home). Затем легко выполнить резервное копирование и откатить любой из них. У меня есть / tmp в отдельном подразделе, потому что резервное копирование с остальной частью системы кажется бессмысленным, так как он стирается почти при каждой перезагрузке.

Калеб Рейстер
источник
Я перешел по ссылке в вики и попал сюда . Это выглядит довольно круто, и после проверки хранилища, есть файлы, возвращающиеся к 2013 году! Зачем использовать способ btrfs, если он существует? Из-за файлов, которые «обновлены»? Или есть какая-то другая причина?
Штеффен Винклер
Теперь я перешел на Arch Linux навсегда после непродолжительного посещения NixOS. Он (Arch Linux) не так нестабилен, как я всегда думал, и у него здоровое сообщество.
Штеффен Винклер,
@SteffenWinkler Это правильно. Кроме того, опции понижения Arch не «официально» поддерживаются, и понижение, вероятно, будет игнорировать зависимости (которые могут стать довольно запутанными, если что-то пойдет не так).
Калеб Рейстер
2

Я использую Arch Linux, и он хранит все загруженные пакеты, /var/cache/pacman/pkg/чтобы вы могли в любое время понизить любой пакет (если вы не можете загрузиться, используйте живой USB). Из Arch Wiki :

pacman -U <file_name_of_the_package>

Чтобы предотвратить обновление пакета, включите имя пакета /etc/pacman.conf, например:

IgnorePkg=linux

Для экономии места вы можете очистить папку кеша с помощью:

pacman -Sc

Который удалит все старые пакеты и сохранит самый новый, или использует -Sccдля удаления все.

Alko
источник
Обратите внимание, что это (игнорирование пакетов) означает частичное обновление, которое не поддерживается ...
jasonwryan
Я перешел по ссылке в вики и попал сюда . Это выглядит довольно круто, и после проверки хранилища, есть файлы, возвращающиеся к 2013 году! Зачем использовать способ btrfs, если он существует? Из-за файлов, которые «обновлены»? Или есть какая-то другая причина?
Штеффен Винклер