VirtualBoxで開発環境を構築する

[VirtualBox](https://www.virtualbox.org/)で開発環境を構築・利用するために覚えた事をまとめた。

# [準備]ソフトウェアとOSイメージを用意する

## VirtualBoxをインストールする

Oracleの[VirutalBox Downloadページ](https://www.virtualbox.org/wiki/Downloads)から、platform packageをダウンロードしインストールする。

macでhomebrewを利用している場合なら、homebrew-caskでもインストールできる。
`brew cask install virtualbox`

## OSのISOイメージのダウンロード

仮想マシンの起動には利用するOSのISOイメージが必要。
ISOイメージは削除しないこと。仮想環境を起動する度に要求されるため。

#### CentOS

https://www.centos.org/download/

ISOの種類
- DVD ISO ・・・ 一般的なISOイメージ
- Everything ISO ・・・ フルインストール
- Minimal ISO ・・・ 最小インストール

インストールするソフトウェアを自分で決める場合や、ストレージの利用量を抑えたい場合
-> Minimal ISO　を選択し、必要なソフトは自分でインストールする。

自分でソフトウェアをインストールするのが面倒なら
-> DVD ISO

Everythingを利用するケースは少ない。

その他のOSは利用したことがないのでISOイメージのリンクのみ
[Ubuntu](https://www.ubuntu.com/download)
[CoreOS](https://coreos.com/os/docs/latest/booting-with-iso.html)
[Windows（評価版）](https://www.microsoft.com/ja-jp/evalcenter/evaluate-windows-server-2016)

# 仮想マシンを作成し起動するまで

## 仮想マシンの作成

OS、メモリサイズの割り当て、ハードディスクの作成を選択する。
その他の設定は仮想マシン作成後にsettingから行える。

### Name and operating system

仮想マシンの名前、OS、OSのバージョンを選択する。
[Windowsを利用してて64bitが選択できない場合](#仮想マシンのOS選択で64bitが選べない場合)

### Memory size

仮想マシンに割り当てるメモリサイズを指定する。
ホストPCが搭載するメモリを元にオススメなどがわかる。
後で変更できる。

### Hard disk

仮想マシン用のハードディスクを指定する。
既存の仮想マシンと共有したりすることもできる。

### setting

仮想マシン作成後にsettingを選択すると詳細な設定が行える。
CPUのコア数の割り当てや共有フォルダーなど。
詳しくは参考リンクを参照のこと

## ネットワークの設定

`setting > Network`から仮想マシンに対するネットワーク設定が行える。

「仮想マシンをローカルPC用の開発環境」を想定し、ネットワークアダプタを設定する場合

- Adapter1：NAT　・・・ 仮想環境（内部ネットワーク）とローカルPC(外部ネットワーク)をつなぐ
- Adapter2：ホストオンリーアダプター・・・仮想環境へはローカルPC（ホストOS）とのみ通信できるようにする。

ホストオンリーアダプターで、指定するホストネットワークは、`Global Tools - Host Network Manager`で作成する。
IPアドレスの指定はここでは行えないので、仮想マシンを起動後に直接IPを指定する必要がありちょっと面倒。

## 仮想マシンを起動する

作成した仮想マシンを選択してStartすると起動する。
この時にOSイメージを指定する。
初めて仮想マシンを起動する際は、OSのインストール（セットアップ）から始まる。

終了するときは、`Close > ACPI Shutdown`を選択する。

起動する時に「Normal Start」を選択すると仮想マシンがWindowで開くのでそのWindowにカーソルを当てることで、仮想マシンを操作できる。
Windowからでなく、SSHで接続することもできる。（Headless Startで起動するとWindowが開かれない。）

### 仮想マシンのWindowから抜けたい場合

- ホストOSがWindows・・・右のctrl
- ホストOSがMac・・・ 左のcommand (自分のMacだと、左commandを押しながらshiftキーも押さないとダメだった。)

# Tips

## VirtualBoxのCLI

`VBoxManage`コマンドを利用すると、CUIでVirtualBoxを操作できる。

起動（Headless Start）

```
VBoxManage startvm [仮想マシン名] -- type headless
```

終了

```
VBoxManage controlvm [仮想マシン名] acpipowerbutton
```

## アプライアンスで仮想マシンのエクスポート・インポート

作成した仮想マシンを別のPCのVirtualBoxで利用したいときなどに利用できます。
データエクスポートは、対象仮想マシンを停止した状態で実行する

1. File > Export Appliance を選択する
2. 仮想マシンを選択する
3. 出力先を指定する
4. OVAファイルが作成される

作成したOVAファイルからデータインポートを行う

1. File > Import Appliance を選択する
2. ovaを選択してインポートする

## Windowsで仮想マシンを起動するときの注意事項

### 仮想マシンのOS選択で64bitが選べない場合

ローカルPCのBIOS設定で、`Intel(R) Virtualization Technology`をEnableに変更すると利用できる。

### 仮想マシンにSSH接続できない場合

Windowsでsshコマンドが利用できない場合はsshクライアントのインストールする。

- Windows版のOpenSSH
- SSHクライアントツール(TeraTerm、PuTTYなど)

## ストレージの拡張方法

仕事で利用していたVirtualBoxでストレージが足りなくなったので、以下を参考に拡張した。
ディスクを拡張した後、ゲストOS側で拡張した分を割り当てる作業が必要。
[VirtualBoxのゲストOSディスク拡張](https://qiita.com/takara@github/items/77182fe9d83142be5c5e)

Vagrantから作成した場合、ストレージの形式が.vmdkなので.vdiに変換する必要がありそう。
[Vagrant(Virtualbox)のディスク(ストレージ)容量を増やす方法](https://qiita.com/koitaro/items/c8bf8eb1e67e78890a5c)

# 参考

[ユーザーマニュアル](https://www.virtualbox.org/manual/UserManual.html)
[Vertualbox Mania](http://vboxmania.net/)
[今さらながらVirtualBoxネットワーク設定のベストプラクティスと解説](https://qiita.com/mokrai/items/ea35094c5dc4699d2a6b)