Windows環境でのVirtualBoxとUbuntu仮想マシンのセットアップ

概要

Windows 11上にVirtualBoxとUbuntu 24.04 LTS仮想マシンをバッチスクリプトで構築する手順を解説する。GUIを使わず、コマンドラインで再現可能な環境構築を行う。

構築は3つのステップで行う。ステップ1ではwingetによりVirtualBoxをインストールし、ステップ2ではVBoxManageコマンドでCPU・メモリ・ストレージなどを設定してUbuntu仮想マシンを作成し、無人インストールによりUbuntuをインストールする。ステップ3ではGuest Additionsのインストールと日本語環境の構築を行う。

前提として、管理者権限、70GB以上の空きディスク容量、8GB以上の空きメモリが必要である。Hyper-Vが有効な環境では、VirtualBoxはWindowsハイパーバイザプラットフォーム経由で動作し、性能が低下する場合があるため、Hyper-Vの無効化を推奨する。

取り組み内容

  1. スクリプトを実行し、仮想マシンを作成する。
  2. VBoxManage showvminfo で設定値を確認する。

用語

ステップ1・ステップ2・ステップ3の構成

ステップ3:ゲストOS環境の構築(3章)
  Guest Additions による統合 + 日本語環境の構築
  ─────────────────────────────────────────
ステップ2:仮想マシンの作成と Ubuntu のインストール(2章)
  VBoxManage による仮想マシンの構成
  ─────────────────────────────────────────
ステップ1:VirtualBox のインストール(1章)
  winget による VirtualBox のインストール
  ─────────────────────────────────────────

その他情報

項目 内容
目的 コマンドラインによる仮想環境構築の自動化
使用ツール winget(パッケージ管理)、VBoxManage(VM管理)
構築環境 VirtualBox + Ubuntu 24.04 LTS(メモリ8GB、ストレージ60GB)
前提 Windows 11(64bit)、管理者権限、70GB以上の空き容量

目次

サイト内の関連情報

1. ステップ1:VirtualBox のインストール

1.1 インストール

管理者権限コマンドプロンプトを起動する (手順:Windowsキーまたはスタートメニュー → cmd と入力 → 右クリック → 「管理者として実行」)。

次のコマンドを実行する。

REM VirtualBox をシステム領域にインストール
winget install --scope machine --id Oracle.VirtualBox -e --silent --disable-interactivity --force --accept-source-agreements --accept-package-agreements

REM VBoxManage のパス設定(システム環境変数に永続化)
powershell -NoProfile -Command "$p='C:\Program Files\Oracle\VirtualBox'; $c=[Environment]::GetEnvironmentVariable('Path','Machine'); if((Test-Path $p) -and $c -notlike \"*$p*\"){[Environment]::SetEnvironmentVariable('Path',\"$p;$c\",'Machine')}"

REM 現在のセッションにも反映
set "PATH=C:\Program Files\Oracle\VirtualBox;%PATH%"

REM VirtualBox Extension Pack をインストール(本体と同一バージョンを取得)
for /f "tokens=1 delims=r" %a in ('VBoxManage --version') do set "VBOX_VER=%a"
set "EXTPACK_URL=https://download.virtualbox.org/virtualbox/%VBOX_VER%/Oracle_VirtualBox_Extension_Pack-%VBOX_VER%.vbox-extpack"
set "EXTPACK_FILE=%TEMP%\Oracle_VirtualBox_Extension_Pack-%VBOX_VER%.vbox-extpack"
curl -L -o "%EXTPACK_FILE%" "%EXTPACK_URL%"
echo y | VBoxManage extpack install --replace "%EXTPACK_FILE%"
del "%EXTPACK_FILE%"

1.2 インストールの確認

2. ステップ2:仮想マシンの作成と Ubuntu のインストール

VBoxManageのオプションでCPU・メモリ・ストレージ・ネットワークなどを設定し、Ubuntu仮想マシンを作成する。

2.1 VBoxManage modifyvm 主要オプション

オプション 設定内容 本スクリプトの値
--memory RAMサイズ(MB) 8192
--cpus CPU数 2
--vram ビデオメモリ(MB) 128
--firmware ファームウェア種別 efi
--paravirt-provider 準仮想化プロバイダ(ゲストとホストの連携方式) kvm(Linux向け)
--graphicscontroller グラフィックコントローラ vmsvga

2.2 ストレージ構成

仮想マシン
├── SATA Controller(IntelAhci)
│   └── Port 0: 仮想HDD(60GB, VDI形式)
└── IDE Controller(PIIX4)
    └── Port 0: DVDドライブ(Ubuntu ISO)

2.3 仮想マシンの作成と Ubuntu のインストール

コマンドプロンプトを起動する (手順:Windowsキーまたはスタートメニュー → cmd と入力)。

