Vine Seed(9)libtermcap の作り直し


VineSeed をカーネル 2.4.17 で動作させると、
/bin/bash2: error while loading shared libraries: libtermcap.so.2: \
	cannot enable executable stack as shared object requires: Error 14
となって止まってしまう。
Web で検索すると、どうもこれは、 exec-shield という仕組みによるもののようだ。
コンパイル時に noexecstack を指定すると回避できるとのこと。

ソースパッケージのインストール

エラーになっているのは、libtermcap なので、 そのソースパッケージを取得する
[root@hackkit tmp]# apt-get source libtermcap
パッケージリストを読みこんでいます... 完了
依存情報ツリーを作成しています... 完了
226kB のソースアーカイブを取得します。
取得:1 http://updates.vinelinux.org VineSeed/ppc/main libtermcap 2.0.8-36vl1 (srpm) [226kB]
226kB を 0s 秒で取得しました (244kB/s)
エラー: %sourcedir を /usr/src/vine/SOURCES に作成できません
展開コマンド 'rpm -ivh libtermcap-2.0.8-36vl1.src.rpm' が失敗しました
E: 子プロセスが失敗しました
[root@hackkit tmp]# ls /usr/src/
linux@  linux-2.4.22/
おや?
mkrpmdir というコマンドが vutils にあるということなので、 vutils をインストールする
[root@hackkit tmp]# apt-get install vutils
パッケージリストを読みこんでいます... 完了
依存情報ツリーを作成しています... 完了
以下のパッケージが新たにインストールされます:
  vutils
アップグレード: 0 個, 新規インストール: 1 個, 削除: 0 個, 保留: 1 個
26.4kB のアーカイブを取得する必要があります。
展開後に 54.9kB のディスク容量が追加消費されます。
取得:1 http://updates.vinelinux.org VineSeed/ppc/main vutils 1.21.7-0vl1 [26.4kB]
26.4kB を 0s 秒で取得しました (72.5kB/s)
変更を適用しています...
Preparing...                ########################################### [100%]
   1:vutils                 ########################################### [100%]
error: cannot open Installtid index using db3 - そのようなファイルやディレクトリはありません (2)
error: cannot open Sigmd5 index using db3 - そのようなファイルやディレクトリはありません (2)
error: cannot open Sha1header index using db3 - そのようなファイルやディレクトリはありません (2)
完了
RPM 用のディレクトリを作成する。
[root@hackkit tmp]# mkrpmdir ~
mkrpmdir: created rpm tree in /root/rpm and /root/.rpmmacros.
libtermcap のソースを入手する。
[root@hackkit tmp]# apt-get source libtermcap
パッケージリストを読みこんでいます... 完了
依存情報ツリーを作成しています... 完了
226kB のソースアーカイブを取得します。
取得:1 http://updates.vinelinux.org VineSeed/ppc/main libtermcap 2.0.8-36vl1 (srpm) [226kB]
226kB を 1s 秒で取得しました (217kB/s)
   1:libtermcap             ########################################### [100%]
libtermcap をビルドするために必要なパッケージをインストールする。
[root@hackkit tmp]# apt-get build-dep libtermcap
パッケージリストを読みこんでいます... 完了
依存情報ツリーを作成しています... 完了
以下のパッケージが新たにインストールされます:
  texinfo
アップグレード: 0 個, 新規インストール: 1 個, 削除: 0 個, 保留: 1 個
777kB のアーカイブを取得する必要があります。
展開後に 1730kB のディスク容量が追加消費されます。
続行しますか? [Y/n]y
取得:1 http://updates.vinelinux.org VineSeed/ppc/main texinfo 4.7-0vl1 [777kB]
777kB を 1s 秒で取得しました (417kB/s)
変更を適用しています...
Preparing...                ########################################### [100%]
   1:texinfo                ########################################### [100%]
error: cannot open Installtid index using db3 - そのようなファイルやディレクトリはありません (2)
error: cannot open Sigmd5 index using db3 - そのようなファイルやディレクトリはありません (2)
error: cannot open Sha1header index using db3 - そのようなファイルやディレクトリはありません (2)
完了
いよいよ rebuild する
[root@hackkit tmp]# rpm --rebuild libtermcap-2.0.8-36vl1.src.rpm
libtermcap-2.0.8-36vl1.src.rpm: そのようなファイルやディレクトリはありません
あれ?
ずいぶん、Vine 2.6 とは勝手が違う
apt-cache search rpm したら、
rpm-build - Scripts and executable programs used to build packages.
rpm-devel - Development files for manipulating RPM packages.
rpm-utils - rpm パッケージを最新に保つためのスクリプト集
というパッケージが必要そう。
[root@hackkit tmp]# apt-get install rpm-build
パッケージリストを読みこんでいます... 完了
依存情報ツリーを作成しています... 完了
以下のパッケージが新たにインストールされます:
  rpm-build
