กลับ

2026/10/12

โครงการย้ายระบบส่วนใหญ่เริ่มต้นจากการตัดสินใจ เช่น การย้ายจาก Oracle Java SE ไปยัง OpenJDK การเปลี่ยนดิสทริบิวชัน Linux ที่หมดอายุการสนับสนุน หรือการรวมเซิร์ฟเวอร์เข้าสู่คลาวด์ส่วนตัว บนกระดาษแผนงานมักดูเรียบง่าย แต่แล้วทีมโครงการกลับพบรันไทม์ Java ที่ไม่มีใครรู้ว่ามีอยู่ เซิร์ฟเวอร์ที่ไม่มีผู้รับผิดชอบ และแอปพลิเคชันที่พึ่งพาเวอร์ชันเก่าอยู่โดยไม่มีใครสังเกต กำหนดการจึงล่าช้าและงบประมาณก็บานปลาย

วิธีหลีกเลี่ยงปัญหานี้คือการเริ่มต้นด้วยการสำรวจ นั่นคือการจัดทำบัญชีรายการที่ครบถ้วนและอิงข้อเท็จจริงของสิ่งที่ติดตั้งอยู่จริง บทความนี้อธิบายว่าควรเก็บข้อมูลอะไร เก็บอย่างไรบน Windows และ Linux ควรเตรียมรับมือกับเรื่องที่ไม่คาดคิดอะไรบ้าง และจะนำผลลัพธ์ไปจัดทำแผนการย้ายระบบได้อย่างไร

ประเด็นสำคัญ

  • จัดทำบัญชีรายการ Java และ Linux ให้ครบถ้วนก่อนวางแผนการย้ายระบบใด ๆ
  • สำหรับรันไทม์แต่ละตัว ให้บันทึกเวอร์ชันแบบเต็ม ผู้จำหน่าย พาธ และผู้รับผิดชอบ
  • ค้นหาในระบบไฟล์ด้วย ไม่ใช่ดูเพียงรายการแพ็กเกจ เพราะรันไทม์จำนวนมากถูกแตกไฟล์ไว้โดยตรงหรือมาพร้อมกับแอปพลิเคชัน
  • จัดผลลัพธ์ออกเป็นสี่กลุ่ม (ถอนออก, แทนที่, ประสานงาน, ตรวจสอบ) แล้ววางแผนต่อจากนั้น

เหตุใดการสำรวจจึงต้องมาก่อนการย้ายระบบ

การย้ายระบบจะดีได้เพียงใดขึ้นอยู่กับข้อมูลที่ใช้เป็นพื้นฐาน หากไม่มีบัญชีรายการ คุณจะต้องประเมินขอบเขตจากความทรงจำ สเปรดชีตเก่า และบันทึกด้านไลเซนส์ ซึ่งไม่มีแหล่งใดสะท้อนสิ่งที่ทำงานอยู่จริงในปัจจุบัน

บัญชีรายการที่ดีจะให้สามสิ่งแก่คุณ:

  • ขอบเขต: มีเครื่อง รันไทม์ และแอปพลิเคชันกี่รายการที่ได้รับผลกระทบ เพื่อให้คุณประเมินแรงงานและต้นทุนได้อย่างสมจริง
  • ความเสี่ยง: ระบบใดใช้เวอร์ชันที่ไม่ได้รับการสนับสนุนหรือยังไม่ได้แพตช์ และระบบใดมีความสำคัญต่อธุรกิจ
  • ความเป็นเจ้าของ: ใครเป็นผู้รับผิดชอบแต่ละระบบ เพื่อให้การทดสอบและการอนุมัติมีผู้รับผิดชอบที่ชัดเจน

นอกจากนี้ บัญชีรายการยังช่วยปกป้องคุณในการเจรจาเรื่องไลเซนส์ด้วย หากผู้จำหน่ายถามว่าคุณมีการติดตั้งอยู่กี่ชุด บัญชีรายการที่เป็นปัจจุบันจะช่วยให้คุณตอบได้ด้วยข้อเท็จจริงแทนการคาดเดา

ข้อมูลที่ต้องเก็บ: เวอร์ชัน ผู้จำหน่าย พาธ และผู้รับผิดชอบ

