Zarządzanie pakietami w Linuxie: apt, dnf, pacman w prostych przykładach

0
30
Rate this post

Nawigacja:

Podstawy zarządzania pakietami w Linuksie

Czym jest pakiet i menedżer pakietów

W świecie Linuksa większość oprogramowania dostarczana jest w postaci pakietów. Pakiet to archiwum zawierające pliki programu, biblioteki, skrypty instalacyjne, metadane (nazwę, wersję, opis, informacje o zależnościach) oraz sygnatury kryptograficzne. Instalacja programu polega w praktyce na zainstalowaniu odpowiedniego pakietu z repozytorium dystrybucji.

Tym procesem zarządza menedżer pakietów. Jego zadania to między innymi:

  • pobieranie pakietów z repozytoriów (serwerów z oprogramowaniem),
  • instalacja, aktualizacja i usuwanie pakietów,
  • rozwiązywanie zależności (doinstalowanie wymaganych bibliotek),
  • weryfikacja podpisów i integralności,
  • utrzymywanie lokalnej bazy zainstalowanych pakietów.

Ręczna instalacja programów z archiwów .tar.gz czy kompilacja ze źródeł nadal jest możliwa, ale na co dzień w dystrybucjach opartych na Debianie, Fedorze czy Archu praktycznie wszystko realizuje się za pomocą menedżerów pakietów: apt, dnf oraz pacman.

Przegląd: apt, dnf i pacman

Trzy popularne rodziny dystrybucji Linuksa używają różnych narzędzi do zarządzania pakietami:

  • apt – używany w Debianie, Ubuntu i dziesiątkach pochodnych (Linux Mint, Pop!_OS i inne).
  • dnf – domyślne narzędzie w Fedorze, RHEL, CentOS Stream, Rocky Linux, AlmaLinux.
  • pacman – menedżer pakietów w Arch Linux i dystrybucjach pochodnych (Manjaro, EndeavourOS).

Każdy z nich ma własną składnię, ale koncepcje są te same: aktualizowanie listy pakietów, instalowanie, aktualizacja systemu, usuwanie, szukanie pakietów, sprawdzanie szczegółów i czyszczenie niepotrzebnych plików. Poznanie kilku podstawowych poleceń pozwala swobodnie pracować na różnych dystrybucjach.

Rola uprawnień administratora przy instalacji

Instalacja i usuwanie pakietów modyfikuje pliki systemowe, dlatego wymaga uprawnień administratora (root). W systemach desktopowych używa się zwykle sudo:

  • sudo apt install firefox
  • sudo dnf install firefox
  • sudo pacman -S firefox

Jeżeli komenda menedżera pakietów zgłasza błąd typu permission denied lub informuje, że trzeba być rootem, zwykle wystarczy poprzedzić to polecenie sudo. Na serwerach często pracuje się bezpośrednio jako root, ale z punktu widzenia zarządzania pakietami zasada jest ta sama: operacje systemowe potrzebują wyższych uprawnień.

apt w praktyce: Debian, Ubuntu i pochodne

Instalacja i wyszukiwanie pakietów apt

Menedżer apt jest front-endem do systemu dpkg używanego w Debianie i Ubuntu. Składnia poleceń jest czytelna, a najczęstsze operacje można spamiętać w kilka minut. Przykłady bazują na Ubuntu, ale działają identycznie na Debianie i większości pochodnych.

Podstawowe działania:

  • Wyszukiwanie pakietu:
    apt search nazwa
  • Instalowanie pakietu:
    sudo apt install nazwa_pakietu
  • Usuwanie pakietu (bez kasowania konfiguracji w /etc):
    sudo apt remove nazwa_pakietu
  • Usuwanie pakietu z konfiguracją:
    sudo apt purge nazwa_pakietu

Przykładowo, aby zainstalować edytor tekstu vim:

sudo apt install vim

Aby znaleźć pakiet związany z klientem SSH:

apt search ssh

Wynik pokaże wiele pozycji; nazwa, krótki opis i informacja, czy pakiet jest już zainstalowany.

Aktualizacja systemu i list pakietów apt

Przed instalacją nowych programów sensowne jest odświeżenie listy dostępnych pakietów, które są przechowywane lokalnie. Służy do tego:

sudo apt update

Polecenie łączy się z serwerami repozytoriów (zdefiniowanymi w plikach /etc/apt/sources.list i /etc/apt/sources.list.d/) i pobiera aktualne informacje o wersjach pakietów. Bez tego można próbować instalować programy, ale system nie „wie” o najnowszych wersjach.

Zmienione pakiety można następnie zaktualizować:

sudo apt upgrade

To polecenie aktualizuje już zainstalowane programy do nowszych wersji, jeżeli nie wymaga to usuwania innych pakietów. Jeżeli aktualizacja wymaga dodania lub usunięcia pakietów (np. przy większych aktualizacjach), używa się:

sudo apt full-upgrade

Na serwerach często stosuje się prosty schemat:

sudo apt update
sudo apt full-upgrade

