Подтвердить что ты не робот

Python RPM, который я построил, не будет устанавливать

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

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

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/python 2.7 (и исполняемый файл был /tmp/python 2.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 (кроме файлов, которые вы указываете в% файлов) а затем, что на самом деле происходит, когда вы устанавливаете rpm install.

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

4b9b3361

Ответ 1

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

AutoReq: no

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

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

Ответ 2

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

#!/usr/local/bin/python

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