スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

apache 2.2.19をrpmbuildでRPM化してインストール

OSはScientific Linux 6.0 x86_64。

とりあえずrpmbuildしてみる

# rpmbuild -tb --clean --rmspec httpd-2.2.19.tar.gz

依存性のエラー
警告: line 16: buildprereq is deprecated: BuildPrereq: apr-devel, apr-util-devel, openldap-devel, db4-devel, expat-devel, findutils, perl, pkgconfig, pcre-devel >= 5.0
警告: line 17: buildprereq is deprecated: BuildPrereq: /usr/bin/apr-1-config, /usr/bin/apu-1-config
警告: line 19: prereq is deprecated: Prereq: /sbin/chkconfig, /bin/mktemp, /bin/rm, /bin/mv
警告: line 20: prereq is deprecated: Prereq: sh-utils, textutils, /usr/sbin/useradd
警告: line 59: buildprereq is deprecated: BuildPrereq: openssl-devel
警告: line 60: prereq is deprecated: Prereq: openssl, dev, /bin/cat
エラー: ビルド依存性の失敗:
apr-devel は httpd-2.2.19-1.x86_64 に必要とされています
apr-util-devel は httpd-2.2.19-1.x86_64 に必要とされています
expat-devel は httpd-2.2.19-1.x86_64 に必要とされています
pcre-devel >= 5.0 は httpd-2.2.19-1.x86_64 に必要とされています
/usr/bin/apr-1-config は httpd-2.2.19-1.x86_64 に必要とされています
/usr/bin/apu-1-config は httpd-2.2.19-1.x86_64 に必要とされています

apr系のインストール状況を見てみる

# rpm -qa | grep apr

apr-util-1.3.9-3.el6_0.1.x86_64
apr-1.3.9-3.el6_1.2.x86_64
apr-util-ldap-1.3.9-3.el6_0.1.x86_64

足りないのをインストール

# yum install apr-devel apr-util-devel expat-devel pcre-devel

で、もう1回rpmbuildしてみる

# rpmbuild -tb --clean --rmspec httpd-2.2.19.tar.gz

またエラー
・・・

checking whether Distcache is required... yes (specified)
checking distcache/dc_client.h usability... no
checking distcache/dc_client.h presence... no
checking for distcache/dc_client.h... no
configure: error: distcache support failed: can't include distcache headers
エラー: /var/tmp/rpm-tmp.vxrGDU の不正な終了ステータス (%build)

RPM ビルドエラー:
line 16: buildprereq is deprecated: BuildPrereq: apr-devel, apr-util-devel, openldap-devel, db4-devel, expat-devel, findutils, perl, pkgconfig, pcre-devel >= 5.0
line 17: buildprereq is deprecated: BuildPrereq: /usr/bin/apr-1-config, /usr/bin/apu-1-config
line 19: prereq is deprecated: Prereq: /sbin/chkconfig, /bin/mktemp, /bin/rm, /bin/mv
line 20: prereq is deprecated: Prereq: sh-utils, textutils, /usr/sbin/useradd
line 59: buildprereq is deprecated: BuildPrereq: openssl-devel
line 60: prereq is deprecated: Prereq: openssl, dev, /bin/cat
/var/tmp/rpm-tmp.vxrGDU の不正な終了ステータス (%build)

なるほど、distcacheが無いのか。2.2.18の時と同じだなと思いインストール

# yum install distcache distcache-devel
Loaded plugins: refresh-packagekit
Setting up Install Process
No package distcache available.
No package distcache-devel available.
Error: Nothing to do

???無い…。RHEL6系ではdistcacheはないみたい。

ということでhttp://www.distcache.org/からソースダウンロードしてビルドしてみる

# tar zxf distcache-1.5.1.tar.gz
# cd distcache-1.5.1
# ./configure --prefix=/usr --libdir=/usr/lib64
# make

そしてエラー
・・・

