はじめに
Mac上にUbuntu20.04仮想マシンを作成するためのスクリプトについて説明します。
使用しているスクリプトは、githubにvm-configurateとして公開しているのでgithubからダウンロードするかここからダウンロードしてください。
vm-configurateのフォルダ構成については、下のリンクを参照してください。
スクリプトの実行には、VirtualBoxとVagrantが必要です。インストールされていない場合は、下のリンクを参照してください。
処理の流れ
/vm-configure/host-osx/ubuntu-20.04/vm-create.command
を実行すると以下の順でスクリプトや構成ファイルを呼び出しています。
vm-create.command
でVagrantを起動- Vagrantのプロビジョニングで
/guest-share/ubuntu-20.04/configure.sh
を実行 - Vagrantのプロビジョニングで
/guest-share/ubuntu-20.04/docker-start.sh
を実行 vm-create.command
でlaunchdからcom.collbow.vagrant.sh
を実行
/host-osx/ubuntu-20.04/vm-create.command
Ubuntu 20.04仮想マシンを構築するためのメインとなるスクリプトです。
スクリプトファイルの場所をカレントディレクトリにしています。
SCRIPT_DIR=$(dirname "$0")
cd "$SCRIPT_DIR"
スクリプトの実行結果を実行スクリプトファイル名の後ろに.logを付けたファイル(vm-create.command.log)へ出力するように設定し、ログファイルへ実行開始日時を出力しています。
exec &>>(tee "${0}.log")
date "+%Y/%m/%d %H:%M:%S"
VagrantのBoxファイル(Vagrant用の仮想端末のテンプレート)とVirtualBoxの仮想マシンの保存先の基準となるディレクトリをVM_BASE_DIRに設定しています。
# Directory to store vagrant box and virtual machine
VM_BASE_DIR=$(cd "${SCRIPT_DIR}/../" && pwd)
VagrantのBoxファイルの保存先は、環境変数VAGRANT_HOMEを設定することで変更することが出来ます。
スクリプトでbashの初期設定ファイル.bash_profileへVAGRANT_HOMEを環境変数として書き込んでいます。
保存先を変更したい場合は、#でコメントアウトされている箇所を下の状態に変更してください。
# --------------------------------------------------
# Change the save destination of vagrant box files to the VM_BASE_DIR folder.
# If you don't want to change the save folder, please comment out.
if [ -e "${HOME}/.bash_profile" ]; then
sed -i _cb.bak -e "/^export VAGRANT_HOME=.*$/d" "${HOME}/.bash_profile"
rm "${HOME}/.bash_profile_cb.bak"
fi
echo 'export VAGRANT_HOME="'"${VM_BASE_DIR}"'/.vagrant.d"' >>"${HOME}/.bash_profile"
# --------------------------------------------------
VirtualBoxの仮想マシン保存先を変更しています。
保存先を変更したい場合は、#でコメントアウトされている箇所を下の状態に変更してください。
# --------------------------------------------------
# Change the save destination of vagrant box files to the VM_BASE_DIR folder.
# If you don't want to change the save folder, please comment out.
vboxmanage setproperty machinefolder "${VM_BASE_DIR}/VirtualBox VMs"
# --------------------------------------------------
VagrantのBoxファイルの保存先は、環境変数VAGRANT_HOMEによって決定されます。上のコードにあるecho 'export VAGRANT_HOME="'"${VM_BASE_DIR}"'/.vagrant.d"' >>"${HOME}/.bash_profile"
でbashの初期設定ファイルに保存された環境変数を読み込み直して有効化しています。
if [ -e "${HOME}/.bash_profile" ]; then
. "${HOME}/.bash_profile"
fi
vagrant init
でVagrantを現在のディレクトリで実行出来るように初期化しています。vagrant up
で現在のディレクトリにあるVagrantファイルを読み込み仮想マシンを起動しています。
vagrant init
vagrant up
macOS上に構築した仮想マシンは、仮想マシンを起動したままホストとなるmacOSをシャットダウンすると強制終了となり、ファイルが破損したりすることがあります。
これを防ぐためにmacOSの起動時に仮想マシンを自動的に起動し、macOSのシャットダウン時に仮想マシンも自動的にシャットダウンするようにlaunchdへmacOSの状態を監視するためのスクリプトを登録しています。
詳細は、下のリンクを参照してください。
chmod u+x com.collbow.vagrant.sh
sed 's|\[SCRIPT_DIR\]|'"${SCRIPT_DIR}"'|g' "com.collbow.vagrant.plist" > "${HOME}/Library/LaunchAgents/com.collbow.vagrant.plist"
launchctl load "${HOME}/Library/LaunchAgents/com.collbow.vagrant.plist"
launchctl start com.collbow.vagrant
/host-osx/ubuntu-20.04/Vagrantfile
Vagrantfileは、Vagrantで仮想マシンの構築するために必要な構成を記述するためのファイルです。
VAGRANTFILE_API_VERSIONで使用するVagrantfileのAPIバージョンを定義しています。
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
からend
の間には、複数の仮想マシンの定義を入れることが出来ます。
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
...
end
config.vm.define :vm1 do |vm1|
からend
の間に構築する仮想マシンの構成を定義します。
複数の仮想マシンを定義する場合は、vm1をvm2等にして定義を繰り返すことで一つのVagrantfileで複数の仮想マシンを構成することが出来ます。
config.vm.define :vm1 do |vm1|
...
end
使用するVagrantのBoxの名前を指定しています。
Boxファイルは、仮想マシンのテンプレートになるファイルで自分で作成することもできますが、Vagrant Cloudに公開されているBoxファイルを使用すれば簡単に仮想マシンを構築することが出来ます。
今回は、Chef Software社がVagrant Cloudに公開しているUbuntu 20.04のBoxファイルを指定しています。
vm1.vm.box = "bento/ubuntu-20.04"
仮想マシンに設定するIPアドレスを指定しています。
vm1.vm.network "private_network", ip: "192.168.33.101"
ホストOSの”./../../guest-share/ubuntu-20.04″ディレクトリをゲストOSの”/home/vagrant/share”ディレクトリに同期するように指定しています。
同期することでホストOSとゲストOSでファイルを共有して使用することが出来ます。
vm1.vm.synced_folder "./../../guest-share/ubuntu-20.04", "/home/vagrant/share"
Vagrantのプロビジョニング により仮想マシンの初期化時にスクリプトを実行するように指定しています。
ここでは、ホストOSと同期したディレクトリにあるUbuntuを構成するための”configure.sh”とDockerコンテナを構成するための”docker-start.sh”を実行するように指定しています。
Dockerコンテナの構築スクリプトについては、下のリンクを参照してください。
vm1.vm.provision :shell, inline: "bash \"/home/vagrant/share/os/configure.sh\""
vm1.vm.provision :shell, inline: "bash \"/home/vagrant/share/docker-start.sh\""
VirtualBoxに作成する仮想マシンを設定しています。
項目 | 内容 | ||
name | 仮想マシンの名前 | ||
cpus | 仮想マシンに割り当てるCPU数 | ||
memory | 仮想マシンに割り当てるメモリサイズ | ||
customize | カスタマイズ設定。 VirtualBoxのVBoxManageで設定することの出来るパラメータを設定することが出来ます。 設定可能なパラメータは、ここを参照してください。 | ||
modifyvm | 仮想マシンを変更するコマンド | ||
–graphicscontroller | 仮想マシンで使用するグラフィックスコントローラー |
vm1.vm.provider "virtualbox" do |vb|
vb.name = "ubuntu-20.04"
vb.cpus = 2
vb.memory = "4096"
vb.customize ['modifyvm', :id, '--graphicscontroller', 'VMSVGA']
end
Comment