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

8

Есть две машины, идентичная версия / арка SLES.

На машине #A установлено программное обеспечение "foo", которое мы можем увидеть с помощью rpm -qa.

На машине #B должно быть установлено программное обеспечение "foo".

Он foo.rpmнедоступен из любого источника, из Интернета и т. Д.

Вопрос

Поскольку пакет foo.rpmбыл установлен на компьютере #A, можем ли мы создать на нем foo.rpmфайл из уже установленных файлов?

Я думаю, что в rpm есть также скрипты pre / post. Так что тогда foo.rpm( с зависимостями? ) Можно установить.

evachristine
источник
Вы можете найти почти все пакеты rpm здесь. rpmfind.net/linux/RPM
Рамеш

Ответы:

11

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

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

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

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

Принимая бинарные файлы как есть

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

машина А

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

машина B

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

SLES-версия RPM

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

$ rpm -e --repackage <somepackage>

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

/var/spool/repackage

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

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

выдержка

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

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

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

выдержка

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

пример

Скажем, мы хотим переупаковать 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

Ссылки

SLM
источник
В любом случае, это: jdk-1.6.0_02-fcs.rpm :) Это не в "интернете"
evachristine
Вы можете получить официальные RPM для любой версии JDK здесь: oracle.com/technetwork/java/javase/downloads/… . Это приведет вас к 1.6u2, который является той же версией.
SLM
откуда вы знаете, что "jdk-1.6.0_02-fcs.rpm" это "1.6u2"? : O
евахристин
1
Я нашел это!! СПАСИБО! он был назван: jdk-6u2-linux-i586.rpm СПАСИБО!
евахристин
1
@evachristine - да, тот, кто рад, что решил это.
SLM
0

Как правило, нет.

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

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

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

rpm -q --list <pkg_name> показывает все файлы, которые развертывает пакет.

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

И любые зависимости, которые должны быть установлены, могут быть найдены с rpm -q --requires <pkg_name>.

HBruijn
источник