Po większych aktualizacjach jądra lub usług system sugeruje restart – warto go wykonać, gdy dotyczy to krytycznych komponentów.

Sprawdzanie informacji o pakietach z apt

Aby świadomie zarządzać pakietami, należy umieć szybko sprawdzić, co jest zainstalowane i co dokładnie zawiera dany pakiet. Podstawowe komendy to:

  • Informacje o pakiecie:
    apt show nazwa_pakietu
  • Lista plików zainstalowanych przez pakiet (wymaga zainstalowanego dpkg – jest domyślny):
    dpkg -L nazwa_pakietu
  • Sprawdzenie, do jakiego pakietu należy plik:
    dpkg -S /sciezka/do/pliku

Przykład: chcesz sprawdzić, co dokładnie dostarcza pakiet curl:

apt show curl
dpkg -L curl

Z pierwszego polecenia uzyskasz opis, zależności, rozmiar, repozytorium, wersję, a nawet licencję. Drugie pokaże pełną listę plików zainstalowanych przez pakiet, m.in. binaria w /usr/bin, dokumentację i pliki man.

Sprzątanie po apt – automatyczne zależności i cache

Instalacja programów przez lata zostawia ślady w postaci:

  • nieużywanych już pakietów zainstalowanych jako zależności,
  • pobranych plików .deb w katalogu cache.

Do usuwania pakietów, które były zainstalowane automatycznie jako zależności i nie są już potrzebne:

sudo apt autoremove

To bezpieczne polecenie, ale dobrze jest przejrzeć listę proponowanych do usunięcia pakietów przed potwierdzeniem.

Do czyszczenia pamięci podręcznej pakietów służy:

  • Usunięcie wszystkich pobranych plików .deb:
    sudo apt clean
  • Usunięcie tylko nieaktualnych plików .deb:
    sudo apt autoclean

Na serwerach z małą ilością miejsca regularne używanie tych poleceń bywa konieczne, zwłaszcza po większych aktualizacjach i długotrwałym użytkowaniu systemu.

dnf w praktyce: Fedora, RHEL i pochodne

Podstawowe polecenia dnf – instalacja, usuwanie, szukanie

dnf to następca yum, używany w Fedorze i systemach z rodziny RHEL. Składnia jest spójna i zbliżona do apt, choć niektóre opcje działają nieco inaczej.

Najważniejsze polecenia:

  • Wyszukiwanie pakietu:
    dnf search nazwa
  • Instalowanie pakietu:
    sudo dnf install nazwa_pakietu
  • Usuwanie pakietu:
    sudo dnf remove nazwa_pakietu

Przykład: instalacja edytora nano:

sudo dnf install nano

Jeśli chcesz skorzystać z historii operacji (np. przywrócić system po niefortunnej aktualizacji), dnf zapewnia mechanizm historii, o którym będzie mowa niżej.

Sprawdź też ten artykuł:  Neuralink OS? Co przyniesie przyszłość systemów operacyjnych

Aktualizacje systemu i repozytoria dnf

Aktualizacja metadanych i systemu w dnf jest zintegrowana. Typowe polecenie aktualizujące pakiety:

sudo dnf upgrade

W wielu systemach dnf update jest aliasem do dnf upgrade, ale warto przyzwyczaić się do formy upgrade ze względu na dokumentację.

Informacje o repozytoriach można uzyskać poleceniem:

dnf repolist
dnf repolist all

Dzięki temu szybko sprawdzisz, które źródła oprogramowania są aktywne (np. fedora, updates, rpmfusion-free, epel). Konfiguracja repozytoriów znajduje się w katalogu /etc/yum.repos.d/, gdzie każdy plik .repo opisuje jedno lub kilka repozytoriów.

Informacje o pakietach i grupach pakietów dnf

Podobnie jak w apt, w dnf można wygodnie sprawdzać szczegółowe informacje o pakietach:

  • Opis pakietu, zależności, repozytorium:
    dnf info nazwa_pakietu
  • Lista plików z pakietu (pakiet musi być zainstalowany):
    rpm -ql nazwa_pakietu
  • Sprawdzenie, który pakiet dostarcza dany plik:
    rpm -qf /sciezka/do/pliku

dnf wprowadza też wygodne zarządzanie grupami pakietów, co jest bardzo praktyczne przy konfiguracji środowisk graficznych czy serwerów:

  • Wyświetlenie grup pakietów:
    dnf group list
  • Instalacja grupy (np. środowisko graficzne):
    sudo dnf group install "Fedora Workstation"
  • Usunięcie grupy:
    sudo dnf group remove "KDE Plasma Workspaces"

Grupy pakietów pozwalają zainstalować całe zestawy programów jedną komendą, co przyspiesza konfigurację nowych maszyn.

Historia dnf i cofanie zmian

Jedną z praktycznych funkcji dnf jest historia transakcji. Każda instalacja, aktualizacja czy usunięcie pakietu zapisuje się jako transakcja. Umożliwia to m.in. przywrócenie stanu sprzed dużej aktualizacji.

