docker上のCentOS6.6にApacheMesosをインストールする

docker上のCentOS6.6にApache Mesosをインストールする。
基本的な流れは http://mesos.apache.org/ に従う。

```
# cat /etc/redhat-release
CentOS release 6.6 (Final)
```

# 事前準備
## 必要なパッケージのインストール

```
# yum groupinstall "Development Tools"
# yum install python-devel
# yum install java-1.7.0-openjdk-devel
# yum install zlib-devel
# yum install libcurl-devel
# yum install openssl-devel
# yum install cyrus-sasl-devel
# yum install cyrus-sasl-md5
# yum install apr-devel
# yum install subversion-devel
```

## Mavenをインストール
Mavenをダウンロードして展開する。

```
# wget http://mirror.nexcess.net/apache/maven/maven-3/3.0.5/binaries/apache-maven-3.0.5-bin.tar.gz
# tar -zxf apache-maven-3.0.5-bin.tar.gz -C /opt/
# ln -s /opt/apache-maven-3.0.5/bin/mvn /usr/bin/mvn
```

# Apache Mesosをインストール

## 事前準備
必要なら以下の設定を行う。
### JAVA_HOMEの設定

```
$ export JAVA_HOME=/usr/lib/jvm/java
```

### Mavenのproxy設定
社内サーバ上に構築したため、外に出るためMavenにproxy設定を入れる。

```
$ vi ~/.m2/settings.xml
<settings>
  <proxies>
    <proxy>
      <active>true</active>
      <protocol>http</protocol>
      <host>proxy_host</host>
      <port>proxy_port</port>
    </proxy>
  </proxies>
</settings>
$ 
```

## ApacheMesosインストール
dockerコンテナ上でrootでインストールしようとするとエラーが発生する場合がある。
そのため途中までは一般ユーザで作業して、最後にrootへユーザ切替した。

```
$ wget http://www.apache.org/dist/mesos/0.20.1/mesos-0.20.1.tar.gz
$ tar -zxf mesos-0.20.1.tar.gz
$ 
$ cd mesos-0.20.1
$ mkdir build
$ cd build/
$ ../configure
$ make
30分ほどかかる
$ make check
30分ほどかかる。rootだと、ここでFAILEDが出る場合がある
$ 
$ su 
# make install
# 
```

## docker imageコミット

```
docker commit hogehoge mesos_centos66:work
```

# ApacheMesos起動

コミットしたコンテナを起動。
今回、サーバの50500ポートをコンテナの5050ポートにマッピングさせた。

``` 
docker run -t -i -d -p 50500:5050  -h mesos01  --name mesos  mesos_centos66:work  "/bin/bash"
$ cd ~/mesos-0.20.1/build
$ mkdir ~/workdir
$ bin/mesos-master.sh --work_dir=~/workdir/
```

ブラウザから http://サーバのIP:50500/ へアクセスすると、ダッシュボードが確認できる。


# インストール時に発生したエラー
## JAVA_HOME設定漏れ
JAVA_HOMEの設定で解消。

```
$ make
（前略）
Building mesos-0.20.1.jar ...
/usr/bin/mvn: line 118: which: command not found
/usr/bin/mvn: line 141: which: command not found
Error: JAVA_HOME is not defined correctly.
  We cannot execute
make[1]: *** [java/target/mesos-0.20.1.jar] Error 1
make[1]: Leaving directory `/root/mesos-0.20.1/build/src'
make: *** [all-recursive] Error 1
$ 

```

## Mavenでエラー
proxy設定で解消した。

```
$ make 
（前略）
Building mesos-0.20.1.jar ...
[INFO] Scanning for projects...
Downloading: http://repo.maven.apache.org/maven2/org/apache/apache/11/apache-11.pom
[ERROR] The build could not read 1 project -> [Help 1]
[ERROR]
[ERROR]   The project org.apache.mesos:mesos:0.20.1 (/root/mesos-0.20.1/build/src/java/mesos.pom) has 1 error
[ERROR]     Non-resolvable parent POM: Could not transfer artifact org.apache:apache:pom:11 from/to central (http://repo.maven.apache.org/maven2): Connection to http://repo.maven.apache.org refused and 'parent.relativePath' points at wrong local POM @ line 18, column 11: Connection refused -> [Help 2]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/ProjectBuildingException
[ERROR] [Help 2] http://cwiki.apache.org/confluence/display/MAVEN/UnresolvableModelException
make[1]: *** [java/target/mesos-0.20.1.jar] Error 1
make[1]: Leaving directory `/root/mesos-0.20.1/build/src'
make: *** [all-recursive] Error 1
$ 
```

## make checkでFAILEDが発生
一般ユーザでやり直すことで解消。
https://issues.apache.org/jira/browse/MESOS-1570

```
# make 
# make check
（前略）
[----------] Global test environment tear-down
[==========] 146 tests from 29 test cases ran. (217 ms total)
[  PASSED  ] 145 tests.
[  FAILED  ] 1 test, listed below:
[  FAILED  ] OsSetnsTest.setns

 1 FAILED TEST
make[7]: *** [check-local] Error 1
make[7]: Leaving directory `/root/mesos-0.20.1/build/3rdparty/libprocess/3rdparty'
make[6]: *** [check-am] Error 2
make[6]: Leaving directory `/root/mesos-0.20.1/build/3rdparty/libprocess/3rdparty'
make[5]: *** [check-recursive] Error 1
make[5]: Leaving directory `/root/mesos-0.20.1/build/3rdparty/libprocess/3rdparty'
make[4]: *** [check] Error 2
make[4]: Leaving directory `/root/mesos-0.20.1/build/3rdparty/libprocess/3rdparty'
make[3]: *** [check-recursive] Error 1
make[3]: Leaving directory `/root/mesos-0.20.1/build/3rdparty/libprocess'
make[2]: *** [check-recursive] Error 1
make[2]: Leaving directory `/root/mesos-0.20.1/build/3rdparty'
make[1]: *** [check] Error 2
make[1]: Leaving directory `/root/mesos-0.20.1/build/3rdparty'
make: *** [check-recursive] Error 1
#
```