Hyper-V上のVyOSでVSSやシャットダウンを有効化する
目次
Hyper-VでVyOSを動かしているとVSSやHyper-VからのOSシャットダウンができなくてモヤモヤしたので直した記録
環境
- Hyper-Vホスト: Windows Server 2019
- VyOSバージョン: 1.4 (vyos-1x@2622902)
概要
VyOSではLinux Kernelから一部のHyper-Vモジュールが抜けており、いくつかの統合機能が使えなくなっている。
このことはVyOSのチケットT3429https://phabricator.vyos.net/T3429 でも2021年5月に報告されていて対処方法も書かれているが、ソースコードに取り込まれておらず、2023年2月の段階でも解消されていない。
そのため、今回はT3429の解決案とVyOSのドキュメントを見て実際にHyper-Vのモジュールを組み込んだVyOSをビルドした。
やったこと
ビルド方法はVyOSのドキュメントのここに書かれている。 https://docs.vyos.io/en/latest/contributing/build-vyos.html
ビルド環境をDockerで用意する場合、流れとしてはこんな感じ。割と簡単。
- Docker環境の用意
- ビルドスクリプトが入ったリポジトリをGitHubからclone
- Linux KernelのConfigを修正
- Linux Kernelのビルドスクリプトを実行
- VyOSのISO作成スクリプトを実行
- Docker環境を用意したホストで実行
- 今回はUbuntu Serverでインストール時にDocker Runtimeを入れた。おてがる。
# ビルドスクリプトが入ったリポジトリをGitHubからclone
git clone -b current --single-branch https://github.com/vyos/vyos-build
cd vyos-build
# Dockerコンテナを起動して中に入る
docker run --rm -it --privileged -v $(pwd):/vyos -w /vyos vyos/vyos-build:current bash
# 以降Dockerコンテナ内での操作
# Linux Kernelをclone
# data/defaults.json を見ると kernel_version = "6.1.9" とのことだったので v6.1.9 をclone
cd packages/linux-kernel
git clone --depth 1 --branch v6.1.9 https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git
git clone https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git
- Linux KernelのConfigを修正
- T3429では
CONFIG_HYPERV_UTILS=m
にしているが、今回はHyper-Vでしか動かさないこともありy
にしている
- T3429では
diff --git a/packages/linux-kernel/arch/x86/configs/vyos_defconfig b/packages/linux-kernelarch/x86/configs/vyos_defconfig
index e11fa0a..5e8158d 100644
--- a/packages/linux-kernel/arch/x86/configs/vyos_defconfig
+++ b/packages/linux-kernel/arch/x86/configs/vyos_defconfig
@@ -1828,7 +1828,7 @@ CONFIG_DMA_SHARED_BUFFER=y
# CONFIG_MHI_BUS is not set
# end of Bus devices
-# CONFIG_CONNECTOR is not set
+CONFIG_CONNECTOR=y
#
# Firmware Drivers
@@ -4725,6 +4725,7 @@ CONFIG_VIRTIO_MMIO_CMDLINE_DEVICES=y
CONFIG_HYPERV=m
CONFIG_HYPERV_TIMER=y
CONFIG_HYPERV_BALLOON=m
+CONFIG_HYPERV_UTILS=y
# end of Microsoft Hyper-V guest support
#
Linux Kernelのビルド
cd /vyos/packages/linux-kernel ./build-kernel.sh ./build-linux-firmware.sh cp vyos-linux-firmware_*.deb ../
ISOを作成
cd /vyos sudo ./build-vyos-image iso --architecture amd64 --build-by "[email protected]"
おしまい
ちゃんとISO作成のスクリプトを見ていないが、debファイルを置けばインストールした状態でISOを作ってくれる?
もしそうであればZabbix Agentを入れてVyOSを監視するなんてことをしても面白いかもとか考えている。