in How-to

สร้าง OpenSUSE service image สำหรับ OpenStack

บังเอิญได้มีโอกาสเล่น 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 อื่นๆ ก็ใช้วิธีการคล้ายๆ กันนี้ครับ