Vine 3.1(3)libtermcap の作り直し


Vine Seed の時はほったらかしにしてしまった libtermcap の作り直しをする。

準備

[root@hackkit root]# apt-get install vutils
パッケージリストを読みこんでいます... 完了
依存情報ツリーを作成しています... 完了
以下のパッケージが新たにインストールされます:
  vutils
アップグレード: 0 個, 新規インストール: 1 個, 削除: 0 個, 保留: 1 個
27.5kB のアーカイブを取得する必要があります。
展開後に 57.8kB のディスク容量が追加消費されます。
取得:1 ftp://core.ring.gr.jp 3.1/ppc/main vutils 1.22.2-0vl1 [27.5kB]
27.5kB を 0s 秒で取得しました (50.7kB/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)
完了
[root@hackkit root]# mkrpmdir ~
mkrpmdir: created rpm tree in /root/rpm and /root/.rpmmacros.
[root@hackkit root]# apt-get source libtermcap
パッケージリストを読みこんでいます... 完了
依存情報ツリーを作成しています... 完了
226kB のソースアーカイブを取得します。
   1:libtermcap             ########################################### [100%]
[root@hackkit root]# apt-get build-dep libtermcap
パッケージリストを読みこんでいます... 完了
依存情報ツリーを作成しています... 完了
以下のパッケージが新たにインストールされます:
  texinfo
アップグレード: 0 個, 新規インストール: 1 個, 削除: 0 個, 保留: 1 個
777kB のアーカイブを取得する必要があります。
展開後に 1730kB のディスク容量が追加消費されます。
続行しますか? [Y/n]y
取得:1 ftp://core.ring.gr.jp 3.1/ppc/main texinfo 4.7-0vl1 [777kB]
777kB を 1s 秒で取得しました (428kB/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)
完了
[root@hackkit root]# apt-get install rpm-build
パッケージリストを読みこんでいます... 完了
依存情報ツリーを作成しています... 完了
以下のパッケージが新たにインストールされます:
  rpm-build
アップグレード: 0 個, 新規インストール: 1 個, 削除: 0 個, 保留: 1 個
86.5kB のアーカイブを取得する必要があります。
展開後に 189kB のディスク容量が追加消費されます。
取得:1 ftp://core.ring.gr.jp 3.1/ppc/main rpm-build 4.0.5-1vl8 [86.5kB]
86.5kB を 0s 秒で取得しました (110kB/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 root]#

とりあえずそのまま rebuild

[root@hackkit root]# rpm --rebuild libtermcap-2.0.8-36vl1.src.rpm
libtermcap-2.0.8-36vl1.src.rpm をインストール中
実行中(%prep): /bin/sh -e /var/tmp/rpm-tmp.5545
+ umask 022
+ cd /root/rpm/BUILD
	:
	:
+ umask 022
+ cd /root/rpm/BUILD
+ rm -rf termcap-2.0.8
+ exit 0
[root@hackkit root]#
rebuild できるところまでは確認できた。

ソースパッケージの展開

[root@hackkit root]# rpm -i libtermcap-2.0.8-36vl1.src.rpm

noexecstack オプション付加

どこで noexecstack を付けたらよいものかと、こ1時間悩んだ結果 BUILD/termcap-2.0.8/Makefile で gcc -shared を 実行しているところにつけることにした。
[root@hackkit rpm]# cat SOURCES/termcap-2.0.8-noexecstack.patch
*** termcap-2.0.8/Makefile.orig 2004-11-26 09:26:17.000000000 +0900
--- termcap-2.0.8/Makefile      2004-11-26 09:28:22.000000000 +0900
***************
*** 41,47 ****

  $(SHARED_LIB): $(OBJS)
        cd pic; \
!       $(CC) -shared -o ../$@ -Wl,-soname,$(SONAME_SHARED_LIB) $(OBJS) -lc

  pic:
        -if [ ! -d pic ]; then mkdir pic; fi
--- 41,47 ----

  $(SHARED_LIB): $(OBJS)
        cd pic; \
!       $(CC) -shared -o ../$@ -Wl,-z -Wl,noexecstack -Wl,-soname,$(SONAME_SHARED_LIB) $(OBJS) -lc

  pic:
        -if [ ! -d pic ]; then mkdir pic; fi

SPEC ファイル修正

