Windows 10 にて VirtualBox + Vagrant 環境の導入メモ

Windows 10 + VirtualBox + Vagrant にて Ubuntu 19.10 のコマンドライン開発環境の構築を試みた際のメモ。

## Chocolatey の導入

インストールを簡易化するため、Windows用パッケージマネージャ [Chocolatey](https://chocolatey.org/) を用いて必要なソフトウェアをインストールする。

Windows 10 にて、 `Windows + X` キー → `A` キー を順に入力して Windows PowerShell (管理者) を起動する。

`管理者: Windows PowerShell` ウィンドウが表示されたら、以下の内容を入力して実行する。 参照: https://chocolatey.org/install

```powershell
Set-ExecutionPolicy Bypass -Scope Process -Force; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))

```

## VirtualBox, Vagrant のインストール

Chocolatey のインストールが終わったら、そのまま `管理者: Windows PowerShell` ウィンドウにて以下を入力して実行する。

```powershell
choco install -y virtualbox
choco install -y vagrant
```

<del>
```powershell
choco install -y virtualbox --version=6.0.14
choco install -y vagrant
```
</del>

~~現状リリースされている Vagrant (記事の時点で 2.2.6) は VirtualBox 6.1 に未対応のため、当座の措置として VirturlBox 6.0.14 を導入する。~~
 → Vagrant 2.2.7 がリリースされました: 2020年1月28日

- ~~回避策の参考:~~
 - ~~https://qiita.com/shuu1222/items/7a6d04172363be44025c~~
 - ~~https://blogs.oracle.com/scoter/getting-vagrant-226-working-with-virtualbox-61-ga~~
 - ~~https://github.com/hashicorp/vagrant/commit/20ccf46fb166bd7ddc3dfd426b07a79393cd1250~~

VirtualBox, Vagrant のインストールが終わったら、一旦再起動を行う。

```powershell
Restart-Computer -Force
```

## Ubuntu 19.10 (eoan) イメージの導入と起動

以下をPowerShell内で実行。

- イメージファイルの指定

```powershell
vagrant box add Ubuntu_19.10_eoan https://cloud-images.ubuntu.com/releases/eoan/release/ubuntu-19.10-server-cloudimg-amd64-vagrant.box
```

- Vagrant 用フォルダの作成

```powershell
mkdir C:\Vagrant
mkdir C:\Vagrant\Ubuntu_19.10_eoan
```

- Vagrant 用フォルダへの移動

```powershell
chdir C:\Vagrant\Ubuntu_19.10_eoan
```

- Vegrant 用設定の作成

```powershell
vagrant init Ubuntu_19.10_eoan
```

- 仮想マシン環境の起動(virtualboxにて)

```powershell
vagrant up --provider virtualbox
```

初回起動時のみ、`--provider virtualbox` の指定が必要。

> virtualboxが正常に起動しない場合は、「Windowsの機能の有効化または無効化」から、
>
>```powershell
appwiz.cpl ",2"
```
>
>Hyper-V 関連の機能が有効化されていないか確認し、有効化されていた場合はそれぞれ無効化を試みる。 参照: https://answers.microsoft.com/ja-jp/windows/forum/all/windows/5d8c563a-cec4-4fa5-8c95-79e5ba48bf79
>
>- Hyper-V
- Windows Defender Application Guard
- Windows Subsystem for Linux
- Windows サンドボックス
- Windows ハイパーバイザー プラットフォーム
- インターネット インフォメーション サービスのホスト可能なWebコア
- 仮想マシン プラットフォーム
>
> Hyper-V 関連の機能は無効化して**再起動した後、改めてさらにもう一度再起動**する必要がある場合あり。

virtualbox が正常な場合でも初回起動には時間が掛かるため、応答待ち時間切れ(timeout)系のエラーが発生する場合もあり。その場合、しばらく仮想マシンが起動するのを待っていれば次の「仮想マシン環境への接続」が実行可能になっている事がある。

- 仮想マシン環境への接続

```powershell
vagrant ssh
```

## Ubuntu 19.10 (eoan) イメージ内での操作

gcc, clang, nodejs, openblas, rustup などの開発環境の導入例。

- パッケージ一覧の更新

```bash
sudo apt update -y
```

- パッケージの更新

```bash
sudo apt upgrade -y
```

- gcc, clang, openblas 等の開発環境のインストール

```bash
sudo apt install -y build-essential clang nodejs libopenblas-dev
```

- rust 開発環境のインストール

```bash
curl https://sh.rustup.rs -sSf | sh -s -- -y
```

- rust 開発環境インストール後の PATH 設定の適用

```bash
source $HOME/.cargo/env
```

- rust の beta, nightly ツールチェインの追加

```bash
rustup toolchain install beta nightly
```

- 不要なパッケージの削除

```bash
sudo apt autoremove -y
```

- パッケージファイルのキャッシュ削除

```bash
sudo apt clean -y
```

- コマンド実行履歴の最大出力行数を一時的に0に設定

```bash
export HISTSIZE=0
```

- コマンド実行履歴ファイルのクリア

```bash
rm ~/.bash_history
```

- 仮想マシン環境からの離脱

```bash
exit
```

## Ubuntu 19.10 (eoan) イメージのスナップショット作成

- 仮想マシン環境の動作の停止。

```powershell
vagrant halt
```

- 仮想マシン環境のスナップショットを(スナップショットの名称 `devenv` として)作成。

```powershell
vagrant snapshot save default devenv
```

## 使い方

必要に応じて、Oracle VM VirtualBox マネージャー にて、仮想マシンの設定を変更する。（例: システム - マザーボード - メインメモリー の値を調整、など）

- 起動・接続

```powershell
chdir C:\Vagrant\Ubuntu_19.10_eoan
vagrant up
vagrant ssh
```

- 仮想マシンの動作の停止。

```powershell
vagrant halt
```

- 仮想マシン環境のリストア（スナップショット `devenv` を保存した時の状態に戻る）

```powershell
vagrant snapshot restore devenv
```

- 仮想マシン環境の破棄

```powershell
vagrant destroy
```