我已经将我的应用程序打包到一个RPM包中,比如myapp.rpm 。 在安装这个应用程序的时候,我想接收用户的一些input(input的一个例子可能是应用程序正在安装的环境 – “dev”,“qa”,“uat”,“prod”)。 基于input,应用程序将安装适当的文件。 有没有办法在安装应用程序时传递参数?
PS:一个可能的解决scheme可能是为每个环境创build一个RPM软件包。 但是,在我们的情况下,这不是一个可行的select,因为我们有大约20个环境,我们不希望为同一个应用程序有20个不同的包。
一般来说,RPM软件包不应该要求用户交互。 RPM人员一次又一次地表示,RPM是没有交互式安装的明确的设计目标。 对于第一次使用前需要某种输入的软件包,通常需要首先使用这些信息,我们将它们全部放在配置文件中,并用宏或其他方式告诉用户他们必须在应用程序可用之前对其进行配置。
即使传递某种参数也算作最终用户交互。 我想你想要的是让你的预先或安装脚本以某种方式自动检测环境,也许通过一个文件,他们可以检查的地方。 我还要指出,从RPM用户的角度来看,拥有一个名为* -qa.rpm的包比传递一些随机参数更直观。
对于你确切的问题,如果你正在安装不同的内容,你应该创建不同的包。 如果你试图以不同的方式做事,你将会越来越多地与RPM系统搏斗。
创建一个可以吐出20多个类似的包的构建系统并不难。 我已经做了一个模板ish spec文件和一些脚本运行的脚本,这将创建各种spec文件和建立RPM。 不知道细节,听起来你甚至可能有一个核心包,所有20个以上的环境包依赖,然后环境特定的包安装任何特定于他们的目标环境。
你可以使用重定位选项,例如
rpm -i --relocate /env=/uat somepkg.rpm
并让脚本从位于“env”目录中的文件中查找变量数据