Home - YoshiakiSugiyama/xen-igvtg-install GitHub Wiki

このページは書きかけです。

EncryptLVM環境でiGVT-gが有効なXenを構築する

2017年12月にKDE Partition ManagerもLUKSに対応したことや、セキュリティの観点からUbuntu 16.04.5 LTSのEncryptLVM環境を先に構築したうえでインストールを実施した。また、Legacy BootではビデオメモリがBIOS依存で必要な分が確保できなかったため、UEFI Boot環境にしてインストールしています。レッツノートなどのパソコンは第7世代以降のCore iを搭載するパソコン(SZ6シリーズなど)からはハードディスクからのブートではUEFIしか使えないみたいなので、この機会にLinuxをUEFIでインストールされたことが無い方は、インストールされてみては、いかがでしょうか。

  • 基本的にはGVTg_Setup_Guide(https://github.com/intel/gvt-linux/wiki/GVTg_Setup_Guide) に従い、これにはGuideにはない、気を付けるべきことを主に記述しています。
  • このガイドは/rootで作業を始めることを想定しているので、読み間違いなどを防ぐために、できれば/rootで作業を始めることを勧める。
  • インストール中に「-Wframe-larger-than=」を含む警告がgccから何度か出力されるが、無視してもセットアップ自体は問題なく行え、XenとiGVT-gも動く。
  • /bootはそれなりに必要になることがあり(特にDebianで発生)、UEFIインストールをデフォルト設定で行えば、古くなったものを削除するなどすれば領域は確保できたが(Ubuntu)、アップデートなどが今後あることを考えると/bootは768MB以上は推奨したいと作業していて思いました(デフォルトで480MBのときに足りないとエラーが出た)。また、全体としてハードディスクはセットアップが完了した時点で32GB使っていたので、40GB以上は最低でもiGVT-gのXenを動かすまで必要と見たほうがよい。
  • このiGVT-gをインストールする前に通常のapt-getなどでインストールできるXenなどをインストールしてはならない。(XenGTは特殊なQEMUを使用するため)
  • 最小構成で日本語指定してホストOS(私はDebianで確認)をインストールすると文字化けが起きやすいので最初からen-US.utf8でインストールして問題がなければ、それで行ったほうが良い。
  • ビデオメモリがBIOSにより少なめに割り当てられ、CPUにある能力を発揮できないことがあり、これが原因でiGVT-gが動かないことがあった。これを解消するために動的割り当てができるようUEFIブートをする環境でインストールを行った。
  • 最初に整合性を取るためにapt-get updateとapt-get upgradeを行うこと。(原因調査が大変。)

必要最小限XenとiGVT-gを稼働させるために必要な以下のものをインストールする

以下は公式にはないが、最小構成でインストールすると必要になるもの

apt-get install wget git make gcc bc bcc dpkg-dev gettext acpica-tools libncurses5-dev libaio-dev libyajl2 libyajl-dev libc6-dev-i386 seabios libelf-dev

ゲストとして入れたUbuntuはiGVT-gが動いたが、ゲストとして入れたWindows7/10がiGVT-gが有効になると安定しなくなったのでインストールした(すべてigvtg-xenのREADME.MDにある、Xenが要求しているもの)

apt-get install binutils libx11-dev libglib2.0-dev pkg-config iproute bison flex rpm bin86 iasl

Xen USB PassThroughを使う場合は以下も入れる(libusb-1.0-0-devに関してはQEMU用。)
(ないと「received an error message from QMP server: 'usb-host' is not a valid device model name」のようなエラーがUSBパススルー時に出力される。)

apt-get install libusb-dev libusbredirparser-dev libusb-1.0-0-dev

以下は公式でも要求されているもの

apt-get install libfdt-dev libpixman-1-dev libssl-dev vim socat libsdl1.2-dev libspice-server-dev autoconf libtool xtightvncviewer tightvncserver x11vnc uuid uuid-dev uuid-runtime uml-utilities bridge-utils python-dev liblzma-dev libc6-dev libegl1-mesa-dev libudev-dev

gvt-stable-4.14リリースより追加

apt-get install libepoxy-dev libdrm-dev libgbm-dev

フラッシュメモリ等でデータをやりとりするときに、4GB以上のファイルを扱うためにexFATを使う場合は、以下もインストール(exFATはWindowsでも使え、便利なので。)

apt-get install exfat-fuse exfat-utils

/etc/initramfs-tools/modules にあるモジュールをロードする設定でXenGTをロードするように記述(以下4行を最後に追記する)

kvmgt
xengt
vfio-iommu-type1
vfio-mdev

Host Environment Setup(Build Kernel Source)

git clone https://github.com/intel/gvt-linux.git
cd gvt-linux
git checkout gvt-stable-4.14
echo ""|make oldconfig

.configを開いて、以下の項目を有効になるよう変更する。
以下の設定は仮に間違っていてもXenとvgtそのものは動くが、メモリの確保をするときなどにエラーが起きる。(例:CONFIG_DRM_I195_GVT_XENGT=mではなくyにしてしまったときなど)

vim .config
CONFIG_DRM_I915_GVT=y
CONFIG_DRM_I915_GVT_KVMGT=m
CONFIG_DRM_I915_GVT_XENGT=m
CONFIG_VFIO_MDEV=m
CONFIG_VFIO_MDEV_DEVICE=m

以下を実行。ここで/bootに入りきらないというようなエラーが出たら、/bootにある古いものを消す。カーネルのバージョン表記が古いもの(.old拡張子のものも含む)はセットアップが終わって再起動したときには不要となると思うので心配は不要だと思いますが、心配であればOSのインストールからやり直して/rootを拡張するしかありません。

make -j8 && make modules_install && make install

ここでも最後のdpkgで/bootに入りきらないというエラーが出ることがあるが、その際は先述と同様の対応で。
dpkgのファイル名の最後の「+-2」は作成したものの数の順番。
また、同じディレクトリにあるlinux-image-4.14.15+-dbg_4.14.15+-2_amd64.debはOSが破損したときなどに使える。

make -j8 deb-pkg
cd ..
dpkg -i linux-image-4.14.15+_4.14.15+-2_amd64.deb

Host Environment Setup(Build Qemu & Xen for XenGT)

git clone https://github.com/intel/igvtg-xen
cd igvtg-xen
git checkout xengt-stable-4.10
git clone https://github.com/intel/igvtg-qemu
cd igvtg-qemu
git checkout stable-2.10.0
cd ..

PCにより表示が同じなのでややこしいが、キーボードの「¥」と「/の逆」に注意。「/の逆」を使うこと。(右シフトキーの隣にだいたいあるキーを使う)
もしBackspaceに近い方を使ってしまい、間違えたらmakeの過程でgitを使っていることもあり、igvtg-xenフォルダごと完全に削除し、gitでigvtg-xenをcloneし直したほうがよい。
また、以下の2行目の「/root」は作業ディレクトリをさすので、適宜修正すること。最初から /root で実行していれば問題はない。

sed -i 's/\(QEMU_UPSTREAM_REVISION ?= \).*/\1origin\/stable-2.10.0/g' Config.mk
sed -i 's/\(QEMU_UPSTREAM_URL ?= \).*/\1file:\/\/localhost\/root\/igvtg-xen\/igvtg-qemu/g' Config.mk

make -j4は並列Job数の設定なので、8スレッドあるCPUなら-j8など適宜修正すること。

./autogen.sh
./configure --prefix=/usr
make -j4 xen tools
make install-tools
cp xen/xen.gz /boot/xen-gvt.gz

Xen自動起動設定

update-rc.d xencommons defaults

/etc/fstab に XenGTの設定として以下を追加(私は一番下の行に書きました)

vim /etc/fstab
#XenGT
none /proc/xen xenfs defaults 0 0

Grub セットアップ

最初に用意されているファイルをそのままXenGT用として使用する

cp /etc/grub.d/20_linux_xen /etc/grub.d/20_linux_xengt

コピーしたファイルに修正を加える。
最初にファイルの is_top_level=true の下に以下の2行を追加する

vim /etc/grub.d/20_linux_xengt
is_top_level=true
OS='XenGT'
linux_list='/boot/vmlinuz-4.14.15+'

また、カーネルが入る領域がEncryptLVMな環境な場合、続けて以下の3行を追加する
(すでに別の場所でGRUB_CMDLINE_LINUXは指定がされているので、これに追記になるようにする。)
(GRUB_CMDLINE_LINUXはXenのカーネルが入る領域が/dev/sdc3である場合の例。)

GRUB_CMDLINE_LINUX="cryptdevice=/dev/sdc3:vgStorage ${GRUB_CMDLINE_LINUX}"
GRUB_TERMINAL_INPUT=console
GRUB_PRELOAD_MODULES="part_gpt part_msdos"

/etc/default/grub.d/xengt.cfgへ直接ファイルを作成・編集できないことがあるので、他のディレクトリで作成・編集してからコピーする。 または一度空で作成してから行う xengt.cfg(Grubデフォルト設定ファイル)は以下のようになる。 (EncryptLVM環境でGRUB_CMDLINE_LINUX_XEN_REPLACEに設定する値によってはramdom: crng init doneと表示されて暗号化した領域から起動できなくなることがあるので注意。)

vim /etc/default/grub.d/xengt.cfg
GRUB_DEFAULT='XenGT, with Xen hypervisor'
GRUB_CMDLINE_XEN='dom0_max_vcpus=2 dom0_mem=1792M iommu=1 loglvl=all guest_loglvl=all msi=1 conring_size=4M console=com1 com1=115200,8n1 sync_console noreboot'
GRUB_CMDLINE_LINUX_XEN_REPLACE='KEYBOARDTYPE=pc KEYTABLE=jp106 intel_iommu=on i915.enable_gvt=1'

Grub更新、実行後にxengt.cfgを修正した場合も再度実行する必要がある (特にEncryptLVM環境は最後に「update-grub」をしないとGUIが正常に動作しないので注意。)

update-grub

最後

ネットワーク設定を行う(ネットワークインターフェイスに関してはnetworkctl -aなどで確認しておくこと。)

vim /etc/network/interfaces
/etc/init.d/networking restart
reboot

実行できていることを確認

xl list