RedHat: возможно ли устанавливать пакеты в некой имитационной среде для создания RPM

10

Есть ли инструмент, который позволяет устанавливать зависимости RPM .spec в изолированной среде? Я не буду устанавливать такие зависимости глобально в системе, и я не могу это сделать, поскольку у меня нет привилегий root.

Причина

Я хочу создать пакет A, который зависит от более новой версии B (который не может быть установлен глобально в системе).

Я хотел бы построить новую версию B , и пусть инструмент сборки установить B «S -develего в изолированную среду , чтобы обеспечить все необходимые файлы для сборки A .

Решения

  • Есть ли инструменты для этого?
  • Если нет, то о чем мне следует заботиться, когда я пытаюсь сделать это, скажем chroot?
  • Будет ли это плохой практикой?
примерочных всеобъемлющая наконец
источник

Ответы:

8

Да, инструмент называется mockи находится в EPEL.

Типичное использование:

rpmbuild -bs mypackage.spec
mock -r epel-6-x86_64 mypackage-0.1-1.src.rpm

На самом деле это предпочтительный способ создания RPM, именно потому, что он изолирует процесс от системы, чтобы непредвиденные зависимости не возникали.

Вы можете изменить файлы так, /etc/mockчтобы они загружали ваши собственные пакеты, частное хранилище и т. Д., Или проверять документы для получения информации о том, как mockвручную добавлять пакеты в среду chroot.

Обратите внимание, что пользователи должны быть добавлены в mockгруппу, чтобы иметь возможность использовать mock.

Не случайно, kojiсервер сборки, который Red Hat использует mockдля сборки каждого отдельного пакета. Если вам приходится собирать много пакетов все время, возможно, стоит обратить внимание на настройку kojiсервера сборки.

Майкл Хэмптон
источник
Спасибо, Майкл. Это звучит очень хорошо, и я рад, что мой вопрос был не таким глупым, как я думал. ;)
try-catch-finally
3

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

  1. Установите VirtualBox или аналогичный инструмент на вашем рабочем столе / ноутбуке
  2. Создайте 32/64 виртуальных машин ОС, которую вы используете в производстве
  3. Установите обычно инструменты mock, rpmbuild и т. Д.
  4. Создайте RPM для пакета и любые дополнительные deps для обоих архивов на ваших виртуальных машинах
  5. После тестирования вставьте RPM во внутреннее хранилище для распространения на ваших серверах.
  6. Проверьте еще раз, чтобы убедиться, что соответствующие зависимости извлекаются
  7. Отпустите через ваше управление конфигурацией.
Рамин
источник
Это будет работать Как это лучше, чем использовать макет? Я думаю, что издеваться будет легче, но я подозреваю, что в любом случае происходит одно и то же.
Эмори
У меня нет проблем с макетом, и я считаю, что почти во всех документах "Как сделать rpm" вы его устанавливаете. Однако без root-доступа я не уверен, как ОП собирается добавить свою учетную запись в группу макетов, установить макет и так далее. Также наличие виртуальных машин с чистой сборкой помогает избежать непреднамеренного добавления в пакеты нечетных зависимостей.
Рамин
Отличный момент. Я не учел это. Имея это в виду, я думаю, что это правильный ответ.
Эмори
@emory, основываясь на ваших отзывах, я пояснил, почему сборка виртуальных машин в целом является лучшим решением, и я думаю, что это лучший ответ. Спасибо, что подтолкнул меня. :-)
Рамин
@Ramin в моей ситуации (на работе) я всего лишь пользователь . Система является выделенной системой сборки, и, если все разработчики на этом хосте будут иметь привилегии root, этот ящик не загрузится через 1 неделю. ;) Таким образом, использование такого инструмента, как Mock, совершенно правильно! Настройка виртуальных машин также является хорошей идеей, если ее можно автоматизировать. Я думаю, что Vagrant (я еще не проверял это) как раз подходит для этого.
try-catch-наконец