Slackware 10.0 へ daemontools を組み込んでみる
SERVER
daemontools 0.76
daemontools とは、D.J.Bernstein さまが制作した、qmail や djbdns といったサーバソフトウェアを起動する上での土台となるソフトウェアです。
これまでも何度かインストールしたことがあって、このごろでも EZ-NET: SSD/Linux へ daemontools を組み込んでみる にて触れたりもして、これまで特に困ったことはなかったのですけど、今回また Slackware 10.0 へ daemontools をインストールしてみようとしたときにエラーとなってしまったのでした。
エラーの原因は、以前から気になっていた glibc 2.3.1 以降で error.h がコンパイルエラーとなる問題のようです。
今までも EZ-NET: netqmail 1.05 のインストール にて glibc 2.3.1 環境へ daemontools をインストールしたことがあるのですけど、このときはエラーとなる事はありませんでした。ただし今回の Slackware 10.0 では glibc 2.3.5 が組み込まれているようで、この感じからパッチが必要となるのは 2.3.2 からとなるのかも知れないですね。
そんな感じで今回はパッチを充てつつ daemontools をインストールしてみることとなったので、その時のお話を残しておくことにしました。
なお、glibc のバージョンを確認したい場合には次のようにすれば良いようです。
ls /lib/libc-*
daemontools のインストール
glibc 2.3.5 環境へ daemontools をインストールしてみます。
daemonntools は http://cr.yp.to/daemontools.html にて無償で提供されていますので、そちらから 2005/12/26 の時点で最新の daemontools-0.76.tar.gz をダウンロードしました。
glibc 2.3.2 以上の場合はさらに error.h にパッチを充てる必要があるとのことなので http://qmail.org/moni.csi.hu/pub/glibc-2.3.1/ からさらに daemontools-0.76.errno.patch ファイルもダウンロードしておきます。
そして、とりあえず従来の手順どおりに daemontools のインストール作業を行ってみます。
まずは /package ディレクトリを作成し、そのディレクトリのパーミッションを 1755 (drwxr-xr-t) に設定します。
mkdir -p /package
chmod 1755 /package
そうしたら /package ディレクトリへ daemontools-0.76.tar.gz を用意して、次のようにして展開および、カレントディレクトリの変更を行います。
cd /package
tar xvzpf daemontools-0.76.tar.gz
cd admin/daemontools-0.76
そうしたら error.h 用のパッチを充てます。
現在いる位置 (/package/admin/daemontools-0.76/) にパッチファイル (daemontools-0.76.errno.patch) を保存したら、次のようにしてそのパッチを充てます。このパッチを充てないと次の手順でコンパイルエラーとなりますので注意しましょう。
patch -p1 < ./daemontools-0.76.errno.patch
パッチを充て終わったら、あとは従来どおりの方法でインストールを行えば作業は終了です。
package/install
終わりに
今回の slackware 10.0 (glibc 2.3.5) 環境では、他にもパッチが必要なソフトウェアがありました。
EZ-NET: netqmail 1.05 のインストール にて紹介してみた netqmail 1.05 についてはそれに関するパッチがインストール手順の中で充てられるようなので気にする必要はないのですけど、ucspi-tcp-0.88 や djbdns 1.05 などではパッチが必要となりました。
これらのパッチについても http://qmail.org/moni.csi.hu/pub/glibc-2.3.1/ から入手することが出来るので、該当するアーカイブを展開したら、出来上がったディレクトリ内にパッチをコピーして、次のようにパッチを充ててからコンパイル (make setup check) すれば良いようです。
patch -p1 < ./ucspi-tcp-0.88.errno.patch