Vine 3.1(6)librpmio の作り直し


rpm コマンドを使うと、
-bash-2.05b$ rpm
rpm: error while loading shared libraries: librpmio-4.0.4.so: cannot enable executable stack as shared object requires: Error 14
と、例のエラーになる。
rpm が使えないことには、Vine を使わせていただいている意味がないので、 librpmio を作り直す。

srpm の取得

[root@hackkit root]# apt-get source librpmio
apt-get: error while loading shared libraries: librpmio-4.0.4.so: cannot enable executable stack as shared object requires: Error 14
[root@hackkit root]#
あかんやん。

「缶切りは缶の中」!

HDD を玄箱に戻す

rebuild 時間が速くなるだろうと 玄箱/HG に HDD を接続していたのだが、、、、 カーネル 2.4.20 という缶切りを使うために玄箱に HDD を戻す

srpm の取得。こんどこそ

[root@hackkit root]# apt-get source librpmio
パッケージリストを読みこんでいます... 完了
依存情報ツリーを作成しています... 完了
E: librpmio のソースパッケージが見付かりません
[root@hackkit root]# rpm -qf /usr/lib/librpmio-4.0.4.so
rpm-4.0.5-1vl8
librpmio って rpm のパッケージの一部なのか。
[root@hackkit root]# apt-get update
取得:1 http://updates.vinelinux.org 3.1/ppc release [2515B]
2515B を 0s 秒で取得しました (4543B/s)
取得:1 http://updates.vinelinux.org 3.1/ppc/main pkglist [215kB]
取得:2 http://updates.vinelinux.org 3.1/ppc/main release [123B]
取得:3 http://updates.vinelinux.org 3.1/ppc/devel pkglist [30.2kB]
取得:4 http://updates.vinelinux.org 3.1/ppc/devel release [124B]
取得:5 http://updates.vinelinux.org 3.1/ppc/plus pkglist [319kB]
取得:6 http://updates.vinelinux.org 3.1/ppc/plus release [123B]
取得:7 http://updates.vinelinux.org 3.1/ppc/updates pkglist [18.4kB]
取得:8 http://updates.vinelinux.org 3.1/ppc/updates release [126B]
取得:9 http://updates.vinelinux.org 3.1/ppc/main srclist [106kB]
取得:10 http://updates.vinelinux.org 3.1/ppc/devel srclist [14B]
取得:11 http://updates.vinelinux.org 3.1/ppc/plus srclist [172kB]
取得:12 http://updates.vinelinux.org 3.1/ppc/updates srclist [15.5kB]
877kB を 7s 秒で取得しました (120kB/s)
パッケージリストを読みこんでいます... 完了
依存情報ツリーを作成しています... 完了
[root@hackkit root]# apt-get source rpm
パッケージリストを読みこんでいます... 完了
依存情報ツリーを作成しています... 完了
6296kB のソースアーカイブを取得します。
取得:1 http://updates.vinelinux.org 3.1/ppc/main rpm 4.0.5-1vl8 (srpm) [6296kB]
6296kB を 12s 秒で取得しました (508kB/s)
   1:rpm                    ########################################### [100%]
[root@hackkit root]#

玄箱/HG に HDD を戻す

srpm が取得できたので、rebuild が少しでも速いように HDD を玄箱/HG にもどす。

これだけでハックの記録、昨日1日分

srpm のインストール

[root@hackkit root]# rpm -ivh rpm-4.0.5-1vl8.src.rpm
rpm: error while loading shared libraries: librpmio-4.0.4.so: cannot enable executable stack as shared object requires: Erro
r 14
[root@hackkit root]#
がー。何してんだか。
素直に(?)玄箱でリビルドしょ

srpm のインストール。こんどこそ

玄箱で実行。
[root@hackkit root]# rpm -ivh rpm-4.0.5-1vl8.src.rpm
   1:rpm                    ########################################### [100%]
[root@hackkit root]#

まずはそのまま rebuild

