zabbix-2.4.7+dfsg ベースに Zabbix 3.0 のビルドをしようとしてハマる

Zabbix 、人柱も兼ねて、このところずっと rc 付きとか 3.0 系とかを自前でパッケージングして使っていたんですが、最近になって zabbix-agent がビルドできなくなり、なんでだろうと、ずっと思っていたんですが、そもそも 3.0.0 においては zabbix-agent は削除されたということで、ビルドできなくて正解だった模様。

:: Dropped support of zabbix_agent binary
Dropped support of Inetd version of Zabbix Agent.

[From Zabbix :: The Enterprise-Class Open Source Network Monitoring Solution]

となると、ビルドする中で zabbix-agent の処理を止めなくちゃいけないわけですが、それをどの部分で制御しているのかが判るまでに、結構時間取られたんで、念のためメモ的に残しておく。

ハマリポイントは、実は二つ

一つ目は JavaScript ファイルのコピー先がない、といってビルドが止まるというもの。こちらは、コピー先のディレクトリを dpkg-buildpackage コマンドの実行前に作る、ということで比較的楽に回避できたんですが。

make[1]: ディレクトリ '/usr/local/src/zabbix-3.0.0beta2.dev.58103' に入ります
DEB_BUILD_OPTIONS=parallel=4
I: zabbix_3.0.0+dfsg
Replacing sourceless (minified) bundled libraries...
cp -vfH debian/missing-sources/jquery.js frontends/php/js/jquery/jquery.js
'debian/missing-sources/jquery.js' -> 'frontends/php/js/jquery/jquery.js'
cp: 通常ファイル 'frontends/php/js/jquery/jquery.js' を作成できません: そのようなファイルやディレクトリはありません
debian/rules:90: ターゲット 'override_dh_autoreconf' のレシピで失敗しました
make[1]: *** [override_dh_autoreconf] エラー 1
make[1]: ディレクトリ '/usr/local/src/zabbix-3.0.0beta2.dev.58103' から出ます
debian/rules:76: ターゲット 'binary' のレシピで失敗しました
make: *** [binary] エラー 2
dpkg-buildpackage: error: fakeroot debian/rules binary gave error exit status 2

で、二つ目が、zabbi-agent の削除に伴うもので、こっちを解消するのに、かなり手間取りまして…。

make[1]: Entering directory '/usr/local/src/zabbix-3.0.0beta2.dev.58100'
DEB_BUILD_OPTIONS=parallel=4
I: zabbix_3.0.0+dfsg
dh_install
dh_install: zabbix-agent missing files: debian/tmp-build-MYSQL/src/zabbix_agent/zabbix_agent
dh_install: missing files, aborting
debian/rules:127: recipe for target 'override_dh_install' failed
make[1]: *** [override_dh_install] Error 255
make[1]: Leaving directory '/usr/local/src/zabbix-3.0.0beta2.dev.58100'
debian/rules:76: recipe for target 'binary' failed
make: *** [binary] Error 2
dpkg-buildpackage: error: fakeroot debian/rules binary gave error exit status 2

メッセージから行けば、" zabbix_agent がねぇよ" というわけですが、まぁソースレベルで削除されてるんで当然なわけですが、この zabbix-agent に関する操作をどこでやっているのかが、最初全く見当がつかなくて悪戦苦闘していた、と…。


最終的には、uupdate が生成するディレクトリ内に存在するファイル "debian/zabbix-agent.install" 中の1行 "debian/tmp-build-MYSQL/src/zabbix_agent/zabbix_agent usr/bin" を消せば良い、ということが判った次第。

nexus01:/usr/local/src# more zabbix-3.0.0beta2.dev.58103/debian/zabbix-agent.install
debian/tmp-build-MYSQL/src/zabbix_agent/zabbix_agentd usr/sbin
debian/tmp-build-MYSQL/src/zabbix_agent/zabbix_agent usr/bin
debian/tmp-build-MYSQL/src/zabbix_sender/zabbix_sender usr/bin
debian/tmp-build-MYSQL/conf/zabbix_agentd.conf usr/share/zabbix-agent

これが判るまで 3 週間ぐらい、モヤモヤとしていたという…。

さて、実際のビルドですが…

ビルドの手順自体は、随分と前に書いた方法を使っているわけですが、いちいち手でコマンド叩くのが面倒なので、以下の様なスクリプト( ZBX_build.sh )をぶん回して、ビルドしていたりします。
やってることは、ソース落としてきて(10 行目)、Zabbix のソースを配布形式に変換(17 〜 22 行目)、Debian でパッケージングされているバージョン( 2.4.7+dfsg )のソースベースにビルド用のソースを準備(24 〜 27 行目)、そしてビルド(29 〜 36 行目)と。

#!/bin/bash

set -o xtrace

PATH=/usr/sbin:/usr/bin:/sbin:/bin baseDIR="/usr/local/src"
# Get source from svn://svn.zabbix.com
cd $baseDIR
set -- `LANG=C svn co svn://svn.zabbix.com/ ZBX_src/ | grep "Checked out revision"`

# Get Rev No. and source version
revNo=${4/./}
verDev=`head -n1 $baseDIR/ZBX_src/trunk/ChangeLog | awk '{print $3}'`
verBranch=`head -n1 $baseDIR/ZBX_src/branches/2.4/ChangeLog | awk '{print $3}'`

# source to .tar.gz
cd $baseDIR/ZBX_src/trunk
./bootstrap.sh && ./configure && make dbschema && make dist

cd $baseDIR/ZBX_src/branches/2.4/
./bootstrap.sh && ./configure && make dbschema && make dist

# change to Debian packaging format
cd $baseDIR/zabbix-2.4.7+dfsg/
uupdate $baseDIR/ZBX_src/trunk/zabbix-$verDev.tar.gz $verDev.dev.${revNo}
uupdate $baseDIR/ZBX_src/branches/2.4/zabbix-$verBranch.tar.gz $verBranch.${revNo}

# Package build
cd $baseDIR/zabbix-$verDev.dev.${revNo}
mkdir frontends/php/js/jquery/
sed -i -e "\/debian\/tmp-build-MYSQL\/src\/zabbix_agent\/zabbix_agent\s.*usr\/bin$/d" debian/zabbix-agent.install
dpkg-buildpackage -d -us -b -rfakeroot

cd $baseDIR/zabbix-$verBranch.${revNo}
dpkg-buildpackage -d -us -b -rfakeroot

# Check deb package
cd $baseDIR
ls -ld *${revNo}*

ハマリポイント2箇所の回避方法は、31 行目と 32 行目。
見てお分かりの通り、JavaScript のコピー先を作るのと、 debian/zabbix-agent.install から zabbix-agent の行を削除する、というもの。

これ実行して、問題なくパッケージがビルドできましたし、ビルドされたパッケージも問題なくインストールできました。動作自体も、今のところは特におかしな挙動も見られないので、大丈夫?かな?
#まぁ、βだという点は、注意しないといけないんですけどね。

トラックバック(0)

コメントする