如何在没有用户交互的情况下使用APT安装软件包?


9

我有一个脚本,可以下载并替换Debian squeeze中的内核头文件。

function fixHeaders(){
    #Replace the kernel headers from OVH with standard kernel headers...
    aptitude -y install linux-image-2.6.32-5-amd64  
    sed s/'GRUB_DEFAULT=0'/'GRUB_DEFAULT=1'/g
    update-grub
    echo "Rebooting the machine. Run this script again after reboot and choose option 2."
    sleep 1
    reboot  
}

我遇到的问题是,在aptitude下载软件包后,它将脚本扔到了文本gui中,并向用户提出了一系列问题。有什么方法可以跳过此操作或在适当的时间发送选项卡/输入以为所有答案选择“确定”吗?


1
我不确定它是否适用于您的情况,但是该设置DEBIAN_FRONTEND = noninteractive适用于debian / ubuntu版本升级。
Daniel t。

Answers:


9

根据Daniel t的评论,我能够做到这一点 DEBIAN_FRONTEND=noninteractive

DEBIAN_FRONTEND=noninteractive /usr/bin/apt-get install -y -q --force-yes linux-image-2.6.32-5-amd64 

1
您还应该调查预装软件包。这使您可以在被问到之前就回答问题。
Zoredache

4

请注意,我引用的答案不会摆脱所有对话,它仍会显示APT / DPKG认为关键的内容。也许最好尝试第二种方法+使用readline前端,debconf并准备一个答案文件。

姐妹网站报价:

这应该按照您的要求进行;之后询问配置问题:

$ DEBIAN_PRIORITY=critical
$ export DEBIAN_PRIORITY
$ apt-get upgrade
# Wait a long time.   Should be almost entirely noninteractive.
$ dpkg-reconfigure --default-priority=medium --unseen-only

或者,您可以尝试在询问所有配置问题之前:

$ apt-get clean
$ cat >> /etc/apt/apt.conf <<EOF
// Pre-configure all packages before
// they are installed.
DPkg::Pre-Install-Pkgs {
    "dpkg-preconfigure --apt --priority=low";
};
EOF
$ apt-get upgrade

apt-get升级在我的情况下不起作用。我要替换内核头文件,而不是将内核升级到新版本,而是选择其他版本。
에이바

我引用了答案。这与apt-get install以及dpkg-configure都会被调用的方式一样。
fuero

但这仍然提示用户回答问题,因为脚本的该部分在函数中运行时他们不会看到-我可以对其进行更改,但运行脚本的人(不是我)将无法理解。我真的在寻找一种自动化的解决方案。
에이바

0

expect鉴于您可以识别“适当的时间”(因为输入不会更改),因此您可以使用该工具发送任意内容。


命中“ OK”的时间确实取决于机器及其配置。
에이바

只要有可能正确地识别问题(或问题的结尾),那么这本身就不会成为问题。
Hauke Laging
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.