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を監視するなんてことをしても面白いかもとか考えている。