บังเอิญได้มีโอกาสเล่น OpenStack ผ่าน Community Cloud เลยได้ลองทำ Services Image สำหรับ OpenStack ดูบ้าง ซึ่งวิธีการไม่แตกต่างจากการทำ Image สำหรับ Eucalyptus สักเท่าไร หลักการทำมีดังนี้
- สร้าง Image แบบ qcow2 เพื่อใช้เป็น Disk Image
- ใช้ kvm ติดตั้ง OpenSUSE ลงใน Disk Image
- ปรับแต่ง Disk Image เพื่อติดตั้ง ssh key
มาลงมือกันเลยครับ เริ่มจากสร้าง Disk Image ให้พอสำหรับติดตั้ง OpenSUSE
kvm-img create -f qcow2 opensuse.img 5G
จากนั้นก็ติดตั้ง OpenSUSE ลงไปใน Disk Image
kvm -m 512 -cdrom openSUSE-11.4-DVD-x86_64.iso -drive file=opensuse.img,if=virtio,index=0 -boot d -net nic -net user -nographic -vnc :1
ใช้ VNC ต่อไปยัง VM ที่เรา run ดังนี้
vncviewer 10.10.10.1 :1
เลือกติดตั้ง SSH Server, CURL และ package ที่ต้องการ หลังจากติดตั้งเสร็จให้ shutdown VM และ boot เพื่อปรับแต่งดังนี้
kvm -m 512 -drive file=opensuse.img,if=virtio,index=0,boot=on -boot c -net nic -net user -nographic -vnc :1
ให้ VNC เชื่อมต่อเหมือนเดิม ใช้ zypper ติดตั้ง openssh, curl ดังนี้
zypper install openssh curl
เพิ่ม ssh key อัตโนมัติเมื่อ start instance ให้สร้างไฟล์ /etc/init.d/sshkey แล้วใส่ config ลงไปดังนี้
echo >> /root/.ssh/authorized_keys
curl -m 10 -s http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key | grep 'ssh-rsa' >> /root/.ssh/authorized_keys
echo "AUTHORIZED_KEYS:"
echo "************************"
cat /root/.ssh/authorized_keys
echo "************************"
เปลี่ยน permission ให้ execute ได้ดังนี้
chmod 755 /etc/init.d/sshkey
จากนั้น config ให้เริ่มทำงานทุกครั้งเมื่อ boot เครื่องดังนี้
chkconfig sshkey on
ตั้งค่า firewall ให้ ssh เข้ามาได้ ใช้ yast2 ไม่ใช่ iptable นะจ๊ะ
yast2
จากนั้นลบ network persistance rules ออก เพื่อให้ instance จัดการ network insterface ได้ถูกต้อง
rm -rf /etc/udev/rules.d/70-persistent-net.rules
เท่านี้ก็เรียบร้อยแล้ว :) shutdown VM แล้ว
หากต้องการใช้งานก็ Upload Image ไปยัง OpenStack ได้เลย โดยใช้คำสั่ง
cloud-publish-image amd64 opensuse.img opensusebucket
หลังจาก Upload Image เสร็จเรียบร้อยแล้ว เราจะได้หมายเลข ami กับไฟล์ image manifest ดังนี้
ami-00000001 opensusebucket/opensuse.img.manifest.xml
หากต้องการ start instance ก็สามารถสั่ง run ได้เลย โดยใช้คำสั่ง
euca-run-instances ami-00000001 -k mykey -t m1.tiny
สำหรับการทำ Service Image จาก Linux Distribution อื่นๆ ก็ใช้วิธีการคล้ายๆ กันนี้ครับ