15%

Zaoszczędź 15% na wszystkich usługach hostingowych

Sprawdź swoje umiejętności i zdobądź Rabat na dowolny plan hostingowy

Użyj kodu:

Skills
Rozpocznij
09.10.2024

apt vs yum: Zarządzanie pakietami Linux wyjaśnione dla administratorów systemów

Zarządzanie pakietami Linux to mechanizm, za pomocą którego oprogramowanie jest instalowane, aktualizowane, konfigurowane i usuwane w systemie Linux. apt (Advanced Package Tool) obsługuje pakiety `.deb` w dystrybucjach opartych na Debianie, takich jak Ubuntu i Linux Mint, podczas gdy yum (Yellowdog Updater Modified) zarządza pakietami `.rpm` w systemach opartych na Red Hat, w tym CentOS i RHEL. Oba narzędzia abstrahują złożoność rozwiązywania zależności, interakcji z repozytoriami i weryfikacji integralności pakietów — jednak różnią się architektonicznie i nie są wymienne.

Wiedza o tym, które narzędzie zarządza Twoim systemem, nie jest opcjonalna. Bezpośrednio wpływa na sposób, w jaki konfigurujesz serwery, automatyzujesz wdrożenia, piszesz skrypty zarządzania konfiguracją (Ansible, Chef, Puppet) i utrzymujesz cykle łatania zabezpieczeń w środowiskach produkcyjnych.

Czym jest menedżer pakietów Linux

Menedżer pakietów to zbiór narzędzi programowych, który automatyzuje pełny cykl życia oprogramowania w systemie Linux: pobieranie pakietów ze zdalnych repozytoriów, weryfikację podpisów kryptograficznych, rozwiązywanie i instalowanie łańcuchów zależności, wykonywanie skryptów pre/post-instalacyjnych oraz rejestrowanie instalacji w lokalnej bazie danych pakietów.

Baza danych pakietów jest kluczowa i często pomijana. W systemach opartych na Debianie znajduje się pod adresem `/var/lib/dpkg/`. W systemach opartych na RPM rezyduje w `/var/lib/rpm/`. Obie bazy danych przechowują autorytatywny zapis tego, co jest zainstalowane, w jakiej wersji i z jaką własnością plików — stanowiąc podstawę audytu systemu i operacji przywracania.

Menedżery pakietów współpracują z repozytoriami — zdalnymi serwerami przechowującymi wyselekcjonowane kolekcje skompilowanych, podpisanych pakietów. Metadane repozytorium (listy pakietów, sumy kontrolne, klucze GPG) są synchronizowane lokalnie przed jakąkolwiek instalacją, dlatego `apt update` lub `yum check-update` musi poprzedzać polecenia instalacji w zautomatyzowanych skryptach.

apt: Advanced Package Tool dla systemów opartych na Debianie

apt to wysokopoziomowy interfejs wiersza poleceń do zarządzania pakietami w systemach Debian, Ubuntu, Linux Mint, Pop!_OS i wszystkich pochodnych. Działa na bazie narzędzia niższego poziomu `dpkg`, które obsługuje faktyczną instalację pakietów `.deb`. Pomyśl o `dpkg` jako o silniku, a o `apt` jako o inteligentnym kierowcy, który wie, skąd pobierać paliwo i w jakiej kolejności je spalać.

Łańcuch narzędzi apt w szczegółach

Ekosystem apt obejmuje kilka plików binarnych służących różnym celom:

  • `apt` — nowoczesny, zalecany interaktywny CLI (wprowadzony w Ubuntu 14.04 / Debian 8)
  • `apt-get` — starszy, skryptowalny backend; preferowany w skryptach powłoki ze względu na stabilny format wyjściowy
  • `apt-cache` — odpytuje lokalną pamięć podręczną pakietów pod kątem metadanych, opisów i grafów zależności
  • `dpkg` — niskopoziomowy instalator pakietów; używany bezpośrednio przy instalacji lokalnego pliku `.deb` za pomocą `dpkg -i package.deb`
  • `apt-mark` — oznacza pakiety jako wstrzymane, automatycznie zainstalowane lub ręcznie zainstalowane