สำหรับการติดตั้ง Java แต่ละรายการ ให้เก็บข้อมูลอย่างน้อยดังต่อไปนี้:

  • โฮสต์: ชื่อเครื่อง ที่อยู่ IP และประเภทของเครื่องว่าเป็นเซิร์ฟเวอร์ เครื่องเสมือน หรือเครื่องเดสก์ท็อป
  • เวอร์ชัน: สตริงเวอร์ชันแบบเต็ม เช่น 1.8.0_202 หรือ 17.0.10 ไม่ใช่เพียง “Java 8” หรือ “Java 17”
  • ผู้จำหน่าย: ผู้ที่บิลด์รันไทม์นั้น เช่น Oracle หรือดิสทริบิวชัน OpenJDK ต่าง ๆ ลำพังหมายเลขเวอร์ชันไม่ได้บอกข้อมูลนี้
  • ประเภทและพาธ: เป็น JDK แบบเต็มหรือเป็นเพียง JRE และติดตั้งอยู่ในไดเรกทอรีใด
  • การใช้งาน: แอปพลิเคชันหรือบริการใดที่ใช้รันไทม์นั้น หากสามารถตรวจสอบได้
  • ผู้รับผิดชอบ: ทีมหรือบุคคลที่รับผิดชอบเครื่องหรือแอปพลิเคชันนั้น

สำหรับเซิร์ฟเวอร์ Linux ให้เก็บข้อมูลดิสทริบิวชันและเวอร์ชัน เวอร์ชันเคอร์เนล แพ็กเกจหลักที่ติดตั้ง และบริการที่กำลังทำงานอยู่เพิ่มเติมด้วย ข้อมูลนี้จะบอกคุณว่าเซิร์ฟเวอร์ใดอยู่ในขอบเขตของการย้ายระบบ Linux นอกเหนือจากการย้าย Java

Windows, Linux และเครื่องเดสก์ท็อป: แนวทางที่แตกต่างกัน

แต่ละสภาพแวดล้อมต้องใช้วิธีการที่ต่างกันเล็กน้อย คำสั่งด้านล่างเป็นเพียงจุดเริ่มต้น ในทางปฏิบัติ ทีมงานมักนำคำสั่งเหล่านี้ไปรวมไว้ในสคริปต์และรันบนเครื่องทั้งหมดผ่านเครื่องมือบริหารจัดการที่มีอยู่แล้ว

เซิร์ฟเวอร์ Windows

รันไทม์ Java ที่ติดตั้งไว้มักลงทะเบียนตัวเองไว้ใต้รีจิสทรีคีย์ HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft ของ Windows แต่ไม่ใช่ทุกตัวที่ทำเช่นนั้น การค้นหาในระบบไฟล์จึงเชื่อถือได้มากกว่า:

Get-ChildItem -Path C:\ -Filter java.exe -Recurse -ErrorAction SilentlyContinue |
  Select-Object FullName, @{n='Version'; e={$_.VersionInfo.ProductVersion}}

ควรตรวจสอบทุกไดรฟ์ ไม่ใช่เฉพาะไดรฟ์ C: เพราะแอปพลิเคชันเซิร์ฟเวอร์มักติดตั้งไว้บนไดรฟ์ข้อมูลแยกต่างหาก

เซิร์ฟเวอร์ Linux

บน Linux ให้ใช้ตัวจัดการแพ็กเกจร่วมกับการค้นหาไฟล์ เพราะรันไทม์ Java จำนวนมากถูกแตกไฟล์จากไฟล์บีบอัดแทนที่จะติดตั้งเป็นแพ็กเกจ:

cat /etc/os-release
rpm -qa | grep -i -E 'jdk|jre|java'
find / -xdev -type f -name java -perm -u+x 2>/dev/null

บน Debian หรือ Ubuntu ให้ใช้ dpkg -l | grep -i -E 'jdk|jre' แทน rpm สำหรับไฟล์ไบนารี java แต่ละตัวที่พบ การรันด้วยตัวเลือก -version จะแสดงเวอร์ชันและโดยทั่วไปจะแสดงผู้จำหน่ายด้วย ไดเรกทอรี JDK ส่วนใหญ่ยังมีไฟล์ release ที่ระบุชื่อผู้พัฒนา (implementor) ไว้

เครื่องเดสก์ท็อป

เครื่องเดสก์ท็อปเป็นส่วนที่มักถูกมองข้ามมากที่สุดในการจัดทำบัญชีรายการ นักพัฒนามักติดตั้ง JDK ของตนเอง และบางครั้งแอปพลิเคชันทางธุรกิจก็ติดตั้งรันไทม์ Java ไว้โดยที่ผู้ใช้ไม่รู้ตัว เนื่องจากมีเครื่องเดสก์ท็อปจำนวนมาก ควรใช้ข้อมูลบัญชีซอฟต์แวร์จากเครื่องมือบริหารจัดการอุปกรณ์ปลายทางหากทำได้ และรันสคริปต์ขนาดเล็กเฉพาะในจุดที่ยังขาดข้อมูล

เรื่องที่ไม่คาดคิดที่พบบ่อย (JRE ที่มาพร้อมแอปพลิเคชัน, เซิร์ฟเวอร์ที่ถูกลืม)

