我需要构建一个RPM,其唯一目的是安装一些字体。我已经阅读了几个有关这方面的教程,但是每个人似乎都提出了一些不同的东西,而且我还没有找到像这样的基本设置。
是否可以仅引用规范的%files部分中的文件?我尝试过,rpm总是试图找到tmp目录中的文件。我是否需要添加一个特定的构建步骤,将我需要的所有内容复制到tmp目录中?
构建rpm时,这些文件是否应该进入SOURCE或BUILD目录?我一直在寻找很多不同的信息。有人建议构建一个包含文件的tarball并放在SOURCE目录下,但这看起来有点不对,因为字体文件对我来说不是实际的源文件。
理想情况下,我想将所有字体文件放在目录结构下的BUILD文件夹中,例如' ./ usr / share / fonts /'然后在SPEC的%file部分引用它,让RPM发挥其魔力。可能我在这里遗漏或误解了一些东西。
%files部分是否总是希望在tmp目录中找到源文件,或者我的设置有问题?我创建了包含
的〜/ .rpmmacros%_topdir /Users/user/rpm
这是根构建目录,包含BUILD,RPMS,SOURCES,SPECS和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 / share / fonts /目录中。如果我在rpm中查询文件列表,那么所有字体都在那里。但是,当我安装rpm时,它会抱怨
/usr/share/fonts is needed by test-1.0.0-1.noarch
但是,如果此目录存在与否则无关紧要,所以我猜rpm正在抱怨此资源未在其数据库中列出。
我已经能够通过将%文件部分更改为:
来解决此问题/usr/
/usr/share/
/usr/share/fonts/
/usr/share/fonts/*
然而,我怀疑这是一个好主意。有没有更好的方法来解决这个问题?
答案 0 :(得分:7)
当您列出%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等时在系统中正确注册,但大多数这些宏都是特定于供应商的。此外,您应该将您的字体文件复制到SOURCES /子目录中,并在rpm规范中的Source:
(Source<N>:
)标记中提及它们(只是一个例子,一个数字可以是任意的):
Name: myfonts
Summary: my fonts package
...
Source5: MyFont.ttf
...
然后你可以在%install
部分中使用这样的内容:
cp %{SOURCE5} %buildroot/usr/share/fonts/
而不是MyFont.ttf的完整路径。
<强>更新强>: 你错过了依赖关系是正确的:这不是文件系统上的工件(文件,目录等),这是RPM db中的记录(在/ var / lib / rpm中)。因此,要解决此问题,您必须使用该数据库。
因此,如果您在生成的RPM包中存在不满意的依赖关系,那么您有两个选择:
rpm
自动依赖计算。使用AutoReqProv: no
完全禁用所有内容。fontconfig
。不幸的是,不同的Linux rpm发行版对此有不同的呃嗯风俗。实际上,您必须检查在现有字体包中您的分发中如何组织此过程。您可以采用合适的源rpm包(检查http://rpmfind.net或http://rpm.pbone.net RPM搜索引擎),提取其.spec文件并研究%prein
,%postin
,{{1该规范的{}}和%preun
部分是有条理的。显然,字体包通常在其名称中包含-fonts-)毕竟,您可以显示依赖项,并提供已安装的%postun
和rpm --query --requires --package </path/to/file.rpm>
rpm包。已安装的软件包的代表显示为rpm --query --provides --package </path/to/file.rpm>
,依此类推。
答案 1 :(得分:1)
作为您编辑过的问题的答案,您可能会找到以下答案:
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
下来完成的。
希望这能正确解决您的问题。