Как установить пакеты с 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 загружает пакет, он бросает скрипт в текстовый интерфейс и задает пользователю кучу вопросов. Есть ли способ пропустить это или отправить вкладку / ввод в соответствующее время, чтобы выбрать «ОК» для всех ответов?

에이 바
источник
1
Я не уверен, работает ли он в вашем случае, но настройка DEBIAN_FRONTEND = noninteractiveработает для обновлений выпуска Debian / Ubuntu.
Даниил Т.

Ответы:

9

На основании комментария Даниила я смог сделать это с 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, учитывая, что вы можете определить «подходящее время» (потому что ввод не меняется).

Хауке Лагинг
источник
Количество нажатий кнопки «ОК» зависит от машины и ее конфигурации.
바 바
Это само по себе, вероятно, не будет проблемой, если можно правильно распознать вопросы (или конец вопросов).
Хауке Лэнг