ELevate: อัปเกรด CentOS 7 ถึง AlmaLinux 9 โดยไม่ต้องลงใหม่

ใช้ ELevate อัปเกรด CentOS 7 เป็น AlmaLinux 8 แล้วต่อเป็น 9 แบบ in-place ทำ Snapshot ก่อน อ่านรายงาน leapp preupgrade แก้ inhibitor และเตรียมแผนย้อนกลับ

โดย ทีมงาน THAI DATA CLOUD อ่าน 14 นาที

แชร์FacebookXLINELinkedIn
ELevate — ELevate: อัปเกรด CentOS 7 ถึง AlmaLinux 9 โดยไม่ต้องลงใหม่
ELevate: อัปเกรด CentOS 7 ถึง AlmaLinux 9 โดยไม่ต้องลงใหม่

คำตอบสั้น ๆ: ใช้ ELevate อัปเกรด CentOS 7 เป็น AlmaLinux 8 แล้วต่อเป็น 9 แบบ in-place ทำ Snapshot ก่อน อ่านรายงาน leapp preupgrade แก้ inhibitor และเตรียมแผนย้อนกลับ

คู่มือนี้อธิบาย ELevate ทีละขั้นตอน พร้อมคำสั่งที่ใช้ได้จริงและปัญหาที่พบบ่อย

ELevate คือโครงการของ AlmaLinux ที่นำเครื่องมือ Leapp ซึ่ง Red Hat ใช้อัปเกรด RHEL ข้ามเวอร์ชันหลักแบบ in-place มาเพิ่มข้อมูลให้ใช้กับดิสโทรตระกูลเดียวกันได้ ทำให้อัปเกรดเครื่อง CentOS 7 ไปเป็น AlmaLinux 8 แล้วต่อไป AlmaLinux 9 ได้โดยไม่ต้องติดตั้งระบบใหม่และย้ายข้อมูลเอง CentOS 7 หมดอายุการสนับสนุนไปตั้งแต่ 30 มิถุนายน 2024 เครื่องที่ยังใช้อยู่จึงไม่ได้รับแพตช์ความปลอดภัยอีกแล้ว

คู่มือนี้เหมาะกับผู้ดูแลที่มีเซิร์ฟเวอร์ CentOS 7 ซึ่งติดตั้งใหม่ได้ยาก เช่น มีแอปเก่าที่ไม่มีใครจำวิธีติดตั้ง เมื่อทำครบ คุณจะมีแผนสำรองก่อนเริ่ม รู้วิธีอ่านรายงานของ Leapp และแก้ด่านที่กั้นการอัปเกรด (inhibitor) อัปเกรดสองรอบจาก 7 ไป 8 และ 8 ไป 9 ด้วย ELevate และตรวจระบบหลังอัปเกรดได้ครบ

สิ่งที่ต้องเตรียม

  • Snapshot หรือข้อมูลสำรองทั้งเครื่อง Leapp ไม่มีคำสั่งย้อนกลับ ถ้าอัปเกรดล้มเหลวกลางทาง ทางกลับมีทางเดียวคือกู้จากข้อมูลสำรอง ดู คู่มือ Backup Server บน Cloud ของ TDC
  • Console ของผู้ให้บริการ ระหว่างอัปเกรดเครื่องจะรีบูตเข้าสภาพแวดล้อมพิเศษที่ไม่มีเครือข่าย ต้องดูความคืบหน้าผ่าน Console ผ่าน Web UI
  • ช่วงเวลาหยุดระบบ ที่แจ้งผู้ใช้แล้ว ระยะเวลาขึ้นกับจำนวนแพ็กเกจและความเร็วดิสก์ ควรกันเวลาไว้ทั้งสำหรับอัปเกรดและสำหรับกู้คืนถ้าล้มเหลว
  • รายการซอฟต์แวร์ที่ไม่ได้มาจาก CentOS เช่น PHP จาก Remi, MySQL Community, Docker CE หรือ Control Panel เพราะ Leapp จะไม่อัปเกรดแพ็กเกจเหล่านี้ให้
  • ถ้าเครื่องเปิด Secure Boot ต้องปิดก่อนอัปเกรดข้ามผู้ผลิตจาก CentOS ไป AlmaLinux

