gpt4 book ai didi

rpm - 构建 RPM 以安装文件

转载 作者:行者123 更新时间:2023-12-03 22:34:37 29 4
gpt4 key购买 nike

我需要构建一个 RPM,其唯一目的是安装一些字体。我已经阅读了几个关于此的教程,但是每个人似乎都提出了不同的建议,而且我无法找到类似非常基本的设置来做到这一点。

是否可以只引用 %files 中的文件?规范的一部分?但是我试过了,RMP 总是试图在 tmp 中查找文件。目录。我是否需要添加一个特定的构建步骤来将我需要的所有内容复制到 tmp目录?

这些文件是否应该进入 SOURCEBUILD构建 RPM 时的目录?我一直在寻找很多不同的信息。有些人建议构建一个包含文件的 tarball 并将其放在 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/*

但是,我怀疑这是一个好主意。有没有更好的方法来解决这个问题?

最佳答案

当您在 %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/子目录中,并在 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 包中有不满意的依赖项,您有两个选择:
  • 如果您只是希望有一种方便的方式来分发与标准系统设施(见下文)紧密集成的少量文件,那么您可以简单地关闭所有 rpm自动依赖计算。使用 AutoReqProv: no完全禁用所有这些东西。
  • 但是,您可能需要构建一个与操作系统的其余部分更好地集成的包。例如,字体可能需要在适当的系统设施中注册,例如fontconfig .不幸的是,不同的 Linux rpm 发行版对此略有不同,嗯,习惯。实际上,您必须在现有字体包中检查该过程在您的发行版中是如何组织的。您可以使用合适的源 rpm 包(检查 http://rpmfind.nethttp://rpm.pbone.net RPM 搜索引擎),提取其 .spec 文件并研究如何 %prein , %postin , %preun%postun规范的部分被组织起来。显然,字体包的名称中通常带有 -fonts- :)

  • 毕竟,您可以使用 rpm --query --requires --package </path/to/file.rpm> 显示卸载的 rpm 包的依赖项和提供。和 rpm --query --provides --package </path/to/file.rpm> .已安装的软件包的 deps 显示为 rpm --query --requires <rpm_name>等等。

    关于rpm - 构建 RPM 以安装文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21557015/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com