![](https://mekou.com/linux-magazine/wp-content/uploads/2017/11/200px-RPM_Logo.svg_.png)
前回記事 展開したファイルをコンパイル (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