Podstawowe polecenia:

  • Wyświetlenie historii:
    dnf history
  • Szczegóły konkretnej transakcji:
    dnf history info ID
  • Cofnięcie konkretnej transakcji:
    sudo dnf history undo ID

Numer ID pochodzi z listy wyświetlonej przez dnf history. Takie podejście bywa wybawieniem, gdy aktualizacja zainstaluje wadliwą wersję pakietu lub wymusi niechciane zmiany zależności.

Czyszczenie cache i zależności w dnf

W dnf mechanizm czyszczenia jest podobny do apt, ale składnia inna. Aby usunąć pakiety zainstalowane jako zależności, które nie są już potrzebne:

sudo dnf autoremove

Natomiast do usunięcia z dysku pobranych pakietów i metadanych służy polecenie dnf clean:

  • Wyczyszczenie metadanych repozytoriów:
    sudo dnf clean metadata
  • Usunięcie pobranych pakietów:
    sudo dnf clean packages
  • Pełne czyszczenie cache:
    sudo dnf clean all
Kolorowy kod programistyczny na ekranie komputera
Źródło: Pexels | Autor: Markus Spiske

pacman w praktyce: Arch Linux i pochodne

Podstawy pacman – instalacja, usuwanie, aktualizacja

W Arch Linux i dystrybucjach pochodnych (m.in. Manjaro, EndeavourOS) centralnym narzędziem jest pacman. Składnia jest inna niż w apt czy dnf, ale logika podobna: instalacja, usuwanie, aktualizacja i przeglądanie pakietów. Opcje zwykle łączy się w krótkie kombinacje.

Najczęstsze komendy:

  • Aktualizacja listy pakietów i całego systemu:
    sudo pacman -Syu
  • Instalacja pakietu:
    sudo pacman -S nazwa_pakietu
  • Usunięcie pakietu:
    sudo pacman -R nazwa_pakietu
  • Usunięcie pakietu razem z nieużywanymi zależnościami:
    sudo pacman -Rs nazwa_pakietu

Przykład: instalacja menedżera htop:

sudo pacman -S htop

Przy pierwszych aktualizacjach w Archu zwykle używa się zawsze pełnej kombinacji -Syu, aby zsynchronizować listę pakietów (-Sy) i od razu zaktualizować system (-u). Aktualizacja „po kawałku” bywa w Archu problematyczna przy większych zmianach w repozytoriach.

Wyszukiwanie i przeglądanie pakietów w pacman

Pacman ma własny system wyszukiwania i wyświetlania statusu pakietów. Zamiast kilku osobnych narzędzi, używa się odpowiednich przełączników.

  • Wyszukiwanie pakietu w repozytoriach:
    pacman -Ss nazwa
  • Wyszukiwanie pakietu wśród zainstalowanych:
    pacman -Qs nazwa
  • Szczegółowe informacje o pakiecie z repozytoriów:
    pacman -Si nazwa_pakietu
  • Szczegóły o zainstalowanym pakiecie:
    pacman -Qi nazwa_pakietu

Przykładowo, aby znaleźć klienta SSH:

pacman -Ss ssh

W wynikach widać, z jakiego repozytorium pochodzi pakiet, jego wersję, krótki opis oraz informację, czy jest już zainstalowany. Do szybkiej kontroli, czy coś jest na systemie, przydaje się:

pacman -Qs curl

Pliki w pakiecie i powiązania w pacman

Przy debugowaniu i porządowaniu przydają się komendy związane z plikami i zależnościami. Pacman zapewnia je bezpośrednio:

  • Lista plików zainstalowanych przez pakiet:
    pacman -Ql nazwa_pakietu
  • Sprawdzenie, który pakiet dostarcza plik:
    pacman -Qo /sciezka/do/pliku
  • Wyświetlenie zależności pakietu:
    pacman -Qi nazwa_pakietu

Dla szybkiego namierzenia, skąd wziął się dany binarny plik:

pacman -Qo /usr/bin/rsync

Takie sprawdzenie jest użyteczne, gdy trzeba zdecydować, który pakiet usunąć, aby pozbyć się konkretnego narzędzia lub biblioteki.

Czyszczenie cache i osierocone zależności w pacman

Pacman przechowuje w katalogu /var/cache/pacman/pkg/ pobrane pliki pakietów. Z czasem katalog może urosnąć do kilku gigabajtów, szczególnie na systemach aktualizowanych bardzo często.

Sprzątanie realizuje się poleceniem paccache (dostarczanym przez pakiet pacman-contrib):

  • Pozostawienie trzech ostatnich wersji każdego pakietu:
    sudo paccache -r
  • Pozostawienie tylko jednej ostatniej wersji:
    sudo paccache -rk 1
  • Usunięcie cache pakietów niezainstalowanych:
    sudo paccache -ruk0

Do usuwania nieużywanych zależności (tzw. osieroconych pakietów) służy kombinacja:

sudo pacman -Rns $(pacman -Qdtq)

Polecenie pacman -Qdtq wypisuje listę pakietów zainstalowanych jako zależności, które nie są już potrzebne. Połączenie z pacman -Rns usuwa je wraz z powiązanymi plikami konfiguracyjnymi.