次のコマンドを実行する。ここでは学習用に分かりやすさを優先し、ユーザー名とパスワードをスクリプト内に直接書いている。インストール後はゲストOSにログインしてパスワードを変更する。

REM Ubuntu 24.04 LTS ISO ダウンロード設定
set "ISO_URL=https://releases.ubuntu.com/noble/ubuntu-24.04.4-desktop-amd64.iso"
set "ISO_DIR=%USERPROFILE%\VirtualBox VMs\ISO"
set "ISO_FILE=%ISO_DIR%\ubuntu-24.04.4-desktop-amd64.iso"

REM ISOディレクトリ作成
if not exist "%ISO_DIR%" mkdir "%ISO_DIR%"

REM ISOファイルが存在しない場合のみダウンロード
if exist "%ISO_FILE%" (
    echo Ubuntu 24.04 LTS ISO は既に存在します:%ISO_FILE%
) else (
    echo Ubuntu 24.04 LTS ISO をダウンロード中...
    curl -L -o "%ISO_FILE%" "%ISO_URL%"
)

REM 仮想マシン設定
set "VM_NAME=Ubuntu2404"
set "VM_DIR=%USERPROFILE%\VirtualBox VMs\%VM_NAME%"
set "VDI_FILE=%VM_DIR%\%VM_NAME%.vdi"
set "MEMORY_MB=8192"
set "STORAGE_MB=61440"
set "USER_NAME=myuser"
set "USER_PASSWORD=changeme"
set "SSH_HOST_PORT=2222"
set "SSH_GUEST_PORT=22"

REM 同名VM存在確認
VBoxManage showvminfo "%VM_NAME%" >nul 2>&1
if not errorlevel 1 (
    echo 仮想マシン "%VM_NAME%" は既に存在します
    echo 削除する場合: VBoxManage unregistervm "%VM_NAME%" --delete
    exit /b 1
)

REM 仮想マシンディレクトリ作成
if not exist "%VM_DIR%" mkdir "%VM_DIR%"

REM 仮想マシン作成・登録
VBoxManage createvm --name="%VM_NAME%" --ostype=Ubuntu_64 --register --basefolder="%USERPROFILE%\VirtualBox VMs"

REM 基本設定(メモリ8GB, CPU2コア)
VBoxManage modifyvm "%VM_NAME%" --memory=%MEMORY_MB% --cpus=2 --ioapic=on --acpi=on

REM グラフィック設定
VBoxManage modifyvm "%VM_NAME%" --vram=128 --graphicscontroller=vmsvga

REM ファームウェア設定(EFI)
VBoxManage modifyvm "%VM_NAME%" --firmware=efi

REM パフォーマンス設定
VBoxManage modifyvm "%VM_NAME%" --paravirt-provider=kvm --nested-paging=on

REM 入力デバイス設定
VBoxManage modifyvm "%VM_NAME%" --mouse=usbtablet --keyboard=usb

REM ネットワーク設定(NAT / virtio)
VBoxManage modifyvm "%VM_NAME%" --nic1=nat --nic-type1=virtio --cable-connected1=on

REM SSHポートフォワーディング設定(ホスト2222 → ゲスト22)
VBoxManage modifyvm "%VM_NAME%" --nat-pf1="ssh,tcp,,%SSH_HOST_PORT%,,%SSH_GUEST_PORT%"

REM オーディオ設定
VBoxManage modifyvm "%VM_NAME%" --audio-enabled=on --audio-driver=default --audio-controller=hda --audio-out=on

REM クリップボード・ドラッグ&ドロップ共有
VBoxManage modifyvm "%VM_NAME%" --clipboard-mode=bidirectional --drag-and-drop=bidirectional

REM USB設定(EHCI は Extension Pack が必要)
VBoxManage modifyvm "%VM_NAME%" --usb-ohci=on --usb-ehci=on

REM RTC設定(時計をUTCで扱う)
VBoxManage modifyvm "%VM_NAME%" --rtc-use-utc=on

REM 仮想ハードディスク作成(60GB)
VBoxManage createmedium disk --filename="%VDI_FILE%" --size=%STORAGE_MB% --format=VDI --variant=Standard

REM SATAコントローラ作成・ハードディスク接続
VBoxManage storagectl "%VM_NAME%" --name="SATA Controller" --add=sata --controller=IntelAhci --bootable=on
VBoxManage storageattach "%VM_NAME%" --storagectl="SATA Controller" --port=0 --device=0 --type=hdd --medium="%VDI_FILE%"

REM IDEコントローラ作成・DVDドライブ接続
VBoxManage storagectl "%VM_NAME%" --name="IDE Controller" --add=ide --controller=PIIX4
VBoxManage storageattach "%VM_NAME%" --storagectl="IDE Controller" --port=0 --device=0 --type=dvddrive --medium="%ISO_FILE%"

