我如何要求 apt-get 跳过任何交互式安装后配置步骤?

我如何要求 apt-get 跳过任何交互式安装后配置步骤?

我有一个服务器构建脚本,它使用 apt-get 安装软件包。然后它将预先编写的配置文件直接放到位,因此不需要诸如 postfix 之类的软件包中的交互式安装后配置对话框。我如何跳过安装的这个阶段?它会产生一些我宁愿避免的手动干预。

我知道这个-qq选项,但手册页警告不要在未指定无操作修饰符的情况下使用它。我想要执行某个动作,我只想抑制其中的特定部分。

答案1

为避免这种情况,您可以采取一些措施。将变量设置DEBIAN_FRONTENDnoninteractive并使用-y标志。例如:

export DEBIAN_FRONTEND=noninteractive
apt-get -yq install [packagename]

如果需要通过 sudo 安装,请使用:

sudo DEBIAN_FRONTEND=noninteractive apt-get -yq install [packagename]

答案2

我发现设置在某些情况下不起作用,-yqq最后停顿DEBIAN_FRONTEND=noninteractiveapt-get

Restarting the system to load the new kernel will not be handled automatically, so you should consider
rebooting. [Return]

直到您按下键后它才会退出enter

我的解决方案是按照其他人建议的方式进行,同时使用yes管道传输,apt-get如下所示

yes | sudo DEBIAN_FRONTEND=noninteractive apt-get -yqq purge 'my-package'

答案3

如果您要在自动堆栈中定期运行这些命令,您可以apt在 bash 脚本中将其重新定义为一个函数,这样您就不必记住所有内容:

## apt ##
function apt {
    export DEBIAN_FRONTEND=noninteractive
    export DEBIAN_PRIORITY=critical
    export PATH='/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin'
    command /usr/bin/apt --yes --quiet --option Dpkg::Options::=--force-confold --option Dpkg::Options::=--force-confdef "$@"
}

或者更好的是,只是将其重命名为喜欢my_apt或其他名称。

然后它可以在子函数中使用,下面是我们在SlickStack

## ss_apt_update ##
function ss_apt_update {
    apt update > /dev/null 2>&1
}

## ss_apt_upgrade ##
function ss_apt_upgrade {
    apt upgrade > /dev/null 2>&1
}

## ss_apt_full_upgrade ##
function ss_apt_full_upgrade {
    apt full-upgrade > /dev/null 2>&1
}

相关内容