2017/01/08

NVMe SSDにUbuntu-Xen-vnc構築までの小ネタ

M.2 Intel SSD6 512GB PCIe gen3.0 x4 (NVMe) がやっと届いたので、デュアルブートで今までとは違う環境を入れてみる。

NVMeを意識して買ったわけじゃないので最初BIOSでストレージデバイスとして認識してないじゃん?とちょっと焦った。nvmeはBIOS的にもまた別のデバイスなのね。

Ubuntu16.04LTSのインストーラでインストールディスクを手動で選ぶことでnvmeデバイスにインストールできた。その後はBIOSでもブートデバイスとして選べるようになった。
2度目以降のインストールでは(もう何度もやってる・・)パーティションが作られているためえ普通にインストールメニューに出てくる。

kvmじゃなくて今回はXenをベースに組み立ててみる。VMストレージはイメージファルじゃなくて LVM で組んでいくことにする。そのため、最初のUbuntuインストールでは
ガイド付きLVMを構成する方を選ぶ。
そして大事なのが、dom0に相当するubuntu-rootには全部使うのではなく、32GB程度の小さめにして、残りをゲストマシンに空けておく。

空けるといってもLVM的な空容量であって物理的にはパーティショニングされている。
ディスク全体が1つのvgになっているので、あとはlvで消費していくだけ。

無事Ubuntuのインストールが終わったら、早速 ssh したところ以前のfootprintと異なっているため .ssh/known_hosts でワーニングが出る。エラーじゃなくワーニングなのはIPアドレスが同じでもホスト名が異なるため別物となるから。IPアドレスだと同じになってしまうので、/etc/hostsにホスト名を登録してホスト名アクセスすれば、ブートOSを変更するたびにイラっとしないで済む。

ワーニングを黙らせるには、.ssh/known_hostsに従来の方にはホスト名,IPアドレスとなって新しい方はIPアドレス記述がない。新しいホスト名,IPアドレス にしてやると次回からスムースに ssh できる。

xen環境は未経験なのと、その後試したいことがあるのでXenを構築する。
Xenインストール
$ sudo apt-get install xen-hypervisor-amd64
$ sudo reboot

Network設定
$ sudo apt-get install bridge-utils(多分すでに入っているはず)

/etc/network/interfacesの編集内容(物理Ethernetデバイス名が'eth0'だと仮定)
auto lo eth0 xenbr0
iface lo net loopback
iface xenbr0 net dhcp
bridge_ports eth0
iface eth0 inet manual
Network再起動
$ sudo ifdown eth0 && sudo ifup xenbr0 && sudo ifup eth0

以下のことをやっておくとパフォーマンスやセキュリティ的にいいらしい
$ sudo vi /etc/sysctl.conf
net.bridge.bridge-nf-call-ip6tables = 0
net.bridge.bridge-nf-call-iptables = 0
net.bridge.bridge-nf-call-arptables = 0
設定
$ sudo sysctl -p /etc/sysctl.conf

VM作成
virt-builder: VMディスクイメージ作成ツール
xen-tools: PVゲスト作成ツール
virt-manager: libvirt使ってVMを作成管理するGUIツール(kvm/xenどちらでも)

など、いろいろあるけど、xen-toolsで作る
$ sudo apt install xen-tools

PV domU作成
PV:準仮想化という意味。
HVMというアプローチがあるが完全仮想化でWindowsを入れる場合とかに使う。
KVMと大して変わらないことになるので、ここはあえてPVで。

ホストOS(Dom0)インストール時に構築されているLVM上に論理ボリューム作成

ボリュームグループ確認。空容量とか確認。
$ sudo vgs

論理ボリューム作成
$ sudo lvcreate -L 10G -n gest-name /dev/<vgname>

論理ボリューム確認
$ sudo lvs

Netbootインストーライメージのダウンロード
https://launchpad.net/ubuntu/+archivemirrors から適当なダウンロードサイトを選ぶ

Ubuntu-16.04LTSの場合 (Guestname: xenial)
$ sudo mkdir -p /var/lib/xen/images/netboot/xenial
$ cd /var/lib/xen/images/netboot/xenial
$ wget http://<mirror>/ubuntu/dists/xenial/main/installer-amd64/current/images/netboot/xen/vmlinuz
$ wget http://<mirror>/ubuntu/dists/xenial/main/installer-amd64/current/images/netboot/xen/initrd.gz

ゲストOS設定ファイル
$ cd /etc/xen
$ cp xlexample.pvlinux xenial.cfg
$ vi xenial.cfg

# Guest name
name = "xenial"

# Kernel image to boot
kernel = "/var/lib/xen/images/netboot/xenial/vmlinuz"

# Ramdisk (optional)
ramdisk = "/var/lib/xen/images/netboot/xenial/initrd.gz"

#bootloader = "/usr/lib/xen-4.6/bin/pygrub"

# Kernel command line options
extra = 'root=/dev/xvda1 xen-fbfront.video=16,1024,768'

# Initial memory allocation (MB)
memory = 2048
# Number of VCPUS
vcpus = 2

# Network devices
vif = [ '' ]

# Disk Devices
disk = [ '/dev/xenbox-vg/xenial,raw,xvda,rw' ]

# vfb
#vfb = [ 'type=vnc,vncdisplay=1,vncpasswd=pass-word' ]
vfb = [ 'type=vnc' ]
stdvga=1
videoram=16

VM起動
$ sudo xl create -c /etc/xen/ubud1.cfg
いつもの感じでUbuntuインストール

完了したら設定ファイルをpygrubブートローダに切り替え
$ vi /etc/xen/xenial.cfg

#kernel = "/var/lib/xen/images/ubuntu-netboot/trusty14LTS/vmlinuz"
#ramdisk = "/var/lib/xen/images/ubuntu-netboot/trusty14LTS/initrd.gz"
bootloader = "/usr/lib/xen-4.4/bin/pygrub"
特にgrubmenuとか必要なければ直接
kernel = "/vmlinuz"
ramdisk = "/initrd.img"

でもいいと思う。

VM再起動
$ sudo xl shutdown xenial
$ sudo xl create -c /etc/xen/xenial.cfg

VMコンソールに入る
$ sudo xl console xenial

コンソールから抜ける
Ctrl+]

ここまでは https://help.ubuntu.com/community/Xen に書いてある通り。

vfb設定だけ付け足した。vfbでvnc使う設定に。
xen-fbfront.video=16,1024,768 は、1024x768 16MBという意味。

クライアント側でssh-vncトンネル接続
$ ssh -l ubuntu -L 5901:localhost:5901 xenbox

turbovnc, tightvnc or chicken などで接続
$ vncviewer localhost:5901

接続できたものの、マウスカーソルの位置がズレズレ・・
ネットで調べたらなんと、xen-vncはデフォルトの800x600になっていて、今回のように
1024x768にディスプレイを拡張するとキャリブレーションがズレてしまうのだ。
素直に800x600で使うか、もしくは以下の方法でキャリブレーションする。

VMへひとまずVNCでログインして、
$ xinput
で仮想マウスデバイス名を確認。自分の場合デフォルトの"Xen Virtual Pointer"

$ xinput list-props "Xen Virtual Pointer"
で、属性を確認。
Evdev Axis Calibration が設定されていない。なのでデフォの800x600になってしまう。

$ xinput set-prop "Xen Virtual Pointer" 'Evdev Axis Calibration' 0 1024 0 768
これでディスプレイにマッチするようキャリブレーションされる。

ログアウトするとまた元に戻ってしまうが、とりあえずこんなとこかな。

0 件のコメント:

コメントを投稿