vmplayer内のWheezyにXenを導入

■vmplayer内のWheezyにXenを導入
 WheezyでのXenはどんなものかと。NICが使えないのでコンソールのみ。
 雰囲気だけです。

■Xen関連のパッケージの確認

$ echo "xen-linux-system-`uname -r` xen-utils-common xen-tools libvirt-bin uuid-runtime qemu-kvm" | \
  for list in `xargs`;do echo -n "$list,";apt-cache show "$list" | grep ^Descript | awk -F\: '{print $2}' | head -1;done
xen-linux-system-3.2.0-4-amd64, Xen system with Linux 3.2 on 64-bit PCs (meta-package)
xen-utils-common, Xen administrative tools - common files
xen-tools, Tools to manage Xen virtual servers
libvirt-bin, libvirt ライブラリ用のプログラム
uuid-runtime, runtime components for the Universally Unique ID library
qemu-kvm, x86 ハードウェアの完全仮想化

■Xenの導入

$ echo "xen-linux-system-`uname -r` xen-utils-common xen-tools libvirt-bin uuid-runtime qemu-kvm" | \
  sudo apt-get install -y `xargs`

■コマンドの確認

$ echo "xen-linux-system-`uname -r` xen-utils-common xen-tools libvirt-bin uuid-runtime qemu-kvm" | \
  for list in `xargs`;do echo "[ $list ]";dpkg -L "$list" | grep bin/ | grep -v doc/;done
[ xen-linux-system-3.2.0-4-amd64 ]
[ xen-utils-common ]
/usr/sbin/xen
/usr/lib/xen-common/bin/xen-toolstack
/usr/lib/xen-common/bin/xen-utils-wrapper
/usr/lib/xen-common/bin/xen-init-list
/usr/lib/xen-common/bin/xen-version
/usr/lib/xen-common/bin/xen-dir
/usr/lib/xen-common/bin/xen-toolstack-wrapper
/usr/sbin/xentrace_setsize
/usr/sbin/xenpm
/usr/sbin/xentrace_setmask
/usr/sbin/xentrace_format
/usr/sbin/xentop
/usr/sbin/cpuperf-xen
/usr/sbin/xl
/usr/sbin/xentrace
/usr/sbin/xm
/usr/sbin/cpuperf-perfcntr
/usr/sbin/xenperf
[ xen-tools ]
/usr/bin/xt-customize-image
/usr/bin/xt-create-xen-config
/usr/bin/xen-list-images
/usr/bin/xen-delete-image
/usr/bin/xt-install-image
/usr/bin/xen-create-nfs
/usr/bin/xen-create-image
/usr/bin/xt-guess-suite-and-mirror
/usr/bin/xen-update-image
[ libvirt-bin ]
/usr/sbin/libvirtd
/usr/bin/virt-xml-validate
/usr/bin/virt-pki-validate
/usr/bin/virt-host-validate
/usr/bin/virsh
[ uuid-runtime ]
/usr/bin/uuidgen
/usr/sbin/uuidd
[ qemu-kvm ]
/usr/bin/kvm
/usr/bin/kvm_stat
/usr/bin/kvm-io
/usr/bin/kvm-nbd
/usr/bin/kvm-img

■grubのエントリの確認
 03までの4つのエントリがある。

