ダウンロードしてきた SRPM をビルドする

LINEで送る
Pocket

前回記事 展開したファイルをコンパイル (configure, make) 出来ない

SRPM とは、RPM パッケージを作成する事が出来るソースパッケージです。SRPM の中には、ソースコード、パッチ、構築手順を記した spec ファイル等が含まれており、SRPM をインストールし、spec ファイルをパラーメータにビルド (rpmbuild)を行うとディストリビュータが配布している RPM パッケージと同等の物を作る事が出来ます。

ターボールをダウロードし、configure, make した前回記事より簡単にバイナリパッケージを作成する事が出来るので紹介していきましょう。

まず、SRPM をダウンロードしなければいけませんが、yumdownloader という ftp リポジトリより rpm をダウンロードしてくれる yum ユーティリティコマンドを使ってみましょう。yumdownloader は、yum-utils パッケージに入っています。

# yum install yum-utils
# yumdownloader httpd           <- RPM をダウンロードする場合
Loaded plugins: refresh-packagekit
httpd-2.4.6-67.el7.centos.6.x86_64.rpm
* RPM をダウンロードする場合
# yumdownloader --source httpd          <- SRPM をダウンロードする場合
Loaded plugins: refresh-packagekit
Enabling updates-source repository
Enabling fedora-source repository
httpd-2.4.6-67.el7.centos.6.src.rpm
* httpd-2.4.6-67.el7.centos.6.src.rpm の中身
# rpm -qpl httpd-2.4.6-67.el7.centos.6.src.rpm
   :
01-ldap.conf
01-session.conf
README.confd
action-configtest.sh
action-graceful.sh
centos-noindex.tar.gz
htcacheclean.service
htcacheclean.sysconf
   :
httpd-2.4.1-corelimit.patch
httpd-2.4.1-deplibs.patch
httpd-2.4.1-selinux.patch
httpd-2.4.6-CVE-2014-0118.patch
httpd-2.4.6-CVE-2014-0226.patch
httpd-2.4.6-CVE-2014-0231.patch
   :
httpd.conf
httpd.logrotate
httpd.service
httpd.spec
httpd.sysconf
httpd.tmpfiles
manual.conf
ssl.conf
userdir.conf
welcome.conf
* SRPM をインストール
# rpm -ivh httpd-2.4.6-67.el7.centos.6.src.rpm

CentOS では、SPEC ファイルは、~/rpmbuild/SPECS/ に、その他のファイルは ~/rpmbuild/SOURCES/ に保存されますがディストリビュータによりインストールされる先のディレクトリは異なります。

# rpmbuild -ba rpmbuild/SPECS/httpd.spec
エラー: ビルド依存性の失敗:
	autoconf は httpd-2.4.6-67.el7.centos.6.x86_64 に必要とされています
	xmlto は httpd-2.4.6-67.el7.centos.6.x86_64 に必要とされています
	zlib-devel は httpd-2.4.6-67.el7.centos.6.x86_64 に必要とされています
	libselinux-devel は httpd-2.4.6-67.el7.centos.6.x86_64 に必要とされています
	lua-devel は httpd-2.4.6-67.el7.centos.6.x86_64 に必要とされています
	apr-devel >= 1.4.0 は httpd-2.4.6-67.el7.centos.6.x86_64 に必要とされています
	apr-util-devel >= 1.2.0 は httpd-2.4.6-67.el7.centos.6.x86_64 に必要とされています
	pcre-devel >= 5.0 は httpd-2.4.6-67.el7.centos.6.x86_64 に必要とされています
	systemd-devel は httpd-2.4.6-67.el7.centos.6.x86_64 に必要とされています
	openssl-devel >= 1:1.0.1e-37 は httpd-2.4.6-67.el7.centos.6.x86_64 に必要とされています
	libxml2-devel は httpd-2.4.6-67.el7.centos.6.x86_64 に必要とされています

ビルドを行おうとすると、また依存関係のエラーが出力されました。ここまで読んできた読者であれば、上記問題を解決出来るのではないでしょうか。
パッケージについて読んで頂いていれば分かると思いますが、httpd-2.4.6-67.el7.centos.6.src.rpm
をビルドする為には、autoconf, xmlto, zlib-devel, libselinux-devel, lua-devel, apr-devel, apr-util-devel, pcre-devel, systemd-devel, openssl-devel, libxml2-devel
の11のパッケージ、またはコマンドが必要なのです。また、前回記事で紹介した openssl-devel が不足していたエーラーも分かりやすい形式で表示されています。

