2017-05-11 82 views
0

我正在创建各种PHP扩展的rpms,以在PHP7之后手动安装,我自己已经为此构建了一个rpm(本例中为7.1.4)。为什么rpmbuild在spec文件中没有包含手动的'Requires'指令?

在我的一个特定的扩展(在这种情况下gd)spec文件我已经指定,PHP是一个必需的软件包。但是,当调用rpmbuild时,它不会在其输出中显示此需求,此外,可以在不安装PHP7的情况下安装rpm gd。此外,当我这样做时,尽管gd被告知写入一个不存在的php.ini文件,但我没有得到任何错误。

这里是我的gd.spec文件:

%define ext_name gd 
%define ext $RPM_BUILD_ROOT/usr/local/lib/php/extensions/no-debug-zts-20160303 
%define sodir modules/%{ext_name}.so 
%define head $RPM_BUILD_ROOT/usr/local/include/php/ext 
%define phpini /usr/local/lib/php.ini 

Name: php-gd 
Summary: PHP gd extension 
Group: Development/Languages 
Version: 7.1.4 
Release: 1 
Source: php-gd-7.1.4.tar.gz 
URL: http://www.php.net/ 
License: PHP 
Packager: PHP Group 
BuildRoot: /home/john/rpmbuild/BUILDROOT/php-gd-7.1.4 
Requires: php 

%description 
PHP gd extension. 

%prep 

%setup -q 

%build 
phpize 
./configure 
make 

%install 
install -m 755 -d %{ext} 
install -m 644 %{sodir} %{ext} 
install -m 755 -d %{head}/%{ext_name}/libgd 
install -m 644 *h %{head}/%{ext_name} 
install -m 644 libgd/*h %{head}/%{ext_name}/libgd 

%post 
echo 'extension=%{ext_name}.so' >> %{phpini} 

%postun 
sed -i.bak '/extension=%{ext_name}.so/d' %{phpini} 

%clean 
rm -rf $RPM_BUILD_ROOT 

%files 
%defattr(-,root,root) 

/usr/local/lib/php/extensions/no-debug-zts-20160303/%{ext_name}.so 
/usr/local/include/php/ext 

我想变化的“要求”指令,如指定特定的版本,甚至干脆尝试了不同的包装,纳米技术,只是为了看看是否奏效,但rpmbuild从来没有拿起它。

这是的rpmbuild输出的尾端:

... 
Processing files: php-gd-7.1.4-1.x86_64 
Provides: php-gd = 7.1.4-1 php-gd(x86-64) = 7.1.4-1 
Requires(interp): /bin/sh /bin/sh 
Requires(rpmlib): rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(FileDigests) <= 4.6.0-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1 
Requires(post): /bin/sh 
Requires(postun): /bin/sh 
Processing files: php-gd-debuginfo-7.1.4-1.x86_64 
Provides: php-gd-debuginfo = 7.1.4-1 php-gd-debuginfo(x86-64) = 7.1.4-1 
Requires(rpmlib): rpmlib(FileDigests) <= 4.6.0-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1 rpmlib(CompressedFileNames) <= 3.0.4-1 
Checking for unpackaged file(s): /usr/lib/rpm/check-files /home/john/rpmbuild/BUILDROOT/php-gd-7.1.4-1.x86_64 
... 

这表明的rpmbuild显然做的东西“需要”。我还安装了一个用spec文件构建的Apache的rpm,在那个例子中,'Requires'指令被注意到了。

回答

0

Requires(原文如此; s)标记完美地工作。你在最后看到的输出是从rpmbuild试图自动确定一些要求。

您可以检查rpm文件的要求,使用

rpm -qp <path-to-rpm> --requires 
1

出品[解决] - 有没有问题。令人尴尬的是,我尝试的rpm是一个较旧的版本,它没有包含require指令。 php-gd-7.1.4-1.x86_64.rpm和php-gd-7.1.4.x86_64.rpm之间发生混淆

相关问题