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

概要

Windows 11上にVirtualBoxとFreeBSD 15.0-RELEASE仮想マシンをバッチスクリプトで構築する手順を解説する。GUIを使わず、コマンドラインで再現可能な環境構築を行う。FreeBSD 15.0-RELEASEは2025年12月2日に公開された版である。

構築は3つのステップで行う。ステップ1ではwingetによりVirtualBoxをインストールし、ステップ2ではVBoxManageコマンドでCPU・メモリ・ストレージなどを設定してFreeBSD仮想マシンを作成し、bsdinstallのスクリプト機能(installerconfig:インストール時に自動実行される設定ファイル)を組み込んだカスタムISOによりFreeBSDを自動インストールする。ステップ3ではVirtualBox Guest Additionsの導入とロケール・日本語フォントの設定を行う。

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

取り組み内容

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

用語

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

ステップ3:ゲストOS環境の構築(3章)
  Guest Additions による統合 + ロケールと日本語フォントの設定
  ─────────────────────────────────────────
ステップ2:仮想マシンの作成と FreeBSD のインストール(2章)
  VBoxManage による仮想マシンの構成 + bsdinstall による自動インストール
  ─────────────────────────────────────────
ステップ1:VirtualBox のインストール(1章)
  winget による VirtualBox のインストール
  ─────────────────────────────────────────
項目 内容
目的 コマンドラインによる仮想環境構築の自動化
使用ツール winget(パッケージ管理)、VBoxManage(VM管理)、xorriso(ISO編集)
構築環境 VirtualBox + FreeBSD 15.0-RELEASE(メモリ4GB、ストレージ20GB、Xorg を含まない構成)
前提 Windows 11(64bit)、管理者権限、30GB以上の空き容量、WSL(xorriso の実行環境)

目次

サイト内の関連情報

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:仮想マシンの作成と FreeBSD のインストール

VBoxManageのオプションでCPU・メモリ・ストレージ・ネットワークを設定し、FreeBSD仮想マシンを作成する。FreeBSDのインストールには、bsdinstallのスクリプト機能(installerconfig)を利用する。installerconfigを含むカスタムISOを作成し、それを用いて無人インストールを行う。

2.1 VBoxManage modifyvm 主要オプション

オプション 設定内容 本スクリプトの値
--memory RAMサイズ(MB) 4096
--cpus CPU数 2
--vram ビデオメモリ(MB) 128
--firmware ファームウェア種別 efi
--paravirt-provider 準仮想化プロバイダ default
--graphicscontroller グラフィックコントローラ vboxsvga

2.2 ストレージ構成

仮想マシン
├── SATA Controller(IntelAhci)
│   └── Port 0: 仮想HDD(20GB, VDI形式)→ ゲストからは ada0 として見える
└── IDE Controller(PIIX4)
    └── Port 0: DVDドライブ(FreeBSD カスタムISO)

2.3 installerconfigの作成