เครื่องที่มี Control Panel ห้ามรัน Leapp ตรง ๆ cPanel มีสคริปต์ของตัวเองชื่อ elevate-cpanel ซึ่งใช้ ELevate ภายในและจัดการ cPanel ให้ด้วย ส่วน Plesk มีเครื่องมือทางการ centos2alma สำหรับ CentOS 7 ไป AlmaLinux 8 ให้ตรวจเอกสารล่าสุดของผู้ผลิต Panel ก่อนเสมอว่ารองรับเส้นทางใดบ้าง

ลำดับขั้นการอัปเกรดด้วย ELevate ตั้งแต่ทำ Snapshot แก้ repository ติดตั้ง Leapp รัน preupgrade อัปเกรดเป็น AlmaLinux 8 แล้วต่อเป็น 9
ทุกรอบเริ่มจาก Snapshot ใหม่ และต้องทดสอบระบบให้ผ่านก่อนขึ้นเวอร์ชันถัดไป

ขั้นตอนที่ 1: ประเมินเครื่องก่อนตัดสินใจใช้ ELevate

เก็บข้อมูลเครื่องไว้เทียบหลังอัปเกรด และหาสิ่งที่จะมีปัญหาตั้งแต่ต้น

cat /etc/centos-release
uname -r
df -h / /var /boot
yum repolist enabled
rpm -qa --qf '%{NAME}-%{VERSION} %{VENDOR}\n' | grep -v CentOS | sort
systemctl list-units --type=service --state=running --no-pager > /root/services-before.txt
ls -d /usr/local/cpanel /usr/local/psa /usr/local/directadmin 2>/dev/null

คำสั่ง rpm แสดงแพ็กเกจที่ไม่ได้มาจาก CentOS ซึ่งต้องจัดการเองหลังอัปเกรด ถ้ารายการยาวมาก หรือเครื่องมีแอปที่ผูกกับ PHP 5.x, Python 2 หรือไลบรารีเก่า การสร้างเครื่องใหม่บน AlmaLinux 9 แล้วย้ายข้อมูลอาจเร็วและปลอดภัยกว่า เพราะ PHP, MariaDB และ Python ในระบบใหม่เปลี่ยนเวอร์ชันทั้งหมด ถ้าตัดสินใจใช้ ELevate ให้ทดลองกับเครื่องที่โคลนจาก Snapshot ก่อนเครื่องจริงทุกครั้ง

ขั้นตอนที่ 2: ทำ Snapshot และแก้ repository ของ CentOS 7

สร้าง Snapshot ของเครื่องในพอร์ทัลก่อน แล้วสำรองฐานข้อมูลแยกด้วย mysqldump หรือ pg_dump อีกชั้น จากนั้นแก้ repository เพราะ mirror เดิมของ CentOS 7 ปิดไปแล้วหลังหมดอายุ AlmaLinux เตรียมไฟล์ repo ที่ชี้ไปคลังสำรองไว้ให้

sudo curl -o /etc/yum.repos.d/CentOS-Base.repo https://el7.repo.almalinux.org/centos/CentOS-Base.repo
sudo yum upgrade -y
sudo reboot

การอัปเดต CentOS 7 ให้เป็นแพ็กเกจล่าสุดก่อนเป็นเงื่อนไขของ Leapp หลังรีบูตให้ตรวจว่าเครื่องบูตด้วยเคอร์เนลล่าสุดด้วย uname -r และบริการทั้งหมดกลับมาทำงาน

ขั้นตอนที่ 3: ติดตั้ง ELevate และ Leapp

ติดตั้งแพ็กเกจ release ของ ELevate แล้วติดตั้ง Leapp กับข้อมูลสำหรับ AlmaLinux

sudo yum install -y http://repo.almalinux.org/elevate/elevate-release-latest-el$(rpm --eval %rhel).noarch.rpm
sudo yum install -y leapp-upgrade leapp-data-almalinux

ถ้าต้องการปลายทางเป็น Rocky Linux, Oracle Linux หรือ CentOS Stream ให้เปลี่ยนแพ็กเกจข้อมูลเป็นของดิสโทรนั้นตาม ELevate Quickstart Guide คู่มือนี้ใช้ AlmaLinux เป็นตัวอย่าง

ขั้นตอนที่ 4: รัน preupgrade และแก้ inhibitor

