我可以在没有预先存在的源文件的情况下创建包吗?

时间:2014-04-02 19:16:20

标签: linux redhat rpm

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

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

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

我不想单独创建源文件,因为这意味着要在两个地方跟踪包名称和版本号:在rpm spec文件中,以及在makefile或其他脚本中创建有效负载的任何内容文件。看起来我应该可以在spec文件中做所有事情。

2 个答案:

答案 0 :(得分:0)

你想打电话

%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

答案 1 :(得分:0)

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

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

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