Создайте RPM, чтобы просто установить файлы

Мне нужно создать RPM с единственной целью - установить несколько шрифтов. Я прочитал несколько руководств по этому поводу, однако все, кажется, предлагают что-то другое, и я не смог найти что-то вроде очень простой настройки для этого.

Можно ли просто сослаться на файлы в разделе %files спецификации? Однако я пробовал, RMP всегда пытается найти файлы в каталоге tmp. Нужно ли мне добавлять конкретный этап сборки, который копирует все, что мне нужно, в каталог tmp?

Должны ли эти файлы помещаться в каталог SOURCE или BUILD при сборке RPM? Я нашел много разной информации по этому поводу. Некоторые предлагают создать архив, содержащий файлы, и поместить его в каталог SOURCE, однако это кажется неправильным, поскольку файлы шрифтов для меня не являются фактическими исходными файлами.

В идеале я хотел бы просто поместить все файлы шрифтов в папку BUILD в структуру каталогов, например ./usr/share/fonts/, а затем сослаться на нее в разделе %file SPEC и позволить rpm творить чудеса. Возможно, я что-то упускаю или неправильно понимаю.

Всегда ли раздел %files ожидает найти исходные файлы в каталоге tmp, или что-то не так с моей настройкой? Я создал ~/.rpmmacros, который содержит

%_topdir             /Users/user/rpm

который является корневым каталогом сборки и содержит каталоги BUILD, RPMS, SOURCES, SPECS и tmp.

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

Изменить

Следуя предложениям user3159253, я использую следующий файл спецификации:

Name: test
Version: 1.0.0
Release: 1
Copyright: Copyright info
Group: Applications/System
BuildArch: noarch

%description
Brief description of software package.

%prep

%build

