注意
GUIの仮想マシン(Ubuntu Desktopなど)は対象としていません。
はじめに
訳あってVirtualBox上のUbuntu仮想マシン(Ubuntu Server)を使用する必要が出てきた*1が、初期設定が非常に面倒である。
そこでVagrantを導入し、自動で仮想マシンを作成してもらうことにする。さらに作成後のパッケージ追加なども自動化する。
環境
- Windows 11 Pro 23H2
- Oracle VM VirtualBox 7.0.12
- winget v1.6.3133
1. VagrantとVirtualBoxのインストール
winget*2を使うことで即座にインストールが完了する。
# PowerShellで以下を実行 winget install Oracle.VirtualBox Hashicorp.Vagrant
インストール完了後、再起動する。
2. Vagrantfileの作成
Vagrantでは、Vagrantfileの記述に沿って仮想マシンが自動的にセットアップされる。
Vagrantfileを作成するには、適当なディレクトリでvagrant init <Box名>
を実行すればよい。
ここでBoxとは、仮想マシンのベースとなるimageを指している*3。とりあえずはDockerのimageと同じような解釈でいいと思う。
たとえば、bento/ubuntu-22.04というBoxを使用するためのVagrantfileを作成するには、以下を実行すればよい。
# PowerShellで以下を実行 vagrant init bento/ubuntu-22.04
3. Vagrantfileの追記
今回は仮想マシン作成後のパッケージ追加まで自動化したいので、Vagrantfileの末尾にあるconfig.vm.provision
あたりを修正する。
provision
を設定することで、マシン作成後に実行してほしいコマンドを指定できる。
たとえば、apt update
とapt install vim
を実行してほしい場合、Vagrantfileを次のように修正する。
(前略) # Enable provisioning with a shell script. Additional provisioners such as # Ansible, Chef, Docker, Puppet and Salt are also available. Please see the # documentation for more information about their specific syntax and use. config.vm.provision "shell", inline: <<-SHELL apt update apt install -y vim SHELL end
補足:default: SSH auth method
で止まる・タイムアウトする場合
さまざまな解決法があるようだが、自分の環境では以下の記事を参考にしたら解決した。
ただ、別のBoxを試したほうがいい気もする。ちなみに自分の環境ではgeneric/ubuntu2204
なら止まらず動作した。
(追記)
vagrant up --debug
でデバッグ情報を出力するようにしたところ、成功率が上がった気がする。
4. 仮想マシンの立ち上げ
ここまで来たらvagrant up
を実行することで、初期設定と立ち上げが自動実行される。
立ち上げ後、vagrant ssh
を実行すればターミナルにアクセス可能である。
ちなみに仮想マシンを止めたい際はvagrant halt
を実行すればよい。
補足:ホスト側のディレクトリをマウントする
これもVagrantfileの書き換えで可能。ゲスト側のディレクトリの場所は絶対パスで書く必要があるとのこと。
(前略) # Share an additional folder to the guest VM. The first argument is # the path on the host to the actual folder. The second argument is # the path on the guest to mount the folder. And the optional third # argument is a set of non-required options. config.vm.synced_folder "../host_directory", "/guest_directory" (後略)