REM ブート順序設定
VBoxManage modifyvm "%VM_NAME%" --boot1=dvd --boot2=disk --boot3=none --boot4=none

REM 無人インストール設定・起動
VBoxManage unattended install "%VM_NAME%" ^
  --iso="%ISO_FILE%" ^
  --user=%USER_NAME% ^
  --password=%USER_PASSWORD% ^
  --full-user-name="%USER_NAME%" ^
  --locale=ja_JP ^
  --country=JP ^
  --time-zone=Asia/Tokyo ^
  --hostname=ubuntu2404.localdomain ^
  --no-install-additions ^
  --post-install-command="apt-get update && apt-get install -y openssh-server" ^
  --start-vm=separate

echo 無人インストールが開始されました

2.4 インストール完了の待機、SSH鍵の登録と自動ログインの設定

インストールが完了するとVMは自動的に再起動し、openssh-server が起動する。以下では、ホスト側のポート2222が応答することをもってインストール完了を判定する。

REM === 変数の設定 ===
set "VM_NAME=Ubuntu2404"
set "USER_NAME=myuser"
set "USER_PASSWORD=changeme"
set "SSH_HOST_PORT=2222"

REM === SSH ポートが応答するまで待機 ===
echo SSH ポートを待機中 ...
powershell -NoProfile -Command "$port=%SSH_HOST_PORT%; for($i=1; $i -le 180; $i++){ if(Test-NetConnection -ComputerName '127.0.0.1' -Port $port -InformationLevel Quiet){ Write-Host 'SSH ポートが応答しました'; exit 0 }; Write-Host 'SSH 未応答 ... 10 秒待機します'; Start-Sleep -Seconds 10 }; exit 1"
if errorlevel 1 exit /b 1

REM === SSH鍵の作成(既存の場合はスキップ)と公開鍵の登録 ===
if not exist "%USERPROFILE%\.ssh\id_ed25519" (
    ssh-keygen -t ed25519 -f "%USERPROFILE%\.ssh\id_ed25519" -N ""
)
type "%USERPROFILE%\.ssh\id_ed25519.pub" | ssh -o StrictHostKeyChecking=no -p %SSH_HOST_PORT% %USER_NAME%@localhost "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"

REM === 自動ログイン設定(GDM3) ===
echo %USER_PASSWORD%| ssh -o StrictHostKeyChecking=no -p %SSH_HOST_PORT% %USER_NAME%@localhost "tr -d '\r' | sudo -S sed -i -e 's/^#.*AutomaticLoginEnable.*/AutomaticLoginEnable=true/' -e 's/^#.*AutomaticLogin\s*=.*/AutomaticLogin=%USER_NAME%/' /etc/gdm3/custom.conf"

REM === インストール ISO の取り外し ===
VBoxManage storageattach "%VM_NAME%" --storagectl "IDE Controller" --port 0 --device 0 --type dvddrive --medium emptydrive

echo === 動作確認 ===
VBoxManage list vms
VBoxManage showvminfo "%VM_NAME%" | findstr /C:"Memory size" /C:"Number of CPUs" /C:"Firmware" /C:"VRAM size"

確認すべき出力項目:

3. ステップ3:ゲストOS環境の構築

Ubuntuのインストール完了後、Guest Additionsによるホストとゲストの間の統合と、日本語環境の構築を行う。

REM ===========================================================
REM 3. ステップ3:ゲストOS環境の構築
REM ===========================================================
REM 前提:無人インストール完了済み、ゲストOS起動済み、SSH接続可能
REM (NATポートフォワード: ホスト2222 → ゲスト22、openssh-server導入済み)

set "VM_NAME=Ubuntu2404"
set "USER_NAME=myuser"
set "USER_PASSWORD=changeme"
set "SSH_HOST_PORT=2222"

REM ===========================================================
REM 3.1 Guest Additionsのインストール
REM ===========================================================

REM 依存パッケージのインストール(ビルドに必要なツールとカーネルヘッダ)
echo %USER_PASSWORD%| ssh -o StrictHostKeyChecking=no -p %SSH_HOST_PORT% %USER_NAME%@localhost "tr -d '\r' | sudo -S sh -c 'apt-get update && apt-get install -y build-essential dkms linux-headers-$(uname -r)'"

REM Guest Additions ISOをマウント(--medium additions でVBoxが自動解決)
VBoxManage storageattach "%VM_NAME%" --storagectl "IDE Controller" --port 0 --device 0 --type dvddrive --medium additions

