【问题标题】:rpmbuild simple copy of filesrpmbuild 文件的简单副本
【发布时间】:2016-11-18 23:48:14
【问题描述】:

在仅放置文件时,正在寻找仅澄清 %install 宏的人。我创建了一个没有错误的 RPM,它应该只从 buildroot 获取文件并将它们 cp 到 /usr/lib。我在 %install 的 SPEC 文件中拥有以下内容,并且基于 this post。我认为这足以让 rpm 将文件从 buildroot 复制到 /usr/lib 位置。

这是我尝试过的,并且成功了:

%install
mkdir -p %{buildroot}/usr/lib
install -d %{buildroot}/usr/lib/

重新思考,我想,让我们告诉 rpm 我想将文件复制到哪里。所以我尝试了这个:

%install
mkdir -p %{buildroot}/usr/lib
cp %{buildroot}/usr/lib/ /usr/lib/

这抱怨 /usr/lib/ 位置不能被用户写入,我在构建机器上创建 rpm。我的印象是规范文件的%install 部分应该是关于在目标服务器上安装 rpm 时文件应该复制到何处的说明。我不希望它查看 rpm 构建服务器的本地文件系统。我背后的想法是,应该构建 RPM,但如果我尝试以非特权用户身份安装 rpm,它不应该在 rpm 安装之前失败。在构建期间它不应该关心。我只是想将一些 lib 文件 cp/提取到我安装 rpm 的服务器上的 /usr/lib 中。

我的假设是,rpm 会在我安装 rpm 的服务器上创建 BUILDROOT 位置,然后将内容从 buildroot 位置复制到提到的目标位置。

【问题讨论】:

  • 注意:%install 是一个规范文件部分。 install 是您系统上的可执行文件,类似于cp,但维护权限等。

标签: rpm rpmbuild


【解决方案1】:

%install 部分在您的包的构建期间在您的机器上执行。在本节中,您应该在%{buildroot} 中创建文件结构。将其复制到客户端计算机上的最终目的地不是您的任务。

所以你应该这样做:

%install
mkdir -p %{buildroot}/usr/lib
cp -a some-your-file-from-extracted-targz %{buildroot}/usr/lib/

然后在 %files 部分:

%files
/usr/lib/foobar.bin
/usr/lib/somedir/

然后,Rpm 将从 %buildroot 获取 %files 部分中列出的所有文件并将其放入包中。

【讨论】:

  • 如果它的 perl 发行版列表很长怎么办?我必须列出所有这些文件吗?基本上,我使用 PerlBrew 在默认操作系统的自定义位置安装 perl 版本。然后我把文件 tar 了。即 perl-5.10.1.tgz 并希望将其解压缩到 /opt/custom/location/ 中。只需在特定位置解压 tgz 文件即可。
  • 当您在 %files 中指定目录时,rpmbuild 会包含该目录以及其中的所有内容。因此,在上面的示例中,甚至文件 /usr/lib/somedir/foo/bar 也将包括在内。或者您可以生成该列表(但请尽可能避免)。例如见github.com/rpm-software-management/mock/blob/devel/…github.com/rpm-software-management/mock/blob/devel/…
  • 感谢您提供的所有信息。出于某种原因,当我执行 rpm 的构建时,它似乎在寻找 Perl 依赖项。同样,我所做的只是在自定义位置使用 perbrew 编译 Perl 发行版,然后使用 cpanm 安装所有所需的 Perl 模块。我将文件夹(即 tar -xzvf )打包并将该文件放在 SOURCES 文件夹中。运行 rpmbuild -bb SPEC_FILE 并构建 rpm。当去安装 RPM 时,它抱怨缺少 Perl 依赖项。我也没有在规范文件中指定“要求”。
猜你喜欢
  • 1970-01-01
  • 2016-07-09
  • 2021-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多