Zabbix の DB schema の sql ファイルが見つからない場合は (CentOS/RHEL)

# rpm/yum でパッケージを入れる際に気を付けること

## Zabbix の shema file 達

Zabbix の DB をセットアップする際に必要な schema ファイルですが

* data.sql
* images.sql
* schema.sql

これらのファイルは Zabbix をセットアップした人ならば見覚えがあるはずです

通常であれば公式 repo で公開されている rpm (`zabbix-server-mysql`等) を install することで手に入ります

## schema ファイルの場所

`zabbix-server-mysql` の場合ですが

```shell-session
[server@user] $ rpm -qpl zabbix-server-mysql-2.2.5-1.el6.x86_64.rpm
/usr/sbin/zabbix_server_mysql
/usr/share/doc/zabbix-server-mysql-2.2.5
/usr/share/doc/zabbix-server-mysql-2.2.5/create
/usr/share/doc/zabbix-server-mysql-2.2.5/create/data.sql
/usr/share/doc/zabbix-server-mysql-2.2.5/create/images.sql
/usr/share/doc/zabbix-server-mysql-2.2.5/create/schema.sql
/usr/share/doc/zabbix-server-mysql-2.2.5/upgrades
/usr/share/doc/zabbix-server-mysql-2.2.5/upgrades/dbpatches
/usr/share/doc/zabbix-server-mysql-2.2.5/upgrades/dbpatches/1.6
/usr/share/doc/zabbix-server-mysql-2.2.5/upgrades/dbpatches/1.6/mysql
/usr/share/doc/zabbix-server-mysql-2.2.5/upgrades/dbpatches/1.6/mysql/patch.sql
/usr/share/doc/zabbix-server-mysql-2.2.5/upgrades/dbpatches/1.8
/usr/share/doc/zabbix-server-mysql-2.2.5/upgrades/dbpatches/1.8/mysql
/usr/share/doc/zabbix-server-mysql-2.2.5/upgrades/dbpatches/1.8/mysql/patch.sql
/usr/share/doc/zabbix-server-mysql-2.2.5/upgrades/dbpatches/1.8/mysql/upgrade
/usr/share/doc/zabbix-server-mysql-2.2.5/upgrades/dbpatches/2.0
/usr/share/doc/zabbix-server-mysql-2.2.5/upgrades/dbpatches/2.0/mysql
/usr/share/doc/zabbix-server-mysql-2.2.5/upgrades/dbpatches/2.0/mysql/patch.sql
/usr/share/doc/zabbix-server-mysql-2.2.5/upgrades/dbpatches/2.0/mysql/rc4_rc5.sql
/usr/share/doc/zabbix-server-mysql-2.2.5/upgrades/dbpatches/2.0/mysql/upgrade
```

こんな感じで配置されます

## パッケージはエラー無く入るが・・・


```shell-session
[server@user] $ sudo rpm --install zabbix-server-mysql-2.2.5-1.el6.x86_64.rpm
[server@user] $
```
(ﾟ∀ﾟ)
 
　

```shell-session
[server@user] $ cat /usr/share/doc/zabbix-server-mysql-2.2.5/create/data.sql
cat: /usr/share/doc/zabbix-server-mysql-2.2.5/create/data.sql: No such file or directory
```

( ﾟдﾟ)・・・？

```shell-session
[server@user] $ tree /usr/share/doc/zabbix-server-mysql-2.2.5/
/usr/share/doc/zabbix-server-mysql-2.2.5/
`-- upgrades
    `-- dbpatches
        |-- 1.6
        |-- 1.8
        `-- 2.0

5 directories, 0 files

[server@user] $ find /usr/share/doc/zabbix-server-mysql-2.2.5/
/usr/share/doc/zabbix-server-mysql-2.2.5/
/usr/share/doc/zabbix-server-mysql-2.2.5/upgrades
/usr/share/doc/zabbix-server-mysql-2.2.5/upgrades/dbpatches
/usr/share/doc/zabbix-server-mysql-2.2.5/upgrades/dbpatches/1.8
/usr/share/doc/zabbix-server-mysql-2.2.5/upgrades/dbpatches/2.0
/usr/share/doc/zabbix-server-mysql-2.2.5/upgrades/dbpatches/1.6
```

(つд⊂)ゴシゴシ
( ﾟдﾟ)・・・

**どこにも *.sql が無い**   ＼(^o^)／オワタ


# なぜ package に含まれているファイルが配置されないのか

## rpm の設定で document を install しないオプションがある

man を参照すると

```text:man:rpm
--excludedocs
(man ページ、tenxinfo 文書を含めた)文書であるとマーク付されたファイルを インストールしない。
```

上記の `rpm -qpl` の結果を見ても分かる通り、Zabbix の shema ファイルは document として packaging されています
なので `--excludedocs` が有効な場合は配置されないということですね

## でも rpm で install する時に `--excludedocs` を指定してないわけだが

rpm のオプションの指定の仕方は引数で与えるだけではなく、設定ファイルからも設定できます
その設定ファイルの場所はというと

* /etc/rpm/
* /usr/lib/rpm/

などあります
**このどこかに `%_excludedocs 1` とか書かれてたら `--excludedocs` されていることになります**
(大抵の場合は `/etc/rpm` 以下でしょう)

## いま現在設定されている設定を確認する

結局どの設定が有効になってるの？は

```shell-session
[server@user] $ rpm --showrc
```

で確認できます
結果を `grep excludedocs` して何も出てこなければ設定はされてません
設定されてれば出てきます
まずは`rpm --showrc` で確認してみるといいでしょう

## 終わりに

schema ファイルが配置されないせいで、chef の recipe が通らなくて困っていたんですが
`--excludedocs` が知らぬ間に効いていたということに気がつくまで相当時間がかかった罠

OS の image を作成する際にすこしでも容量を減らしたい為に `excludedocs` してる場合もあると思うのですが、
そういう image から起動させたサーバーに Zabbix Server を install する時は確認しておいたほうがいいかもですね