Ubuntu 20.04仮想マシン構築スクリプト

スポンサーリンク
スポンサーリンク

はじめに

Mac上にUbuntu20.04仮想マシンを作成するためのスクリプトについて説明します。

使用しているスクリプトは、githubにvm-configurateとして公開しているのでgithubからダウンロードするかここからダウンロードしてください。

vm-configurateのフォルダ構成については、下のリンクを参照してください。

スクリプトの実行には、VirtualBoxとVagrantが必要です。インストールされていない場合は、下のリンクを参照してください。

処理の流れ

/vm-configure/host-osx/ubuntu-20.04/vm-create.commandを実行すると以下の順でスクリプトや構成ファイルを呼び出しています。

  1. vm-create.commandでVagrantを起動
  2. Vagrantのプロビジョニングで/guest-share/ubuntu-20.04/configure.shを実行
  3. Vagrantのプロビジョニングで/guest-share/ubuntu-20.04/docker-start.shを実行
  4. 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

スポンサーリンク