我一直在尝试通过机器启动时的启动脚本以非交互方式自动安装 postfix。
经过一番研究后,我发现了一些建议,我可以尝试使用所需的配置在示例机器上手动安装它,然后通过使用运行启动脚本时获得有关配置的正确答案
debconf-utils package command debconf-get-selections | grep postfix >preseed.cfg
问题在于一个配置,即邮件名,这是由于我的实例计算机是由 gcp 云主机以非预定方式生成的,当我最初通过第一个配置选择时,我无法提前告诉要传递哪个名称作为:
debconf-set-selections <<< 'postfix postfix/main_mail_type string "Local only"
现在的问题是如何保留默认值? (如果是有人值守的安装,则可以看到,只需单击“确定”即可完成)
答案1
谢谢库萨罗南达!我想现在我明白错误在哪里了。在这个错误出现之前,我确实尝试使用一些期望脚本并在其中生成 bash 下标,作为通过现成的期望发送问题和答案对系列间接交互式安装 postifiX 的方法。后来我决定改变这个计划并完全删除期望脚本并转向DEBIAN_FRONTEND="noninteractive" with debconf-set-selections command
.现在,正如我从该站点上的一些帖子中了解到的,问题显然是由于在主启动脚本中使用 su 命令调用此 bash 下标的修改后的剩余部分(正如您可能知道的那样,postfix 安装应该以 root 权限运行),因为每个当它运行时,它在使用消息 'ERROR OPENNING TERMINAL: UKNOWN' 调用此下标时抛出异常。在我回顾了这里的一些帖子后,我发现我可以通过修改下标代码来解决这个问题,引入一些代码,如下所示
UID=$(ID -U)
if [xUID != x0]
then
printf -v cmd_str '%q'"$0" "$@"
exec su -c "$cmd_str"
fi
#the rest of the script code
#continues hereunder
我对下标进行更改后;删除它的声明,它的激活 chmod,通过注释删除它的 #!/bin/bash 行的调用,并将其功能部分按程序包含到主启动脚本中,现在脚本正在按其应有的方式运行。