はじめに
LPIC305の勉強をしていく中でXenをいじる機会があったのでVMの構築方法を備忘録がてら記載しておきます。
Xen+LivbirtでVMを構築している手順はQiitaで見かけますが、Libvirt
を入れずにXenだけでVMを構築する手順が見当たらなかったので今回記事を作りました。
以下が今回の要件です。
- Proxmoxを使用してホストとなるVMを立てます。
- そのホストVMにXenをインストールします。
- ホストVM(Dom01)は「Ubuntu Server 22.04.05 LTS」です。
- ゲストVM(DomU1)も「Ubuntu Server 22.04.05 LTS」です。
- GUIは入れるのが面倒なので入れません。コンソールで頑張ります。
- XenのゲストタイプはHVMとします。
基本的には公式手順を参考にしていますが、ちょいちょいハマるポイントがあるので、このままやれば構築できるように書き直しています。
ホスト(Dom0)の構築
Ubuntu Server 22.04.05 LTSでホスト用のVMを作ります。
Proxmoxを使ってのVM構築は他にいくらでも記事が転がっていると思うので詳細には触れません。
ただしcpuの設定ではhvmを有効化しておいてください。
(今回Proxmoxを入れているサーバがIntel N100なのでhv-evmcs
になっています)
今回はXenを載せるのでメモリは気持ち多めの8GB、ディスクは24GBとしています。2
(Xenのゲスト用のディスクはまたあとで払い出すので、ディスクもそこまで大きくなくてOKです)
ひとまず以下のような感じで作っています。
なおProxmox 8.2.7だとhv-emvcs
を有効にするとなぜかVMが正常に起動してこなくなるので
ここでProxmox自体にSSHログインをして、VMの設定ファイルを直接変更します。3
args: -cpu host,+vmx
を一番上にでも追記しておいてください。
今回はProxmoxで私が作ったVMのIDが113なので113.conf
になっていますが、各々の環境でIDは変わるので気をつけてください。
args: -cpu host,+vmx
boot: order=scsi0;ide2;net0
cores: 1
cpu: x86-64-v2-AES,flags=+hv-evmcs
ide2: local:iso/ubuntu-22.04.5-live-server-amd64.iso,media=cdrom,size=2086842K
memory: 8096
meta: creation-qemu=9.0.2,ctime=1728100750
name: ubusv22
net0: virtio=BC:24:11:9B:D7:25,bridge=vmbr0,firewall=1
numa: 0
ostype: l26
scsi0: local-lvm:vm-113-disk-0,iothread=1,size=24G
scsihw: virtio-scsi-single
smbios1: uuid=75f2d119-3a2d-4e48-ba3f-fdfa0ec64f32
sockets: 2
vmgenid: 533945e4-6ba8-4f86-87ed-0a4f2859f3c6
こうすればVMが起動するのでコンソール上で適当にインストールを進めてください。
ほぼデフォルト設定でOKですが今回は他のホストからアクセスしやすいように固定IPにしました。
固定IPじゃなくてもなんとかなりますが、この記事では以下のように固定IPとして進めます。
各項目は各環境で異なると思うので参考として使ってください。
- Subnet 192.168.3.0/24
- Address 192.168.3.217
- Gateway 192.168.3.1
- Name Server 192.168.3.1
- Search domains 設定なし
今回の例ではtest
というローカルアカウントを作り、サーバ名はubu22
としています。
これ以降の画像でもホスト名がubu22
であったらホストVMと判断してください。
インストール完了したら再起動すると思うので、起動したら今作ったVMにSSHログインします。
(そのままコンソールでやってもいいですがコピペができないのでSSH推奨です)
ssh test@192.168.3.217
ログインできたらaptでインストールします。
sudo apt update
sudo apt upgrade
sudo apt install xen-hypervisor-amd64
xen-hypervisor-amd64
はいっぱいインストールすることになりますが気にせず入れます。
インストールが終わったら再起動します。
sudo reboot
立ち上がってきてxl list
コマンドが正常に打てればひとまずXenのインストールは完了です。
sudo xl list
Networkの設定
公式手順のDisable Network Managerについては、Ubuntu22でNetwork Managerを使っていないので飛ばします。
bridge-utils
は先ほどXenを入れた時に一緒に入ったので飛ばしてOKです。
brctl
は何もせずとも打てるはずです。
brctl show
公式手順だと/etc/network/interfaces
をいじっていますが、Ubuntu22はNetplan
を使っているのでその設定ファイルを書き換えていきます。
まずは既存のファイルをバックアップしてから編集します。
sudo mv /etc/netplan/50-cloud-init.yaml /etc/netplan/50-cloud-init.yaml.bak
sudo vim /etc/netplan/00-installer-config.yaml
xenbr0
を作ってens18
の設定を移す形になります。STPは正直お好みです。
IF名は各々の環境で異なる可能性があるので気をつけてください。
network:
version: 2
renderer: networkd
ethernets:
ens18:
dhcp4: no
bridges:
xenbr0:
interfaces: [ens18]
addresses:
- 192.168.3.217/24
nameservers:
addresses:
- 192.168.3.1
routes:
- to: default
via: 192.168.3.1
parameters:
stp: false
また50-cloud-init.yaml
を読むと分かるのですが、このままだと再起動時に50-cloud-init.yaml
が再生成されてしまうのでcloud-init側も編集しておきます。
sudo mv /etc/cloud/cloud.cfg.d/90-installer-network.cfg /etc/cloud/cloud.cfg.d/90-installer-network.cfg.bkup
sudo vi /etc/cloud/cloud.cfg.d/90-installer-network.cfg
network: {config: disabled}
00-installer-config.yaml
はファイルパーミッション的にまずいので制限します。
その後netplan apply
してちゃんと設定できているかを確認します。
sudo chmod 600 /etc/netplan/00-installer-config.yaml
sudo netplan apply
ip a
vSwitch
のワーニングが出ていますが無視します。(エラーに書いている通りOpenVSwitch入れると多分消えると思いますが、このままでも普通に動いたのでそのままにしています)
またip a
コマンドでxenbr0
がちゃんと作られていることを確認します。
brctl show
コマンドでも問題ないことを確認しておきます。
brctl show
仮想ディスクの設定
ここからはゲストOSをインストールする用のディスクを払い出します。
公式手順で言うとManually installing an HVM Guest VMのあたりです。
ひとまずUbuntu Server 22.04.5 のisoファイルをダウンロードしておきます。
wget https://releases.ubuntu.com/22.04/ubuntu-22.04.5-live-server-amd64.iso
ダウンロードは時間がかかるのでwget
は放置してProxmox側の設定に移ります。
Hardware -> Add -> Hard Disk
Ubuntu Serverのシステム要件的にはディスクは5GBあれば良いとのことなので、少しゆとりを持たせた8GBにしています。
作成後に/dev/sdb
が見えていればOKです。
ls /dev/sd*
追加したディスクについてgdisk
を使ってパーティションを切っていきます。画像を参考にして作成してください。
sudo gdisk /dev/sdb
最終的にLinux LVMが8GBできていればOKです。
ちゃんと/dev/sdb1
ができていることを確認します。
ls /dev/sd*
まずはPhysical Volumeを作ります。
sudo pvcreate /dev/sdb1
sudo pvs
ちゃんと/dev/sdb1
で8GBできていることを確認します。
次にLogical Volumeを作ります。
sudo lvcreate ubu_vol /dev/sdb1
sudo lvs
LV名はubu_vol
にしました。
ちゃんとubu_vol
ができていることを確認します。
最後にLogical Volumeを作ります。
LG名は公式手順に則りubuntu-hvm
にしています。
sudo lvcreate -L 7.99G -n ubuntu-hvm /dev/ubu_vol
sudo lvs
写真を見るとわかる通り、サイズを8Gにすると容量が足りないと怒られるので7.99Gにしています。
ゲスト(DomU)の構築
ここからゲスト用のコンフィグファイルを作ってインストールをしていきます。
sudo vi /etc/xen/ubuntu-hvm.cfg
builder = "hvm"
name = "ubu-hvm"
memory = "2048"
vcpus = 1
vif = ['']
disk = ['/dev/ubu_vol/ubuntu-hvm,,hda,rw','/home/test/ubuntu-22.04.5-live-server-amd64.iso,,hdc,cdrom']
vnc = 1
boot = "dc"
ほぼ公式手順通りですが、以下が変更点です。
- 名前は少し短くして
ubu-hvm
にしました。(何度も打つので長いと面倒) - メモリは気持ち多めにしました。
- ディスクは公式手順に書いてある設定がdeprecatedになっているので少し変えていますが、ほぼ同じです(isoのパスが変わったくらい)。ディスク設定の詳細はマニュアル(
man xl-disk-configuration
)を読んでお好みで変えてください。
man xl-disk-configuration
コンフィグファイルの設定が終わったらxl create
コマンドでゲストを作ります。
sudo xl create /etc/xen/ubuntu-hvm
xl list
コマンドでちゃんとDomUが作られていることを確認します。
sudo xl list
コンソールに入りインストーラの起動を待ちます。
sudo xl console ubu-hvm
起動に2〜3分はかかるので気長に待つのをおすすめします。
正常に起動してくると以下のように文字が出てきます。
もう少し待つとインストーラーが起動します。
インストーラーが起動したらお好みで設定していってください。
インストールが完了したらコンフィグファイルを書き換えたいので、インストーラーの「Reboot Now」ではなくxl
コマンドを使ってシャットダウンをします4
コンソールから抜ける時はCtrl-]
(Ctrlキーを押しながら]キーを押す)です。
さらにCtrl-l
とすると画面がリセットされると思います。
以下のコマンドでubu-hvm
を落とします。
sudo xl shutdown ubu-hvm
正常に停止されるまで気長に待ちます。
ただし、あまりに落ちない時はxl destroy
で強制的に落とします。ちなみにこの記事を書いている時は10分待っても落ちなかったのでxl destory
しました。5
sudo xl destroy ubu-hvm
sudo xl list
ubu-hvm
がなくなったことを確認します。
ubu-hvm
が落ちたらコンフィグファイルを書き換えます。
sudo vi /etc/xen/ubuntu-hvm.cfg
builder = "hvm"
name = "ubu-hvm"
memory = "2048"
vcpus = 1
vif = ['']
#disk = ['/dev/ubu_vol/ubuntu-hvm,,hda,rw','/home/test/ubuntu-22.04.5-live-server-amd64.iso,,hdc,cdrom']
disk = ['/dev/ubu_vol/ubuntu-hvm,,hda,rw']
vnc = 1
#boot="dc"
boot="d"
boot="dc"
というのは先にCDROMを見て、それで起動できなければHDDを読みにいく設定なのでboot="d"
として先にHDDを読むようにします。6
ここら辺のパラメータの詳細はマニュアル(man xl.cfg
)に色々書いてあるのでお好みで設定してください。
man xl.cfg
設定ファイルを書き換えたら起動します。
sudo xl create /etc/xen/ubuntu-hvm.cfg -c
-c
は起動と同時にコンソールに繋げるオプションです。
5分くらい経つと無事に起動してくると思います。
ちゃんと起動してきてログインできればVM構築完了です!
コンソール上でも特に問題なく各種コマンドが打てますし、通信も問題なくできるかと思います。
コンソールから抜ける時はCtrl-]
です。
終わりに
正直おうちで仮想環境を作るならProxmoxで十分だと思いますが、LPIC305ではXenが対象なので、こんな感じでVMを立てたり壊したりで各自の勉強の役に立ててください。
-
今回入れるのはUbuntu Server 22.04.05ですが、Ubuntu Server 24.04.01のシステム要件はメモリ1GB、ディスク5GBのようです。 ↩
-
だいぶ前のバージョンからのバグ?のようです。 ↩
-
インストール中にコンフィグファイルを書き換えておき、インストーラーに従って
reboot
でも良いとは思います。コマンドの説明したかったのでこの形にしています。 ↩ -
全体的にXen重いんですよね。パラメータチューニングなどが必要な気もするのですが勉強のために作っているだけなのでそこまで深入りはしません。 ↩
-
最初から
boot="cd"
にしておけば、はじめにディスクを見て、起動できなければCDROMを見るという動作になるのでそれが良いかと思います。もっと言うとデフォルト値がboot="cd"
なのでbootの項目自体の記載が不要です。ただ、公式手順はなぜかboot="dc"
なんですよね。 ↩