*注意事項
apr-devel >= 1.4.0 とは、バージョン 1.4.0 以上の apr-devel が必要である事を表します。しかしバージョンによる依存はディストリビュータが解決しリポジトリに公開しているので、ディストリビュータのリポジトリを使用している限りは気にする必要はありません。

よってこの不足していると思われるパッケージをパラーメータにし、yum install を実行してみましょう。

# yum install autoconf xmlto zlib-devel libselinux-devel lua-devel apr-devel apr-util-devel pcre-devel systemd-devel openssl-devel libxml2-devel

コンパイラーパッケージの不足エラーは依存関係に出力されないので、インストールされたいない場合は gcc パッケージもインストールします。
# yum install gcc

すると、表示されていた11の依存エラーは全てパッケージ名が表示されていたようで、全てインストールする事が出来ました。そしてもう一度ビルドを試みると RPM を作成する事が出来ました。

# rpmbuild -ba ~/rpmbuild/SPECS/httpd.spec
実行中(%prep): /bin/sh -e /var/tmp/rpm-tmp.n2npit
+ umask 022
+ cd /root/rpmbuild/BUILD
+ cd /root/rpmbuild/BUILD
+ rm -rf httpd-2.4.6
+ /usr/bin/bzip2 -dc /root/rpmbuild/SOURCES/httpd-2.4.6.tar.bz2
+ /usr/bin/tar -xf -
+ STATUS=0
+ '[' 0 -ne 0 ']'
+ cd httpd-2.4.6
+ /usr/bin/chmod -Rf a+rX,u+w,g-w,o-w .
+ echo 'Patch #1 (httpd-2.4.1-apctl.patch):'
Patch #1 (httpd-2.4.1-apctl.patch):
+ /usr/bin/patch -p1 -b --suffix .apctl --fuzz=0
              :
ファイルの処理中: httpd-debuginfo-2.4.6-67.el7.centos.6.x86_64
Provides: httpd-debuginfo = 2.4.6-67.el7.centos.6 httpd-debuginfo(x86-64) = 2.4.6-67.el7.centos.6
Requires(rpmlib): rpmlib(FileDigests) <= 4.6.0-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1 rpmlib(CompressedFileNames) <= 3.0.4-1
パッケージに含まれないファイルの検査中: /usr/lib/rpm/check-files /root/rpmbuild/BUILDROOT/httpd-2.4.6-67.el7.centos.6.x86_64
書き込み完了: /root/rpmbuild/SRPMS/httpd-2.4.6-67.el7.centos.6.src.rpm
書き込み完了: /root/rpmbuild/RPMS/x86_64/httpd-2.4.6-67.el7.centos.6.x86_64.rpm
書き込み完了: /root/rpmbuild/RPMS/x86_64/httpd-devel-2.4.6-67.el7.centos.6.x86_64.rpm
書き込み完了: /root/rpmbuild/RPMS/noarch/httpd-manual-2.4.6-67.el7.centos.6.noarch.rpm
書き込み完了: /root/rpmbuild/RPMS/x86_64/httpd-tools-2.4.6-67.el7.centos.6.x86_64.rpm
書き込み完了: /root/rpmbuild/RPMS/x86_64/mod_ssl-2.4.6-67.el7.centos.6.x86_64.rpm
書き込み完了: /root/rpmbuild/RPMS/x86_64/mod_proxy_html-2.4.6-67.el7.centos.6.x86_64.rpm
書き込み完了: /root/rpmbuild/RPMS/x86_64/mod_ldap-2.4.6-67.el7.centos.6.x86_64.rpm
書き込み完了: /root/rpmbuild/RPMS/x86_64/mod_session-2.4.6-67.el7.centos.6.x86_64.rpm
書き込み完了: /root/rpmbuild/RPMS/x86_64/httpd-debuginfo-2.4.6-67.el7.centos.6.x86_64.rpm
実行中(%clean): /bin/sh -e /var/tmp/rpm-tmp.liomwo
+ umask 022
+ cd /root/rpmbuild/BUILD
+ cd httpd-2.4.6
+ rm -rf /root/rpmbuild/BUILDROOT/httpd-2.4.6-67.el7.centos.6.x86_64
+ exit 0
LINEで送る
Pocket

  • このエントリーをはてなブックマークに追加

アマゾン

LINEで送る
Pocket

記事が面白かった。為になったと思ったら。下記リンクより商品を購入頂くと筆者は喜び記事を更新致します。


LINEで送る
Pocket

コメントを残す

*

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください