Vagrant + VirtualBox でCentOSにALMiniumインストール

##はじめに
職場で「Redmineとバージョン管理システムを連携させてプロジェクト管理する！」ということになった。
SubversionとMercurialを使いたかったのだが、ひとつのサーバにRedmineと併せて3つ入れるのは面倒だなと思い色々調べた。
すると[ALMinium](https://github.com/alminium/alminium)なる存在を知り、「一発で全部入るなんてお得じゃね？」と思い試してみたが
公式ページには「数行のコマンドでサクっと設定完了！」的なことが書いてあったのに、やってみたらかなり大変だったので
備考録として作業内容を残す。

ちなみに、Vagrantは「流行のツールだし使ってみるかな」程度だったが、結果的にとても有用だった。
何度も初期状態に戻して再設定が必要だったためだが、素でやるよりかなり楽にできたと思う。

##環境
マシン：HP EliteBook 2170p
ホストOS：Windows Professional 64bit
ゲストOS：CentOS6.5 64bit

##VirtualBoxインストール
[公式](https://www.virtualbox.org/wiki/Downloads)からダウンロードして実行するだけ。
今回使ったのは「VirtualBox-4.3.18-96516-Win.exe」

##Vagrantインストール
[公式](https://www.vagrantup.com/downloads.html)からダウンロードして実行、再起動するだけ。
今回使ったのは「vagrant_1.6.5.msi」

##VagrantでCentOSを起動
[CentOS 6.5 に ALMinium を入れてみる](http://blog.yug1224.com/2014/02/02/alminium/)を参考に(ていうかまんま)VagrantにCentOSを入れる。

```none
C:\>mkdir vagrant
C:\>cd vagrant
C:\vagrant>vagrant box add centos6.5 https://github.com/2creatives/vagrant-centos/releases/download/v6.5.1/centos65-x86_64-20131205.box
C:\vagrant>vagrant init centos6.5
C:\vagrant>vagrant up
```

これで、VirtualBox上(GUIは非表示)にCentOSが立ち上がり、SSH接続でALMiniumの設定を進めていく・・・はずだった。
が、下記のような表示が出ており、VirtualBoxが正常に起動できていない。

```none
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Resuming suspended VM...
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
The guest machine entered an invalid state while waiting for it
to boot. Valid states are 'restoring, running'. The machine is in the
'saved' state. Please verify everything is configured
properly and try again.

If the provider you're using has a GUI that comes with it,
it is often helpful to open that and watch the machine, since the
GUI often has more helpful error messages than Vagrant can retrieve.
For example, if you're using VirtualBox, run `vagrant up` while the
VirtualBox GUI is open.
```

先人の知恵を借りるべく調べたところ、[Vagrant で CentOS64bit に ssh 接続出来なかったのを解消](http://sakashushu.blog.so-net.ne.jp/2014-06-16)と同じっぽいので
実際に調べてみた。

C:\vagrant\vagrantfileを編集してVirtualBoxをGUI起動させてエラーを確認。
編集前

```none
# config.vm.provider "virtualbox" do |vb|
#   # Don't boot with headless mode
#   vb.gui = true
#
#   # Use VBoxManage to customize the VM. For example to change memory:
#   vb.customize ["modifyvm", :id, "--memory", "1024"]
# end
```

編集後

```none
config.vm.provider "virtualbox" do |vb|
#   # Don't boot with headless mode
  vb.gui = true
#
#   # Use VBoxManage to customize the VM. For example to change memory:
#   vb.customize ["modifyvm", :id, "--memory", "1024"]
end
```

ついでに、Appacheが使用するport設定も有効にしておく。
編集前

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

編集後

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

編集後、再度"vagrant up"すると、VirtualBoxが立ち上がって下記メッセージが表示された。
>ホストマシンの仮想化支援機能(VT-x/AMD-V)が使用できません。
>64ビット ゲストOSは64ビットCPUを検出できず、起動できません。

同じ症状であったことが確認できたので、BIOSからVT-xを有効化し"vagrant up"実施。
エラーなしでVirtualBoxが無事起動、SSHクライアント(TeraTerm等)で127.0.0.1:2222に接続し
user:vagrant pass:vagrantで無事ログインできた。

ちなみに、VT-xがデフォルトで有効になっているマシンについては、何の問題もなく接続できる。
私の会社のマシンはなにもしないでもつながった。

##VirtualBoxのメモリ設定
ALMiniumのインストール時、最小メモリ1GBないと止められてしまうので、ここで使用メモリの割り当てを1024KBにしておく。
一旦VirtualBoxを

```none
C:\vagrant\vagrant halt
```

した上で、手動でVirtualBoxを開き、"vagrant_default_****"の設定画面からメインメモリを1024KB以上に設定。

```none
C:\vagrant\vagrant up
```

で再度起動する。

##CentOSに諸々インストール
何をしているかいまいち理解していないが、[VMware Player + CentOS 6.5 + ALMinium](http://takecs.net/wp/archives/87)に従って諸々インストール。

```none
# yum 更新
[vagrant@vagrant-centos65 ~]sudo yum update

# 諸々インストール
[vagrant@vagrant-centos65 ~]sudo yum groupinstall "Development Tools"
[vagrant@vagrant-centos65 ~]sudo yum install openssl-devel readline-devel zlib-devel curl-devel libyaml-devel
[vagrant@vagrant-centos65 ~]sudo yum install mysql-server mysql-devel
[vagrant@vagrant-centos65 ~]sudo yum install httpd httpd-devel
[vagrant@vagrant-centos65 ~]sudo yum install ImageMagick ImageMagick-devel ipa-pgothic-fonts
[vagrant@vagrant-centos65 ~]sudo yum install wget git

# Ruby のインストール
[vagrant@vagrant-centos65 ~]wget http://cache.ruby-lang.org/pub/ruby/2.1/ruby-2.1.2.tar.gz
[vagrant@vagrant-centos65 ~]tar zxvf ruby-2.1.2.tar.gz
[vagrant@vagrant-centos65 ~]cd ruby-2.1.2
[vagrant@vagrant-centos65 ruby-2.1.2]./configure --disable-install-doc
[vagrant@vagrant-centos65 ruby-2.1.2]make
[vagrant@vagrant-centos65 ruby-2.1.2]sudo make install

# RubyGems のインストール
[vagrant@vagrant-centos65 ruby-2.1.2]cd ~
[vagrant@vagrant-centos65 ~]wget http://production.cf.rubygems.org/rubygems/rubygems-2.2.2.tgz
[vagrant@vagrant-centos65 ~]tar zxvf rubygems-2.2.2.tgz
[vagrant@vagrant-centos65 ~]cd rubygems-2.2.2
[vagrant@vagrant-centos65 rubygems-2.2.2]sudo ruby ./setup.rb
```

しかし、ここで下記エラー発生

```none
sudo: bundle: command not found
```

rubyのパスが通っていないような感じ。
調べてみたら、[sudo実行時に$PATHが通っていない場合の設定](http://blog.bungu-do.jp/archives/3525)と同じ感じだったので
一番手軽そうな下記の対策を実施。

```none
[vagrant@vagrant-centos65 rubygems-2.2.2]$sudo visudo
```

からの

```none
Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin
```

を

```none
# Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin
```

と編集して再度下記コマンド実施。

```none
[vagrant@vagrant-centos65 rubygems-2.2.2]sudo ruby ./setup.rb
```

rubyコマンドが通ってインストールが完了した。

この後ALMiniumをインストールすればOKとの記事もあったが、何度やってもエラーが発生して正常終了せず。
調べた結果まだ足りないものがありそうだったので[ALMiniumをCentOSにインストールする方法](http://little-braver.com/346/)を参考に
"bundler"と"Passenger"なるものをインストールする。

```none
[vagrant@vagrant-centos65 rubygems-2.2.2]cd ~
[vagrant@vagrant-centos65 ~]sudo gem install bundler --no-rdoc --no-ri
[vagrant@vagrant-centos65 ~]sudo gem install passenger --no-rdoc --no-ri
[vagrant@vagrant-centos65 ~]sudo passenger-install-apache2-module
```

これでALMiniumをインストールする直前までの準備が完了。

##VagrantBoxバックアップ作成
この段階でVagrantのBoxを再作成し、ALMiniumインストール直前からやり直せるようにした。
順調にきてもここまで数時間かかるはずなので、念には念を。

```none
[vagrant@vagrant-centos65 ~]exit
```

した上で

```none
C:\vagrant>vagrant halt
```

でVirtualBoxを停止。

```none
C:\vagrant>vagrant package
```

すると数分で"package.box"なるファイルができる。

```none
C:\vagrant>vagrant box add centos_customized package.box
```

でVagrantBoxにいれて、C:\vagrant\vagrantfileの

```none
config.vm.box = "centos6.5"
```

を

```none
config.vm.box = "centos_customized"
```

とすると、"vagrant up"した際、諸々インストールしたCentOSが起動する。

##ALMiniumインストール
ようやく本丸のALMiniumに着手。
[VMware Player + CentOS 6.5 + ALMinium](http://takecs.net/wp/archives/87)によると、gitリポジトリを落とした後
"dev"をチェックアウトしないと成功しないとのこと。

```none
[vagrant@vagrant-centos65 ~]git clone https://github.com/alminium/alminium
[vagrant@vagrant-centos65 ~]cd alminium
[vagrant@vagrant-centos65 alminium]git checkout dev
[vagrant@vagrant-centos65 alminium]sudo bash ./smelt
```

./smeltした後、ALMiniumの設定を聞かれるので、ホスト名以外は状況に応じて入力する。
今回の場合、ホスト名は127.0.0.1で固定。
下記は今回私が入力した内容。

```none
RHEL 6.x / CentOS 6.x / OEL 6.xが検出されました。
*******************************************************
ホスト名の設定
*******************************************************
ホスト名(IPアドレスもしくはDNS名)を入力してください。ホスト名はApacheのバーチャルホストで利用されます。
例えば、192.168をホスト名で入力すると、http://192.168.1.4/でアクセスすることになります。
(上記の設定ではhttp://localhost/では接続できないのでご注意ください)
ホスト名: 127.0.0.1


*******************************************************
SSLのサポート
*******************************************************
SSLのサポートを有効にすると、httpsのみの接続を許可します。
httpでのアクセスは、全てhttpsのポートへ転送されるようになります。
SSLの証明書は認証機関により署名されたものではありません。通信の暗号化のみ
に利用します。
gitの利用では、

$ git config --global http.sslVerify false

などのコマンドで、SSLの証明書を無効にする必要があります。

SSL(https)サポートを有効にしますか?(y/N) n


*******************************************************
メール設定
*******************************************************
Redmineのシステムメールを送信するための設定を行います。

＜利用する上での注意＞
・利用したいメールシステムと通信可能なことをご確認ください。ファイアーウォールなどで遮断されている場合は管理者にお問い合わせください。
・Sendmailコマンドを利用する場合、別途Sendmailの設定を行う必要があります。
・G-Mail/Hotmailを利用する場合、ユーザー名とパスワードがあれば利用可能です。

次の中から、使いたいメールシステムを選択してください。
ここでメール設定を行わない場合は「N」を選択してください。

0. 独自のメールサーバーを設定する
1. Linux内のSendmailコマンドを使用する
2. G-Mail/Google Apps
3. Windows Live Hotmail

N. メール設定をしない

番号選択: n


メール設定を行いません。


継続的インテグレーションツールのJenkinsのインストール・設定を行うことができます。デフォルトはインストールしません。よく分からなければNを選択してください。Jenkinsをインストールしますか?[y/N]n
*** run pre-install script ***
*******************************************************
セキュリティの設定
*******************************************************
アプリケーションを動作させるために、ファイアフォールの設定とSELinuxの無効化を行います。
nと答えると手動でセキュリティの設定が必要となります。分らない場合はYと答えてください。

アプリケーションを動作させるためにセキュリティの設定を行いますか?[Y/n]y
```

これですべての作業は終了(のはず)。

ホストOSのブラウザから
http://127.0.0.1:8080/
にアクセスするとALMiniumのhome画面が表示される(はず)。

これでだめだった場合、相当な覚悟を持ってGoogle先生に教えを請う必要がある。

##所感
上にも書いたが、公式ページが謳う「数行のコマンドでサクっと設定完了！」的コメントは
私のようなLinuxもRubyも触ったことがないnoob野郎にはあてはまらないと実感した。

約1週間、会社でも家でも色々と調べ、先人の方々による情報をもとに設定作業をしたが
1つのページの情報だけではどれもうまくいかず、併せ技でようやく成功！的な感じだったので
色々なパッケージがバージョンアップされたりしていて、必要なコマンドも変わってきているんだろうなと。
なので、この記事自体もしばらくしたら陳腐化してしまうんだろうなと。
さみしいなと。

また、そんなnoob野郎が手探りで設定した内容なので、ALMiniumは起動したけど
どこかに不具合があるんじゃないかと不安が残る。
そのあたりのことを語り合える友人がほしいです。

今後、この手順を元にChefを使って、本当の意味での自動化がしたい。
その際の記事タイトルは決めている。
"Vagrant + VirtualBox + Chef でALMiniumを自動構築"

多分やらないけど。

あと、JenkinsもいれてCIとはなんぞ？というのも検証してみたい。
でも半年後とかになる気がする。

  
---------------------
  
## 追記

2015/4/9時点で、この記事の手順通りに設定を進めても正常にインストールできなくなった
原因は、RedmineのVer.3.0がリリースされ、Alminiumにパッケージされているコードレビュープラグインも3.0対応してしまったため、RedmineのVer.が2.5.2であるAlminiumではVer.があわずにエラーがでる、といったものと思われる  

他にも原因はありそうだが、私のスキルでは全然まったくどうにもならないと諦めてしまった
[Alminiumのコミュニティ](https://github.com/alminium/alminium)は活動が停滞しているようで、今後Redmineのバージョンアップにも追従しないような気がする  

とはいえ、自分の職場に先陣を切ってAlminiumを導入してしまった以上、どうにかしなければいけないので、もう、自分で、最初から、Redmineと、必要なPluginと、その他もろもろと、地道にやります  

なにかいい方法があったら教えてください