Почему rpmbuild не включает директиву «Требуется» в файле спецификации?

Я создаю 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.

0

Решение

[Решено] — Проблем не было. Смущает то, что число оборотов, которые я пробовал, было более старым, в котором не содержалась директива require. Произошла путаница между php-gd-7.1.4-1.x86_64.rpm и php-gd-7.1.4.x86_64.rpm

1

Другие решения

Requires (так; с s) теги работают отлично. Вывод, который вы видите в конце, взят из rpmbuild пытаясь определить некоторые требования автоматически.

Вы можете проверить требования к файлу rpm, созданному с помощью

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

По вопросам рекламы [email protected]