Podstawowe polecenia apt z kontekstem technicznym

Aktualizacja lokalnego indeksu pakietów:

“`bash

sudo apt update

“`

Pobiera zaktualizowane metadane ze wszystkich skonfigurowanych repozytoriów w `/etc/apt/sources.list` i `/etc/apt/sources.list.d/`. Nie instaluje ani nie aktualizuje niczego. Uruchomienie tego przed jakąkolwiek operacją instalacji jest obowiązkowe — pominięcie oznacza, że możesz odwoływać się do przestarzałych wersji pakietów lub przegapić poprawki zabezpieczeń.

Aktualizacja zainstalowanych pakietów:

“`bash

sudo apt upgrade

“`

Aktualizuje wszystkie pakiety, dla których istnieje nowsza wersja, ale nie usunie żadnego aktualnie zainstalowanego pakietu ani nie zainstaluje nowego pakietu w celu spełnienia zależności. W przypadku bardziej agresywnej aktualizacji obsługującej zmiany zależności:

“`bash

sudo apt full-upgrade

“`

`full-upgrade` (dawniej `dist-upgrade`) zainstaluje nowe zależności i usunie konfliktujące pakiety w razie potrzeby. Używaj go ostrożnie w systemach produkcyjnych.

Instalacja pakietu:

“`bash

sudo apt install package_name

“`

Aby zainstalować wiele pakietów w jednej transakcji:

“`bash

sudo apt install nginx curl git

“`

Łączenie instalacji w jedno polecenie jest bardziej wydajne, ponieważ apt rozwiązuje pełny graf zależności raz, a nie wielokrotnie.

Usunięcie pakietu (zachowanie plików konfiguracyjnych):

“`bash

sudo apt remove package_name

“`

Czyszczenie pakietu (usunięcie plików binarnych i konfiguracyjnych):

“`bash

sudo apt purge package_name

“`

Zawsze preferuj `purge` zamiast `remove` przy wycofywaniu usługi. Pozostałe pliki konfiguracyjne po `remove` mogą powodować nieoczekiwane zachowanie, jeśli pakiet zostanie później ponownie zainstalowany.

Usunięcie osieroconych zależności:

“`bash

sudo apt autoremove

“`

Jest to często zaniedbywane i prowadzi do rozrostu zależności z czasem. Włącz to do swojego regularnego przepływu pracy konserwacyjnej.

Wyszukiwanie pakietu:

“`bash

apt search package_name

“`

Sprawdzenie szczegółów pakietu przed instalacją:

“`bash

apt show package_name

“`

Ujawnia wersję pakietu, rozmiar po instalacji, zależności i opiekuna — przydatne przed pobraniem nieznanego pakietu.

Wstrzymanie pakietu na jego bieżącej wersji (kluczowe dla stabilności produkcji):

“`bash

sudo apt-mark hold package_name

“`

Zapobiega to dotknięciu pakietu przez `apt upgrade`. Niezbędne, gdy uruchamiasz określoną wersję jądra lub przypiętą wersję aplikacji.

Rzeczywisty przypadek użycia apt: Konfiguracja serwera WWW na Ubuntu

“`bash

sudo apt update

sudo apt install -y nginx certbot python3-certbot-nginx

sudo systemctl enable nginx

sudo systemctl start nginx

“`

Flaga `-y` pomija monit o potwierdzenie, co jest wymagane w nieinteraktywnych skryptach konfiguracyjnych. Zawsze łącz ją z `apt update` w tym samym bloku skryptu, aby zagwarantować instalację z aktualnych metadanych repozytorium.

yum: Yellowdog Updater Modified dla systemów opartych na RPM

yum to menedżer pakietów dla Red Hat Enterprise Linux (RHEL), CentOS 7 i starszych wydań Fedory. Zarządza pakietami `.rpm` i działa na bazie bazy danych RPM. Podobnie jak apt nad dpkg, yum zapewnia rozwiązywanie zależności i zarządzanie repozytoriami na bazie surowego polecenia `rpm`.

