Как распаковать, изменить, восстановить и установить SRPM

9

Я хотел бы изменить пакет Fedora 15 ( gnome-shell-extensions-alternative-status-menu). Это небольшая модификация (отмена этого коммита ). Используя yumdownloaderя могу скачать SRPM ( gnome-shell-extensions-3.0.2-1.g63dd27cgit.fc15.src.rpm).

После этого, как мне распаковать его, а затем восстановить?

Vitor Py
источник
Вам следует изменить свое недавнее изменение, чтобы оно было либо комментарием к ответу @ mdpc, либо добавило ваш собственный ответ с шагами, которые помогли вам решить проблему. Храните данные ответов вне самого вопроса, пожалуйста.
Калеб
@ Калеб Готово! (Осталось еще 3 ...)
Vitor Py

Ответы:

7

Что я делаю, как пользователь ROOT:

  1. Установите SRPM, как и любой другой пакет ( rpm --install [source-rpm-filename])

  2. Изучите /root/rpmbuild/SPECSкаталог и найдите файл specs, соответствующий вашему пакету

  3. rpmbuild -bb /root/rpmbuild/SPECS/[found-filename]

Полученные двоичные пакеты затем помещаются в /root/rpmbuild/RPMS/каталог, который готов к установке с помощью стандартной rpm --installкоманды.

ПРИМЕЧАНИЕ: это просто строит то, что находится в стандартном двоичном пакете. Я пишу это, отвечая на конкретный вопрос, а не о том, как делать изменения в источнике и создавать новые пакеты.

Чтобы внести изменения, вы можете либо предоставить патчи в качестве входных данных и изменить файл SPECS .... или вы можете заменить стандарт, *.tar.bz2расположенный в /root/rpmbuild/SOURCESвашем, на изменение, а затем выполнить сборку, как описано выше.

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


РЕДАКТИРОВАТЬ

Кажется, сборка rpms как root - плохая практика ( источник ). Он отлично работает как пользователь без полномочий root.

Пошаговая инструкция по добавлению патча ( отсюда ):

  1. Скопируйте ваш патч в rpmbuild/SOURCES.
  2. Отредактируйте rpmbuild/SPECS/package.specи добавьте Patch0: mypatch.patchсразу после Source0: ...строки.
  3. После %setup ...строки добавьте %patch0 -p1строку

Теперь он будет строить нормально, т.е. с:rpmbuild -ba SPECS/package.spec

Якорь,
источник
2
Вы должны уточнить, что только установка выполняется от имени пользователя root, а не от rpmbuild. Сборка rpm-файлов никогда не должна выполняться как root.
Калеб
@Caleb Я установил не как root пакеты. rpm помещает его в иерархию ~ / rpmbuild. Также я сделал, как вы предложили по этому вопросу, и разместил здесь дополнительные шаги.
Vitor Py
Просто пара замечаний: sudo dnf install rpmdevtoolsтребуется для команды rpmbuild. И эта %patch0 -p1строка должна быть опущена, если в спецификационном файле %autosetupвместо %setupодной используется строка (так как %autosetupпатч применяется автоматически).
Нельсон
Кроме того, чтобы установить новый rpm поверх исходного (если оригинал уже установлен в системе), сделайтеsudo rpm -ivh --force your.rpm
Нельсон
4

Пересборка пакета OpenSSL CentOS 6.4 является подробным примером перестройки пакета SRPM.

В приведенном выше примере используется Mock - Jedi Light Sabre сборщиков пакетов.

Макет был создан для надежного заполнения chroot, а затем перестроить пакет в этом chroot.

Для получения дополнительной информации см. Http://fedoraproject.org/wiki/Projects/Mock

В этом примере mock используется 3 раза - один раз, чтобы «распаковать» пакет, затем пересобрать .src.rpm и, наконец, создать .rpm.

neonzeon
источник