Коли мова про надійне встановлення та оновлення програм у Linux, важливо поєднати зручність і контроль. У цій інструкції розберемо, як безпечно працювати з apt, Snap і Flatpak: додавати репозиторії, налаштовувати пріоритети пакетів (pinning), а також автоматизувати оновлення за допомогою Unattended-Upgrades та systemd timers. Усе — простою мовою, у терміналі Linux і з GUI-варіантами.

Що обрати: apt, Snap чи Flatpak?

Коротко про різницю:

  • apt — класичні пакети з репозиторіїв дистрибутива. Стабільно, інтегровано з системою. Ідеально для системних компонентів.
  • Snap — контейнери з каналами (stable/candidate/beta/edge), автооновленням і ізоляцією. Добре для десктоп-додатків, що часто оновлюються.
  • Flatpak — крос-дистрибутивні пакети з Flathub, ізоляція через портали. Зручно для сучасних GUI-програм.

Мій підхід: системне залишати в apt, а десктопні програми комфортно ставити через snap та flatpak — так ви отримуєте баланс стабільності й свіжих версій.

Підготовка: репозиторії та ключі

apt: додавання репозиторіїв і ключів безпечно

Замість застарілого apt-key використовуйте схему з keyring і опцію signed-by:

# Приклад для Docker (модерний спосіб додавання ключа та репозиторію)
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo $VERSION_CODENAME) stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update

Для PPA в Ubuntu можна й надалі користуватись:

sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt update

Snap: канали та класичне оточення

Snap зазвичай установлений у Ubuntu. Перевірте стан:

snap version

Для програм, яким потрібен доступ до системи (IDE тощо), використовуйте прапорець --classic і відповідний канал:

sudo snap install code --classic --channel=stable

Flatpak: підключення Flathub

Встановіть flatpak і додайте Flathub (системно або для поточного користувача):

sudo apt install -y flatpak
flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo

Надійне встановлення та керування

apt команди для контролю

  • Перевірити джерела пакета та пріоритети:
apt-cache policy
apt-cache policy firefox
  • Встановити/видалити/утримати (hold) пакети:
sudo apt install firefox
sudo apt remove firefox
sudo apt-mark hold firefox     # заборонити автооновлення конкретного пакета
sudo apt-mark unhold firefox
  • Налаштувати pinning (пріоритети) для джерела, наприклад знизити пріоритет PPA:
# Створіть файл пріоритетів
sudo nano /etc/apt/preferences.d/99custom.pref
# Вміст (приклад):
Package: *
Pin: origin "ppa.launchpad.net"
Pin-Priority: 400  # нижче за стандартні 500, не оновлюватиме з PPA автоматично

Тепер пакети з PPA не будуть переважати офіційні репозиторії, доки ви явно не вкажете джерело.

Snap: канали, оновлення та hold

  • Подивитися канали й версії:
snap info code
  • Перемкнутися на інший канал:
sudo snap refresh code --channel=candidate
  • Тимчасово заборонити оновлення певного snap-пакета (не зловживайте цим):
sudo snap refresh --hold code
sudo snap refresh --unhold code

Flatpak: гілки (branches) і маскування оновлень

  • Встановити конкретну гілку (stable/beta):
flatpak install flathub org.gimp.GIMP//stable
flatpak install flathub org.gimp.GIMP//beta
  • Маскувати додаток від оновлень:
flatpak mask org.mozilla.firefox
flatpak mask --list
flatpak mask --remove org.mozilla.firefox

Автоматичні оновлення та розклад

apt: Unattended-Upgrades і Periodic

sudo apt install -y unattended-upgrades
sudo dpkg-reconfigure unattended-upgrades  # ввімкнути автооновлення безпеки

Перевірте налаштування у файлах:

sudo nano /etc/apt/apt.conf.d/50unattended-upgrades
sudo nano /etc/apt/apt.conf.d/20auto-upgrades
# Приклад 20auto-upgrades
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";

На багатьох системах існують готові systemd таймери apt-daily, але для серверів інколи краще керувати часом через cron та systemd timers самостійно.

Snap: план оновлень

Налаштуйте вікно оновлень, наприклад понеділок/середа/п’ятниця з 21:00 до 23:00:

sudo snap set system refresh.timer=mon,wed,fri,21:00-23:00

Flatpak: системний таймер для регулярних апдейтів

Створимо користувацький systemd сервіс і таймер (оновлення щодня о 20:15):

mkdir -p ~/.config/systemd/user
nano ~/.config/systemd/user/flatpak-update.service
[Unit]
Description=Update Flatpak apps

[Service]
Type=oneshot
ExecStart=/usr/bin/flatpak update -y
nano ~/.config/systemd/user/flatpak-update.timer
[Unit]
Description=Daily Flatpak update

[Timer]
OnCalendar=*-*-* 20:15:00
Persistent=true

[Install]
WantedBy=timers.target
systemctl --user daemon-reload
systemctl --user enable --now flatpak-update.timer
systemctl --user list-timers --all | grep flatpak

Альтернативні способи

  • aptitude — зручний резолвер залежностей у терміналі. Спробуйте sudo aptitude install <pkg>.
  • nala — фронтенд до apt із паралельними завантаженнями та читабельними логами.
  • Deb822-джерела — сучасний формат .sources файлів у /etc/apt/sources.list.d/ з Signed-By і секціями.

GUI-спосіб

  • GNOME Software: керує apt і flatpak (пакет gnome-software-plugin-flatpak). Увімкніть Flathub у Налаштуваннях → ПЗʼєднані сховища.
  • KDE Discover: підтримує Flatpak і Snap; у Налаштуваннях додайте Flathub і оберіть пріоритет джерел.
  • Snap Store (Ubuntu): керує snap-пакетами, перемикає канали та показує дозволи застосунків.

FAQ

Отримую помилку NO_PUBKEY або застаріле apt-key. Що робити?

Додайте ключ у /etc/apt/keyrings та використайте signed-by у джерелі. Приклад дивіться вище (Docker). Потім виконайте sudo apt update.

apt застряг на «dpkg was interrupted»

sudo dpkg --configure -a
sudo apt -f install

Як подивитися, з якого саме репозиторію прийде оновлення?

apt-cache policy <пакет>

Поле 500/700/400 відображає пріоритет. Регулюйте його в /etc/apt/preferences.d/.

Snap не оновлюється, бо я встановив hold. Як повернути?

sudo snap refresh --unhold <імʼя>

Flatpak каже «No remote 'flathub'»

flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo

Як налаштувати проксі для Snap?

sudo snap set system proxy.http=http://proxy:3128
sudo snap set system proxy.https=http://proxy:3128

Чи можна відкотити Flatpak до попередньої версії?

Так, через flatpak update --commit=<commit-id> <app-id>. Список комітів дивіться в flatpak info --log <app-id>.

Порада від Kernelka

Тримайте системні бібліотеки в apt, а ризикові новинки — у Flatpak/Snap. Так ви мінімізуєте конфлікти залежностей і збережете стабільність робочого середовища 🚀

Підсумок

  • Додавайте репозиторії apt через keyring і signed-by, не використовуйте apt-key.
  • Керуйте пріоритетами через /etc/apt/preferences.d/ і apt-cache policy.
  • Для Snap використовуйте канали та розклад refresh.timer; для Flatpak — гілки та mask.
  • Увімкніть Unattended-Upgrades та налаштуйте оновлення через cron та systemd timers.
  • GUI-менеджери (GNOME Software, Discover) спрощують роботу з apt, snap та flatpak.