Kluczowa uwaga architektoniczna: W CentOS 8+, RHEL 8+ i wszystkich nowoczesnych wydaniach Fedory, yum został zastąpiony przez dnf (Dandified YUM). W tych systemach polecenie `yum` jest zazwyczaj dowiązaniem symbolicznym lub aliasem do `dnf`. Jeśli zarządzasz jakimkolwiek systemem z RHEL/CentOS 8 lub nowszym, powinieneś pisać polecenia `dnf`. Składnia poleceń jest w dużej mierze kompatybilna, ale dnf oferuje znacznie lepsze rozwiązywanie zależności, czystsze API i modułową obsługę repozytoriów.

Podstawowe polecenia yum z kontekstem technicznym

Sprawdzenie dostępnych aktualizacji bez ich stosowania:

“`bash

sudo yum check-update

“`

Jest to szczególnie przydatne w zautomatyzowanych skryptach monitorujących do wykrywania, czy system jest opóźniony w łataniu, bez wyzwalania aktualizacji.

Zastosowanie wszystkich dostępnych aktualizacji:

“`bash

sudo yum update

“`

W przeciwieństwie do `apt upgrade`, `yum update` zainstaluje również nowe pakiety zależności w razie potrzeby. Nie ma osobnego odpowiednika `full-upgrade` — yum obsługuje to domyślnie.

Instalacja pakietu:

“`bash

sudo yum install package_name

“`

Usunięcie pakietu:

“`bash

sudo yum remove package_name

“`

Uwaga: operacja usuwania w yum może czasami kaskadowo usuwać zależne pakiety. Zawsze przeglądaj podsumowanie transakcji przed potwierdzeniem.

Wyszukiwanie pakietu:

“`bash

yum search package_name

“`

Sprawdzenie informacji o pakiecie:

“`bash

yum info package_name

“`

Lista zainstalowanych pakietów:

“`bash

yum list installed

“`

Czyszczenie lokalnej pamięci podręcznej:

“`bash

sudo yum clean all

“`

Czyści zbuforowane dane pakietów i metadane. Uruchom to, gdy podejrzewasz, że nieaktualne dane repozytorium powodują błędy rozwiązywania.

Wstrzymanie pakietu na jego bieżącej wersji:

“`bash

sudo yum versionlock add package_name

“`

Wymaga wtyczki `yum-plugin-versionlock`. Odpowiednik `apt-mark hold`, jest niezbędny do utrzymania stabilnych środowisk produkcyjnych, w których określona wersja pakietu nie może być dotknięta przez automatyczne aktualizacje.

Rzeczywisty przypadek użycia yum: Wdrożenie Apache na CentOS 7

“`bash

sudo yum install -y httpd

sudo systemctl enable httpd

sudo systemctl start httpd

sudo firewall-cmd –permanent –add-service=http

sudo firewall-cmd –reload

“`

Częstym błędem jest instalacja Apache i zapomnienie o otwarciu zapory. W systemach CentOS/RHEL `firewalld` jest domyślnie aktywny i będzie po cichu blokować ruch HTTP, nawet jeśli usługa działa.

apt vs yum: Bezpośrednie porównanie

Funkcjaapt (Debian/Ubuntu)yum / dnf (RHEL/CentOS/Fedora)
Format pakietu`.deb``.rpm`
Narzędzie bazowe`dpkg``rpm`
Główne dystrybucjeDebian, Ubuntu, Mint, Pop!_OSRHEL, CentOS, Fedora, AlmaLinux, Rocky Linux
Następca / nowoczesny CLI`apt` (zastąpił `apt-get` w użyciu interaktywnym)`dnf` (zastąpił `yum` w RHEL 8+)
Rozwiązywanie zależnościAutomatyczne, obsługuje konfliktyAutomatyczne; dnf jest bardziej niezawodny niż yum
Konfiguracja repozytorium`/etc/apt/sources.list`, `/etc/apt/sources.list.d/``/etc/yum.repos.d/*.repo`
Mechanizm wstrzymywania pakietów`apt-mark hold``yum versionlock` (wymagana wtyczka)
Instalacja lokalnego pakietu`dpkg -i file.deb``rpm -i file.rpm` lub `yum localinstall`
Zarządzanie pamięcią podręczną`apt clean`, `apt autoclean``yum clean all`
Usuwanie osieroconych pakietów`apt autoremove``yum autoremove` (dnf obsługuje to lepiej)
Historia transakcjiOgraniczonaPełna historia transakcji z możliwością wycofania przez `yum history`
Strumienie modułówNieobsługiwane natywnieObsługiwane w dnf (Application Streams)
Weryfikacja podpisów GPGTakTak
Flaga przyjazna dla skryptów`-y` (nieinteraktywna)`-y` (nieinteraktywna)