REM Guest Additionsのビルド・インストール
echo %USER_PASSWORD%| ssh -o StrictHostKeyChecking=no -p %SSH_HOST_PORT% %USER_NAME%@localhost "tr -d '\r' | sudo -S sh -c 'mount /dev/cdrom /mnt && /mnt/VBoxLinuxAdditions.run --nox11 && umount /mnt'"

REM Guest Additions ISO の取り外し
VBoxManage storageattach "%VM_NAME%" --storagectl "IDE Controller" --port 0 --device 0 --type dvddrive --medium emptydrive

REM 再起動(ゲストOS側から reboot を実行する)
echo %USER_PASSWORD%| ssh -o StrictHostKeyChecking=no -p %SSH_HOST_PORT% %USER_NAME%@localhost "tr -d '\r' | sudo -S reboot"

REM === 再起動後の SSH 接続待機 ===
timeout /t 30 /nobreak
set "SSHGA_DONE=" & for /L %i in (1,1,60) do @(if not defined SSHGA_DONE (timeout /t 10 /nobreak >nul & ssh -o BatchMode=yes -o StrictHostKeyChecking=no -o ConnectTimeout=5 -p %SSH_HOST_PORT% %USER_NAME%@localhost "echo SSH_OK" 2>nul | findstr "SSH_OK" >nul && (echo Guest Additions インストール済みの VM が起動しました & set "SSHGA_DONE=1") || (echo SSH 未応答 ... 10 秒待機します)))

REM ===========================================================
REM 3.2 日本語環境の構築
REM ===========================================================

REM Ubuntu Japanese Teamリポジトリの追加と日本語パッケージのインストール
echo %USER_PASSWORD%| ssh -o StrictHostKeyChecking=no -p %SSH_HOST_PORT% %USER_NAME%@localhost "tr -d '\r' | sudo -S sh -c 'wget https://www.ubuntulinux.jp/sources.list.d/noble.sources -O /etc/apt/sources.list.d/ubuntu-ja.sources && apt-get update && apt-get install -y ubuntu-defaults-ja'"

REM 再起動(日本語環境を反映)
echo %USER_PASSWORD%| ssh -o StrictHostKeyChecking=no -p %SSH_HOST_PORT% %USER_NAME%@localhost "tr -d '\r' | sudo -S reboot"

REM === 再起動後の SSH 接続待機 ===
timeout /t 30 /nobreak
set "SSHJA_DONE=" & for /L %i in (1,1,60) do @(if not defined SSHJA_DONE (timeout /t 10 /nobreak >nul & ssh -o BatchMode=yes -o StrictHostKeyChecking=no -o ConnectTimeout=5 -p %SSH_HOST_PORT% %USER_NAME%@localhost "echo SSH_OK" 2>nul | findstr "SSH_OK" >nul && (echo 日本語環境の構築が完了しました & set "SSHJA_DONE=1") || (echo SSH 未応答 ... 10 秒待機します)))

ubuntu-defaults-ja は、Ubuntu Japanese Team が提供する日本語デスクトップ環境向けのパッケージ群(日本語フォント、日本語入力など)をまとめて導入するパッケージである。

4. トラブルシューティング

4.1 よくある問題と対処

症状 原因 対処
VBoxManageが認識されない PATHが通っていない コマンドプロンプトを再起動、または絶対パス "C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" で実行する。
ISOダウンロード失敗 ネットワーク問題 URLをブラウザで確認し、手動でダウンロードする。
Extension Pack のインストール失敗 本体とバージョンが一致していない VBoxManage --version の出力から得たバージョンでURLを組み立て直す。
インストール後にディスクから起動しない ISOが取り外されていない、またはブート順序 ISOを --medium emptydrive で取り外し、VBoxManage modifyvm "%VM_NAME%" --boot1=disk --boot2=none を実行する。EFIでインストールしているため、事後に --firmware=bios へ変更しても起動しない。復旧できない場合は4.2節でVMを削除し、2.3節から再実行する。
Hyper-V競合エラー Hyper-Vが有効 Windowsの機能でHyper-Vを無効化する。
SSH 接続がタイムアウトする ポートフォワーディング未設定、または SSH サーバ未起動 VBoxManage showvminfo "%VM_NAME%" --machinereadable | findstr natpf で設定を確認。VM 内で sudo systemctl status ssh を確認する。
SSH ホスト鍵エラー VM 再作成による鍵の不一致 ssh-keygen -R "[localhost]:2222" で既知のホスト鍵を削除する。

4.2 VMの削除と再作成

REM VM登録解除とファイル削除
VBoxManage unregistervm "Ubuntu2404" --delete

REM 仮想ディスクのみ削除(VMは残す場合)
VBoxManage closemedium disk "%USERPROFILE%\VirtualBox VMs\Ubuntu2404\Ubuntu2404.vdi" --delete