Чи є дистрибутив, який підтримує відкат оновлених пакетів?


23

Чи є інструмент або навіть цілий дистрибутив, який підтримує відкат змінених пакетів після оновлення?

Як приклад: я оновив пакети A, B і C. Після роботи з цими пакунками протягом декількох днів я стикаюся з помилкою в B, яка порушує завдання.

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

Чи є інструмент чи дистрибутив, який це підтримує?

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


3
Що слід зазначити: якщо зміна версії пакета була незначною, можливі відповіді нижче; однак зауважте, що більші зміни пакету можуть оновити дані на диску, які згодом не працюватимуть належним чином у старій версії. Наприклад, основне оновлення mysql-сервера (або joomla) додасть і модифікує поля та оновить таблиці SQL, оновлення inn2 може змінити тип бази даних, або якесь оновлення ядра дистрибутива може оновити ext3 до файлової системи ext4, або якесь оновлення пакета перетворить конфігураційні файли, і т. д. Єдиним захистом від цих змін, які не можна скачати, є знімки LVM / btrfs / тощо (або набагато повільніше резервне копіювання / відновлення).
Matija Nalis

@MatijaNalis +1 за згадку про це!
Стеффен Вінклер

Відповіді:


21

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

Debian (у поєднанні з архівом знімків, якщо у вас більше немає старих пакетів) дозволить вам знизити рівень B, а такі інструменти, як aptабо aptitudeв багатьох випадках, з'ясують, що A також потрібно знизити (як тільки ви переконаєте їх у тому, що ви не хочу просто оновити B). Але, як ви кажете, це тенденція дещо безладно, і пониження пакету в Debian все одно не підтримується (це означає, що більшість часу вони працюють, але якщо вони порушують, це не помилка).


1
це виглядає цікаво! Громада виглядає активно та здорово. Я обов'язково спробую це, дякую! Якщо до вечора п'ятниці немає кращої / іншої відповіді, я позначу вашу відповідь.
Стеффен Вінклер

Відкати на NixOS є приголомшливими, але реальна потужність виходить із декларативного підходу: опис пакетів (та системи) можна взяти з сховища git, таким чином ви можете керувати своєю системою так само, як і керувати програмним проектом, включаючи гілки і зливається і т. д. (а завдяки атомним оновленням і чистоті ви ніколи не ламаєте речі)
Daniel Jour

Менеджер пакетів Nix також може бути запущений в інших дистрибутивах Linux, поряд з їх "рідним" менеджером пакетів. Він також працює на OSX, і я бачив твердження, що він може працювати в Windows. Ви також можете сказати Nix використовувати "нативні" версії деяких пакетів, а не встановлювати власні копії, хоча ви втрачаєте деякі його гарантії таким чином (наприклад, він може не помітити, що ви замінили якусь залежність).
Варбо

просто FYI, мені вдалося встановити NixOS на свій ноутбук (зображення KDE4 дало мені паніку з ядрами, але маленьке (~ 390 Мб) зображення призвело до відмінного завантаження. Для тих, хто коли-небудь встановлював дистрибутиви на базі Debian, це було досить цікаво / весело). , Я ще не розумію певних речей щодо менеджера пакунків, особливо якщо мова йде про робочий стіл. Я встановив gdm / gnome-shell, але він не працюватиме. Потім я включив gnome3 / gdm у файл config.nix та відновлення це, і пакунки, і їх залежність було завантажено знову. Це спрацювало після перезавантаження, але я не розумію, чому.
Steffen Winkler

@SteffenWinkler При використанні NixOS ви зазвичай не встановлюєте речі nix-env, натомість ви вказуєте речі configuration.nixта запускаєте nixos-rebuild switch. Це має перевагу в тому, що вся ваша конфігурація системи знаходиться в одному місці, і легко створити резервну копію конфігурації всієї системи (просто резервну копію configuration.nixфайлу).
Паан

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

3
цікава особливість! Але через "тост" не підходить мій рахунок.
Стеффен Вінклер

AFAIK це можливо лише в RHEL / CentOS 6 або вище. Якщо ви все ще використовуєте RHEL / CentOS 5, ви SOL.
Wildcard

До речі, у корпоративному середовищі з керованими репостами такий підхід є досить працездатним, оскільки у вас завжди є старі пакети, навіть якщо вам потрібно використовувати --enablerepoпрапор, щоб увімкнути старий сховище в іншому випадку для пониження рівня.
Wildcard

Яка користь відкотитися назад, а не просто встановити старішу версію знову?
Братчлі

@Bratchley автоматизація! yum просто дбає про збереження списку встановлених пакетів та версій та перевіряє наявність залежностей при перевстановленні старих версій. Очевидно, ви можете це зробити вручну .
andcoz

7

На OpenSUSE можна легко використовувати Snapper з файловою системою Btrfs .

Якщо під час встановлення використовується стандартна конфігурація файлової системи, вона включена за замовчуванням .

Після того, як Snapper включена, вона повністю інтегрована з yast2і zypper. Це створить знімок файлової системи щоразу, коли ви щось встановите або оновите (або створите користувача тощо).

Щоб повернути систему до попереднього стану, вам потрібно лише запустити yast2 snapper.

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


