Собранный мной Python RPM не будет установлен - PullRequest
18 голосов
/ 15 сентября 2011

Поскольку мне нужно установить несколько версий Python на нескольких серверах Oracle Linux, которые создаются с помощью процесса кикстарта, я хотел собрать обороты Python для нашего репозитория yum. Я смог собрать Python вручную, используя 'make altinstall', который не устанавливается поверх установленной по умолчанию системы Python, поэтому я подумал, что это будет путь.

После долгих проб и ошибок мне удалось собрать rpm, начиная с пакета .bz2 python 2.7 - но теперь, когда я пытаюсь установить его, я получаю сообщение об ошибке:

error: Failed dependencies:
    /usr/local/bin/python is needed by Python-2.7.2-1.i386

Что за ... ??? Python - это то, что я пытаюсь установить !!! А системный Python по умолчанию (2.4) находится в / usr / bin / python !!! И мое местоположение прототипа для каталога python - /tmp/python2.7 (и исполняемый файл был /tmp/python2.7/bin/python2.7). Так почему же он ищет в / usr / local / bin?

Вот ядро ​​моего RPM SPEC:

%prep
%setup -q

%build
./configure --prefix=/tmp/python2.7
make

%install

make altinstall

Я поближе смотрю журнал сборки rpm и вижу:

Requires: /bin/sh /tmp/python2.7/bin/python2.7 /usr/bin/env /usr/local/bin/python libc.so.6 libc.so.6(GLIBC_2.0)...[a lot more...]

Хорошо, вот где находится / usr / local / bin ... Теперь вопрос в том, как они определяют эти требования? Я указал что-то не так? Нужно ли что-то переопределять?

Как и многие новички в rpm, я получаю сборочную часть, но на самом деле я не "зацикливаюсь" на том, что происходит в конце rpmbuild и что на самом деле помещается в файл rpm (кроме файлов, которые вы указываете в% files) и что на самом деле происходит, когда вы выполняете установку rpm.

Кто-нибудь может подсказать, почему моя установка не удалась или что я мог прочитать, чтобы понять, почему моя сборка rpm требует того, что я пытаюсь собрать?

Ответы [ 2 ]

19 голосов
/ 15 сентября 2011

Вы сможете исправить эту проблему, добавив следующую строку в ваш файл спецификаций:

AutoReq: no

Вот мое понимание того, почему это необходимо. Когда rpmbuild работает с файлами .py с #! (shebang) это автоматически добавит двоичный файл, который shebang определяет как требование. Мало того, что если shebang равен #!/usr/bin/env python, он добавит зависимость для всего, что разрешается (первый питон на $PATH).

Вам нужно либо отключить автоматическую обработку требований, либо найти все шебанги, которые могут вызвать проблемы, и заменить их на что-то другое.

7 голосов
/ 15 сентября 2011

rpmbuild может стать довольно умным, и это один из таких случаев.Вероятно, он извлек /usr/local/bin/python из одного из ваших файлов скриптов, содержащих что-то вроде:

#!/usr/local/bin/python

вверху.Попробуйте grep'ing для этого пути в файлах в вашем файле bz2.

...