daemontools-0.76 から tai64nlocal を static build する

Void Linux や runit を利用している、もしくは tai64 形式のタイムスタンプを含むログファイルを扱うような場合に、 tai64nlocal コマンドが必要になることが多い。

dameontools の他のバイナリは必要ないが、 tai64nlocal コマンドだけを様々な環境で雑に利用したい。 そういうわけで、ここでは tai64nlocal をソースから静的ビルドする。というか daemontools を静的ビルドして tai64nlocal を取り出す。

method

  1. djb の公式サイトから daemontools-0.76.tar.gz を取得する。 なお daemontools-0.76 は Public Domain であることが宣言されている
  2. 適当なディレクトリに展開し cd する
    % tar zxf daemonotools-0.76.tar.gz && cd admin/daemontools-0.76
    
  3. とりあえず一回コンパイルさせる
    % package/compile
    
  4. 生成されたファイルのうち、以下のように compile/conf-cc の先頭行に --include /usr/include/errno.h を追加する。これにより 一部のコンパイルエラー を修正する
    % head -n1 compile/conf-cc
    gcc -O2 -Wimplicit -Wunused -Wcomment -Wchar-subscripts -Wuninitialized -Wshadow -Wcast-qual -Wcast-align -Wwrite-strings --include /usr/include/errno.h
    
  5. 生成されたファイルのうち、以下のように compile/conf-ld の先頭行に -static を追加する
    % head -n1 compile/conf-ld
    gcc -s -static
    
  6. 再度コンパイルする
    % package/compile
    
  7. statically linked された tai64nlocal バイナリが command/tai64nlocal に生成される
    % file command/tai64nlocal
    command/tai64nlocal: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, BuildID[sha1]=8849d667717f9a97ac688be502de1c941b1d9e4e, for GNU/Linux 3.2.0, stripped
    

なお compile/conf-cc compile/conf-ld については、Makefile 中で先頭行のみを取り出して利用しているため、それぞれの先頭行を直接修正する必要がある。 先頭行をコメントアウトしてその下に修正内容を追加する、という編集では正しくコンパイルできない。

以上。