0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Hyper-VでUbuntu 24.04のcloudinitを使う方法

0
Posted at

Hyper-VでUbuntu 24.04のcloud-initを使う方法

Hyper-V上でUbuntu 24.04サーバーVMをcloud-initを使って自動化起動する手順です。

前提条件:

  • OS: Ubuntu 24.04 Server
  • Platform: Windows Hyper-V
  • WSL (Windows Subsystem for Linux) 環境

📋 cloud-init設定ファイル

user-data.yml

#cloud-config
users:
  - name: ubuntu
    gecos: Ubuntu
    sudo: ALL=(ALL) NOPASSWD:ALL
    groups: sudo
    shell: /bin/bash
    lock_passwd: false
    ssh_import_id: [gh:<github_user_id>]

apt:
  primary:
    - arches: [default]
      uri: http://ftp.udx.icscoe.jp/Linux/ubuntu
  security:
    - arches: [default]
      uri: http://ftp.udx.icscoe.jp/Linux/ubuntu

package_update: true
package_upgrade: true
packages:
  - vim
  - nano
  - curl
  - wget
  - tmux
  - jq
  - fish
  - ca-certificates
  - gnupg
  - lsb-release
  - software-properties-common
  - build-essential
  - pkg-config
  - net-tools
  - dnsutils
  - iproute2
  - traceroute
  - ssh
  - git
  - make

locale: en_US.UTF-8
timezone: Asia/Tokyo
ssh_pwauth: no
resize_rootfs: true
growpart:
  mode: auto

meta-data.yml

instance-id: ubuntu
local-hostname: ubuntu

🚀 実行手順

Step 1 - WSL環境で準備

WSLでcloud-initディスクを作成します。

# クラウドイメージをダウンロード
curl -sLO https://ftp.udx.icscoe.jp/Linux/ubuntu-cloud-images/releases/24.04/release/ubuntu-24.04-server-cloudimg-amd64.img

# cloud imageをVHDX形式に変換
qemu-img convert -p -f qcow2 -O vhdx ubuntu-24.04-server-cloudimg-amd64.img ubuntu-24.04-server-cloudimg-amd64.vhdx

# cloud-init seed diskを作成
cloud-localds seed.iso user-data.yml meta-data.yml

Step 2 - PowerShell (管理者権限)

作成したVMディスクを任意の場所にコピーします。
(コピーしなくてもいいですが使いまわすために元のVHDXは取っておいたほうが賢明です)
VMディスクサイズを128GBに拡張します。

Resize-VHD -Path '<VM DISK PATH>' -Size 128GB

Step 3 - Hyper-VでVM作成

以下の最低要件設定:

項目 設定値
Generation Gen 2
Secure Boot Microsoft UEFI Certificate Authority
Network 接続 (インターネット)
Hard Disk 作成したVHDX、ブート構成最上位
DVD Drive cloud-initのseed.iso

Step 4 - PowerShell (管理者権限)

VMプロセッサ設定とディスクアクセス権付与:

# 仮想化拡張機能を公開
Set-VMProcessor -VMName "<VM NAME>" -ExposeVirtualizationExtensions $true

# ディスクへのフルアクセス権限付与
$VM = Get-VM "<VM NAME>"
icacls "<VM DISK PATH>" /grant "NT VIRTUAL Machine\$($VM.Id):(F)"

Step 5 - Serial Console接続 (PS1)

起動用シェルスクリプトを作成してシリアルコンソールでVM出力を確認:

$VM = '<VM NAME>'

sudo pwsh.exe -Command "
    Start-VM '$VM' &&
    Set-VMComPort -VMName '$VM' -Number 1 '\\.\pipe\$VM'
"

# Named Pipe接続
$pipe = New-Object System.IO.Pipes.NamedPipeClientStream(".", "$VM", [System.IO.Pipes.PipeDirection]::In)
$pipe.Connect()

$sr = New-Object System.IO.StreamReader($pipe)

while (-not $sr.EndOfStream) {
    $ch = [char]$sr.Read()
    [Console]::Write($ch)
}

📝 補足情報

Secure Bootの理由

Gen 2 VMではSecure Boot必須。Ubuntu Cloud ImageはMicrosoft UEFI CAで署名されているため、この設定が必要。

Serial Console接続の目的

  • VM起動時のboot logを確認
  • boot processの問題を診断
  • 初期化プロセスを追跡

この記事が参考になれば幸いです!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?