余談だが、
応用を試す前に基本をおさえる事は、鉄則だと思う。
この場合だとオリジナルのままコンパイルできることを確認して (基本をおさえる)から、 パッチをあててコンパイルする(応用を試す)。
そうでないと、もし問題が発生したときに、
  • もともとできないのか
  • それとも自分のパッチでできなくなったのか
    問題の切り分けが困難になるので。

    ハックキットも同様に、基本をおさえて (手順どおりに インストールして)から 応用(自分なりのカスタマイズ)を試していただきたい。

    本題に戻る。

    [root@hackkit root]# cd rpm/SPECS/
    [root@hackkit SPECS]# ls
    rpm-vl.spec
    [root@hackkit SPECS]# rpmbuild rpm-vl.spec
    エラー: ビルド依存性の欠如:
            zlib-devel は rpm-4.0.5-1vl8 に必要とされています
            python-devel >= 2.3 は rpm-4.0.5-1vl8 に必要とされています
            autoconf は rpm-4.0.5-1vl8 に必要とされています
            automake は rpm-4.0.5-1vl8 に必要とされています
            libtool >= 1.5.2 は rpm-4.0.5-1vl8 に必要とされています
    [root@hackkit SPECS]# apt-get build-dep rpm
    パッケージリストを読みこんでいます... 完了
    依存情報ツリーを作成しています... 完了
    以下のパッケージが新たにインストールされます:
      autoconf automake libtool libtool-libs m4 python-devel zlib-devel
    アップグレード: 0 個, 新規インストール: 7 個, 削除: 0 個, 保留: 11 個
    1506kB/3411kB のアーカイブを取得する必要があります。
    展開後に 10.6MB のディスク容量が追加消費されます。
    続行しますか? [Y/n]y
    取得:1 http://updates.vinelinux.org 3.1/ppc/devel python-devel 2.3.4-0vl3 [1440kB]
    取得:2 http://updates.vinelinux.org 3.1/ppc/devel zlib-devel 1.1.4-0vl3 [65.1kB]
    1506kB を 6s 秒で取得しました (222kB/s)
    変更を適用しています...
    Preparing...                ########################################### [100%]
       1:m4                     ########################################### [ 14%]
       2:autoconf               ########################################### [ 28%]
       3:automake               ########################################### [ 42%]
       4:libtool-libs           ########################################### [ 57%]
       5:libtool                ########################################### [ 71%]
       6:python-devel           ########################################### [ 85%]
       7:zlib-devel             ########################################### [100%]
    完了
    [root@hackkit SPECS]# rpmbuild -ba rpm-vl.spec
    実行中(%prep): /bin/sh -e /var/tmp/rpm-tmp.74755
    + umask 022
    + cd /root/rpm/BUILD
    + cd /root/rpm/BUILD
    + rm -rf rpm-4.0.5
    + tar -xf -
    + /bin/gzip -dc /root/rpm/SOURCES/rpm-4.0.5.tar.gz
    	:
    	:
    実行中(%build): /bin/sh -e /var/tmp/rpm-tmp.25378
    + umask 022
    + cd /root/rpm/BUILD
    + cd rpm-4.0.5
    + pushd db/dist
    ~/rpm/BUILD/rpm-4.0.5/db/dist ~/rpm/BUILD/rpm-4.0.5
    + libtoolize --copy --force
    You should add the contents of `/usr/share/aclocal/libtool.m4' to `aclocal.m4'.
    + cp -f /usr/share/aclocal/libtool.m4 aclocal/libtool.ac
    + popd
    ~/rpm/BUILD/rpm-4.0.5
    + pushd popt
    ~/rpm/BUILD/rpm-4.0.5/popt ~/rpm/BUILD/rpm-4.0.5
    + libtoolize --copy --force
    You should update your `aclocal.m4' by running aclocal.
    + aclocal
    aclocal: configure.in: 80: macro `AM_GNU_GETTEXT' not found in library
    エラー: /var/tmp/rpm-tmp.25378 の不正な終了ステータス (%build)
    
    
    RPM ビルドエラー:
        /var/tmp/rpm-tmp.25378 の不正な終了ステータス (%build)
    [root@hackkit SPECS]#
    
    くじけそ。

    アップデート

    パッケージをアップデートしたらいけるかな?
    [root@hackkit SPECS]# apt-get upgrade
    パッケージリストを読みこんでいます... 完了
    依存情報ツリーを作成しています... 完了
    以下のパッケージがアップグレードされます:
      apache cyrus-sasl dhcp info jvim libstdc++2_10 libstdc++2_10-compat qpopper telnet-server
    以下のパッケージは保留されます:
      LPRng kernel-headers
    アップグレード: 9 個, 新規インストール: 0 個, 削除: 0 個, 保留: 2 個
    5380kB のアーカイブを取得する必要があります。
    展開後に 801kB のディスク容量が追加消費されます。
    続行しますか? [Y/n]y
    取得:1 http://updates.vinelinux.org 3.1/ppc/updates apache 1.3.33-0vl2 [658kB]
    取得:2 http://updates.vinelinux.org 3.1/ppc/updates cyrus-sasl 2.1.18-0vl3 [266kB]
    取得:3 http://updates.vinelinux.org 3.1/ppc/plus dhcp 1:3.0pl2-6vl1 [601kB]
    取得:4 http://updates.vinelinux.org 3.1/ppc/plus info 4.7-0vl1 [153kB]
    取得:5 http://updates.vinelinux.org 3.1/ppc/plus jvim 3.0j2.1b-0vl3 [861kB]
    取得:6 http://updates.vinelinux.org 3.1/ppc/plus libstdc++2_10 1:2.10.0-2vl24 [2243kB]
    取得:7 http://updates.vinelinux.org 3.1/ppc/plus libstdc++2_10-compat 2.10.0-0vl4 [2493B]
    取得:8 http://updates.vinelinux.org 3.1/ppc/plus qpopper 4.0.5-0vl1 [564kB]
    取得:9 http://updates.vinelinux.org 3.1/ppc/plus telnet-server 0.17.x-30vl1 [31.2kB]
    5380kB を 22s 秒で取得しました (240kB/s)
    変更を適用しています...
    Preparing...                ########################################### [100%]
       1:apache                 ########################################### [ 11%]
       2:cyrus-sasl             ########################################### [ 22%]
       3:dhcp                   ########################################### [ 33%]
       4:info                   warning: /usr/share/info/dir created as /usr/share/info/dir.rpmnew
    ########################################### [ 44%]
       5:jvim                   ########################################### [ 55%]
       6:libstdc++2_10          ########################################### [ 66%]
       7:libstdc++2_10-compat   ########################################### [ 77%]
       8:qpopper                ########################################### [ 88%]
       9:telnet-server          ########################################### [100%]
    完了
    [root@hackkit SPECS]# rpmbuild -ba rpm-vl.spec
    実行中(%prep): /bin/sh -e /var/tmp/rpm-tmp.58881
    	:
    aclocal: configure.in: 80: macro `AM_GNU_GETTEXT' not found in library
    エラー: /var/tmp/rpm-tmp.83157 の不正な終了ステータス (%build)
    
    
    RPM ビルドエラー:
        /var/tmp/rpm-tmp.83157 の不正な終了ステータス (%build)
    
    やっぱりだめ

    gettext のインストール

    gettext が怪しい(当たり前か)
    [root@hackkit root]# rpm -qa|grep gettext
    [root@hackkit root]#
    
    インストールされていないので、インストールする
    [root@hackkit root]# apt-get install gettext
    パッケージリストを読みこんでいます... 完了
    依存情報ツリーを作成しています... 完了
    以下の追加パッケージがインストールされます:
      gmp libgcj python zip
    以下のパッケージが新たにインストールされます:
      gettext gmp libgcj python zip
    アップグレード: 0 個, 新規インストール: 5 個, 削除: 0 個, 保留: 2 個
    21.6MB のアーカイブを取得する必要があります。
    展開後に 71.7MB のディスク容量が追加消費されます。
    続行しますか? [Y/n]y
    取得:1 http://updates.vinelinux.org 3.1/ppc/main gmp 4.1.2-13vl1 [195kB]
    取得:2 http://updates.vinelinux.org 3.1/ppc/main python 2.3.4-0vl3 [5452kB]
    取得:3 http://updates.vinelinux.org 3.1/ppc/main zip 2.3-14vl2 [117kB]
    取得:4 http://updates.vinelinux.org 3.1/ppc/main libgcj 3.3.2-0vl8 [12.9MB]
    取得:5 http://updates.vinelinux.org 3.1/ppc/main gettext 0.14.1-0vl2 [2905kB]
    21.6MB を 58s 秒で取得しました (366kB/s)
    変更を適用しています...
    Preparing...                ########################################### [100%]
       1:gmp                    ########################################### [ 20%]
       2:python                 ########################################### [ 40%]
       3:zip                    ########################################### [ 60%]
       4:libgcj                 ########################################### [ 80%]
       5:gettext                ########################################### [100%]
    完了
    [root@hackkit root]#
    
    再度 rebuild
    [root@hackkit SPECS]# rpmbuild -ba rpm-vl.spec
    実行中(%prep): /bin/sh -e /var/tmp/rpm-tmp.774
    + umask 022
    + cd /root/rpm/BUILD
    + cd /root/rpm/BUILD
    	:
    	:
    + libtoolize --copy --force
    You should update your `aclocal.m4' by running aclocal.
    + aclocal
    + autoheader
    
    無事通過
    こういうのこそ build-dep では?
    続き
    	:
    	:
    checking dlfcn.h usability... yes
    checking dlfcn.h presence... yes
    checking for dlfcn.h... yes
    checking how to run the C++ preprocessor... /lib/cpp
    configure: error: C++ preprocessor "/lib/cpp" fails sanity check
    See `config.log' for more details.
    エラー: /var/tmp/rpm-tmp.35358 の不正な終了ステータス (%build)
    
    
    RPM ビルドエラー:
        /var/tmp/rpm-tmp.35358 の不正な終了ステータス (%build)
    [root@hackkit SPECS]#
    
    今度は cpp が健全じゃないと。一難去ってまた一難。
    cpp が何でエラーになるの?
    [root@hackkit SPECS]# ls -l /lib/cpp
    lrwxrwxrwx    1 root     root           24 Nov 26 07:18 /lib/cpp -> /etc/alternatives/libcpp*
    [root@hackkit SPECS]# ls -l /etc/alternatives/libcpp
    lrwxrwxrwx    1 root     root           18 Nov 26 07:18 /etc/alternatives/libcpp -> /usr/bin/cpp-3.3.2*
    
    ちゃんとあるのに。 今度こそ、くじけそ。

    ハックの記録 → Vine 3.1(7)librpm の作り直し(2)Vine 2.6 でコンパイル
    LinkStation/玄箱 をハックしよう

    Copyright (C) 2004 Yasunari Yamashita. All Rights Reserved.
    yasunari @ yamasita.jp 山下康成@京都府向日市