แทบทุกโครงการสำรวจจะพบสิ่งที่ไม่มีใครคาดคิด สิ่งที่พบบ่อยที่สุด ได้แก่:

  • รันไทม์ที่มาพร้อมแอปพลิเคชัน: แอปพลิเคชันเชิงพาณิชย์จำนวนมากรวมรันไทม์ Java ส่วนตัวไว้ในไดเรกทอรีการติดตั้งของตนเอง ซึ่งอาจไม่ปรากฏในรีจิสทรีหรือในรายการแพ็กเกจใด ๆ
  • หลายเวอร์ชันในเครื่องเดียว: รันไทม์เก่ามักไม่ถูกถอนออกเมื่อมีการติดตั้งตัวใหม่ เซิร์ฟเวอร์หนึ่งเครื่องจึงอาจมีถึงสามหรือสี่เวอร์ชัน
  • เซิร์ฟเวอร์ที่ถูกลืม: เครื่องทดสอบ เซิร์ฟเวอร์ประมวลผลแบบแบตช์รุ่นเก่า และเครื่องเสมือนที่ไม่เคยถูกปลดระวาง ซึ่งมักใช้เวอร์ชันที่ล้าสมัยและยังไม่ได้แพตช์
  • ไม่ทราบผู้รับผิดชอบ: เครื่องที่ไม่มีใครยอมรับว่าเป็นของตน ต้องมีการตัดสินใจเกี่ยวกับเครื่องเหล่านี้ก่อนเริ่มการย้ายระบบ แม้ว่าการตัดสินใจนั้นจะเป็นการปิดเครื่องก็ตาม

เคล็ดลับ: รันไทม์ที่มาพร้อมแอปพลิเคชันมักต้องจัดการผ่านผู้จำหน่ายแอปพลิเคชัน ไม่ใช่แทนที่โดยตรง ดังนั้นควรบันทึกแยกไว้ต่างหากจากรันไทม์ที่คุณบริหารจัดการเอง

จากบัญชีรายการสู่แผนการย้ายระบบ

เมื่อเก็บข้อมูลครบแล้ว ให้รวบรวมไว้ในที่เดียวและทบทวนร่วมกับผู้รับผิดชอบระบบ จากนั้นจัดกลุ่มการติดตั้งออกเป็นประเภทต่าง ๆ:

กลุ่มสิ่งที่อยู่ในกลุ่มสิ่งที่ต้องทำ
ถอนออกรันไทม์ที่ไม่ได้ใช้งานแล้วถอนการติดตั้งทันทีเพื่อลดความเสี่ยงและภาระด้านไลเซนส์
แทนที่รันไทม์ที่คุณบริหารจัดการเองย้ายไปใช้บิลด์ OpenJDK ที่ได้รับการสนับสนุนหลังจากทดสอบแล้ว
ประสานงานรันไทม์ที่มาพร้อมแอปพลิเคชันของบุคคลที่สามขอคำยืนยันการสนับสนุนจากผู้จำหน่ายแอปพลิเคชันก่อน
ตรวจสอบทุกอย่างที่ไม่มีผู้รับผิดชอบหรือไม่มีวัตถุประสงค์ที่ชัดเจนหาผู้รับผิดชอบ หรือตัดสินใจปิดระบบ

จากกลุ่มเหล่านี้ คุณสามารถวางกำหนดการที่สมจริงได้ โดยเริ่มจากระบบที่มีความเสี่ยงต่ำเพื่อพิสูจน์กระบวนการ แล้วจึงขยับไปยังระบบที่สำคัญต่อธุรกิจพร้อมแผนย้อนกลับ (rollback) ที่ผ่านการทดสอบแล้ว

เคล็ดลับ: ควรสแกนสำรวจซ้ำอีกครั้งก่อนการสลับระบบขั้นสุดท้าย เพราะสภาพแวดล้อมเปลี่ยนแปลงไปในระหว่างโครงการที่ใช้เวลานาน และจะมีการติดตั้งใหม่เกิดขึ้น

LOGIQ ช่วยคุณได้อย่างไร

LOGIQ ดำเนินโครงการสำรวจและย้ายระบบสำหรับสภาพแวดล้อม Java และ Linux โดยใช้สคริปต์และขั้นตอนที่ได้รับการปรับปรุงจากโครงการจริงของลูกค้าบนเซิร์ฟเวอร์ Windows เซิร์ฟเวอร์ Linux และเครื่องเดสก์ท็อป หากคุณต้องการความช่วยเหลือในการจัดทำบัญชีรายการหรือนำไปจัดทำแผนการย้ายระบบ ติดต่อ LOGIQ