Er - машина часу для пакетної бази - блог точка роси

Багато розробники і цікаві користувачі нерідко стикаються з необхідністю відкотити недавно встановлені пакети, які привнесли в їх систему не зовсім очікувані поновлення. Це зазвичай трапляється при установці пакетів з неофіційних джерел, з testing-репозиторіїв або просто з приватних репозиторіїв розробників і контейнерів, що містять пакети виключно для тестування. Останнє особливо актуально для нашої команди QA - відкочувати встановлені для тестування пакети їм доводиться дуже часто.

Відкочувати пакети вручну не дуже зручно, особливо якщо їх багато і ви не цілком упевнені, що саме треба відкотити для повернення системи в нормальний стан. На допомогу може прийти urpm-reposync. але цей інструмент може виявитися занадто потужним - він здійснить повну синхронізацію вашої системи з підключеними репозиторіями, і відкотити тільки частина пакетів з його допомогою важко.

Хороша новина - тепер ніша між ручним відкотом пакетів і використанням reposync заповнена утилітою urpmi.recover. здатної відкочувати встановлені вами пакети. Urpmi.recover може повернути пакетну базу в стан на певну дату в минулому, або відкотити задану кількість транзакцій по установці пакетів.

Urpmi.recover є частиною пакета urpmi і автоматично потрапить в вашу систему з оновленнями.

Для здійснення такого відкату пакетів, urpmi.recover зберігає старі версії оновлюваних пакетів в директорії / var / spool / repackage. І для того, щоб почати користуватися утилітою, необхідно спочатку ініціювати збереження старих версій пакетів, виконавши команду

Цією командою ви як-би говорите: «Зараз у мене система в стабільному стані, але я збираюся встановити потенційно небезпечні пакети. Будь ласка, починаючи з цього моменту, відстежуй все що встановлюються пакети і зберігай їх старі версії в разі поновлення ».

Ви можете виконувати цю команду і в майбутньому для перевизначення стабільного стану системи. При цьому при кожному виклику urpmi.recover --checkpoint директорія / var / spool / repackage буде очищатися, так що відкотитися на більш ранню дату ви вже не зможете.

Поки відстеження встановлення та оновлення пакетів включено, старі версії пакетів зберігаються в піддиректоріях / var / spool / repackage. відповідних датою оновлення, так що ви завжди можете вивчити ці пакети самостійно.

Якщо в деякий момент часу ви вирішуєте, що настав час відкотити систему в минуле, то просто виконайте команду

Час відкату можна вказати як число секунд з початку Епохи, але для людей передбачені і більш зручні варіанти, наприклад:

Можна відкотити і задану кількість транзакцій, вказавши опцію --transactions і передавши кількість транзакцій для відкату опції --rollback.

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

Нарешті, вимкнути трекінг установки пакетів ви можете командою

Ця команда також очистить / var / spool / repackage.

Ось так за допомогою urpmi.recover можна відкочувати стан пакетної бази. Утиліта знаходиться в експериментальному стані і відсутність помилок не гарантується, тестируйте на свій страх і ризик :). Втім, перед здійсненням відкату urpmi.recover повідомить вам, що саме він збирається зробити (які пакети видалити, які відкотити), і у вас буде можливість відмовитися, якщо вам щось не сподобається. Нарешті, в разі чого, urpm-reposync готовий прийти на допомогу.

Також варто пам'ятати, що мейнтейнери не завжди дбають про забезпечення коректного відкату пакетів на попередні версії - так що якщо нова версія пакету вам щось зламала в системі, то відкат на стару може і не допомогти.