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で用意する場合、流れとしてはこんな感じ。割と簡単。

  1. Docker環境の用意
  2. ビルドスクリプトが入ったリポジトリをGitHubからclone
  3. Linux KernelのConfigを修正
  4. Linux Kernelのビルドスクリプトを実行
  5. 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 にしている
  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を監視するなんてことをしても面白いかもとか考えている。