在我的组织中,我们使用 RPM 将所有软件部署到生产机器上。我们的构建过程(自动化)包括从版本控制中检出源代码、将该源代码目录打包,然后使用该源代码 tarball 运行 rpmbuild。rpmbuild 仅使用该 tarball 解压源代码以对其进行处理。因此,整个打包和解压过程似乎只是构建过程中不必要的额外步骤。有没有办法只在 spec 文件中指定源代码目录,从而避免这些额外的步骤?
答案1
是的,你可以这样做。不要列出任何Source
s。在本%prep
节中不要使用%setup
宏(解压源代码);而是只需查看源代码即可。
请注意,如果这样做,您将无法构建 SRPM。
答案2
这个问题有点老了,但是如果其他人在搜索中找到它,那么有一个更正确的方法可以做到这一点,并且也允许创建 SRPM。
在准备阶段,不要使用设置宏,你应该自己输入你想要它做什么,即将源目录从 SOURCES 复制到 BUILD,而不是解压存档。我发现你还必须在 build 和 install 部分将 cd 添加到你的源目录中。
示例代码片段
%prep
# Don't use the setup macro anymore, replace it with typed-out commands
#%setup -q -n myapp-%{version}
cd %{_topdir}/BUILD
rm -rf myapp-%{version}
cp -rf %{_topdir}/SOURCES/myapp-%{version} .
cd myapp-%{version}
/usr/bin/chmod -Rf a+rX,u+w,g-w,o-w .
%patch1 -p1 -b .cert-config
%patch2
%build
cd myapp-%{version}
%install
cd myapp-%{version}
答案3
迟到了 12 年,但也许这会对某些人有所帮助。您可以使用 rpmbuild 在命令行上重新定义 _sourcedir 宏。例如:
rpmbuild --define "_sourcedir $(pwd)/SOURCES" -ba SPECS/my-app.spec
这使得您可以从任何地方构建具有预期结构的所有预期 RPM 和 SRPM,而无需 tar 和 untar。