RPM - 安装时间参数

时间:2011-11-24 14:30:23

标签: linux unix build redhat rpm

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

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

3 个答案:

答案 0 :(得分:18)

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

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

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

创建一个可以吐出20多个大致相似的软件包的构建系统并不难。我已经完成了一个模板-theh规范文件和一些由make运行的脚本,它们将创建各种规范文件并构建RPM。在不知道具体细节的情况下,听起来你甚至可能拥有一个所有20多个环境包所依赖的核心包,然后环境特定包安装任何特定于其目标环境的包。

答案 1 :(得分:3)

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

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

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

答案 2 :(得分:0)

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