dnf: Nowoczesny następca yum

Jeśli zarządzasz jakimkolwiek systemem RHEL 8+, CentOS Stream, AlmaLinux, Rocky Linux lub Fedora, dnf jest Twoim menedżerem pakietów. Przejście z yum na dnf nie jest kosmetyczne — dnf rozwiązuje szereg długotrwałych problemów architektonicznych w yum:

  • Rozwiązywanie zależności: dnf używa biblioteki `libsolv`, która jest znacznie szybsza i dokładniejsza niż resolver yum
  • Stabilność API: dnf udostępnia stabilne API Python do skryptowania i automatyzacji
  • Strumienie modułów: dnf obsługuje Application Streams, umożliwiając współistnienie wielu wersji tego samego oprogramowania (np. PHP 7.4 i PHP 8.1) w repozytoriach
  • Wycofywanie transakcji: `dnf history undo <id>` pozwala wycofać określoną transakcję — możliwość bez bezpośredniego odpowiednika w apt

Kluczowe polecenia dnf różniące się od yum:

“`bash

Install a module stream (e.g., PHP 8.1)

sudo dnf module enable php:8.1

sudo dnf install php

Roll back the last transaction

sudo dnf history undo last

Check which package provides a specific file

sudo dnf provides /usr/bin/python3

“`

Zarządzanie repozytoriami: Kluczowa umiejętność operacyjna

Zarówno apt, jak i yum/dnf są tak użyteczne, jak repozytoria, do których są skonfigurowane. Źle skonfigurowane lub niezaufane repozytoria stanowią poważne zagrożenie bezpieczeństwa.

W Debian/Ubuntu, bezpieczne dodanie repozytorium zewnętrznego:

“`bash

Import the GPG key

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

Add the repository with key reference

echo "deb [signed-by=/usr/share/keyrings/example-archive-keyring.gpg] https://repo.example.com/apt stable main" | sudo tee /etc/apt/sources.list.d/example.list

sudo apt update

“`

W RHEL/CentOS, dodanie repozytorium:

“`bash

sudo yum-config-manager –add-repo https://repo.example.com/centos/example.repo

Or manually create /etc/yum.repos.d/example.repo

“`

Zasada bezpieczeństwa: Nigdy nie dodawaj repozytorium bez niezależnej weryfikacji jego klucza GPG. Skompromitowane repozytorium może przesyłać złośliwe pakiety, które zostaną zainstalowane z uprawnieniami roota.

Wybór odpowiedniego menedżera pakietów dla środowiska serwerowego

