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

Instalacja DNF na RHEL/CentOS 7: Kompletny Przewodnik Techniczny

DNF (Dandified YUM) to menedżer pakietów nowej generacji dla dystrybucji Linux opartych na RPM, zaprojektowany jako pełne zastąpienie YUM. Zapewnia szybsze rozwiązywanie zależności dzięki bibliotece `libsolv`, mniejsze zużycie pamięci oraz stabilne API Python. Podczas gdy RHEL/CentOS 7 domyślnie korzysta z YUM, DNF można w pełni zainstalować za pośrednictwem repozytorium EPEL i uruchamiać równolegle z YUM — lub jako jego przezroczyste zastąpienie — na tym samym systemie.

Ten przewodnik przeprowadza przez cały proces instalacji, wyjaśnia różnice architektoniczne między YUM a DNF, omawia rzeczywiste przypadki brzegowe i dostarcza gotowe do użycia w środowisku produkcyjnym zestawienie poleceń.

Dlaczego DNF przewyższa YUM na RHEL/CentOS 7

Przed przystąpieniem do pracy z terminalem, zrozumienie *dlaczego* aktualizacja ma znaczenie, pomaga podjąć świadomą decyzję — szczególnie w długo działającym środowisku VPS Hosting, gdzie niezawodność zarządzania pakietami jest kluczowa.

Podstawowe różnice architektoniczne

YUM opiera się na resolverze zależności opartym na Pythonie, który ma dobrze udokumentowane problemy z wydajnością przy dużych drzewach zależności. DNF zastępuje ten resolver przez `libsolv` — silnik rozwiązywania zależności oparty na solverze SAT, pierwotnie opracowany przez SUSE. Praktyczne konsekwencje są znaczące:

  • Szybkość rozwiązywania zależności: DNF rozwiązuje złożone łańcuchy zależności w ułamku czasu wymaganego przez YUM, co jest szczególnie zauważalne przy rozwiązywaniu konfliktów w dużych zestawach pakietów.
  • Zużycie pamięci: YUM ładuje całe metadane repozytorium do pamięci. DNF używa leniwego ładowania i bardziej agresywnego buforowania, zmniejszając szczytowe zużycie RAM.
  • Stabilność API: API Pythona YUM zmieniało się nieprzewidywalnie między wersjami pomocniczymi. DNF udostępnia udokumentowane, wersjonowane API Python, na którym autorzy wtyczek mogą polegać.
  • Architektura wtyczek: DNF używa przejrzystego systemu wtyczek opartego na hookach. Wtyczki YUM często interferują ze sobą z powodu luźnego powiązania.
  • Historia transakcji: DNF utrzymuje bogatszą bazę danych historii transakcji, dzięki czemu wycofywanie zmian i audyty są bardziej precyzyjne.

YUM vs. DNF: Porównanie funkcji

FunkcjaYUMDNF
Resolver zależnościOparty na Pythonie (wewnętrzny)Solver SAT `libsolv`
Zużycie pamięciWyższe (pełne ładowanie metadanych)Niższe (leniwe ładowanie + agresywne buforowanie)
API PythonNiestabilne między wersjamiStabilne, wersjonowane API
System wtyczekLuźno powiązany, podatny na konfliktyOparty na hookach, izolowany
Wycofywanie transakcjiOgraniczonePełna historia z obsługą wycofywania
Równoległe pobieranieNieTak (przez `librepo`)
Słabe zależnościNieobsługiwaneObsługiwane (`Recommends`, `Suggests`)
Strumienie modułówNieobsługiwaneObsługiwane (DNF 4+)
Status utrzymaniaKoniec życiaAktywnie utrzymywany
Domyślny na RHEL/CentOS7 i wcześniejsze8 i nowsze

Wymagania wstępne

Przed kontynuowaniem potwierdź następujące kwestie:

  • Działająca instancja RHEL 7 lub CentOS 7 (bare metal, VM lub chmurowy VPS).
  • Dostęp root lub sudo — wszystkie polecenia instalacyjne wymagają podwyższonych uprawnień.
  • Aktywne połączenie z internetem — repozytorium EPEL musi być osiągalne.
  • Co najmniej 500 MB wolnego miejsca na dysku dla DNF, jego zależności i pamięci podręcznej metadanych repozytorium.