дійсно цікавий інструмент. Хоча я дуже люблю ext4. Буде це дослідження! Чи правильно я припускаю, що Snapper не 'прив’язаний' до OpenSUSE, а до btrfs?
Стеффен Вінклер

Snapper розроблений компанією SUSE. Це набір інструментів, які автоматизують створення знімків Brtfs на "події". Я думаю, ви можете використовувати його в інших дистрибутивах, але я не впевнений. У будь-якому випадку, ви можете вручну створити знімки Brtfs в будь-якому дистрибутиві.
andcoz

3
Пам’ятайте лише про те, що якщо ваш об'єм містить будь-які дані, а не лише бінарні файли та сценарії, то такий прокат знімків також поверне ваші власні дані. Цей варіант звучить ризиковано, найкраще підходить для тих, хто дійсно знає компонування своєї файлової системи. Для мене знімки завжди були для послідовних резервних копій, реплікації та загальних ситуацій відновлення.
jimp

1
Зауважте також, що у багатьох пакунках є файли та / або каталоги, /varтому їх потрібно повернути разом, /навіть якщо це окремий fs або підпункт. Набагато краще ретельно протестувати оновлення, перш ніж застосовувати його до виробничих серверів, ніж покладатися на такі функції, як відкат оновлення ОС (що тривіально легко зробити напіваріантом, але це надзвичайно складно вирішити правильно ).
cas

1
@Jimp Гарна порада. У будь-якому випадку OpenSuSE не вмикає Snapper, якщо /homeне знаходиться в окремій немедленній файловій системі.
andcoz

6

AIX дуже добре відновлює оновлення. Ну - ми на сайті Unix / Linux, і ви ніколи не вказували, що хочете Linux :)

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

Як бонус, є одна тривіальна нативна команда mksysbдля створення завантажувальної автономної резервної копії системи. Файл, який може бути просто завантажений у повністю нефункціональній системі, яка не завантажується через певну несправність / пошкодження.

І все це перевірена технологія з десятирічною історією :)


Чи часто у вас виникають проблеми з відновленими таким чином програмами, які перебувають у непослідовному стані та відкаті (тобто базі даних, двигун пам’яті якої змінився, або послуга, яка перейшла у новий формат конфігураційного файлу), або є хороші способи роботи що?
Джош Румбут

1
Це модель, яку я використав, коли я створив рудиментарну систему управління пакетами для програмного забезпечення, яке традиційно поширювалося в стислих / gzipped тарболах. Кожного разу, коли він встановлював оновлення, він спочатку створив "відкатний пакет" із усього, що потрібно було змінити. Цей відкатний пакет може бути використаний для відновлення, за умови, що жодні інші пакети оновлення не були застосовані в проміжку часу. Я часто замислювався над тим, чи можуть це зробити правильні менеджери пакунків, але, враховуючи обмеження відкочування лише у зворотному порядку ... можливо, нам слід просто використовувати git.
Monty Harder

блін. Я повинен був уточнити, що я маю на увазі дистрибутиви GNU / Linux. Але що цікаво, здається, AIX сьогодні здатний запускати програми GNU / Linux, напевно, я детальніше ознайомлюсь.
Стеффен Вінклер

5

У Fedora (і я впевнений, що і в інших дистрибутивах) ви можете попросити повернутися до попередньої версії:

dnf downgrade <packages>

отримує наступну до останньої версії пакетів, і ви можете попросити певну:

dnf downgrade <package>.<version>

Це працює лише в тому випадку, якщо пакет (и) все ще доступні у сховищах. Функціонал жодним чином не залишається нечуваним. У неї є корчі, якщо частина оновлення мала змінити конфігурації, відкат не обов'язково повинен відповідати точній минулій версії.


Ви також можете використовувати скасувати dnf history undo #thing для скасування
Clearer

This only works if the package(s) are still available in the repositories. Так, саме в цьому проблема. Я дуже здивований, що для цього, мабуть, немає «більш широкого» рішення, особливо щодо кількості розповсюджених випусків. На сьогоднішній день здається, що NixOS - це мій найкращий варіант, або мені знадобиться якийсь інструмент візуалізації системи, який працює лише на відмінностях і може відновити систему до певного часу за останні 20 (?) Оновлень.
Steffen Winkler

@SteffenWinkler, якщо старий пакет більше недоступний, ви тості. Очевидно. Якщо у вас немає якоїсь локальної резервної копії.
фонбранд

2
@MTilsted, тому що вона вже занадто стара? У сховищах не містяться всі версії ще від світанку.
фонбранд

1
У dnf.conf (те саме, що і yum.conf) доступний пакет Keepcache = true Old, оскільки кеш 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 Це правильно. Крім того, параметри пониження арки не підтримуються "офіційно", і при пониженні версії, мабуть, ігноруються залежності (які можуть стати безладним, якщо щось піде не так).
Caleb Reister

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для видалення всіх.


Зауважте, що це (ігнорування пакетів) означає часткове оновлення, яке не підтримується ...
jasonwryan

Я перейшов за посиланням у вікі і потрапив сюди . Це виглядає досить круто, і, перевіривши сховище, є файли, що відносяться до 2013 року! Навіщо використовувати спосіб btrfs, коли такий існує? Через файли, які "оновлені"? Або є якась інша причина?
Стеффен Вінклер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.