はじめに
Mac上にWindows10仮想マシンを作成するためのスクリプトについて説明します。
使用しているスクリプトは、githubにvm-configurateとして公開しているのでgithubからダウンロードするかここからダウンロードしてください。
vm-configurateのフォルダ構成については、下のリンクを参照してください。
スクリプトの実行には、VirtualBoxとVagrantが必要です。インストールされていない場合は、下のリンクを参照してください。
Windows10のBoxファイルを下記リンクのWindows10用Boxファイルの準備を参照してください。
/host-osx/windows10/vm-create.command
Windows 10仮想マシンを構築するためのメインとなるスクリプトです。
スクリプトファイルの場所をカレントディレクトリにしています。
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でプロビジョニング中に再起動出来るようにするvagrant-reloadプラグインがインストールされていない場合はインストールしています。
if [ ! "`vagrant plugin list | grep 'vagrant-reload'`" ]; then
vagrant plugin install vagrant-reload
fi
Windows10 BoxファイルがVagrantに登録されていない場合は、Vagrantに登録しています。
Boxファイルは、ここからダウンロードすることが出来ます。
if [ ! "`vagrant box list | grep 'Microsoft/EdgeOnWindows10'`" ]; then
unzip MSEdge.Win10.Vagrant.zip
vagrant box add "./MSEdge - Win10.box" --name "Microsoft/EdgeOnWindows10"
rm "./MSEdge - Win10.box"
fi
vagrant init
でVagrantを現在のディレクトリで実行出来るように初期化しています。vagrant up
で現在のディレクトリにあるVagrantファイルを読み込み仮想マシンを起動しています。
vagrant init
vagrant up
/host-osx/windows10/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ファイルを使用することも出来ますが、今回はMicrosoft社からダウンロードしてきたboxファイルから作成します。
VagrantへBoxファイルを登録する処理は、vm-create.command.shで行っています。
vm1.vm.box = "Microsoft/EdgeOnWindows10"
プロビジョニング 時にWindowsと通信する方法をデフォルトのSSHからWinRMに設定を変えています。
vm1.vm.communicator = "winrm"
ホストOSの”./../../guest-share/windows10″ディレクトリをゲストOSの”/users/IEUser/share”ディレクトリに同期するように指定しています。
同期することでホストOSとゲストOSでファイルを共有して使用することが出来ます。
vm1.vm.synced_folder "./../../guest-share/windows10", "/users/IEUser/share", create: true
仮想マシンに設定するIPアドレスを指定しています。
vm1.vm.network "private_network", ip: "192.168.33.102"
WinRMを実行するユーザーIDとパスワードを設定しています。
vm1.winrm.username = "IEUser"
vm1.winrm.password = "Passw0rd!"
Vagrantのプロビジョニング により仮想マシンの初期化時にスクリプトを実行するように指定しています。
ここではWindowsを日本語化するためのPowershellスクリプトconfigure-1.ps1を実行し、reloadで仮想マシンを再起動、その後、日本語化の続きのPowershellスクリプトconfigure-2.ps1を実行しています。
日本語化スクリプトの詳細については、下のリンクを参照してください。

vm1.vm.provision :shell, inline: "powershell -File \"C:\\users\\IEUser\\share\\os\\configure-1.ps1\""
vm1.vm.provision :reload
vm1.vm.provision :shell, inline: "powershell -File \"C:\\users\\IEUser\\share\\os\\configure-2.ps1\""
VirtualBoxに作成する仮想マシンを設定しています。
項目 | 内容 | ||
gui | 仮想マシン起動時に仮想マシンを表示するかの設定 | ||
name | 仮想マシンの名前 | ||
cpus | 仮想マシンに割り当てるCPU数 | ||
memory | 仮想マシンに割り当てるメモリサイズ | ||
customize | カスタマイズ設定。 VirtualBoxのVBoxManageで設定することの出来るパラメータを設定することが出来ます。 設定可能なパラメータは、ここを参照してください。 | ||
modifyvm | 仮想マシンを変更するコマンド | ||
–clipboard | ホストOSとゲストOS間のクリップボードの共有に関する設定 | ||
–draganddrop | ホストOSとゲストOS間のドラッグアンドドロップに関する設定 | ||
–vram | ビデオメモリサイズの設定 | ||
–graphicscontroller | 仮想マシンで使用するグラフィックスコントローラー | ||
setextradata | 仮想マシンへの追加設定のコマンド | ||
GUI/ScaleFactor | ホストOSに表示する仮想マシンの画面サイズをスケーリング |
vm1.vm.provider "virtualbox" do |vb|
vb.gui = true
vb.name = "windows10"
vb.cpus = 2
vb.memory = "4096"
vb.customize ["modifyvm", :id, "--clipboard", "bidirectional"]
vb.customize ["modifyvm", :id, "--draganddrop", "bidirectional"]
vb.customize ["modifyvm", :id, "--vram", "128"]
vb.customize ['modifyvm', :id, '--graphicscontroller', 'vboxsvga']
vb.customize ['setextradata', :id, 'GUI/ScaleFactor', '2.00']
end
Comment