debian: ทดลองติดตั้ง Xen บน lenny

Xen เป็นซอฟต์แวร์ที่ใช้ทำ virtualization ในทางทฤษฎีสามารถรัน guest os ใด ๆ ก็ได้ โดยมีข้อแม้คือ ซีพียู ต้องรองรับการทำ virtualization ด้วย แต่ถ้าซีพียูไม่รองรับ ต้องใช้กับ os ที่ดัดแปลงให้ใช้กับ xen เท่านั้น

(คราวก่อนติดตั้งเพื่อทดลอง windows แต่เที่ยวนี้จะทำ host)

ข้อดีคือ เร็วพอควร และสามารถ swap หน่วยความจำได้ ทำให้ใช้งานได้เหมือนในระบบลินุกส์ปกติ
ข้อเสียคือ เนื่องจากแยกเคอร์เนลและฮาร์ดแวร์กันอย่างเด็ดขาด จึงทำให้ต้องการฮาร์ดแวร์มากกว่าปกติ และหากหน่วยความจำที่แบ่งให้แต่ละ guest os ไม่พอ xen จะทำการสลับหน่วยความจำลงดิสก์ ทำให้ระบบทำงานช้ามาก (ซึ่งจะมีผลกับทุก ๆ โปรเซสที่ยังค้างอยู่ในหน่วยความจำ คือช้าทั้งระบบ)

กำหนด
cpu: Intel E2140
mb: ECS P4M890T-M V2.0
ram: 4GB
host: server1.example.com, 192.168.1.31
guest-101: test.example.com, 192.168.1.131, bridged
xen-physical-partition: /dev/sda10,xvda
apt-proxy: 192.168.1.3:9999

ติดตั้ง Xen - dom0
เริ่มติดตั้งบน lenny

# aptitude install xen-hypervisor-3.2-1-i386 xen-linux-system-2.6.26-2-xen-686 xen-utils-3.2-1 xenstore-utils xen-shell

จะใช้เน็ตเวิร์กแบบ bridge

# vi /etc/xen/xend-config.sxp
...
# (network-script network-dummy)
(network-script network-bridge)
...

บูตใหม่

# shutdown -r now

ตรวจผลหลังการบูต

# uname -r
2.6.26-2-xen-686

ติดตั้ง domU
สมมุติว่าจะติดตั้ง xen-domU ไว้ที่ฮาร์ดดิสก์จริง /dev/sda10 ที่แบ่งพาร์ติชั่นเป็น ext3 ไว้เรียบร้อยแล้ว โดยจะเมานต์ /dev/sda10 เป็น /dev/xvda ใน xen และแบ่งพาร์ติชั่นต่าง ๆ ของ domU ใน /dev/xvda

# xm block-attach 0 phy:/dev/sda10 xvda w

ใช้ fdisk แบ่งพาร์ติชั่นตามใจชอบ

# fdisk /dev/xvda

ในที่นี้สมมุติว่า /dev/xvda5 เมานต์เป็น /
และ /dev/xvda6 ใช้เป็น swap

ฟอร์แมต ext3 และ swap ตามลำดับ

# mkfs.ext3 /dev/xvda5
# mkswap /dev/xvda6

ใช้วิธีติดตั้งแบบ debootstrap เนื่องจากเร็วกว่าวิธีอื่น
ติดตั้ง debootstrap

# aptitude install debootstrap

ติดตั้ง lenny บน /dev/xvda5 ผ่าน apt-proxy 192.168.1.3:9999
และเนื่องจากซีพียูไม่รองรับการทำ virtualize จึงต้องติดตั้งเคอร์เนลที่แปลงมาใช้กับ xen แล้ว

# mkdir /mnt/tmp
# mount /dev/xvda5 /mnt/tmp
# debootstrap lenny /mnt/tmp http://192.168.1.3:9999/debian
# mount -t proc none /mnt/tmp/proc
# mount -o bind /dev /mnt/tmp/dev
# mount -t sysfs none /mnt/tmp/sys
# cp /etc/apt/sources.list /mnt/tmp/etc/
# ehco 'test.example.com' > /mnt/tmp/etc/hostname
# chroot /mnt/tmp
test# vi /etc/network/interface
# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
allow-hotplug eth0
iface eth0 inet static
        address 192.168.1.131
        netmask 255.255.255.0
        network 192.168.1.0
        broadcast 192.168.1.255
        gateway 192.168.1.3
        # dns-* options are implemented by the resolvconf package, if installed
        dns-nameservers 192.168.1.3
        dns-search example.com
test# vi /etc/fstab
...
#                
proc            /proc           proc    defaults        0       0
/dev/xvda5      /               ext3    errors=remount-ro 0       1
/dev/xvda6      none            swap    sw              0       0
test# aptitude update
test# aptitude install console-data locales ssh
test# dpkg-reconfigure locales
test# aptitude upgrade
test# aptitude install linux-image-2.6.26-2-xen-686
test# passwd
test# exit
# umount /mnt/tmp/sys
# umount /mnt/tmp/dev
# umount /mnt/tmp/proc
# umount /mnt/tmp
# xm block-detach 0 xvda

สร้างไฟล์คอนฟิก

# vi /etc/xen/101.cfg
#
#  Kernel + memory size
#
kernel      = '/boot/vmlinuz-2.6.26-2-xen-686'
ramdisk     = '/boot/initrd.img-2.6.26-2-xen-686'
memory      = '1024'
#
#  Disk device(s).
#
root        = '/dev/xvda5 ro'
disk        = [ 'phy:sda10,xvda,w' ]
#
#  Hostname
#
name        = 'test.example.com'
#
#  Networking
#
vif         = [ 'bridge=eth0' ]
#
#  Behaviour
#
on_poweroff = 'destroy'
on_reboot   = 'restart'
on_crash    = 'restart'

เริ่ม domU - 101.cfg

# xm create 101.cfg

ตรวจสถานะ

# xm list

เข้าใช้งาน domU ด้วย ssh

# ssh root@test.example.com

เสร็จแล้วครับ

ที่มา