Jeśli uruchamiasz minimalną instalację CentOS 7 na Serwerze Dedykowanym, sprawdź, czy `curl` i `wget` są dostępne, ponieważ czasami są nieobecne w okrojonych obrazach.

Krok 1: Aktualizacja istniejących pakietów systemowych

Synchronizacja bazy danych pakietów przed instalacją nowego oprogramowania zapobiega konfliktom wersji i zapewnia, że pakiet wydania EPEL instaluje się poprawnie względem bieżącego stanu bazy danych RPM.

“`bash

sudo yum update -y

“`

Co to robi: Pobiera i stosuje wszystkie dostępne aktualizacje dla aktualnie zainstalowanych pakietów, odświeża metadane repozytorium i odbudowuje blokadę transakcji RPM. W systemie produkcyjnym zaplanuj to podczas okna konserwacyjnego — aktualizacje jądra wymagają ponownego uruchomienia, aby weszły w życie.

Przypadek brzegowy: Jeśli `yum update` kończy się błędem `Multilib version problems`, uruchom `sudo yum update –setopt=protected_multilib=false -y` jako jednorazowe obejście, a następnie zbadaj konfliktujące pakiety przed kontynuowaniem.

Krok 2: Włączenie repozytorium EPEL

DNF nie jest dostępny w domyślnych repozytoriach bazowych CentOS/RHEL 7. Repozytorium Extra Packages for Enterprise Linux (EPEL), utrzymywane przez projekt Fedora, udostępnia go.

“`bash

sudo yum install epel-release -y

“`

Sprawdź, czy repozytorium jest aktywne:

“`bash

yum repolist | grep epel

“`

Oczekiwane wyjście powinno pokazywać `epel/x86_64` z niezerową liczbą pakietów (zazwyczaj 13 000+). Jeśli repozytorium wydaje się wyłączone, wymuś jego włączenie:

“`bash

sudo yum-config-manager –enable epel

“`

Uwaga dotycząca bezpieczeństwa: Pakiety EPEL są budowane i podpisywane przez zespół infrastruktury Fedora. Pakiet `epel-release` instaluje klucz GPG automatycznie. Możesz zweryfikować odcisk klucza na oficjalnym serwerze kluczy Fedora przed zaufaniem pakietom z tego repozytorium — krok wart wykonania w zabezpieczonych systemach produkcyjnych.

Za proxy lub zaporą sieciową? Jeśli Twój serwer nie może bezpośrednio dotrzeć do mirrorów Fedory, skonfiguruj `/etc/yum.conf` z ustawieniami proxy:

“`ini

proxy=http://your-proxy-server:port

proxy_username=user

proxy_password=pass

“`

Krok 3: Instalacja DNF

Po aktywacji EPEL zainstaluj DNF i jego podstawowe zależności jednym poleceniem:

“`bash

sudo yum install dnf -y

“`

Pobiera to `dnf`, `dnf-data`, `python-dnf`, `libcomps`, `librepo` i `libsolv` jako automatyczne zależności. Całkowity rozmiar pobierania wynosi zazwyczaj od 3 do 8 MB w zależności od tego, co jest już zainstalowane.

Co zostaje zainstalowane:

  • `dnf` — główny plik binarny i interfejs wiersza poleceń
  • `libsolv` — resolver zależności oparty na SAT
  • `librepo` — biblioteka do równoległego pobierania
  • `libcomps` — parser XML comps dla grup pakietów
  • `python-dnf` — powiązania Python i biblioteka rdzenia DNF

Krok 4: Weryfikacja instalacji

Potwierdź, że DNF działa i sprawdź jego wersję:

“`bash

dnf –version

“`

Pomyślna instalacja daje wynik podobny do:

“`

4.0.9.2

Installed: dnf-0:4.0.9.2-1.el7.noarch at …

Built : CentOS BuildSystem <http://bugs.centos.org> at …

“`

Przeprowadź głębszą kontrolę poprawności, wyświetlając dostępne repozytoria widziane przez DNF:

“`bash

dnf repolist

“`

