in How-to

สร้าง Cloud Services Image สำหรับ Eucalyptus ภาค 2

ในครั้งที่แล้วเราสร้าง EMI โดยการติดตั้ง OS ลงใน Disk Image ครั้งนี้ผมจะมาแนะนำวิธีแบบฉลาดแกมโกงคือวิธีการแก้ไข Disk Image ที่มีอยู่แล้ว ในโครงการ Eucalyptus มี Pre-Packaged Image ที่ใช้เป็น Guest OS อยู่แล้ว อยู่ในรูปแบบ JeOS (Just enough Operating System) ซึ่งเราสามรถเอา Image มาแก้ไขได้ :) ไม่ได้ล้อเล่นครับ เอามาแก้ไขและติดตั้งโปรแกรมหรือของที่ยังขาดได้โดยตรงเลยล่ะ วิธีการนี้เป็นวิธีการเล่นกับ Disk Image ทั่วๆ ไปที่เรามักพบเจอกันอยู่แล้ว อธิบายหลังการคร่าวๆ กันก่อน JeOS Image ที่มีอยู่แล้วก็คือ Disk Image, Kernel Image (มีทั้ง KVM และ Xen) และ Ram Disk Image (Initrd.ing สำหรับ KVM,Xen) ซึ่งเราจะต้อง mount เจ้า Disk Image นี้ขึ้นมาเป็นอุปกรณ์หนึ่งในเครื่องของเราจากนั้นก็แก้ไขเหมือนกับการใช้งาน Storage ทั่วไป

สำหรับการติดตั้งโปรแกรมหรือบริการเพิ่มเติมเราสามารถใช้เครื่องมือที่ เป็น package manager ของระบบปฏิบัติการนั้นๆ ได้โดยตรง ไม่ว่าจะเป็น Apt, Yum หรือ Zypper แต่ต้องทำในสิทธิ root เท่านั้น ที่ต้องระวังคือการติดตั้งอย่าให้ Disk Image ถูกเขียนจนเต็ม หากทราบว่าขนาดของ Disk Image ไม่พอให้ขยาย Disk Image ก่อนแล้วค่อยติดตั้งโปรแกรมเพิ่มเติมลงไป และสุดท้ายอย่ายุ่งกับ Kernel เป็นดีที่สุด เพราะคุณอาจต้องไล่เก็บ Kernel ของ KVM,Xen และ Initrd.img ของ KVM, Xen ด้วย อันนี้เปลืองแรงโดยใช่เหตุ เข้าใจข้อกำหนดกันแล้วมาลงมือทำกันได้เลยขั้นแรกไปดาวน์โหลด Image มาก่อน อาจจะไปเก็บเอาที่ UEC Release Image หรือ Pre-Packaged Image ของ Eucalyptus ได้เช่นกัน ผมยกตัวอย่างจาก Pre-Packaged Image จาก Eucalyptus ก็แล้วกันครับ มีขนาดเล็กดีครับ :) เครื่องผมเป็น Ubuntu 9.10 32 bits ผมขอเลือก Image ของ Ubuntu 32 bit มาเล่นก็แล้วกันครับ ใครใช้ Centos, Fedora ก็เลือกเอามาปรับแต่งกันตามสะดวกครับ ขั้นแรกดาวน์โหลด Pre-packaged มาก่อน

wget http://www.eucalyptussoftware.com/downloads/eucalyptus-images/euca-ubuntu-9.04-i386.tar.gz

เมื่อได้ไฟล์มาแล้วให้คลี่ไฟล์ออกครับ

tar zxvf euca-ubuntu-9.04-i386.tar.gz

เราจะได้ directory ที่ชื่อ euca-ubuntu-9.04-i386 ในนั้นจะมี kernel, initrd.img และ disk image เรียงกันอยู่เป็นระเบียบ :) disk image ที่เราจะเอามาปรับแต่งกันอยู่ที่ไฟล์ ubuntu.9-04.x86.img เอ้ามาต่อกัน

สร้าง loop device ขึ้นมาเพื่อใช้เป็น device ในการ mount image ดังนี้

cd euca-ubuntu-9.04-i386
losetup /dev/loop5 ubuntu.9-04.x86.img

ตอนนี้ disk image จะถูกผูกอยู่กับ loop device ชื่อ /dev/loop5 ตอนนี้เราเสมือนมี disk อยู่ 1 ลูก ที่รอการ mount เจ๋งมั๊ยอ่ะ เอ้าจะช้าอยู่ใย mount มันซะเลย

mkdir /media/euca-mount
mount /dev/loop5 /media/euca-mount

หลังจาก mount แล้วเราจะเห็น file ที่มีโครงสร้างเหมือน LSB เปี๊ยบ ทีนี้อยากจะ copy อะไรใส่ลงไปเพิ่มก็ทำได้ตามสบายครับ :) สำหรับการติดตั้งโปรแกรมเพิ่มเติมให้ chroot เข้าไปแล้วใช้ package manager ของ OS นั้นๆ เป็นตัวจัดการ เท่านี้เราก็แก้ไข Pre-Packaged เพื่อสร้าง services ใหม่ๆ บน Cloud ได้เอง ง่าย และรวดเร็วครับ :) ในภาคต่อไปจะเป็นการยืดหดของ Disk Image การทำ Image ให้สนับสนุนในทุกๆ Hypervisor (KVM,Xen,Vmware,VirtualBox) และการสร้าง Services บน Elastic Block Storage