【问题标题】:How to dynamically pass parameter to the RPM during installation如何在安装期间将参数动态传递给 RPM
【发布时间】:2021-02-21 04:15:57
【问题描述】:

我们需要在 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 解决方案]$ 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 的值的输入。

【问题讨论】:

    标签: dynamic rpm rpmbuild rpm-spec


    【解决方案1】:

    选项--define 定义宏。使用 rpmbuild 从 SRC.RPM 构建 RPM 时会评估宏。二进制(无论是 arch 还是 noarch)包的每个宏都已经展开。甚至 %bindir 等。

    RPM 生态系统被设计为非交互式的。当可以使用 debconf 提出问题时,这与 DEB 生态系统有很大不同。

    您无法解决它。您甚至无法通过直接读取 STDIN 来询问,因为 rpm 在执行脚本之前关闭此描述符。

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

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

    2. 或者不要在主要的abc 包中分发/etc/abc/ip.conf,而是需要abc-config。然后创建一个或多个配置包,如下所示:

    Package: abc-testing-config
    Provides: abc-config
    ...
    %files
    /etc/abc/ip.conf
    

    然后您指示用户安装abc abc-test-config。或者它可以是abc abc-EMEA-config 等等......

    【讨论】:

    • 还将文件标记为%config,这样您就不会破坏验证。
    猜你喜欢
    • 1970-01-01
    • 2012-06-27
    • 2017-12-13
    • 2012-01-05
    • 2018-08-15
    • 2013-06-04
    • 1970-01-01
    • 1970-01-01
    • 2012-02-13
    相关资源
    最近更新 更多