Нужна помощь в понимании того, как построить несколько RPM

Я пытался понять, как построить простой RPM.

У меня есть следующий репозиторий https://github.com/integralist/simple-rpm, который включает соответствующий файл SPEC, и он отлично работает при создании RPM из контейнера Docker.

Но проблема, с которой я столкнулся, заключается в том, чтобы понять, как создать несколько RPM, учитывая, что мне пришлось использовать один каталог ~/rpmbuild для размещения файлов.

Первоначально я создал тестовую структуру каталогов RPM в ~/testing-rpmbuild, и когда я запустил команду rpmbuild, она автоматически создала ~/rpmbuild для меня, а затем начала давать сбой, поскольку мой файл спецификации (который был в ~/testing-rpmbuild) ссылался на другие файлы, которые не могли быть найдены, потому что Похоже, ОС ожидала, что он будет внутри ~/rpmbuild (который был пуст, потому что в тот момент я не осознавал, что ОС автоматически создала каталог ~/rpmbuild).

Итак, в конце концов я просто переместил все свои файлы из ~/testing-rpmbuild в ~/rpmbuild, и все заработало нормально. Но я не уверен, как вы должны создавать несколько разных RPM, когда вы ограничены одним каталогом ~/rpmbuild?


person Integralist    schedule 17.07.2015    source источник


Ответы (1)


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

Источник

Разница здесь в том, что вы используете Docker, который предоставляет некоторые из тех же преимуществ макета (изолированная среда сборки), но не обеспечивает автоматическую установку пакета на основе зависимостей сборки.

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

rpmbuild по умолчанию нацелен на ~/rpmbuild, и вам не нужно переходить в другой каталог, поскольку вы создаете один пакет при запуске контейнера.

Возможно, имеет смысл смонтировать текущий рабочий каталог как том, а затем построить на его основе, например:

FROM fedora:latest RUN yum -y install tree man man-pages make gcc rpm-build WORKDIR $HOME/rpmbuild ENTRYPOINT ["rpmbuild"] CMD ["-bb", "-v", "SPECS/*.spec"]

затем для сборки RPM выполните следующее:

docker run -v $(pwd):/root/rpmbuild integralist/simplerpm

и у вас должен быть RPM в RPMS/* в текущем каталоге проекта, из которого вы запустили команду.

Кроме того, вы можете изменить каталог сборки, используя ~/.rpmrc со следующим:

topdir: /alternate/build/path

или указать --buildroot при сборке rpm.

Источник

person smaj    schedule 20.07.2015