【问题标题】:RPM - Install time parametersRPM - 安装时间参数
【发布时间】:2012-01-05 17:11:48
【问题描述】:

我已将我的应用程序打包成一个 RPM 包,例如 myapp.rpm。在安装此应用程序时,我想接收用户的一些输入(输入示例可能是 - 安装应用程序的环境 - “dev”、“qa”、“uat”、“prod”)。根据输入,应用程序将安装适当的文件。有没有办法在安装应用时传递参数?

P.S.:一个可能的解决方案是为每个环境创建一个 RPM 包。但是,在我们的场景中,这不是一个可行的选择,因为我们有大约 20 个环境,并且我们不希望同一应用程序有 20 个不同的包。

【问题讨论】:

    标签: linux unix build redhat rpm


    【解决方案1】:

    一般来说,RPM 包不需要用户交互。 RPM 人员一次又一次地表示,RPM 的明确设计目标是不进行交互式安装。对于在首次使用前需要某种输入的软件包,您通常会在首次使用时询问此信息,我们将其全部放入带有宏或其他内容的配置文件中,并告诉您的用户他们必须在应用程序可用之前对其进行配置.

    即使传递某种参数也算作最终用户交互。我认为您想要的是让您的预安装或安装脚本以某种方式自动检测环境,也许通过在他们可以检查的某个地方放置一个文件。我还要指出,从 RPM 用户的角度来看,拥有一个名为 *-qa.rpm 的包比传递一些随机参数要直观得多。

    对于您的确切问题,如果您要安装不同的内容,您应该创建不同的包。如果您尝试以不同的方式做事,您最终会越来越多地与 RPM 系统作斗争。

    创建一个可以生成 20 多个大部分相似的包的构建系统并不难。我已经使用模板规范文件和一些由 make 运行的脚本来完成它,这些脚本将创建各种规范文件并构建 RPM。在不了解具体细节的情况下,听起来您甚至可能拥有一个所有 20 多个环境包都依赖的核心包,然后特定于环境的包安装特定于其目标环境的任何内容。

    【讨论】:

    • 感谢您的回复。实际上,我不需要任何用户交互,就像提示用户输入内容一样。我正在寻找一种将参数与 install 命令一起传递的方法。例如,rpm -i myapp.rpm -dev。有一种方法可以使用适当的值填充文件,以便 rpm 安装程序可以读取它并检索所需的值。我正在寻找比这更优雅的东西。
    • 我将其视为用户交互。我认为您想要的是让您的预安装或安装脚本以某种方式自动检测环境,也许通过在他们可以检查的某个地方放置一个文件。我还要指出,从 RPM 用户的角度来看,拥有一个名为 *-qa.rpm 的包比传递一些随机参数更直观。
    • 我将上面评论中的信息添加到我的答案中。
    • 环境变量可以通过转义$%pre%post中引用,如下所示:\$MY_SPECIAL_VARIABLE ...另外,变量\$RPM_INSTALL_PREFIX引用了传递的位置作为--prefix $MY_CUSTOM_INSTALL_PATH
    • @saravana_pc 您可以使用运行时 RPM 宏。该命令如下所示:rpm -i myapp.rpm -D "mode dev" 其中“mode”是宏的名称,“dev”或任何字符串是它在 scriplets 中扩展为的值。
    【解决方案2】:

    您可以使用重定位选项,例如

    rpm -i --relocate /env=/uat somepkg.rpm
    

    并让您的脚本从位于“env”目录中的文件中查找变量数据

    【讨论】:

      【解决方案3】:

      我认为这是一个非常有效的问题,尤其是当您进入应用程序开发领域时。为不同的目标系统配置应用程序是您的日常工作:您需要为开发、集成测试、验收测试、生产等进行配置。我当然不认为为每个环境构建单独的包是解决方案。基本上它应该是在不同环境中运行的相同代码。 我知道 rpm 不支持此要求。但是你可以做的是使用一个简单的配置文件,%pre 脚本知道 寻找。配置文件可以是一个简单的 shell 脚本,例如设置环境变量,然后不同的 und pre 和 post 脚本可以使用它们。

      【讨论】:

        猜你喜欢
        • 2012-12-15
        • 2021-02-21
        • 2019-05-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-28
        • 1970-01-01
        • 2013-01-31
        相关资源
        最近更新 更多