คำตอบสั้น ๆ: เตรียมเครื่องและอัปเกรด Ubuntu 22.04 เป็น 24.04 ในที่เดิมด้วย do-release-upgrade อย่างปลอดภัย พร้อมรายการตรวจหลังอัปเกรดและวิธีรับมือเมื่อติดปัญหา
คู่มือนี้อธิบาย upgrade ทีละขั้นตอน พร้อมคำสั่งที่ใช้ได้จริงและปัญหาที่พบบ่อย
Ubuntu รุ่น LTS (Long Term Support) ได้รับการอัปเดตความปลอดภัยมาตรฐาน 5 ปีนับจากวันออก เช่น Ubuntu 20.04 สิ้นสุด Standard Support ไปเมื่อเดือนพฤษภาคม 2025 และ 22.04 จะสิ้นสุดในเดือนเมษายน 2027 เมื่อรุ่นที่ใช้อยู่ใกล้หมดระยะสนับสนุน คุณมีสองทางเลือก คือสร้างเซิร์ฟเวอร์ใหม่แล้วย้ายข้อมูล หรืออัปเกรดในที่เดิมด้วยเครื่องมือ do-release-upgrade ของ Ubuntu
บทความนี้อธิบายการอัปเกรดในที่เดิมจาก 22.04 เป็น 24.04 (หลักการเดียวกันใช้กับ 20.04 เป็น 22.04) พร้อมขั้นตอนเตรียมตัวที่ช่วยให้กู้คืนได้ถ้าเกิดปัญหา การอัปเกรดต้องทำทีละรุ่น LTS เท่านั้น จาก 20.04 ไป 24.04 ต้องผ่าน 22.04 ก่อนเสมอ
สิ่งที่ต้องเตรียม (upgrade)
- สิทธิ์
sudoและเวลาหยุดให้บริการ (Maintenance Window) อย่างน้อย 1 ชั่วโมง ในช่วงที่มีผู้ใช้น้อย - Backup หรือ Snapshot ทั้งเครื่อง ที่ทดสอบแล้วว่ากู้คืนได้ (ดู การ Backup Server บน Cloud ของ TDC) และสำรองฐานข้อมูลแยกอีกชุดด้วย mysqldump
- ช่องทางเข้าเครื่องสำรองที่ไม่ผ่าน SSH เช่น Console ผ่านหน้าเว็บ (ดู การ Remote เข้า Console Server ผ่าน Web UI)
- พื้นที่ว่างใน
/อย่างน้อยประมาณ 5 GB และใน/boot(ถ้าแยก Partition) พอสำหรับ Kernel ใหม่ - เครื่องต้องไม่มี Control Panel ที่มีขั้นตอนอัปเกรด OS ของตัวเอง เช่น Plesk หรือ DirectAdmin ให้ตรวจเอกสารของผู้ผลิต Panel ก่อนเสมอ
หมายเหตุ: ถ้าเป็นเครื่อง Production ที่สำคัญ วิธีที่เสี่ยงน้อยกว่าคือสร้างเครื่องใหม่ด้วย Ubuntu 24.04 ติดตั้งซอฟต์แวร์ ย้ายข้อมูล ทดสอบ แล้วค่อยสลับ DNS ส่วนการอัปเกรดในที่เดิมเหมาะกับเครื่องที่ติดตั้งซอฟต์แวร์จากแพ็กเกจมาตรฐานของ Ubuntu เป็นหลัก
ขั้นตอนที่ 1: ตรวจรุ่นปัจจุบันและสิ่งที่จะเปลี่ยน
lsb_release -a
df -h / /boot
ก่อนอัปเกรด ให้ทำรายการซอฟต์แวร์สำคัญ เพราะเวอร์ชันจะกระโดดพร้อมกันหลายตัว:
| ซอฟต์แวร์ | 22.04 | 24.04 | สิ่งที่ต้องทดสอบ |
|---|---|---|---|
| PHP | 8.1 | 8.3 | ปลั๊กอินและโค้ดเก่าที่ใช้ฟังก์ชันที่ถูกยกเลิก |
| MariaDB | 10.6 | 10.11 | ระบบจะอัปเกรดไฟล์ข้อมูลให้ ต้องมี Backup |
| Python | 3.10 | 3.12 | สคริปต์และ virtualenv ต้องสร้างใหม่ |
| Nginx | 1.18 | 1.24 | Config ส่วนใหญ่ใช้ได้ต่อ |
ถ้าคุณเคยติดตั้ง PHP จาก PPA (ดู ติดตั้ง PHP หลายเวอร์ชันบน Ubuntu) หรือซอฟต์แวร์จาก Repository ภายนอก เช่น Docker, Node.js, MySQL ของ Oracle ให้จดไว้ เพราะตัวอัปเกรดจะปิด Repository ภายนอกทั้งหมดระหว่างอัปเกรด และคุณต้องเปิดกลับเองภายหลัง
ขั้นตอนที่ 2: อัปเดตรุ่นปัจจุบันให้ครบก่อน
sudo apt update
sudo apt full-upgrade -y
sudo apt autoremove --purge -y
ถ้ามีไฟล์ /var/run/reboot-required ให้รีบูตก่อนดำเนินการต่อ:
[ -f /var/run/reboot-required ] && sudo reboot
ตรวจว่าไม่มีแพ็กเกจค้าง (held) ซึ่งจะทำให้การอัปเกรดหยุดกลางทาง:
apt-mark showhold
ถ้ามีรายการ ให้พิจารณา sudo apt-mark unhold ชื่อแพ็กเกจ หรือหาเหตุผลว่าทำไมถูก hold ไว้ก่อน
ขั้นตอนที่ 3: ติดตั้งและตั้งค่าตัวอัปเกรด
sudo apt install -y update-manager-core
grep Prompt /etc/update-manager/release-upgrades
ค่าต้องเป็น Prompt=lts (อัปเกรดเฉพาะรุ่น LTS) ถ้าเป็น never ตัวอัปเกรดจะไม่เสนอรุ่นใหม่ ให้แก้เป็น lts
ขั้นตอนที่ 4: เตรียม SSH สำรอง
เมื่อรันผ่าน SSH ตัวอัปเกรดจะเปิด SSH Daemon ตัวที่สองที่พอร์ต 1022 ให้เป็นช่องทางสำรองหาก SSH หลักมีปัญหาระหว่างอัปเกรด ถ้าใช้ Firewall ให้เปิดพอร์ตนี้ชั่วคราว:
sudo ufw allow 1022/tcp
หากเซิร์ฟเวอร์มี Security Group หรือ Firewall ภายนอกจากฝั่งผู้ให้บริการ ให้เปิดพอร์ตนั้นเพิ่มด้วย และจำไว้ว่าต้องปิดกลับหลังอัปเกรดเสร็จ
ตัวอัปเกรดจะรันตัวเองภายใต้โปรแกรม screen โดยอัตโนมัติ ถ้าการเชื่อมต่อหลุดกลางทาง ให้ SSH กลับเข้ามาแล้วดู Session ด้วย sudo screen -ls จากนั้นกลับเข้าไปด้วย sudo screen -x งานจะยังทำต่อไม่หยุด (หลักการเดียวกับ ใช้ tmux ให้คำสั่งทำงานต่อแม้ SSH หลุด)