Vagrant で CentOS の環境構築

2018/10/17 更新

Vagrant仮想マシンCUI で簡単に構築できるツールです。

設定ファイルに基いて仮想マシンを自動的に作成してくれるため、開発環境の構築や破棄が容易に行えるという利点があります。

検証環境

VirtualBoxVMware などの仮想化ソフトウェアが別途必要です。
標準で VirtualBox仮想マシンをサポートしているので、インストール済みの場合はすぐに使い始めることができます。

用語

Provider : VirtualBoxVMWare などの仮想化ソフト
Box : テンプレートとなる OS のイメージファイル
Vagrantfile : 仮想マシンの構成情報が書かれた設定ファイル

インストール

ブラウザから以下の公式サイトにアクセスし、使用している OS に合わせてパッケージをダウンロードします。

パッケージを展開してインストールが完了すると vagrant コマンドが使えるようになります。

$ vagrant --version
Vagrant 2.1.5

Guest Additions のインストール

ファイルシステムの共有など、ゲスト OS を使いやすくするためのプラグインをインストールしておきます。

$ vagrant plugin install vagrant-vbguest

Box の追加

以下のサイトから CentOS の Box を探します。

Box の追加は vagrant box add <ボックスのURL> で行います。

今回は CentOS がオフィシャルで提供している7系の Box イメージを追加します。 途中で仮想化環境のプロバイダを聞かれたら VirtualBox を利用するため 3 を選んで入力します。

$ vagrant box add centos/7
==> box: Loading metadata for box 'centos/7'
    box: URL: https://vagrantcloud.com/centos/7
This box can work with multiple providers! The providers that it
can work with are listed below. Please review the list and choose
the provider you will be working with.

1) hyperv
2) libvirt
3) virtualbox
4) vmware_desktop

Enter your choice: 3
==> box: Adding box 'centos/7' (v1809.01) for provider: virtualbox
    box: Downloading: https://vagrantcloud.com/centos/boxes/7/versions/1809.01/providers/virtualbox.box
    box: Download redirected to host: cloud.centos.org
==> box: Successfully added box 'centos/7' (v1809.01) for 'virtualbox'!

追加した Box イメージを確認します。

$ vagrant box list
centos/7 (virtualbox, 1809.01)

ローカル環境に centos/7 という Box が追加されました。

仮想マシンの立ち上げ

初期化

仮想マシン用のディレクトリを作成し、移動します。

$ mkdir ./centos7 && cd $_

先ほど追加した Box を init コマンドで適用します。

$ vagrant init centos/7

$ ls
Vagrantfile

Vagrantfile が作成されました。

1つの仮想マシンに対して1つの Vagrantfile が存在します。
別のマシンを作成したい場合には別途ディレクトリの作成が必要です。

Vagrantfile 編集

そのままでも起動できますが、起動前にいくつか設定を書き換えておきます。
今回は以下の2つの設定を追加します。

  • プライベートネットワークの利用と IP アドレス固定
  • ホスト側の ../data を ゲスト側の /vagrant_data でマウント
$ vi ./Vagrantfile

Vagrant.configure("2") do |config|
  config.vm.box = "centos/7"
  config.vm.network "private_network", ip: "192.168.33.10"
  config.vm.synced_folder "../data", "/vagrant_data"

  ENV['LC_ALL']="ja_US.UTF-8"
end

設定に記載している ../data はホスト側、vagrant_data はゲスト側で共有されるディレクトリとなります。ホスト側のマウントポイントがない場合、作成しておきましょう。
末尾の環境変数はデフォルトで設定するロケールです。

$ mkdir ./../data

Vagrantfile の設定を書き終えたら仮想マシンを作成・起動します。初回は少し時間がかかりますが、数分で仮想マシンが作成されます。

$ vagrant up

問題なく起動できていれば running のステータスになります。

$ 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`.

仮想マシンへの接続

起動が完了したら SSH コマンドで接続します。プロンプトが出ていればゲスト OS にログインできています。
なお、Windows の場合は Tera Term などから接続が可能です。

$ vagrant ssh

[vagrant@localhost ~]$

設定の確認

仮想マシンの OS とアーキテクチャを確認します。

[vagrant@localhost ~]$ cat /etc/redhat-release
CentOS Linux release 7.5.1804 (Core)

[vagrant@localhost ~]$ arch
x86_64

先ほど設定ファイルに記述した2点についても確認します。

[vagrant@localhost ~]$ ip addr
[vagrant@localhost ~]$ less /etc/mtab

yum コマンドの実行ができない場合

root ユーザであれば問題なく実行ができたのですが、vagrant ユーザで yum コマンドを実行すると下記のようなエラーが出てしまいました。

Failed to set locale, defaulting to C
Loaded plugins: fastestmirror
You need to be root to perform this command.

調べたところ、この問題はホスト OS が SSH で接続するときに不要なロケールのパラメータを送っているのが原因のようでした。
mac 側で以下の SendEnv の設定をコメントアウトしておきます。

$ sudo vi /etc/ssh/ssh_config
#Host *
#       SendEnv LANG LC_*

仮想マシンの削除

ゲストの仮想マシンを削除する場合、ホスト OS から destroy コマンドで削除できます。

$ vagrant destroy

参考サイト