gcc -DHAVE_CONFIG_H -I. -I. -I.. -I../include -I.. -g -O2 -c proto_fd.c -MT proto_fd.lo -MD -MP -MF .deps/proto_fd.TPlo -o proto_fd.o
proto_fd.c: In function 'addr_parse':
proto_fd.c:177: error: 'LONG_MIN' undeclared (first use in this function)
proto_fd.c:177: error: (Each undeclared identifier is reported only once
proto_fd.c:177: error: for each function it appears in.)
proto_fd.c:177: error: 'LONG_MAX' undeclared (first use in this function)
make[2]: *** [proto_fd.lo] エラー 1
make[2]: ディレクトリ `/mnt/v4/nas/nas01/ssz/src/distcache-1.5.1/libnal' から出ます
make[1]: *** [all-recursive] エラー 1
make[1]: ディレクトリ `/mnt/v4/nas/nas01/ssz/src/distcache-1.5.1' から出ます
make: *** [all] エラー 2

LONG_MINとかLONG_MAXが分からないとな。limits.hをincludeすればいいんだろう

# vi libnal/proto_fd.c

#include <limits.h>を追加

で、再度distcacheをビルド

# make distclean
# ./configure --prefix=/usr --libdir=/usr/lib64
# make
# checkinstall --inspect

OKの模様。distcacheインストール

# cd /root/rpmbuild/RPMS/x86_64/
# rpm -ivh distcache-1.5.1-1.x86_64.rpm

ついでにapacheのspecファイルのdeprecatedの部分を直しておく

# tar zxf httpd-2.2.19.tar.gz
# cd httpd-2.2.19
# vi httpd.spec

PrereqをRequiresに文字列変換

# cd ../
# cp -p httpd-2.2.19.tar.gz httpd-2.2.19.tar.gz.ORG
# rm httpd-2.2.19.tar.gz
# tar zcf httpd-2.2.19.tar.gz httpd-2.2.19

これで万事OKだろうと思い、またまたapacheをrpmbuild

# rpmbuild -tb --clean --rmspec httpd-2.2.19.tar.gz

エラー
・・・

