Okan Kerimoğlu
Turk Telekom Bulut Teknolojileri
6 min readJul 24, 2023

--

REDHAT LEAPP IN-PLACE UPGRADE

Merhaba,

Bu yazımızda Redhat 7x sunucuların Redhat 8x sürümüne nasıl upgrade edileceğinden bahsedeceğim.

Upgrade işlemleri, mevcut çalışmakta olan uygulamanın, işletim sistemini ve ya yazılımı daha yeni bir sürümle değiştirmek anlamında gelmektedir. Bunu yapmanın iki yolu vardır; sıfırdan kurulum ya da in-place upgrade.

In-Place upgrade, önceki sürümleri kaldırmadan, önceki sürümü yeni sürümle değiştirmeyi sağlamaktadır. Yüklü uygulamalar, yardımcı programlar ve yapılandırmalar mevcut ayar ve tercihleri ile birlikte yeni sürüme dahil edilmektedir.

In-Place upgrade işlemini leapp adı verilen oldukça kullanışlı bir tool ile nasıl gerçekleştireceğimizi inceleyeceğiz. Bunun için elimizde leapp paketlerinin bulunduğu bir repo olmalıdır. Eğer yoksa leapp paketleri indirilmelidir.

Çalışma öncesi ve hazırlık aşaması

Upgrade işlemi sırasında aşağıdaki 4 repo kullanılmaktadır.

Çalışma başlangıcından önce muhakkak işletim sisteminin imaj yedeği alınmalıdır. Sanal sunucular için snaphot, fiziksel sunucular içinse “rear” toolu kullanılabilir.

Rhel7 ve ya Rhel8 de önyükleyiciyi (bootloader) BIOS’tan UEFI’ye geçirmek mümkün değildir. Rhel7 sistemi BIOS kullanıyorsa ve Rhel8 sisteminizin UEFI kullanmasını istiyorsanız, sıfırdan kurulum yapılmadır.

Eğer sunucunuz SAP Hana ise yapılacak işlemler için aşağıdaki linki kullanabilirsiniz.

https://access.redhat.com/solutions/5154031

Upgrade işlemi aşağıdaki durumlar için önerilmemektedir.

  • Software RAID bulunan sistemlerde önerilmez.
  • Ansible ile yapılması önerilmez. Çünkü upgrade sonrasında bazı yapılandırmalar standart olmamaktadır ve manuel işlem gerektirmektedir.
  • Ansible tower Kurulu sunucularda önerilmez
  • IBM Z Mimarili sunucularda rear bulunmadığı için önerilmez.
  • Çalışma sonrasında çoğunlukla NIC isimleri değişmemektedir. Ancak değiştiği durumlarda bağlantı sorunları yaşanacaktır. Özellikle NIC-Teaming ve ya NIC-Bonding bulunan sistemlerde sağlıklı olması açısından tek bir NIC e düşürülerek ilerlenmesi tavsiye edilmektedir.
  • Eğer precheck sonuçlar yüksek seviyede bir risk faktörü belirtmez ise NIC isimlerinin değişmemesi için aşağıdaki şekilde ortam değişkeni ayarlanmalıdır.

LEAPP_NO_NETWORK_RENAMING=1

  • Çalışma öncesinde fstab içerisinde bulunan nfs,ftp gibi mount pointler unmount edilmeli ve fstab içerisinde # satırı durumuna getirilmelidir.
  • / dizini altında bulunan custom softlink bilgileri kaydedilmelidir.
  • SELinux permissive moduna alınmalıdır.

Bu bilgiler ışığında gerekli kontrollerin ardından çalışma adımları aşağıdaki gibi iletletilir.

Çalışma adımları

1- İşletim sistemi son versiyona güncellenir ve sunucu yeniden başlatılır.

yum update -y
systemctl reboot

2- Reboot sonrasında mevcut repolar unregister edilerek, leapp paketlerinizin bulunduğu repo register edilir. Aynı zamanda 3rd party repolar kaldırılır (docker,mongo,mysql vb.) ve ya farklı bir yere taşınır.

subscription-manager unregister
subscription-manager register –org="xxxxxx" –activationkey="RHEL_Leapp"

