如何在安装过程中将参数动态传递给RPM

问题描述

我们需要在RPM安装过程中动态传递一个变量并将其捕获到spec文件中,以触发%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 solution] $ sudo rpm -Uvh --force abc.noarch.rpm --define'_ip 10.1.2.4'--define'version 3' 正在准备... ############################### [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也无法询问,因为在执行scriptlet之前rpm关闭此描述符。

最佳做法是使用配置文件。例如。 /etc/abc/ip.conf。并且:

  1. 指示用户手动(或使用Ansible)更改该文件并存储其正确数据

  2. ,或者不要在主/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等。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...