[メモ] Windowsで、Virtualbox+Vagrant(ヴェイグラント)環境

![Qiita-Vagrant01.png](https://qiita-image-store.s3.amazonaws.com/0/75594/b2bb9470-6400-28c9-4fec-c485a9b9714e.png)
[Vagrant Manager](http://vagrantmanager.com/windows/)
 Vagrant ヴェイグラント

## 概要
- Vagrantを使ったのをいくつかメモったが、Vagrant導入をメモってなかったな、、ってことで。

<!--
    - [[メモ] virtualbox+vagrantで、buildroot環境](http://qiita.com/mt08/items
/588928048ec128def6fd)
    - [\[Vagrant\](box作成) CentOS 4.8 (32bit) (Packer使用)](http://qiita.com/mt08/items/76280393000860139496)
    - [\[Vagrant\](box作成) Windows10 Pro 64bit(日本語版)仮想マシン作成 (Packer使用)](http://qiita.com/mt08/items/7e51387fa4e83e429b8f)
    - [CentOS 4.9(i386)で、Node.js v6.8.0をビルド](http://qiita.com/mt08/items/875a85e8dc579dee9d28)
-->

- [Vagrant Manager](http://vagrantmanager.com/windows/)、なんてのを発見。
    - Vagrantfileつくったあと、Manage Bookmarksにて、\[\+\]を押して、フォルダをVagrantfileのあるとこで、\[Select Folder\]する
    - `vagrant up`した後、Vアイコン右クリック、Refreshにて、VMを表示させた後、Add to Bookmarks/Remove from bookmarks。

- [Vagrant Cloud](https://vagrantcloud.com) にて、おこのみのVM(box)をダウンロードできる。
- gitを入れるのは、`ssh`のため。(cygwinでもいいかも)
- chocolateyは、コマンドラインから、いろいろツールをいれられる。(cmdひらいて、コピペでいける)


## 手順
### ツール類インストール
1. Chocolateyインストール(https://chocolatey.org/install)

    ```bat:cmd.exeを管理者(Administrator)でひらいて、こぴぺ。
@powershell -NoProfile -ExecutionPolicy Bypass -Command "iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))" && SET "PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin"
exit
```

2. (お好みで):便利そうなものをインストール

    ```bat:cmd.exeを管理者(Administrator)でひらいて、こぴぺ。
cinst -y　chocolateygui rdpwrapper
```

3. VirtualBox、Vagrant関連をインストール。

    ```bat:cmd.exeを管理者(Administrator)でひらいて、こぴぺ。
cinst -y vagrant vagrant-manager virtualbox git
# VirtualBox.ExtensionPack は、指定しなくてもよくなった?? 5.1.12??
```

4. 再起動
    - Win+Rで、Runウィンドウが開いたら、`shutdown -r -t 0` [Enter]

5. (お好みで):環境変数追加 `VAGRANT_HOME`と`VBOX_USER_HOME`
    1. Win+Rで、Runウィンドウで、`constrol system`[Enter]<br>Win10なら、Win+X, y
    2. 詳細設定 => 環境変数で、システムのほうに追加
    3. `VAGRANT_HOME` を `C:\Vagrant\.vagrant.d`
    4. `VBOX_USER_HOME` を `C:\Vagrant\.VirtualBox`
   
6. (お好みで):VMをおくフォルダの設定。 cmdプロンプトを開いて

    ```bat:cmd.exeにて
"%VBOX_MSI_INSTALL_PATH%\VBoxManage.exe" setproperty machinefolder C:\Vagrant\VMs
rem "%VBOX_MSI_INSTALL_PATH%\VBoxManage.exe" setproperty machinefolder "C:\Vagrant\VirtualBox VMs"
```
7. Vagrant Manager更新(1.0.0.6 - 2016年12月19日時点)
    - \[スタート\]メニューから、Vagrant Managerを起動して、タスクバーのとこにでたVマークを右クリ、`Check For Update`、zipをダウンロードして、解凍後、exe実行。(Vマーク右クリ、Exitが必要)

### Vagrantのキホソ
1. コマンドウインドウひらく(Shift+右クリ + W)
2. 作業フォルダ作成、移動(`mkdir C:\Vagrant\test01; cd C:\Vagrant\test01`)
3. `Vagrantfile`配置
    - 公式のもの/だれかつくったものを使用: [Vagrant Cloud](https://vagrantcloud.com)から見つけてくる <br>例) `vagrant init ubuntu/xenial64 -m`<br>#`-m`をつけると、必要なラインだけ書き出される.
    - 自前で書く
4. 起動<br>`vagrant up`
    - boxイメージがないと、ダウンロードから
    - VMができてないと、VM作成、イメージのコピーから
5. 接続
    - `vagrant ssh` # SSHにてログイン
    - `vagrant rdp` # Remote Desktopにて。VMがWindowsに。
6. 再起動・シャットダウン・VM削除
    - `vagrant reload` # 再起動
    - `vagrant halt` # シャットダウン
    - `vagrant destroy` # VM削除. -fをつけると、確認無しに削除

### 仮想マシン(Virtual Machine, VM)起動させてみる
- デスクトップのあいてるとこで、Shift+右クリック => `コマンドウィンドウをココで開く(W)`

#### Ubuntu 16.04 (ubuntu/xenial64)

```
mkdir C:\Vagrant\ubuntu-xenial64\
cd C:\Vagrant\ubuntu-xenial64\
vagrant init ubuntu/xenial64 -m
vagrant up # 起動. 待つ
vagrant ssh # sshでログイン
```
#### CentOS 7 :共有フォルダの設定と、GuestAddonをいれるといい。

1. いつもどおり...ではうまくいかず。

    ```
mkdir -p C:\Vagrant\centos7
cd C:\Vagrant\centos7
vagrant init centos/7 -m
vagrant up
```

2. エラーで起動しない??

    ```shell-session:rsyncないよ、で起動できない.
C:\Vagrant\centos7>vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'centos/7'...
==> default: Matching MAC address for NAT networking...
==> default: Checking if box 'centos/7' is up to date...
==> default: Setting the name of the VM: centos7_default_1482179258565_88605
"rsync" could not be found on your PATH. Make sure that rsync
is properly installed on your system and available on the PATH.

    C:\Vagrant\centos7>
```

3. Vagrantfileを編集。一行追加

    ```txt:Vagrantfile(rsyncを使わないで、Virtualboxの共有フォルダ使用)
Vagrant.configure("2") do |config|
      config.vm.box = "centos/7"
      config.vm.synced_folder ".", "/vagrant", type: "virtualbox" #追加.
end
```

4. 再挑戦

    ```
vagrant up
vagrant ssh
```

    ```txt:なんかいわれるけど、起動する。が、/vagrantがシェアできていない
==> default: Mounting shared folders...
        default: /vagrant => C:/Vagrant/centos7
Vagrant was unable to mount VirtualBox shared folders. This is usually
because the filesystem "vboxsf" is not available. This filesystem is
made available via the VirtualBox Guest Additions and kernel module.
Please verify that these guest additions are properly installed in the
guest. This is not a bug in Vagrant and is usually caused by a faulty
Vagrant box. For context, the command attempted was:

    mount -t vboxsf -o uid=1000,gid=1000 vagrant /vagrant

    The error output from the command was:

    mount: unknown filesystem type 'vboxsf'

    C:\Vagrant\centos7>vagrant ssh
[vagrant@localhost ~]$ exit
logout
Connection to 127.0.0.1 closed.

    C:\Vagrant\centos7>
```
=> VirtualBox Guest Additionsとカーネルモジュールが入ってない。
5. 再々挑戦

    ```
# GuestAdditionを自動で入れるプラグイン.
vagrant plugin install vagrant-vbguest
vagrant reload # 再起動
```


## その他
1. boxのアップデート<br>↓みたいのがでたら、新しいイメージがあるよ、ってことで、<br>`vagrant box update`とタイプするとよい。

    ```shell-session
==> default: A newer version of the box 'ubuntu/xenial64' is available! You currently
==> default: have version '20161109.1.0'. The latest is version '20161214.0.1'. Run
==> default: `vagrant box update` to update.
```

2. 古いbox削除は、`vagrant box BOX名 --box-version VERSION番号`で特定する。

    ```shell-session:実行例
    C:\Vagrant>vagrant box list
centos/7                                     (virtualbox, 1611.01)
ubuntu/trusty64                              (virtualbox, 20161214.0.0)
ubuntu/xenial64                              (virtualbox, 20161214.0.1)
ubuntu/xenial64                              (virtualbox, 20161221.0.0)

    C:\Vagrant>vagrant box remove ubuntu/xenial64 --box-version 201612
14.0.1
Removing box 'ubuntu/xenial64' (v20161214.0.1) with provider 'virtualbox'...

    C:\Vagrant>
```


2. なんかあやしい... よけいなとこにPATHを張らない...

    ```
PATH=C:\Windows\system32;C:\Windows;C:\ProgramData\chocolatey\bin;C:\Program Files\Git\cmd;C:\Program Files\Git\usr/bin;C:\HashiCorp\Vagrant\bin;C:\Program Files\Oracle\VirtualBox
```

3. Chocolateyでインストールしたものの更新
    - cmdを管理者で開いて
    - `cup all -y`
   
4. 外部からアクセスしたい.
    - `Vagrantfile`に、`config.vm.network "public_network", bridge: 'ネットワークアダプタ名'`ってのを追加する
    - ネットワークアダプタ名は、ホストPCによってまちまちなので、一度、VirtualboxでVMをつくってから、VMのSettings=>Networkで、適当なAdapterをAttached to: `Bridge`にしてみると、Name:に候補が出てくる。<br>一度保存して、`.vbox`ファイルを覗くとかいてある。