Haziran 2024’te CentOS 7, resmi olarak End of Life sürecine girdi ve bu tarihten itibaren güvenlik yamaları, hata düzeltmeleri ve teknik destek tamamen sona erdi. Eğer hâlâ CentOS 7 üzerinde üretim ortamı işletiyorsan, bu yazı tam sana göre. Panik yapmaya gerek yok ama harekete geçmek için de artık gerçekten geç kalınmış sayılır. Gelin mevcut seçenekleri, göç süreçlerini ve dikkat edilmesi gereken kritik noktaları tek tek ele alalım.
CentOS 7 EOL Durumu ve Riskleri
CentOS 7, RHEL 7 tabanlı ve uzun yıllar boyunca kurumsal ortamların vazgeçilmezi olmuş bir dağıtımdı. Red Hat’in 2020’de CentOS’un geleneksel yolunu değiştirip CentOS Stream’e yönelmesi, milyonlarca sunucuyu bir anda belirsizliğe sürükledi.
EOL sonrasında karşılaşabileceğin somut riskler şunlar:
- Güvenlik açıkları: Yeni keşfedilen CVE’ler için herhangi bir yama yayınlanmayacak. Bu, saldırı yüzeyinin her geçen gün büyümesi anlamına geliyor.
- Uyumluluk sorunları: PCI-DSS, HIPAA, ISO 27001 gibi uyumluluk standartları desteklenmeyen işletim sistemi kullanımını açıkça yasaklıyor.
- Yazılım desteği: Çoğu yazılım satıcısı CentOS 7 üzerinde destek vermeyi bıraktı. Açtığın destek taleplerinde “önce işletim sistemini güncelleyin” yanıtıyla karşılaşacaksın.
- Yeni paket eksikliği: EPEL ve diğer repolar CentOS 7 için paket güncellemeyi yavaşlattı, bazıları tamamen durdurdu.
Geçiş Seçenekleri Neler?
Elinde birkaç farklı yol var. Hangisini seçeceğin; mevcut altyapının karmaşıklığına, bütçene ve ekibinin kapasitesine göre değişecek.
1. Rocky Linux 8 veya 9’a Geçiş
Rocky Linux, CentOS’un eski rolünü devralmak için Greg Kurtzer tarafından kuruldu. RHEL ile birebir uyumlu, topluluk destekli ve tamamen ücretsiz. Kurumsal ortamlar için en popüler seçenek haline geldi.
Rocky Linux 8: RHEL 8 tabanlı, 2029’a kadar destek var. Rocky Linux 9: RHEL 9 tabanlı, 2032’ye kadar destek var. Eğer uzun vadeli düşünüyorsan doğrudan 9’a geçmek mantıklı.
2. AlmaLinux’a Geçiş
CloudLinux ekibi tarafından geliştirilen AlmaLinux de RHEL uyumlu, ücretsiz ve topluluk destekli. Rocky Linux ile neredeyse aynı özellikleri taşıyor. Bazı ekipler AlmaLinux’un daha hızlı güvenlik yaması yayınladığını öne sürüyor, ancak pratikte ikisi arasındaki fark minimaldir.
3. RHEL’e Geçiş (Ücretsiz Geliştirici Lisansı)
Red Hat, küçük ortamlar için 16 sunucuya kadar ücretsiz RHEL lisansı sunuyor. Büyük kurumlar için ücretli lisans modelini değerlendirmek gerekiyor. Red Hat desteği, sertifikalı yazılımlar ve öngörülebilir yaşam döngüsü istiyorsan bu seçenek mantıklı.
4. Oracle Linux
Oracle Linux da RHEL uyumlu ve ücretsiz bir seçenek. Oracle’ın kendi Ksplice teknolojisiyle yeniden başlatma gerektirmeyen çekirdek güncellemesi sunması önemli bir avantaj. Ancak bazı ekipler Oracle bağımlılığından çekiniyor.
5. EL7 Genişletilmiş Destek (TuxCare/AlmaLinux ELS)
Hemen göç edemiyorsan, TuxCare veya AlmaLinux’un sunduğu ücretli genişletilmiş destek seçeneği bir köprü çözümü olabilir. Bu servisler CentOS 7 için güvenlik yamalarını ek ücret karşılığında sunmaya devam ediyor. Bu bir son çare çözümü; uzun vadeli strateji olarak düşünme.
Rocky Linux’a Yerinde Geçiş (In-Place Migration)
En çok tercih edilen senaryo yerinde geçiş, yani mevcut sunucuyu yeni bir kurulum yapmadan Rocky Linux’a dönüştürmek. Bunun için migrate2rocky aracı kullanılıyor.
Önemli uyarı: Yerinde geçiş CentOS 7’den direkt Rocky Linux 8’e değil, önce CentOS 7’yi Rocky Linux 7 eşdeğerine (aslında bu pek mantıklı değil), ardından yükseltme yapılıyor. Gerçekte CentOS 7’den Rocky Linux 8’e direkt yerinde geçiş desteklenmiyor. Desteklenen yol CentOS 8’den Rocky Linux 8’e geçiş. CentOS 7 için en sağlıklı yol temiz kurulum ya da aşağıda anlatacağım Leapp aracıyla RHEL 8 uyumlu platforma yükseltme.
Leapp ile CentOS 7’den AlmaLinux 8’e Yükseltme
Leapp, Red Hat’in geliştirdiği ve RPM tabanlı sistemlerde büyük sürüm atlama işlemini gerçekleştiren bir araç. ELevate projesi bu aracı CentOS 7 için de kullanılabilir hale getirdi.
# ELevate reposunu ekle
sudo curl -o /etc/yum.repos.d/elevate.repo
https://repo.almalinux.org/elevate/elevate-release-latest-el7.noarch.rpm
# elevate-release paketini kur
sudo yum install -y
https://repo.almalinux.org/elevate/elevate-release-latest-el7.noarch.rpm
# AlmaLinux 8 hedefli leapp-upgrade paketini kur
sudo yum install -y leapp-upgrade-el7toel8
Leapp ön kontrol aşamasını çalıştır. Bu aşama sistemde potansiyel sorunları tespit eder:
sudo leapp preupgrade --target almalinux8
Çıktıyı dikkatlice incele. Genellikle şu tarz uyarılar görürsün:
# Uyarı raporu dosyası
cat /var/log/leapp/leapp-report.txt
# Yaygın sorunları çözmek için örnek: PAM modülü uyarısı
sudo leapp answer --section check_vdo.no_vdo_devices=True
Sorunları çözdükten sonra yükseltmeyi başlat:
sudo leapp upgrade --target almalinux8
# Yükseltme tamamlandıktan sonra sistem yeniden başlar
sudo reboot
Yükseltme sonrası kontroller:
# Versiyon kontrolü
cat /etc/os-release
# Yükseltme loglarını kontrol et
cat /var/log/leapp/leapp-upgrade.log | grep -i error
# Eski kernel artıklarını temizle
sudo dnf remove $(dnf repoquery --installonly --latest-limit=-1 -q)
Temiz Kurulum ile Geçiş Senaryosu
Karmaşık yapıya sahip sistemlerde yerinde geçiş yerine temiz kurulum her zaman daha güvenli. Özellikle veritabanı sunucuları, middleware katmanları ve onlarca özel konfigürasyon içeren sistemlerde bu yolu tercih etmeni öneririm.
Sistem Envanteri Çıkarma
Göç öncesi mevcut sistemin tam envanterini almak kritik. Şu betiği tüm CentOS 7 sunucularında çalıştır:
#!/bin/bash
# centos7_inventory.sh - Sistem envanteri betiği
echo "=== SISTEM BILGILERI ===" > /tmp/inventory_$(hostname).txt
hostnamectl >> /tmp/inventory_$(hostname).txt
echo -e "n=== KURULU PAKETLER ===" >> /tmp/inventory_$(hostname).txt
rpm -qa --queryformat "%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}n" |
sort >> /tmp/inventory_$(hostname).txt
echo -e "n=== AKTIF SERVISLER ===" >> /tmp/inventory_$(hostname).txt
systemctl list-units --type=service --state=running >> /tmp/inventory_$(hostname).txt
echo -e "n=== ACIK PORTLAR ===" >> /tmp/inventory_$(hostname).txt
ss -tlnp >> /tmp/inventory_$(hostname).txt
echo -e "n=== CRON JOBS ===" >> /tmp/inventory_$(hostname).txt
for user in $(cut -f1 -d: /etc/passwd); do
crontab -u $user -l 2>/dev/null | grep -v "^#" |
awk -v user="$user" '{print user": "$0}'
done >> /tmp/inventory_$(hostname).txt
echo -e "n=== DISK KULLANIMI ===" >> /tmp/inventory_$(hostname).txt
df -hT >> /tmp/inventory_$(hostname).txt
echo "Envanter dosyasi: /tmp/inventory_$(hostname).txt"
Konfigürasyon Yedekleme
#!/bin/bash
# Kritik konfigurasyon dosyalarini yedekle
BACKUP_DIR="/backup/migration_$(date +%Y%m%d)"
mkdir -p $BACKUP_DIR
# Sistem konfigurasyonlari
cp -rp /etc/httpd $BACKUP_DIR/ 2>/dev/null
cp -rp /etc/nginx $BACKUP_DIR/ 2>/dev/null
cp -rp /etc/mysql $BACKUP_DIR/ 2>/dev/null
cp -rp /etc/postgresql $BACKUP_DIR/ 2>/dev/null
cp -rp /etc/ssh $BACKUP_DIR/
cp -rp /etc/sudoers* $BACKUP_DIR/
cp -rp /etc/cron* $BACKUP_DIR/
cp -rp /etc/sysctl.conf $BACKUP_DIR/
cp -rp /etc/security $BACKUP_DIR/
cp -rp /etc/pam.d $BACKUP_DIR/
# Repo listesi
rpm -qa > $BACKUP_DIR/rpm_packages.txt
pip freeze > $BACKUP_DIR/pip_packages.txt 2>/dev/null
gem list > $BACKUP_DIR/gem_packages.txt 2>/dev/null
# Firewall kurallari
iptables-save > $BACKUP_DIR/iptables_rules.txt
firewall-cmd --list-all > $BACKUP_DIR/firewalld_rules.txt 2>/dev/null
echo "Yedek alindi: $BACKUP_DIR"
tar czf /backup/migration_backup_$(date +%Y%m%d).tar.gz $BACKUP_DIR
Yaygın Göç Sorunları ve Çözümleri
Python 2 Bağımlılıkları
CentOS 7’nin en büyük sorunlarından biri Python 2 bağımlılıkları. Rocky Linux 8 ve AlmaLinux 8 varsayılan olarak Python 3 geliyor. Eski Python 2 betiklerini hemen tespit et:
# Python 2 ile yazilmis scriptleri bul
find /usr/local/bin /opt /home -name "*.py" -exec head -1 {} ;
2>/dev/null | grep -l "python2|python " | head -20
# Alternatif: shebang satirlarini kontrol et
grep -r "#!/usr/bin/python$|#!/usr/bin/env python$"
/usr/local/bin /opt/scripts 2>/dev/null
Python 2 scriptlerini Rocky Linux 8/9’da çalıştırmak istiyorsan:
# Rocky Linux 8'de Python 2 kurulumu (gecici cozum)
sudo dnf install python2 python2-pip
# Scriptin shebang satirini guncelle
sed -i 's|#!/usr/bin/python$|#!/usr/bin/python3|g' /path/to/script.py
SELinux Politika Farklılıkları
RHEL/Rocky Linux 8 ve 9’da SELinux politikaları önemli ölçüde değişti. Geçiş sonrası servisler başlamıyorsa ilk kontrol noktası bu:
# SELinux hatalarini goster
ausearch -m AVC -ts recent | audit2why
# Gecici olarak permissive moda al (test icin)
setenforce 0
# Yeni politika modulu olustur
ausearch -m AVC -ts recent | audit2allow -M mycustom_policy
semodule -i mycustom_policy.pp
# Kalici cozum icin enforcing'e don
setenforce 1
Servis ve Daemon Farklılıkları
Rocky Linux 9’da systemd davranışı bazı noktalarda değişti. Özellikle ağ yapılandırması NetworkManager tabanlı, eski network servisi artık yok:
# CentOS 7'deki eski agi yeni sistemde tanimla
# /etc/sysconfig/network-scripts yerine nmcli kullan
nmcli connection show
nmcli con add type ethernet ifname eth0
con-name "Production-NIC"
ipv4.addresses "192.168.1.100/24"
ipv4.gateway "192.168.1.1"
ipv4.dns "8.8.8.8,8.8.4.4"
ipv4.method manual
nmcli con up "Production-NIC"
Ansible ile Toplu Göç Yönetimi
Onlarca sunucun varsa her birine tek tek el atmak hem zaman kaybı hem de hata riskini artırır. Ansible ile göç sürecini otomatize edebilirsin:
# playbook: centos7_precheck.yml
---
- name: CentOS 7 Goc Oncesi Kontroller
hosts: centos7_servers
become: yes
tasks:
- name: OS versiyonunu kontrol et
fail:
msg: "Bu sunucu CentOS 7 degil: {{ ansible_distribution }} {{ ansible_distribution_version }}"
when: not (ansible_distribution == "CentOS" and ansible_distribution_major_version == "7")
- name: Disk alani kontrolu (min 10GB bos)
fail:
msg: "Yetersiz disk alani: {{ item.size_available | int // 1024 // 1024 // 1024 }}GB bos"
when:
- item.mount == "/"
- item.size_available | int < 10737418240
loop: "{{ ansible_mounts }}"
- name: Aktif servisleri kaydet
shell: systemctl list-units --type=service --state=running --no-pager --plain | awk '{print $1}'
register: running_services
- name: Servis listesini dosyaya yaz
copy:
content: "{{ running_services.stdout }}"
dest: "/tmp/pre_migration_services_{{ inventory_hostname }}.txt"
- name: Kritik paketlerin versiyonlarini kaydet
shell: rpm -qa --queryformat "%{NAME}=%{VERSION}n" | sort
register: package_list
- name: Paket listesini dosyaya yaz
copy:
content: "{{ package_list.stdout }}"
dest: "/tmp/pre_migration_packages_{{ inventory_hostname }}.txt"
Geçiş Sonrası Doğrulama
Sistemi göç ettirdikten sonra her şeyin düzgün çalıştığını doğrulamak için sistematik bir yaklaşım izle:
#!/bin/bash
# post_migration_check.sh
echo "=== GOCS SONRASI KONTROL ==="
echo ""
echo "1. OS Versiyonu:"
cat /etc/os-release | grep -E "NAME|VERSION"
echo ""
echo "2. Kernel Versiyonu:"
uname -r
echo ""
echo "3. Kritik Servislerin Durumu:"
for service in sshd crond rsyslog firewalld; do
status=$(systemctl is-active $service 2>/dev/null)
echo " $service: $status"
done
echo ""
echo "4. SELinux Durumu:"
getenforce
echo ""
echo "5. Firewall Durumu:"
firewall-cmd --state
echo ""
echo "6. Disk Kullanimi:"
df -hT | grep -v tmpfs
echo ""
echo "7. Son 50 Sistem Log Hatasi:"
journalctl -p err -n 50 --no-pager
Gerçek Dünya Senaryosu: E-Ticaret Sunucusu Göçü
Bir müşterimizin CentOS 7 üzerinde çalışan, Apache + PHP 7.2 + MySQL 5.7 tabanlı e-ticaret platformunu Rocky Linux 9’a taşıma sürecini kısaca anlatalım.
Karşılaştığımız başlıca sorunlar şunlardı:
- PHP 7.2 uyumsuzluğu: Rocky Linux 9 varsayılan olarak PHP 8.1 geliyor. Uygulamanın PHP 8.1 ile uyumlu olup olmadığını test etmemiz gerekti. Remi reposu bu geçiş sürecinde hayat kurtardı.
- MySQL 5.7 yok: Rocky Linux 9’da MySQL 5.7 resmi repolardan gelmiyor. MySQL 8.0’a geçiş yaptık, uygulama katmanında bazı SQL sorgu düzeltmeleri gerekti.
- Özel Apache modülleri: Bazı özel derleme modüller yeniden derlenmesi gerekti.
# Rocky Linux 9'da PHP 7.4 kurulumu (Remi repo ile)
dnf install -y https://rpms.remirepo.net/enterprise/remi-release-9.rpm
dnf module reset php -y
dnf module enable php:remi-7.4 -y
dnf install -y php php-fpm php-mysqlnd php-gd php-xml php-mbstring
# MySQL 8.0 kurulumu
cat > /etc/yum.repos.d/mysql.repo << 'EOF'
[mysql80-community]
name=MySQL 8.0 Community Server
baseurl=https://repo.mysql.com/yum/mysql-8.0-community/el/9/$basearch/
enabled=1
gpgcheck=1
gpgkey=https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
EOF
dnf install -y mysql-community-server
Geçiş süreci toplam 4 saat sürdü. Sistemi önce staging ortamında test ettik, sonra prodüksiyon ortamına geçiş için gece bakım penceresi oluşturduk.
Hangi Seçeneği Seçmeli?
Bu sorunun cevabı duruma göre değişiyor ama şu rehber ilkeleri kullanabilirsin:
- Hız ve maliyet önceliksin: AlmaLinux 8 veya Rocky Linux 8, ELevate ile yerinde geçiş yap.
- Uzun vadeli stabilite: Rocky Linux 9 veya AlmaLinux 9, temiz kurulum tercih et.
- Red Hat desteği lazım: Kurumsal RHEL lisansı al, Red Hat’in ücretsiz 16 sunucu teklifinden başla.
- Oracle veritabanı ortamı: Oracle Linux mantıklı bir seçenek olabilir.
- Geçiş için zaman lazım: TuxCare ELS ile birkaç ay satın al, köklü bir plan yap.
- Bulut ortamı: AWS, Azure veya GCP üzerindeysen RHEL veya Rocky Linux AMI/image’larına geçmek en kolay yol.
Sonuç
CentOS 7 EOL süreci artık gerçek ve geçiş kaçınılmaz. İyi haber şu: Rocky Linux ve AlmaLinux gibi güçlü alternatifler mevcut, ELevate gibi araçlar göç sürecini önemli ölçüde kolaylaştırıyor ve topluluk desteği son derece güçlü.
Tavsiyem şu: Önce envanter çıkar, tüm CentOS 7 sistemlerini belgele. Sonra risk bazlı bir önceliklendirme yap; internete açık ve kritik sistemler ilk sırada olsun. Staging ortamında göç sürecini test et, sonra prodüksiyona geç. Temiz kurulum her zaman yerinde geçişten daha öngörülebilir sonuçlar verir, fakat ELevate de birçok senaryoda gayet iyi çalışıyor.
Geçişi erteleyen her gün, desteklenmeyen bir işletim sisteminde çalışmanın getirdiği riski büyütüyor. 2024 başında başlayan bu süreçte artık “henüz vakit var” deme lüksümüz kalmadı.