オライリーの実践Vagrantを読んで知らなかったこと・やってみたいこと・考えたこと

ブリッジ

  • 設定
config.vm.network "bridged"

また、vagrant upした際に
Available birdged network interfacesを聞かれます。
Wi-Fiを選択しておきます。
IPアドレスDHCPから提供されるため、
仮想サーバー内でifconfigコマンドを実行して、
ネットワークの構成を調べてみてください。

DHCPとはDynamic Host Configuration Protocolの略で
コンピュータがネットワーク接続する際に必要な情報を自動的に割り当てるプロトコルのことです。
仮想サーバーのIPアドレスは自身で設定しなくても、
このDHCPが自動的にIPアドレスを含め、ネットワークの設定をしてくれます。

CentOS7だとifconfig command not foundになる可能性があります。
その場合は $ yum install net-tools $ ifconfig -a とするといいと思います。
一番良いのはnet-toolsのクックブックを作成して、knife solo cookですね。

ifconfig -aの結果を確認すると、
enp0s8にinet 192.168.33.30とありますね。

enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.0.2.15  netmask 255.255.255.0  broadcast 10.0.2.255
        inet6 fe80::a00:27ff:feea:9bb5  prefixlen 64  scopeid 0x20<link>
        ether 08:00:27:ea:9b:b5  txqueuelen 1000  (Ethernet)
        RX packets 124135  bytes 137259099 (130.9 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 65179  bytes 5824211 (5.5 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
enp0s8: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.33.30  netmask 255.255.255.0  broadcast 192.168.33.255
        inet6 fe80::a00:27ff:fe12:f5f8  prefixlen 64  scopeid 0x20<link>
        ether 08:00:27:12:f5:f8  txqueuelen 1000  (Ethernet)
        RX packets 7832  bytes 854094 (834.0 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 5034  bytes 805034 (786.1 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 0  (Local Loopback)
        RX packets 1124  bytes 67440 (65.8 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1124  bytes 67440 (65.8 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ゲストマシーンのIPの指定範囲(プライベートIPとして予約されている範囲で指定する)

$ ifconfig -a
10.0.0.0 - 10.255.255.255
172.16.0.0~172.31.255.255
192.168.0.0 - 192.168.255.255

複数のネットワーク設定

なぜ、SSH接続に2222ポートを設定するとゲストOSに接続できるのか

以前、ホストOSからゲストOSへSSH接続する際に、
$ vagrant ssh
では接続できて、
$ ssh ホスト名
では接続できない問題が発生しました。

この原因はPortが2000になっていたからでした。
$ vagrant sshの際には以下の設定が使用されています。

しかし、 $ vagrant ssh-config --host bizevo >> ~/.ssh/configではなぜか、
Portが2000になっているので、$ ssh ホスト名 では接続できなかったということです。

vagrant up時のログをよく見ていれば、
2222になっていることはすぐ気付くことができると思います。

$ vagrant ssh-config
Host default
  HostName 127.0.0.1
  User vagrant
  Port 2222
  UserKnownHostsFile /dev/null
  StrictHostKeyChecking no
  PasswordAuthentication no
  IdentityFile C:/Users/k_higo.ACTIVEWORK/.vagrant.d/insecure_private_key
  IdentitiesOnly yes
  LogLevel FATAL
  ForwardAgent yes

なぜ、config.vm.network "private_network", ip: "192.168.33.30"か

Vagrantfileのデフォルトでは、以下のようになっています。

# Create a private network, which allows host-only access to the machine
# using a specific IP.
# config.vm.network "private_network", ip: "192.168.33.10"

しかし、こちらのコメントアウトを外して、vagrant upした際にDHCPがゲストOSに割り当てたIPアドレス
ifconfig -aで確認すると192.168.33.30になっています。
なお、コメントアウトの状態でも192.168.33.30が割り当てられています。

つまり、指定しなくても問題ありません。
しかし、明示的に指定する場合はvagrant upして、ifconfig -aでDHCPによって割り当てられた
プライベートIPアドレスをVagrantfileに記述するとより良いと思います。

vagrant package

動作しているVagrantの環境を再利用可能なボックスにパッケージ化してくれます。
他のユーザーが利用できるボックスにパッケージ化することが目的です。

vagrant box repackageは以前にvagrant box addで追加したボックスから、
もう一度ボックスファイルを取り出す場合です。
動作中のVagrant環境は影響を受けません。
また、動作中のVagrant環境は必要ありません。

$ vagrant package
==> default: Attempting graceful shutdown of VM...
==> default: Clearing any previously set forwarded ports...
==> default: Exporting VM...
==> default: Compressing package to: /Users/k_higo/nginx-provisioning/package.box

package.boxは以下のようにして使用できます。

$ vagrant box add nginx-provisioning package.box
==> box: Adding box 'nginx-provisioning' (v0) for provider: 
    box: Downloading: file:///Users/k_higo/nginx-provisioning/package.box
==> box: Successfully added box 'nginx-provisioning' (v0) for 'virtualbox'!
$ vagrant box list
nginx-provisioning (virtualbox, 0)
$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Box 'nginx-provisioning' could not be found. Attempting to find and install...
    default: Box Provider: virtualbox
    default: Box Version: >= 0
==> default: Adding box 'nginx-provisioning' (v0) for provider: virtualbox
    default: Downloading: https://f0fff3908f081cb6461b407be80daf97f07ac418.googledrive.com/host/0BwtuV7VyVTSkUG1PM3pCeDJ4dVE/centos7.box
==> default: Successfully added box 'nginx-provisioning' (v0) for 'virtualbox'!
==> default: Importing base box 'nginx-provisioning'...
==> default: Matching MAC address for NAT networking...
==> default: Setting the name of the VM: nginx-provisioning_default_1417830129052_11775
==> default: Fixed port collision for 22 => 2222. Now on port 2200.
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
    default: Adapter 2: hostonly
==> default: Forwarding ports...
    default: 22 => 2200 (adapter 1)
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
    default: SSH address: 127.0.0.1:2200
    default: SSH username: vagrant
    default: SSH auth method: private key
    default: Warning: Connection timeout. Retrying...
==> default: Machine booted and ready!
.........
Complete!
$ ssh nginx-provisioning
Last login: Fri Dec  5 23:38:42 2014 from 10.0.2.2
[vagrant@localhost ~]$ pwd
/home/vagrant

ssh ホスト名で接続する際のデフォルトのユーザーを指定したい

config.ssh.username = "user_name"