ลดความยุ่งยากในการใช้คลาวด์ พูดคุยกับเจ้าหน้าที่

Home อัปเกรด Ubuntu เป็น LTS รุ่นใหม่ด้วย do-release-upgrade

อัปเกรด Ubuntu เป็น LTS รุ่นใหม่ด้วย do-release-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 ก่อนเสมอ

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

  • สิทธิ์ 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.0424.04สิ่งที่ต้องทดสอบ
PHP8.18.3ปลั๊กอินและโค้ดเก่าที่ใช้ฟังก์ชันที่ถูกยกเลิก
MariaDB10.610.11ระบบจะอัปเกรดไฟล์ข้อมูลให้ ต้องมี Backup
Python3.103.12สคริปต์และ virtualenv ต้องสร้างใหม่
Nginx1.181.24Config ส่วนใหญ่ใช้ได้ต่อ

ถ้าคุณเคยติดตั้ง 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 หลุด)

ขั้นตอนที่ 5: เริ่มอัปเกรด

sudo do-release-upgrade

ลำดับเหตุการณ์ที่จะพบ:

  1. ตัวอัปเกรดตรวจรุ่นใหม่ แจ้งเรื่อง SSH พอร์ต 1022 และถามว่าจะดำเนินการต่อหรือไม่ ตอบ y
  2. แจ้งว่า Repository ภายนอกถูกปิด (Third party sources disabled) กด Enter
  3. สรุปจำนวนแพ็กเกจที่จะติดตั้ง อัปเกรด และลบ พร้อมขนาดที่ต้องดาวน์โหลด อ่านรายการที่จะถูกลบให้ดี แล้วตอบ y
  4. ระหว่างติดตั้ง อาจมีหน้าจอถามว่าจะรีสตาร์ต Service อัตโนมัติหรือไม่ ตอบ Yes
  5. เมื่อพบไฟล์ Config ที่คุณเคยแก้ไข เช่น /etc/ssh/sshd_config จะถามว่าจะใช้ไฟล์ใหม่ของผู้ผลิตหรือเก็บไฟล์เดิม ส่วนใหญ่ควรเลือก keep the local version currently installed (ค่า Default คือ N) เพื่อไม่ให้การตั้งค่าที่คุณทำไว้หาย สามารถกด D เพื่อดูความแตกต่างก่อนตัดสินใจ
  6. ถามว่าจะลบแพ็กเกจที่ล้าสมัยหรือไม่ ตอบ y ได้ ถ้าไม่มีซอฟต์แวร์ที่คุณติดตั้งเองอยู่ในรายการ
  7. สุดท้ายถามว่าจะรีบูตหรือไม่ ตอบ y

ระยะเวลาทั้งหมดขึ้นกับความเร็วเครือข่ายและจำนวนแพ็กเกจ โดยทั่วไป 20-60 นาที อย่ากด Ctrl+C หรือปิดเครื่องระหว่างติดตั้งแพ็กเกจ

ตรวจสอบผลลัพธ์

หลังรีบูตและเข้า SSH ได้แล้ว:

lsb_release -a
uname -r
systemctl --failed

lsb_release ต้องแสดง Ubuntu 24.04.x LTS และ systemctl --failed ควรแสดง 0 loaded units listed ถ้ามี Service ล้มเหลว ให้ดูสาเหตุด้วย journalctl -u ชื่อservice -b (ดู อ่าน Log ระบบบน Linux ด้วย journalctl)

งานหลังอัปเกรดที่ต้องทำ:

  • ปิดพอร์ต 1022 ที่เปิดไว้: sudo ufw delete allow 1022/tcp
  • เปิด Repository ภายนอกกลับ ใน 24.04 ไฟล์จะอยู่ที่ /etc/apt/sources.list.d/ และถูกเปลี่ยนให้ปิดไว้ ตรวจแต่ละไฟล์ว่าผู้ผลิตรองรับ 24.04 (ชื่อรหัส noble) แล้ว ก่อนแก้ชื่อรหัสจาก jammy เป็น noble แล้วรัน sudo apt update
  • ตรวจ PHP-FPM รุ่นใหม่: Socket เปลี่ยนจาก php8.1-fpm.sock เป็น php8.3-fpm.sock ต้องแก้ fastcgi_pass ใน Nginx หรือ Handler ใน Apache และย้ายค่าที่เคยแก้ใน /etc/php/8.1/ ไปที่ /etc/php/8.3/
  • เปิดเว็บไซต์ทุกเว็บและทดสอบฟังก์ชันหลัก เช่น Login, ฟอร์ม, การส่งอีเมล

ปัญหาที่พบบ่อย

No new release found

ตรวจว่า Prompt=lts และรุ่นปัจจุบันอัปเดตครบแล้ว Ubuntu จะเปิดให้อัปเกรดแบบ LTS ไป LTS หลังออกรุ่นย่อยแรก (.1) ของรุ่นใหม่ ห้ามใช้ตัวเลือก -d บนเครื่อง Production เพราะเป็นการอัปเกรดไปรุ่นที่ยังพัฒนาอยู่

Please install all available updates for your release before upgrading

ยังมีแพ็กเกจที่ไม่ได้อัปเดต ให้กลับไปทำขั้นตอนที่ 2 อีกครั้ง รวมถึงรีบูต

การอัปเกรดหยุดกลางทางด้วย dpkg error

อย่ารีบูตทันที ให้ลองซ่อมแพ็กเกจที่ค้างก่อน:

sudo dpkg --configure -a
sudo apt --fix-broken install
sudo apt full-upgrade

ถ้ายังแก้ไม่ได้และเว็บต้องกลับมาทำงานโดยเร็ว ให้กู้คืนจาก Snapshot ที่ทำไว้ แล้ววางแผนใหม่ด้วยการสร้างเครื่องใหม่แทน

เข้า SSH ไม่ได้หลังรีบูต

เข้าผ่าน Console บนหน้าเว็บ แล้วตรวจ sudo sshd -t ว่าไฟล์ Config มี Error หรือไม่ บน 24.04 SSH ใช้ Socket Activation ผ่าน ssh.socket ถ้าคุณเคยเปลี่ยนพอร์ต SSH ไว้ ให้ตรวจตามบทความ วิธีเปลี่ยน SSH Port บน Linux Server ว่าพอร์ตยังถูกต้อง

หากไม่มั่นใจว่าเครื่องของคุณเหมาะกับการอัปเกรดในที่เดิม หรืออัปเกรดแล้วพบปัญหา ติดต่อทีมซัพพอร์ต THAI DATA CLOUD ได้ที่ https://thaidata.cloud/contact/

ผู้ให้บริการคลาวด์ไทย
เพื่อธุรกิจของคนไทย

"มุ่งมั่น" และ "มั่นคง"
พร้อมรับมือทุกการเติบโต
Trust Cloud
คลาว์ที่ปลอดภัย
คือรากฐานที่มั่นคง
cloud security