Созданный мной RPM Python не устанавливается

Поскольку мне нужно установить несколько версий Python на нескольких серверах Oracle Linux, которые создаются с помощью процесса кикстарта, я хотел создать rpm-пакет 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?

Вот суть моего SPEC RPM:

%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 требует того, что я пытаюсь построить?


person Ilane    schedule 14.09.2011    source источник


Ответы (2)


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

AutoReq: no

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

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

person Andrew Clark    schedule 14.09.2011
comment
В этом случае вы не хотите отключать обработку зависимостей. Это может нарушить работу пакета python, поскольку RPM не будет знать, от каких файлов зависит этот пакет. Правильнее всего будет исправить файл, содержащий ошибочную строку shebang. - person jayhendren; 28.07.2014
comment
В большинстве случаев я соглашусь, но это не какой-то произвольный RPM, содержащий скрипты Python, это установка Python (где двоичный файл будет установлен в / usr / local / bin). - person Andrew Clark; 28.07.2014
comment
Это не имеет значения. RPM по-прежнему не сможет правильно обрабатывать зависимости, если вы отключите эту функцию. - person jayhendren; 22.06.2016
comment
Чтобы сохранить правильные зависимости при одновременном использовании параметра AutoReq: no, скопируйте результат Requires: из rpmbuild во время успешной сборки, вставьте в файл .spec и перестройте. Просто убедитесь, что удалили проблемные части (например, / path / to / python) из списка Requires. Затем будут проверены необходимые библиотеки и т. Д., Но предоставленные исполняемые файлы python не будут. - person hilcharge; 02.05.2017

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

#!/usr/local/bin/python

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

person Manny D    schedule 14.09.2011
comment
Их два - однако я не хочу возиться с источниками, если в этом нет необходимости, поскольку% setup распаковывает их из исходного загруженного файла - есть ли способ обойти эту проблему? - person Ilane; 15.09.2011
comment
Это правильный ответ. В исходном коде Python есть файл со строкой shebang, содержащей /usr/local/bin/python. @Ilane, правильнее всего написать патч к исходному коду. Стандартная часть сборки RPM - это написание патчей. Вы заметите, что в файле, содержащем оскорбительный shebang, есть комментарий о том, что упаковщики python должны будут написать патч, если они не установят python в /usr/local. - person jayhendren; 28.07.2014
comment
Конкретно проблема cgi.py. Спецификации Fedora (python 3, python 2) исправьте это, запустив Tools/scripts/pathfix.py. - person Sam Hartsfield; 22.05.2015