Vagrant で CentOS の環境構築
2018/10/17 更新
Vagrant は仮想マシンを CUI で簡単に構築できるツールです。
設定ファイルに基いて仮想マシンを自動的に作成してくれるため、開発環境の構築や破棄が容易に行えるという利点があります。
検証環境
- ホスト
- macOS 10.14 (Mojave)
- VirtualBox 5.2.18
- Vagrant 2.1.5
- ゲスト (今回のインストール対象)
- CentOS 7.5
VirtualBox や VMware などの仮想化ソフトウェアが別途必要です。
標準で VirtualBox の仮想マシンをサポートしているので、インストール済みの場合はすぐに使い始めることができます。
用語
Provider
: VirtualBox や VMWare などの仮想化ソフト
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 ~]$
設定の確認
[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