3- İlgili repoların durumu kontrol edilir, eğer disable durumdaysa enable edilir.

subscription-manager repos - enable rhel-7-server-rpms
subscription-manager repos - enable rhel-7-server-extras-rpms

ya da

subscription-manager repos - enable=*

4- Leapp paketleri yüklenir.

yum install leapp-upgrade

NOT: Eğer repo erişimine kapalı bir ortamda çalışıyorsanız, aşağıdaki paketler manuel indirilerek edilerek kurulur.

leapp

leapp-deps

python2-leapp

leapp-upgrade-el7toel8

leapp-upgrade-el7toel8-deps

5- Leapp uygulamasının yardımcı bir paketi bulunmaktadır. Leapp-data-22.tar.gz isimli bu paket indirilip sunucuya atıldıktan sonra /etc/leapp/files içerisinde çıkarılır.

tar -xzf leapp-data-22.tar.gz -C /etc/leapp/files && rm leapp-data-22.tar.gz

6- /etc/leapp/files altında bulunan dosyaların yetkisinin root:root olduğu kontrol edilir. Ardından upgrade öncesi tüm durumların raporlanacağı preupgrade komutu çalıştırılır.

leapp preupgrade

Komut bu şekilde çalıştırıldığında OS versiyonu otomatik olarak 8.8 e çıkarılacaktır. Eğer daha düşük bir versiyonu upgrade etmek istersek set parametresi ile versiyon numarasını set etmemiz gerekir.

leapp preupgrade --target 8.6

7- Preupgrade işlemi bizlere, upgrade için engel olabilecek durumların olup olmadığını belirten bazı log dosyaları oluşturacaktır. Bu dosyaların içerisinde risk faktörleri ve açıklamaları yer almaktadır.

High: Sistem durumunun bozulmasına neden olma olasılığı yüksektir

Medium: Hem sistemi hem de uygulamaları etkileyebilir

Low: Sistemi etkilemez ancak uygulamalar üzerinde etkisi olabilir

Info: Sistem veya uygulamalar üzerinde beklenen bir etkisi olmayan bilgiler

Burada High durumdaki risk faktörlerinin ortadan kaldırılması önemlidir. Medium seviye risk faktörü için inceleme yapılmalı ve gerekliyse buradaki impactler ortadan kaldırılmalıdır.

Inhibitor: Yükseltme işlemini engeller, aksi takdirde sistemi boot etmez, erişilemez veya işlevsiz hale gelebilir. Hali hazırda inhibitör seviyesinde bir risk faktörü oluşturduğunda ekranda uyarılar oluşacaktır.

Preupgrade sonuçlarını ve açıklamalarını /var/log/leapp/leapp-report.txt isimli dosyadan dikkatli bir şekikde incelenmelidir. Yukarıda da belirtildiği gibi inhibitör seviyesindeki risk durumları kesin olarak çözüme kavuşturulmalıdır.

Burada çıkabilecek 1–2 önemli ve örnek hatayı inceleyelip çözümlerine bakalım

  • Inhibitor: Possible problems with remote login using root account.
vi /etc/ssh/sshd_config
PermitRootLogin=yes

· Title: Leapp detected loaded kernel drivers which have been removed in RHEL 8. Upgrade cannot proceed. Summary: Support for the following RHEL 7 device drivers has been removed in RHEL 8:

  • pata_acpi
  • floppy
lsmod | grep -q pata_acpi && rmmod pata_acpi
lsmod | grep -q floppy && rmmod floppy

· Risk Factor: high

Title: Difference in Python versions and support in RHEL 8

Summary: In RHEL 8, there is no ‘python’ command. Python 3 (backward incompatible) is the primary Python version and Python 2 is available with limited support and limited set of packages.

alternatives - set python /usr/bin/python3

· /var/log/leapp/answerfile => Upgrade öncesi bu dosya içindeki sorular cevaplanmalıdır. (true/false)

leapp answer - section remove_pam_pkcs11_module_check.confirm=True

· Upgrade sonrası silinecek paketlere dikkat edilmelidir. Redhat7 de olan bazı paketler Redhat8 de olmayabilir. Bu paketlerin yeniden kurulup configure edileceğinden emin değilsek uygulama sahibi ile karşılıklı görüşülmelidir.

