cjd*_*iro 5 specifications rpmbuild
我是编写规范文件和构建RPM的新手。目前,我有一个RPM,应该将某些文件部署在2个可能的目录中的1个中,这些目录会随操作系统的不同而不同。
如何在%files部分中验证它们?我不能使用变量...我无法验证两个路径,因为肯定会失败...我试图在%install部分的较早位置定义一个宏,但该宏只会被定义一次,不会被重新定义在每个RPM安装上...
我在这里可以做什么?
谢谢
我遇到过类似的情况,即在 RELEASE 构建中的所有文件之上进行 DEBUG 构建时,RPM 中包含其他文件。
技巧是将文件列表及其下面的常规文件列表传递给 %files:
%install
# Create a temporary file containing the list of files
EXTRA_FILES=$RPM_BUILD_ROOT/ExtraFiles.list
touch %{EXTRA_FILES}
# If building in DEBUG mode, then include additional test binaries in the package
%if %{build_mode} == "DEBUG"
# %{build_mode} is a variable that is passed to the spec file when invoked by the build script
# Like: rpmbuild --define "build_mode DEBUG"
echo path/to/file1 > %{EXTRA_FILES}
echo path/to/file2 >> %{EXTRA_FILES}
%endif
%files -f %{EXTRA_FILES}
path/to/release/file1
path/to/release/file2
Run Code Online (Sandbox Code Playgroud)
在您的情况下,您可以利用 %install 部分中的 %if 条件,使用操作系统作为传递给的规范变量rpmbuild(或在 RPM 规范本身中检测它),然后将包含列表的文件传递给%files
该%files部分可以包含变量,但通常这将类似于您定义的路径,因此您不必多次重复它。so %{long_path}/file_name,其中 long_path 是先前在规范文件中定义的。该%files部分是进入 RPM 数据库的所有信息,并且是在构建 RPM 时创建的,因此您无法在安装时根据计算机信息更改这些值。
如果您确实想这样做,您可以在主 tarball 中包含一个 tar 文件,该文件根据某些条件提取(因为规范文件只是 bash)。现在请记住,这是一个糟糕的主意。RPM 数据库不会跟踪这些文件,因此当您删除 RPM 时,这些文件仍然存在。
实际上,您应该构建两个 RPM,这将在您必须将其交给某人的情况下为将来提供更好的支持,并在一年后您需要更新 RPM 时保持自己的理智。
| 归档时间: |
|
| 查看次数: |
15471 次 |
| 最近记录: |