読者です 読者をやめる 読者になる 読者になる

夢とガラクタの集積場

落ちこぼれ三流エンジニアである管理人の夢想=『夢』と、潰えた夢=『ガラクタ』の集積場です。

Ubuntu用Stormインストールパッケージを作成しよう!(その1

こんにちは。

徐々に暖かくなってきていますが未だに部屋でマフラーまでしている今日この頃です。
いつまでこの寒さは続きますかねぇ・・・

1.StormをUbuntuに導入してみたい!

というのが今回の発端です。
ご存じの方もいらっしゃるかもしれませんが、
storm-installerは現状CentOS用のパッケージしか存在しておらず、Ubuntu用のパッケージが存在しない状態です。

なので、どうせなのでStorm用のパッケージを作成してしまおう・・・というわけですね。

2.そもそも、何故Ubuntuを使っているの?

と、そもそもその前に何故CentOSではなくてUbuntuを使用しているのか、という疑問がありますよね。

これについては完全なる思いつきに過ぎないのですが、
「LXCとjujuを使って仮想マシンを色々試してみよう!」と最近思いました。
CentOSでも6.2以降であればLXCが入るのはわかっているのですが、
どうせなら昔からサポートに取り組んできたUbuntu上で試してみたい・・・というわけです。

結果、自宅の新サーバマシンはCentOSではなく、Ubuntuがインストールされることになったわけでした・・・

3.試した環境

というわけで、実際にパッケージを作成する環境構築から入るわけですが、
実際に使った環境をまず残しておきます。
今回のパッケージ作成は下記の環境を持つマシンで実行しています。

ビルド環境マシン

SSDが豪華なことを除けば、極々平凡なコストパフォーマンスに優れたマシン、といった感じですね。

4.パッケージビルド環境構築

まずはパッケージビルド環境構築です。
個々のプロダクトのパッケージ作成時に必要になったらその都度必要なものを追加していきます。

■ビルド環境構築

// 開発ツール/ビルドツール関連インストール
kimutansk@tartaros:~$ sudo apt-get install dh-make fakeroot dpkg-dev
kimutansk@tartaros:~$ sudo apt-get install devscripts
kimutansk@tartaros:~$ sudo apt-get install autotools-dev
// ディレクトリ作成
kimutansk@tartaros:~$ mkdir debwork  // パッケージビルド用のワークディレクトリ
kimutansk@tartaros:~$ mkdir debbuild // パッケージビルド用のファイルを配置するディレクトリ

apt-getコマンドがあるのでインストール自体は一瞬ですね。

5.ZeroMQパッケージの作成

環境構築が終わったので、手始めにZeroMQからパッケージを作成していきます。

■ZeroMQパッケージ作成準備

kimutansk@tartaros:~$ cd debwork
// ソースダウンロード
kimutansk@tartaros:~$ wget http://download.zeromq.org/zeromq-2.1.7.tar.gz
// ファイルを展開し、ビルド用ディレクトリに配置
kimutansk@tartaros:~$ tar xzvpf zeromq-2.1.7.tar.gz
kimutansk@tartaros:~$ mv zeromq-2.1.7 ../debbuild/
kimutansk@tartaros:~$ cd ../debbuild/
kimutansk@tartaros:~$ mkdir zeromq-2.1.7_build
kimutansk@tartaros:~$ mv zeromq-2.1.7 zeromq-2.1.7_build/
// dh_makeコマンドでdebian用のビルド定義生成
kimutansk@tartaros:~$ cd zeromq-2.1.7_build/zeromq-2.1.7
kimutansk@tartaros:~$ dh_make -e kimutansk.g@gmail.com -c lgpl -f ../../../debwork/zeromq-2.1.7.tar.gz

Type of package: single binary, indep binary, multiple binary, library, kernel module, kernel patch?
 [s/i/m/l/k/n] s

Maintainer name  : kimutansk
Email-Address    : kimutansk.g@gmail.com
Date             : Mon, 11 Feb 2013 23:04:56 +0900
Package Name     : zeromq
Version          : 2.1.7
License          : lgpl3
Type of Package  : Single
Hit <enter> to confirm:

Maintainer nameが私になってしまいますが、とりあえずは気にしない方向で。
これまでのコマンドを実行すると、「zeromq-2.1.7」ディレクトリ配下に
debian」ディレクトリが作成され、debian系のビルド定義が生成されます。

では、続きを。

■ZeroMQパッケージ作成試行

// debパッケージ作成コマンド実行、失敗・・・
kimutansk@tartaros:~$ debuild -us -uc
(中略)
configure: exit 1
make: *** [build] エラー 25
dpkg-buildpackage: error: debian/rules build gave error exit status 2
debuild: fatal error at line 1357:
dpkg-buildpackage -rfakeroot -D -us -uc failed

失敗しています。かつ、エラーのメッセージを見ても何が何やらさっぱりです。
ただ、「configure: exit 1」というところから
パッケージ化を行おうとしなくても普通にconfigureコマンドでこけることは推測できます。

なので、パッケージ化ではなく、普通にビルドを行ってみます。

■ZeroMQをビルド・・・失敗

// 通常ビルド実施
kimutansk@tartaros:~$ cd
kimutansk@tartaros:~$ cd debwork
kimutansk@tartaros:~$ tar xzvpf zeromq-2.1.7.tar.gz
kimutansk@tartaros:~$ cd zeromq-2.1.7
kimutansk@tartaros:~$ ./configure
(中略)
checking for sem_init in -lrt... yes
checking for uuid_generate in -luuid... no
configure: error: cannot link with -luuid, install uuid-dev.

configureコマンドを実行した結果、「uuid-dev」が存在しないため失敗していることがわかりました。
そのため、「uuid-dev」をインストールして再度試してみます。

■ZeroMQをビルド

// 「uuid-dev」をインストールし、再ビルド
kimutansk@tartaros:~$ sudo apt-get install uuid-dev
kimutansk@tartaros:~$ ./configure
(中略)
config.status: creating src/platform.hpp
config.status: executing depfiles commands
config.status: executing libtool commands

特にエラーメッセージなく終わることを確認しました。
では、再度パッケージ作成に戻ります。
一度debuildコマンドを実行するとconfig.logが作成されてソースが変更されたとして扱われてしまうため、
再度ファイルを展開しなおした上で実行してください。

■ZeroMQパッケージ作成試行

// debパッケージ作成コマンド実行
kimutansk@tartaros:~$ debuild -us -uc
(中略)
W: zeromq: bad-homepage <insert the upstream URL, if relevant>
E: zeromq: non-empty-dependency_libs-in-la-file usr/lib/libzmq.la
W: zeromq: non-dev-pkg-with-shlib-symlink usr/lib/libzmq.so.1.0.0 usr/lib/libzmq.so
Finished running lintian.
// 生成ファイル確認
kimutansk@tartaros:~$ cd ../
kimutansk@tartaros:~$ ls
zeromq-2.1.7                  zeromq_2.1.7-1_amd64.changes
zeromq_2.1.7-1.debian.tar.gz  zeromq_2.1.7-1_amd64.deb
zeromq_2.1.7-1.dsc            zeromq_2.1.7.orig.tar.gz
zeromq_2.1.7-1_amd64.build
// 生成されたパッケージファイルの中身確認
kimutansk@tartaros:~$ less zeromq_2.1.7-1_amd64.deb
(中略)
*** Contents:
(中略)
-rw-r--r-- root/root       952 2013-02-11 23:05 ./usr/lib/libzmq.la
drwxr-xr-x root/root         0 2013-02-11 23:05 ./usr/lib/pkgconfig/
-rw-r--r-- root/root       195 2013-02-11 23:05 ./usr/lib/pkgconfig/libzmq.pc
-rw-r--r-- root/root    644176 2013-02-11 23:05 ./usr/lib/libzmq.a
-rw-r--r-- root/root    199592 2013-02-11 23:05 ./usr/lib/libzmq.so.1.0.0
lrwxrwxrwx root/root         0 2013-02-11 23:05 ./usr/lib/libzmq.so -> libzmq.so.1.0.0
lrwxrwxrwx root/root         0 2013-02-11 23:05 ./usr/lib/libzmq.so.1 -> libzmq.so.1.0.0

これでようやくZeroMQ用のパッケージファイル「zeromq_2.1.7-1_amd64.deb」を作成することができました。
残るはjzmqとstorm、storm-serviceですが、これはまた次回に書きますね。

それでは。