bsdinstallが参照する自動インストール用スクリプト(installerconfig)を作成する。このファイルをFreeBSDインストールISOの /etc/installerconfig に配置することで、無人インストールが実行される。ファイルは、ディスク構成やインストールする配布物を指定する前半部分(プリアンブル)と、インストール後にchroot環境で実行されるシェルスクリプト(#!/bin/sh 以降)からなる。以下の内容を %USERPROFILE%\VirtualBox VMs\ISO\installerconfig として保存する。

PARTITIONS="ada0 gpt"
DISTRIBUTIONS="kernel.txz base.txz"

#!/bin/sh

# ネットワーク設定(NIC は 82540EM のため em0)
sysrc ifconfig_em0="DHCP"
sysrc sshd_enable="YES"
dhclient em0

# タイムゾーン設定
cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
adjkerntz -a

# ユーザー作成(wheel グループへ所属、-h 0 で標準入力からパスワードを設定)
echo "changeme" | pw useradd -n myuser -m -G wheel -s /bin/sh -h 0

# SSH の root ログインを無効化
sed -i "" 's/^#*PermitRootLogin.*/PermitRootLogin no/' /etc/ssh/sshd_config

# pkg の初期化
env ASSUME_ALWAYS_YES=YES pkg bootstrap -f

# sudo のインストールと wheel グループへの権限付与(パスワード入力不要)
env ASSUME_ALWAYS_YES=YES pkg install -y sudo
echo '%wheel ALL=(ALL:ALL) NOPASSWD: ALL' > /usr/local/etc/sudoers.d/wheel
chmod 0440 /usr/local/etc/sudoers.d/wheel

# loader.conf 設定
cat << EOF >> /boot/loader.conf
autoboot_delay="3"
hw.efi.poweroff="0"
EOF

shutdown -p now

hw.efi.poweroff="0" は、UEFI 環境で shutdown -p による電源断が完了しない場合の回避設定である。

2.4 カスタムISOの作成と仮想マシンの作成

コマンドプロンプトで以下を実行する(管理者権限は不要)。

カスタムISOの作成にはxorrisoを使用する。xorrisoはWindowsネイティブバイナリが提供されていないため、WSL(Windows Subsystem for Linux)またはCygwinなどの環境が必要となる。ここでは、WSL上のxorrisoを呼び出す方法を示す。事前にWSLのUbuntu環境で sudo apt-get install -y xorriso を実行しておく。

REM FreeBSD 15.0-RELEASE ISO ダウンロード設定
set "ISO_URL=https://download.freebsd.org/releases/amd64/amd64/ISO-IMAGES/15.0/FreeBSD-15.0-RELEASE-amd64-disc1.iso"
set "ISO_DIR=%USERPROFILE%\VirtualBox VMs\ISO"
set "ISO_FILE=%ISO_DIR%\FreeBSD-15.0-RELEASE-amd64-disc1.iso"
set "CUSTOM_ISO=%ISO_DIR%\FreeBSD-15.0-custom.iso"
set "INSTALLERCONFIG=%ISO_DIR%\installerconfig"

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

REM ISOファイルが存在しない場合のみダウンロード
if exist "%ISO_FILE%" (
    echo FreeBSD 15.0-RELEASE ISO は既に存在します:%ISO_FILE%
) else (
    echo FreeBSD 15.0-RELEASE ISO をダウンロード中...
    curl -L -o "%ISO_FILE%" "%ISO_URL%"
    if errorlevel 1 (
        echo ダウンロードに失敗しました
        exit /b 1
    )
)

REM installerconfigが存在することを確認
if not exist "%INSTALLERCONFIG%" (
    echo installerconfig が見つかりません:%INSTALLERCONFIG%
    echo 2.3節の手順に従いinstallerconfigを作成してください
    exit /b 1
)

REM カスタムISOの作成(WSL上のxorrisoを使用。ブートイメージは元のISOのものを保持)
copy "%ISO_FILE%" "%CUSTOM_ISO%"
powershell -NoProfile -Command "wsl xorriso -boot_image any keep -dev $(wsl wslpath -u '%CUSTOM_ISO%') -map $(wsl wslpath -u '%INSTALLERCONFIG%') /etc/installerconfig"

REM 仮想マシン設定
set "VM_NAME=FreeBSD15"
set "VM_DIR=%USERPROFILE%\VirtualBox VMs\%VM_NAME%"
set "VDI_FILE=%VM_DIR%\%VM_NAME%.vdi"
set "MEMORY_MB=4096"
set "STORAGE_MB=20480"

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=FreeBSD_64 --register --basefolder="%USERPROFILE%\VirtualBox VMs"

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

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

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

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

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

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

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

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設定
VBoxManage modifyvm "%VM_NAME%" --rtc-use-utc=on

REM 仮想ハードディスク作成(20GB)
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ドライブ接続(カスタムISOを使用)
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="%CUSTOM_ISO%"

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

REM 仮想マシン起動(installerconfigによる自動インストールが開始される)
VBoxManage startvm "%VM_NAME%" --type=separate

installerconfig の末尾で shutdown -p now を実行しているため、インストールが完了するとVMは電源オフとなる。VBoxManage list runningvms の出力に FreeBSD15 が現れなくなった時点が完了である。その後、DVDドライブからISOを取り外し、ディスクから起動する。

REM DVDドライブからISOを取り外し
VBoxManage storageattach "%VM_NAME%" --storagectl="IDE Controller" --port=0 --device=0 --type=dvddrive --medium=emptydrive

REM ブート順序をディスク優先に変更
VBoxManage modifyvm "%VM_NAME%" --boot1=disk --boot2=none --boot3=none --boot4=none

REM 仮想マシン起動
VBoxManage startvm "%VM_NAME%" --type=separate

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

確認すべき出力項目:

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

FreeBSDのインストール完了後、VirtualBox Guest Additions の導入と、ロケール・日本語フォントの設定を行う。以下のコマンドはホスト側のコマンドプロンプトからSSH経由で実行する。初回接続時にはユーザ myuser のパスワード「changeme」を入力する(sudo は installerconfig の設定によりパスワード不要である)。

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

set "VM_NAME=FreeBSD15"
set "USER_NAME=myuser"

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

REM Xorg を含まない構成のため nox11 版を使用する
ssh -p 2222 %USER_NAME%@localhost "sudo pkg install -y virtualbox-ose-additions-nox11"

REM Guest Additionsサービスの有効化
ssh -p 2222 %USER_NAME%@localhost "sudo sysrc vboxguest_enable=YES && sudo sysrc vboxservice_enable=YES"

REM 再起動
ssh -p 2222 %USER_NAME%@localhost "sudo shutdown -r now"

REM ===========================================================
REM 3.2 ロケールと日本語フォントの設定
REM ===========================================================

REM 日本語フォントのインストール
ssh -p 2222 %USER_NAME%@localhost "sudo pkg install -y ja-font-std ja-font-vlgothic"

REM ログインクラスの日本語設定(/etc/login.conf に japanese クラスを追加)
(
echo.
echo japanese^|Japanese Users Accounts:\
echo     :charset=UTF-8:\
echo     :lang=ja_JP.UTF-8:\
echo     :tc=default:
) | ssh -p 2222 %USER_NAME%@localhost "sudo tee -a /etc/login.conf >/dev/null && sudo cap_mkdb /etc/login.conf"

REM ユーザーのログインクラスを japanese に変更
ssh -p 2222 %USER_NAME%@localhost "sudo pw usermod %USER_NAME% -L japanese"

REM 再起動(設定を反映)
ssh -p 2222 %USER_NAME%@localhost "sudo shutdown -r now"

日本語入力を利用する場合は、Xorg とデスクトップ環境を別途導入したうえで、入力メソッドを追加する。FreeBSD では次のパッケージが該当する。

ssh -p 2222 %USER_NAME%@localhost "sudo pkg install -y fcitx5 ja-fcitx5-anthy fcitx5-configtool fcitx5-gtk3 fcitx5-qt6"

REM fcitx5 環境変数の設定(~/.profile に追記)
(
echo export GTK_IM_MODULE=fcitx
echo export QT_IM_MODULE=fcitx
echo export XMODIFIERS=@im=fcitx
) | ssh -p 2222 %USER_NAME%@localhost "tee -a ~/.profile >/dev/null"

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

4.1 よくある問題と対処

症状 原因 対処
VBoxManageが認識されない PATHが通っていない コマンドプロンプトを再起動、または絶対パス "C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" で実行する
ISOダウンロード失敗 ネットワーク問題 URLをブラウザで確認し、手動でダウンロードする
EFIブート失敗・UEFI Shellに落ちる カスタムISOのブートイメージが保持されていない xorrisoに-boot_image any keepを指定していることを確認する。VMをEFIで作成しているため、インストール後に--firmware=biosへ変更しても起動しない。ISOを作り直したうえで4.2節の手順でVMを削除し、2.4節から再実行する
Hyper-V競合エラー Hyper-Vが有効 Windowsの機能でHyper-Vを無効化する
installerconfigが実行されない カスタムISO内の配置先が /etc/installerconfig になっていない wsl xorriso -indev <ISO> -lsl /etc でISO内のファイル配置を確認する
pkg の処理が失敗する インストール中にネットワークが利用できていない installerconfig の dhclient em0 が実行されているか、NICが em0 として認識されているかを確認する
シャットダウン時に電源が切れない UEFI環境でのパワーオフ処理 /boot/loader.confhw.efi.poweroff="0" を追記する
SSH接続時にsudoがパスワードを要求する sudoers設定の不備 /usr/local/etc/sudoers.d/wheel の内容と権限(0440)を確認する

4.2 VMの削除と再作成

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

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