Wynik powinien odzwierciedlać to, co pokazuje `yum repolist`, potwierdzając, że DNF poprawnie odziedziczył istniejącą konfigurację repozytorium z `/etc/yum.repos.d/`.

Ważne: DNF na CentOS 7 odczytuje te same pliki `.repo` repozytorium co YUM. Migracja repozytorium nie jest wymagana. Oba narzędzia współdzielą `/etc/yum.repos.d/` i `/var/cache/` (w oddzielnych podkatalogach).

Krok 5: Podstawowe zestawienie poleceń DNF

DNF jest celowo kompatybilny z poleceniami YUM. Poniższa tabela obejmuje operacje, z których będziesz korzystać najczęściej:

ZadaniePolecenie DNF
Aktualizacja wszystkich pakietów`sudo dnf update -y`
Instalacja pakietu`sudo dnf install <package> -y`
Usunięcie pakietu`sudo dnf remove <package> -y`
Wyszukiwanie pakietu`dnf search <keyword>`
Informacje o pakiecie`dnf info <package>`
Lista zainstalowanych pakietów`dnf list installed`
Lista dostępnych aktualizacji`dnf check-update`
Czyszczenie buforowanych metadanych`sudo dnf clean all`
Przeglądanie historii transakcji`dnf history`
Wycofanie transakcji`sudo dnf history undo <id>`
Instalacja grupy pakietów`sudo dnf groupinstall "<group>"`
Włączenie repozytorium`sudo dnf config-manager –enable <repo>`

Historia transakcji DNF i wycofywanie zmian

Jest to jedna z najbardziej wartościowych operacyjnie funkcji DNF, z którą YUM radzi sobie słabo. Każda instalacja, aktualizacja lub usunięcie jest rejestrowane w `/var/lib/dnf/history/`. Aby sprawdzić ostatnie transakcje:

“`bash

dnf history list

“`

Aby zobaczyć dokładnie, co zmieniło się w konkretnej transakcji:

“`bash

dnf history info <transaction-id>

“`

Aby cofnąć transakcję (na przykład wycofanie błędnej aktualizacji):

“`bash

sudo dnf history undo <transaction-id>

“`

Ta możliwość jest szczególnie przydatna na VPS z cPanel, gdzie aktualizacja pakietu może kolidować z zależnościami panelu sterowania.

Plik konfiguracyjny DNF

Globalna konfiguracja DNF znajduje się w `/etc/dnf/dnf.conf`. Kluczowe parametry dostrajania dla użytku produkcyjnego:

“`ini

[main]

gpgcheck=1

installonly_limit=3

clean_requirements_on_remove=True

best=True

skip_if_unavailable=False

“`

  • `installonly_limit=3` — zachowuje tylko ostatnie 3 wersje jądra, zapobiegając zapełnieniu `/boot`.
  • `clean_requirements_on_remove=True` — automatycznie usuwa osierocone zależności przy usuwaniu pakietu.
  • `best=True` — zawsze instaluje najnowszą dostępną wersję, zgłaszając błąd zamiast cichego obniżania wersji.

Krok 6: Konfiguracja DNF jako domyślnego menedżera pakietów

Na RHEL/CentOS 7 YUM pozostaje domyślnym systemem. Masz dwie opcje, aby uczynić DNF swoim głównym interfejsem.

Opcja A: Alias powłoki (poziom użytkownika, nieniszczący)

Dodaj następujące do `~/.bashrc` (dla bieżącego użytkownika) lub `/etc/bashrc` (dla całego systemu):

“`bash

alias yum='dnf'

“`

Zastosuj natychmiast:

“`bash

source ~/.bashrc

“`

Ograniczenie: Ten alias ma zastosowanie tylko do interaktywnych sesji powłoki. Skrypty, które wywołują `yum` bezpośrednio przez bezwzględną ścieżkę (`/usr/bin/yum`) lub uruchamiane przez innych użytkowników (np. zadania cron, jednostki systemd), nie są nim objęte.

Opcja B: Dowiązanie symboliczne (poziom systemowy)

Dla bardziej gruntownego zastąpienia utwórz dowiązanie symboliczne, które przekierowuje plik binarny `yum` do `dnf`:

“`bash

sudo mv /usr/bin/yum /usr/bin/yum.bak

sudo ln -s /usr/bin/dnf /usr/bin/yum

“`

Krytyczne ostrzeżenie: To podejście dotyczy wszystkich użytkowników i wszystkich skryptów w całym systemie. Najpierw dokładnie przetestuj w środowisku nieprodukcyjnym. Niektóre skrypty systemowe i narzędzia innych firm (w tym niektóre komponenty cPanel/WHM) jawnie wywołują `/usr/bin/yum` i mogą zachowywać się nieoczekiwanie, jeśli plik binarny zostanie zastąpiony. Zawsze twórz kopię zapasową oryginalnego pliku binarnego, jak pokazano powyżej.

Opcja C: DNF jako wtyczka YUM (zalecane dla serwerów)

Najczystszym podejściem dla serwerów produkcyjnych jest pozostawienie YUM nietkniętego i używanie `dnf` jawnie we własnych przepływach pracy i skryptach automatyzacji. Pozwala to uniknąć ryzyka uszkodzenia narzędzi systemowych, jednocześnie dając pełny dostęp do możliwości DNF.

Praktyczne pułapki i przypadki brzegowe

Są to problemy, które pojawiają się w rzeczywistych wdrożeniach i rzadko są omawiane w podstawowych samouczkach.

Konflikty kluczy GPG: Jeśli instalujesz pakiety z wielu repozytoriów innych firm, ściślejsze egzekwowanie GPG przez DNF (gdy `gpgcheck=1`) może odrzucać pakiety, które YUM wcześniej akceptował po cichu. Zawsze importuj klucze GPG repozytorium jawnie za pomocą `sudo rpm –import <key-url>`.

Niezgodność wtyczek: Niektóre wtyczki YUM (np. `yum-plugin-fastestmirror`) nie mają bezpośredniego odpowiednika w DNF lub zachowują się inaczej. DNF ma własną wtyczkę `fastestmirror` (`dnf-plugin-fastestmirror`), ale nie jest ona domyślnie włączona. Zainstaluj ją za pomocą `sudo dnf install python3-dnf-plugin-fastestmirror`.

Rozbieżność lokalizacji pamięci podręcznej: YUM buforuje metadane w `/var/cache/yum/`. DNF używa `/var/cache/dnf/`. Jeśli miejsce na dysku jest ograniczone, obie pamięci podręczne mogą współistnieć i zajmować znaczną przestrzeń. Uruchom `sudo dnf clean all` i `sudo yum clean all` niezależnie, aby odzyskać miejsce.

Zarządzanie subskrypcjami RHEL: W zarejestrowanych systemach RHEL 7 (w przeciwieństwie do CentOS) wtyczka `subscription-manager` integruje się z YUM. DNF na RHEL 7 może nie w pełni honorować repozytoria chronione subskrypcją bez dodatkowej konfiguracji. Sprawdź za pomocą `subscription-manager repos –list-enabled` po przełączeniu.

Wrażliwość na wersję Pythona: DNF na CentOS 7 używa powiązań Python 2 (`python-dnf`). Jeśli uaktualniłeś system do Pythona 3, upewnij się, że nie przerywasz nieumyślnie łańcucha zależności `python-dnf`. DNF 4+ na RHEL 8+ używa natywnie Pythona 3.

Planowanie ścieżki migracji poza CentOS 7

CentOS 7 osiągnął koniec życia 30 czerwca 2024 roku. Instalacja DNF jest użytecznym usprawnieniem operacyjnym, ale nie zmienia podstawowej postawy bezpieczeństwa dystrybucji EOL. Jeśli nadal uruchamiasz obciążenia CentOS 7, plan migracji do AlmaLinux 8/9, Rocky Linux 8/9 lub RHEL 8/9 powinien znaleźć się na Twojej mapie drogowej. Wszystkie te dystrybucje używają DNF natywnie, dzięki czemu znajomość, którą teraz budujesz, jest bezpośrednio przenoszalna.

Dla zespołów zarządzających wieloma usługami na starzejącej się infrastrukturze, Panele sterowania VPS mogą znacznie uprościć zarządzanie równoległymi środowiskami podczas okna migracji.