leapp preupgrade จำลองการอัปเกรดโดยไม่เปลี่ยนระบบ แล้วเขียนรายงานปัญหาไว้ที่ /var/log/leapp/leapp-report.txt บนเครื่อง CentOS 7 ที่ติดตั้งแบบปกติ ผลรอบแรกจะขึ้น UPGRADE INHIBITED เกือบทุกครั้ง ซึ่งเป็นเรื่องปกติ

sudo leapp preupgrade
sudo grep -A6 "Risk Factor: high (inhibitor)" /var/log/leapp/leapp-report.txt
ผลคำสั่ง leapp preupgrade บน CentOS 7 แสดง UPGRADE INHIBITED พร้อม inhibitor สามข้อที่ต้องแก้ก่อนอัปเกรดด้วย ELevate
รอบแรกติด inhibitor เป็นเรื่องปกติ อ่านรายละเอียดและวิธีแก้ใน leapp-report.txt

ด่านที่พบบ่อยที่สุดบน CentOS 7 มีสามข้อ และแก้ได้ตามคำแนะนำของ ELevate

# ไดรเวอร์ที่ถูกถอดออกใน EL8 (ถ้ารายงานระบุไดรเวอร์อื่น เช่น floppy ให้ถอดตัวนั้นด้วย)
sudo rmmod pata_acpi

# Leapp ต้องการให้กำหนด PermitRootLogin ให้ชัด เพราะค่าเริ่มต้นของ EL8 ต่างจาก EL7
echo PermitRootLogin yes | sudo tee -a /etc/ssh/sshd_config

# ตอบคำถามเรื่องโมดูล pam_pkcs11 ที่ถูกถอดออก
sudo leapp answer --section remove_pam_pkcs11_module_check.confirm=True

คำสั่ง tee -a ต่อบรรทัดไว้ท้ายไฟล์ ถ้า sshd_config ของคุณมีบล็อก Match ที่ใช้งานอยู่ท้ายไฟล์ ให้ย้ายบรรทัดนี้ขึ้นไปไว้เหนือบล็อกนั้นเอง แล้วตรวจด้วย sudo sshd -t อ่านรายงานทั้งไฟล์ ไม่ใช่เฉพาะสามข้อนี้ รายการระดับ high ที่ไม่ใช่ inhibitor ยังต้องอ่าน เช่น แพ็กเกจที่ไม่ได้ลงนามโดย CentOS ซึ่งจะค้างเป็น el7 หลังอัปเกรด รันซ้ำจนบรรทัดสรุปไม่มี inhibitor เหลือ ถ้ามีไฟล์ /var/log/leapp/answerfile ต้องตอบทุกข้อในไฟล์นั้นก่อน

ขั้นตอนที่ 5: อัปเกรดเป็น AlmaLinux 8 ด้วย ELevate

เมื่อ preupgrade ผ่านแล้ว ปิดบริการที่เขียนข้อมูลตลอดเวลา เช่น เว็บและฐานข้อมูล เพื่อให้ข้อมูลนิ่ง แล้วเริ่มอัปเกรด

sudo leapp upgrade
sudo reboot

leapp upgrade ดาวน์โหลดแพ็กเกจของ AlmaLinux 8 ทั้งหมดก่อน แล้วสร้างรายการบูตชื่อ ELevate-Upgrade-Initramfs หลังรีบูต ให้ดูผ่าน Console ว่าเครื่องบูตเข้ารายการนี้ การติดตั้งแพ็กเกจจริงเกิดในขั้นนี้ และเครื่องจะรีบูตเองอีกครั้งเมื่อเสร็จ อย่าสั่งปิดเครื่องระหว่างนี้แม้หน้าจอจะดูนิ่งนาน ถ้าเครื่องกลับบูตเข้าเคอร์เนลเดิมแทน ให้ตรวจค่า GRUB_DEFAULT ใน /etc/default/grub

เมื่อเครื่องกลับมา ตรวจผลด้วยคำสั่งต่อไปนี้

cat /etc/redhat-release
rpm -qa | grep el7
getenforce
sudo less /var/log/leapp/leapp-report.txt

