Іноді свіже оновлення ламає улюблений застосунок — буває. Добра новина: у Snap і Flatpak є інструменти для швидкого відкату, фіксації (pinning) потрібної версії та безпечного тестування новинок. У цій статті я покажу, як це зробити через термінал Linux, а також які є альтернативи і простий GUI-шлях. Все максимально практично і без «танців» 🧰

Що таке відкат і pinning для Snap та Flatpak

Відкат (rollback) — повернення до попереднього випуску застосунку. Pinning — «замороження» версії, щоб уникнути автоматичних оновлень. У Snap це досягається через revert та утримання оновлень, а у Flatpak — через вибір конкретного commit і маскування. Це допомагає контролювати оновлення Linux на ваших умовах.

Підготовка: бекап і тестовий підхід

Перш ніж щось міняти, перевірте встановлені версії та зробіть копію важливих даних застосунку. Дані користувача зазвичай зберігаються в ~/snap/<назва>/current для Snap та ~/.var/app/<AppID> для Flatpak.

# Перевірка встановлених Snap і їх ревізій
snap list --all

# Перевірка каналів і доступних ревізій для конкретного Snap
snap info <назва-snap>

# Список встановлених Flatpak застосунків
flatpak list --app

# Детальний лог версій Flatpak з Flathub
flatpak remote-info --log flathub <AppID>

How-to: Snap — відкат, фіксація та канали

1) Швидкий відкат до попередньої ревізії

Якщо останнє оновлення зламалося, відкотіться на попередню ревізію:

sudo snap revert <назва-snap>
# Перевірка результату
snap list | grep <назва-snap>

Команда revert повертає саме на попередню локально доступну ревізію (ту, що показана в snap list --all як disabled).

2) Закріпити канал/трек (pinning через канал)

Багато Snap мають треки/канали: stable, candidate, beta, edge, або версійні треки на кшталт 1.14/stable. Перемкнувшись на «старший» стабільний трек, ви фактично заморожуєте версію в його межах.

# Перемкнутися на конкретний канал/трек
sudo snap switch --channel=1.14/stable <назва-snap>
# Застосувати оновлення з цього каналу
sudo snap refresh <назва-snap>

3) Тимчасово зупинити автооновлення (hold)

Хочете поставити на паузу автооновлення Linux для конкретного Snap? Використайте утримання:

# Утримати оновлення для одного застосунку
sudo snap refresh --hold <назва-snap>

# Зняти утримання
sudo snap refresh --unhold <назва-snap>

# Глобальна відстрочка оновлень до певного часу
sudo snap set system refresh.hold="$(date -d 'next friday 23:59' --iso=seconds)"

# Перевірити/очистити глобальний hold
snap get system refresh.hold
sudo snap set system refresh.hold=

Це зручно для тестування: ви відкотилися, «заморозили» стан і спокійно перевірили роботу.

How-to: Flatpak — відкат за commit і маска

1) Знайти потрібний commit

Flatpak версії — це конкретні commit-и. Подивіться журнал змін:

# Подивитися історію версій застосунку на Flathub
flatpak remote-info --log flathub <AppID>
# Приклад AppID: org.mozilla.firefox, org.gimp.GIMP

2) Відкотитися до конкретного commit

# Встановити конкретний commit (відкат/даунгрейд)
sudo flatpak update --commit=<COMMIT_SHA> <AppID>

# Перевірити активну версію
flatpak info <AppID>

3) Заблокувати оновлення застосунку (mask)

Щоб зафіксувати версію та уникнути автооновлень:

# Заблокувати (замаскувати) застосунок від оновлень
flatpak mask <AppID>

# Розблокувати, коли будете готові оновитися
flatpak unmask <AppID>

4) Перемкнутися на іншу гілку (branch)

Альтернатива відкату — обрати іншу гілку, наприклад stable чи beta:

flatpak update --app --branch=stable <AppID>

Альтернативні способи і лайфхаки

  • Snap: можна завантажити потрібну ревізію як файл і встановити локально (корисно для офлайн-тестів). Обережно: це для досвідчених користувачів.
# Завантажити snap артефакт (можна вказати канал/ревізію)
snap download <назва-snap> --channel=stable

# Встановити локально завантажений файл (не з магазину)
sudo snap install --dangerous <назва>_<rev>.snap
  • Flatpak: якщо знаєте commit, можна одразу встановити потрібну версію з Flathub через --commit або спочатку інсталювати, потім відкотитися.
  • Тестування: створіть окремий користувацький профіль або використайте контейнер/VM, щоб перевірити нові версії без ризику для робочого середовища.

GUI-спосіб (коли не хочеться в термінал)

У GNOME Software або KDE Discover для Flatpak ви можете:

  • Знайти застосунок → Відкрити сторінку → Обрати гілку/версію (stable/beta), якщо вона доступна.
  • Оновлення можна приховати, відмінивши автооновлення для конкретного застосунку у параметрах магазину (залежить від дистрибутива).

У Snap Store (Ubuntu Software) зазвичай доступний вибір каналу (stable/candidate/beta/edge). Повного «revert» у GUI може не бути, тому для точного відкату краще використати термінал Linux.

FAQ

Чи видаляє відкат мої дані застосунку?

Ні. І в Snap, і у Flatpak користувацькі дані зберігаються окремо. Але завжди робіть бекап важливих профілів, це базові поради Linux.

Скільки триває hold у Snap?

snap refresh --hold <назва> тримає застосунок без оновлень, доки не виконаєте --unhold. Глобальний refresh.hold діє до вказаного часу.

Flatpak: не знаходжу потрібний commit

Використайте flatpak remote-info --log flathub <AppID>. Якщо commit прибрали з репозиторію, повернутися саме до нього не вийде — оберіть найближчий стабільний commit або іншу гілку.

Після відкату застосунок не запускається

Спробуйте flatpak repair (для Flatpak) або перевстановлення через той самий канал (для Snap). Також перевірте сумісність плагінів/додатків.

Чи безпечно сидіти на старих версіях?

Лише короткий час. Старі збірки можуть містити вразливості. Рекомендую заморозити версію тільки на період тестування/вирішення багу, а потім оновитися.

Чи впливає pinning на інші пакети?

Ні, ці дії працюють по застосунку. Виняток — глобальний таймер Snap, який паузить усі автооновлення.

Порада від Kernelka

Створіть міні-процес: перед кожним великим апдейтом робіть «контрольний знімок» — зафіксуйте канал/гілку, збережіть номер ревізії або commit, перевірте роботу після апдейту. Якщо щось зламається — ви знаєте, як швидко відкотитися 😉

Підсумок

  • Snap: використовуйте snap revert для миттєвого відкату, snap switch --channel для стабільної гілки та snap refresh --hold для pinning.
  • Flatpak: знайдіть commit через remote-info --log, відкотіться update --commit і закріпіть версію flatpak mask.
  • GUI допомагає перемикати канали/гілки, але точніший контроль — у терміналі.
  • Бекап даних і короткострокове заморожування — ваші головні «страхувальні пояси» під час оновлення Linux.