Repozytoria i mirrory w pacman

Lista repozytoriów w Archu przechowywana jest głównie w pliku /etc/pacman.conf, natomiast adresy serwerów lustrzanych – w /etc/pacman.d/mirrorlist. W pochodnych, jak Manjaro, dochodzą dodatkowe pliki i narzędzia (np. pacman-mirrors).

  • Lista włączonych repozytoriów:
    grep -E "^[.*]" /etc/pacman.conf
  • Synchronizacja bazy z repozytoriami:
    sudo pacman -Sy

Przy zmianie mirrorów (np. gdy domyślny serwer działa wolno) edytuje się /etc/pacman.d/mirrorlist, przesuwając preferowane serwery na górę listy. Na Archu ułatwia to skrypt reflector, który potrafi wybrać najszybsze mirrory.

AUR – rozszerzone źródło pakietów dla Arch Linux

Jedną z najmocniejszych stron ekosystemu Arch jest AUR (Arch User Repository) – repozytorium społecznościowe, w którym znajdują się skrypty budujące pakiety (PKGBUILD) dla tysięcy programów spoza oficjalnych repozytoriów. Sam pacman nie obsługuje AUR, dlatego korzysta się z tzw. AUR helperów.

Popularne narzędzia:

  • yay
  • paru
  • trizen

Ich składnia zwykle naśladuje pacmana, a dodatkowo obsługują pakiety z AUR:

  • Wyszukiwanie w repozytoriach i AUR:
    yay -Ss nazwa
  • Instalacja pakietu:
    yay -S nazwa_pakietu
  • Aktualizacja systemu i pakietów z AUR:
    yay -Syu

Taki helper pobiera PKGBUILD, buduje pakiet zgodny z pacmanem i instaluje go wraz z zależnościami. Trzeba jednak czytać PKGBUILD dla mniej znanych pakietów – AUR jest otwarte, więc zdarzają się błędy lub nieaktualne skrypty.

Porównanie apt, dnf i pacman w codziennej pracy

Różnice w składni i filozofii

Te trzy menedżery rozwiązują podobne problemy, ale każdy ma własny styl:

  • apt – zorientowany na wygodę użytkownika, rozdziela aktualizację listy pakietów od aktualizacji systemu (apt update, apt upgrade), ma sporo dodatkowych narzędzi (dpkg, aptitude).
  • dnf – mocno zintegrowany z RPM, oferuje historię transakcji i rozbudowane zarządzanie grupami pakietów; domyślnie używa rozwiązywania zależności z priorytetem spójności systemu.
  • pacman – narzędzie „niskopoziomowe”, szybkie i proste w konstrukcji; stawia na minimalizm i przejrzyste flagi (-S – instalacja, -R – usuwanie, -Q – zapytania, -U – instalacja lokalnego pakietu).

Na serwerach Debiana/Ubuntu często wykonuje się regularne:

sudo apt update && sudo apt full-upgrade

Na Fedorze/RHEL:

sudo dnf upgrade

Na Archu:

sudo pacman -Syu

Obsługa plików lokalnych i downgrade pakietów

Każdy menedżer pozwala zainstalować pakiet z pliku oraz – przynajmniej w podstawowym zakresie – wrócić do starszej wersji.

  • apt / dpkg – instalacja pakietu .deb:
    sudo dpkg -i pakiet.deb
    sudo apt -f install

    Druga komenda doinstaluje brakujące zależności. Do downgrade’u często używa się kombinacji z podaniem wersji:

    sudo apt install nazwa_pakietu=wersja
  • dnf – instalacja pakietu .rpm:
    sudo dnf install ./pakiet.rpm

    W przypadku starszej wersji pakietu, jeśli jest dostępna w repozytoriach, można użyć:

    sudo dnf downgrade nazwa_pakietu
  • pacman – instalacja lokalnego pakietu .pkg.tar.zst:
    sudo pacman -U pakiet.pkg.tar.zst

    Ta sama komenda służy do downgrade’u, o ile ma się lokalny plik ze starszą wersją (np. z cache).

Sprawdź też ten artykuł:  Systemy operacyjne dla komputerów kwantowych

Rozwiązywanie konfliktów i problemów z zależnościami

Podczas aktualizacji lub instalacji nowe zależności mogą wejść w konflikt ze starymi wersjami pakietów. Każde narzędzie sygnalizuje to inaczej, ale schemat postępowania jest podobny.

  • apt – typowy scenariusz:
    • aktualizacja się nie powiodła, komunikat o „zatrzymanych” pakietach,
    • naprawa:
      sudo apt --fix-broken install
    • jeśli to nie pomoże, czasem trzeba usunąć problematyczne pakiety:
      sudo apt remove nazwa_pakietu
  • dnf – często wystarczy przejrzeć proponowane zmiany i zdecydować, czy zgodzić się na usunięcie konfliktujących pakietów. W poważniejszych przypadkach pomaga historia:
    dnf history
    sudo dnf history undo ID
  • pacman – przy braku zależności lub konflikcie zwykle widać dokładny komunikat. Czasem zachodzi potrzeba wymuszenia instalacji (opcja --overwrite), ale lepiej najpierw sprawdzić newsy na stronie Archa lub wiki – często przy dużych aktualizacjach są tam instrukcje krok po kroku.

