itamae | itamaeを使用してzabbix3.2.4をApache2.4.6/PHP7.1.4/MariaDB10.1.22でセットアップする

# 概要
zabbix3.2.4を CentOS7/Apache2.4.6/PHP7.1.4/MariaDB10.1.22でitamaeからセットアップする

1. CentOS7サーバーをminimalでインストールする
2. 管理者ユーザーアカウントを追加し、鍵認証、パスワードなしsudoに設定
3. selinuxをDisabled、yum upgradeで最新に更新したのちに、OSを再起動する
4. yumリポジトリ、epel/remi/zabbix/mariadbを追加
5. 共通ツール追加など、個人的な標準CentOSセットアップを行う
6. ldap clientやOS周りをldap認証設定セットアップ
7. apache(httpd)/php7.1.4をインストール
8. mariadb10.1.22をインストール
9. mariadbでzabbix用のユーザー・DBを追加
10. zabbix3.2.4をインストール
11. mariadbに initial schema と data を追加
12. zabbix serverにzabbix_server.conf、Apache用zabbix.confの変更
13. zabbix server/Apache の起動(再起動)

# 内容

- 概要の1〜3までは、直接コンソールから手動コマンドで行う。 
- 4〜13は、itamae実行サーバーから、目的のサーバーへ向けて実行する。

    逐一itamaeコマンドでセットアップすると、Infrastructure as codeが台無しになるので、実行シェルスクリプトにまとめて構築・管理する

    ```shell-session
    # 一応、一度 dry-runモードで動作確認をしておく
    ./itamae_centos7-zabbix.sh --dry-run

    # 本実行
    ./itamae_centos7-zabbix.sh
    ```

    使用するitamaeのレシピとレシピ実行スクリプトは、[github](https://github.com/hirotaka-tajiri/itamae_cookbooks)に上げてある。
    *実行スクリプトは、RVMのgemset対応になっているのでRVMを使用しないならば、その1行を消す必要あり*

# ポイント

### 2. 管理者ユーザーアカウントを追加し、鍵認証、パスワードなしsudoに設定について

普通に、groupadd と useradd で追加する。
鍵認証では、itamae実行サーバーで鍵を作成し、目的のサーバーに ~/.ssh/authorized_keys という名前でコピーしておく、この時 ~のパーミッションは700、~/.ssh のパーミッションは700、~/.ssh/authorized_keys のパーミッションは600にする必要がある

### 3. selinuxをDisabled、yum upgradeで最新に更新したのちに、OSを再起動する

```ruby:/etc/selinux/config
SELINUX=disabled
```

```shell-session
# yumのアップグレード
yum -y upgrade

# OSの再起動
sync;sync; init 6
```

### 7. apache(httpd)/php7.1.4をインストール

yumで使用するリポジトリをoptions "--enablerepo=remi-php71"でremi-php71に使用するようにする

```ruby:php71.rb
[
    "libpng",
    "libXpm",
    "libX11",
    "libxslt",
    "dejavu-fonts-common",
    "dejavu-sans-fonts",
    "t1lib",
    "fontpackages-filesystem",
    "libXau",
    "php",
    "php-devel",
    "php-cli",
    "php-gd",
    "php-bcmath",
    "php-ldap",
    "php-xml",
    "php-common",
    "php-json",
    "php-mysqlnd",
    "php-opcache",
    "php-mbstring",
    "php-pecl-mysql"
].each{| pkg |
    package pkg do
        action :install
        options "--enablerepo=remi-php71"
    end
}
```

### 9. mariadbでzabbix用のユーザー・DBを追加

実行するSQLをファイルにまとめ、一度/tmpにコピーしてそのSQLを実行する

```sql:mariadb_zabbix.sql
CREATE DATABASE zabbix character set utf8;
GRANT ALL PRIVILEGES ON zabbix.* TO zabbix@localhost IDENTIFIED BY 'zabbix';
DROP DATABASE test;
FLUSH PRIVILEGES;

```

```ruby:mariadb_zabbix.rb
execute "CREATE DATABASE" do
    action  :run
    command "/bin/mysql -uroot < /tmp/mariadb_zabbix.sql"
end
```
### 10. zabbix3.2.4をインストール

基本的に、依存関係でPHP関連のパッケージはPHPインストール時に予めインストールしている筈だが、一応インストール漏れがあった場合に、php7.1系関連をインストールするために、remi-php71を有効にしておく

```ruby:zabbix32.rb
[
    "zabbix-server-mysql",
    "zabbix-web-mysql",
    "zabbix-web-japanese",
].each{| pkg |
    package pkg do
        action  :install
        options "--enablerepo=remi-php71"
    end
}
```

### 11. mariadbに initial schema と data を追加

zabbix-serverをインストール際にコピーされるsqlファイルを実行させる

```ruby:zabbix32.rb

execute "import initial schema and data" do
    action  :run
    command "zcat /usr/share/doc/zabbix-server-mysql-3.2.*/create.sql.gz | /bin/mysql -uzabbix -pzabbix -Dzabbix"
end

```

### 12. zabbix serverにzabbix_server.conf、Apache用zabbix.confの変更

zabbix serverに対して、DBへの接続設定を追加する

```text:zabbix_server.conf

DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=zabbix
DBSocket=/tmp/mysql.sock
```

Apacheにincludeするzabbix.confは基本的に標準でも構わないのだが、php5系用になっているので、php7系用に変更する必要がある

```text:zabbix.conf
    <IfModule mod_php7.c>
        php_value max_execution_time 300
        php_value memory_limit 128M
        php_value post_max_size 16M
        php_value upload_max_filesize 2M
        php_value max_input_time 300
        php_value always_populate_raw_post_data -1
        # php_value date.timezone Europe/Riga
    </IfModule>
```

# 現状

zabbix自体のソースコードがphp5系向けに書いてあるようで、php7系で変更になった関数を使ってあるので、エラーが出ます。
![スクリーンショット 2017-04-18 20.06.13.png](https://qiita-image-store.s3.amazonaws.com/0/137052/99549716-9948-070c-8d93-9b652a45bfed.png)