我需要构建一个RPM,其唯一目的是安装一些字体。我已经阅读了几个有关此的教程,但是每个人似乎都暗示了一些不同的东西,我找不到类似基本设置的东西来做到这一点。
是否可以在规格的%files
部分中引用文件?但是,我尝试过,RMP总是试图在tmp
目录中找到文件。我需要添加一个特定的构建步骤,该步骤将我需要的所有内容复制到tmp
目录?
构建RPM时,这些文件是否应该进入SOURCE
或BUILD
目录?我一直在发现很多有关此信息的信息。有些人建议构建包含SOURCE
目录下的文件和位置的TARBALL,但是这似乎是错误的,因为字体文件不是我的实际源文件。
理想情况下,我只想将所有字体文件放在构建文件夹中的目录结构之下,然后将其引用在规格的%file
部分中,然后让rpm
做魔术。可能我在这里缺少或误解了某些东西。
%files
部分是否期望在tmp
目录中找到源文件,还是我的设置有问题?我创建了包含
~/.rpmmacros
%_topdir /Users/user/rpm
是根构建目录,并包含构建,rpms,sources,specs和tmp目录。
我会很高兴有人能提供规格文件中最不需要的项目以使其干净工作。
编辑
遵循用户3159253的建议,我正在使用以下规格文件:
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/*
我将字体复制到构建/usr/share/fonts/Directory中。如果我查询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/*
但是,我怀疑这是一个好主意。是否有更好的方法来解决此问题?
当您在%files
中列出文件时,这些文件应驻留在%{buildroot}目录中。正如Fedora Documentation所说,由于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时在系统中的适当重新定位,但是这些宏大多数都是供应商特定的。另外,您应该将字体文件复制到源/子目录中,并在rpm spec中的Source:
(Source<N>:
)标签中提及它们(只是一个示例,一个数字可以是任何):
Name: myfonts
Summary: my fonts package
...
Source5: MyFont.ttf
...
然后,您可以在%install
部分中使用类似的内容:
cp %{SOURCE5} %buildroot/usr/share/fonts/
而不是通往myfont.ttf的完整路径。
更新:您对缺少依赖关系是正确的:这不是文件系统上的伪像(文件,目录等),而是RPM db(in/var/lib/rpm)中的记录。因此,要解决问题,您必须使用该DB。
因此,如果您在生成的RPM软件包中没有依赖依赖项,则有两个选项:
- 您只想有一种方便的方法来分配几个 w/o与标准系统设施的紧密集成(请参见下文),那么您只需关闭所有
rpm
自动依赖性计算即可。使用AutoReqProv: no
完全禁用所有这些东西。 - 但是,您可能需要与其他操作系统建立更好集成的软件包。例如,字体可能需要在适当的系统设施中进行注册,例如
fontconfig
。不幸的是,不同的Linux RPM发行版略有不同,EH-HM,关于此的习俗。实际上,您必须检查在已经存在的字体软件包中如何在发行版中组织此过程。您可以使用合适的源RPM软件包(检查http://rpmfind.net或http://rpm.pbone.net rpm搜索引擎),提取其.spec-file并研究%prein
,%postin
,CC_24,%preun
和%postun
段规格是组织的。显然,字体套件通常以其名称携带-fonts:)
毕竟,您可以显示依赖项,并提供带有rpm --query --requires --package </path/to/file.rpm>
和rpm --query --provides --package </path/to/file.rpm>
的卸载的RPM软件包。rpm --query --requires <rpm_name>
显示了安装的软件包的DEP等。
作为您编辑的问题的答案,以下是您寻求的答案:
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
中。
希望这能正确解决您的问题。