2014-10-14 5 views
1

Я пытаюсь настроить построитель RPM, который будет скомпилировать все зависимые исполняемые файлы и исполняемый файл моего проекта.Создайте цепочку зависимостей RPM без установки зависимостей с хостом сборки

Зависимость выглядит как это:

MainProject.rpm | depends on: 
    | 
    +-- subProject1.rpm | depends on: 
    |  | 
    |  +-- subProject2.rpm 
    | 
    +-- subProject2.rpm 

Я генерируя всю эту RPMs в таком порядке:

-build rpm for subProject2 
-install subProject2 RPM in System 

-build rpm for subProject1 
-install subProject1 RPM in System 

-build rpm for subProject3 
-install subProject3 RPM in System 

-build rpm for MainProject 

Всех мои спецификации файлы производят соответствующую RPMs, цена я сам должен установить на свою машину subProject2.rpm перед тем, как попытаться установить rpmbuildsubProject1.
То же самое касается mainProject.rpm: если я хочу его построить, я должен установить все RPM, от которых он зависит.

Я чувствую, что этот способ делать что-то очень плохо, потому что я устанавливаю эти RPM в файловой системе моего строителя.

Есть ли опция RPMbuild, скажем, для развертывания зависимости RPM в chroot-подобной среде для создания другого? Я думаю, что если существует такая вещь, она также должна учитывать RPATH.

ответ

0

Это плохо, если ваша стройка не контролируется, насколько я могу судить. Предполагая, что у вас есть контролируемый, повторяемый процесс сборки, делающий все так, должно быть хорошо, я верю.

Это, как говорится, ответ на ваш настоящий вопрос заключается в том, чтобы делать то, что Fedora/etc. делают и используют Koji или, по крайней мере, основной элемент, связанный с chroot, который называется Mock.

0

Вы также можете рассмотреть возможность использования опции «-root». Используйте его как с командой «rpm», так и с командой «rpmbuild». С помощью этой опции все ограничения и действия rpm будут связаны с этой «chroot-like» средой. Это должен быть полный путь. Ex:

rpmbuild --root /home/user/master-project/rpmroot 

Есть по крайней мере три основных последствия для этого:

1) вы должны инициализировать базу данных оборотов в минуту в этой области, прежде чем вы можете использовать его для других команд;

rpm --initdb --root /home/user/master-project/rpmroot 

2) все зависимости в альтернативном корне должны выполняться каким-либо другим пакетом в альтернативном корне. это может стать затруднительным, если в вашем случае, например, «MainProject» зависит от стандартных библиотек.

3) как вы упомянули, компиляторы/линкеры также должны знать об альтернативном корне. Ex:

LIBRARY_PATH=/home/user/master-project/rpmroot/usr/lib 
C_INCLUDE_PATH=/home/user/master-project/rpmroot/usr/include 

надеюсь, что это помогает.

Смежные вопросы