share facebook facebook twitter menu hatena pocket slack

2019.05.20 MON

Vagrantインストール手順(VirtualBox環境) … macOS編

木檜 和明

WRITTEN BY 木檜 和明

Vagrantを導入し、VirtualBox環境で仮想マシンを動作させる手順を示す。
ホストOSはmacOS 10.14.4(Mojave)とする。

公式サイト

インストール

Vagrantインストール

⦿ 以下からmacOS用のバイナリをダウンロード

⦿ 「vagrant_2.2.4_x86_64.dmg」をダブルクリック
⦿ 「Vagrant.pkg」をダブルクリックして [続ける] > [インストール] > パスワードを入力して[ソフトウェアをインストール]

% vagrant -v
Vagrant 2.2.4

⦿ Guest Additionsのバージョンが正しくない時に自動でアップデートしてくれるためのプラグイン「vagrant-vbguest」をインストール

% vagrant plugin install vagrant-vbguest
Installing the 'vagrant-vbguest' plugin. This can take a few minutes...
Fetching: micromachine-2.0.0.gem (100%)
Fetching: vagrant-vbguest-0.17.2.gem (100%)
Installed the plugin 'vagrant-vbguest (0.17.2)'!

VirtualBoxインストール

⦿ 以下からmacOS用のバイナリをダウンロード

⦿「VirtualBox-x.x.x-xxxxxx-OSX.dmg」をダブルクリック
⦿「VirtualBox.pkg」をダブルクリックして [続ける] > [続ける] > [インストール] > パスワードを入力して[ソフトウェアをインストール]
⦿ VirtualBoxを起動して「Extension Packが古いのでインストールするか」と表示されたら指示に従ってExtension Packをダウンロードしてインストール

BOX取得

次に仮想マシンのテンプレートとなるBOXを取得する。

以下のサイトでいろいろなBOXが配布されているが、ここではCentOS 7.2(64bit)を導入する。

BOXの取得はvagrant box addコマンドを使い、引数として任意の仮想マシン名と取得元ファイルを指定する。

% vagrant box add centos72_64 https://github.com/CommanderK5/packer-centos-template/releases/download/0.7.2/vagrant-centos-7.2.box

% vagrant box list
centos72_64 (virtualbox, 0)

ここまでで~/.vagrant.d/boxes配下に仮想マシン名のディレクトリ、さらにその下に仮想マシンを動作させるハイパーバイザ名のディレクトリができてテンプレートが保存される。仮想マシンを削除してもこのテンプレートがあるので何度でも再作成できる。

% cd ~/.vagrant.d/boxes
% tree .
.
└── centos72_64
    └── 0
        └── virtualbox
            ├── Vagrantfile
            ├── box.ovf
            ├── centos-vm-disk1.vmdk
            └── metadata.json

仮想マシン初期化、仮想マシン起動

BOXが取得できたら仮想マシンを初期化する。

まず仮想マシンの設定ファイルを作成する任意のディレクトリを作成し、以降はその場所で作業する。

% cd
% mkdir -p vagrant/centos72
% cd vagrant/centos72

仮想マシンの初期化は以下のようにする。

% vagrant init centos72_64
% ls
Vagrantfile

ここで作成されたVagrantfileに変更を加えることで仮想マシンの挙動を制御することができる。今はとりあえずそのままの状態で仮想マシンを起動する。

% vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'centos72_64'...
==> default: Matching MAC address for NAT networking...
==> default: Setting the name of the VM: centos72_default_1556375501669_16376
Vagrant is currently configured to create VirtualBox synced folders with
the `SharedFoldersEnableSymlinksCreate` option enabled. If the Vagrant
guest is not trusted, you may want to disable this option. For more
information on this option, please refer to the VirtualBox manual:

  https://www.virtualbox.org/manual/ch04.html#sharedfolders

This option can be disabled globally with an environment variable:

  VAGRANT_DISABLE_VBOXSYMLINKCREATE=1

or on a per folder basis within the Vagrantfile:

  config.vm.synced_folder '/host/path', '/guest/path', SharedFoldersEnableSymlinksCreate: false
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
==> default: Forwarding ports...
    default: 22 (guest) => 2222 (host) (adapter 1)
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
    default: SSH address: 127.0.0.1:2222
    default: SSH username: vagrant
    default: SSH auth method: private key
    default: Warning: Connection reset. Retrying...
    default:
    default: Vagrant insecure key detected. Vagrant will automatically replace
    default: this with a newly generated keypair for better security.
    default:
    default: Inserting generated public key within guest...
    default: Removing insecure key from the guest if it's present...
    default: Key inserted! Disconnecting and reconnecting using new SSH key...
