9

I have a script that downloads and replaces kernel headers in 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  
}

The problem I'm having is that after aptitude downloads the package it throws the script into a text gui and asks the user a bunch of questions. Is there any way to skip this or send tab/enter at the appropriate times to select "OK" for all answers?

fuero
  • 9,413
  • 1
  • 35
  • 40
에이바
  • 612
  • 4
  • 11
  • 34
  • 1
    I am not sure if it works in your case, but setting `DEBIAN_FRONTEND = noninteractive` works for debian/ubuntu release upgrades. – Daniel t. Feb 13 '13 at 17:06

3 Answers3

11

Based on Daniel t's comment I was able to do this with DEBIAN_FRONTEND=noninteractive

DEBIAN_FRONTEND=noninteractive /usr/bin/apt-get install -y -q --force-yes linux-image-2.6.32-5-amd64 
에이바
  • 612
  • 4
  • 11
  • 34
  • 1
    You should also investigate [preseeding](http://wiki.debian.org/DebianInstaller/Preseed) the packages. This permits you to answer the questions before they are even asked. – Zoredache Feb 13 '13 at 17:51
4

Beware that this answer I quote will not get rid of all dialogues, it will still display what APT/DPKG deems critical. Perhaps it's best to experiment with the second option + using the readline frontend for debconf and to prepare an answer file.

Quoting from a sister site:

This should do what you asked; asking the config questions afterward:

$ 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

Alternatively you could try asking all the config questions before:

$ 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
fuero
  • 9,413
  • 1
  • 35
  • 40
  • apt-get upgrade will not work in my situation. I'm replacing kernel headers, not upgrading the kernel to a new version, but selecting a different version. – 에이바 Feb 13 '13 at 17:33
  • I quoted the answer as is. This works with `apt-get install` as well as `dpkg-configure` will be called either way. – fuero Feb 13 '13 at 17:35
  • That still prompts the user to answer questions, which they will not see as that part of the script runs within a function -- I could change it but the person running the script (who is not me) will not understand. I was really looking for an automated solution. – 에이바 Feb 13 '13 at 17:49
0

You can send whatever you want with the tool expect, given that you can identify the "appropriate times" (because the input doesn't change).

Hauke Laging
  • 5,157
  • 2
  • 23
  • 40
  • The amount of times to hit "OK" does vary depending on the machine and its configurations. – 에이바 Feb 13 '13 at 17:30
  • That alone would probably not be a problem as long as it is possible to correctly recognize the questions (or the end of the questions). – Hauke Laging Feb 13 '13 at 17:37