LOG

続・Vagrantで開発環境(上)

前回はhtmlを返すだけのサーバーだったので
MAMPXamppのような環境をvagrnatで作成してみる。
長いので2回にわけよう。そうしよう。
今回は前回と同様、HTMLが表示されるまで。

追記
予想以上に道のりが遠かったので、3回に分けよう・・・
MacOS X 10.9.3
Vagrant1.8.1
CentOS7.1
Apache2.4
MySQL5.7.10
PHP5.6.17

Vagrant プラグイン

まず便利なVagrantのプラグインを入れておく

vagrant-vbguestプラグイン

ゲストマシンにインストールされているVirtualBox Guest AdditionsとVirtualBoxのバージョンを合わせてくれるプラグイン。
インストールは

$ vagrant plugin install vagrant-vbguest

vagrant-hostsupdaterプラグイン

Vagrantマシンを起動した際に
ホストOSのhostsファイルにVagrantfileに設定したホスト名、IPを追加する。

$ vagrant plugin install vagrant-hostsupdater

「vagrant halt」した場合、hostsファイルに追記した内容も自動で削除する。

Vagrantプラグインで参考にした記事
Vagrant の Box の Guest Additions を最新化する方法 | WEB ARCH LABO

box

boxはATLASで提供されている「bento/centos-7.1」を利用する

$ vagrant box add bento/centos-7.1

追加されたboxをリネームする。
※ リネームは必須ではない

$ mv ~/.vagrant.d/boxes/bento-VAGRANTSLASH-centos-7.1 ~/.vagrant.d/boxes/centos7.1

作成するVM用のディレクトリを追加して、ディレクトリに入り「vagrant init」をしてVagrantfileを作成。
ここではデスクトップに追加。

$ mkdir centos7.1
$ cd centos7.1
% vagrant init

Vagrantfileを開いて以下のように変更する。

Vagrant.configure(2) do |config|
    config.vm.define "web" do |web|
        # boxの指定
        web.vm.box = "centos7.1"
        # sshの設定
        web.ssh.username   = 'vagrant'
        web.ssh.password   = 'vagrant'
        web.ssh.insert_key = 'true'
        # Guest Additionsの自動アップデート
        web.vbguest.auto_update = true
        # 共有フォルダの設定
        #web.vm.synced_folder "./www/public_html", "/var/www/public_html", owner:"vagrant", group:"vagrant", create:true
        # virtualbox向け設定
        web.vm.provider "virtualbox" do |v|
            v.name = "centos7.1"
            v.customize ["modifyvm", :id, "--cpus", "2"]
            v.customize ["modifyvm", :id, "--memory", "1024"]
        end
        # ネットワークの設定
        web.vm.network "private_network", ip: "192.168.33.10"
        web.vm.hostname           = "centos7.1"
        web.hostsupdater.aliases  = ["test1"]
    end
end

「http://centos7.1/」「http://test1/」でアクセス出来るようにしている。
ホストを追加したい場合は「web.hostsupdater.aliases」の配列に追加する。

VMにVagrantマシンをアップする。

$ vagrant up

アップ中、/etc/hostsへの書き換えが発生するためパスワードを求められる。
アップが完了すると以下のようなエラーが表示される。

Failed to mount folders in Linux guest. This is usually because
the "vboxsf" file system is not available. Please verify that
the guest additions are properly installed in the guest and
can work properly. The command attempted was:

mount -t vboxsf -o uid=`id -u vagrant`,gid=`getent group vagrant | cut -d: -f3` vagrant /vagrant
mount -t vboxsf -o uid=`id -u vagrant`,gid=`id -g vagrant` vagrant /vagrant

The error output from the last command was:

/sbin/mount.vboxsf: mounting failed with the error: No such device

カーネルがアップデートされたとか確かそんな理由・・・
カーネルだけアップデート除外にするか、ビルドしなおせば治るけど
この後の処理をやるとカーネル合わせてくれるので、とりあえずこのままVagrantマシンに接続する。

$ vagrant ssh
boxの設定で参考にした記事
Vagrantのsynced_folderのtypeを比べてみた | 東北ギーク

初期設定

yumのアップデート

$ yum -y update

完了したら「exit」コマンドでログアウトして「vagrant reload」でVagrantマシンを再起動する。

$ exit

# ホストOS
$ vagrant reload
$ vagrant ssh

タイムゾーンを日本に変更

デフォルトだと

$ date
# 2016年  1月 28日 木曜日 15:53:55 UTC

となるのでJSTに変更する。

$ su -
$ timedatectl set-timezone Asia/Tokyo
$ exit
$ date
# Fri Jan 29 00:55:42 JST 2016

ロケールの変更

$ su -
$ localectl set-locale LANG=ja_JP.utf8
$ localectl set-keymap jp106
$ exit
$ exit

# ホストOS
$ vagrant reload
$ vagrant ssh

$ date
# 2016年  1月 29日 金曜日 01:02:35 JST

EPELリポジトリ追加

$ yum -y install epel-release

yumの説明についてはここの記事が参考になった。
yumリポジトリ設定

EPELリポジトリは明示的に指定した場合のみ利用するようにしたいので

$ sudo vi /etc/yum.repos.d/epel.repo
-------------------------------------
[epel]
name=Extra Packages for Enterprise Linux 7 - $basearch
#baseurl=http://download.fedoraproject.org/pub/epel/7/$basearch
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-7&arch=$basearch
failovermethod=priority
enabled=1
gpgcheck=1
...
↓↓↓↓
[epel]
name=Extra Packages for Enterprise Linux 7 - $basearch
#baseurl=http://download.fedoraproject.org/pub/epel/7/$basearch
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-7&arch=$basearch
failovermethod=priority
enabled=0
gpgcheck=1
...
-------------------------------------

