Sunucuda çalışan bir Debian sistemi zamanla köhnemeye başlar. Güvenlik yamaları azalır, paketler eski kalır, bazı yazılımlar artık desteklenmez. İşte tam bu noktada sürüm yükseltme kaçınılmaz hale gelir. Debian’ın en güçlü yanlarından biri, çalışan bir sistemi yeni bir kararlı sürüme (stable) geçirmenin mümkün olmasıdır. Yeniden kurulum gerekmez, veriler yerinde kalır, yapılandırmalar büyük ölçüde korunur. Ama bu süreç dikkat ve hazırlık ister. Yanlış adımlar atıldığında sistem ayağa kalkmayabilir, servisler çakılabilir. Bu yazıda Debian stable’dan stable’a geçişi adım adım, gerçek dünya deneyimlerinden süzülmüş pratik notlarla ele alacağız.
Neden Sürüm Yükseltme Yapmalısın?
Debian’ın yaşam döngüsü oldukça uzundur. Her major sürüm yaklaşık iki yıl boyunca tam destek alır, ardından LTS kapsamına girer. Ancak bir noktadan sonra güvenlik güncellemeleri kesilir ve sistem ciddi riskler taşımaya başlar. Üretim ortamında eski bir Debian sürümü çalıştırmak, özellikle internete açık sunucularda gerçek bir güvenlik sorunudur.
Bunun yanı sıra yazılım gereksinimleri de değişir. PHP 8.x, Python 3.11, PostgreSQL 16 gibi güncel sürümler eski Debian sürümlerinin resmi depolarında yer almaz. Backport çözümleri bir süre işe yarasa da uzun vadede sürdürülebilir değildir.
Sürüm yükseltmenin avantajları:
- Güvenlik: Güncel kernel, güncel OpenSSL, güncel sistem kütüphaneleri
- Yazılım güncelliği: Daha yeni PHP, Python, Go, Node.js sürümleri
- Destek süresi uzaması: Yeni sürümle birlikte yıllarca daha destek alırsın
- Performans: Yeni kernel ve araçlarla gelen optimizasyonlar
- Toplu bakım: Sistemini bir kez güncel tutarsan sonraki yükseltmeler daha kolay geçer
Yükseltme Öncesi Hazırlık
Hiçbir sürüm yükseltmesine hazırlık yapmadan dalmamalısın. Bu kural hem ev bilgisayarları için hem de üretim sunucuları için geçerlidir, ama özellikle production ortamda bu kural altın değerindedir.
Mevcut Sistemi Belgele
Önce neyi yönettiğini tam olarak bilmen gerekir. Hangi servisler çalışıyor, hangi paketler kurulu, hangi portlar dinleniyor?
# Çalışan servisleri listele
systemctl list-units --type=service --state=running > /root/running-services-before.txt
# Kurulu paketleri kaydet
dpkg --get-selections > /root/installed-packages-before.txt
# Dinlenen portları kaydet
ss -tlnp > /root/open-ports-before.txt
# Disk kullanımını kaydet
df -h > /root/disk-usage-before.txt
# Kernel ve sistem bilgisini kaydet
uname -a > /root/system-info-before.txt
cat /etc/debian_version >> /root/system-info-before.txt
Bu dosyalar yükseltme sonrasında karşılaştırma yapman için kritik. Hangi servisin düşük kaldığını, hangi paketin kaybolduğunu bu belgeler sayesinde tespit edebilirsin.
Yedek Al
Bu adımı atlayanların pişmanlıklarını çok duydum. “Sistem yedekten dönüyor muydu?” sorusunun cevabı genellikle “bilmiyorum” oluyor. Yükseltme öncesi mutlaka tam bir yedek almalısın.
Sanal makine kullanıyorsan snapshot almak en hızlı yoldur:
# VMware/Proxmox/KVM snapshot komutu örneği (Proxmox)
# Proxmox web arayüzü üzerinden ya da:
qm snapshot 101 pre-upgrade --description "Debian surum yukseltme oncesi"
Fiziksel sunucu veya snapshot imkanı yoksa rsync ile uzak yedek alabilirsin:
rsync -aAXv --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found"}
/ backup-server:/backups/sunucu-adi-$(date +%Y%m%d)/
Veritabanı sunucusu çalışıyorsa ayrıca veritabanı yedeği de şart:
# PostgreSQL için
pg_dumpall -U postgres > /root/postgres-backup-$(date +%Y%m%d).sql
# MySQL/MariaDB için
mysqldump --all-databases --single-transaction > /root/mysql-backup-$(date +%Y%m%d).sql
Mevcut Sistemi Güncel Tut
Sürüm yükseltmesine başlamadan önce mevcut sürümde tüm güncellemeleri uygulamış olmalısın. Yarım kalmış bir güncelleme yükseltme sürecinde ciddi sorunlara yol açabilir.
apt update
apt upgrade -y
apt full-upgrade -y
apt autoremove -y
apt autoclean
Bu işlemlerden sonra sistemi bir kez yeniden başlatmak iyi bir alışkanlıktır. Özellikle kernel güncellemesi geldiyse kesinlikle yeniden başlatmalısın.
reboot
Sistem tekrar ayağa kalktığında kernel sürümünü kontrol et:
uname -r
Üçüncü Parti Depoları Devre Dışı Bırak
Bu adım çok önemli ve sıkça atlanan bir noktadır. Üçüncü parti depolar (örneğin dotdeb, ondrej/php, nginx resmi deposu vb.) yükseltme sırasında ciddi bağımlılık sorunlarına neden olabilir. Yeni Debian sürümüyle uyumsuz paketler sisteme girebilir.
# /etc/apt/sources.list.d/ dizinindeki tüm ek depoları geçici olarak devre dışı bırak
ls /etc/apt/sources.list.d/
# Her birini .bak uzantısıyla yeniden adlandır
for f in /etc/apt/sources.list.d/*.list; do
mv "$f" "${f}.bak"
done
Bu adımı geri almayı unutma. Yükseltme tamamlandıktan sonra bu depoları yeni sürüme uygun şekilde tekrar yapılandırman gerekecek.
sources.list Dosyasını Güncelle
İşte asıl geçiş adımı buradadır. Debian’ın paket yöneticisi APT, hangi depodan paket çekeceğini /etc/apt/sources.list dosyasından öğrenir. Bu dosyada eski sürümün kod adını yeni sürümün kod adıyla değiştirmen gerekir.
Debian sürüm kod adları:
- Debian 10: buster
- Debian 11: bullseye
- Debian 12: bookworm
- Debian 13: trixie (geliştirme aşamasında)
Örneğin Debian 11’den Debian 12’ye geçiş yapıyorsan bullseye ifadelerini bookworm ile değiştirmen gerekir.
Önce mevcut sources.list dosyasını yedekle:
cp /etc/apt/sources.list /etc/apt/sources.list.bak
Sonra sed ile toplu değişiklik yap:
# Bullseye'dan Bookworm'a geçiş örneği
sed -i 's/bullseye/bookworm/g' /etc/apt/sources.list
Veya manuel düzenlemek istersen:
nano /etc/apt/sources.list
Dosyanın içeriği şu şekilde görünmeli (Bookworm için örnek):
deb http://deb.debian.org/debian bookworm main contrib non-free non-free-firmware
deb-src http://deb.debian.org/debian bookworm main contrib non-free non-free-firmware
deb http://security.debian.org/debian-security bookworm-security main contrib non-free non-free-firmware
deb-src http://security.debian.org/debian-security bookworm-security main contrib non-free non-free-firmware
deb http://deb.debian.org/debian bookworm-updates main contrib non-free non-free-firmware
deb-src http://deb.debian.org/debian bookworm-updates main contrib non-free non-free-firmware
Dikkat etmen gereken bir nokta: Debian 12 ile birlikte non-free-firmware bölümü ayrı bir kategori olarak eklendi. Eğer Debian 11’den geliyorsan bu satırı da eklemeyi unutma.
Paket Listesini Güncelle
sources.list güncellendikten sonra paket listesini yenile:
apt update
Bu komutun çıktısını dikkatlice oku. GPG anahtar hataları veya bağlantı sorunları varsa bunları çözmeden devam etme.
Minimal Yükseltmeyi Yap
Tam yükseltmeye geçmeden önce apt upgrade ile temel paketleri güncellemeyi öneriyorum. Bu adım zorunlu değil ama bazı bağımlılık sorunlarını önceden tespit etmene yardımcı olur:
apt upgrade --without-new-pkgs
Bu komut yeni paket yüklemeden veya paket silmeden güvenli güncellemeleri uygular. Eğer bu aşamada büyük sorunlarla karşılaşırsanız, henüz geri dönmek daha kolaydır.
Asıl Yükseltme: full-upgrade
Hazırlıklar tamam, asıl yükseltme zamanı. full-upgrade komutu bağımlılık değişikliklerini de kapsayan tam bir yükseltme yapar:
apt full-upgrade
Bu komut çalışırken birkaç şey olacak:
- Yüzlerce hatta binlerce paket indirilecek
- Bazı paketlerin yapılandırma dosyaları değişmiş olabilir, hangisini kullanmak istediğin sorulacak
- Bazı eski paketler kaldırılacak, yerlerine yenileri gelecek
Yapılandırma dosyası sorusu: APT sana “Bu dosya hem sizin tarafınızdan hem de yeni paketle değiştirildi, ne yapmak istersiniz?” diye sorabilir. Genellikle seçenekler şunlardır:
- Y veya I: Yeni paketin versiyonunu kur (özelleştirmelerini kaybedersin)
- N: Mevcut versiyonu koru (önerilen, çünkü ayarlarını korursun)
- D: Farkları göster
Kritik servis yapılandırmalarında (nginx.conf, php.ini, sshd_config vb.) mevcut versiyonu korumak genellikle daha güvenlidir. Yükseltme sonrasında bu dosyaları elle inceleyip gerekli değişiklikleri uygulayabilirsin.
Bu süreç ağ hızına ve disk performansına bağlı olarak 10 dakika ile 1 saat arasında sürebilir. Uzak bağlantı üzerinden çalışıyorsan kesinlikle screen veya tmux içinde çalıştır. Bağlantı kesilirse yükseltme yarım kalabilir ve bu çok ciddi sorunlara yol açar:
# Screen başlat
screen -S upgrade
# İçinde yükseltmeyi çalıştır
apt full-upgrade
# Bağlantı koparsa screen -r upgrade ile geri bağlanabilirsin
Gereksiz Paketleri Temizle
Yükseltme tamamlandıktan sonra artık ihtiyaç duyulmayan eski paketleri temizle:
apt autoremove --purge
apt autoclean
--purge parametresi kaldırılan paketlerin yapılandırma dosyalarını da siler. Bunu istemiyorsan sadece apt autoremove kullanabilirsin.
Sistemi Yeniden Başlat
Yükseltme sonrasında mutlaka yeniden başlatmalısın. Yeni kernel, yeni kütüphaneler ve sistem bileşenleri ancak yeniden başlatma ile aktif hale gelir:
reboot
Sisteme geri bağlandığında ilk kontroller:
# Sürümü kontrol et
cat /etc/debian_version
lsb_release -a
# Yeni kernel'i kontrol et
uname -r
# Çalışan servisleri kontrol et
systemctl list-units --type=service --state=running
# Hatalı servisleri kontrol et
systemctl --failed
Yükseltme Sonrası Kontroller
Sistem ayağa kalktı, ama iş bitmedi. Şimdi her şeyin düzgün çalışıp çalışmadığını sistematik olarak kontrol etmen gerekiyor.
Servis Kontrolü
Yükseltme öncesinde kaydettiğin servis listesiyle karşılaştır:
systemctl list-units --type=service --state=running > /root/running-services-after.txt
diff /root/running-services-before.txt /root/running-services-after.txt
Çalışmayan kritik bir servis varsa durumunu incele:
systemctl status servis-adi
journalctl -xe -u servis-adi
Web Sunucusu ve Uygulama Kontrolleri
Eğer web sunucusu çalışıyorsa:
# Nginx syntax kontrolü
nginx -t
# Apache syntax kontrolü
apache2ctl configtest
# PHP sürümünü kontrol et
php -v
Log Kontrolü
Sistem loglarında ciddi hata var mı diye bak:
journalctl -p err -b 0 | tail -50
dmesg | grep -i error | tail -20
Disk Kullanımı
Yükseltme sonrasında disk doluluk oranını kontrol et. Bazen eski kernel imajları ve kullanılmayan paketler disk dolmasına neden olur:
df -h
du -sh /var/cache/apt/
Apt cache’ini temizlemek istersen:
apt clean
Gerçek Dünya Senaryoları ve Sorun Giderme
Senaryo 1: Python Bağımlılığı Sorunu
Debian 11’den 12’ye geçişte Python 3.9’dan 3.11’e atlama yaşandı. Bu süreçte pip ile kurulmuş sistem genelindeki Python paketleri sorun çıkardı. apt full-upgrade sırasında bazı Python tabanlı araçlar kaldırıldı.
Çözüm: Sistem Python’u için bağımlılıkları sanal ortamlarda yönet. Yükseltme sonrasında şunu çalıştır:
# Hangi Python paketlerinin gittiğini kontrol et
python3 -c "import paket_adi" 2>&1
# Eksik paketleri yeniden kur
apt install python3-requests python3-yaml
Senaryo 2: nginx Yapılandırması Üzerine Yazılma
Varsayılan nginx.conf üzerine yeni versiyon yazıldı ve özel yapılandırmalar kayboldu. Bu yüzden yapılandırma dosyalarının yedeğini almak hayat kurtarır.
# Yükseltme öncesi nginx yapılandırmasını yedekle
tar czf /root/nginx-config-backup.tar.gz /etc/nginx/
Senaryo 3: Kernel Module Sorunu
Bazı donanım sürücüleri (özellikle DKMS ile kurulmuş) yeni kernel’de yeniden derlenmesi gerekiyor. Sistemi başlattıktan sonra ağ kartı veya RAID controller tanınmıyorsa:
# DKMS durumunu kontrol et
dkms status
# Modülü yeniden derle
dkms autoinstall
Senaryo 4: APT Bağımlılık Kilitlenmesi
apt full-upgrade sırasında “E: Broken packages” hatası alırsan zorla devam etmeye çalışma. Önce sorunu anla:
apt -f install
dpkg --configure -a
apt full-upgrade
Eğer hala çözülmüyorsa hangi paketin sorun çıkardığını tespit et ve gerekirse önce o paketi kaldır:
apt full-upgrade 2>&1 | grep "but it is not going to be installed"
Üçüncü Parti Depoları Geri Ekle
Yükseltme öncesinde devre dışı bıraktığın üçüncü parti depoları şimdi yeni sürüme uygun şekilde geri ekleyebilirsin. Ama önce her deponun yeni Debian sürümünü destekleyip desteklemediğini kontrol et.
Örneğin Ondrej Sury’nin PHP deposu için:
# Debian 12 için PHP deposu
echo "deb https://packages.sury.org/php/ bookworm main" > /etc/apt/sources.list.d/php.list
# GPG anahtarını ekle
curl -fsSL https://packages.sury.org/php/apt.gpg | gpg --dearmor -o /etc/apt/trusted.gpg.d/php.gpg
apt update
Otomatik Yükseltme vs. Manuel Yükseltme
Üretim ortamlarında sürüm yükseltmelerini her zaman manuel yap. unattended-upgrades sadece güvenlik yamalarını otomatik uygulamak için kullanılmalı, major sürüm yükseltmeleri için asla.
Staging ortamında test et, ardından production’a uygula. Bu prensipten taviz verme.
Eğer birden fazla sunucu yönetiyorsan Ansible gibi araçlarla süreci standartlaştırabilirsin:
# Basit bir Ansible playbook örneği
# upgrade-debian.yml
# ansible-playbook -i inventory upgrade-debian.yml --limit sunucu-adi
Yükseltme Sıklığı ve Planlama
Debian’ın yaklaşık iki yılda bir major sürüm yayımladığını düşünürsen, üretim sunucularını her iki yılda bir yükseltmen gerekiyor demektir. Bu süreyi daha yönetilebilir kılmak için:
- Her sürüm yükseltmesini bir maintenance window planla
- Müşterileri veya kullanıcıları önceden bilgilendir
- Gece saatlerini veya düşük trafik dönemlerini seç
- Yükseltme sonrasında en az 30 dakika izleme yap, acele çıkma
Sonuç
Debian sürüm yükseltmesi, iyi planlandığında son derece başarılı ve güvenli bir şekilde tamamlanabilen bir süreçtir. Önemli olan hazırlık aşamasını ciddiye almak, yedek almak, üçüncü parti depoları geçici olarak devre dışı bırakmak ve yükseltme sırasında sabırlı olmaktır.
Bu işlemi ilk kez yapıyorsan önce bir test ortamında dene. Vagrant veya LXC ile mevcut sistemin bir kopyasını oluşturup sürecin tamamını pratik olarak geçir. İkinci seferinde çok daha hızlı ve güvenli bir şekilde yapabilirsin.
Debian’ın güzelliği tam olarak burada: Doğru yapıldığında sistemin kesintisiz çalışırken bir sonraki nesle taşınır. Binlerce satır yapılandırma, yıllarca birikmiş özelleştirmeler yerli yerinde kalır. Sadece biraz sabır ve dikkat gerektirir.