macOS Catalina仮想マシン構築・破棄スクリプト

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

はじめに

スクリプトを使って構築したmacOS Catalina仮想マシンを構築・破棄するためのスクリプトについて説明します。

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

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

/host-osx/macOS-Catalina/vm-create.command

macOS Catalina仮想マシンを構築するためのスクリプトです。

スクリプトファイルの場所をカレントディレクトリにしています。

SCRIPT_DIR=$(dirname "$0")
cd "$SCRIPT_DIR"

スクリプトの実行ディレクトリにmacOS Catalinaのインストールメディアとなるisoファイルが存在しないかを判定し、存在しない場合は、isoファイルの作成処理を行っています。

if [ ! -e "${SCRIPT_DIR}/Catalina.iso" ]; then
  ...
fi

macOS Catalinaのインストーラーとなるisoファイルを作成するための元となるmacOS Catalinaのインストーラーが存在しない場合はsoftwareupdateコマンドでApple社からダウンロードしています。

    if [ ! -e "/Applications/Install macOS Catalina.app" ]; then
        softwareupdate --fetch-full-installer --full-installer-version 10.15.6
    fi

インストーラーを書き込むための8Gのディスクイメージを作成しています。

    hdiutil create -o "${SCRIPT_DIR}/Catalina" -size 8G -layout SPUD -fs HFS+J -type SPARSE -volname Catalina

作成したディスクイメージをマウントしています。

    hdiutil attach "${SCRIPT_DIR}/Catalina.sparseimage" -noverify -mountpoint "/Volumes/Catalina"

macOS Catalinaのインストーラーに含まれているcreateinstallmediaコマンドを使ってマウントしたディスクイメージにインストーラーを書き込んでいます。

    sudo "/Applications/Install macOS Catalina.app/Contents/Resources/createinstallmedia" --volume "/Volumes/Catalina" --nointeraction

ディスクイメージをデタッチしています。

    hdiutil detach "/volumes/Install macOS Catalina"

ディスクイメージを仮想マシンで使えるiso形式のファイルに変換しています。

    hdiutil convert "${SCRIPT_DIR}/Catalina.sparseimage" -format UDTO -o "${SCRIPT_DIR}/Catalina.cdr"

ファイルの拡張子とcdrからisoに変更しています。

    mv "${SCRIPT_DIR}/Catalina.cdr" "${SCRIPT_DIR}/Catalina.iso"

不要になったディスクイメージを削除しています。

    rm "${SCRIPT_DIR}/Catalina.sparseimage"

VirtualBox上のmacOS Catalinaの仮想マシンの名前を定義しています。

VM_NAME="macOS-Catalina"

VirtualBox上にVM_NAMEに定義されて仮想マシンが存在しないかを判定し、存在しない場合は仮想マシンの構築処理を行っています。

if [ ! "`vboxmanage list vms | grep '"'"${VM_NAME}"'"'`" ]; then
  ...
fi

VirtualBoxに作成する仮想マシンをvboxmanageコマンドで設定しています。

設定可能なパラメータは、ここを参照してください。

    vboxmanage createvm -name "${VM_NAME}" -register

    VM_DIR=$(dirname "`vboxmanage showvminfo "${VM_NAME}" --machinereadable | grep -e "^CfgFile=" | sed -e 's/^CfgFile="//' -e 's/"$//'`")    
    vboxmanage createmedium disk -filename "${VM_DIR}/${VM_NAME}.vdi" -size 100000 --format vdi
    vboxmanage storagectl "${VM_NAME}" --name "SATA" --add sata --controller IntelAhci
    vboxmanage storageattach "${VM_NAME}" --storagectl "SATA" --port 0 --device 0 --type hdd --medium "${VM_DIR}/${VM_NAME}.vdi"
    vboxmanage storageattach "${VM_NAME}" --storagectl "SATA" --port 1 --device 0 --type dvddrive --medium "${SCRIPT_DIR}/Catalina.iso"

    vboxmanage modifyvm "${VM_NAME}" --ostype MacOS_64
    vboxmanage modifyvm "${VM_NAME}" --acpi on
    vboxmanage modifyvm "${VM_NAME}" --chipset piix3
    vboxmanage modifyvm "${VM_NAME}" --mouse usbtablet
    vboxmanage modifyvm "${VM_NAME}" --keyboard usb
    vboxmanage modifyvm "${VM_NAME}" --firmware efi
    vboxmanage modifyvm "${VM_NAME}" --rtcuseutc on
    vboxmanage modifyvm "${VM_NAME}" --cpus 2
    vboxmanage modifyvm "${VM_NAME}" --memory 4096
    vboxmanage modifyvm "${VM_NAME}" --vram 128
    vboxmanage modifyvm "${VM_NAME}" --audiocontroller hda
    vboxmanage modifyvm "${VM_NAME}" --audioin on
    vboxmanage modifyvm "${VM_NAME}" --audioout on
    vboxmanage modifyvm "${VM_NAME}" --usbxhci on
    vboxmanage modifyvm "${VM_NAME}" --nic1 nat
    vboxmanage modifyvm "${VM_NAME}" --nictype1 virtio
    vboxmanage modifyvm "${VM_NAME}" --clipboard bidirectional
    vboxmanage modifyvm "${VM_NAME}" --draganddrop bidirectional
    vboxmanage setextradata "${VM_NAME}" GUI/ScaleFactor 2.00

    VBoxManage startvm "${VM_NAME}"

/host-osx/macOS-Catalina/vm-destroy.command

macOS Catalina仮想マシンを破棄するためのスクリプトです。

スクリプトファイルの場所をカレントディレクトリにしています。

SCRIPT_DIR=$(dirname "$0")
cd "$SCRIPT_DIR"

VirtualBox上のmacOS Catalinaの仮想マシンの名前を定義しています。

VM_NAME="macOS-Catalina"

VirtualBox上にVM_NAMEに定義されて仮想マシンが存在するかを判定し、存在する場合は削除処理を実行しています。

if [ "`vboxmanage list vms | grep '"'"${VM_NAME}"'"'`" ]; then
  ...
fi

VM_NAMEに定義された仮想マシンを停止しています。

    vboxmanage controlvm "${VM_NAME}" poweroff

VM_NAMEに定義された仮想マシンを破棄しています。

     vboxmanage unregistervm "${VM_NAME}" --delete

Comment

スポンサーリンク