アップグレード: 0 個, 新規インストール: 1 個, 削除: 0 個, 保留: 1 個
86.5kB のアーカイブを取得する必要があります。
展開後に 189kB のディスク容量が追加消費されます。
取得:1 http://updates.vinelinux.org VineSeed/ppc/main rpm-build 4.0.5-1vl8 [86.5kB]
86.5kB を 0s 秒で取得しました (111kB/s)
変更を適用しています...
Preparing...                ########################################### [100%]
   1:rpm-build              ########################################### [100%]
error: cannot open Installtid index using db3 - そのようなファイルやディレクトリはありません (2)
error: cannot open Sigmd5 index using db3 - そのようなファイルやディレクトリはありません (2)
error: cannot open Sha1header index using db3 - そのようなファイルやディレクトリはありません (2)
完了
[root@hackkit tmp]# apt-get install rpm-devel
パッケージリストを読みこんでいます... 完了
依存情報ツリーを作成しています... 完了
以下のパッケージが新たにインストールされます:
  rpm-devel
アップグレード: 0 個, 新規インストール: 1 個, 削除: 0 個, 保留: 1 個
931kB のアーカイブを取得する必要があります。
展開後に 2486kB のディスク容量が追加消費されます。
取得:1 http://updates.vinelinux.org VineSeed/ppc/main rpm-devel 4.0.5-1vl8 [931kB]
931kB を 2s 秒で取得しました (385kB/s)
変更を適用しています...
Preparing...                ########################################### [100%]
   1:rpm-devel              ########################################### [100%]
error: cannot open Installtid index using db3 - そのようなファイルやディレクトリはありません (2)
error: cannot open Sigmd5 index using db3 - そのようなファイルやディレクトリはありません (2)
error: cannot open Sha1header index using db3 - そのようなファイルやディレクトリはありません (2)
完了
[root@hackkit tmp]# apt-get install rpm-utils
パッケージリストを読みこんでいます... 完了
依存情報ツリーを作成しています... 完了
以下のパッケージが新たにインストールされます:
  rpm-utils
アップグレード: 0 個, 新規インストール: 1 個, 削除: 0 個, 保留: 1 個
18.9kB のアーカイブを取得する必要があります。
展開後に 50.7kB のディスク容量が追加消費されます。
取得:1 http://updates.vinelinux.org VineSeed/ppc/plus rpm-utils 1.5-2vl1 [18.9kB]
18.9kB を 0s 秒で取得しました (35.4kB/s)
変更を適用しています...
Preparing...                ########################################### [100%]
   1:rpm-utils              ########################################### [100%]
error: cannot open Installtid index using db3 - そのようなファイルやディレクトリはありません (2)
error: cannot open Sigmd5 index using db3 - そのようなファイルやディレクトリはありません (2)
完了
これで rebuild できるかな?
[root@hackkit tmp]# rpm --rebuild libtermcap-2.0.8-36vl1.src.rpm
libtermcap-2.0.8-36vl1.src.rpm をインストール中
実行中(%prep): /bin/sh -e /var/tmp/rpm-tmp.14652
+ umask 022
+ cd /root/rpm/BUILD
+ cd /root/rpm/BUILD
	:
	:
if [ /var/tmp/libtermcap-root/usr = "/" ]; then \
  cp termcap.src /etc/termcap; \
  #chown bin.bin /etc/termcap; \
fi
/bin/sh: -c: line 2: syntax error: unexpected end of file
make: [install-data] エラー 2 (無視されました)
if [ -f /var/tmp/libtermcap-root/usr/lib/libtermcap.so.2.0.8 ]; then \
   mkdir -p /var/tmp/libtermcap-root/usr/lib/backup; \
   mv /var/tmp/libtermcap-root/usr/lib/libtermcap.so.2.0.8 \
        /var/tmp/libtermcap-root/usr/lib/backup/libtermcap.so.2.0.8.$$; \
fi
	:
	:
書き込み完了: /root/rpm/RPMS/ppc/libtermcap-2.0.8-36vl1.ppc.rpm
書き込み完了: /root/rpm/RPMS/ppc/libtermcap-devel-2.0.8-36vl1.ppc.rpm
実行中(%clean): /bin/sh -e /var/tmp/rpm-tmp.82022
+ umask 022
+ cd /root/rpm/BUILD
+ cd termcap-2.0.8
+ rm -rf /var/tmp/libtermcap-root
+ exit 0
実行中(--clean): /bin/sh -e /var/tmp/rpm-tmp.82022
+ umask 022
+ cd /root/rpm/BUILD
+ rm -rf termcap-2.0.8
+ exit 0
[root@hackkit tmp]#
エラーが出ているが、、、とりあえず、パッケージが作成された。

さて、noexecstack はどこで指定するものやら。


ハックの記録 → 玄箱/HG 予約

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