「rpm-build」コマンドと「SPECファイル」の確認
■アーカイブファイルを用いてRPMファイルをビルドする。失敗。
[bibo-roku@centos Downloads]$ su - mockbuild ←「rpmbuild」コマンド専用に。
パスワード:
[mockbuild@centos ~]$ mkdir download ←任意で作業用にディレクトリ作成。
[mockbuild@centos ~]$ ls
download
[mockbuild@centos download]$ ls
php-5.6.8.tar.bz2 ←「tar.bz2」でダウンロードした。
[mockbuild@centos download]$ rpmbuild -tb php-5.6.8.tar.bz2
エラー: php-5.6.8.tar.bz2 から spec ファイルの読み込みに失敗しました。
|
|
ビルドするために専用ユーザ「mockbuild」になり、ダウンロードしたファイルを格納するディレクトリ「download」を作成しました。
PHP5.6系の最新版は「5.6.8」とのことですので、ダウンロードします。
当方は「startx」コマンドを実施し「FireFox」からダウンロードしました。
「rpmbuild」コマンド、オプション「-tb」(アーカイブファイルを用いてRPMファイルをビルドする)でビルドしたのですが、「SPEC」ファイルがない模様。
ファイルを作成したりはハードルが高いので、次の方法に移行します……。
■SRPMを用いてにRPMをビルドする。失敗。追加インストール。
[mockbuild@centos download]$ wget http://dl.iuscommunity.org/pub/ius/archive/CentOS/6/SRPMS/php56u-5.6.7-1.ius.centos6.src.rpm
[mockbuild@centos download]$ rpmbuild --rebuild --clean php56u-5.6.7-1.ius.centos6.src.rpm
php56u-5.6.7-1.ius.centos6.src.rpm をインストール中です。
エラー: ビルド依存性の失敗:
bzip2-devel は php56u-5.6.7-1.ius.el6.i386 に必要とされています
curl-devel >= 7.9 は php56u-5.6.7-1.ius.el6.i386 に必要とされています
pam-devel は php56u-5.6.7-1.ius.el6.i386 に必要とされています
httpd-devel < 2.4 は php56u-5.6.7-1.ius.el6.i386 に必要とされています
openssl-devel は php56u-5.6.7-1.ius.el6.i386 に必要とされています
sqlite-devel >= 3.6.0 は php56u-5.6.7-1.ius.el6.i386 に必要とされています
zlib-devel は php56u-5.6.7-1.ius.el6.i386 に必要とされています
libedit-devel は php56u-5.6.7-1.ius.el6.i386 に必要とされています
pcre-devel >= 6.6 は php56u-5.6.7-1.ius.el6.i386 に必要とされています
libtool >= 1.4.3 は php56u-5.6.7-1.ius.el6.i386 に必要とされています
libtool-ltdl-devel は php56u-5.6.7-1.ius.el6.i386 に必要とされています
systemtap-sdt-devel は php56u-5.6.7-1.ius.el6.i386 に必要とされています
libacl-devel は php56u-5.6.7-1.ius.el6.i386 に必要とされています
krb5-devel は php56u-5.6.7-1.ius.el6.i386 に必要とされています
libc-client-devel は php56u-5.6.7-1.ius.el6.i386 に必要とされています
postgresql-devel は php56u-5.6.7-1.ius.el6.i386 に必要とされています
unixODBC-devel は php56u-5.6.7-1.ius.el6.i386 に必要とされています
libxml2-devel は php56u-5.6.7-1.ius.el6.i386 に必要とされています
firebird-devel は php56u-5.6.7-1.ius.el6.i386 に必要とされています
net-snmp-devel は php56u-5.6.7-1.ius.el6.i386 に必要とされています
libxslt-devel >= 1.0.18-1 は php56u-5.6.7-1.ius.el6.i386 に必要とされています
libxml2-devel >= 2.4.14-1 は php56u-5.6.7-1.ius.el6.i386 に必要とされています
t1lib-devel は php56u-5.6.7-1.ius.el6.i386 に必要とされています
libjpeg-devel は php56u-5.6.7-1.ius.el6.i386 に必要とされています
libpng-devel は php56u-5.6.7-1.ius.el6.i386 に必要とされています
freetype-devel は php56u-5.6.7-1.ius.el6.i386 に必要とされています
libXpm-devel は php56u-5.6.7-1.ius.el6.i386 に必要とされています
libvpx-devel は php56u-5.6.7-1.ius.el6.i386 に必要とされています
gmp-devel は php56u-5.6.7-1.ius.el6.i386 に必要とされています
tokyocabinet-devel は php56u-5.6.7-1.ius.el6.i386 に必要とされています
libmcrypt-devel は php56u-5.6.7-1.ius.el6.i386 に必要とされています
libtidy-devel は php56u-5.6.7-1.ius.el6.i386 に必要とされています
freetds-devel は php56u-5.6.7-1.ius.el6.i386 に必要とされています
aspell-devel >= 0.50.0 は php56u-5.6.7-1.ius.el6.i386 に必要とされています
recode-devel は php56u-5.6.7-1.ius.el6.i386 に必要とされています
libicu-devel >= 4.0 は php56u-5.6.7-1.ius.el6.i386 に必要とされています
enchant-devel >= 1.2.4 は php56u-5.6.7-1.ius.el6.i386 に必要とされています
[mockbuild@centos download]$ sudo yum list installed httpd24u-devel
---省略---
インストール済みパッケージ
httpd24u-devel.i686 2.4.12-5.ius.centos6 @ius
[bibo-roku@centos Downloads]$ sudo yum install --enablerepo=epel bzip2-devel curl-devel pam-devel httpd-devel openssl-devel sqlite-devel zlib-devel libedit-devel pcre-devel libtool libtool-ltdl-devel systemtap-sdt-devel libacl-devel krb5-devel libc-client-devel postgresql-devel unixODBC-devel libxml2-devel firebird-devel net-snmp-devel libxslt-devel libxml2-devel t1lib-devel libjpeg-devel libpng-devel freetype-devel libXpm-devel libvpx-devel gmp-devel tokyocabinet-devel libmcrypt-devel libtidy-devel freetds-devel aspell-devel recode-devel libicu-devel enchant-devel
--> 衝突を処理しています: httpd24u-2.4.12-5.ius.centos6.i686 は httpd < 2.4.12 と衝突しています
--> 衝突を処理しています: httpd24u-devel-2.4.12-5.ius.centos6.i686 は httpd-devel < 2.4.12 と衝突しています
--> 衝突を処理しています: httpd24u-tools-2.4.12-5.ius.centos6.i686 は httpd-tools < 2.4.12 と衝突しています
--> 依存性解決を終了しました。
エラー: httpd24u-devel conflicts with httpd-devel-2.2.15-39.el6.centos.i686
エラー: httpd24u conflicts with httpd-2.2.15-39.el6.centos.i686
エラー: httpd24u-tools conflicts with httpd-tools-2.2.15-39.el6.centos.i686
|
|
「ソースパッケージ」からのインストールに変更してみます。
「IUS」リポジトリにはアーカイブがあるのでそこから「5.6.7」をダウンロードしました。
今度は「rpmbuild」コマンド、オプション「--rebuild」(SRPMを元にRPMを作成する) 、「--clean」(パッケージが作成された後にビルドツリーを削除する)を実施すると、多数の必要パッケージを提示されてしまいました。
その中に「httpd-devel < 2.4 は php56u-5.6.7-1.ius.el6.i386 に必要とされています」という警告があります。これはつまり、すでにインストールしている「apache 2.4.12」がバージョン高すぎだと言っているようです。これもだめということでしょう。
■「apache 2.4.12」に対応している「PHP」のバージョンを探す。
[mockbuild@centos ~]$ ls
download rpmbuild ←作成されていた。
[mockbuild@centos rpmbuild]$ ls
BUILD BUILDROOT RPMS SOURCES SPECS SRPMS ←確認してみた。
[mockbuild@centos SOURCES]$ ls
macros.php php-5.4.0-dlopen.patch php-5.6.0-noNO.patch php-fpm.service
opcache-default.blacklist php-5.4.0-phpize.patch php-5.6.0-oldpcre.patch php-fpm.sysconfig
opcache.ini php-5.4.7-libdb.patch php-5.6.7-strip.tar.xz php.conf
php-5.2.0-includedir.patch php-5.4.7-odbctimer.patch php-fpm-www.conf php.ini
php-5.2.4-embed.patch php-5.4.8-ldap_r.patch php-fpm.conf php.modconf
php-5.3.0-recode.patch php-5.4.9-fixheader.patch php-fpm.init php.ztsmodconf
php-5.3.1-systzdata-v10.patch php-5.4.9-phpinfo.patch php-fpm.logrotate strip.sh
[mockbuild@centos SPECS]$ ls
php56u.spec ←「SPECファイル」
[mockbuild@centos SPECS]$ less php56.spec
%global base_ver 5.6
%global real_name php
%global ius_suffix 56u
%global phpfpm_user php-fpm
%global phpfpm_group %{phpfpm_user}
%global phpfpm_home %{_localstatedir}/lib/php-fpm
%if 0%{?rhel} >= 7
%global with_systemd 1
%global _macrosdir %{_rpmconfigdir}/macros.d
%global _rundir /run
%else
%global with_systemd 0
%global _macrosdir %{_sysconfdir}/rpm
%global _rundir %{_localstatedir}/run
%endif
# API/ABI check
%global apiver 20131106
%global zendver 20131226
%global pdover 20080721
# Extension version
%global opcachever 7.0.4-dev
# Use for first build of PHP (before pecl/zip and pecl/jsonc)
%global php_bootstrap 0
# Adds -z now to the linker flags
%global _hardened_build 1
# version used for php embedded library soname
%global embed_version 5.6
%global mysql_sock %(mysql_config --socket 2>/dev/null || echo /var/lib/mysql/mysql.sock)
# Regression tests take a long time, you can skip 'em with this
%if %{php_bootstrap}
%global runselftest 0
%else
%{!?runselftest: %global runselftest 1}
%endif
# Use the arch-specific mysql_config binary to avoid mismatch with the
# arch detection heuristic used by bindir/mysql_config.
%global mysql_config %{_libdir}/mysql/mysql_config
# Build ZTS extension or only NTS
%global with_zts 1
%if 0%{?__isa_bits:1}
%global isasuffix -%{__isa_bits}
%else
%global isasuffix %nil
%endif
# /usr/sbin/apsx with httpd < 2.4 and defined as /usr/bin/apxs with httpd >= 2.4
%{!?_httpd_apxs: %{expand: %%global _httpd_apxs %%{_sbindir}/apxs}}
%{!?_httpd_mmn: %{expand: %%global _httpd_mmn %%(cat %{_includedir}/httpd/.mmn 2>/dev/null || echo 0-0)}}
%{!?_httpd_confdir: %{expand: %%global _httpd_confdir %%{_sysconfdir}/httpd/conf.d}}
# /etc/httpd/conf.d with httpd < 2.4 and defined as /etc/httpd/conf.modules.d with httpd >= 2.4
%{!?_httpd_modconfdir: %{expand: %%global _httpd_modconfdir %%{_sysconfdir}/httpd/conf.d}}
%{!?_httpd_moddir: %{expand: %%global _httpd_moddir %%{_libdir}/httpd/modules}}
%{!?_httpd_contentdir: %{expand: %%global _httpd_contentdir /var/www}}
%global with_dtrace 1
%global with_litespeed 1
# build with system libgd
%if 0%{?fedora} < 20
%global with_libgd 0
%else
%global with_libgd 1
%endif
%global with_zip 1
%global with_libzip 0
%if 0%{?fedora} < 18 && 0%{?rhel} < 7
%global db_devel db4-devel
%else
%global db_devel libdb-devel
%endif
Summary: PHP scripting language for creating dynamic web sites
Name: %{real_name}%{?ius_suffix}
Version: 5.6.7
Release: 1.ius%{?dist}
# All files licensed under PHP version 3.01, except
# Zend is licensed under Zend
# TSRM is licensed under BSD
License: PHP and Zend and BSD
Group: Development/Languages
URL: http://www.php.net/
# Need to download official tarball and strip non-free stuff
# wget http://www.php.net/distributions/php-%{version}.tar.xz
# ./strip.sh %{version}
Source0: php-%{version}-strip.tar.xz
Source1: php.conf
Source2: php.ini
Source3: macros.php
Source4: php-fpm.conf
Source5: php-fpm-www.conf
Source6: php-fpm.service
Source7: php-fpm.logrotate
Source8: php-fpm.sysconfig
Source9: php.modconf
Source10: php.ztsmodconf
Source11: strip.sh
Source12: php-fpm.init
# Configuration files for some extensions
Source50: opcache.ini
Source51: opcache-default.blacklist
# Build fixes
Patch5: php-5.2.0-includedir.patch
Patch6: php-5.2.4-embed.patch
Patch7: php-5.3.0-recode.patch
Patch8: php-5.4.7-libdb.patch
# Fixes for extension modules
# https://bugs.php.net/63171 no odbc call during timeout
Patch21: php-5.4.7-odbctimer.patch
# Functional changes
Patch40: php-5.4.0-dlopen.patch
Patch42: php-5.3.1-systzdata-v10.patch
# See http://bugs.php.net/53436
Patch43: php-5.4.0-phpize.patch
# Use -lldap_r for OpenLDAP
Patch45: php-5.4.8-ldap_r.patch
# Make php_config.h constant across builds
Patch46: php-5.4.9-fixheader.patch
# drop "Configure command" from phpinfo output
Patch47: php-5.4.9-phpinfo.patch
# Upstream fixes (100+)
# https://bugs.php.net/bug.php?id=68423
#Patch101: php-5.6.3-load-all-pools.patch
# https://bugs.php.net/bug.php?id=68421
#Patch102: php-5.6.3-access.format.patch
# https://bugs.php.net/bug.php?id=68420
#Patch103: php-5.6.3-listen-localhost.patch
# Security fixes (200+)
# Fixes for tests (300+)
# Revert changes for pcre < 8.34
Patch301: php-5.6.0-oldpcre.patch
# see https://bugzilla.redhat.com/971416
Patch302: php-5.6.0-noNO.patch
BuildRequires: bzip2-devel, curl-devel >= 7.9
BuildRequires: pam-devel
%if 0%{?rhel} < 7
BuildRequires: httpd-devel < 2.4
%else
BuildRequires: httpd-devel
%endif
BuildRequires: libstdc++-devel, openssl-devel
BuildRequires: sqlite-devel >= 3.6.0
BuildRequires: zlib-devel, smtpdaemon, libedit-devel
BuildRequires: pcre-devel >= 6.6
BuildRequires: bzip2, perl, libtool >= 1.4.3, gcc-c++
BuildRequires: libtool-ltdl-devel
%if %{with_libzip}
BuildRequires: libzip-devel >= 0.11
%endif
%if %{with_dtrace}
BuildRequires: systemtap-sdt-devel
%endif
---省略---
|
|
「mockbuild」ユーザーで「rpmbuild」コマンドをしようしたら、ホームディレクトリ内に「rpmbuild」ディレクトリが作成されていました。
前項目でSPECファイルが無いと警告されたときに作られたのかも知れません。
中にもディレクトリが複数作成されており、中を確認してみると「SOURCES」に多数のファイルと「SPECS」に「php56u.spec」なるファイルを確認しました。
見てもさっぱりわかりませんが、以下関係ありそうな文章を発見しました。
# /usr/sbin/apsx with httpd < 2.4 and defined as /usr/bin/apxs with httpd >= 2.4
「apache」が2.4より低いバージョンなら「/usr/sbin/apsx」
「apache」が2.4以上のバージョンなら「/usr/bin/apsx」
ということでしょうか。
# /etc/httpd/conf.d with httpd < 2.4 and defined as /etc/httpd/conf.modules.d with httpd >= 2.4
「apache」が2.4より低いバージョンなら「/etc/httpd/conf.d」
「apache」が2.4以上のバージョンなら「/etc/httpd/conf.modules.d」
ということでしょうか。
%if 0%{?rhel} < 7
BuildRequires: httpd-devel < 2.4
%else
BuildRequires: httpd-devel
%endif
うーん。「rhel」とは「Redhat」のことですかね?
バージョンはCentOSと同じだと聞いたことがありますが、とするとOSのバージョンが7より低いバージョンなら「httpd-develは2.4より低いバージョンを」そうでなければ「httpd-develのバージョンに指定なし」つまり、「CentOS6.6」の場合「httpd-devel」は2.4より低いバージョンということになりますかね。
うーーん。「httpd」について、2.4以上についても説明がある以上この「PHP5.6系」は「apache 2.4.12」で動くのではないのかなぁ……。あ、でも「CentOS7」の場合の説明なのかな。わからない。
もう少しバージョン違いのSPECファイルの確認をしてみることにします。
■複数バージョンのSPECファイル確認。
[mockbuild@centos download]$ ls
5520 5521 5522 5523 564 565 566-1 566-2 567
[mockbuild@centos 567]$ rpm2cpio php56u-5.6.7-1.ius.centos6.src.rpm | cpio -idv php56u.spec
23021 blocks
|
|
PHP「5.5系」「5.6系」の新しいバージョンから遡っていくつかのソースパッケージを作成したディレクトリにダウンロードしました。
それらのソースパッケージから「rpm2cpioとcpio」コマンドを使用して「SPECファイル」を取り出してそれぞれ確認してみました。
バージョン |
SPECファイル内容抜粋 |
可能/不可能 |
5.6.7 |
%if 0%{?rhel} < 7
BuildRequires: httpd-devel < 2.4 |
不可能 |
5.6.6-2 |
%if 0%{?rhel} < 7
BuildRequires: httpd-devel < 2.4 |
不可能 |
5.6.6-1 |
%if 0%{?rhel} < 7
BuildRequires: httpd-devel < 2.4 |
不可能 |
5.6.5 |
%if 0%{?rhel} < 7
BuildRequires: httpd-devel < 2.4 |
不可能 |
5.6.4 |
BuildRequires: httpd-devel >= 2.0.46-1 BuildRequires: httpd |
可能 |
5.5.23 |
%if 0%{?rhel} < 7
BuildRequires: httpd-devel < 2.4 |
不可能 |
5.5.22 |
%if 0%{?rhel} < 7
BuildRequires: httpd-devel < 2.4 |
不可能 |
5.5.21 |
%if 0%{?rhel} < 7
BuildRequires: httpd-devel < 2.4 |
不可能 |
5.5.20 |
BuildRequires: httpd-devel >= 2.0.46-1 |
可能 |
「BuildReqires」とはRPMをビルドする上でインストールされている必要があるRPMを指定するとのこと。
バージョン「5.6.4」と「5.5.20」は「httpd-devel >= 2.0.46-1」とあります。これなら条件として「apache 2.4.12」も満たしているということでしょうか。
ということで、より新しい「PHP5.6.4」ソースパッケージをビルドしてみようと思います。