【问题标题】:Can I create a package without a preexisting source file?我可以在没有预先存在的源文件的情况下创建包吗?
【发布时间】:2014-04-02 19:16:20
【问题描述】:

据我了解,rpm 规范文件中 Source: 标头的目的是指定用作包有效负载的文件(通常是 tar 存档)。这个源文件通常是事先生成的,可能是通过 make 生成的,然后再执行 rpmbuild。

我想知道是否有可能从图片中删除并只使用 rpmbuild。是否可以将源文件创建为 rpmbuild 过程本身的一部分,可能在规范文件的 %build 或 %install 步骤中?

如果是这样,将什么用作 Source: 标头?我不能把它留空,因为 rpmbuild 会抱怨。有没有办法告诉 rpm 载荷文件是从规范文件中生成的,而不是外部提供的?

我不想单独创建源文件,因为这意味着在两个地方跟踪包名称和版本号:在 rpm 规范文件中,以及在任何 makefile 或其他脚本创建有效负载文件中。看来我应该能够在规范文件中执行所有操作。

【问题讨论】:

  • 您需要在两个地方跟踪版本是不正确的。您可以使用宏来读取源的名称并将其用作版本/名称

标签: linux redhat rpm


【解决方案1】:

你想打电话

%setup -q -c -T

参见 [1]。示例:

Name:           test
Version:        1
Release:        1%{?dist}
Summary:        Test
License:        ...

%description
Test

%prep
%setup -q -c -T

%build
echo "int main() { return 0; } " > test.cpp
gcc -o test test.cpp

%install
install -Dpm 0755 test %{buildroot}%{_bindir}/test

%files
%{_bindir}/test

%changelog
...

[1]http://www.rpm.org/max-rpm/s1-rpm-specref-macros.html

【讨论】:

    【解决方案2】:

    我最近遇到了类似的问题。我最终编写了一个脚本来读取规范文件并完成所有工作。我们不再需要管理 Makefile 和规范文件以及我们的一些开发人员管理这些的任何其他方式。

    该脚本公开发布在 github 上: https://github.com/alexnelsone/jenkins-rpm-build/blob/master/README.md.

    它从规范文件中解析出信息,然后为您完成所有工作。

    【讨论】:

      猜你喜欢
      • 2015-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-12
      • 2018-02-07
      • 1970-01-01
      • 1970-01-01
      • 2013-06-27
      相关资源
      最近更新 更多