İlgili işlemler tamamlandıktan sonra tekrar preupgrade başlatılarak rapor incelenir. Rapor sonuçlarında upgrade yapmaya engel bir durum bulunmuyorsa aşağıdaki şekilde gelmesi beklenir.

Gereksinimlerin karşılanmasının ardından upgrade işlemi başlatılır. Bazı sistemlerde upgrade sonrasında Ethernet kartlarının isimleri değişmektedir. Bu durumu engellemek adına komut aşağıdaki şekilde çalıştırılabilir. Bu durum bonding üyesi Ethernet kartlarının isimlerinin değişmesini engelleyecektir.

LEAPP_NO_NETWORK_RENAMING=1 leapp upgrade --target 8.6

Ekrandaki upgrade işleminin tamamlanmasının ardından reboot verilir ve console alınarak işlemler takip edillir.

Reboot sonrasında işletim sistemi sonrasında işletim sistemi RHEL-Initramfs imajı ile açılır ve yükseltmenin tamamlanması beklenir. Yükseltme sonrası reboot işleminde rhel8 kernel’i ile açılır.

Aksi bir durumda rhel7 kernel ile açtı ise rhel8 kernel ile açılması sağlanır ve grub ayarında default rhel8 kernel set edilmelidir.

Yükseltme sonrasında yapılacaklar.

1- Sunucu yükseltme sonrası reboot’ta normalde rhel8 kernel’i ile açılır.

NOT:Aksi bir durumda rhel7 kernel ile açtı ise rhel8 kernel ile açılması sağlanır ve grub ayarında default rhel8 kernel set edilmelidir. Herşey ok ise eski rhel7 kerneller sistemden kaldırılabilir.

2- Aşağıdaki adımlar ile durum kontrolleri/doğrulamaları sağlanmalıdır:

Ssh ile bağlantı kontrolleri yapılır.

#cat /etc/redhat-release
Red Hat Enterprise Linux release 8.6 (Ootpa)
# uname -r
4.18.0–372.32.1.el8_6.x86_64
# subscription-manager list - installed
+ - - - - - - - - - - - - - - - - - - - - -+
Installed Product Status
+ - - - - - - - - - - - - - - - - - - - - -+
Product Name: Red Hat Enterprise Linux for x86_64
Product ID: xxx
Version: 8.6
Arch: x86_64
Status: Subscribed
# subscription-manager release
Release: 8.6

3. exclude list’teki paketler kaldırılır:

#yum-config-manager - save - setopt exclude=''

4. Rhel7 ye ait eski paketler kontrol edilerek kaldırılır.

#rpm -qa | grep -e '\.el[67]' | grep -vE '^(gpg-pubkey|libmodulemd|katello-ca-consumer)' | sort
#yum remove $(yum list installed | grep el7 | awk '{ print $1 }')

5. Weak modül varsa kaldırılır. Birden çok eski kernel varsa her biri için yapılmalıdır.

#cd /lib/modules && ls -ld *.el7*
#for version in $(ls -ld *.el7*) ; do [ -x /usr/sbin/weak-modules ] && /usr/sbin/weak-modules - remove-kernel $version ; done

6. Eski kernel önyükleyiciden kaldırılır, birden fazla eski kernel varsa her biri için yapılır.

#cd /lib/modules && ls -ld *.el7*
#for version in $(ls -ld *.el7*) ; do /bin/kernel-install remove $version/lib/modules/$version/vmlinux ; done

5. Boş dizinler silinir.

#rm -r /lib/modules/*el7*

6. Rhel8 uyumlu olmayan repo varsa kontrol edilip disable edilmelidir.

#yum config-manager - set-disabled <repository_id>

7. Ön yükleyici (bootloader) girişinden eski kernel’lerin kaldırılığı teyit edilir.

#grubby - info=ALL | grep "\.el7" || echo "Old kernels are not present in the bootloader."

8. Default python versiyonu set edilir.

# alternatives - set python /usr/bin/python3

9. Varsa unmount edilen nfs,ftp alanları mount edilir.

10. Yum update ile kontrol sağlanır.

yum update

Bir sonraki yazımda görüşmek üzere

--

--