Ubuntu16.04LTS+Xen(その2: 急がば回れ!!)
ということで、VAIO Type Nで再度Lint Mint Mate 18.03をインストールしてXenに再トライです。このマシンのスペックは、
CPU | Celeron 550 2GHz(シングルコア,64bit,Intel VT無し) |
RAM | DDR2 664:2GB(最大容量,増設不可) |
HDD | 160GB |
- ネットワークマネージャー停止
# echo "manual" | sudo tee /etc/init/network-manager.override
この時点では停止していない。これで次回reboot時に停止する。
- bridge-utilsインストール
# sudo apt-get install bridge-utils
- Xen用のbridgeを設定する
# sudo vi /etc/network/interfaces auto lo enp2s0 xenbr0 iface lo inet loopback iface xenbr0 inet dhcp bridge_ports enp2s0 iface enp2s0 inet manual
xenbr0という名前のbridgeを作り、有線LANにbridgeします。
基本的には参照ドキュメントの通りですが、最新のUbuntuやMintではネットワークインターフェイスの命名規則が変わっています。自分のマシンの場合はeth0→enp2s0になっています。
- bridgeに対するnetfilterの削除
# 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
このあと、sysctlコマンドで設定を反映するのですが、実際にbridgeが生成されてからじゃないとsysctlコマンドが有効にならないようです。なので、Xenのインストールとrebootを先にやります。reboot後にbridge xenbr0ができているはずです。
- grubの設定を確認、変更
Xenをインストールすると次回RebootからデフォルトでXen+Dom0としてのUbuntuなりLinux Mintが起動するようなります。grubの設定を下記の様にしておくと、Xenインストール後、再起動時にgrubメニューからXen無しのUbuntu/Mintも起動可能になります。
# sudo vi /etc/default/grub
下記の行GRUB_HIDDEN_TIMEOUTを見つけてコメントアウト。
(Ubuntuだと多分、最初からコメントアウトされているので確認のみ)#GRUB_HIDDEN_TIMEOUT=0
下記コマンドでgrub設定に反映
# sudo update-grub
- Xenをインストール
# sudo apt-get install xen-hypervisor-amd64
Ubuntu16.04やLinux Mint 18.03の場合、上記でxen-4.6がインストールされます。
インストール完了したらrebootします。# sudo reboot
- Xenの起動を確認
再起動したらXenが起動していることを確認します。
# sudo xl list Name ID Mem VCPUs State Time(s) Domain-0 0 1887 1 r----- 681.9
またifconfigコマンド等でbridge xenbr0にIPアドレスが振られていること。
インターネットに疎通あることを確認しておきます。(pingでもcurlでもなんでも)# ifconfig .... xenbr0 Link encap:イーサネット ハードウェアアドレス xx:xx:xx:xx:xx:xx inetアドレス:192.168.11.8 ブロードキャスト:192.168.11.255 マスク:255.255.255.0 inet6アドレス: fe80::xxx:xxxx:xxxx:xxxx/64 範囲:リンク UP BROADCAST RUNNING MULTICAST MTU:1500 メトリック:1 RXパケット:42649 エラー:0 損失:0 オーバラン:0 フレーム:0 TXパケット:29644 エラー:0 損失:0 オーバラン:0 キャリア:0 衝突(Collisions):0 TXキュー長:1000 RXバイト:55748291 (55.7 MB) TXバイト:3242430 (3.2 MB)
xenbr0ができているのを確認したら、reboot前に仕込んだnetfilter停止を実行しておきます。
# sudo sysctl -p /etc/sysctl.conf
- DomUにインストールするUbuntu ServerのISOイメージ取得
http://archive.ubuntu.com/ubuntu/dists/xenial-updates/main/installer-amd64/current/images/netboot/
からmini.isoをダウンロードしました。
- DomUのKernelイメージを格納するディレクトリを作成。
仮に/home/foo/ubuntu-serverとします。
- ダウンロードしたmini.isoをloopバックマウント
mini.isoを置いたディレクトリにcd後、/mntにマウントする前提で以下のコマンドを実行# sudo mount -o loop -t iso9660 ./mini.iso /mnt mount: /dev/loop0 is write-protected, mounting read-only
- kernelとramdiskイメージ取り出し
/mntに下にlinuxとinitrd.gzというファイルが見つかるはずなので、これを先ほど作成した/home/foo/ubuntu-server/にコピーします。
# ls /mnt adtxt.cfg f10.txt f6.txt isolinux.bin linux stdmenu.cfg boot f2.txt f7.txt isolinux.cfg menu.cfg txt.cfg boot.cat f3.txt f8.txt ldlinux.c32 prompt.cfg vesamenu.c32 exithelp.cfg f4.txt f9.txt libcom32.c32 rqtxt.cfg f1.txt f5.txt initrd.gz libutil.c32 splash.png # cp /mnt/linux /home/foo/ubuntu-server/ # cp /mnt/initrd.gz /home/foo/ubuntu-server/ # sudo umount /mnt
- DomU用のディスクイメージファイルを作成
とりあえず10GBもあれば最小構成のUbuntu Serverには十分なので下記の様にファイルを作成しておきます。(LVM等で領域を開ける手もありますが、とりあえず動かすだけならこれが簡単です)
$ truncate -s 10G /home/foo/ubuntu-server/ubuntu.img
- xl.cfgファイルを作成
DomUのコンフィグファイルを作成します。とりあえずubuntu-svr.cfgというファイル名とします。内容は以下の通り。/home/foo/ubuntu-server/配下に置くものとします。name = "ubuntu" kernel = "/home/foo/ubuntu-server/linux" ramdisk = "/home/foo/ubuntu-server/initrd.gz" memory = 512 vcpus = 1 disk = [ 'file:/home/foo/ubuntu-server/ubuntu.img,xvda,w'] vif = [ 'mac=00:16:3e:00:00:01,bridge=xenbr0'] extra = "root=/dev/xvda1" # bootloader = '/usr/lib/xen-4.6/bin/pygrub'
項目 説明 name DomUの名称。xlでDomUを操作するのに使う。とりあえず"ubuntu"としましたが、DomU毎にユニークなら何でも良いです kernel インストール用のISOイメージから取り出したkernelイメージへのパス ramdisk インストール用のISOイメージから取り出したramdiskイメージへのパス memory DomUに割り当てるメモリサイズ。とりあえず512MB vcpus DomUに割り当てるVCPU数。とりあえず1 disk 作成したDomU用のディスクイメージファイルへのパス vif DomU用の仮想ネットワークインターフェイスに割り当てるbridge名。macは省略するとランダムに割り当たるらしいです。固定で割り振る場合は、上位3オクテットは00:16:3e(Xen用に予約されているそうです)、下位3オクテットは任意の値。複数のDomUを作る場合、DomU毎にユニークになる様に extra kernelパラメータ。とりあえずrootのパーティション名を指定。 bootloader Xenのgrubエミュレータへのパス。Xen4.6の場合は '/usr/lib/xen-4.6/bin/pygrub'。この段階ではコメントアウトしておきます。 - xlコマンドでDomU起動
# sudo xl create -c /home/foo/ubuntu-server/ubuntu-svr.cfg
これでネットワークインストール用のLinuxカーネルが起動し、インストーラーが立ち上がるはずです。
もしもxenconsole: Could not read tty from store: Success
というエラーが出たら、
https://tipstricks.itmatrix.eu/ubuntu-16-10-xenconsole-could-not-read-tty-from-store-success/
に記述に従って、xenconsoledを起動し、再度xlコマンドを実行してください。
成功すると下記の様にインストーラの言語選択画面が表示されるはずです。┌───────────────────────┤ [!!] Select a language ├────────────────────────┐ │ │ │ Choose the language to be used for the installation process. The │ │ selected language will also be the default language for the installed │ │ system. │ │ │ │ Language: │ │ │ │ C │ │ English │ │ │ │ <Go Back> │ │ │ └─────────────────────────────────────────────────────────────────────────┘ <Tab> moves; <Space> selects; <Enter> activates buttons
あとはインストーラの指示に従ってインストールしていくだけです。
- DomUを一旦削除。
インストールが成功すると下記の様な感じで自動的にrebootしますが、このままでは再びインストーラが起動します。The system is going down NOW! Sent SIGTERM to all processes Sent SIGKILL to all processes Requesting system reboot [ 181.999057] reboot: Restarting system
従って一旦起動したDomUを削除します。
# sudo xl list Name ID Mem VCPUs State Time(s) Domain-0 0 1753 1 r----- 1220.2 ubuntu 3 512 1 -b---- 3.5 # sudo xl destroy ubuntu
- DomUのコンフィグファイル再編集
/home/foo/ubuntu-server/ubuntu-svr.cfgを再編集します。name = "ubuntu" #kernel = "/home/toy/xen-work/ubuntu/linux" #ramdisk = "/home/toy/xen-work/ubuntu/initrd.gz" memory = 256 vcpus = 1 disk = [ 'file:/home/toy/xen-work/ubuntu.img,xvda,rw'] vif = [ 'mac=00:16:3e:00:00:01,bridge=xenbr0'] #extra = "root=/dev/xvda1" bootloader = '/usr/lib/xen-4.6/bin/pygrub'
- 再度DomU起動
# sudo xl create -c /home/foo/ubuntu-server/ubuntu-svr.cfg
これでインストール済みのディスクイメージから起動し、ログイン画面が現れるはずです。
ちなみにDomUで起動したUbuntu serverの起動直後のメモリ使用量はざっとこんな感じです。Linux Mintであればメモリ2GBのマシンでも256MBのUbuntuサーバーを2本くらいDomUで上げても大丈夫そうです。
user1@ubuntu-03:~$ free total used free shared buff/cache available Mem: 240904 52024 60436 944 128444 174532 Swap: 520188 0 520188
まだほとんど何も試していませんがUbuntu serverを起動するだけなら、host側のLinux MintでChrome等立ち上げてブラジングしていてもさほど待つこともないしconsoleやsshアクセスに対する応答も特に問題ありません。以前同じマシンでvirtual box+CentOSをインストールしたことがありますが、到底我慢できるレベルの遅さでは無かったのでXenの準仮想化は10年前のマシンで仮想化遊びをやるにはかなり良い感じです。
ただ、今となってはKVMほど情報が無いのがキツイですね。
その他:
- 同じ手順でCentOS7を立ち上げようとしていますが、うまく行っていません。
色々試してイメージファイルへのOSインストールまでは成功しましたがpygrubがbootパーティションを認識してくません。ただいま解決策模索中。
→一応解決しました。Xen用のgrub2をbuildしてbootloaderとして使うというのが解決策。下記を参照してください。
rc30-popo.hatenablog.com
- 自分のマシンだとXen+Dom0(Linux Mint)を起動するとWi-Fiが使えなくなります。
Xen+Dom0(Ubuntu)だとWi-Fiも大丈夫でした。ただしxenbr0をWi-Fiにブリッジするのは試していません。
2018/09/02追記:
Lint Mintを載せていたPCが故障したので、Ubuntu 16.04LTSに同じ手順で環境を作ったのですが、network managerの停止と、bridgeのnetfilter停止はやらなくても問題無さそうです。
network managerは停止すると、LANの物理ifとbridgeをifupコマンド等で手動upする必要があり面倒です。
Mintを載せていたVAIO TypeNは本体は多分問題なしで、電源アダプタが逝ってしまったみたいで、ネット通販で互換性のあるアダプタも購入可能なのですが、さすがにこれ以上お金かけて運用継続するのもコスパ悪いのでHDDだけ抜き取ってメーカーのPCリサイクルに出す事に。
Mint機で作成していたXen用のDomUイメージ(Ubuntu Server,CentOS,VyOS)はそのまま移行先のUbuntuマシンで動いています。
今更だけど仮想化は便利ですね。