Menedżer pakietów, którego używasz, jest podyktowany przez Twoją dystrybucję Linux — nie wybierasz apt ani yum niezależnie. To, co wybierasz, to Twoja dystrybucja, a ta decyzja ma dalsze konsekwencje dla dostępności pakietów, umów wsparcia dla przedsiębiorstw, tempa łatania zabezpieczeń i kompatybilności narzędzi.

  • Ubuntu LTS (apt): Najlepszy wybór dla ogólnych obciążeń VPS Hosting, serwerów WWW i środowisk deweloperskich. Wydania z długoterminowym wsparciem otrzymują 5 lat aktualizacji zabezpieczeń, rozszerzalnych do 10 z Ubuntu Pro.
  • RHEL / AlmaLinux / Rocky Linux (dnf): Standard dla korporacyjnych środowisk produkcyjnych, szczególnie przy uruchamianiu na Serwerach Dedykowanych wymagających certyfikowanych stosów oprogramowania, ram zgodności (PCI-DSS, HIPAA) lub wdrożeń aplikacji obsługiwanych przez ISV.
  • Debian Stable (apt): Bardzo konserwatywne wersje pakietów, co czyni go idealnym dla serwerów, gdzie stabilność jest priorytetem nad najnowszym oprogramowaniem. Powszechnie używany dla długo działających serwerów baz danych i poczty.
  • CentOS Stream / Fedora (dnf): Odpowiedni dla środowisk deweloperskich i testowych, gdzie chcesz śledzić zmiany upstream RHEL przed ich trafieniem do stabilnych wydań.

Przy wdrażaniu panelu sterowania takiego jak cPanel, bazowy menedżer pakietów ma istotne znaczenie. cPanel oficjalnie obsługuje AlmaLinux, Rocky Linux i CloudLinux — wszystkie oparte na dnf. Jeśli używasz VPS z cPanel, będziesz pracować w środowisku dnf przy nowoczesnych wdrożeniach.

W środowiskach, gdzie potrzebujesz graficznego lub webowego interfejsu do zarządzania pakietami i konfiguracją serwera bez korzystania z wiersza poleceń, zapoznaj się z Panelami Sterowania VPS, które abstrahują zarządzanie pakietami do interfejsu użytkownika, nadal wykorzystując apt lub dnf pod spodem.

Wzmacnianie bezpieczeństwa poprzez zarządzanie pakietami

Menedżery pakietów są główną powierzchnią ataku dla ataków na łańcuch dostaw. Te praktyki są niezbędne na każdym serwerze dostępnym z Internetu:

  • Włącz automatyczne aktualizacje zabezpieczeń — W Ubuntu: pakiet `unattended-upgrades`. W RHEL/CentOS: `dnf-automatic` z `apply_updates = yes` w `/etc/dnf/automatic.conf`.
  • Weryfikuj podpisy GPG — Nigdy nie wyłączaj sprawdzania GPG (`–nogpgcheck` w yum/dnf lub `–allow-unauthenticated` w apt) poza izolowanymi środowiskami laboratoryjnymi.
  • Regularnie audytuj zainstalowane pakiety — Użyj `dpkg -l` lub `rpm -qa` do wygenerowania pełnego manifestu pakietów. Porównaj go z zaufaną linią bazową.
  • Usuwaj niepotrzebne pakiety — Każdy zainstalowany pakiet jest powierzchnią ataku. Uruchamiaj `apt autoremove` lub `dnf autoremove` po większych wdrożeniach.
  • Przypinaj krytyczne pakiety — Używaj `apt-mark hold` lub `dnf versionlock`, aby zapobiec niezamierzonym aktualizacjom pakietów takich jak jądro, OpenSSL lub silniki baz danych w systemach produkcyjnych.

Jeśli uruchamiasz serwer poczty lub hostujesz infrastrukturę e-mail, utrzymywanie aktualności pakietów takich jak Postfix, Dovecot i ich zależności TLS jest szczególnie krytyczne. Połącz rygorystyczne zarządzanie pakietami z prawidłowo skonfigurowanymi Certyfikatami SSL, aby utrzymać szyfrowane bezpieczeństwo transportu. Podobnie środowiska hostingu WWW zarządzane przez platformy Współdzielonego Hostingu WWW korzystają z utrzymywania bezpieczeństwa pakietów przez dostawcę hostingu, ale zrozumienie warstwy pakietów pozostaje cenne do debugowania i niestandardowej konfiguracji.

Praktyczna macierz decyzyjna i kluczowe wnioski

Przed uruchomieniem jakiegokolwiek polecenia zarządzania pakietami w systemie produkcyjnym, przejdź przez tę listę kontrolną:

