Hyper-V 上の Debian VM の vNIC の IP アドレスを管理 OS 側から取得できるように LIS を有効にする
表題通り。 Hyper-V 上の Debian 8.7.1 で Linux 統合サービス (Linux Integration Services; LIS) を有効にした方法のメモ。
私が試したのは、Windows 10 Pro (Insider Preview Build 14986) の Hyper-V 上の VM に Debian 8.7.1 Jessie をインストールする Packer のビルドを実行しようとした、というもの。
前提
- Hyper-V の管理 OS 側から、VM の仮想ネットワークアダプタ (vNIC) の IP アドレスを取得できるようになっている。
- Hyper-V マネージャの GUI で確認できる。
- PowerShell の Hyper-V モジュールのコマンドを使う場合は、
Get-VM
コマンドで返ってくるMicrosoft.HyperV.PowerShell.VirtualMachine
オブジェクトのNetworkAdapters
プロパティで確認できる。- PowerShell で
Get-VM | %{$_.NetworkAdapters}
と入力。 - Packer のソースコード上でも hyperv.go の中で使われている。
- PowerShell で
直面した状況
Packer でビルドして Hyper-V VM に Debian 8.7.1 Jessie をインストールしようとしたところ、Packer がゲストマシンに SSH 接続しようとしてずっと待ち続けるという状況になった。 (下記表示のまま進まない。)
==> hyperv-iso: Waiting for SSH to become available...
Packer のログ ($env:PACKER_LOG=1
でログ出力されるようにした) を確認したところ、以下のようなメッセージが表示されていた。
2017/02/18 19:48:48 packer.exe: 2017/02/18 19:48:48 [DEBUG] Error getting SSH address: No ip address.
すなわち、管理 OS 側から仮想ネットワークアダプタの IP アドレスを取得できなかったぽい。
管理 OS 側から仮想ネットワークアダプタの IP アドレスを取得できなかった原因
「Error getting SSH address: No ip address.」 の原因を探したところ、以下の issue が引っかかった。 ここでゲスト OS 側が管理 OS に IP アドレスを伝える必要があるということを知った。
で、Linux ゲストの場合は、Linux 統合サービスが必要とのこと。
Debian 8.7.1 Jessie で LIS を有効にする
Debian 8 系では、LIS がディストリビューションに含まれている。
有効にするための手順がどこに書かれているのかわからなかったので困ったのだけれど、やってみたところ Debian 8.7.1 では、APT の hyperv-daemons パッケージをインストールして再起動するだけで LIS が有効になるっぽかった。 (実際に試して、管理 OS 側から IP アドレスを取得できることを確認した。)
apt-get install hyperv-daemons
今回の場合、Packer でビルドするために Preseed を使っていたので、preseed.cfg のパッケージ選択に hyperv-daemons を含めるようにした。
d-i pkgsel/include string openssh-server build-essential hyperv-daemons # これは一例です。 hyperv-daemons パッケージ以外のパッケージは必ずしも必要ではありません。
参考
- Debian Jessie Hyper-V : Debian 8 で LIS を有効にする方法。 KVP、VSS、FCOPY 統合のために hyperv-daemons と 4.2 カーネルが必要とのこと。 KVP やら VSS やら FCOPY まで追いかけられていないが、参考にした。
- Install Hyper-V (LIS) On Debian 8 : Debian 8 で LIS を有効にする方法。 こちらも参考にはしたが、ここに書かれている方法を全て実行する必要はなさそうだった。