Zabbix 3.0をCentOS 6上で動かす(ビルド編)

※先日利用していたSRPMに問題があることを確認しました。
※修正したSRPMを改めて公開しなおしましたので、記述もそれに合わせて修正しました。

# はじめに
Zabbix 3.0がリリースされ、RHEL/CentOS 6用のパッケージも公開されましたが、Zabbixサーバーのモジュールは公開されていません。
先日のOSCでもお話しした通り、Zabbix 3.0の機能を利用するためには、RHEL/CentOS 6の標準のパッケージ構成では対応できないからのようです。

ご参考：

- [Zabbix 3.0をリリースしました by 寺島さん](http://kodai74.blogspot.jp/2016/02/zabbix-30.html)
- [Zabbix3.0でどう変わるか(OSC発表資料)](http://www.slideshare.net/atanaka7/zabbix30)


# インストールする際の方針
とはいえ、まだRHEL/CentOS 6を利用されている方も多いと思われるので、RHEL/CentOS 6対応を検討してみました。

Zabbix 3.0をCentOS 6上で動かす方法として、epelやremiを利用する方法が散見されますが、本番環境でRHEL 6を使用している場合、標準外のリポジトリやパッケージを利用してしまうと、それらのソフトウェアのサポートが受けられなくなってしまう可能性があります。

ですので、極力OS標準のパッケージを利用する手順として整理します。

方針：

- libcurlは、標準のパッケージだとバージョンが古いので、SMTP認証はなし
- PHPは、SCLを利用してPHP 5.4にして対応する。


SCLというのは、Software Collectionsと呼ばれるパッケージ群で、RHELやCentOS標準の拡張パッケージ群として提供されています。
ただし、CentOSで利用できるのは、RHEL用で利用できるもののうちのごく一部です。
CentOSでも利用できるバージョンということで、今回は、PHP 5.4(php54)を利用します。


# 独自パッケージのご紹介
そこで、機能的な制限はあるものの、極力標準のパッケージを利用してCentOS 6上でZabbix 3.0.1のZabbixサーバーのパッケージをビルドするためのSRPMを作成してみました。
SRPMは、Amazon Linuxでもビルドできるようにしてありますので、以前の私のAmazon Linux用のパッケージのビルドの記事を参考にすればAmazon Linuxでも使えます。

ご参考：
- [Amazon Linux用Zabbixパッケージの作成](http://qiita.com/atanaka7/items/9ed61b5db414cf3c3131)
- [Zabbix 2.0をAmazon Linux上で動かしてみよう](http://tnk77.blogspot.jp/2012/05/zabbix-20amazon-linux.html)


# 制限事項
先ほども書かせて頂きましたが、RHEL/CentOS 6標準のlibcurlのバージョンが古いのでSMTP認証は利用不可です。

PHPは、SCLのphp54を利用します。
標準のphpパッケージとの共存は難しいので、phpを利用している他のアプリケーションと同じサーバにインストールしない方が良いと思います。

また、RHELのSCLならより新しいPHPのバージョンが利用できるかもしれません。
その場合は、zabbix.spec内のパッケージの依存関係をより新しいバージョン用に変更してからビルドしてください。

# CentOS 6用パッケージのビルド

## ビルド環境用OSのインストール
インストール予定のアーキテクチャ(i586 or x86_64)と同じCentOS 6の環境を用意します。
OSをインストールしたら、yum updateなどを利用して、OSを最新の状態に更新しておきます。

OSの準備ができたら、開発ツールをインストールしておきます。

```
# yum groupinstall 'Development tools'
```

## ビルド環境の準備
ビルド用のアカウントを作成します。
今回は、builduserという名前のアカウントを作成して、パスワードも設定しておきます。

```
# useradd builduser
# passwd builduser
```

作成したアカウントでログインし、ビルド用のディレクトリ作成と環境設定を行います。

```
$ mkdir -p ~/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS}
$ vi ~/.rpmmacros
```

.rpmmacrosファイルに記述する内容は以下のような内容です。

```
%_topdir /home/builduser/rpmbuild
```

異なるアカウント名を利用される場合は、そのアカウント名のディレクトリにパスを変更してください。


次に私がカスタマイズしたZabbix 3.0.1のパッケージを取得します。

```
$ wget https://github.com/atanaka7/zabbix-jp-amzn1/raw/master/zabbix-3.0.1-3.amzn1.src.rpm
```

新しいバージョンが出たら更新するかもしれないのでご注意ください。


このパッケージは、RHEL 7用の3.0.1用のパッケージをベースに、
RHEL 6(CentOS 6)とAmazon Linux用のサーバも含めたパッケージを
構築するできるようにカスタマイズしてあります。

内容を確認して頂くためにも、ビルド用アカウントのビルド用ディレクトリに、このSRPMを展開します。

```
$ rpm -ivh zabbix-3.0.1-3.amzn1.src.rpm
```

別途、RHEL 7用の内容、特にzabbix.specの内容と比較してみて頂きたいのですが、CentOS 6用とAmazon Linux用の処理分岐を変更・追記してあります。

特に、phpの依存関係の部分ですが、RHEL 7以上やAmazon Linuxなら、パッケージphpのバージョン5.4以上で、それ以外は、php54-phpのバージョン5.4以上としてあります。
php54としてあるのは、CentOS 6用のSCLでは、php54というPHP 5.4のパッケージまでしか公開されていないからです。

RHELを使用されているのであれば、SCLにPHP 5.5やPHP 5.6など、もっと新しいバージョンのパッケージがあるようですので、より新しいPHPを利用されるのであれば、そのパッケージ名称に合わせてzabbix.spec内の依存関係の部分を変更してください。


ご参考：
- [4.7. Software Collections および scl-utils](https://access.redhat.com/documentation/ja-JP/Red_Hat_Enterprise_Linux/6/html/Developer_Guide/scl-utils.html)
- [Red Hat Software Collections 2.0 とは](https://oss.sios.com/redhat-ch/blog/softwarecollection20released)
- [Red Hat Software Collections Product Life Cycle](https://access.redhat.com/support/policy/updates/rhscl/)


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

iksemelとか必要になるので、RHEL 6の3.0用リポジトリを登録しておきます。

```
# yum install http://repo.zabbix.com/zabbix/3.0/rhel/6/x86_64/zabbix-release-3.0-1.el6.noarch.rpm
```

それ以外のビルドに必要な各種パッケージもインストールしておきます。

```
# yum install mysql-devel postgresql-devel net-snmp-devel openldap-devel gnutls-devel iksemel-devel sqlite-devel unixODBC-devel curl-devel OpenIPMI-devel libssh2-devel java-devel libxml2-devel
```


## ビルド実行。
ビルドする環境の準備が終了したら、パッケージをビルドします。

srpmに変更を行わないなら、ソースをインストールしないで以下のように実行するだけで直接パッケージをビルドすることができます。

```
$ rpmbuild --rebuild zabbix-3.0.1-3.amzn1.src.rpm
```

zabbix.specファイルなどを変更したのであれば、その変更したファイルを引数に指定して以下のように実行します。

```
$ cd ~/rpmbuild/SPEC/
$ rpmbuild -ba zabbix.spec
```

正常にビルドが終了したら、以下のようなパッケージがビルドできているはずです。

~/rpmbuild/RPMS/x86_64/

```
zabbix-agent-3.0.1-3.el6.x86_64.rpm
zabbix-debuginfo-3.0.1-3.el6.x86_64.rpm
zabbix-get-3.0.1-3.el6.x86_64.rpm
zabbix-java-gateway-3.0.1-3.el6.x86_64.rpm
zabbix-proxy-mysql-3.0.1-3.el6.x86_64.rpm
zabbix-proxy-pgsql-3.0.1-3.el6.x86_64.rpm
zabbix-proxy-sqlite3-3.0.1-3.el6.x86_64.rpm
zabbix-sender-3.0.1-3.el6.x86_64.rpm
zabbix-server-mysql-3.0.1-3.el6.x86_64.rpm
zabbix-server-pgsql-3.0.1-3.el6.x86_64.rpm
```

~/rpmbuild/RPMS/noarch/

```
zabbix-web-3.0.1-3.el6.noarch.rpm
zabbix-web-japanese-3.0.1-3.el6.noarch.rpm
zabbix-web-mysql-3.0.1-3.el6.noarch.rpm
zabbix-web-pgsql-3.0.1-3.el6.noarch.rpm
```


# 次回予告
次回はビルドしたパッケージをインストールするインストール編を公開しようと思います。