Na maszynach produkcyjnych sensowne jest testowanie większych aktualizacji najpierw na serwerze testowym lub w maszynie wirtualnej, niezależnie od używanego menedżera pakietów.

Praktyczne schematy utrzymania systemu

W codziennej administracji przydaje się kilka prostych „rytuałów”. Przykładowo, na desktopie z Ubuntu:

sudo apt update
sudo apt full-upgrade
sudo apt autoremove
sudo apt autoclean

Na Fedorze:

sudo dnf upgrade
sudo dnf autoremove
sudo dnf clean packages

Na Archu:

sudo pacman -Syu
sudo pacman -Qdtq   # podgląd osieroconych pakietów
# jeśli lista wygląda sensownie:
sudo pacman -Rns $(pacman -Qdtq)

Na serwerach o ograniczonym czasie przestoju sensowne jest też planowanie aktualizacji usług i jądra poza godzinami szczytu oraz uważne śledzenie list mailingowych / kanałów ogłoszeń dystrybucji.

Kiedy apt, kiedy dnf, kiedy pacman – wybór dystrybucji a styl pracy

Różne dystrybucje, różne cykle wydawnicze

Wybór menedżera pakietów najczęściej wynika z wyboru dystrybucji. W praktyce sprowadza się to do różnic w cyklu wydawniczym:

  • Debian/Ubuntu (apt) – stabilne wydania publikowane co kilka lat (Debian Stable) lub co kilka miesięcy (Ubuntu LTS/pośrednie). Dobre do serwerów, gdzie liczy się powtarzalność i konserwatywne wersje.
  • Fedora/RHEL (dnf) – Fedora ma dość szybki cykl wydawniczy i nowoczesne wersje pakietów, RHEL i klony (AlmaLinux, Rocky Linux) stawiają na długoletnie wsparcie. Wspólny ekosystem RPM ułatwia migracje.
  • Scenariusze użycia a wygoda pracy z menedżerami pakietów

    Dobór narzędzia do zarządzania pakietami w praktyce często wynika z tego, co robimy na danej maszynie: serwer, stacja robocza programisty, domowy laptop czy komputer testowy.

    • Serwer produkcyjny – dominują dystrybucje z apt lub dnf (Debian, Ubuntu, RHEL, AlmaLinux, Rocky Linux). Kluczowa jest przewidywalność aktualizacji i dobre narzędzia do automatyzacji (np. unattended-upgrades w Debianie/Ubuntu, dnf-automatic w RHEL/Fedora).
    • Stacja robocza programisty – często wybierane są dystrybucje rolling release (Arch, Manjaro z pacmanem) albo szybkie, lecz „pudełkowe” (Fedora, Ubuntu). Tu liczy się przede wszystkim dostęp do nowych wersji kompilatorów, bibliotek i IDE.
    • Desktop użytkownika biurowego – zwykle Ubuntu LTS / Linux Mint (apt) lub dystrybucje z długim wsparciem RPM. Aktualizacje są rzadsze i kontrolowane, ważna jest stabilność a nie najnowsze wydanie Firefoksa tego samego dnia.
    • Maszyny testowe / labowe – idealne pole do nauki pacmana i Archa, ewentualnie Fedory z dnf, gdzie sprawnie testuje się nowinki.

    Na jednym serwerze, który obsługuje krytyczną aplikację, administrator może stosować bardzo zachowawczy schemat – aktualizacje raz w miesiącu po testach na klonie maszyny. Ten sam administrator na laptopie programistycznym z Archem wykonuje pacman -Syu co kilka dni, bo zależy mu na świeżych narzędziach.

    Pakiety binarne kontra kompilacja ze źródeł

    apt, dnf i pacman operują głównie na pakietach binarnych – ktoś wcześniej skompilował program, spakował i umieścił w repozytorium. W tle jednak funkcjonują narzędzia do budowania pakietów, które są nieodłączną częścią ekosystemu.

    • Debian/Ubuntu – standardem są źródłowe pakiety .dsc i pliki .orig.tar.*. Do pracy używa się dpkg-buildpackage, debuild i pbuilder lub sbuild. Źródła można pobrać komendą:
      apt source nazwa_pakietu
    • RPM (Fedora, RHEL) – wykorzystują pliki .spec i katalog ~/rpmbuild. Podstawowe narzędzie to rpmbuild, a źródła często znajdują się w osobnych repozytoriach Git lub w pakietach src.rpm. Instalacja źródłowego RPM:
      rpm -i pakiet.src.rpm
      rpmbuild -ba SPECS/pakiet.spec
    • Arch / pacman – korzysta z prostych skryptów PKGBUILD. Do budowania używa się makepkg, a gotowe pakiety instalowane są pacmanem:
      makepkg -si

    Na desktopach większość użytkowników nigdy nie dotyka pakietów źródłowych. Na serwerach czy w środowiskach CI/CD często pojawia się potrzeba przebudowania pakietu z własną łatką – wtedy znajomość chociaż podstaw narzędzi budujących oszczędza mnóstwo czasu.

    Osoba przy laptopie realizująca płatność online w domowym zaciszu
    Źródło: Pexels | Autor: Pavel Danilyuk

    Automatyzacja i integracja z narzędziami DevOps

    apt, dnf, pacman w Ansible, Puppet, Chef

    W zarządzaniu większą liczbą serwerów ręczne wywoływanie menedżera pakietów szybko przestaje mieć sens. Popularne narzędzia konfiguracyjne mają wyspecjalizowane moduły do pracy z apt, dnf i pacmanem.

    • Ansible:
      • apt – moduł do zarządzania pakietami w Debian/Ubuntu,
        - name: Zainstaluj nginx na Debianie
          apt:
            name: nginx
            state: present
            update_cache: yes
      • dnf – moduł dla RPM-owych dystrybucji,
        - name: Zainstaluj nginx na Fedorze
          dnf:
            name: nginx
            state: latest
      • pacman – moduł dla Arch Linux,
        - name: Zainstaluj nginx na Archu
          pacman:
            name: nginx
            state: latest
    • Puppet – używa ogólnego typu package, a menedżer (apt/dnf/pacman) jest wykrywany z systemu:
      package { 'nginx':
        ensure => installed,
      }
    • Chef – podobnie jak Puppet, wykorzystuje zasób package, który abstrahuje konkretny backend.

    Dzięki tej abstrakcji codzienna praca z pakietami w środowisku wielodystrybucyjnym sprowadza się do deklaratywnego opisu stanu, a nie do ręcznego wywoływania apt, dnf czy pacman na każdej maszynie.

    Aktualizacje automatyczne i półautomatyczne

    Przy mniejszej liczbie serwerów sensowne jest częściowe zautomatyzowanie aktualizacji bezpieczeństwa, przy pozostawieniu większych zmian do ręcznej weryfikacji.

    • Debian/Ubuntu – unattended-upgrades:

      Pozwala instalować automatycznie poprawki bezpieczeństwa:

      sudo apt install unattended-upgrades
      sudo dpkg-reconfigure unattended-upgrades

      Konfiguracja w pliku /etc/apt/apt.conf.d/50unattended-upgrades pozwala ograniczyć się np. tylko do repozytoriów security.

    • Fedora/RHEL – dnf-automatic:
      sudo dnf install dnf-automatic
      sudo systemctl enable --now dnf-automatic.timer

      W pliku /etc/dnf/automatic.conf można ustawić, czy paczki mają być tylko pobierane, czy też instalowane bez udziału administratora.

    • Arch/pacman:

      Z uwagi na charakter rolling release częściej stosuje się powiadomienia niż całkowicie automatyczne aktualizacje. Powszechną praktyką jest np. skrypt w cronie, który wykonuje pacman -Syuw (pobranie aktualizacji bez instalacji) i wysyła mail z listą zmian.

    Na serwerach, gdzie przerwa w działaniu aplikacji jest poważnym problemem, opłaca się rozdzielić etap pobierania paczek od ich instalacji, a samą instalację planować w oknie serwisowym.

    Bezpieczeństwo pracy z repozytoriami

    Podpisy kryptograficzne i weryfikacja pakietów

    apt, dnf i pacman korzystają z podpisów kryptograficznych, by zapewnić, że pakiety pochodzą z zaufanego źródła i nie zostały zmodyfikowane.

    • apt:

      Klucze GPG dla repozytoriów przechowywane są w /etc/apt/trusted.gpg.d/. Przy dodawaniu zewnętrznych repozytoriów używa się zwykle:

      curl -fsSL https://example.com/repo.gpg | sudo gpg --dearmor -o /usr/share/keyrings/example-archive-keyring.gpg

      a następnie w pliku źródeł:

      deb [signed-by=/usr/share/keyrings/example-archive-keyring.gpg] 
        https://example.com/debian stable main
    • dnf:

      Repozytoria RPM mają klucze zdefiniowane w plikach .repo (zwykle w /etc/yum.repos.d/), np.:

      gpgcheck=1
      gpgkey=https://example.com/RPM-GPG-KEY-example

      Import klucza:

      sudo rpm --import https://example.com/RPM-GPG-KEY-example
    • pacman:

      Zaufane klucze przechowywane są w /etc/pacman.d/gnupg. Inicjalizacja bazy (np. po świeżej instalacji lub problemach z kluczami):

      sudo pacman-key --init
      sudo pacman-key --populate archlinux

      Przy repozytoriach zewnętrznych dodaje się nowy klucz, a następnie oznacza go jako zaufany dla danego repozytorium.

    Jeżeli menedżer pakietów zgłasza błędy podpisu (brak klucza, niepoprawny podpis), nie należy na ślepo wyłączać weryfikacji. Bezpieczniej jest ustalić, co się zmieniło – czy repozytorium nie zostało podmienione, czy nie wygasł klucz, albo czy nie używamy przypadkiem starego mirrora.

    Zewnętrzne repozytoria a higiena systemu

    Dodatkowe repozytoria pozwalają szybko uzyskać nowsze wersje oprogramowania, ale każde z nich zwiększa powierzchnię potencjalnych problemów: konfliktów zależności, błędnych pakietów, nieaktualnych bibliotek.

    • Debian/Ubuntu:

      Zewnętrzne źródła pojawiają się zwykle w:

      • /etc/apt/sources.list
      • /etc/apt/sources.list.d/*.list

      Szybki podgląd:

      grep -R "deb " /etc/apt/sources.list*
    • Fedora/RHEL:

      Repozytoria opisują pliki .repo w /etc/yum.repos.d/. Najczęściej dodawane są EPEL, repozytoria producentów sprzętu, czasem COPR (odpowiednik PPA).

    • Arch/pacman:

      Dodatkowe repozytoria dopisuje się w /etc/pacman.conf. Sensowne jest ograniczanie się do kilku zaufanych źródeł i AUR, zamiast instalować losowe repo z forów czy blogów.

    Na serwerach produkcyjnych dobrym zwyczajem jest dokumentowanie wszystkich dodatkowych repozytoriów (np. w README hosta lub w repozytorium z kodem infrastruktury) i okresowy przegląd, czy są nadal potrzebne.

    Diagnostyka i rozwiązywanie problemów z pakietami

    Sprawdzanie integralności pakietów i plików

    Uszkodzone pakiety, pliki nadpisane ręcznie albo nieudane instalacje często sygnalizują się dziwnymi błędami. Menedżery pakietów oferują mechanizmy kontroli integralności.

    • Debian/Ubuntu (dpkg):

      Sprawdzenie, do jakiego pakietu należy plik:

      dpkg -S /sciezka/do/pliku

      Weryfikacja spójności plików pakietu (czy coś nie zostało zmodyfikowane):

      debsums nazwa_pakietu

      Jeśli debsums nie jest zainstalowany:

      sudo apt install debsums
    • RPM (dnf/rpm):

      Wyszukanie pakietu, do którego należy plik:

      rpm -qf /sciezka/do/pliku

      Weryfikacja integralności wszystkich pakietów:

      rpm -Va

      lub pojedynczego:

      rpm -V nazwa_pakietu
    • Arch/pacman:

      Sprawdzenie, który pakiet zawiera dany plik:

      pacman -Qo /sciezka/do/pliku

      Kontrola spójności zainstalowanego pakietu:

      pacman -Qkk nazwa_pakietu

    Jeżeli dane pakiety są uszkodzone, często najszybszym rozwiązaniem jest ich przeinstalowanie z repozytorium, zamiast ręcznego poprawiania pojedynczych plików.

    Czyszczenie i odbudowa bazy pakietów

    Zdarzają się sytuacje, w których baza pakietów jest niespójna (np. przerwana instalacja, problem z dyskiem, ręczna modyfikacja plików w /var/lib). Każdy menedżer ma swoje sposoby na „posprzątanie”.

    • apt/dpkg:
      • naprawa przerwanych instalacji:
        sudo dpkg --configure -a
      • ułożenie zależności i doinstalowanie brakujących:
        sudo apt --fix-broken install
      • usunięcie pakietów w stanie „half-installed” lub „config-files”:
        dpkg -l | grep ^..r
        sudo dpkg --purge nazwa_pakietu
    • dnf/rpm:
      • naprawa bazy RPM (przy poważnych błędach):
        sudo rpm --rebuilddb
      • Najczęściej zadawane pytania (FAQ)

        Co to jest menedżer pakietów w Linuksie i po co się go używa?

        Menedżer pakietów to narzędzie, które automatyzuje instalację, aktualizację i usuwanie oprogramowania w Linuksie. Zamiast samodzielnie pobierać programy z internetu i kopiować pliki, używasz jednego polecenia, a system sam pobiera odpowiedni pakiet z repozytorium.

        Menedżer pakietów dba także o zależności (doinstalowuje wymagane biblioteki), sprawdza podpisy kryptograficzne, utrzymuje bazę zainstalowanych programów i umożliwia łatwe czyszczenie zbędnych plików. Dzięki temu system jest spójny i łatwiej go utrzymać.

        Jaka jest różnica między apt, dnf i pacman w Linuksie?

        Różnice dotyczą głównie dystrybucji, w których są używane, oraz składni poleceń. apt działa w Debianie, Ubuntu i pochodnych, dnf w Fedorze, RHEL, CentOS Stream i ich forkach, a pacman w Arch Linux i dystrybucjach pochodnych, takich jak Manjaro.

        Funkcjonalnie wszystkie robią to samo: instalują, aktualizują, usuwają pakiety, rozwiązują zależności i korzystają z repozytoriów. Jeśli nauczysz się podstaw: instalacja, aktualizacja list pakietów, wyszukiwanie i usuwanie, bez problemu odnajdziesz się w każdej z tych rodzin systemów.

        Jak zainstalować program w Linuksie za pomocą apt, dnf lub pacman?

        Najprostsze polecenia instalacji (z użyciem sudo) wyglądają tak:

        • Debian/Ubuntu (apt): sudo apt install nazwa_pakietu
        • Fedora/RHEL (dnf): sudo dnf install nazwa_pakietu
        • Arch/Manjaro (pacman): sudo pacman -S nazwa_pakietu

        Nazwę pakietu możesz wcześniej sprawdzić poleceniem wyszukiwania, np. apt search, dnf search lub pacman -Ss. Po potwierdzeniu instalacji menedżer pobierze i zainstaluje wszystkie potrzebne elementy.

        Dlaczego przy instalacji pakietów w Linuksie muszę używać sudo?

        Instalacja i usuwanie pakietów modyfikuje pliki systemowe (np. w /usr, /etc), do których zwykły użytkownik nie ma dostępu. Dlatego potrzebne są uprawnienia administratora (root), które tymczasowo nadaje polecenie sudo.

        Jeżeli uruchomisz apt, dnf czy pacman bez sudo, często zobaczysz komunikat o braku uprawnień lub konieczności bycia rootem. Na serwerach administratorzy często logują się bezpośrednio jako root, ale zasada jest taka sama – operacje systemowe wymagają wyższych uprawnień.

        Jak zaktualizować system w Debianie/Ubuntu, Fedorze i Archu z terminala?

        W każdej rodzinie dystrybucji robi się to nieco inaczej, ale ogólna logika jest ta sama: odśwież listę pakietów i zaktualizuj zainstalowane programy:

        • Debian/Ubuntu (apt):
          sudo apt update
          sudo apt upgrade lub sudo apt full-upgrade
        • Fedora/RHEL (dnf):
          sudo dnf upgrade
        • Arch/Manjaro (pacman):
          sudo pacman -Syu

        Po większych aktualizacjach jądra i ważnych usług system może zasugerować restart – warto go wykonać, by nowe wersje faktycznie zaczęły działać.

        Jak sprawdzić informacje o pakiecie i jakie pliki instaluje?

        Do sprawdzenia opisu, wersji i zależności pakietu służą:

        • apt: apt show nazwa_pakietu
        • dnf: dnf info nazwa_pakietu

        Aby zobaczyć listę plików zainstalowanych przez pakiet, używa się narzędzi niskiego poziomu:

        • Debian/Ubuntu: dpkg -L nazwa_pakietu
        • Fedora/RHEL: rpm -ql nazwa_pakietu

        Dzięki temu możesz szybko sprawdzić, gdzie znajduje się główny plik wykonywalny programu, dokumentacja lub pliki konfiguracyjne dostarczane przez dany pakiet.

        Jak bezpiecznie usunąć niepotrzebne pakiety i wyczyścić pamięć podręczną?

        Podczas instalowania i aktualizowania programów w systemie zostają nieużywane zależności oraz pobrane pliki pakietów. W Debianie i Ubuntu do usuwania zbędnych zależności służy sudo apt autoremove, a do czyszczenia pobranych plików:

        • sudo apt clean – kasuje wszystkie pliki .deb z cache
        • sudo apt autoclean – kasuje tylko nieaktualne pliki .deb

        Podobne mechanizmy oferują też dnf i pacman (np. w dnf usuwanie starych metadanych i cache). Regularne sprzątanie jest szczególnie ważne na serwerach i maszynach z małą ilością miejsca na dysku.

        Esencja tematu

        • W Linuksie oprogramowanie dostarczane jest głównie jako pakiety zawierające pliki programu, biblioteki, metadane i sygnatury, a ich instalacją zarządza menedżer pakietów.
        • Menedżer pakietów (apt, dnf, pacman) odpowiada za pobieranie, instalację, aktualizację i usuwanie pakietów, rozwiązywanie zależności oraz weryfikację integralności.
        • Różne rodziny dystrybucji używają różnych narzędzi (apt w Debian/Ubuntu, dnf w Fedorze/RHEL, pacman w Archu), ale podstawowe koncepcje i typy operacji są bardzo podobne.
        • Operacje na pakietach wymagają uprawnień administratora, dlatego w systemach desktopowych używa się zazwyczaj sudo przed poleceniami menedżera pakietów.
        • W apt typowe zadania to: wyszukiwanie (apt search), instalacja (sudo apt install), usuwanie z lub bez konfiguracji (sudo apt remove/purge) oraz aktualizacja list pakietów i systemu (sudo apt update, sudo apt upgrade/full-upgrade).
        • Apt umożliwia łatwe sprawdzanie szczegółów pakietu (apt show), listy plików (dpkg -L) oraz powiązania plik–pakiet (dpkg -S), co ułatwia świadome zarządzanie systemem.
        • Do porządkowania systemu po instalacjach apt oferuje komendy sudo apt autoremove (usuwanie zbędnych zależności) oraz sudo apt clean/autoclean (czyszczenie pamięci podręcznej pakietów).