Red Hat tabanlı sistemlerde paket yönetimi her zaman sysadmin’lerin günlük rutininin önemli bir parçası olmuştur. CentOS 8 ve Rocky Linux ile birlikte yum’un yerini alan dnf (Dandified YUM), aynı işi çok daha akıllıca yapıyor. Dependency resolution motoru yenilendi, bellek kullanımı azaldı ve plugin sistemi güçlendirildi. Eğer hâlâ yum komutlarını ezbere yazıyorsan, bu yazıyı okuduktan sonra dnf’e geçişin çok daha kolay olacak.
dnf Nedir ve yum’dan Farkı Ne?
yum, yıllarca RHEL ekosisteminin bel kemiği oldu. Ama zamanla bazı sorunlar baş gösterdi: yavaş dependency çözümlemesi, yüksek bellek tüketimi ve Python 2 bağımlılığı. dnf bu sorunları çözmek için sıfırdan tasarlandı. libsolv kütüphanesini kullanarak çok daha hızlı ve güvenilir bir bağımlılık çözümlemesi yapıyor.
Rocky Linux 8 ve 9’da, CentOS Stream 8 ve 9’da dnf varsayılan paket yöneticisi olarak geliyor. yum komutu aslında hâlâ çalışıyor ama arka planda dnf’e yönlendiriyor. Yani eski alışkanlıklarınla devam edebilirsin, ama dnf’in sunduğu özelliklerden yararlanmak için biraz daha ileri gitmeye değer.
Temel Paket İşlemleri
Paket Arama ve Bilgi Alma
Bir paketi kurmadan önce repolarda arama yapmak günlük işlerin başında gelir:
# Paket adına göre arama
dnf search nginx
# Daha geniş arama (açıklama dahil)
dnf search all "web server"
# Paket hakkında detaylı bilgi
dnf info httpd
# Hangi paketin hangi dosyayı sağladığını bul
dnf provides /usr/bin/python3
# Kurulu paketleri listele
dnf list installed
# Belirli bir paketi listele
dnf list installed | grep nginx
dnf provides komutu gerçekten çok işe yarıyor. Örneğin bir script çalıştırırken “command not found” hatası aldığında, o binary’nin hangi pakette olduğunu anında bulabilirsin:
dnf provides "*/netstat"
# Çıktı: net-tools-2.0-0.52.el8.x86_64 paketini işaret eder
Paket Kurulum ve Kaldırma
# Tekli paket kurulumu
dnf install htop
# Birden fazla paket aynı anda
dnf install vim curl wget git
# Soru sormadan kur (scriptlerde kullanım için)
dnf install -y nginx
# Paketi kaldır (bağımlılıkları bırak)
dnf remove httpd
# Paketi ve artık kullanılmayan bağımlılıklarını kaldır
dnf autoremove httpd
# Belirli bir sürümü kur
dnf install nginx-1.20.1
# Yerel rpm dosyasını kur
dnf install /tmp/mypackage.rpm
# URL'den direkt kur
dnf install https://example.com/package.rpm
Dikkat etmen gereken bir nokta: dnf remove komutu sadece o paketi siler, kurulum sırasında otomatik gelen bağımlılık paketlerini bırakır. autoremove ise hem paketi hem de artık kullanılmayan bağımlılıkları temizler. Üretim sunucularında autoremove kullanırken ne sileceğine iyi bak, bazen beklenmedik paketleri de beraberinde götürebilir.
Sistem Güncellemeleri
Sistem güncellemesi yapmak basit görünse de bazı incelikleri var:
# Mevcut güncellemeleri listele
dnf check-update
# Tüm sistemi güncelle
dnf upgrade
# Sadece güvenlik güncellemelerini uygula
dnf upgrade --security
# Belirli bir paketi güncelle
dnf upgrade nginx
# Güncellemeyi simüle et (gerçekten yapma)
dnf upgrade --downloadonly
# Paket sürümünü düşür (downgrade)
dnf downgrade nginx
Gerçek dünya senaryosu: Diyelim ki gece maintenance window açtın ve production sunucunu güncelleyeceksin. Önce dnf check-update ile nelerin güncelleneceğini görürsün, ardından dnf upgrade --security ile sadece güvenlik yamalarını uygularsın. Bu şekilde işlevselliği etkileyen büyük sürüm atlamalarından kaçınmış olursun.
Repo Yönetimi
Mevcut Repoları Görüntüleme
# Aktif repoları listele
dnf repolist
# Hem aktif hem pasif repoları göster
dnf repolist all
# Repo hakkında detaylı bilgi
dnf repoinfo baseos
# Belirli repodaki paketleri listele
dnf repository-packages epel list
EPEL ve Ek Repolar Ekleme
Rocky Linux ve CentOS’ta ihtiyacın olan pek çok paket varsayılan repolarda bulunmaz. EPEL (Extra Packages for Enterprise Linux) bu boşluğu dolduruyor:
# EPEL reposunu ekle (Rocky Linux 8)
dnf install epel-release
# Rocky Linux 9 için
dnf install epel-release epel-next-release
# PowerTools/CRB reposunu aktif et (bazı EPEL paketleri buna ihtiyaç duyar)
# Rocky Linux 8
dnf config-manager --set-enabled powertools
# Rocky Linux 9
dnf config-manager --set-enabled crb
# Remi reposunu ekle (PHP sürüm yönetimi için)
dnf install https://rpms.remirepo.net/enterprise/remi-release-9.rpm
Manuel Repo Dosyası Oluşturma
Bazen özel bir repo eklemen gerekebilir. /etc/yum.repos.d/ dizinine .repo uzantılı bir dosya oluşturman yeterli:
cat > /etc/yum.repos.d/myrepo.repo << 'EOF'
[myrepo]
name=My Custom Repository
baseurl=https://repo.example.com/rhel9/
enabled=1
gpgcheck=1
gpgkey=https://repo.example.com/RPM-GPG-KEY
EOF
# Repo cache'ini temizle ve yenile
dnf clean all
dnf makecache
Paket Grupları
dnf, birden fazla paketi bir arada yüklemeni sağlayan paket gruplarını destekler. Özellikle minimal kurulum yapıp sonradan belirli roller eklemek istediğinde çok kullanışlı:
# Mevcut grupları listele
dnf group list
# Gizli grupları da göster
dnf group list hidden
# Grup hakkında detay
dnf group info "Development Tools"
# Grubu kur
dnf group install "Development Tools"
# Minimal kuruluma web sunucu grubu ekle
dnf group install "Basic Web Server"
Development Tools grubu özellikle dikkat çekici: gcc, make, autoconf ve diğer derleme araçlarını tek seferde kurar. Kaynak koddan derleme yapacaksan ilk adımın bu olmalı.
DNF Modülleri (AppStream)
dnf modülleri, RHEL 8 ile gelen ve aynı yazılımın farklı sürümlerini paralel olarak sunabilen bir özellik. Örneğin PHP 7.4, 8.0, 8.1 ve 8.2’yi aynı repoda tutabilir ve ihtiyacına göre birini aktif edebilirsin:
# Mevcut modülleri listele
dnf module list
# PHP modüllerini göster
dnf module list php
# Belirli bir PHP sürümünü aktif et
dnf module enable php:8.1
# Modülü kur
dnf module install php:8.1
# Aktif modül profilini göster
dnf module info php
# Modülü sıfırla (farklı sürüme geçmek için)
dnf module reset php
dnf module enable php:8.2
dnf module install php:8.2
# Node.js için benzer işlem
dnf module enable nodejs:18
dnf module install nodejs:18
Dikkat: Modül değiştirirken önce reset yapman gerekiyor. Direkt başka bir sürümü enable etmeye çalışırsan hata alırsın. Ayrıca modül değişikliğinden sonra bağlı paketleri de güncellemen gerekebilir.
Cache ve Temizlik İşlemleri
# Tüm cache'i temizle
dnf clean all
# Sadece metadata cache'i temizle
dnf clean metadata
# Eski paket dosyalarını temizle
dnf clean packages
# Cache'i yeniden oluştur
dnf makecache
# Artık kullanılmayan bağımlılıkları kaldır
dnf autoremove
# Bozuk veya eksik paketleri kontrol et
dnf check
Sunucu diskinde yer açmak istediğinde dnf clean all ile başlamak iyi bir fikir. Özellikle dnf upgrade yaptıktan sonra eski paket dosyaları /var/cache/dnf/ altında birikebilir.
Geçmişi Yönetmek: dnf history
dnf’in en güçlü özelliklerinden biri işlem geçmişini tutması ve geri alma desteği sunması:
# İşlem geçmişini göster
dnf history
# Belirli bir işlemin detayı
dnf history info 15
# İşlemi geri al (undo)
dnf history undo 15
# İşlemi tekrarla (redo)
dnf history redo 15
# Belirli bir noktaya geri dön
dnf history rollback 10
Gerçek dünya senaryosu: Bir paketi kurdun, ancak sistem beklenmedik şekilde davranmaya başladı. dnf history ile hangi işlemin sorun çıkardığını bulursun, ardından dnf history undo ile o kurulumu tamamen geri alırsın. Bu özellik production ortamında seni çok kez kurtaracak.
Kilit Mekanizması: Version Lock
Bir paketin güncellenmesini engellemek istediğinde versionlock plugin’i devreye giriyor. Örneğin bir uygulamanın belirli bir kernel veya kütüphane sürümüne ihtiyacı olduğunda bu çok kritik:
# versionlock plugini kur
dnf install dnf-plugin-versionlock
# Paketi kilitle
dnf versionlock add nginx
# Kilitleri listele
dnf versionlock list
# Kilidi kaldır
dnf versionlock delete nginx
# Tüm kilitleri temizle
dnf versionlock clear
Otomatik Güncellemeler: dnf-automatic
Güvenlik güncellemelerini otomatik uygulamak için dnf-automatic kullanabilirsin:
# Kur
dnf install dnf-automatic
# Konfigürasyonu düzenle
vim /etc/dnf/automatic.conf
# Servisi aktif et ve başlat
systemctl enable --now dnf-automatic.timer
# Timer durumunu kontrol et
systemctl status dnf-automatic.timer
/etc/dnf/automatic.conf dosyasında dikkat etmen gereken temel ayarlar:
- upgrade_type: Değer olarak
default(tüm güncellemeler),security(sadece güvenlik) veyaminimalseçeneklerinden birini alır - apply_updates:
yesyaparsan güncellemeler otomatik uygulanır,nobırakırsan sadece indirilir - emit_via: Bildirim yöntemi,
emailveyastdioolabilir - email_to: Güncelleme raporunun gönderileceği e-posta adresi
Production sunucular için genellikle upgrade_type = security ve apply_updates = yes kombinasyonu tercih edilir. Kernel güncellemelerinin otomatik uygulanması istenirse ayrıca reboot planlaması yapman gerekir.
dnf.conf ile Global Ayarlar
/etc/dnf/dnf.conf dosyası dnf’in genel davranışını kontrol eder:
cat /etc/dnf/dnf.conf
Sık kullanılan ve değiştirilmesi faydalı olan ayarlar:
- keepcache:
1yaparsanız paket dosyaları cache’de tutulur, offline kurulum için faydalı - fastestmirror:
Trueyaparsanız en hızlı mirror otomatik seçilir - max_parallel_downloads: Paralel indirme sayısı, varsayılan 3,
10yapabilirsiniz - installonly_limit: Kaç kernel sürümünün tutulacağı, varsayılan 3
- exclude: Belirli paketleri tüm işlemlerden hariç tut, örneğin
exclude=kernel* - proxy: Kurumsal ağlarda proxy ayarı,
http://proxy.example.com:8080formatında
# Örnek dnf.conf düzenlemesi
cat >> /etc/dnf/dnf.conf << 'EOF'
max_parallel_downloads=10
fastestmirror=True
keepcache=0
EOF
Pratik Senaryo: Minimal Sunucuya LAMP Stack Kurulumu
Tüm öğrendiklerini bir araya getirelim. Minimal Rocky Linux 9 kurulumuna LAMP stack kuralım:
# Sistemi güncel tutarak başla
dnf upgrade -y
# EPEL ve CRB'yi etkinleştir
dnf install -y epel-release
dnf config-manager --set-enabled crb
# Apache kur
dnf install -y httpd
# MariaDB kur
dnf install -y mariadb-server
# PHP 8.2 modülünü aktif et ve kur
dnf module reset php -y
dnf module enable php:8.2 -y
dnf install -y php php-mysqlnd php-fpm php-json php-mbstring php-xml
# Geliştirme araçları (ihtiyaç varsa)
dnf group install -y "Development Tools"
# Servisleri başlat ve enable et
systemctl enable --now httpd mariadb
# Güvenlik duvarı ayarları
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --reload
# Kurulumu doğrula
dnf list installed | grep -E "httpd|mariadb|php"
Bu script bir şablona dönüştürüp farklı sunucularda tekrar kullanabilirsin. -y parametresi sayesinde etkileşim gerektirmeden çalışır.
Sorun Giderme
Zaman zaman dnf ile garip hatalar alabilirsin. En sık karşılaşılanlar ve çözümleri:
# "Failed to download metadata" hatası
dnf clean all
dnf makecache
# GPG key hatası (güvenilir kaynak için)
dnf install --nogpgcheck package-name
# Kırık bağımlılıkları düzelt
dnf distro-sync
# Sistemin repolarla tutarlılığını kontrol et
dnf distro-sync --allowerasing
# İşlemler sırasında kalan kilit dosyasını temizle
rm -f /var/run/dnf.pid
# Debug modu ile detaylı çıktı al
dnf install nginx -v
# En detaylı çıktı
dnf install nginx -vvv
dnf distro-sync komutu, sistemindeki tüm paketleri repodaki mevcut sürümlerle eşleştirmeye çalışır. Özellikle CentOS’tan Rocky Linux’a geçiş yaptıktan sonra veya farklı repolardan yüklenen paketlerin neden olduğu tutarsızlıkları gidermek için idealdir.
Performans İpuçları
Çok sayıda sunucu yönetiyorsan dnf’in ağ trafiğini minimumda tutmak önemli:
- Yerel mirror kurulumu:
createrepo_cile kendi yerel repo’nuzı oluşturup ağ içindeki tüm sunucuları buraya yönlendirebilirsiniz. - dnf-utils paketi:
repoquery,repodiffgibi ekstra araçlar sunar, paket analizi için oldukça faydalı. - Satellite veya Foreman kullanımı: Onlarca veya yüzlerce sunucu varsa merkezi bir paket yönetim platformu düşünülmeli.
- Cache süresi ayarı:
metadata_expiredeğerini artırarak herdnfçağrısında metadata güncellenmesinin önüne geçebilirsiniz.
Sonuç
dnf, yum’un bıraktığı noktadan çok daha ileri bir paket yönetim deneyimi sunuyor. Hızlı dependency resolution, güçlü geçmiş yönetimi, modül sistemi ve otomatik güncelleme desteğiyle Rocky Linux ve CentOS ortamlarında hayatı kolaylaştırıyor. Temel komutları öğrenmek birkaç saatlik bir iş, ama history undo, versionlock ve modül yönetimi gibi ileri özellikleri kavramak seni gerçek anlamda üretken bir sysadmin yapıyor.
Günlük işlerde dnf install, dnf upgrade ve dnf remove yeterliyken, production ortamlarında dnf history, dnf versionlock ve dnf-automatic konfigürasyonunu bilmek kritik fark yaratıyor. Bu yazıdaki örnekleri bir test VM’inde deneyimleyerek başla, sonra üretim sistemlerinde güvenle uygulayabilirsin.