Vagrant-vmware_fusionのboxを作るメモ

----

作業しながら書いています。動作確認中。

----


独自のBoxを作ってみる。

VMWareFusionが想定以上にうまくいかないので、先にVirtualBoxでやってみる。

# ベースVMの生成
## VirtualBox側の設定
* インストールメディア: CentOS-6.4-x86_64-netinstall.iso
* ディスク: root.vmdk 8GB,分割なし
* ネットワークアダプタ: 自動検出
* プリンタ: 削除

## CentOSのインストール設定
* タイムゾーン: JST-9
* キーボードレイアウト: jp106
* minimumパッケージ
* kerne-devel, gcc, make, perl: GuestAddinのために。
* openssh-client, system-config-network-tui
* ユーザー名 vagrant でユーザー生成、鍵もgithubのを配置。

# トラブル
Box化して vagrant init & vagrant up すると eth0 が無効のまま起動。
=> sshが繋がらずハングしたようになる。

VirtualBoxから直接起動するとeth0のデバイスがない。

eth1として再構成してからpoweroffした後に vagrant up すると繋がった。

Box化して=>vagrant upした後にネットワークアダプタがうまく起動しない模様。謎。

----

# ベースVMの生成
## VMWareFusion側の設定
* VM名: centos_6.4_x86_64_with_chef.vmwarevm
* インストールメディア: CentOS-6.4-x86_64-netinstall.iso
* ディスク: root.vmdk 8GB,分割なし
* ネットワークアダプタ: 自動検出
* プリンタ: 削除

## CentOSのインストール設定
* タイムゾーン: JST-9
* キーボードレイアウト: jp106
* minimumパッケージ

## 起動直後の設定
以下、VMが ```192.168.228.133``` で起動していると仮定。

### ユーザーの追加
* EC2に合わせて```ec2-user```で作成。
* ```.ssh/authorized_keys```へ公開鍵をコピー

### /etc/sudoersの変更
* ssh経由のsudoを許可
* ```ec2-user```にpasswordなしのsudoを許可

### sshdの設定
* rootログインを禁止
* passwordログインを禁止

### VMWate Toolsのインストール
VMWareFusionのメニューから「VMWate Toolsのインストール」を選んでから:

```bash:
[guest]$ mount /dev/cdrom /mnt
[guest]$ yum install -y perl
[guest]$ tar xf /mnt/VMWareTools-9.2.2-893683.tar.gz
[guest]$ cd vmware-tools-distrib
[guest]$ yes ""| ./vmware-install.pl
```

### chef-clientのインストール

```bash:
[guest]$ curl -L https://www.opscode.com/chef/install.sh | bash
```

vagrantで入れるなら

```rb:
Vagrant.configure("2") do |config|
  :
  config.vm.provision :shell do |shell|
    shell.inline =<<-__SHELL__
curl -L https://www.opscode.com/chef/install.sh | bash
    __SHELL__
  end
end
```
しかしprovision毎にDownloadを含めて実行されて、ウザい。


# Boxの生成
[このへん](http://docs.vagrantup.com/v2/vmware/boxes.html)を参考に

## VMDiskの整理

```bash:
[host]$ export PATH=/Applications/VMware\ Fusion.app/Contents/Library:$PATH
[host]$ cd centos_6.4_x86_64_with_chef.vmwarevm
[host]$ vmware-vdiskmanager -d root.vmdk
[host]$ vmware-vdiskmanager -k root.vmdk
```

## metadata.jsonを記述
```json:centos_6.4_x86_64_with_chef.vmwarevm/metadata.json
{
  "provider": "vmware_fusion"
}
```

## Boxファイルの作成
```bash:
[host]$ cd centos_6.4_x86_64_with_chef.vmwarevm
[host]$ tar cvzf ~/centos_6.4_x86_64_with_chef.box ./*
```

# Boxの登録
```bash:
[host]$ vagrant box add my_centos centos_6.4_x86_64_with_chef.box
[host]$ $ vagrant box list
my_centos (vmware_fusion)
```

# 起動
いまここ。

```bash:
$ vagrant up --provider=vmware_fusion
Bringing machine 'default' up with 'vmware_fusion' provider...
[default] Verifying vmnet devices are healthy...
The VMware network device 'vmnet1' can't be started because
its routes collide with another device: 'en0'. Please
either fix the settings of the VMware network device or stop the
colliding device. Your machine can't be started while VMware
networking is broken.
```

```bash:
$ open .vagrant/machines/default/vmware_fusion/vm.vmwarevm
```
とすると起動するしその後も

```bash:
$ vagrant status
Current machine states:

default                  running (vmware_fusion)

The VM is running. To stop this VM, you can run `vagrant halt` to
shut it down, or you can run `vagrant suspend` to simply suspend
the virtual machine. In either case, to restart it again, run
`vagrant up`.
```
と出る。