Как создать RPM-пакет из установленных файлов?

Обычно это - работа для транспортного формирователя, так, чтобы был тем, что необходимо искать. Что касается идентификации, какие пакеты принадлежат тому, какое приложение, Вы, вероятно, захотите посмотреть на сетевые пространства имен и/или Cgroups, но я ожидал бы там быть некоторыми готовыми к использованию решениями (вероятно, на основе их).

8
05.07.2014, 20:10
2 ответа

Это возможно, но очень трудно сделать так, чтобы все было сделано правильно. Если вы в отчаянии, то можете создать новый RPM-файл .spec и сконструировать "поддельный" исходный RPM (SRPM), который затем можно использовать для создания результирующего RPM-файла, используя rpmbuild --rebuild.

Я бы продолжил поиск реального RPM вместо него. Вы не указываете, что именно в вашем вопросе, но, по моему опыту, вы можете найти что угодно в интернете, если знаете, как его искать. Я нашёл старинные версии RPM для дистрибутивов Red Hat, которые не использовались в течение более 10 лет, так что мне трудно поверить, что нигде нет остатков этого RPM.

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

Наконец, вы можете получить исходные тексты и файл .spec из сборочного сервиса, такого как Koji для дистрибутивов, работающих на базе Red Hat. SuSE также поддерживает подобные сервисы сборки, так что вы можете просмотреть их и получить старые артефакты сборки.

Взяв двоичные файлы как есть

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

машина A

$ rpm -ql <packageNameHere> | xargs tar -zcvf /tmp/program.tgz

машина B

$ tar -zxvf /path/to/your/program.tgz

SLES версия RPM

Согласно одной из записей в этом потоке: Re: Как создавать на SLES пакеты RPM с фронтальной установкой rpm, предполагается, что на них установлен переключатель -репакет . В версии для Red Hat (в Fedora или CentOS) его нет. Но согласно сообщению, вы можете использовать его следующим образом:

$ rpm -e --repackage <somepackage>

-после этого вы найдете свой RPM доступным здесь:

/var/spool/repackage

-использовать rpmerizor

-Rpmerizor -инструмент/скрипт стороннего производителя, который вы можете установить и который будет переупаковывать исходные файлы в соответствующий RPM. Использование этого скрипта доступно здесь, под заголовком: rpmerizor's man page.

excerpt

Rpmerizor - это скрипт, позволяющий создать RPM-пакет из установленных файлов. Вам просто нужно указать файлы в командной строке и ответить на несколько интерактивных вопросов, чтобы заполнить мета-данные rpm (имя пакета, версия ....). Вы также можете использовать его в пакетном режиме с опциями командной строки для мета-данных.

Использование rpmrebuild

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

excerpt

rpmrebuild - это инструмент для сборки RPM-файла из пакета, который уже был установлен в базовом использовании, использование rpmrebuild не требует никаких знаний по сборке rpm. (В debian эквивалентным продуктом является dpkg-репак)

Пример

Скажем, мы хотим переупаковать openssh-сервер.

$ rpm -aq | grep openssh-server
openssh-server-6.2p2-8.fc19.x86_64

Теперь упакуйте его:

$ rpmrebuild openssh-server-6.2p2-8.fc19.x86_64
/usr/lib/rpmrebuild/rpmrebuild.sh: WARNING: some files have been modified:
..?......  c /etc/ssh/sshd_config
..?......  c /etc/sysconfig/sshd
Do you want to continue ? (y/N) y
Do you want to change release number ? (y/N) n
result: /root/rpmbuild/RPMS/x86_64/openssh-server-6.2p2-8.fc19.x86_64.rpm

Ссылки

11
27.01.2020, 20:11

Как правило, №

С небольшим везением rpm -qi и rpm -q --changelog дают представление о том, откуда пришел пакет.

Если он был собран на системе, на которой работает, у вас все еще может быть spec-файл, используемый для выполнения фактического rpm, если не оба.

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

rpm -q --list показывает все файлы, которые устанавливаются пакетом.

rpm -q --scripts для показа любых сценариев, которые выполняются при установке (или удалении) пакета, может дать как минимум столько же информации о его назначении, сколько и об установленных файлах.

А любые зависимости, которые необходимо установить, можно найти с помощью rpm -q --requesques .

0
27.01.2020, 20:11

Теги

Похожие вопросы