【问题标题】:Set target directory in RPM spec file在 RPM 规范文件中设置目标目录
【发布时间】:2015-02-24 15:44:54
【问题描述】:

我有一个非常简单的 tar.gz 文件,其中包含我想使用 RPM 包安装的 Java 文件。我创建了这个规范文件:

Name:           test
Version:        1.0
Release:        1%{?dist}
Summary:        test installation script

Group:          Utilities
License:        GPL
URL:            http://oracle-base.com/articles/linux/linux-build-simple-rpm-packages.php
Source0:        test-1.0.tar.gz
BuildArch:      x86_64
BuildRoot:      %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)

#BuildRequires:  
#Requires:       

%description
test installation script

%prep
%setup -c /opt/test


%build
#%%configure
#make %{?_smp_mflags}


%install
rm -rf $RPM_BUILD_ROOT
#make install DESTDIR=$RPM_BUILD_ROOT

#install -d $RPM_BUILD_ROOT/opt/agent


%clean
rm -rf $RPM_BUILD_ROOT


%files
%defattr(-,root,root,-)
%doc

%changelog

目前还不是很清楚如何配置应该提取目标文件的目标目录。你能告诉我我错过了什么吗?

【问题讨论】:

  • 通常使用URL 标签(请参阅Fedora wiki RPM docs 获取正在打包的项目的 URL(不是有关构建 RPM 包的页面的 URL)。这是一个“错误”指导。

标签: linux rpm rpmbuild rpm-spec


【解决方案1】:

RPM 包的构建过程应该完全在构建目录中运行,并且应该以任何方式接触主机系统。

所以%setup -c /opt/test 不正确,因为它在主机系统中创建了一个目录。相反,您可能应该简单地使用 %setup -q 并让默认宏将您的源 tarball 提取到默认构建目录中。 (如果您的 tarball 不包含顶级目录,即它是“tar-bomb”,那么您可以使用带有相对路径的 -c 标志来创建当前目录中的顶级目录。

如果您没有任何要构建的源代码,那么您根本不需要 %build 部分。

%install 部分旨在将文件从本地构建目录复制到构建根目录下的最终目录。因此(如链接指南中所述)它应该将文件复制到$RPM_BUILD_ROOT/opt/test$RPM_BUILD_ROOT 下的任何其他路径是合适的。

那些路径(不带$RPM_BUILD_ROOT 前缀)就是需要在%files 部分中列出的路径。

Fedora 项目有 some documentation 正在构建可能对您有用的 RPM。 Maximum RPM 这本书虽然很旧而且有些过时,但仍然是一个很好的信息来源。

【讨论】:

    【解决方案2】:

    另一个答案已经解释了 %setup -c 命令的问题,以及构建 RPM 的一般原则。

    我将添加以下内容,这可能有助于您了解 RPM 构建脚本应该如何工作:

    %install
    rm -rf $RPM_BUILD_ROOT
    #make install DESTDIR=$RPM_BUILD_ROOT
    

    上面的 sn-p,来自骨架规范文件,给你一个很大的线索。您应该在这里做的是在 $RPM_BUILD_ROOT 下创建一个安装映像。

    因此,例如,如果您想在 /opt/test 中安装文件,您可能需要执行以下操作:

    %install
    rm -rf $RPM_BUILD_ROOT
    mkdir -p $RPM_BUILD_ROOT/opt/test/bin
    cp <something> $RPM_BUILD_ROOT/opt/test/bin/something
    

    RPM 构建脚本应该在 $RPM_BUILD_ROOT 下创建本质上是一个安装映像。然后 rpm 将其打包,并生成二进制可安装 rpm 文件,用于安装 $RPM_BUILD_ROOT 的内容。

    您还需要有一个 %files 部分,其中列出了所有已安装的单个文件,作为健全性检查。 rpm 将仅打包 $RPM_BUILD_ROOT 中列出的文件。

    因此,您的一般准则是:

    • 在设置部分,将 tarball 解压缩到当前工作目录中。 rpm 为构建创建一个临时目录。默认情况下,%setup 会解压其中的文件。

    • 在安装部分,将您想要的内容从当前工作目录复制到 $RPM_BUILD_ROOT。这将成为安装映像。

    【讨论】:

    • 谢谢。我正在阅读 mans/books 试图了解(苍蝇列表/build_root 结构/安装目录)和所有这些资源之间的关系,并没有明确说明发生了什么。说“$RPM_BUILD_ROOT 下的图像”让我明白了。
    猜你喜欢
    • 2020-09-05
    • 2018-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-09
    • 1970-01-01
    • 1970-01-01
    • 2015-04-17
    相关资源
    最近更新 更多