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

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

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

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

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

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

%_topdir             /Users/user/rpm

который является корневым каталогом сборки и содержит сборку, RPMS, источники, спецификации и 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/*

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

2 ответов


когда вы перечисляете файлы в %files раздел эти файлы должны находиться в каталоге %{buildroot}. Как говорится в документации Fedora, начиная с Fedora 10 buildroot невозможно переопределить в спецификации, так что да, вы должны создать требуемую иерархию файловой системы в %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/ subdirectory и упомянуть их в Source: (Source<N>:) тег в спецификации rpm (просто пример, число может быть любым):

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

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

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

вместо полного пути к MyFont.ТЦФ.

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

так что если у вас есть зависимости unsatisifed в сформированный пакет RPM у вас есть два варианта:

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

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


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

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
/*

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

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