apt ve yum: Sistem Yöneticileri için Linux Paket Yönetimi Açıklandı
Linux paket yönetimi, bir Linux sisteminde yazılımın kurulduğu, güncellendiği, yapılandırıldığı ve kaldırıldığı mekanizmadır. apt (Advanced Package Tool), Ubuntu ve Linux Mint gibi Debian tabanlı dağıtımlarda `.deb` paketlerini yönetirken, yum (Yellowdog Updater Modified), CentOS ve RHEL dahil Red Hat tabanlı sistemlerde `.rpm` paketlerini yönetir. Her iki araç da bağımlılık çözümleme, depo etkileşimi ve paket bütünlüğü doğrulamasının karmaşıklığını soyutlar — ancak mimari olarak birbirinden farklıdır ve birbirinin yerine kullanılamaz.
Sisteminizi hangi aracın yönettiğini anlamak isteğe bağlı bir bilgi değildir. Bu durum, sunucuları nasıl hazırladığınızı, dağıtımları nasıl otomatikleştirdiğinizi, yapılandırma yönetimi betikleri (Ansible, Chef, Puppet) nasıl yazdığınızı ve üretim ortamlarında güvenlik yama döngülerini nasıl sürdürdüğünüzü doğrudan etkiler.
Linux Paket Yöneticisi Nedir
Bir paket yöneticisi, bir Linux sistemindeki yazılımın tam yaşam döngüsünü otomatikleştiren yazılım araçları bütünüdür: uzak depolardan paket getirme, kriptografik imzaları doğrulama, bağımlılık zincirlerini çözümleme ve kurma, kurulum öncesi/sonrası betikleri çalıştırma ve kurulumu yerel bir paket veritabanına kaydetme.
Paket veritabanı kritik öneme sahiptir ve çoğunlukla göz ardı edilir. Debian tabanlı sistemlerde `/var/lib/dpkg/` konumunda bulunur. RPM tabanlı sistemlerde ise `/var/lib/rpm/` konumunda yer alır. Her iki veritabanı da neyin kurulu olduğuna, hangi sürümde olduğuna ve hangi dosya sahipliğiyle geldiğine dair yetkili kaydı tutar — bu da onları sistem denetimi ve geri alma işlemlerinin omurgası haline getirir.
Paket yöneticileri, derlenmiş ve imzalanmış paketlerin seçilmiş koleksiyonlarını barındıran uzak sunucular olan depolarla etkileşime girer. Depo meta verileri (paket listeleri, sağlama toplamları, GPG anahtarları), herhangi bir kurulum gerçekleşmeden önce yerel olarak senkronize edilir; bu nedenle otomatik betiklerde kurulum komutlarından önce `apt update` veya `yum check-update` çalıştırılması zorunludur.
apt: Debian Tabanlı Sistemler için Advanced Package Tool
apt, Debian, Ubuntu, Linux Mint, Pop!_OS ve tüm türevlerinde paket yönetimi için üst düzey komut satırı arayüzüdür. Gerçek `.deb` paket kurulumunu gerçekleştiren alt düzey `dpkg` aracının üzerinde çalışır. `dpkg`’yi motor, `apt`’yi ise yakıtı nereden alacağını ve hangi sırayla yakacağını bilen akıllı sürücü olarak düşünebilirsiniz.
apt Araç Zincirinin Derinlemesine İncelenmesi
apt ekosistemi, farklı amaçlara hizmet eden çeşitli ikili dosyalar içerir:
- `apt` — modern, önerilen etkileşimli CLI (Ubuntu 14.04 / Debian 8’de tanıtıldı)
- `apt-get` — eski, betiklenebilir arka uç; kararlı çıktı formatı nedeniyle kabuk betiklerinde tercih edilir
- `apt-cache` — meta veriler, açıklamalar ve bağımlılık grafikleri için yerel paket önbelleğini sorgular
- `dpkg` — alt düzey paket yükleyici; `dpkg -i package.deb` ile yerel bir `.deb` dosyası kurulurken doğrudan kullanılır
- `apt-mark` — paketleri tutuldu, otomatik kuruldu veya manuel kuruldu olarak işaretler
Teknik Bağlamıyla Temel apt Komutları
Yerel paket dizinini güncelleme:
“`bash
sudo apt update
“`
Bu komut, `/etc/apt/sources.list` ve `/etc/apt/sources.list.d/` içindeki tüm yapılandırılmış depolardan güncellenmiş meta verileri getirir. Hiçbir şey kurmaz veya yükseltmez. Herhangi bir kurulum işleminden önce bunu çalıştırmak zorunludur — atlamak, güncel olmayan paket sürümlerine çözümleme yapmanıza veya güvenlik yamalarını kaçırmanıza neden olabilir.
Kurulu paketleri yükseltme:
“`bash
sudo apt upgrade
“`
Daha yeni sürümü bulunan tüm paketleri yükseltir, ancak halihazırda kurulu herhangi bir paketi kaldırmaz veya bir bağımlılığı karşılamak için yeni bir paket kurmaz. Bağımlılık değişikliklerini ele alan daha agresif bir yükseltme için:
“`bash
sudo apt full-upgrade
“`
`full-upgrade` (eski adıyla `dist-upgrade`), gerektiğinde yeni bağımlılıklar kurar ve çakışan paketleri kaldırır. Üretim sistemlerinde dikkatli kullanın.
Paket kurma:
“`bash
sudo apt install package_name
“`
Tek bir işlemde birden fazla paket kurmak için:
“`bash
sudo apt install nginx curl git
“`
Kurulumları tek bir komutta birleştirmek daha verimlidir çünkü apt, tam bağımlılık grafiğini tekrar tekrar değil yalnızca bir kez çözümler.
Paket kaldırma (yapılandırma dosyalarını koruma):
“`bash
sudo apt remove package_name
“`
Paketi tamamen temizleme (ikili dosyaları ve yapılandırma dosyalarını kaldırma):
“`bash
sudo apt purge package_name
“`
Bir hizmeti devre dışı bırakırken her zaman `purge`’ü `remove` yerine tercih edin. `remove`’den kalan yapılandırma dosyaları, paket daha sonra yeniden kurulursa beklenmedik davranışlara neden olabilir.
Artık kullanılmayan bağımlılıkları kaldırma:
“`bash
sudo apt autoremove
“`
Bu sık ihmal edilir ve zamanla bağımlılık şişkinliğine yol açar. Düzenli bakım iş akışınıza dahil edin.
Paket arama:
“`bash
apt search package_name
“`
Kurmadan önce paket ayrıntılarını inceleme:
“`bash
apt show package_name
“`
Bu komut, paket sürümünü, kurulu boyutunu, bağımlılıklarını ve sorumlusunu gösterir — tanıdık olmayan bir paketi çekmeden önce kullanışlıdır.
Paketi mevcut sürümünde tutma (üretim kararlılığı için kritik):
“`bash
sudo apt-mark hold package_name
“`
Bu, `apt upgrade`’ın pakete dokunmasını engeller. Belirli bir çekirdek sürümü veya sabitlenmiş bir uygulama sürümü çalıştırırken gereklidir.
Gerçek Dünya apt Kullanım Senaryosu: Ubuntu’da Web Sunucusu Hazırlama
“`bash
sudo apt update
sudo apt install -y nginx certbot python3-certbot-nginx
sudo systemctl enable nginx
sudo systemctl start nginx
“`
`-y` bayrağı onay istemini bastırır; bu, etkileşimsiz hazırlama betikleri için gereklidir. Geçerli depo meta verilerinden kurulum yaptığınızı garanti etmek için bunu her zaman aynı betik bloğunda `apt update` ile eşleştirin.
yum: RPM Tabanlı Sistemler için Yellowdog Updater Modified
yum, Red Hat Enterprise Linux (RHEL), CentOS 7 ve eski Fedora sürümleri için paket yöneticisidir. `.rpm` paketlerini yönetir ve RPM veritabanının üzerinde çalışır. dpkg üzerindeki apt gibi, yum da ham `rpm` komutunun üzerine bağımlılık çözümleme ve depo yönetimi sağlar.
Kritik mimari not: CentOS 8+, RHEL 8+ ve tüm modern Fedora sürümlerinde yum’un yerini dnf (Dandified YUM) almıştır. Bu sistemlerde `yum` komutu genellikle `dnf`’ye sembolik bir bağlantı veya takma addır. RHEL/CentOS 8 veya sonrasını çalıştıran herhangi bir sistemi yönetiyorsanız `dnf` komutları yazıyor olmalısınız. Komut sözdizimi büyük ölçüde uyumludur, ancak dnf önemli ölçüde daha iyi bağımlılık çözümlemesi, daha temiz bir API ve modüler depo desteği sunar.
Teknik Bağlamıyla Temel yum Komutları
Uygulamadan mevcut güncellemeleri kontrol etme:
“`bash
sudo yum check-update
“`
Bu, bir yükseltme tetiklemeden sistemin yamalar konusunda geride olup olmadığını tespit etmek için otomatik izleme betiklerinde özellikle kullanışlıdır.
Mevcut tüm güncellemeleri uygulama:
“`bash
sudo yum update
“`
`apt upgrade`’den farklı olarak, `yum update` gerektiğinde yeni bağımlılık paketleri de kurar. Ayrı bir `full-upgrade` eşdeğeri yoktur — yum bunu varsayılan olarak ele alır.
Paket kurma:
“`bash
sudo yum install package_name
“`
Paket kaldırma:
“`bash
sudo yum remove package_name
“`
Not: yum’un kaldırma işlemi bazen bağımlı paketleri de kaldırabilir. Onaylamadan önce her zaman işlem özetini inceleyin.
Paket arama:
“`bash
yum search package_name
“`
Paket bilgilerini inceleme:
“`bash
yum info package_name
“`
Kurulu paketleri listeleme:
“`bash
yum list installed
“`
Yerel önbelleği temizleme:
“`bash
sudo yum clean all
“`
Önbelleğe alınmış paket verilerini ve meta verileri temizler. Eski depo verilerinin çözümleme hatalarına neden olduğundan şüphelendiğinizde çalıştırın.
Paketi mevcut sürümünde tutma:
“`bash
sudo yum versionlock add package_name
“`
`yum-plugin-versionlock` eklentisi gerektirir. `apt-mark hold`’nin eşdeğeri olan bu komut, belirli bir paket sürümünün otomatik güncellemeler tarafından değiştirilmemesi gereken kararlı üretim ortamlarını sürdürmek için gereklidir.
Gerçek Dünya yum Kullanım Senaryosu: CentOS 7’de Apache Dağıtımı
“`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
“`
Yaygın bir hata, Apache’yi kurup güvenlik duvarını açmayı unutmaktır. CentOS/RHEL sistemlerinde `firewalld` varsayılan olarak etkindir ve hizmet çalışıyor olsa bile HTTP trafiğini sessizce engeller.
apt ve yum: Doğrudan Karşılaştırma
| Özellik | apt (Debian/Ubuntu) | yum / dnf (RHEL/CentOS/Fedora) |
|---|
| — | — | — |
|---|
| Paket formatı | `.deb` | `.rpm` |
|---|
| Temel araç | `dpkg` | `rpm` |
|---|
| Birincil dağıtımlar | Debian, Ubuntu, Mint, Pop!_OS | RHEL, CentOS, Fedora, AlmaLinux, Rocky Linux |
|---|
| Halef / modern CLI | `apt` (etkileşimli kullanım için `apt-get`’ın yerini aldı) | `dnf` (RHEL 8+’da `yum`’ın yerini aldı) |
|---|
| Bağımlılık çözümleme | Otomatik, çakışmaları ele alır | Otomatik; dnf, yum’dan daha sağlamdır |
|---|
| Depo yapılandırması | `/etc/apt/sources.list`, `/etc/apt/sources.list.d/` | `/etc/yum.repos.d/*.repo` |
|---|
| Paket tutma mekanizması | `apt-mark hold` | `yum versionlock` (eklenti gerektirir) |
|---|
| Yerel paket kurulumu | `dpkg -i file.deb` | `rpm -i file.rpm` veya `yum localinstall` |
|---|
| Önbellek yönetimi | `apt clean`, `apt autoclean` | `yum clean all` |
|---|
| Artık kullanılmayan paket kaldırma | `apt autoremove` | `yum autoremove` (dnf bunu daha iyi ele alır) |
|---|
| İşlem geçmişi | Sınırlı | `yum history` aracılığıyla geri alma ile tam işlem geçmişi |
|---|
| Modül akışları | Yerel olarak desteklenmiyor | dnf’de destekleniyor (Uygulama Akışları) |
|---|
| GPG imza doğrulama | Evet | Evet |
|---|
| Betik dostu bayrak | `-y` (etkileşimsiz) | `-y` (etkileşimsiz) |
|---|
dnf: yum’un Modern Halefi
Herhangi bir RHEL 8+, CentOS Stream, AlmaLinux, Rocky Linux veya Fedora sistemini yönetiyorsanız dnf sizin paket yöneticinizdir. yum’dan dnf’ye geçiş kozmetik değildir — dnf, yum’daki uzun süredir devam eden bir dizi mimari sorunu çözer:
- Bağımlılık çözümleme: dnf, yum’un çözümleyicisinden önemli ölçüde daha hızlı ve doğru olan `libsolv` kütüphanesini kullanır
- API kararlılığı: dnf, betik yazma ve otomasyon için kararlı bir Python API’si sunar
- Modül akışları: dnf, Uygulama Akışlarını destekler ve aynı yazılımın birden fazla sürümünün (örn. PHP 7.4 ve PHP 8.1) depolarda bir arada bulunmasına olanak tanır
- İşlem geri alma: `dnf history undo <id>`, belirli bir işlemi geri almanıza olanak tanır — apt’te doğrudan eşdeğeri olmayan bir özellik
yum’dan farklı olan temel dnf komutları:
“`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
“`
Depo Yönetimi: Kritik Bir Operasyonel Beceri
Hem apt hem de yum/dnf, yalnızca kullanmak üzere yapılandırıldıkları depolar kadar kullanışlıdır. Yanlış yapılandırılmış veya güvenilmeyen depolar önemli bir güvenlik riski oluşturur.
Debian/Ubuntu’da, üçüncü taraf bir depoyu güvenli şekilde ekleme:
“`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
“`
RHEL/CentOS’ta, depo ekleme:
“`bash
sudo yum-config-manager –add-repo https://repo.example.com/centos/example.repo
Or manually create /etc/yum.repos.d/example.repo
“`
Güvenlik ilkesi: GPG anahtarını bağımsız olarak doğrulamadan asla depo eklemeyin. Ele geçirilmiş bir depo, root ayrıcalıklarıyla kurulacak kötü amaçlı paketler gönderebilir.
Sunucu Ortamınız için Doğru Paket Yöneticisini Seçme
Kullandığınız paket yöneticisi Linux dağıtımınız tarafından belirlenir — apt veya yum’u bağımsız olarak seçemezsiniz. Seçtiğiniz şey dağıtımınızdır ve bu kararın paket kullanılabilirliği, kurumsal destek sözleşmeleri, güvenlik yama sıklığı ve araç uyumluluğu açısından sonuçları vardır.
- Ubuntu LTS (apt): Genel amaçlı VPS Hosting iş yükleri, web sunucuları ve geliştirici ortamları için en iyi seçim. Uzun vadeli destek sürümleri, Ubuntu Pro ile 10 yıla uzatılabilen 5 yıllık güvenlik güncellemesi alır.
- RHEL / AlmaLinux / Rocky Linux (dnf): Özellikle sertifikalı yazılım yığınları, uyumluluk çerçeveleri (PCI-DSS, HIPAA) veya ISV destekli uygulama dağıtımları gerektiren Dedicated Servers üzerinde çalışan kurumsal üretim ortamları için standart.
- Debian Stable (apt): Son derece muhafazakâr paket sürümleri, kararlılığın son teknoloji yazılımın önünde tutulduğu sunucular için idealdir. Uzun süreli çalışan veritabanı ve posta sunucuları için yaygın olarak kullanılır.
- CentOS Stream / Fedora (dnf): Kararlı sürümlere gelmeden önce yukarı akış RHEL değişikliklerini takip etmek istediğiniz geliştirme ve hazırlık ortamları için uygundur.
cPanel gibi bir kontrol paneli dağıtırken, temel paket yöneticisi önemli ölçüde önem taşır. cPanel resmi olarak AlmaLinux, Rocky Linux ve CloudLinux’u destekler — bunların hepsi dnf tabanlıdır. cPanel ile VPS kullanıyorsanız, modern dağıtımlarda dnf ortamında çalışıyor olacaksınız.
Komut satırına inmeden paketleri ve sunucu yapılandırmasını yönetmek için grafik veya web tabanlı bir arayüze ihtiyaç duyduğunuz ortamlarda, arka planda apt veya dnf’yi kullanırken paket yönetimini bir kullanıcı arayüzüne soyutlayan VPS Kontrol Panellerini keşfedin.
Paket Yönetimi Aracılığıyla Güvenlik Sertleştirme
Paket yöneticileri, tedarik zinciri saldırıları için birincil saldırı yüzeyidir. Bu uygulamalar, internete açık herhangi bir sunucuda tartışmasızdır:
- Otomatik güvenlik güncellemelerini etkinleştirin — Ubuntu’da: `unattended-upgrades` paketi. RHEL/CentOS’ta: `/etc/dnf/automatic.conf` içinde `apply_updates = yes` ile `dnf-automatic`.
- GPG imzalarını doğrulayın — İzole laboratuvar ortamları dışında GPG kontrolünü devre dışı bırakmayın (yum/dnf’de `–nogpgcheck` veya apt’te `–allow-unauthenticated`).
- Kurulu paketleri düzenli olarak denetleyin — Tam paket listesi oluşturmak için `dpkg -l` veya `rpm -qa` kullanın. Bunu bilinen iyi bir temel çizgiyle karşılaştırın.
- Gereksiz paketleri kaldırın — Her kurulu paket bir saldırı yüzeyidir. Büyük dağıtımlardan sonra `apt autoremove` veya `dnf autoremove` çalıştırın.
- Kritik paketleri sabitleyin — Üretim sistemlerinde çekirdek, OpenSSL veya veritabanı motorları gibi paketlerin istenmeyen yükseltmelerini önlemek için `apt-mark hold` veya `dnf versionlock` kullanın.
Bir posta sunucusu çalıştırıyorsanız veya e-posta altyapısı barındırıyorsanız, Postfix, Dovecot ve TLS bağımlılıkları gibi paketleri güncel tutmak özellikle kritiktir. Şifreli aktarım güvenliğini sürdürmek için titiz paket yönetimini doğru yapılandırılmış SSL Sertifikaları ile eşleştirin. Benzer şekilde, Paylaşımlı Web Hosting platformları aracılığıyla yönetilen web barındırma ortamları, temel paket güvenliğini sürdüren barındırma sağlayıcısından yararlanır; ancak paket katmanını anlamak hata ayıklama ve özel yapılandırma için değerini korur.
Pratik Karar Matrisi ve Temel Çıkarımlar
Üretim sisteminde herhangi bir paket yönetimi komutu çalıştırmadan önce bu kontrol listesini gözden geçirin:
İşlem öncesi kontrol listesi:
- Hangi dağıtım ve sürümü çalıştırdığınızı doğrulayın: `cat /etc/os-release`
- Doğru paket yöneticisini doğrulayın: `which apt` veya `which dnf` veya `which yum`
- apt sistemlerinde: `sudo apt update`’ı her zaman `apt install` veya `apt upgrade`’dan önce çalıştırın
- yum/dnf sistemlerinde: yükseltmelerden önce `sudo yum check-update` veya `sudo dnf check-update`
- Herhangi bir kurulum veya kaldırma işlemini onaylamadan önce işlem özetini inceleyin
- Üretim sunucuları için: paket yükseltmelerini önce hazırlık ortamında test edin
- Büyük yükseltmelerden sonra: `systemctl status <service>` ile hizmet durumunu doğrulayın
- Paket kaldırdıktan sonra: artık kullanılmayanları temizlemek için `apt autoremove` veya `dnf autoremove` çalıştırın
Mimari kararlar:
- Paketlerin kaldırılabileceğini anlayıp kabul ettiğinizde yalnızca `apt full-upgrade`’ü `apt upgrade` yerine kullanın
- RHEL 8 / CentOS 8 veya sonrasını çalıştıran herhangi bir sistemde `dnf`’ü `yum` yerine kullanın
- Kararlı, ayrıştırılabilir çıktı için kabuk betiklerinde ve CI/CD pipeline’larında `apt-get`’ü (`apt` değil) kullanın
- Otomatik güncelleme pipeline’ı üretim sunucusuna dokunmadan önce `yum versionlock` veya `apt-mark hold` kullanın
- GPG anahtarlarını içe aktarıp doğrulamadan asla üçüncü taraf depo eklemeyin
SSS
apt ile apt-get arasındaki fark nedir?
`apt`, `apt-get` ve `apt-cache`’ü daha temiz çıktı ve ilerleme çubuğuyla tek bir araçta birleştirmek için tanıtılan modern, kullanıcıya yönelik komuttur. `apt-get` hâlâ kullanılabilir durumdadır ve çıktı formatının sürümler arasında kararlı olması garanti edildiğinden betiklerde tercih edilir. Etkileşimli terminal kullanımı için `apt` güncel standarttır.
CentOS veya RHEL sunucusunda apt kullanabilir miyim?
Hayır. apt yalnızca Debian tabanlı sistemler içindir ve `.deb` paketlerini yönetir. CentOS ve RHEL, yum veya dnf tarafından yönetilen RPM paket formatını kullanır. Paket formatları ve veritabanları mimari olarak uyumsuzdur — dönüştürme katmanı yoktur.
apt autoremove’un yum karşılığı nedir?
`sudo yum autoremove` veya `sudo dnf autoremove`, bağımlılık olarak kurulmuş ancak artık açıkça kurulu herhangi bir paket tarafından gerektirilmeyen paketleri kaldırır. dnf uygulaması, eski yum sürümünden daha güvenilirdir.
Belirli bir paketin apt veya yum tarafından yükseltilmesini nasıl önlerim?
apt tabanlı sistemlerde: `sudo apt-mark hold package_name`. yum/dnf sistemlerinde: `yum-plugin-versionlock` eklentisini kurun ve `sudo yum versionlock add package_name` çalıştırın ya da dnf’de: `sudo dnf versionlock add package_name`. Her iki mekanizma da açıkça serbest bırakılana kadar `upgrade` ve `update` komutlarından etkilenmez.
yum 2024’te hâlâ geçerli mi?
Üretimde hâlâ çalışan CentOS 7 ve RHEL 7 sistemleri için evet — yum paket yöneticisi olmaya devam etmektedir. Ancak CentOS 7, Haziran 2024’te kullanım ömrünün sonuna ulaştı. Hâlâ CentOS 7 çalıştıran herhangi bir sistemin AlmaLinux 8/9 veya Rocky Linux 8/9’a taşınması gerekir; her ikisi de dnf kullanır. Yalnızca yum’u hedefleyen yeni otomasyon betikleri yazmak artık tavsiye edilmez.
