Я строю свои RPM как таковые:
rpmbuild -bb СПЕЦИФИКАЦИЯ / python.spec
Со следующим файлом спецификации:
%define _topdir /home/rpmbuild/python
%define name Python
%define release 1
%define version 2.6.4
%define buildroot %{_topdir}/%{name}-%{version}-root
BuildRoot: %{buildroot}
Summary: python
License: GPL
Name: %{name}
Version: %{version}
Release: %{release}
Source: %{name}-%{version}.tar.bz2
Group: Python
%description
Python, compiled by Jon Haddad for CentOS
%prep
%setup -q
%build
./configure --prefix=/usr/local
make
%install
%makeinstall
%files
%defattr(-,root,root)
/usr
Вот ошибка, которую я получаю при попытке установить:
[root @ puppet rpms] # rpm -ivh Python-2.6.4-1.x86_64.rpm error: Failed dependencies: /home/rpmbuild/python/Python-2.6.4-root/usr/bin/python2.6 требуется на Python-2.6.4-1. x86_64 / usr / local / bin / python требуется для Python-2.6.4-1. x86_64 /usr/local/bin/python2.6 требуется для Python-2.6.4-1 .x86_64
У меня действительно нет опыта создания собственных RPM, но я пытаюсь настроить марионеточный сервер, и, похоже, он предпочитает установку через RPM. Мне нужно использовать версии программного обеспечения, которые еще не доступны как RPM в CentOS.
Файл RPM создается в каталоге RPM, но я понятия не имею, что означает ошибка.
Любые идеи? Заранее спасибо.
Это помогает немного понять, как здесь работает RPM.
RPM будет автоматически добавлять требования к определенным классификациям файлов, о которых он знает (например, разделяемые библиотеки ELF, сценарии #! И т. Д.):
http://www.rpm.org/max-rpm-snapshot/s1-rpm-depend-auto-depend.html
Здесь происходит следующее: некоторая часть содержимого полезной нагрузки была получена с требованиями, которые не были упакованы:
/home/rpmbuild/python/Python-2.6.4-root/usr/bin/python2.6
/usr/local/bin/python2.6
Мы можем проверить это, запустив rpmbuild -bi Python.spec
для запуска сборки до этапа установки. На основании предоставленной выше информации вы можете искать файлы:
find /home/rpmbuild/python/Python-2.6.4-root/ -type f -exec grep \ /home/rpmbuild/python/Python-2.6.4-root/usr/bin/python2.6
Я бы сказал, вы смотрите на:
/home/rpmbuild/Python-2.6.4-root/usr/bin/python2.6-config
для файла с шебангом, который относится к полному корню сборки, и кучей скриптов, относящихся к /usr/local/bin/python2.6
RPM здесь не делает ничего плохого, и детали того, как правильно это исправить, часто зависят от сборки пакета, который вы создаете.
Один из способов исправить это - установить AutoProvReq: no
в преамбуле файла SPEC, например, сразу после Group: Python
. Это должно дать вам устанавливаемый RPM, но вы можете возразить, что он не использует в полной мере преимущества модели зависимостей RPM, и у вас будут неправильные пути в некоторых файлах пакета Python.
Давайте специально посмотрим на сборку Python и попробуем понять, что мы можем сделать, чтобы исправить это более комплексным способом.
В разделе% install используется макрос% makeinstall, который по умолчанию расширяется как:
[pnasrat@centos5 ~]$ rpm -E '%makeinstall'
/usr/bin/make \
prefix=/usr \
exec_prefix=/usr \
bindir=/usr/bin \
sbindir=/usr/sbin \
sysconfdir=/etc \
datadir=/usr/share \
includedir=/usr/include \
libdir=/usr/lib64 \
libexecdir=/usr/libexec \
localstatedir=/var \
sharedstatedir=/usr/com \
mandir=/usr/share/man \
infodir=/usr/share/info \
install
Для справки я обычно обращаюсь к исходной версии Fedora SPEC, который намного сложнее, но может быть создан для сборки (с некоторыми изменениями и патчем для версий автоинструментов IIRC) параллельного пакета python26. Я не собираюсь сейчас вдаваться в подробности этого, но если мы посмотрим, как они устанавливают ключевую строку:
make install DESTDIR=%{buildroot}
Я настоятельно рекомендую сделать это, а не отключать AutoProvReq. Поскольку Python - это сборка на основе libtool, которая, вероятно, лучше макроса% makeinstall, поскольку вы уже настроили префикс. Кажется, это правильно, если посмотреть здесь. Обратите внимание: если вы перестраиваете с этим изменением, вы также захотите добавить:
%clean
rm -rf $RPM_BUILD_ROOT
И хотите аналогичную строку rm в начале %install
раздел. Мне кажется, все это работает:
[pnasrat@centos5 RPMS]$ rpm --test -ivh x86_64/Python-2.6.4-1.x86_64.rpm
Preparing... ########################################### [100%]
Возможно, стоит использовать пакет python2.6, предоставленный в другом месте, я считаю, что IUSCommunity предоставляет пакеты, как описано здесь - http://agilesysadmin.net/recent-python-on-rhel-or-centos. Вероятно, они намного ближе к пакетам Fedora.