2014-02-04 2 views
6

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

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

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

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

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

%_topdir    /Users/user/rpm 

который является каталог для сборки корневой и содержит Билд, RPMS, источники, Спекуляции и TMP каталогов.

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

Редактировать

После предложения 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/доли/шрифты/каталог. Если я запрашиваю rpm для списка файлов, все шрифты есть. Однако, когда я устанавливаю обороты, он жалуется на

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

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

Я был в состоянии исправить это, изменив раздел файла% к:

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

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

ответ

5

при перечислении файлов в разделе %files эти файлы должны находиться в каталоге% {buildroot}. Как Fedora документация говорит, так как Fedora 10 Buildroot can't be redefined в спецификации, так что да, вы должны создать необходимую иерархию файловой системы в пределах% 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 и т. д., но большинство этих макросов зависят от поставщика.Кроме того, вы должны ваши файлы шрифтов в подкаталоге/ИСТОЧНИКОВ и упоминать о них в Source: (Source<N>:) тега в оборотов спецификации (только пример, номер может быть любым):

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

Затем вы можете использовать л, как это в %install разделе:

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

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

Update: Вы правы об отсутствии зависимости: это не артефакты (файлы, каталоги и т.д.) в файловой системе, это записи в БД RPM (в/вар/Lib/оборотов в минуту). Поэтому для решения проблемы вам нужно работать с этой БД.

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

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

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

+0

Спасибо, по крайней мере, мне нужно собрать rpm со всеми файлами в нем, однако он все равно не работает. Я обновил свой вопрос. Надеюсь, вы можете взглянуть на него. –

+1

Обновлен ответ. Надеюсь, поможет. – user3159253

+0

Большое спасибо. ** AutoReqProv: нет ** должно быть достаточно, поскольку никто не будет использовать этот об/мин для установки шрифтов. Просто используя его для распространения файлов через марионетку. Регистрация шрифтов, скорее всего, будет проще с куклами. –

0

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

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.

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

Смежные вопросы