DNF’yi RHEL/CentOS 7’ye Yükleme: Eksiksiz Teknik Kılavuz
DNF (Dandified YUM), RPM tabanlı Linux dağıtımları için YUM’un tam bir yedeği olarak tasarlanmış yeni nesil paket yöneticisidir. `libsolv` kütüphanesi aracılığıyla daha hızlı bağımlılık çözümlemesi, daha düşük bellek tüketimi ve kararlı bir Python API sunar. RHEL/CentOS 7 varsayılan olarak YUM ile gelirken, DNF EPEL deposu aracılığıyla tam olarak kurulabilir ve aynı sistemde YUM ile paralel olarak veya YUM’un şeffaf bir yedeği olarak çalışabilir.
Bu kılavuz, kurulum sürecinin tamamını adım adım açıklar, YUM ile DNF arasındaki mimari farklılıkları ele alır, gerçek dünya senaryolarını kapsar ve üretime hazır bir komut referansı sunar.
DNF’nin RHEL/CentOS 7’de YUM’dan Neden Daha İyi Performans Gösterdiği
Terminale dokunmadan önce, yükseltmenin *neden* önemli olduğunu anlamak, özellikle paket yönetimi güvenilirliğinin kritik olduğu uzun süredir çalışan bir VPS Hosting ortamında bilinçli bir karar vermenize yardımcı olur.
Temel Mimari Farklılıklar
YUM, büyük bağımlılık ağaçlarında iyi belgelenmiş performans sorunları olan Python tabanlı bir bağımlılık çözümleyicisine dayanır. DNF bu çözümleyicinin yerini, başlangıçta SUSE tarafından geliştirilen SAT-çözücü tabanlı bir bağımlılık çözümleme motoru olan `libsolv` ile alır. Pratik sonuçlar önemlidir:
- Bağımlılık çözümleme hızı: DNF, karmaşık bağımlılık zincirlerini YUM’un gerektirdiği sürenin çok daha kısa bir bölümünde çözer; bu durum özellikle büyük paket kümelerindeki çakışmaların çözümünde belirgindir.
- Bellek kullanımı: YUM, tüm depo meta verilerini belleğe yükler. DNF ise geç yükleme kullanır ve daha agresif önbellekleme yaparak tepe RAM kullanımını azaltır.
- API kararlılığı: YUM’un Python API’si küçük sürümler arasında öngörülemeyen şekillerde değişti. DNF, eklenti yazarlarının güvenebileceği belgelenmiş, sürümlü bir Python API sunar.
- Eklenti mimarisi: DNF temiz bir kanca tabanlı eklenti sistemi kullanır. YUM eklentileri ise gevşek bağlantı nedeniyle sıklıkla birbirleriyle çakışır.
- İşlem geçmişi: DNF daha zengin bir işlem geçmişi veritabanı tutar; bu da geri almaları ve denetimleri daha hassas hale getirir.
YUM ile DNF: Özellik Karşılaştırması
| Özellik | YUM | DNF |
|---|
| — | — | — |
|---|
| Bağımlılık çözümleyici | Python tabanlı (dahili) | `libsolv` SAT çözümleyici |
|---|
| Bellek kullanımı | Yüksek (tam meta veri yüklemesi) | Düşük (geç yükleme + agresif önbellek) |
|---|
| Python API | Sürümler arası kararsız | Kararlı, sürümlü API |
|---|
| Eklenti sistemi | Gevşek bağlantılı, çakışmaya yatkın | Kanca tabanlı, izole |
|---|
| İşlem geri alma | Sınırlı | Geri alma desteğiyle tam geçmiş |
|---|
| Paralel indirme | Hayır | Evet (`librepo` aracılığıyla) |
|---|
| Zayıf bağımlılıklar | Desteklenmiyor | Destekleniyor (`Recommends`, `Suggests`) |
|---|
| Modül akışları | Desteklenmiyor | Destekleniyor (DNF 4+) |
|---|
| Bakım durumu | Kullanım ömrü sona erdi | Aktif olarak bakımı yapılıyor |
|---|
| RHEL/CentOS’ta varsayılan | 7 ve öncesi | 8 ve sonrası |
|---|
Ön Koşullar
Devam etmeden önce aşağıdakileri doğrulayın:
- Çalışan bir RHEL 7 veya CentOS 7 örneği (bare metal, VM veya bulut VPS).
- Root veya sudo erişimi — tüm kurulum komutları yükseltilmiş ayrıcalıklar gerektirir.
- Aktif internet bağlantısı — EPEL deposuna erişilebilir olması gerekir.
- DNF, bağımlılıkları ve depo meta veri önbelleği için en az 500 MB boş disk alanı.
Bir Dedicated Server üzerinde minimal CentOS 7 kurulumu çalıştırıyorsanız, sıkıştırılmış görüntülerde zaman zaman bulunmadığından `curl` ve `wget` öğelerinin mevcut olduğunu doğrulayın.
Adım 1: Mevcut Sistem Paketlerini Güncelleyin
Yeni yazılım yüklemeden önce paket veritabanınızı senkronize etmek, sürüm çakışmalarını önler ve EPEL sürüm paketinin mevcut RPM veritabanı durumunuza karşı temiz bir şekilde yüklenmesini sağlar.
“`bash
sudo yum update -y
“`
Bu komutun işlevi: Halihazırda yüklü paketler için mevcut tüm güncellemeleri indirir ve uygular, depo meta verilerini yeniler ve RPM işlem kilidini yeniden oluşturur. Üretim sisteminde bunu bir bakım penceresi sırasında planlayın — çekirdek güncellemeleri etkili olması için yeniden başlatma gerektirir.
Uç durum: `yum update` bir `Multilib version problems` hatasıyla başarısız olursa, tek seferlik geçici çözüm olarak `sudo yum update –setopt=protected_multilib=false -y` komutunu çalıştırın, ardından devam etmeden önce çakışan paketleri araştırın.
Adım 2: EPEL Deposunu Etkinleştirin
DNF, varsayılan CentOS/RHEL 7 temel depolarında mevcut değildir. Fedora projesi tarafından yönetilen Extra Packages for Enterprise Linux (EPEL) deposu bunu sağlar.
“`bash
sudo yum install epel-release -y
“`
Deponun etkin olduğunu doğrulayın:
“`bash
yum repolist | grep epel
“`
Beklenen çıktı, sıfırdan fazla paket sayısıyla (genellikle 13.000+) `epel/x86_64` göstermelidir. Depo devre dışı görünüyorsa zorla etkinleştirin:
“`bash
sudo yum-config-manager –enable epel
“`
Güvenlik notu: EPEL paketleri Fedora altyapı ekibi tarafından derlenir ve imzalanır. `epel-release` paketi GPG anahtarını otomatik olarak yükler. Bu depodan gelen paketlere güvenmeden önce anahtar parmak izini resmi Fedora anahtar sunucusuna karşı doğrulayabilirsiniz — bu adım, güçlendirilmiş üretim sistemlerinde değer taşır.
Proxy veya güvenlik duvarının arkasında mısınız? Sunucunuz Fedora yansılarına doğrudan erişemiyorsa, proxy ayarlarınızla `/etc/yum.conf` yapılandırın:
“`ini
proxy=http://your-proxy-server:port
proxy_username=user
proxy_password=pass
“`
Adım 3: DNF’yi Yükleyin
EPEL etkin durumdayken, DNF’yi ve temel bağımlılıklarını tek bir komutla yükleyin:
“`bash
sudo yum install dnf -y
“`
Bu komut, otomatik bağımlılıklar olarak `dnf`, `dnf-data`, `python-dnf`, `libcomps`, `librepo` ve `libsolv` öğelerini çeker. Toplam indirme boyutu, halihazırda yüklü olanlara bağlı olarak genellikle 3–8 MB arasındadır.
Yüklenenler:
- `dnf` — ana ikili dosya ve komut satırı arayüzü
- `libsolv` — SAT tabanlı bağımlılık çözümleyici
- `librepo` — paralel indirme kütüphanesi
- `libcomps` — paket grupları için comps XML ayrıştırıcısı
- `python-dnf` — Python bağlamaları ve DNF çekirdek kütüphanesi
Adım 4: Kurulumu Doğrulayın
DNF’nin çalışır durumda olduğunu onaylayın ve sürümünü kontrol edin:
“`bash
dnf –version
“`
Başarılı bir kurulum aşağıdakine benzer bir çıktı üretir:
“`
4.0.9.2
Installed: dnf-0:4.0.9.2-1.el7.noarch at …
Built : CentOS BuildSystem <http://bugs.centos.org> at …
“`
DNF tarafından görülen mevcut depoları listeleyerek daha derin bir sağlık kontrolü yapın:
“`bash
dnf repolist
“`
Çıktı, `yum repolist` komutunun gösterdikleriyle örtüşmeli; bu, DNF’nin mevcut depo yapılandırmanızı `/etc/yum.repos.d/` konumundan doğru şekilde devraldığını doğrular.
Önemli: CentOS 7’deki DNF, YUM ile aynı depo `.repo` dosyalarını okur. Herhangi bir depo geçişi gerekmez. Her iki araç da `/etc/yum.repos.d/` ve `/var/cache/` öğelerini paylaşır (ayrı alt dizinlerde).
Adım 5: Temel DNF Komut Referansı
DNF, kasıtlı olarak YUM ile komut uyumludur. Aşağıdaki tablo en sık kullanacağınız işlemleri kapsar:
| Görev | DNF Komutu |
|---|
| — | — |
|---|
| Tüm paketleri güncelle | `sudo dnf update -y` |
|---|
| Paket yükle | `sudo dnf install <package> -y` |
|---|
| Paket kaldır | `sudo dnf remove <package> -y` |
|---|
| Paket ara | `dnf search <keyword>` |
|---|
| Paket bilgisi al | `dnf info <package>` |
|---|
| Yüklü paketleri listele | `dnf list installed` |
|---|
| Mevcut güncellemeleri listele | `dnf check-update` |
|---|
| Önbelleğe alınan meta verileri temizle | `sudo dnf clean all` |
|---|
| İşlem geçmişini görüntüle | `dnf history` |
|---|
| Bir işlemi geri al | `sudo dnf history undo <id>` |
|---|
| Paket grubu yükle | `sudo dnf groupinstall "<group>"` |
|---|
| Depoyu etkinleştir | `sudo dnf config-manager –enable <repo>` |
|---|
DNF İşlem Geçmişi ve Geri Alma
Bu, DNF’nin operasyonel açıdan en değerli özelliklerinden biri olup YUM’un yetersiz kaldığı bir alandır. Her yükleme, güncelleme veya kaldırma işlemi `/var/lib/dnf/history/` konumuna kaydedilir. Son işlemleri incelemek için:
“`bash
dnf history list
“`
Belirli bir işlemde tam olarak neyin değiştiğini görmek için:
“`bash
dnf history info <transaction-id>
“`
Bir işlemi geri almak için (örneğin, hatalı bir güncellemeyi geri almak):
“`bash
sudo dnf history undo <transaction-id>
“`
Bu özellik, bir paket güncellemesinin kontrol paneli bağımlılıklarıyla çakışabileceği cPanel’li VPS ortamlarında özellikle kullanışlıdır.
DNF Yapılandırma Dosyası
DNF’nin genel yapılandırması `/etc/dnf/dnf.conf` konumunda bulunur. Üretim kullanımı için temel ayarlama parametreleri:
“`ini
[main]
gpgcheck=1
installonly_limit=3
clean_requirements_on_remove=True
best=True
skip_if_unavailable=False
“`
- `installonly_limit=3` — yalnızca son 3 çekirdek sürümünü tutar; `/boot` bölümünün dolmasını önler.
- `clean_requirements_on_remove=True` — paket kaldırma işleminde sahipsiz bağımlılıkları otomatik olarak kaldırır.
- `best=True` — her zaman mevcut en son sürümü yükler; sessizce düşürme yapmak yerine hata verir.
Adım 6: DNF’yi Varsayılan Paket Yöneticisi Olarak Yapılandırma
RHEL/CentOS 7’de YUM sistem varsayılanı olmaya devam eder. DNF’yi birincil arayüzünüz yapmak için iki seçeneğiniz vardır.
Seçenek A: Kabuk Takma Adı (Kullanıcı Düzeyi, Yıkıcı Olmayan)
Aşağıdakini `~/.bashrc` (mevcut kullanıcı için) veya `/etc/bashrc` (sistem genelinde) dosyasına ekleyin:
“`bash
alias yum='dnf'
“`
Hemen uygulayın:
“`bash
source ~/.bashrc
“`
Sınırlama: Bu takma ad yalnızca etkileşimli kabuk oturumları için geçerlidir. `yum` komutunu mutlak yoluyla (`/usr/bin/yum`) doğrudan çağıran veya farklı kullanıcılar altında çalışan (örneğin, cron işleri, systemd birimleri) betikler etkilenmez.
Seçenek B: Sembolik Bağlantı (Sistem Düzeyi)
Daha kapsamlı bir değiştirme için, `yum` ikilisini `dnf` konumuna yönlendiren bir sembolik bağlantı oluşturun:
“`bash
sudo mv /usr/bin/yum /usr/bin/yum.bak
sudo ln -s /usr/bin/dnf /usr/bin/yum
“`
Kritik uyarı: Bu yaklaşım tüm kullanıcıları ve tüm sistem genelindeki betikleri etkiler. Önce üretim dışı bir ortamda kapsamlı testler yapın. Bazı sistem betikleri ve üçüncü taraf araçlar (belirli cPanel/WHM bileşenleri dahil) `/usr/bin/yum` komutunu açıkça çağırır ve ikili dosya değiştirilirse beklenmedik şekilde davranabilir. Yukarıda gösterildiği gibi her zaman orijinal ikili dosyayı yedekleyin.
Seçenek C: YUM Eklentisi Olarak DNF (Sunucular için Önerilen)
Üretim sunucuları için en temiz yaklaşım, YUM’u olduğu gibi bırakmak ve kendi iş akışlarınızda ve otomasyon betiklerinizde yalnızca `dnf` komutunu açıkça kullanmaktır. Bu, sistem araçlarını bozma riskini ortadan kaldırırken DNF’nin tüm özelliklerine tam erişim sağlar.
Pratik Tuzaklar ve Uç Durumlar
Bunlar gerçek dağıtımlarda ortaya çıkan ve temel eğitimlerde nadiren ele alınan sorunlardır.
GPG anahtarı çakışmaları: Birden fazla üçüncü taraf deposundan paket yüklerseniz, DNF’nin daha katı GPG uygulaması (`gpgcheck=1` olduğunda) YUM’un daha önce sessizce kabul ettiği paketleri reddedebilir. Depo GPG anahtarlarını her zaman `sudo rpm –import <key-url>` komutuyla açıkça içe aktarın.
Eklenti uyumsuzluğu: Bazı YUM eklentilerinin (örneğin `yum-plugin-fastestmirror`) doğrudan DNF karşılığı yoktur veya farklı davranır. DNF’nin kendi `fastestmirror` eklentisi (`dnf-plugin-fastestmirror`) vardır ancak varsayılan olarak etkin değildir. `sudo dnf install python3-dnf-plugin-fastestmirror` komutuyla yükleyin.
Önbellek konumu farklılığı: YUM meta verileri `/var/cache/yum/` konumunda önbelleğe alır. DNF ise `/var/cache/dnf/` konumunu kullanır. Disk alanı kısıtlıysa her iki önbellek bir arada bulunabilir ve önemli miktarda alan tüketebilir. Alan kazanmak için `sudo dnf clean all` ve `sudo yum clean all` komutlarını bağımsız olarak çalıştırın.
RHEL abonelik yönetimi: Kayıtlı RHEL 7 sistemlerinde (CentOS’un aksine), `subscription-manager` eklentisi YUM ile entegre olur. RHEL 7’deki DNF, ek yapılandırma olmadan abonelikle korunan depolara tam olarak uymayabilir. Geçiş yaptıktan sonra `subscription-manager repos –list-enabled` komutuyla doğrulayın.
Python sürümü hassasiyeti: CentOS 7’deki DNF, Python 2 bağlamalarını (`python-dnf`) kullanır. Sisteminizde Python 3’e yükseltme yaptıysanız, `python-dnf` bağımlılık zincirini istemeden bozmadığınızdan emin olun. RHEL 8+ üzerindeki DNF 4+, Python 3’ü yerel olarak kullanır.
CentOS 7 Sonrası Geçiş Yolunuzu Planlamak
CentOS 7, 30 Haziran 2024 tarihinde kullanım ömrünün sonuna ulaştı. DNF’yi yüklemek faydalı bir operasyonel iyileştirmedir, ancak kullanım ömrü sona ermiş bir dağıtımın temel güvenlik durumunu değiştirmez. Hâlâ CentOS 7 iş yükleri çalıştırıyorsanız, AlmaLinux 8/9, Rocky Linux 8/9 veya RHEL 8/9’a geçiş planı yol haritanızda yer almalıdır. Bu dağıtımların tümü DNF’yi yerel olarak kullanır; bu da şimdi edindiğiniz deneyimi doğrudan aktarılabilir kılar.
Eski altyapı üzerinde birden fazla hizmet çalıştıran ekipler için VPS Kontrol Panelleri, geçiş penceresi süresince paralel ortamların yönetimini önemli ölçüde basitleştirebilir.
İş yükleriniz web barındırma yığınlarını içeriyorsa, modern bir dağıtıma geçiş aynı zamanda Certbot ve ACME aracılığıyla SSL Sertifikaları otomasyonundan tam anlamıyla yararlanmanızı sağlar; bu özellik RHEL 8+ ve türevlerinde çok daha iyi desteklenmektedir.
Hızlı Referans Karar Matrisi
Temiz ve üretime hazır bir kurulumu doğrulamak için kurulum öncesinde ve sonrasında bu kontrol listesini kullanın:
- [ ] EPEL yüklenmeden önce `yum update -y` hatasız tamamlandı
- [ ] EPEL deposu `yum repolist | grep epel` aracılığıyla etkin olarak doğrulandı
- [ ] `dnf –version` geçerli bir sürüm dizesi döndürüyor
- [ ] `dnf repolist` çıktısı `yum repolist` çıktısıyla eşleşiyor
- [ ] `/etc/dnf/dnf.conf` ortamınıza göre gözden geçirildi ve ayarlandı
- [ ] `installonly_limit` bölümünün dolmasını önlemek için `/boot` ayarlandı
- [ ] Takma ad, sembolik bağlantı veya bir arada kullanım stratejisi hakkında karar verildi
- [ ] Sembolik bağlantı yaklaşımı kullanılıyorsa YUM ikilisi yedeklendi
- [ ] Cron işleri ve otomasyon betikleri sabit kodlanmış `yum` yolları açısından denetlendi
- [ ] CentOS 7 kullanım ömrü sonu geçiş zaman çizelgesi belgelendi
SSS
DNF ve YUM aynı CentOS 7 sisteminde çakışma olmadan bir arada bulunabilir mi?
Evet. Her iki araç da `/etc/yum.repos.d/` konumundan okur ve ayrı önbellek dizinleri tutar. RPM veritabanını (`/var/lib/rpm`) paylaşırlar; dolayısıyla biri tarafından tamamlanan bir işlem diğeri tarafından anında görülebilir. Her ikisini aynı anda çalıştırmak (örneğin, iki eşzamanlı yükleme) RPM kilit çakışmasına neden olur, ancak sıralı kullanım tamamen güvenlidir.
CentOS 7’ye DNF yüklemek mevcut YUM eklentilerini bozar mı?
Hayır. DNF bağımsız bir ikili dosya olarak yüklenir ve YUM kurulumunu değiştirmez. Mevcut YUM eklentileriniz olduğu gibi kalır. Ancak DNF, YUM eklentilerini yüklemez — belirli YUM eklentilerine güveniyorsanız, DNF karşılıklarını ayrıca bulup yüklemeniz gerekir.
CentOS 7’deki DNF, DNF modüllerini (modül akışlarını) destekliyor mu?
Hayır. DNF modül akışları, DNF 4 ve RHEL/CentOS 8’de tanıtılan bir özelliktir. CentOS 7 için EPEL aracılığıyla sunulan DNF sürümü DNF 4.x olmakla birlikte, modül akışı desteği CentOS 7’de bulunmayan AppStream depo altyapısını gerektirir.
Neden `dnf update` komutu bazen aynı sistemde `yum update` komutundan farklı sonuçlar üretir?
DNF’nin `libsolv` çözümleyicisi daha katı bağımlılık mantığı uygular ve sürüm seçimlerini YUM’un dahili çözümleyicisinden farklı şekilde çözebilir. Çoğu durumda sonuç aynıdır, ancak karmaşık veya çakışan bağımlılıkların bulunduğu ortamlarda DNF farklı paket sürümleri seçebilir ya da YUM’un sessizce izin verdiği işlemleri reddedebilir. Bu bir hata değil, bir özelliktir — DNF’nin davranışı daha öngörülebilir ve denetlenebilirdir.
Üretim web uygulamalarına ev sahipliği yapan bir CentOS 7 sunucusunda DNF kullanmak güvenli midir?
Evet; ancak YUM ikilisini değiştirmek yerine bir arada kullanım yaklaşımını (YUM’u olduğu gibi bırakın, DNF’yi açıkça kullanın) tercih etmeniz koşuluyla. Birincil iş akışınızı DNF’ye geçirmeden önce sunucunuzdaki herhangi bir kontrol paneli yazılımının veya dağıtım otomasyonunun YUM davranışı hakkında sabit kodlanmış varsayımları olmadığını doğrulayın.