$ grep "menuentry" /boot/grub/grub.cfg | nl -w2 -v0 | sed s/"--"/"\n\t&"/g
 0      menuentry 'Debian GNU/Linux, with Linux 3.2.0-4-amd64'
        --class debian
        --class gnu-linux
        --class gnu
        --class os {
 1      menuentry 'Debian GNU/Linux, with Linux 3.2.0-4-amd64 (recovery mode)'
        --class debian
        --class gnu-linux
        --class gnu
        --class os {
 2      menuentry 'Debian GNU/Linux, with Xen 4.1-amd64 and Linux 3.2.0-4-amd64'
        --class debian
        --class gnu-linux
        --class gnu
        --class os
        --class xen {
 3      menuentry 'Debian GNU/Linux, with Xen 4.1-amd64 and Linux 3.2.0-4-amd64 (recovery mode)'
        --class debian
        --class gnu-linux
        --class gnu
        --class os
        --class xen {

■「with Xen 4.1-amd64」を選択するように起動順序を変更。

$ uname -a
Linux vmdebian2 3.2.0-4-amd64 #1 SMP Debian 3.2.46-1 x86_64 GNU/Linux

$ ls /etc/grub.d/
00_header        10_linux      30_os-prober  41_custom
05_debian_theme  20_linux_xen  40_custom     README

$ sudo mv /etc/grub.d/10_linux /etc/grub.d/25_linux
$ sudo update-grub2
Generating grub.cfg ...
Found background image: /usr/share/images/desktop-base/desktop-grub.png
Found linux image: /boot/vmlinuz-3.2.0-4-amd64
Found initrd image: /boot/initrd.img-3.2.0-4-amd64
Found linux image: /boot/vmlinuz-3.2.0-4-amd64
Found initrd image: /boot/initrd.img-3.2.0-4-amd64
  No volume groups found
done

$ grep "menuentry\|linux.*boot\|multiboot" /boot/grub/grub.cfg | head -2 | sed s/"--"/"\n\t&"/g
menuentry 'Debian GNU/Linux, with Xen 4.1-amd64 and Linux 3.2.0-4-amd64'
        --class debian
        --class gnu-linux
        --class gnu
        --class os
        --class xen {
        multiboot       /boot/xen-4.1-amd64.gz placeholder

$ sudo shutdown -r now && exit

■Xenの起動確認

$ sudo grep -i "boot.*xen" /var/log/syslog
Jul  1 23:01:03 vmdebian1 kernel: [    0.000000] Booting paravirtualized kernel on Xen

$ lsmod | grep xen
xen_gntdev             13021  0
xen_evtchn             13012  1
xenfs                  17724  1

$ sudo xm list
Name                                        ID   Mem VCPUs      State   Time(s)
Domain-0                                     0   468     2     r-----     29.7

■仮想マシンのNICなので無効にするのだが、
 ここではどんなvifができるか見たいので、作成。

$ sudo /etc/xen/scripts/network-bridge status | grep ^bridge
bridge name     bridge id               STP enabled     interfaces
can't get info Operation not supported

$ grep "^(" /etc/xen/xend-config.sxp
(network-script network-bridge)
(vif-script vif-bridge)
(dom0-min-mem 196)
(enable-dom0-ballooning yes)
(total_available_memory 0)
(dom0-cpus 0)
(vncpasswd '')

$ sudo /etc/init.d/xen restart
[ ok ] Restarting Xen daemons: xend xend xenconsoled.

■デフォルトの設定確認

$ grep -v "^#\|^\$" /etc/xen-tools/xen-tools.conf
install-method = debootstrap
size   = 4Gb      # Disk image size.
memory = 128Mb    # Memory size
swap   = 128Mb    # Swap size
fs     = ext3     # use the EXT3 filesystem for the disk image.
dist   = `xt-guess-suite-and-mirror --suite` # Default distribution to install.
image  = sparse   # Specify sparse vs. full disk images.
kernel = /boot/vmlinuz-`uname -r`
initrd = /boot/initrd.img-`uname -r`
mirror = `xt-guess-suite-and-mirror --mirror`
ext3_options     = noatime,nodiratime,errors=remount-ro
ext2_options     = noatime,nodiratime,errors=remount-ro
xfs_options      = defaults
reiserfs_options = defaults
btrfs_options    = defaults

■debootstrapがwgetでイメージを取得するので、必要であればプロキシの設定を。

$ grep wget /usr/sbin/debootstrap
      --verbose              don't turn off the output of wget

$ grep ^[hf].*_proxy /etc/wgetrc | sed s/"[0-9]"/"X"/g
https_proxy = http://XXX.XX.XX.XX:XXXX/
http_proxy = http://XXX.XX.XX.XX:XXXX/
ftp_proxy = http://XXX.XX.XX.XX:XXXX/

■debianのイメージを作成

$ sudo xen-create-image --hostname vmvm2 \
  --ip 192.168.181.60 --netmask 255.255.255.0 --gateway 192.168.181.2 \
  --passwd --dir /var/local

General Information
--------------------
Hostname       :  vmvm2
Distribution   :  wheezy
Mirror         :  http://ftp.jp.debian.org/debian/
Partitions     :  swap            128Mb (swap)
                  /               4Gb   (ext3)
Image type     :  sparse
Memory size    :  128Mb
Kernel path    :  /boot/vmlinuz-3.2.0-4-amd64
Initrd path    :  /boot/initrd.img-3.2.0-4-amd64

Networking Information
----------------------
IP Address 1   : 192.168.181.60 [MAC: 00:16:3E:CB:CE:DB]
Netmask        : 255.255.255.0
Gateway        : 192.168.181.2


Creating partition image: /var/local/domains/vmvm2/swap.img
Done

Creating swap on /var/local/domains/vmvm2/swap.img
Done

Creating partition image: /var/local/domains/vmvm2/disk.img
Done

Creating ext3 filesystem on /var/local/domains/vmvm2/disk.img
Done
Installation method: debootstrap
Done

Running hooks
No role scripts were specified.  Skipping
Setting up root password
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
All done


Logfile produced at:
         /var/log/xen-tools/vmvm2.log

Installation Summary
---------------------
Hostname        :  vmvm2
Distribution    :  wheezy
IP-Address(es)  :  192.168.181.60
RSA Fingerprint :  XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX
Root Password   :  N/A

■確認

$ sudo wc -l /var/log/xen-tools/vmvm2.log
1048 /var/log/xen-tools/vmvm2.log

$ find /var/local/domains/
/var/local/domains/
/var/local/domains/vmvm2
/var/local/domains/vmvm2/swap.img
/var/local/domains/vmvm2/disk.img

$ ls -l /etc/xen/vmvm2.cfg
-rw-r--r-- 1 root root 733  71 23:52 /etc/xen/vmvm2.cfg

$ grep -v "^#\|^\$" /etc/xen/vmvm2.cfg
kernel      = '/boot/vmlinuz-3.2.0-4-amd64'
ramdisk     = '/boot/initrd.img-3.2.0-4-amd64'
vcpus       = '1'
memory      = '128'
root        = '/dev/xvda2 ro'
disk        = [
                  'file:/var/local//domains/vmvm2/disk.img,xvda2,w',
                  'file:/var/local//domains/vmvm2/swap.img,xvda1,w',
              ]
name        = 'vmvm2'
vif         = [ 'ip=192.168.181.60 ,mac00:16:3E:XX:XX:XX' ]
on_poweroff = 'destroy'
on_reboot   = 'restart'
on_crash    = 'restart'

■NICの名前を追加、無効にしておく。

$ sudo grep ^vif /etc/xen/vmvm2.cfg
vif         = [ 'ip=192.168.181.60 ,mac=00:16:3E:XX:XX:XX' ]
$ sudo sed -i s/"^vif.*[A-F0-9]"/"& ,bridge=eth0"/ /etc/xen/vmvm2.cfg
$ sudo sed -i s/"^vif.*"/"# &"/ /etc/xen/vmvm2.cfg
$ sudo grep vif /etc/xen/vmvm2.cfg
# vif         = [ 'ip=192.168.181.60 ,mac=00:16:3E:XX:XX:XX ,bridge=eth0' ]

■仮想マシンの起動
 「-c」はシリアルコンソールにつないだかのように起動する。
 「-c」を除くとバックグラウンドで起動。

$ sudo xm create /etc/xen/vmvm2.cfg -c
Using config file "/etc/xen/vmvm2.cfg".
...

Debian GNU/Linux 7 vmvm2 hvc0

vmvm2 login: root
Password:
Linux vmvm2 3.2.0-4-amd64 #1 SMP Debian 3.2.46-1 x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
root@vmvm2:~#

■別のホストコンソールから確認

$ sudo xm list
Name                                        ID   Mem VCPUs      State   Time(s)
Domain-0                                     0   372     2     r-----    372.3
vmvm2                                        6   128     1     -b----      5.9

■ゲストOS側でも再起動可能だが、コンソールから切り離されてしまう。
 ネットワークが無いので、「xm shutdown」で落とす。

$ sudo xm shutdown vmvm2

■その他

$ sudo xm
Usage: xm <subcommand> [args]

Control, list, and manipulate Xen guest instances.

Common 'xm' commands:

 console              Attach to <Domain>'s console.
 vncviewer            Attach to <Domain>'s VNC server.
 create               Create a domain based on <ConfigFile>.
 new                  Adds a domain to Xend domain management
 delete               Remove a domain from Xend domain management.
 destroy              Terminate a domain immediately.
 dump-core            Dump core for a specific domain.
 help                 Display this message.
 list                 List information about all/some domains.
 mem-set              Set the current memory usage for a domain.
 migrate              Migrate a domain to another machine.
 pause                Pause execution of a domain.
 reboot               Reboot a domain.
 reset                Reset a domain.
 restore              Restore a domain from a saved state.
 resume               Resume a Xend managed domain
 save                 Save a domain state to restore later.
 shell                Launch an interactive shell.
 shutdown             Shutdown a domain.
 start                Start a Xend managed domain
 suspend              Suspend a Xend managed domain
 top                  Monitor a host and the domains in real time.
 unpause              Unpause a paused domain.
 uptime               Print uptime for all/some domains.
 usb-add              Add the usb device to FV VM.
 usb-del              Delete the usb device to FV VM.
 domstate             get the state of a domain
 vcpu-set             Set the number of active VCPUs for allowed for
                      the domain.

<Domain> can either be the Domain Name or Id.
For more help on 'xm' see the xm(1) man page.
For more help on 'xm create' see the xmdomain.cfg(5)  man page.

For a complete list of subcommands run 'xm help'.