Я создаю rpms различных расширений PHP, которые будут устанавливаться вручную после PHP7, для которого я сам создал rpm (в данном случае версия 7.1.4).
В моем spec-файле для определенного расширения (в данном случае gd) я указал, что PHP является обязательным пакетом. Однако, когда вызывается rpmbuild, он не показывает это требование в своих выходных данных, и, кроме того, rpm gd может быть установлен без уже установленного PHP7. Более того, когда я делаю это, я не получаю никаких ошибок, несмотря на то, что 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
Я пробовал варианты для директивы ‘Требуется’, такие как указание определенных версий, и даже пробовал другой пакет, 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 явно что-то делает с «Требуется». Я также установил rpm Apache, который был собран со специфицированным файлом, и в этом случае были замечены директивы Require.
Requires
(так; с s) теги работают отлично. Вывод, который вы видите в конце, взят из rpmbuild
пытаясь определить некоторые требования автоматически.
Вы можете проверить требования к файлу rpm, созданному с помощью
rpm -qp <path-to-rpm> --requires