とりあえず上記パッチをあてビルドするようにする修正と、 パッケージバージョンの修正を行う。
[root@hackkit SPECS]# diff -c libtermcap-vl.spec.orig libtermcap-vl.spec
*** libtermcap-vl.spec.orig     2003-06-11 19:02:51.000000000 +0900
--- libtermcap-vl.spec  2004-11-26 09:48:07.000000000 +0900
***************
*** 1,7 ****
  Summary: A basic system library for accessing the termcap database.
  Name: libtermcap
  Version: 2.0.8
! Release: 36vl1
  Source: ftp://metalab.unc.edu/pub/Linux/GCC/termcap-2.0.8.tar.bz2
  Url: ftp://metalab.unc.edu/pub/Linux/GCC/
  Copyright: LGPL
--- 1,7 ----
  Summary: A basic system library for accessing the termcap database.
  Name: libtermcap
  Version: 2.0.8
! Release: 36vl1hk1
  Source: ftp://metalab.unc.edu/pub/Linux/GCC/termcap-2.0.8.tar.bz2
  Url: ftp://metalab.unc.edu/pub/Linux/GCC/
  Copyright: LGPL
***************
*** 20,25 ****
--- 20,26 ----
  Patch10: libtermcap-aaargh.patch
  Patch11: termcap-2.0.8-glibc22.patch
  Patch12: libtermcap-2.0.8-ia64.patch
+ Patch13: termcap-2.0.8-noexecstack.patch
  Requires: termcap
  BuildPrereq: texinfo
  BuildRoot: %{_tmppath}/%{name}-root
***************
*** 60,65 ****
--- 61,67 ----
  %ifarch ia64
  %patch12 -p1 -b .ia64
  %endif
+ %patch13 -p1

  %build
  make AR=%{__ar} CC=%{__cc} CFLAGS="$RPM_OPT_FLAGS -I."
[root@hackkit SPECS]#

ビルド

新しい SEPC ファイルでビルドする
[root@hackkit SPECS]# rpm -ba libtermcap-vl.spec
実行中(%prep): /bin/sh -e /var/tmp/rpm-tmp.35033
+ umask 022
+ cd /root/rpm/BUILD
+ cd /root/rpm/BUILD
+ rm -rf termcap-2.0.8
+ /usr/bin/bzip2 -dc /root/rpm/SOURCES/termcap-2.0.8.tar.bz2
	:
	:
cd pic; \
gcc -shared -o ../libtermcap.so.2.0.8 -Wl,-z -Wl,noexecstack -Wl,-soname,libtermcap.so.2 termcap.o tparam.o version.o -lc
makeinfo termcap.texi --output=termcap.info
+ exit 0
	:
	:
書き込み完了: /root/rpm/SRPMS/libtermcap-2.0.8-36vl1hk1.src.rpm
書き込み完了: /root/rpm/RPMS/ppc/libtermcap-2.0.8-36vl1hk1.ppc.rpm
書き込み完了: /root/rpm/RPMS/ppc/libtermcap-devel-2.0.8-36vl1hk1.ppc.rpm
実行中(%clean): /bin/sh -e /var/tmp/rpm-tmp.55566
+ umask 022
+ cd /root/rpm/BUILD
+ cd termcap-2.0.8
+ rm -rf /var/tmp/libtermcap-root
+ exit 0
[root@hackkit SPECS]#

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

作成したパッケージをインストールする
[root@hackkit SPECS]# cd ../RPMS/ppc/
[root@hackkit ppc]# ls
libtermcap-2.0.8-36vl1hk1.ppc.rpm  libtermcap-devel-2.0.8-36vl1hk1.ppc.rpm
[root@hackkit ppc]# rpm -Uvh *.rpm
準備中...                   ########################################### [100%]
   1:libtermcap             ########################################### [ 50%]
   2:libtermcap-devel       ########################################### [100%]
[root@hackkit ppc]# rpm -q libtermcap
libtermcap-2.0.8-36vl1hk1
[root@hackkit ppc]# rpm -q libtermcap-devel
libtermcap-devel-2.0.8-36vl1hk1
[root@hackkit ppc]#
さて、これで動くかな?

kernel 2.4.17 で起動

再起動する。
Vine Linux 3.1 (Pichon Lalande)
Kernel 2.4.17_kuro-box on a ppc
login: 
とりあえず、起動するようになった。

ハックの記録 → Vine 3.1(4)一喜一憂
LinkStation/玄箱 をハックしよう

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