dynamic - 如何在安装期间将参数动态传递给 RPM
问题描述
我们需要在 RPM 安装过程中动态传递一个变量并在规范文件中捕获它以触发 %post 中的脚本
以下是命令 RPM 安装命令 sudo rpm -Uvh --force abc.noarch.rpm --define '_ip 10.1.2.4' --define 'version 3'
**abc.spec**
Name: abc
Version: 1
Release: 1.0
Summary: Test
%{!?_ip: %define _ip 0.0.0.0 }
%{!?_version: %define _version 0 }
%post
echo "ip:::: %{_ip}"
echo "VESION:::: %{_version}"
因此,当我使用上述命令运行 RPM 时,我得到以下输出。
[root@test 解决方案]$ sudo rpm -Uvh --force abc.noarch.rpm --define '_ip 10.1.2.4' --define 'version 3' Preparing... ########### ###################### [100%]
更新/安装...
1:abc ################################# [50%]
ip:::: 0.0.0.0
VESION:::: 0
尽管我在 CLI 命令中传递了不同的值,但我仍然看到我传递的参数没有在规范文件中捕获。
需要有关如何捕获即时通过 CLI 的值的输入。
解决方案
该选项--define
定义宏。使用 rpmbuild 从 SRC.RPM 构建 RPM 时会评估宏。二进制(无论是 arch 还是 noarch)包的每个宏都已经展开。甚至 %bindir 等。
RPM 生态系统被设计为非交互式的。当可以使用 debconf 提出问题时,这与 DEB 生态系统有很大不同。
您无法解决它。您甚至无法通过直接读取 STDIN 来询问,因为 rpm 在执行小脚本之前关闭此描述符。
最佳实践是使用配置文件。例如/etc/abc/ip.conf
。和:
指示用户手动(或使用 Ansible)更改该文件并存储其正确数据
或者不要
/etc/abc/ip.conf
在主abc
包中分发,而是需要abc-config
. 然后创建一个或多个配置包,如下所示:
Package: abc-testing-config
Provides: abc-config
...
%files
/etc/abc/ip.conf
然后您指示用户安装abc abc-test-config
. 或者它可以是abc abc-EMEA-config
等等......
推荐阅读
- javascript - 在 NodeJS 中,如何从其 URL 访问 google-sheets ID?
- c# - 如何将 mdpi 文件夹中的图像分配给 Xamarin 中的 ImageView?
- excel - 为创建主 Excel 模板寻找可能的解决方案/变通方法
- python - 正则表达式仅捕获括号内的第一次出现
- c# - 如何根据 BindableProperty 更改、MVVM 样式创建 FadeTo() 动画?
- python - 优化 A-Star (A*) 路径查找
- python - 如何修复 ImportError:没有名为“telebot”的模块
- oracle - 业务电话号码和手机号码是两个字段获取相同的数据,为什么?
- python - 计算我用递归划分了多少次
- r - R中排除的正则表达式