2007/02/08

RHL9用のbind-9.2.8.*.rpmを作る

Red Hat Linux release 9 (Shrike)は、EOLになって久しい。なので当然、RPMパッケージの最新版は手に入らない。が、なんとかしなければならないときがある。実に情けない感じだが…

注意:この手順は私がてきとーにハックしたもので、内容の正しさについては何の保障もしません。できたRPMを使う場合は、自己責任で

大まかな手順は以下の通り。
  1. 場所の準備
  2. 材料の準備
  3. ビルド
まずはRPMをビルド(build)するための場所を準備する。 適当な作業ディレクトリ(例えば、自分のホームディレクトリ)に移動し、次のように実行する。
$ mkdir -p RPM/BUILD RPM/RPMS/i386 RPM/SOURCES RPM/SRPMS RPM/SPECS
$ echo %_topdir $PWD/RPM > ~/.rpmmacros
ここで、~/.rpmmacrosは、RPMをビルドするための設定ファイル。以下、この作業ディレクトリを%{_topdir}と呼ぶ。

次にビルドする材料を準備する。一つは、RH9用のbindパッケージを作るためのsrc.rpm。もう一つは、BINDの最新版のtarball。Fedora Lagacy Projectは既に終了しているが、ミラーサイトはまだ健在なところが多いので、そこから入手する。BINDの最新版は、ISCから入手すればよい。%{_topdir}に移動し、例えば次のように実行する。
$ cd RPM/SRPMS/
$ wget http://ftp.kddilabs.jp/Linux/packages/fedora.legacy/redhat/9/os/SRPMS/bin
d-9.2.1-16.src.rpm
<<略>>
100%[====================================>] 3,998,722 263.41K/s ETA 00:00

00:18:36 (263.41 KB/s) - `bind-9.2.1-16.src.rpm' を保存しました [3998722/3998722]

$ cd ../SOURCES/
$ wget http://ftp.isc.org/isc/bind9/9.2.8/bind-9.2.8.tar.gz
<<略>>
100%[====================================>] 5,208,805 284.40K/s ETA 00:00

00:19:50 (284.40 KB/s) - `bind-9.2.8.tar.gz' を保存しました [5208805/5208805]

$
この%{_topdir}/RPM/SRPMS/bind-9.2.1-16.src.rpmの中からスペックファイルを取り出し%{_topdir}/RPM/SPECSへ、パッチその他(*.patch, bind-manpages.tar.bz2, keygen.c, named.init, named.logrotate, named.sysconfig, rfc1912.txt)を取り出し%{_topdir}/RPM/SOURCESへ置く。
$ rpm2cpio ../SRPMS/bind-9.2.1-16.src.rpm | cpio -i "*.patch" bind-manpages.tar.bz2 keygen.c named.init named.logrotate named.sysconfig rfc1912.txt
7931 blocks
$ ls
bind-9.2.0rc3-varrun.patch bind-9.2.8.tar.gz named.init rfc1912.txt
bind-9.2.1-config.patch bind-manpages.tar.bz2 named.logrotate
bind-9.2.1-key.patch keygen.c named.sysconfig
$ cd ../SPECS/
$ rpm2cpio ../SRPMS/bind-9.2.1-16.src.rpm | cpio -i bind.spec
7931 blocks
$ ls
bind.spec
$
続いて、bind.specに以下のパッチbind.spec.patch:
--- bind.spec~  2007-02-08 23:55:33.000000000 +0900
+++ bind.spec 2007-02-08 23:34:20.000000000 +0900
@@ -3,7 +3,7 @@
Name: bind
License: BSD-like
Group: System Environment/Daemons
-Source: ftp://ftp.isc.org/isc/bind9/%{version}/bind-%{version}.tar.bz2
+Source: ftp://ftp.isc.org/isc/bind9/%{version}/bind-%{version}.tar.gz
Source1: bind-manpages.tar.bz2
Source2: named.sysconfig
Source3: named.init
@@ -12,11 +12,11 @@
Source6: rfc1912.txt
Patch: bind-9.2.0rc3-varrun.patch
Patch1: bind-9.2.1-key.patch
-Patch2: bind-9.2.1-config.patch
+Patch2: bind-9.2.8-nslookup.patch
Url: http://www.isc.org/products/BIND/
Buildroot: %{_tmppath}/%{name}-root
-Version: 9.2.1
-Release: 16
+Version: 9.2.8
+Release: 1

BuildRequires: openssl-devel gcc glibc-devel >= 2.2.5-26 glibc-kernheaders >= 2.4-7.10 libtool pkgconfig

@@ -61,7 +61,7 @@
%setup -q -n %{name}-%{version}
%patch -p1 -b .varrun
%patch1 -p1 -b .key
-%patch2 -p1 -b .configure
+%patch2 -p1 -b .nslookup

%build
#CHROOT=/etc/named/chroot
を当てる。
$ patch < bind.spec.patch
patching file bind.spec
$
また、次のパッチファイル%{_topdir}/RPM/SOURCES/bind-9.2.8-nslookup.patchを準備する。
--- bind-9.2.8/bin/dig/Makefile.in~ 2004-08-19 08:22:52.000000000 +0900
+++ bind-9.2.8/bin/dig/Makefile.in 2007-02-08 23:38:35.000000000 +0900
@@ -48,7 +48,7 @@

SRCS = dig.c dighost.c host.c nslookup.c

-MANPAGES = dig.1 host.1 nslookup.1
+MANPAGES = dig.1 host.1 # nslookup.1

HTMLPAGES = dig.html host.html nslookup.html

これで材料の準備は終わり。

最後、ビルド。
$ cd ../SPECS/
$ rpmbuild -bb bind.spec > build.log 2>&1&
[1] 9557
$
後は、tail -f build.logなりでビルドが終了するのを待つ。ビルドが終わると、%{_topdir}/RPM/RPMS/i386にRPMができている。
$ cd ../RPMS/i386/
$ ls
bind-9.2.8-1.i386.rpm bind-devel-9.2.8-1.i386.rpm
bind-debuginfo-9.2.8-1.i386.rpm bind-utils-9.2.8-1.i386.rpm
$

0 件のコメント: