Установка RPM не запускает все действия% install, указанные в .spec - PullRequest
0 голосов
/ 19 октября 2018

TL; DR: я создал файл .spec, который успешно создает .rpm, но rpm -i <file>.rpm не выполняет все действия, которые, как мне кажется, должны.Зачем?

Выдержка из <file>.spec:

%install
sudo python2.7 -m pip install 'tornado<5'
...#other pip commands...
cp -r $RPM_BUILD_DIR/%{name}-%{version}/* %{buildroot}

(я знаю, что это не идеальный способ сделать это, но я вынужден использовать CentOS 6 и не могу обновитьсистемная версия python, потому что корпоративная / общая среда, так что это был лучший способ, который я мог выяснить.)

Все команды в %install правильно выполняются при сборке .rpm, поэтому все pip пакеты устанавливаются на машину, создавая .rpm из .spec.rpmbuild -ba <file>.spec завершается с exit 0.Тем не менее, когда я пытаюсь установить созданный файл .noarch.rpm (в другой системе с идентичной ОС / архитектурой), все, что происходит, это то, что устанавливаются зависимости, указанные в rpm, и файлы помещаются в правильные каталоги, но другиекоманды из %install не выполняются.В конечном итоге я пытаюсь вызвать исполняемый файл, который создается и выдает ошибки из-за отсутствующих пакетов python.

RPM.org говорит:

Выполнение любых задач, необходимых перед установкой:

В некоторых случаях перед фактической установкой пакета должна быть дана одна или несколько команд.RPM выполняет эти команды точно в соответствии с указаниями сборщика пакетов, что устраняет общий источник проблем во время установки.

... Где я должен указать команды, запускаемые до установки пакета, если не вполе %install файла .spec?

Ответы [ 3 ]

0 голосов
/ 20 октября 2018

Если вы хотите запускать команды после установки rpm, вам нужно поместить эти команды в цель %post.

Если вы хотите, чтобы команды запускались непосредственно перед установкой самого rpm., поместите команды в цель %pre.

Команды в %install выполняются при сборке .rpm, не запускаются при установке .rpm.

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

Не запускать команды в% install, которые изменяют любое состояние системы или влияют на что-либо вне$ RPM_BUILD_DIR или% {buildroot}

0 голосов
/ 20 октября 2018

Как уже отмечалось, %install - это раздел скрипта в файле спецификации для копирования файлов, которые уже были скомпилированы на этапе %build (который может быть недоступен для python).Однако другие еще не отметили, что sudo python2.7 -m pip install 'tornado<5' - это определенно , а не команда, которую вы должны использовать в specfile.Вам нужно получить файлы python другим способом и установить их в соответствующие места в %{buildroot}.

Обороты в минуту должны никогда не быть собраны от имени пользователя root и не вызывать sudo везде .EVER.

0 голосов
/ 20 октября 2018

Скриплет% install запускается во время сборки, а не во время установки.

Если вы хотите, чтобы команды запускались при установке пакета, вам необходимо использовать раздел% post в файле спецификации.

...