==> default: Machine booted and ready!
==> default: Checking for guest additions in VM...
    default: The guest additions on this VM do not match the installed version of
    default: VirtualBox! In most cases this is fine, but in rare cases it can
    default: prevent things such as shared folders from working properly. If you see
    default: shared folder errors, please make sure the guest additions within the
    default: virtual machine match the version of VirtualBox you have installed on
    default: your host and reload your VM.
    default:
    default: Guest Additions Version: 4.3.30
    default: VirtualBox Version: 6.0
==> default: Mounting shared folders...
    default: /vagrant => /Users/xxx/vagrant/centos72

ここまで進むとVirtualBox上に仮想マシンが作成される。
~/VirtualBox VMs配下には以下のファイルが作成されている。

% cd ~/VirtualBox\ VMs
% tree .
.
└── centos72_default_1556291324827_95278
    ├── Logs
    │   └── VBox.log
    ├── centos-vm-disk1.vmdk
    ├── centos72_default_1556291324827_95278.vbox
    └── centos72_default_1556291324827_95278.vbox-prev

仮想マシン操作

仮想マシンが作成されたら以下のような操作が可能になる。必要に応じて使用する。

状態表示

% cd ~/vagrant/centos72
% vagrant status
Current machine states:

default                   running (virtualbox)

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

サスペンド

現在の状態を保存してスリープする。

% vagrant suspend
==> default: Saving VM state and suspending execution...

% vagrant status
Current machine states:

default                   saved (virtualbox)

To resume this VM, simply run `vagrant up`.

レジューム

スリープから復帰する。

% vagrant resume
==> default: Resuming suspended VM...
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
    default: SSH address: 127.0.0.1:2222
    default: SSH username: vagrant
    default: SSH auth method: private key
==> default: Machine booted and ready!
==> default: Machine already provisioned. Run `vagrant provision` or use the `--provision`
==> default: flag to force provisioning. Provisioners marked to run always will still run.

シャットダウン

% vagrant halt
==> default: Attempting graceful shutdown of VM...

% vagrant status
Current machine states:

default                   poweroff (virtualbox)

The VM is powered off. To restart the VM, simply run `vagrant up`

再起動

仮想マシン起動中にVagrantfileを書き換えた場合は以下のようにして仮想マシンを再起動することで変更内容が有効になる。

% vagrant reload

仮想マシン削除

仮想マシンは簡単に削除することができる。削除してもVagrantfileは消えないので再度vagrant upを実行すれば仮想マシンを再作成できる。

% vagrant destroy
    default: Are you sure you want to destroy the 'default' VM? [y/N] <--- y
==> default: Destroying VM and associated drives...

仮想マシン接続

vagrant sshコマンドにて仮想マシンに接続できる。ログインアカウントはvagrant専用ユーザとなる。

% vagrant up <--- 前項で仮想マシンを削除したのでまず作成

% vagrant ssh
[vagrant@localhost ~]$ id
uid=1000(vagrant) gid=1000(vagrant) groups=1000(vagrant)

仮想マシン内でのIPアドレスやルーティング等の設定は以下のようになっている。

⦿ IPアドレス
  10.0.2.15
⦿ デフォルトルータ
  10.0.2.2
⦿ DNSサーバ
  10.0.2.3

[vagrant@localhost ~]$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
    inet 10.0.2.15/24 brd 10.0.2.255 scope global dynamic enp0s3
       valid_lft 86355sec preferred_lft 86355sec
    inet6 fe80::xxx:xxxx:xxxx:xxxx/64 scope link
       valid_lft forever preferred_lft forever

[vagrant@localhost ~]$ ip r
default via 10.0.2.2 dev enp0s3  proto static  metric 100
10.0.2.0/24 dev enp0s3  proto kernel  scope link  src 10.0.2.15  metric 100

[vagrant@localhost ~]$ cat /etc/resolv.conf
# Generated by NetworkManager
search xxx.local
nameserver 10.0.2.3

共有ディレクトリアクセス

ホストOS側で作成した~/vagrant/centos72ディレクトリが仮想マシン上の/vagrantにマウントされているのでここを使って両者でファイルのやり取りができる。