แพ็กเกจที่ยังลงท้ายด้วย el7 คือส่วนที่ Leapp ไม่ได้อัปเกรด ให้ติดตั้งรุ่นสำหรับ EL8 แทนหรือถอดออกถ้าไม่ใช้ เพราะแพ็กเกจที่ค้างมักขวางการอัปเกรดรอบถัดไป ตรวจ SELinux ด้วย ถ้าค่าไม่ใช่โหมดที่ใช้ก่อนอัปเกรด ให้ดูข้อความ denial ใน /var/log/audit/audit.log แก้ให้หมดก่อนเปิด enforcing กลับ แนวทางอยู่ใน คู่มือ SELinux บน AlmaLinux และ Rocky Linux จากนั้นเปลี่ยน PermitRootLogin กลับเป็น prohibit-password หรือ no แล้วทดสอบ SSH จากหน้าต่างใหม่

ขั้นตอนที่ 6: ทดสอบระบบบน AlmaLinux 8

เปรียบเทียบบริการที่ทำงานกับไฟล์ที่เก็บไว้ในขั้นตอนที่ 1

systemctl list-units --type=service --state=running --no-pager > /root/services-after.txt
diff /root/services-before.txt /root/services-after.txt
systemctl --failed

ทดสอบเว็บ ฐานข้อมูล cron และการส่งอีเมลจริงทุกอย่าง จุดที่พังบ่อยคือ PHP ที่เปลี่ยนเวอร์ชันทำให้ฟังก์ชันเก่าใช้ไม่ได้ สคริปต์ที่เรียก python ซึ่งไม่มีแล้วบน EL8 (ใช้ python3 แทน) และไฟร์วอลล์ที่ใช้ iptables ตรง ๆ ซึ่ง EL8 เปลี่ยนเป็น nftables อยู่เบื้องหลัง เปิดใช้งานจริงเมื่อทดสอบครบแล้ว ใช้ AlmaLinux 8 ไปสักระยะเพื่อให้แน่ใจว่านิ่ง ก่อนขึ้นรอบถัดไป

ขั้นตอนที่ 7: อัปเกรดต่อเป็น AlmaLinux 9

ELevate อัปเกรดได้ทีละเวอร์ชันหลัก จาก 8 ไป 9 ใช้ขั้นตอนเดิมแทบทั้งหมด เริ่มจากทำ Snapshot ใหม่ อัปเดต AlmaLinux 8 ให้ล่าสุดและรีบูต แล้วติดตั้ง ELevate ของ EL8

sudo dnf upgrade -y && sudo reboot
sudo dnf install -y http://repo.almalinux.org/elevate/elevate-release-latest-el$(rpm --eval %rhel).noarch.rpm
sudo dnf install -y leapp-upgrade leapp-data-almalinux
sudo leapp preupgrade

ด่านที่พบบ่อยในรอบนี้คือ firewalld และ VDO แก้ด้วยคำสั่งต่อไปนี้ แล้วรัน leapp preupgrade ซ้ำจนผ่าน จากนั้น leapp upgrade และรีบูตแบบเดียวกับขั้นตอนที่ 5

sudo sed -i "s/^AllowZoneDrifting=.*/AllowZoneDrifting=no/" /etc/firewalld/firewalld.conf
sudo leapp answer --section check_vdo.confirm=True
sudo leapp upgrade
sudo reboot

หลังเครื่องกลับมา ตรวจด้วย rpm -qa | grep el8 และทำการทดสอบเดียวกับขั้นตอนที่ 6 บน EL9 แพ็กเกจ network-scripts ถูกถอดออก และไฟล์ ifcfg อยู่ในสถานะเลิกใช้ NetworkManager แนะนำรูปแบบ keyfile แทน ให้ตรวจว่าเครือข่ายยังตั้งค่าถูกหลังรีบูต AlmaLinux 9 ได้รับอัปเดตความปลอดภัยถึงปี 2032 ส่วนเส้นทาง 9 ไป 10 ก็มีใน ELevate แล้ว แต่ AlmaLinux 10 มีเงื่อนไขเรื่องรุ่นของ CPU ให้ตรวจในเอกสารก่อน

ตารางเปรียบเทียบการอัปเกรดด้วย ELevate รอบ CentOS 7 ไป AlmaLinux 8 และ AlmaLinux 8 ไป 9 ทั้ง inhibitor ที่พบบ่อย Python MariaDB และ PHP
ซอฟต์แวร์ในระบบเปลี่ยนเวอร์ชันทุกรอบ แอปเก่าต้องทดสอบใหม่ทุกครั้ง