%install
mkdir -p %{buildroot}/usr/share/fonts
cp ./usr/share/fonts/* %buildroot/usr/share/fonts/

%clean

%files
/usr/share/fonts/*

Я скопировал шрифты в каталог BUILD / usr / share / fonts /. Если я запрашиваю у rpm список файлов, все шрифты присутствуют. Однако, когда я устанавливаю rpm, он жалуется на

/usr/share/fonts is needed by test-1.0.0-1.noarch

Однако не имеет значения, существует этот каталог или нет, поэтому я предполагаю, что rpm жалуется, что этого ресурса нет в его базе данных.

Мне удалось это исправить, изменив раздел %file на:

/usr/
/usr/share/
/usr/share/fonts/
/usr/share/fonts/*

Однако я сомневаюсь, что это такая хорошая идея. Есть ли лучший способ исправить это?


person st-h    schedule 04.02.2014    source источник


Ответы (2)


когда вы перечисляете файлы в разделе %files, эти файлы должны находиться в каталоге% {buildroot}. Как говорится в документации Fedora, поскольку корень сборки Fedora 10 не может быть переопределен в спецификации, поэтому да, вам нужно создать необходимую иерархию файловой системы в% buildroot, скопировать туда ваши файлы шрифтов и затем упомянуть их в %files:

...
%install

mkdir -p %{buildroot}/usr/share/fonts
cp /path/to/existing/MyFont.ttf %buildroot/usr/share/fonts/
...

%files
%defattr(0644, root,root)
/usr/share/fonts/*

ваш дистрибутив, вероятно, имеет удобные макросы для размещения стандартных файлов шрифтов, их правильную регистрацию в системе после установки rpm и т. д., но большинство этих макросов зависят от производителя. Кроме того, вы должны скопировать файлы шрифтов в подкаталог SOURCES / и указать их в теге Source: (Source<N>:) в спецификации rpm (просто пример, число может быть любым):

Name: myfonts
Summary: my fonts package
...
Source5: MyFont.ttf
...

Тогда вы можете использовать что-то вроде этого в разделе %install:

cp %{SOURCE5} %buildroot/usr/share/fonts/

вместо полного пути к MyFont.ttf.

Обновление: вы правы насчет отсутствия зависимостей: это не артефакты (файлы, каталоги и т. д.) в файловой системе, это записи в базе данных RPM (в / var / lib / rpm). Итак, чтобы решить проблему, вам нужно работать с этой БД.

Поэтому, если у вас есть неудовлетворенные зависимости в сгенерированном RPM-пакете, у вас есть два варианта:

  1. если вы просто хотите иметь удобный способ распространения нескольких файлов без тесной интеграции со стандартными средствами системы (см. ниже), вы можете просто отключить все rpm автоматические вычисления зависимостей. Используйте AutoReqProv: no, чтобы полностью отключить все это.
  2. Однако вам может потребоваться создать пакет с лучшей интеграцией с остальной частью ОС. Например, шрифты могут нуждаться в регистрации в соответствующих системных средствах, например fontconfig. К сожалению, разные дистрибутивы Linux имеют немного разные, хм, обычаи в этом отношении. Фактически вы должны проверить, как этот процесс организован в вашем дистрибутиве в уже существующих пакетах шрифтов. Вы можете выбрать подходящий rpm-пакет с исходным кодом (проверьте http://rpmfind.net или http://rpm.pbone.net поисковые системы RPM), извлеките его .spec-файл и изучите, как %prein, %postin, %preun и %postun разделы спецификации организованы. Очевидно, пакеты шрифтов обычно содержат -fonts- в своем названии :)

В конце концов, вы можете отобразить зависимости и предоставить неустановленный пакет rpm с rpm --query --requires --package </path/to/file.rpm> и rpm --query --provides --package </path/to/file.rpm>. Информация об установленных пакетах отображается с помощью rpm --query --requires <rpm_name> и так далее.

person user3159253    schedule 04.02.2014
comment
Спасибо, по крайней мере, мне удалось собрать rpm со всеми файлами в нем, но он все равно не работает. Я обновил свой вопрос. Надеюсь, вы сможете взглянуть на это. - person st-h; 04.02.2014
comment
Обновил ответ. Надеюсь, поможет. - person user3159253; 05.02.2014
comment
Большое спасибо. AutoReqProv: no должно быть достаточно, поскольку на самом деле никто не будет использовать этот rpm для установки шрифтов. Просто использую его для распространения файлов через марионетку. Тогда с марионеткой, вероятно, будет проще зарегистрировать шрифты. - person st-h; 05.02.2014
comment
Проблема для меня в том, что существует множество разных путей, на которые может ссылаться файл .spec: 1.) локальная файловая система. 2.) rpmbuild / BUILD перед вызовом rpmbuild. 3.) rpmbuild / SOURCES перед вызовом rpmbuild. 4.) rpmbuild / BUILDROOT после того, как rpmbuild скопирует в него файлы. 5.) rpmbuild /? в пределах встроенного RPM. 6.) На машине, где устанавливается RPM. Синтаксис для% files,% install и т. Д. И найденная мною документация предполагает, что вы знаете, на какой из этих путей он ссылается. Я могу определить специфику только путем экспериментов. - person Alex Jansen; 13.08.2019
comment
Как правило, все файлы в разделе %files относятся к файлам в корне сборки (макрос %buildroot или устаревший тег BuildRoot:). Единственное исключение - файлы, помеченные как% doc - они берутся движком rpmbuild прямо из rpmbuild/BUILD/<packagename>-<packageversion> и копируются в %buildroot/usr/share/doc/<packagename>-<packageversion>. - person user3159253; 14.08.2019

В качестве ответа на отредактированный вопрос вы можете найти следующий ответ:

Name: test
Version: 1.0.0
Release: 1
Copyright: Copyright info
Group: Applications/System
BuildArch: noarch

%description
Brief description of software package.

%prep

%build

%install
mkdir -p %{buildroot}/
cp -r ./* %buildroot/

%clean

%files
/*

Здесь мы рассматриваем каждый файл в каталоге BUILD как часть пакета. Это делается путем помещения /* в %files.

Надеюсь, это правильно ответит на ваш вопрос.

person fury.slay    schedule 21.07.2017