Jeśli Twoje obciążenia obejmują stosy hostingu stron internetowych, migracja do nowoczesnej dystrybucji umożliwia również pełne wykorzystanie automatyzacji Certyfikatów SSL przez Certbot i ACME, które mają znacznie lepsze wsparcie na RHEL 8+ i jego pochodnych.

Szybka macierz decyzyjna

Użyj tej listy kontrolnej przed i po instalacji, aby potwierdzić czyste, bezpieczne dla środowiska produkcyjnego skonfigurowanie:

  • [ ] `yum update -y` zakończone bez błędów przed instalacją EPEL
  • [ ] Repozytorium EPEL zweryfikowane jako aktywne przez `yum repolist | grep epel`
  • [ ] `dnf –version` zwraca prawidłowy ciąg wersji
  • [ ] Wynik `dnf repolist` odpowiada wynikowi `yum repolist`
  • [ ] `/etc/dnf/dnf.conf` przejrzany i dostrojony do Twojego środowiska
  • [ ] `installonly_limit` ustawiony, aby zapobiec przepełnieniu partycji `/boot`
  • [ ] Podjęta decyzja dotycząca strategii aliasu vs. dowiązania symbolicznego vs. współistnienia
  • [ ] Plik binarny YUM zarchiwizowany, jeśli zastosowano podejście z dowiązaniem symbolicznym
  • [ ] Zadania cron i skrypty automatyzacji sprawdzone pod kątem zakodowanych na stałe ścieżek `yum`
  • [ ] Udokumentowana oś czasu migracji po EOL CentOS 7

FAQ

Czy DNF i YUM mogą współistnieć na tym samym systemie CentOS 7 bez konfliktów?

Tak. Oba narzędzia odczytują z `/etc/yum.repos.d/` i utrzymują oddzielne katalogi pamięci podręcznej. Współdzielą bazę danych RPM (`/var/lib/rpm`), więc transakcja zakończona przez jedno jest natychmiast widoczna dla drugiego. Jednoczesne uruchamianie obu (np. dwie równoczesne instalacje) spowoduje konflikt blokady RPM, ale sekwencyjne użycie jest w pełni bezpieczne.

Czy instalacja DNF na CentOS 7 uszkodzi istniejące wtyczki YUM?

Nie. DNF instaluje się jako niezależny plik binarny i nie modyfikuje instalacji YUM. Twoje istniejące wtyczki YUM pozostają nienaruszone. Jednak DNF nie ładuje wtyczek YUM — jeśli polegasz na konkretnych wtyczkach YUM, musisz osobno znaleźć i zainstalować ich odpowiedniki dla DNF.

Czy DNF na CentOS 7 obsługuje moduły DNF (strumienie modułów)?

Nie. Strumienie modułów DNF to funkcja wprowadzona w DNF 4 i RHEL/CentOS 8. Wersja DNF dostępna przez EPEL dla CentOS 7 to DNF 4.x, ale obsługa strumieni modułów wymaga infrastruktury repozytorium AppStream, która nie istnieje na CentOS 7.

Dlaczego `dnf update` czasami daje inne wyniki niż `yum update` na tym samym systemie?

Resolver `libsolv` DNF stosuje ściślejszą logikę zależności i może rozwiązywać wybory wersji inaczej niż wewnętrzny resolver YUM. W większości przypadków wynik jest identyczny, ale w środowiskach ze złożonymi lub konfliktującymi zależnościami DNF może wybierać różne wersje pakietów lub odmawiać transakcji, które YUM by po cichu zaakceptował. Jest to funkcja, a nie błąd — zachowanie DNF jest bardziej przewidywalne i audytowalne.

Czy bezpieczne jest używanie DNF na serwerze CentOS 7 hostującym produkcyjne aplikacje internetowe?

Tak, z zastrzeżeniem, że używasz podejścia współistnienia (pozostawiasz YUM nietkniętym, używasz DNF jawnie) zamiast zastępowania pliku binarnego YUM. Przed przełączeniem głównego przepływu pracy na DNF sprawdź, czy żadne oprogramowanie panelu sterowania ani automatyzacja wdrożeń na Twoim serwerze nie ma zakodowanych na stałe założeń dotyczących zachowania YUM.

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