แผนย้อนกลับเมื่ออัปเกรดล้มเหลว

ถ้าเครื่องบูตไม่ขึ้นหลังอัปเกรด หรือขึ้นแต่บริการหลักใช้ไม่ได้และแก้ไม่ทันในช่วงเวลาที่กำหนด ให้กู้จาก Snapshot ทันทีแทนการแก้ต่อบนเครื่องจริง เก็บไฟล์ /var/log/leapp/leapp-upgrade.log ไว้ก่อนกู้ถ้าเข้าถึงได้ แล้วนำไปวิเคราะห์บนเครื่องทดลอง ตั้งเกณฑ์ตัดสินใจไว้ล่วงหน้า เช่น ถ้าครบเวลาที่แจ้งผู้ใช้แล้วยังไม่ผ่านการทดสอบ ให้กู้คืนทันที

เช็กลิสต์หลังอัปเกรดด้วย ELevate ตรวจเวอร์ชันระบบ แพ็กเกจที่ค้าง PermitRootLogin SELinux บริการ และการเก็บ Snapshot
เก็บ Snapshot ไว้จนกว่าจะใช้งานจริงผ่านไปสักระยะ ไม่ลบทันทีหลังเครื่องบูตขึ้น

ปัญหาที่พบบ่อยเกี่ยวกับ ELevate

อัปเกรดจาก CentOS 7 ไป AlmaLinux 9 ในครั้งเดียวได้หรือไม่?

ไม่ได้ Leapp อัปเกรดทีละเวอร์ชันหลัก ต้องผ่าน AlmaLinux 8 ก่อน และควรทดสอบระบบบน 8 ให้ผ่านก่อนขึ้น 9 เพื่อแยกปัญหาของแต่ละรอบออกจากกัน

ใช้ ELevate กับเครื่องที่มี cPanel หรือ Plesk ได้หรือไม่?

ได้ แต่ต้องใช้เครื่องมือของผู้ผลิต Panel ที่ครอบ ELevate ไว้ ไม่ใช่รัน leapp เอง cPanel ใช้สคริปต์ elevate-cpanel ส่วน Plesk ใช้ centos2alma สำหรับ CentOS 7 ไป AlmaLinux 8 ตรวจเงื่อนไขและเส้นทางที่รองรับในเอกสารของผู้ผลิตก่อนเริ่ม

leapp upgrade ล้มเหลวเพราะดาวน์โหลดแพ็กเกจไม่ได้ แก้อย่างไร?

ตรวจว่าเครื่องออกอินเทอร์เน็ตได้และ DNS ใช้งานได้ ตรวจ repository ของบุคคลที่สามที่ยังชี้ไป URL เก่า ปิด repo ที่ไม่ใช้ แล้วรัน preupgrade ใหม่ รายละเอียดข้อผิดพลาดอยู่ใน /var/log/leapp/leapp-upgrade.log

ควรอัปเกรดด้วย ELevate หรือสร้างเครื่องใหม่ดีกว่า?

ถ้าเครื่องมีแพ็กเกจจากภายนอกไม่มาก และแอปรองรับ PHP หรือ Python รุ่นใหม่อยู่แล้ว ELevate ประหยัดเวลา ถ้าเครื่องผ่านการแก้มือมานานหลายปี การสร้างเครื่องใหม่บน AlmaLinux 9 แล้วย้ายข้อมูลจะได้ระบบที่สะอาดและมีเอกสารชัดกว่า การอัปเกรด Ubuntu ใช้เครื่องมืออื่น ดู คู่มืออัปเกรด Ubuntu LTS

ถ้าต้องการให้ทีมงานช่วยประเมินว่าควรอัปเกรดหรือย้ายเครื่อง ทดลองอัปเกรดบนเครื่องโคลน หรือย้ายระบบเก่าขึ้นเครื่องใหม่ ติดต่อทีมงาน THAI DATA CLOUD ได้ และดูรายละเอียดบริการย้ายระบบได้ที่หน้า Cloud Migration

อ่านเพิ่มเติมเกี่ยวกับ ELevate

แชร์FacebookXLINELinkedIn

มีคำถามเรื่องบริการ? ติดต่อทีมงาน