Aktualizacje aplikacji w Linux: apt, dnf i flatpak w jednym miejscu

0
101
Rate this post

Nawigacja:

Dlaczego aktualizacje w Linux potrafią być chaotyczne

Rozproszone źródła oprogramowania zamiast jednego „sklepu”

Na typowym desktopowym Linuxie aplikacje nie pochodzą z jednego miejsca. System korzysta zwykle z oficjalnych repozytoriów dystrybucji (zarządzanych przez apt albo dnf), a do tego dochodzą dodatkowe źródła: PPA, repozytoria firm trzecich, Flatpak, czasem Snap czy AppImage. Każde z tych źródeł ma własny cykl wydawniczy, własne zasady bezpieczeństwa i inne narzędzia do aktualizacji. Jeżeli nie ma nad tym spójnej strategii, powstaje klasyczny bałagan.

Repozytoria dystrybucji są zwykle konserwatywne i stabilne, ale nie zawsze oferują najnowsze wersje aplikacji. PPA w świecie Debiana i Ubuntu rozwiązują ten problem, dorzucając świeższe pakiety, lecz zwiększają ryzyko konfliktów zależności. Flatpak i Snap dostarczają aplikacje w kontenerach, niezależne od bibliotek systemowych. W efekcie jedna aplikacja może być zainstalowana jednocześnie w dwóch lub trzech wariantach: jako pakiet z repozytorium, jako Flatpak i jako AppImage. Bez świadomych decyzji o tym, z którego źródła korzystać, łatwo o chaos.

Dodatkowym elementem skomplikowania są sterowniki i komponenty zamknięte (np. NVIDIA, drukarki, kodeki multimedialne). Część z nich wchodzi do oficjalnych repozytoriów, część bywa dostarczana przez producentów lub społeczność w osobnych repozytoriach. Aktualizacje tych elementów bywają bardziej ryzykowne, bo jedna błędna wersja sterownika może unieruchomić środowisko graficzne, podczas gdy aktualizacja tylko aplikacji biurowej zwykle jest stosunkowo bezbolesna.

Wiele narzędzi do aktualizacji – terminal, GUI, automatyczne usługi

Drugie źródło chaosu to mnogość narzędzi. Ten sam system można aktualizować z różnych miejsc:

  • z poziomu terminala: apt, apt-get, dnf, flatpak,
  • za pomocą aplikacji graficznych: GNOME Software, KDE Discover, Mint Update, Pop!_Shop, Synaptic, Muon,
  • przez skrypty i usługi w tle: unattended-upgrades, timery systemd, własne cronjoby.

Problem pojawia się wtedy, gdy te mechanizmy działają równolegle i bez koordynacji. Przykładowo, użytkownik klika „Zainstaluj aktualizacje” w GNOME Software, a w tym samym czasie w tle aktywuje się automatyczny unattended-upgrades, blokując bazę pakietów. Pojawiają się komunikaty o zajętych blokadach (dpkg locked) czy błędach transakcji w dnf. Zamiast poczucia kontroli jest irytacja i wrażenie, że system „robi coś po swojemu”.

Do tego dochodzi różne spojrzenie na aktualizacje: GUI zwykle łączy w jednym widoku pakiety systemowe, aplikacje użytkownika i Flatpaki, lecz nie zawsze pokazuje szczegóły zmian. Terminal daje pełną widoczność i precyzję, ale wymaga pewnej wiedzy i dyscypliny. Bez jasnego ustalenia, z którego narzędzia korzysta się głównie, a które należy wyłączyć lub ograniczyć, łatwo zgubić się w komunikatach i dublujących się powiadomieniach.

Dwie postawy użytkownika i typowe objawy bałaganu

Widać na ogół dwa skrajne podejścia. Pierwsze: „nie chcę o tym myśleć – ma się samo aktualizować i ma działać”. Drugie: „nic nie aktualizuję bez mojej zgody, chcę widzieć każdą zmianę wersji i zależności”. Oba są uzasadnione, ale wymagają innych ustawień systemu. Połączenie ich w jednym profilu użytkownika prowadzi do frustracji – część aktualizacji instaluje się automatycznie, część czeka na ręczne zatwierdzenie, a użytkownik nie jest pewien, co zostanie zmienione przy następnym restarcie.

