Ubuntu sunucularını yönetirken er ya da geç resmi depolardan bulamadığın bir pakete ihtiyaç duyarsın. Ya en güncel PHP sürümü gerekiyor, ya özel bir monitoring aracı kurman lazım, ya da geliştirici ekibinin kullandığı araç sadece kendi deposunda mevcut. İşte tam bu noktada PPA’lar devreye giriyor. Personal Package Archive, yani Kişisel Paket Arşivi, Ubuntu’nun resmi depolarında bulunmayan ya da daha güncel versiyonlarını sunmak isteyen geliştiricilerin Launchpad platformu üzerinden yayınladığı ek paket depolarıdır. Bu yazıda PPA sistemini derinlemesiyle ele alacağız, nasıl çalıştığını anlayacağız ve gerçek dünya senaryolarında nasıl kullanacağını göstereceğiz.
PPA Nedir ve Neden Lazım?
Ubuntu’nun resmi paket depoları kararlılık odaklıdır. Bir paket Ubuntu’nun resmi depolarına girebilmek için ciddi bir test sürecinden geçmek zorunda. Bu durum güvenlik açısından iyi ama her zaman en güncel yazılımı kullanmak isteyenler için bir dezavantaj. Örneğin Ubuntu 22.04 LTS’in resmi depolarında PHP 8.1 varken sen PHP 8.3 kullanmak istiyorsun. İşte PPA burada seni kurtarıyor.
Launchpad, Canonical’ın geliştirici topluluğu için sunduğu bir platform. Geliştiriciler buraya kendi PPA’larını yükleyebiliyor ve sen de bu PPA’ları sisteme ekleyerek resmi depolardan farklı ya da daha güncel paketlere ulaşabiliyorsun.
Dikkat edilmesi gereken nokta şu: PPA’lar Canonical tarafından doğrulanmış değil. Bir PPA eklemek, o geliştiricinin koduna belirli bir güven duymak anlamına geliyor. Bu yüzden tanımadığın ya da toplulukta iyi bir itibarı olmayan PPA’ları üretim sunucularına eklememek en sağlıklı yaklaşım.
PPA Eklemenin Teknik Altyapısı
Bir PPA eklediğinde aslında arka planda birkaç şey oluyor. Önce Launchpad’deki deponun GPG anahtarı sisteme ekleniyor, ardından depo adresi /etc/apt/sources.list.d/ dizinine yeni bir .list dosyası olarak kaydediliyor. Bu sayede apt update çalıştırdığında yeni depo da taranmaya başlıyor.
Ubuntu 22.04 ve sonrasında bu süreç biraz değişti. Yeni yöntemde GPG anahtarları /etc/apt/keyrings/ dizininde saklanıyor ve .sources formatındaki dosyalar kullanılıyor. Bunu birazdan detaylı ele alacağız.
Sisteme add-apt-repository Aracını Tanımak
add-apt-repository komutu, PPA ekleme işlemini kolaylaştıran yardımcı araçtır. Ubuntu’da software-properties-common paketinin içinde gelir. Minimal kurulum yaptıysan bu paket sistemde olmayabilir.
sudo apt update
sudo apt install -y software-properties-common
Kurulum tamamlandıktan sonra add-apt-repository komutunu kullanmaya hazırsın.
Pratik Senaryo 1: PHP 8.3 için Ondrej PPA
PHP geliştirme ortamları için en yaygın kullanılan PPA, Ondrej Sury’nin yönettiği PHP deposudur. Ubuntu’nun resmi depolarından daha güncel PHP sürümleri sunar ve topluluk tarafından geniş çapta güvenilirdir.
# Önce mevcut sistemi güncelleyelim
sudo apt update && sudo apt upgrade -y
# PPA'yı ekleyelim
sudo add-apt-repository ppa:ondrej/php
# Depoları güncelleyelim
sudo apt update
# PHP 8.3 ve yaygın uzantıları kuralım
sudo apt install -y php8.3 php8.3-fpm php8.3-cli php8.3-mysql php8.3-curl php8.3-xml php8.3-mbstring
Bu işlemin ardından sisteminde birden fazla PHP sürümü olabilir. Hangi sürümün aktif olduğunu kontrol etmek için:
php --version
update-alternatives --list php
Eğer birden fazla PHP sürümü varsa ve varsayılan sürümü değiştirmek istersen:
sudo update-alternatives --set php /usr/bin/php8.3
Arka Planda Ne Oluyor? Depo Dosyalarını İnceleyelim
PPA ekledikten sonra sisteme tam olarak ne eklendiğini anlamak için biraz araştıralım.
# Eklenen depo dosyasını görüntüleyelim
ls -la /etc/apt/sources.list.d/
# Ondrej PHP deposunun içeriğini inceleyelim
cat /etc/apt/sources.list.d/ondrej-ubuntu-php-jammy.list
Eski formatta bu dosya şuna benzer bir içeriğe sahip olur:
deb https://ppa.launchpadcontent.net/ondrej/php/ubuntu jammy main
# deb-src https://ppa.launchpadcontent.net/ondrej/php/ubuntu jammy main
Satırdaki jammy kısmı Ubuntu sürümünün kod adıdır. Ubuntu 20.04 için focal, Ubuntu 22.04 için jammy, Ubuntu 24.04 için noble kullanılır.
GPG Anahtarlarını Yönetmek
Güvenlik açısından kritik bir konu da GPG anahtarlarının yönetimidir. Eski yöntemde anahtarlar /etc/apt/trusted.gpg.d/ dizinine ya da doğrudan apt-key ile sisteme eklenirdi. Bu yöntem artık deprecated sayılıyor.
# Sistemdeki mevcut anahtarları listele
apt-key list
# Yeni yöntemle anahtar eklemek (manuel PPA kurulumu için)
curl -fsSL https://example.com/repo/gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/example-repo.gpg
Pratik Senaryo 2: Manuel PPA Ekleme (Yeni Yöntem)
Her zaman add-apt-repository ile PPA ekleyemezsin. Bazı depolar Launchpad dışında barındırılıyor ve kurulum adımları farklı olabiliyor. Örneğin Grafana’nın kendi deposunu ekleyelim:
# GPG anahtarını indir ve sisteme ekle
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://apt.grafana.com/gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/grafana.gpg
# Depo dosyasını oluştur
echo "deb [signed-by=/etc/apt/keyrings/grafana.gpg] https://apt.grafana.com stable main" |
sudo tee /etc/apt/sources.list.d/grafana.list
# Depoları güncelle ve Grafana'yı kur
sudo apt update
sudo apt install -y grafana
Bu yöntem daha güvenli çünkü her depo için ayrı bir anahtar dosyası kullanıyorsun ve hangi anahtarın hangi depoyu imzaladığını net biçimde belirtiyorsun.
PPA’ları Listelemek ve Yönetmek
Sisteme eklediğin PPA’ları takip etmek önemli. Zaman içinde bazı PPA’lar güncellenmez hale gelebilir ya da artık ihtiyaç duymadığın bir PPA kalmış olabilir.
# Tüm aktif depoları listele
grep -r "^deb " /etc/apt/sources.list /etc/apt/sources.list.d/
# Sadece PPA'ları filtrele
grep -r "ppa.launchpadcontent.net|ppa.launchpad.net" /etc/apt/sources.list.d/
# Daha okunabilir çıktı için
apt-cache policy | grep -i "ppa|launchpad"
apt-cache policy komutu aynı zamanda bir paketin hangi depodan geldiğini görmek için de kullanışlıdır:
apt-cache policy php8.3
Bu komutun çıktısında paketin hangi depolardan sunulduğunu ve öncelik sıralamasını görebilirsin.
PPA Kaldırma İşlemi
Bir PPA’yı sisteme eklemek kadar düzgünce kaldırmak da önemli. Sadece depo dosyasını silersen paketler sistemde kalmaya devam eder. Doğru adımlar şöyle:
# PPA'yı kaldır (--remove flag'i ile)
sudo add-apt-repository --remove ppa:ondrej/php
# Ya da ppa-purge aracını kullanarak hem PPA'yı kaldır hem paketleri düşür
sudo apt install -y ppa-purge
sudo ppa-purge ppa:ondrej/php
ppa-purge aracı özellikle üretim ortamlarında işe yarar. Bu araç sadece PPA’yı kaldırmakla kalmaz, o PPA’dan kurulmuş paketleri Ubuntu’nun resmi depolarındaki sürümlere geri döndürür. Bir PPA’dan gelen paketi kaldırmadan önce bunu kullanmak daha güvenli bir geçiş sağlar.
Manuel eklediğin depoları kaldırmak için ise:
# Depo listesi dosyasını sil
sudo rm /etc/apt/sources.list.d/grafana.list
# GPG anahtarını sil
sudo rm /etc/apt/keyrings/grafana.gpg
# Depo önbelleğini temizle
sudo apt update
Paket Önceliklerini Yönetmek: apt-pinning
Birden fazla depo ekledikten sonra zaman zaman çakışmalar yaşanabilir. Hangi deponun hangi paketler için öncelikli olduğunu apt-pinning ile kontrol edebilirsin.
# /etc/apt/preferences.d/ dizinine yeni bir pin dosyası oluştur
sudo nano /etc/apt/preferences.d/php-pin
Dosya içeriği şöyle olabilir:
Package: php*
Pin: release o=LP-PPA-ondrej-php
Pin-Priority: 900
Package: *
Pin: release o=Ubuntu
Pin-Priority: 500
Bu konfigürasyon php paketleri için Ondrej PPA’sına, diğer tüm paketler için Ubuntu resmi depolarına öncelik verir.
Mevcut öncelikleri kontrol etmek için:
apt-cache policy
apt-cache policy php8.3-fpm
Pratik Senaryo 3: Docker Deposu Ekleme
Docker’ın resmi deposunu eklemek, PPA dışı depo eklemenin iyi bir örneğidir. Docker, Ubuntu’nun resmi depolarında bulunsa da Canonical’ın dağıttığı sürüm Docker’ın kendi dağıttığından geride kalabilir.
# Gerekli bağımlılıkları kur
sudo apt update
sudo apt install -y ca-certificates curl gnupg
# Docker'ın GPG anahtarını ekle
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg |
sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
# Docker deposunu ekle
echo
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg]
https://download.docker.com/linux/ubuntu
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" |
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# Güncelle ve Docker'ı kur
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
Bu kurulumda $(dpkg --print-architecture) ifadesi sisteminin mimarisini otomatik algılar (amd64, arm64 vb.), $(. /etc/os-release && echo "$VERSION_CODENAME") ise Ubuntu sürüm adını otomatik alır. Bu tür dinamik ifadeler depo dosyalarını farklı sistemlerde yeniden kullanılabilir kılar.
Güvenlik Konuları ve En İyi Uygulamalar
PPA kullanımında güvenlik göz ardı edilemez. Özellikle üretim sunucularında dikkat etmen gereken birkaç kritik nokta var.
PPA güvenilirliğini değerlendirmek için:
- Launchpad’deki PPA sayfasını incele, yayıncının kimliğine bak
- PPA’nın son güncellenme tarihine dikkat et, uzun süredir güncellenmemiş depolar sorun çıkarabilir
- Topluluk forumlarında ve GitHub’da PPA hakkındaki yorumları oku
- Paketin ne kadar indirme aldığına bak, popüler PPA’lar genellikle daha güvenlidir
Üretim ortamı için öneriler:
- Yeni bir PPA’yı önce test ortamında dene
- PPA eklemeden önce sistemin tam yedeğini al
- Hangi sunucuya hangi PPA’yı eklediğini belgelere kaydet
- Ansible ya da Salt gibi konfigürasyon yönetim araçlarıyla PPA eklemelerini otomatize et ve merkezi tut
Depo İmzalarını Doğrulamak
# Bir deponun imzasını manuel olarak doğrula
gpg --verify /var/lib/apt/lists/partial/*.gpg 2>&1
# Sistemdeki tüm GPG anahtarlarını listele
gpg --no-default-keyring --keyring /etc/apt/trusted.gpg --list-keys
ls /etc/apt/keyrings/
Sorun Giderme
PPA eklerken ya da kullanırken karşılaşabileceğin yaygın sorunlar ve çözümleri:
“NO_PUBKEY” hatası alıyorsun:
# Hata mesajındaki anahtar ID'sini kullanarak anahtarı ekle
# Örneğin: NO_PUBKEY 871920D1991BC93C
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 871920D1991BC93C
# Ya da yeni yöntemle
gpg --keyserver keyserver.ubuntu.com --recv-keys 871920D1991BC93C
gpg --export 871920D1991BC93C | sudo tee /etc/apt/keyrings/missing-key.gpg > /dev/null
“404 Not Found” hatası alıyorsun:
Bu genellikle PPA’nın kullandığın Ubuntu sürümünü desteklememesi anlamına gelir. Örneğin Ubuntu 24.04 için hazırlanmamış bir PPA’yı eklemeye çalışıyorsun.
# Ubuntu sürüm kodunu kontrol et
lsb_release -cs
# Depo dosyasını incele ve sürüm kodunu doğrula
cat /etc/apt/sources.list.d/sorunlu-depo.list
“Duplicate sources.list entry” uyarısı:
# Çakışan girişleri bul
grep -r "ppa.launchpadcontent.net/ondrej/php" /etc/apt/sources.list /etc/apt/sources.list.d/
# Fazladan olanı kaldır
sudo rm /etc/apt/sources.list.d/fazladan-dosya.list
sudo apt update
Otomasyon: Ansible ile PPA Yönetimi
Birden fazla sunucu yönetiyorsan PPA eklemeleri için Ansible kullanmak hayatını kolaylaştırır. Tek tek sunucuya bağlanıp komut çalıştırmak yerine merkezi bir playbook ile yönetebilirsin.
# Örnek bir Ansible task yapısı (YAML formatında)
# tasks/main.yml
- name: software-properties-common kur
apt:
name: software-properties-common
state: present
update_cache: yes
- name: Ondrej PHP PPA ekle
apt_repository:
repo: ppa:ondrej/php
state: present
update_cache: yes
- name: PHP 8.3 paketlerini kur
apt:
name:
- php8.3
- php8.3-fpm
- php8.3-mysql
- php8.3-curl
state: present
Bu yaklaşım hem tekrar edilebilir hem de idempotent. Aynı playbook’u birden fazla çalıştırsan bile sonuç değişmez.
PPA ve LTS Sürümlerinde Dikkat Edilecekler
Ubuntu LTS sürümlerine PPA eklerken bazı ek dikkat noktaları var. LTS sürümleri uzun süre destek gördüğü için, bir PPA yeni Ubuntu sürümleri için güncellenmiş olsa bile eski LTS sürümü için destek sona ermiş olabilir.
Ubuntu sürümünü yükseltmeden önce sistemindeki PPA’ları kontrol etmek önemli. Yeni Ubuntu sürümüne geçtikten sonra bazı PPA’lar yeni sürümü henüz desteklemeyebilir.
# Sürüm yükseltmeden önce PPA durumunu kontrol et
do-release-upgrade --check-dist-upgrade-only
# Tüm aktif PPA'ları listele ve not al
grep -r "ppa.launchpadcontent.net" /etc/apt/sources.list.d/ | grep "^[^#]"
Sürüm yükseltme işlemi sırasında Ubuntu, tanıdık olmadığı depoları devre dışı bırakır. Yükseltme sonrasında bu depoları tekrar etkinleştirmek ya da güncellemek gerekebilir.
Sonuç
PPA’lar Ubuntu ekosisteminin güçlü bir parçası. Resmi depolarda olmayan yazılımlara erişim sağlamak ya da daha güncel sürümleri kullanmak için vazgeçilmez bir araç. Ama bu gücü kullanırken sorumlu olmak gerekiyor.
Özetle akılda tutman gerekenler şunlar: Güvenilirliği kanıtlanmış PPA’ları tercih et, özellikle üretim ortamlarında her PPA eklemesini belgele, ppa-purge gibi araçlarla temiz kaldırma işlemleri yap ve mümkün olan her yerde yeni GPG anahtar yönetimi standardına geç.
Sistem yöneticisi olarak bu detaylara hakim olmak seni hem sorun anında hızlı çözüme götürür hem de güvenli bir altyapı kurmanı sağlar. PPA sistemi doğru kullanıldığında Ubuntu’yu çok daha esnek bir platform haline getirir. Yanlış kullanıldığında ise sistemin tutarsız bir hale gelmesine yol açabilir. Bu denge her zaman aklında olsun.