SEIL/x86 Ayame on FreeBSD Xen Dom0

**注意: この方法はサポート外になります。
動かないからと言ってサポートに問い合わせないでください。
問い合わせたところで公式の回答は得られません。**

[SEIL/x86 Ayame on FreeBSD bhyve](https://qiita.com/bsd-hacker/items/c19c39b022e1d5549624) の結果から、今度は [FreeBSD Xen Dom0](https://wiki.xen.org/wiki/FreeBSD_Dom0) で [SEIL/x86 Ayame](https://www.seil.jp/product/x86ayame.html) が動くかやってみました。

- SEIL/x86 Ayame の入手方法
- スタンダードのプロダクトキーの購入

については、[SEIL/x86 Ayame on FreeBSD bhyve](https://qiita.com/bsd-hacker/items/c19c39b022e1d5549624)を参照してください。

# FreeBSD Xen Dom0 の準備

- [FreeBSD Dom0](https://wiki.xen.org/wiki/FreeBSD_Dom0)

などを参考にして、FreeBSD Xen Dom0 環境を用意します。

Xen Dom0 の母艦として使用する PC は [SEIL/x86 Ayame on FreeBSD bhyve](https://qiita.com/bsd-hacker/items/c19c39b022e1d5549624) と同じものとします。

## Xen のインストール

Xen のインストールは、

- [FreeBSD Dom0](https://wiki.xen.org/wiki/FreeBSD_Dom0)
- [21.8. FreeBSD as a Xen™-Host](https://www.freebsd.org/doc/handbook/virtualization-host-xen.html)

などを参照してください。

[FreeBSD Dom0](https://wiki.xen.org/wiki/FreeBSD_Dom0) では source code からコンパイルしてインストールしていますが、FreeBSD 12 は pkg binary が既にあるので、pkg install で Xen のインストールが出来ます。

```
# freebsd-version 
12.1-RELEASE-p2
# pkg search xen-
jaxen-1.0_4                    Java XPath Engine
pixen-0.1_9                    Graphics editing software for small-scale pictures for GNUstep
uhexen-0.601_11                Yet another port of Hexen, popular game from Raven Software
xen-guest-tools-4.6.1_2        Xen tools within FreeBSD domU
xen-kernel-4.12.1              Hypervisor using a microkernel design
xen-tools-4.12.1               Xen management tools
[root@vmm-1100 ~]# 
```

```
pkg install xen-kernel xen-tools
```

/etc/rc.conf に dev.xenpy.0.%driver の値をみて、Xen Dom0 の場合だけ必要な設定を入れるようにしておきます。
ルータとして使うため、bridge interface を二つ作るようにしておきます。

```
echo "if [ "X`sysctl -n dev.xenpv.0.%driver`" = 'Xxenpv' ] ; then" >> /etc/rc.conf
echo "# Xen" >> /etc/rc.conf
echo 'xencommons_enable="YES"' >> /etc/rc.conf
echo 'cloned_interfaces="bridge0"' >> /etc/rc.conf
echo 'cloned_interfaces="bridge1"' >> /etc/rc.conf
echo '' >> /etc/rc.conf
echo 'ifconfig_bridge0="group vm-switch description vm-public addm em0 SYNCDHCP"' >> /etc/rc.conf
echo 'ifconfig_bridge1="group vm-switch description vm-public addm em1 SYNCDHCP"' >> /etc/rc.conf
echo 'fi' >> /etc/rc.conf
```

/etc/sysctl.conf に Xen 用の設定を追加します。

```
echo 'vm.max_wired=-1' >> /etc/sysctl.conf
```

Xeon Dom0 で起動した場合の console を設定しておきます。

```
echo 'xc0 	"/usr/libexec/getty Pc"         xterm   on  secure' >> /etc/ttys
```

Xen Dom0 の場合に必要となるディレクトリを作成しておきます。

```
mkdir -p /var/lock
mkdir -p /var/run/xen
```

次回起動時に Xen Dom0 で起動するように /etc/loader.conf を設定します。

```
sysrc -f /boot/loader.conf if_tap_load="YES"
sysrc -f /boot/loader.conf xen_kernel="/boot/xen"
sysrc -f /boot/loader.conf xen_cmdline="dom0_mem=8192M dom0_max_vcpus=4 dom0=pvh console=com1,vga com1=115200,8n1 guest_loglvl=all loglvl=all"
```

設定が終わったら、再起動して Xen Dom0 の状態で起動させます。

```
shutdown -r now
```

## [SEIL/x86 Ayame](https://www.seil.jp/product/x86ayame.html) DomU の設定

[SEIL/x86 Ayame](https://www.seil.jp/product/x86ayame.html) 用の DomU を作成します。

[SEIL/x86 Ayame on FreeBSD bhyve](https://qiita.com/bsd-hacker/items/c19c39b022e1d5549624) でつかった PC をそのまま使う場合は、作成済みの ZVOL を流用します。

新規に ZVOL を用意する場合は、[SEIL/x86 Ayame on FreeBSD bhyve](https://qiita.com/bsd-hacker/items/c19c39b022e1d5549624) と同じように配布ファイルから VMDK を取り出し、イメージ変換したものを新規に作成した ZVOL に書き込んでください。

ここでは、/dev/zvol/zroot/vm/seilx86-ayame/disk0 を使うこととします。

/usr/local/etc/xen/auto に [SEIL/x86 Ayame](https://www.seil.jp/product/x86ayame.html) 用の DomU の設定ファイル seilx86-ayame.conf を作ります。
設定は、[Xen HowTo](http://wiki.netbsd.org/ports/xen/howto/) などを参考にして作成します。

設定で注意することは、

- bootloader は pygrub を使う
- NICは VMware でもサポートされている e1000 となるように model で指定する
    - [XL Network Configuration](https://xenbits.xen.org/docs/4.2-testing/misc/xl-network-configuration.html)
- VNCを有効にしておく

です。

```
disk = [
        '/dev/zvol/zroot/vm/seilx86-ayame/disk0,raw,hda,rw',
        ]

vif = ['mac=22:AA:BB:CC:DD:EE,bridge=bridge0,model=e1000']
vif = ['mac=22:AA:BB:CC:DD:FF,bridge=bridge0,model=e1000']

memory=1024
vcpus=1
name = "seilx86-00"
xen_platform_pci=1

bootloader="pygrub"

builder='hvm'

vnc=1
vnclisten="0.0.0.0"
vncunused=0
vncdisplay=40

serial='pty'

```

# SEIL/x86 Ayame 用 DomU を起動

作成した DomU を起動します。

```
xl create seilx86-ayame.conf
```

起動したら、VNCクライアントを使って接続します。
pkg binary を使う場合は、tightvnc などが利用できます。

<img width="361" alt="seilx86_ayame_xen_login.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/150828/c4dbf98c-0edd-af84-6186-71c11f35e361.png">

VNCクライアントで接続して login: プロンプトが表示されていれば成功です。
あとは、[SEIL/x86 Ayameの取り扱い方法とチュートリアル](https://www.seil.jp/sx4/doc/about/x86ayame/start.html)にしたがって、プロダクトキーを設定し、SEIL/x86 Ayame の設定を行っていってください。

# おわりに

[SEIL/x86 Ayame on FreeBSD bhyve](https://qiita.com/bsd-hacker/items/c19c39b022e1d5549624) ができたので、Xen DOM0 / FreeBSD 環境でもやってみました。
Xen の仮想ネットワークに対応していないようなので、互換NICを指定することで起動できることまで確認出来ました。

FreeBSD の仮想環境には VirtualBox もありますが、こちらは他のアーキテクチャの VirtualBox と差が無いので他の人にまかせます。

**なお、公式サポート環境ではなないため、動かなかったからといってサポートに問い合わせないようにしてください。**