我有一个通用包需要安装到不同的服务器上。安装是通过相同的 kickstart 模板文件完成的。因此,kickstart 模板用于为每个服务器生成 kickstart,然后在不同的服务器中执行,并将相同的包安装到这些服务器中。在这个包中,我需要创建 ssh 密钥(我设法正确执行此操作,并且在密钥生成的注释部分中,我想传递一个对于每个服务器都不同的变量。)所以我认为应该如何完成就是在这个模板文件中创建一个变量,然后将该变量传递给spec文件。所以:
在启动模板中我这样做:
svr_name=<xsl:value-of select="$node"/>
packages=("svr_xxxxxxx_common"
"svr_common"
)
对于每个 kickstart 实例来说,这都是不同的。在我在 %post 阶段所做的一个包的内部:
ssh-keygen -q -t rsa -f /home/xxx/.ssh/id_rsa -C "${svr_name}" -N ""
但这是行不通的。安装后该变量显示为不存在。 ssh-keygen 工作正常但没有评论。
答案1
在执行 scriptlet 之前,rpm 会清理环境。
您可以使用文件。例如,在启动中:
%pre
echo "svr_XXX" > /foo
然后在%post
rpm 的 scriptlet 中。
%post
SVR_NAME=$(cat /foo)
ssh-keygen -q -t rsa -f /home/xxx/.ssh/id_rsa -C "${SVR_NAME}" -N ""
还应该处理文件的(不)存在以及该文件的更好位置。我把它留给你:)