/usr/bin/ld: /usr/lib64/libdistcache.a(dc_client.o): relocation R_X86_64_32S against `.rodata' can not be used when making a shared object; recompile with -fPIC
/usr/lib64/libdistcache.a: could not read symbols: Bad value
collect2: ld returned 1 exit status
make[4]: *** [mod_ssl.la] Error 1
make[4]: Leaving directory `/root/rpmbuild/BUILD/httpd-2.2.19/prefork/modules/ssl'
make[3]: *** [shared-build-recursive] Error 1
make[3]: Leaving directory `/root/rpmbuild/BUILD/httpd-2.2.19/prefork/modules/ssl'
make[2]: *** [shared-build-recursive] Error 1
make[2]: Leaving directory `/root/rpmbuild/BUILD/httpd-2.2.19/prefork/modules'
make[1]: *** [shared-build-recursive] Error 1
make[1]: Leaving directory `/root/rpmbuild/BUILD/httpd-2.2.19/prefork'
make: *** [all-recursive] Error 1
エラー: /var/tmp/rpm-tmp.CsAPom の不正な終了ステータス (%build)

RPM ビルドエラー:
/var/tmp/rpm-tmp.CsAPom の不正な終了ステータス (%build)

なるほど、そういうことですか。distcacheをshared objectでビルドし直す

# rpm -e distcache-1.5.1-1.x86_64
# rm -rf distcache-1.5.1
# tar zxf distcache-1.5.1.tar.gz
# cd distcache-1.5.1
※上で書いたproto_fd.cでlimits.hをincludeするのを忘れずに
# configure --prefix=/usr --libdir=/usr/lib64 --enable-shared
# make
# checkinstall --inspect

OK。distcacheインストール

# cd /root/rpmbuild/RPMS/x86_64/
# rpm -ivh distcache-1.5.1-1.x86_64.rpm

今度こそ大丈夫だろうということでまたまたまたapacheをrpmbuild

# rpmbuild -tb --clean --rmspec httpd-2.2.19.tar.gz

OK。

最後にapacheについて既存環境のインストール状況調査

# rpm -qa | grep http
httpd-tools-2.2.15-5.sl6.x86_64
httpd-2.2.15-5.sl6.x86_64

gnome-user-shareがhttpdに依存していて、httpdはhttpd-toolsに依存しているようで普通には消せない。
なので、強制削除(あるいはgnome-user-shareが必要なければまとめて削除すれば--nodepsはいらない)

# rpm --nodeps -e httpd-tools-2.2.15-5.sl6.x86_64 httpd-2.2.15-5.sl6.x86_64

で、2.2.19をインストール

# cd /root/rpmbuild/RPMS/x86_64
# rpm -ivh httpd-2.2.19-1.x86_64.rpm httpd-devel-2.2.19-1.x86_64.rpm

エラー
エラー: 依存性の欠如:
apr >= 1.4.2 は httpd-2.2.19-1.x86_64 に必要とされています
apr-util >= 1.3.10 は httpd-2.2.19-1.x86_64 に必要とされています
apr-devel >= 1.4.2 は httpd-devel-2.2.19-1.x86_64 に必要とされています
apr-util-devel >= 1.3.10 は httpd-devel-2.2.19-1.x86_64 に必要とされています

最悪だ。結局2.2.18の時と同じようにしなきゃいけなかったみたい。
とりあえずaprの最新版をダウンロードしてrpmbuild&インストール(=アップデート)

# rpmbuild -tb --clean --rmspec apr-1.4.5.tar.bz2
# rpm -Uvh apr-1.4.5-1.x86_64.rpm apr-devel-1.4.5-1.x86_64.rpm

で、apr-utilなんだけどそのままrpmbuildするとfreetds-develが依存パッケージなんだがRHEL6系にはないみたい。
そもそもfreetdsは要らないからspecを編集して排除する

# tar jxf apr-util-1.3.12.tar.bz2
# cd apr-util-1.3.12
# vi apr-util.spec

関連するところを片っ端からコメントアウトもしくは削除
#%package freetds
#Group: Development/Libraries
#Summary: APR utility library FreeTDS DBD driver
#BuildRequires: freetds-devel
#Requires: apr-util = %{version}-%{release}

#%description freetds
#This package provides the FreeTDS driver for the apr-util DBD
#(database abstraction) interface.

--with-sqlite3 --with-pgsql --with-mysql --with-freetds --with-odbc \ ← 削除
--with-sqlite3 --with-pgsql --with-mysql --with-odbc \ ← 追加

#%files freetds
#%defattr(-,root,root,-)
#%{_libdir}/apr-util-%{apuver}/apr_dbd_freetds*

# cd ../
# cp -p apr-util-1.3.12.tar.bz2 apr-util-1.3.12.tar.bz2.ORG
# tar jcf apr-util-1.3.12.tar.bz2 apr-util-1.3.12

これも依存パッケージ。yumにあるからインストールしておく

# yum install unixODBC-devel

でapr-utilをrpmbuild&インストール

# rpmbuild -tb --clean --rmspec apr-util-1.3.12.tar.bz2
# cd /root/rpmbuild/RPMS/x86_64/
# rpm -Uvh apr-util-1.3.12-1.x86_64.rpm apr-util-devel-1.3.12-1.x86_64.rpm apr-util-ldap-1.3.12-1.x86_64.rpm

で、やっとゴール

# rpm -ivh httpd-2.2.19-1.x86_64.rpm httpd-devel-2.2.19-1.x86_64.rpm

この記事のトラックバックURL

http://ysmt.blog21.fc2.com/tb.php/336-1c07bbdb

コメント

コメントする

管理者にだけ表示を許可する

Template Designed by DW99

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。