に変更する


zsh

必須ではないが、macでzshを使ってるので、Vagrantマシンもzshにしたい。

$ yum info zsh

読み込んだプラグイン:fastestmirror
Determining fastest mirrors
 * base: ftp.nara.wide.ad.jp
 * extras: ftp.nara.wide.ad.jp
 * updates: ftp.nara.wide.ad.jp
利用可能なパッケージ
名前                : zsh
アーキテクチャー    : x86_64
バージョン          : 5.0.2
リリース            : 14.el7
容量                : 2.4 M
リポジトリー        : base/7/x86_64
要約                : Powerful interactive shell
URL                 : http://zsh.sourceforge.net/
ライセンス          : MIT
説明                : The zsh shell is a command interpreter usable as an interactive login
                    : shell and as a shell script command processor.  Zsh resembles the ksh
                    : shell (the Korn shell), but includes many enhancements.  Zsh supports
                    : command line editing, built-in spelling correction, programmable
                    : command completion, shell functions (with autoloading), a history
                    : mechanism, and more.

ちょっと古いので新しいのを入れる。

$ sudo yum -y install ncurses-devel
$ mkdir workspace
$ cd workspace
$ wget http://sourceforge.net/projects/zsh/files/zsh/5.2/zsh-5.2.tar.gz
$ tar tar zxvf ./zsh-5.2.tar.gz
$ cd zsh-5.2
$ ./configure
$ make
$ sudo make install
$ sudo -e /usr/local/bin/zsh
$ chsh
------------------------
vagrant のシェルを変更します。
パスワード:
新しいシェル [/bin/bash]: /usr/local/bin/zsh
シェルを変更しました。
------------------------
# .zshrcファイルを作成
$ cd ~
$ touch .zshrc

# rootのログインシェルも変える
$ su -
$ chsh
$ touch .zshrc

yumのキャッシュ

キャッシュのクリアができるのでbox化するまえにしたほうが良いかもしれない。

# yumのキャッシュ確認
% du -sh /var/cache/yum/
# キャッシュクリア
% yum clean
zshで参考にした記事
最新版がリリースされていたので、漢のシェルZSHを更新しておいた

Git

% yum info git
Loading mirror speeds from cached hostfile
 * base: ftp.nara.wide.ad.jp
 * extras: ftp.nara.wide.ad.jp
 * updates: ftp.nara.wide.ad.jp
利用可能なパッケージ
名前                : git
アーキテクチャー    : x86_64
バージョン          : 1.8.3.1
リリース            : 6.el7
容量                : 4.4 M
リポジトリー        : updates/7/x86_64
要約                : Fast Version Control System
URL                 : http://git-scm.com/
ライセンス          : GPLv2
説明                : Git is a fast, scalable, distributed revision control system with an
                    : unusually rich command set that provides both high-level operations
                    : and full access to internals.
                    :
                    : The git rpm installs the core tools with minimal dependencies.  To
                    : install all git packages, including tools for integrating with other
                    : SCMs, install the git-all meta-package.

めちゃ古い。
ここを参考にソースからインストールする。

% yum -y install curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-ExtUtils-MakeMaker
% cd ~/workspace
# https://www.kernel.org/pub/software/scm/git/から最新版を選択
% wget https://www.kernel.org/pub/software/scm/git/git-2.7.0.tar.gz
tar zxvf git-2.7.0.tar.gz
% cd git-2.7.0
$ make prefix=/usr/local all
$ sudo make prefix=/usr/local install
Gitで参考にした記事
CentOSに最新版のGitをインストール・アップデートする方法

apache

apacheを入れる。
iptablesは今回は設定しない。

$ yum -y install httpd httpd-devel

起動と有効化を行う

% sudo systemctl start httpd.service
% sudo systemctl enable httpd.service

http://192.168.33.10
でapacheのページが表示される

Vagrantfileにホストを設定しているので、http://centos7.1/http://test1/でもアクセス出来る。

apacheのコマンド (apachectl)
状態の確認apachectl status
開始apachectl start
停止apachectl stop
再起動apachectl restart
設定の確認apachectl configtest

virtualhostの設定を行う。

Vagrantfileのコメントアウトにしていた箇所を外す

...
web.vm.synced_folder "./www/public_html", "/var/www/public_html", owner:"vagrant", group:"vagrant", create:true
...

確認するためにVagrantマシンから抜けて再起動

$ vagrant reload

これでVM用のディレクトリ内の「./www/html」とVagrantマシンの「/var/www/html」が共有される
ディレクトリを除くとwwwディレクトリが作成されているのが確認出来る。
ownerとgroupをvagrantにしているので「./www/html」のファイルは全てvagrantユーザーになる。

「html」ディレクトリ以下にホスト別のディレクトリを作って運用したい。
とりあえず、Vagrantfileに「test1」というホストを定義しているので、htmlディレクトリにtest1ディレクトリを作成しindex.htmlを置く。

再度Vagrantマシンに接続してapacheの設定を行う。

% su -
% touch /etc/httpd/conf.d/vhosts.conf
% vim /etc/httpd/conf.d/vhosts.conf

作成したvhosts.confは全てのvirtualhostの設定を行うファイルとする

# vhsots.conf
<VirtualHost *:80>
    ServerName test1
    DocumentRoot /var/www/public_html/test1/
    <Directory "/var/www/public_html/test1/">
        Require all granted
    </Directory>
</VirtualHost>

保存したら、apacheを再起動

$ sudo apachectl restart

ブラウザでhttp://test1/にアクセスするとtest1ディレクトリ内のindex.htmlの内容が表示される。
※ index.htmlに何も書いていなければ真っ白の画面

次回はPHPのインストールとMySQLのインストールを行う。