Lista kontrolna przed operacją:

  • Potwierdź, którą dystrybucję i wersję uruchamiasz: `cat /etc/os-release`
  • Potwierdź właściwy menedżer pakietów: `which apt` lub `which dnf` lub `which yum`
  • W systemach apt: zawsze uruchamiaj `sudo apt update` przed `apt install` lub `apt upgrade`
  • W systemach yum/dnf: `sudo yum check-update` lub `sudo dnf check-update` przed aktualizacjami
  • Przejrzyj podsumowanie transakcji przed potwierdzeniem jakiejkolwiek operacji instalacji lub usunięcia
  • W przypadku serwerów produkcyjnych: najpierw przetestuj aktualizacje pakietów w środowisku testowym
  • Po większych aktualizacjach: sprawdź status usług za pomocą `systemctl status <service>`
  • Po usunięciu pakietów: uruchom `apt autoremove` lub `dnf autoremove` w celu wyczyszczenia osieroconych pakietów

Decyzje architektoniczne:

  • Używaj `apt full-upgrade` zamiast `apt upgrade` tylko wtedy, gdy rozumiesz i akceptujesz, że pakiety mogą zostać usunięte
  • Używaj `dnf` zamiast `yum` w każdym systemie z RHEL 8 / CentOS 8 lub nowszym
  • Używaj `apt-get` (nie `apt`) w skryptach powłoki i potokach CI/CD dla stabilnego, parsowalnego wyjścia
  • Używaj `yum versionlock` lub `apt-mark hold` przed jakimkolwiek zautomatyzowanym potokiem aktualizacji dotykającym serwera produkcyjnego
  • Nigdy nie dodawaj repozytoriów zewnętrznych bez importowania i weryfikowania ich kluczy GPG

FAQ

Jaka jest różnica między apt a apt-get?

`apt` to nowoczesne polecenie skierowane do użytkownika, wprowadzone w celu konsolidacji `apt-get` i `apt-cache` w jedno narzędzie z czystszym wyjściem i paskiem postępu. `apt-get` pozostaje dostępny i jest preferowany w skryptach, ponieważ jego format wyjściowy jest gwarantowany jako stabilny między wersjami. Do interaktywnego użycia w terminalu `apt` jest aktualnym standardem.

Czy mogę używać apt na serwerze CentOS lub RHEL?

Nie. apt jest przeznaczony wyłącznie dla systemów opartych na Debianie i zarządza pakietami `.deb`. CentOS i RHEL używają formatu pakietów RPM, zarządzanego przez yum lub dnf. Formaty pakietów i bazy danych są architektonicznie niekompatybilne — nie istnieje warstwa konwersji.

Jaki jest odpowiednik apt autoremove w yum?

`sudo yum autoremove` lub `sudo dnf autoremove` usuwa pakiety, które zostały zainstalowane jako zależności, ale nie są już wymagane przez żaden jawnie zainstalowany pakiet. Implementacja dnf jest bardziej niezawodna niż starsza wersja yum.

Jak zapobiec aktualizacji określonego pakietu przez apt lub yum?

W systemach opartych na apt: `sudo apt-mark hold package_name`. W systemach yum/dnf: zainstaluj wtyczkę `yum-plugin-versionlock` i uruchom `sudo yum versionlock add package_name`, lub w dnf: `sudo dnf versionlock add package_name`. Oba mechanizmy przetrwają polecenia `upgrade` i `update` do momentu jawnego zwolnienia.

Czy yum jest nadal aktualny w 2024 roku?

Dla systemów CentOS 7 i RHEL 7 nadal działających w produkcji, tak — yum pozostaje menedżerem pakietów. Jednak CentOS 7 osiągnął koniec życia w czerwcu 2024 roku. Każdy system nadal działający na CentOS 7 powinien zostać zmigrowany do AlmaLinux 8/9 lub Rocky Linux 8/9, oba używające dnf. Pisanie nowych skryptów automatyzacji skierowanych wyłącznie na yum nie jest już zalecane.

15%

Zaoszczędź 15% na wszystkich usługach hostingowych

Sprawdź swoje umiejętności i zdobądź Rabat na dowolny plan hostingowy

Użyj kodu:

Skills
Rozpocznij