0

我正在创建要在 PHP7 之后手动安装的各种 PHP 扩展的 rpm,我已经为其构建了一个 rpm(在这种情况下,版本是 7.1.4)。

在我的特定扩展(在本例中为 gd)的规范文件中,我指定 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

我尝试了 'Requires' 指令的变体,比如指定某些版本,甚至完全尝试了一个不同的包 nano,只是为了看看它是否有效,但 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 显然正在使用“Requires”做一些事情。我还安装了一个 Apache 的 rpm,它是用一个规范文件构建的,在这种情况下,'Requires' 指令被注意到了。

4

2 回答 2

1

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

于 2017-05-11T13:38:53.240 回答
0

( Requiressic; 带有s ) 标签完美地工作。您最后看到的输出是rpmbuild尝试自动确定一些要求。

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

rpm -qp <path-to-rpm> --requires
于 2017-05-11T12:07:52.643 回答