Najczęstsze objawy chaosu przy aktualizacjach w Linux to:

  • powtarzające się powiadomienia o tych samych aktualizacjach w różnych narzędziach,
  • zduplikowane aplikacje (np. dwie ikony „LibreOffice”, jedna z apt, druga z Flatpaka),
  • różne wersje tej samej aplikacji zależnie od sposobu uruchomienia,
  • brak spójności – część aplikacji aktualizuje się błyskawicznie (Flatpak), a część „stoi” na starych wersjach (repozytoria LTS),
  • nagłe problemy po aktualizacjach kernela lub sterowników, podczas gdy zwykłe programy biurowe działają bez zarzutu.

Określenie własnych priorytetów (stabilność vs nowości, automatyka vs ręczna kontrola) to pierwszy krok do zbudowania sensownego centrum dowodzenia aktualizacjami, w którym apt, dnf i flatpak współistnieją bez konfliktów.

Co dokładnie aktualizujesz? System, biblioteki i aplikacje użytkownika

Trzy warstwy: kernel, biblioteki, aplikacje

Przy pracy z aktualizacjami warto rozdzielić trzy podstawowe warstwy systemu, bo każda niesie inne ryzyko i inne konsekwencje:

  • kernel i komponenty systemowe – jądro, sterowniki, system init (systemd), podstawowe narzędzia użytkowe,
  • biblioteki i środowiska uruchomieniowe – m.in. glibc, biblioteki graficzne (GTK, Qt), biblioteki multimediów, Pythona, Javy,
  • aplikacje użytkownika – przeglądarki, pakiety biurowe, komunikatory, edytory, gry.

Na poziomie kernela i sterowników niewielka zmiana może przełożyć się na stabilność całego systemu. To tutaj aktualizacje bezpieczeństwa są kluczowe, ale jednocześnie ryzyko regresji jest najwyższe. Biblioteki stanowią pomost między systemem a aplikacjami. Aktualizacja popularnej biblioteki może wpłynąć na dziesiątki programów, choć w praktyce dystrybucje dość rygorystycznie testują te pakiety zanim trafią do stabilnych repozytoriów.

Aplikacje użytkownika są z reguły najbardziej bezpieczną warstwą do aktualizacji – awaria komunikatora rzadko unieruchomi cały system. Dlatego wiele środowisk (np. Flatpak, Snap) skupia się właśnie na izolacji i szybkim dostarczaniu aktualnych wersji programów użytkowych, zostawiając jądro i krytyczne biblioteki w gestii menedżera pakietów dystrybucji.

Jak apt i dnf widzą świat w porównaniu do Flatpaka

apt i dnf zarządzają całym systemem. Aktualizując pakiety tymi narzędziami, modyfikuje się kernel, biblioteki, narzędzia systemowe i aplikacje w jednym spójnym zestawie. Zależności są współdzielone, co oznacza efektywne wykorzystanie miejsca na dysku, ale też większą wrażliwość na konflikty. Jeśli jedna aplikacja wymaga nowszej biblioteki, a inna starszej, menedżer pakietów musi znaleźć kompromis lub odmówić instalacji.

Flatpak rozdziela te światy. Aplikacje działają w piaskownicy, korzystają z tzw. runtime’ów (środowisk uruchomieniowych) i nie polegają bezpośrednio na bibliotekach z systemu. Dzięki temu nowa wersja programu graficznego może używać świeżych bibliotek GTK niezależnie od tego, co jest obecnie w repozytoriach dystrybucji. Z drugiej strony wymaga to dodatkowego miejsca na dysku, bo część komponentów jest duplikowana.

W praktyce wygląda to tak: aktualizacja systemu przez apt upgrade lub dnf upgrade nie zmieni wersji aplikacji zainstalowanych jako Flatpaki. Trzeba osobno wykonać flatpak update (lub użyć GUI, które to zintegrowało). Taki rozdział upraszcza stabilność systemu bazowego, ale wymaga od użytkownika świadomości, że aktualizacje są co najmniej dwutorowe.

Wpływ aktualizacji na stabilność i różne modele wydań

Systemy oparte na Debian stable czy Ubuntu LTS stosują model konserwatywny: wersje pakietów zmieniają się rzadko, głównie dostarczane są łatki bezpieczeństwa. Powoduje to mniejszą liczbę niemiłych niespodzianek po aktualizacjach, kosztem dostępu do najnowszych funkcji w aplikacjach. W przeciwieństwie do tego dystrybucje „rolling release” (np. Arch, openSUSE Tumbleweed) aktualizują większość pakietów na bieżąco – bardziej dynamicznie, ale też z większą szansą na sporadyczne regresje.

