Изменение членов файла при создании обновлений RPM - PullRequest
0 голосов
/ 26 января 2019

За последние несколько лет наше приложение было упаковано в один rpm-файл с обычными нумерованными обновлениями. Теперь я хотел бы выделить некоторые файлы во второй RPM для управления продуктом.

Правильный ли способ просто удалить файлы из раздела %files старого .spec файла и добавить их в новый файл .spec?

Например, теперь у нас есть myApp.rpm, построенный из:

/usr/local/myApp
+ bin/ {bunch of files here}
+ config/ {bunch of files here}
+ branding/

Таким образом, текущий файл спецификаций перечисляет все выше в своей директиве %files.

Чтобы разделить branding на отдельные обороты, не испортив упаковку? например.

myApp.spec

Name: myApp
%install
  {make directories, copy everything but branding}
%files
/%{_prefix}/myApp
/%{_prefix}/myApp/bin/*
/%{_prefix}/myApp/config/*

и

branding.spec

Name: myApp_branding
Requires: myApp
%install
   {copy branding to rpm tree}
%files
/%{_prefix}/myApp/branding/*

Когда существующие установки будут обновлены, будет ли членство в пакете фирменных файлов теперь myApp_branding пакета?

Есть ли недостатки или риски в этом подходе?

Спасибо

1 Ответ

0 голосов
/ 27 января 2019

Нет, это не рекомендуемый способ.

Помните, что для каждого проекта достаточно только одного .spec-файла, вы можете использовать элемент %package body для дополнительных пакетов rpm.например, добавьте следующий код после метаинформации.то есть до %prep или %build элементов

%package branding
Summary: Branding for myApp
Requires: myApp
%description branding
branding files for myApp

После этого, да, вы можете использовать несколько разделов '% files' для каждого пакета.как

%files
/%{_prefix}/myApp/bin/*
/%{_prefix}/myApp/config/*

%files branding
/%{_prefix}/myApp/branding/*

Как видите, я пропустил строку /%{_prefix}/myApp в главном разделе% files.На самом деле, когда вы выбираете родительский каталог, он автоматически включает в себя все его дочерние элементы, а когда подпакет пытается снова включить дочерний каталог, это приведет к ошибке дублирования во время сборки.Если вы хотите использовать /%{_prefix}/myApp, тогда %exclude может помочь.см

%files
/%{_prefix}/myApp/*
%exclude /%{_prefix}/myApp/branding/*

%files branding
/%{_prefix}/myApp/branding/*
...