[vagrant@localhost ~]$ LANG=C df -h /vagrant
Filesystem      Size  Used Avail Use% Mounted on
none            234G  115G  120G  49% /vagrant

[vagrant@localhost ~]$ mount | grep /vagrant
none on /vagrant type vboxsf (rw,nodev,relatime)

プロビジョニング

先の共有ディレクトリを使って仮想マシン上でシェルスクリプトを実行させることができる。

例えば仮想マシンにApacheをインストールしたい場合、まずVagrantfileと同じディレクトリに以下のようなシェルスクリプトを作成する。

これはホストOS上で作業しても仮想マシン上で作業してもよい。

% vi startup.sh
#!/bin/bash

yum update
yum -y install httpd

次に仮想マシンが起動した時にこのシェルスクリプトが実行されるようにVagrantfileを以下のように編集する。ファイルのパスはVagrantfileが配置されているディレクトリからの相対パスで指定する。

:
Vagrant.configure(2) do |config|

  config.vm.box = "centos72_64"

  config.vm.provision "shell", path: "startup.sh"
:

ここまで終わったら仮想マシンを起動する。

% vagrant up (既に仮想マシンが起動していたらvagrant reloadを実行)

起動したらApacheがインストールされていることを確認する。

% vagrant ssh
[vagrant@localhost ~]$ yum list httpd
:
httpd.x86_64    2.4.6-40.el7.centos            base

その他

ポートフォワーディング

ホストOSでhttp://127.0.0.1:8080/にアクセスした場合に仮想マシンの80番ポートに接続するにはVagrantfileを以下のように編集する。

:
Vagrant.configure(2) do |config|

  config.vm.box = "centos72_64"

  config.vm.network "forwarded_port", guest: 80, host: 8080
:

ホストオンリーネットワーク

デフォルトではNAT接続による仮想マシンから外部へのアクセスしかできないため、ホストOSから仮想マシンにアクセスしたい場合はVagrantfileを以下のように編集する。

:
Vagrant.configure(2) do |config|

  config.vm.box = "centos72_64"

  config.vm.network "private_network", ip: "192.168.33.10"
:

こうすることで仮想マシン側で新たな仮想NICにIPアドレスが割り当てられ、ホストOS側のルーティングも自動的に設定される。

% vagrant ssh

[vagrant@localhost ~]$ ip a
:
3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
    inet 192.168.33.10/24 brd 192.168.33.255 scope global enp0s8
       valid_lft forever preferred_lft forever
    inet6 fe80::xxx:xxxx:xxxx:xxxx/64 scope link
       valid_lft forever preferred_lft forever

[vagrant@localhost ~]$ exit

% ssh vagrant@192.168.33.10
vagrant@192.168.33.10's password: ***** <- アカウントと同じ
[vagrant@localhost ~]$ 

ブリッジネットワークの作成方法は以下を参照のこと。

仮想マシンのエクスポート・インポート

仮想マシンの状態をまとめてエクスポートして他のBOX(テンプレート)として再利用することができる。

方法は簡単で、以下のコマンドを実行してできあがったファイルを移動先でインポートして初期化・起動するだけである。

⦿ エクスポート

% vagrant package
==> default: Attempting graceful shutdown of VM...
==> default: Clearing any previously set forwarded ports...
==> default: Exporting VM...
==> default: Compressing package to: /Users/xxx/vagrant/centos72/package.box

% ls -l package.box
-rw-r--r-- 1 xxx xxx 653633798  4 27 23:56 package.box

⦿ インポート、仮想マシン初期化 & 起動

% vagrant box add centos72_2 package.box
% vagrant init centos72_2
% vagrant up

他にも様々な制御ができるがVagrantfileファイルそのものに詳しい説明が書かれているので割愛する。

参考サイト

元記事はこちら

Vagrantインストール手順(VirtualBox環境) … macOS編

木檜 和明

木檜 和明

遠くのクラウドと手元のIoTデバイス、両エッジをつないだものづくりがしたいと妄想中。Arduinoのコミュニテイやってます。

cloudpack

cloudpackは、Amazon EC2やAmazon S3をはじめとするAWSの各種プロダクトを利用する際の、導入・設計から運用保守を含んだフルマネージドのサービスを提供し、バックアップや24時間365日の監視/障害対応、技術的な問い合わせに対するサポートなどを行っております。
AWS上のインフラ構築およびAWSを活用したシステム開発など、案件のご相談はcloudpack.jpよりご連絡ください。