Назад | Перейти на главную страницу

Проблема сборки RPM

Я строю свои 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.