Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux RPM-安装时间参数_Linux_Unix_Build_Redhat_Rpm - Fatal编程技术网

Linux RPM-安装时间参数

Linux RPM-安装时间参数,linux,unix,build,redhat,rpm,Linux,Unix,Build,Redhat,Rpm,我已经将我的应用程序打包到一个RPM包中,比如说,myapp.RPM。在安装此应用程序时,我希望从用户处接收一些输入(输入的示例可以是-安装应用程序的环境-“开发”、“质量保证”、“用户体验”、“产品”)。根据输入,应用程序将安装适当的文件。安装应用程序时是否有方法传递参数 注意:一个可能的解决方案是为每个环境创建一个RPM包。但是,在我们的场景中,这不是一个可行的选择,因为我们有大约20个环境,我们不希望为同一个应用程序提供20个不同的包。通常,RPM包不需要用户交互。RPM人员一次又一次地表

我已经将我的应用程序打包到一个RPM包中,比如说,myapp.RPM。在安装此应用程序时,我希望从用户处接收一些输入(输入的示例可以是-安装应用程序的环境-“开发”、“质量保证”、“用户体验”、“产品”)。根据输入,应用程序将安装适当的文件。安装应用程序时是否有方法传递参数


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

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

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

对于您的具体问题,如果您正在安装不同的内容,您应该创建不同的软件包。如果你尝试做不同的事情,你会越来越多地与RPM系统对抗


创建一个构建系统并不难,它可以生成20多个几乎相似的包。我使用了一个模板ish spec文件和make运行的一些脚本来创建各种spec文件并构建RPM。在不知道具体细节的情况下,听起来您甚至可能拥有一个所有20多个环境软件包都依赖的核心软件包,然后特定于环境的软件包安装任何特定于其目标环境的软件包。

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

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

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

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

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