Fedora i pochodne stosują podejście pośrednie: szybkie, ale nie całkowicie „rolling”. Z jednej strony dnf zapewnia bardzo świadome zarządzanie transakcjami (historia, wycofywanie), z drugiej – wersje pakietów zmieniają się częściej niż w Debianie. W takim środowisku Flatpak świetnie nadaje się do dostarczania aplikacji użytkownika w jeszcze szybszym tempie, pozostawiając system bazowy w rękach dnf.

Strategia aktualizacji może być mieszana: dla krytycznych elementów (kernel, sterowniki, biblioteki systemowe) wybrany profil raczej konserwatywny, dla aplikacji – nowocześniejszy, z wykorzystaniem Flatpaka tam, gdzie to ma sens. Kluczem jest spójność: żeby nie mieszać pięciu różnych źródeł dla tej samej aplikacji tylko po to, by „zawsze mieć najnowsze”.

Dłoń trzyma smartfon z listą aktualizacji aplikacji na ekranie
Źródło: Pexels | Autor: Andrey Matveev

Apt, dnf i flatpak – porównanie podejść do aktualizacji

Filozofia apt: klasyczny menedżer pakietów Debiana i Ubuntu

apt to nakładka na dpkg używana w Debianie, Ubuntu i ich pochodnych. Zarządza pakietami w formacie .deb, bazując na repozytoriach opisanych w plikach /etc/apt/sources.list i katalogu /etc/apt/sources.list.d/. Jego główną zaletą jest stabilność i dojrzałość. W codziennym użyciu sprowadza się do prostych poleceń: apt update (odświeżenie listy pakietów) i apt upgrade (aktualizacja zainstalowanych pakietów.

apt integruje się ściśle z systemem: instaluje biblioteki, dema, usługi systemowe, modyfikuje konfigurację w /etc. Aktualizacje są projektowane jako całościowe zestawy, a dystrybucje na bazie Debiana słyną z konserwatywnego podejścia do zmian. Minusem jest potencjalna trudność w równoczesnej instalacji wielu wersji tego samego oprogramowania oraz podatność na konflikty przy dodawaniu zewnętrznych repozytoriów (PPA).

Filozofia dnf: transakcyjność i rozbudowane rozwiązywanie zależności

dnf (następca yum) to menedżer pakietów dla dystrybucji opartych na RPM: Fedora, RHEL, Rocky Linux, AlmaLinux i kilka innych. W odróżnieniu od apt kładzie mocny nacisk na transakcyjność operacji: każda instalacja czy aktualizacja to transakcja, którą można zapisać w historii i – często – cofnąć. Polecenia dnf history oraz dnf history undo pozwalają w praktyce wycofać niefortunną aktualizację.

Sprawdź też ten artykuł:  Narzędzia do prototypowania aplikacji mobilnych

dnf oferuje bogate mechanizmy zarządzania repozytoriami, modułami i grupami pakietów. Jest projektowany z myślą o środowiskach serwerowych i stacjach roboczych, w których przewidywalność i możliwość audytu zmian są szczególnie istotne. Z tego względu świetnie nadaje się jako podstawa „centrum dowodzenia” aktualizacjami systemu, podczas gdy aplikacje użytkownika mogą być z powodzeniem dostarczane przez Flatpaka.

Filozofia Flatpaka: izolowane aplikacje i niezależność od dystrybucji

Flatpak odwraca perspektywę. Jego celem nie jest zarządzanie całym systemem, ale dostarczanie aplikacji użytkownika w sposób maksymalnie niezależny od dystrybucji. Każda aplikacja działa w piaskownicy, korzysta z dedykowanych runtime’ów i ma ograniczony dostęp do zasobów systemu (pliki, urządzenia, sieć – wszystko można szczegółowo kontrolować przez uprawnienia).

Dzięki temu aplikacja z Flathuba może być używana w Fedorze, Ubuntu, Debianie czy nawet na dystrybucjach mniej popularnych, a deweloper publikuje jedną paczkę. Aktualizacje aplikacji Flatpak przebiegają niezależnie od cyklu wydawniczego dystrybucji – często są znacznie szybsze. W zamian użytkownik akceptuje większe zużycie dysku i potencjalnie gorszą integrację z systemem (np. motywy, portale plików) – choć w ostatnich latach ta integracja znacząco się poprawiła.

Tabela porównawcza: bezpieczeństwo, prostota, zużycie dysku i tempo aktualizacji

Niskie, współdzielone biblioteki

Cechyaptdnfflatpak
Zakres działaniaCały system (kernel, biblioteki, aplikacje)Cały system (kernel, biblioteki, aplikacje)Głównie aplikacje użytkownika
Bezpieczeństwo aktualizacjiWysokie w stable/LTS, mocno testowaneWysokie, transakcyjność i historiaWysokie, izolacja i sandboxing
Prostota dla początkującychŚrednia, zależna od GUI (Synaptic, Mint Update)Średnia, często używany przez bardziej zaawansowanychWysoka przy użyciu sklepów graficznych (Flathub)
Zużycie dyskuNiskie, współdzielone bibliotekiWyższe, osobne runtime’y i sandboxy
Tempo nowych wersji aplikacjiWolne–średnie (zależne od dystrybucji)Średnie–szybkie (szczególnie w Fedorze)Zazwyczaj szybkie, niezależne od dystrybucji
Integracja z systememBardzo dobra, natywne pakietyBardzo dobra, natywne pakietyRóżna, coraz lepsza, ale czasem kompromisy

Widać tu wyraźnie trzy różne akcenty. apt i dnf rozwiązują podobny problem – pełne zarządzanie systemem – ale w nieco innym stylu: Debian/Ubuntu częściej priorytetyzują przewidywalność kosztem świeżości, a Fedora i pokrewne systemy chętniej przyjmują nowe wersje, oferując w zamian lepsze narzędzia cofania zmian. Flatpak gra w innej lidze: izolacja, wersje bliskie upstreamowi, brak ścisłego powiązania z cyklem wydawniczym systemu.

Jeśli komputer służy głównie do pracy biurowej na stabilnym Ubuntu LTS, najrozsądniejsze będzie trzymanie się apt jako głównego źródła oraz kilku wybranych Flatpaków tam, gdzie potrzebne są szybsze aktualizacje (np. komunikatory czy edytory kodu). Na nowej Fedorze często wygodniej oprzeć system na dnf, a większość aplikacji użytkownika brać z Flathuba – wtedy duże zmiany w aplikacjach są odseparowane od bazowego systemu.

Różnica jest też odczuwalna przy diagnozowaniu problemów. Konflikt biblioteki w apt/dnf może unieruchomić kilka programów naraz, ale naprawa zwykle sprowadza się do jednej transakcji w menedżerze pakietów. W świecie Flatpaka awaria konkretnej aplikacji rzadko pociąga inne, za to wymagania dyskowe i liczba „kopii” bibliotek mogą zaskoczyć na mniejszych dyskach SSD. Wybór między tymi podejściami to więc wymiana: centralne zarządzanie kontra elastyczność i izolacja.

Gdzie w praktyce używa się apt, dnf i Flatpaka

Świadomość, jakiego menedżera pakietów używa dana dystrybucja, oszczędza sporo nerwów. Wiele osób trafia na Linuxa przez Ubuntu, Mint czy Fedorę i dopiero po czasie odkrywa, że polecenia z poradnika „z internetu” nie działają, bo system używa innego narzędzia niż autor wpisu.

Rodzina Debiana: apt jako fundament, Flatpak jako dodatek

W świecie Debiana i pochodnych reguła jest prosta: apt to narzędzie pierwszego wyboru. Debian, Ubuntu, Linux Mint, Pop!_OS, Zorin OS – wszystkie korzystają z pakietów .deb i tego samego ekosystemu repozytoriów, choć konfiguracje różnią się domyślnymi źródłami i dodatkowymi PPA.

  • Ubuntu – bazuje na apt, oferuje własne repozytoria, PPA i Snapy; Flatpak jest zwykle opcjonalny.
  • Linux Mint – silna integracja z apt i własnym narzędziem Mint Update; Flatpak jest włączony i promowany do aplikacji użytkownika.
  • Debian stable – konserwatywny zestaw pakietów; Flatpak pomaga „odmłodzić” aplikacje graficzne bez mieszania gałęzi testing/unstable.

Na takim systemie apt zarządza dosłownie wszystkim, co „systemowe”: kernelem, sterownikami, bibliotekami, usługami w tle. Flatpak pojawia się dopiero na poziomie konkretnych programów: edytorów, komunikatorów, IDE. Jeśli coś jest powiązane z uruchamianiem systemu lub logowaniem użytkownika – lepiej, by nadal pochodziło z repozytorium apt.

Rodzina Red Hata: dnf jako „szkielet” systemu i wygodny partner Flatpaka

W dystrybucjach z RPM główny podział przebiega wokół Fedorowej rodziny i systemów klasy enterprise (RHEL, Rocky, Alma). W obu przypadkach dnf jest standardowym narzędziem do zarządzania pakietami, choć w Red Hat Enterprise Linux i klonach istnieją dodatkowe warstwy (moduły, AppStream).

  • Fedora Workstation – dnf kontroluje system bazowy, a Flatpak (i Flathub po włączeniu) jest głównym źródłem aplikacji graficznych.
  • RHEL, Rocky, Alma – dnf zapewnia stabilny zestaw pakietów serwerowych; Flatpak pojawia się na stacjach roboczych, gdzie liczy się świeżość aplikacji.

Układ jest tu zwykle bardziej świadomie zaprojektowany niż w typowej instalacji Ubuntu: instalatory Fedory czy Silverblue od razu zakładają, że dnf i Flatpak będą współistnieć. Na serwerach Flatpak jest raczej ciekawostką (lub sposobem na konkretną aplikację), ale na desktopie często staje się domyślną drogą do oprogramowania biurowego, multimedialnego, deweloperskiego.

Mieszanka na desktopie: Flatpak na dystrybucjach niezależnych

Na systemach takich jak Arch Linux, Manjaro czy EndeavourOS dominuje pacman (i AUR), ale scenariusz jest podobny: menedżer pakietów odpowiada za system, a Flatpak dodaje aplikacje użytkownika. Różnica polega na tym, że rolling release zazwyczaj oferuje nowe wersje oprogramowania i biblioteki szybciej niż Debian czy RHEL, więc po Flatpaka sięga się nie z powodu „starzejących się” pakietów, ale raczej dla izolacji, prostoty instalacji lub wielodystrybucyjnego pakietu.

Podstawy obsługi apt, dnf i Flatpaka w terminalu

Nawet jeśli główne narzędzie do aktualizacji działa w tle albo ma wygodne GUI, znajomość kilku poleceń terminalowych pozwala lepiej zrozumieć, co się dzieje z systemem. Różnice między apt, dnf i Flatpakiem są tu dobrze widoczne.

apt: aktualizacja listy pakietów, systemu i pojedynczych programów

Przy apt ważne jest rozróżnienie między odświeżeniem listy pakietów, aktualizacją zainstalowanego oprogramowania oraz zmianą wersji całego wydania systemu.

  • Odświeżenie listy pakietów:
    sudo apt update

    System pobiera aktualne informacje o dostępnych wersjach pakietów z repozytoriów. Nic nie jest jeszcze aktualizowane.

  • Aktualizacja zainstalowanych pakietów (bez zmian zależności):
    sudo apt upgrade

    Pakiety są aktualizowane do nowszych wersji, ale apt unika instalowania lub usuwania dodatkowych zależności. Przy bardziej złożonych aktualizacjach może odmówić działania.

  • Aktualizacja „pełna” (z uwzględnieniem nowych/usuwanych zależności):
    sudo apt full-upgrade

    To polecenie jest najbliższe dnf upgrade. Pozwala na zmiany w zestawie pakietów, więc bywa używane przy większych aktualizacjach lub przejściach na nowe wersje jądra.

Do instalacji pojedynczych aplikacji służy proste:

sudo apt install nazwa-pakietu

Z kolei usuwanie można przeprowadzić na dwa sposoby:

  • sudo apt remove nazwa-pakietu – usuwa pliki programu, zostawia konfigurację w /etc i ~/.config,
  • sudo apt purge nazwa-pakietu – usuwa również konfigurację systemową danego pakietu.

Na laptopie roboczym rozsądny schemat to: co kilka dni sudo apt update && sudo apt upgrade, a full-upgrade tylko przy większych skokach (np. nowa wersja HWE kernel na Ubuntu) lub świadomie, gdy zależy na pełnej synchronizacji z repozytoriami.

dnf: jedna komenda do wszystkiego i historia transakcji

W przypadku dnf rozróżnienie jest prostsze. Standardowy zestaw poleceń do aktualizacji wygląda następująco:

  • Odświeżenie metadanych i aktualizacja:
    sudo dnf upgrade

    W nowszych wydaniach Fedor i RHEL zwykle wystarcza samo dnf upgrade; dnf update jest aliasem, ale w dokumentacji preferuje się „upgrade”.

  • Instalacja aplikacji:
    sudo dnf install nazwa-pakietu
  • Usuwanie aplikacji:
    sudo dnf remove nazwa-pakietu

Kluczową przewagą dnf jest możliwość cofania zmian:

sudo dnf history
sudo dnf