Как создать RPM-пакет (без rpmbuild)

#rpm #rpmbuild

#rpm #rpmbuild

Вопрос:

deb:

 fakeroot dpkb-build -b directory package.deb
# Name, version, architecture, etc. are in directory/DEBIAN/control
  

rpm:

 $SOME_COMMAND directory package.rpm
# Name, version, architecture, etc. are in SOME_FILE
  

Что использовать в качестве SOME_COMMAND и SOME_FILE?

Ответ №1:

Во-первых, неясно, какой RPM-пакет вы собираетесь создавать. Это .src.rpm или двоичный .rpm файл?

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

Таким образом, вы можете либо записать двоичный файл в соответствии со спецификацией, либо вы можете использовать инструменты, которые гарантируют, что файл записан в соответствии со спецификацией (а именно rpmbuild). Я бы настоятельно рекомендовал последнее, поскольку RPM — это не «просто еще один ZIP-файл» и это не «просто еще один tar-файл». В нем больше структуры, чем в этом, и стоимость его развертывания «вручную» в конечном итоге начинает превышать стоимость повторной разработки частей rpmbuild.

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

Комментарии:

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

2. rpmbuild требует больших файлов спецификаций (длиннее, чем простые файлы управления deb), специфической структуры каталогов; он пытается скомпилировать его из исходного кода (при условии, что исходный код есть) и в целом выполняет слишком много вещей.

3. @Vi, если вы хотите использовать rpm, то предоставленный инструмент rpmbuild Если вы не хотите его использовать, тогда вы должны решить, хотите ли вы взять на себя дополнительную задачу по созданию rpmbuild замены или вы можете просто изменить свой рабочий процесс, чтобы использовать инструмент rpmbuild. Я сомневаюсь, что вы создадите согласованный пакет без rpmbuild, поскольку происходит гораздо больше, чем просто «поместить его в правильный формат архива» с помощью RPM.

4. Можете ли вы предоставить пример файла спецификации для случая, когда Makefile имеет цель «make rpm», а не rpmbuild инициирует сборку кода? Чтобы сделать make вызовите создание rpm-пакета, а не наоборот.

5. Такой сложный… Вся эта система обеспечения правильности хороша, но, может быть, следует предусмотреть и простые вещи? / * Пытаюсь следовать другому руководству, чтобы настроить все для правильного использования rpmbuild */