Come installare i pacchetti con APT senza l'interazione dell'utente?


9

Ho uno script che scarica e sostituisce le intestazioni del kernel 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  
}

Il problema che sto riscontrando è che dopo che aptitude ha scaricato il pacchetto lancia lo script in una GUI di testo e pone all'utente un mucchio di domande. Esiste un modo per saltare questo o inviare la scheda / inserire nei momenti appropriati per selezionare "OK" per tutte le risposte?


1
Non sono sicuro che funzioni nel tuo caso, ma l'impostazione DEBIAN_FRONTEND = noninteractivefunziona per gli aggiornamenti della versione debian / ubuntu.
Daniel t.

Risposte:


9

Sulla base del commento di Daniel t, sono stato in grado di farlo DEBIAN_FRONTEND=noninteractive

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

1
Dovresti anche investigare sulla preconfigurazione dei pacchetti. Ciò consente di rispondere alle domande prima ancora che vengano poste.
Zoredache,

4

Fai attenzione che questa risposta che citerò non eliminerà tutti i dialoghi, mostrerà comunque ciò che APT / DPKG ritiene critico . Forse è meglio sperimentare la seconda opzione + usando il readlinefrontend per debconfe preparare un file di risposte.

Citando da un sito affiliato :

Questo dovrebbe fare quello che hai chiesto; porre successivamente le domande di configurazione:

$ 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

In alternativa, puoi provare a porre tutte le domande di configurazione prima di:

$ 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 upgrade non funzionerà nella mia situazione. Sto sostituendo le intestazioni del kernel, non aggiornando il kernel a una nuova versione, ma selezionando una versione diversa.
에이 바

Ho citato la risposta così com'è. Funziona apt-get installcosì come dpkg-configureverrà chiamato in entrambi i modi.
fuero,

Ciò spinge ancora l'utente a rispondere alle domande, che non vedranno mentre quella parte dello script viene eseguita all'interno di una funzione: potrei cambiarla ma la persona che esegue lo script (che non sono io) non capirà. Stavo davvero cercando una soluzione automatizzata.
에이 바

0

Puoi inviare quello che vuoi con lo strumento expect, dato che puoi identificare i "tempi appropriati" (perché l'input non cambia).


Il numero di volte in cui premere "OK" varia in base alla macchina e alle sue configurazioni.
에이 바

Questo da solo probabilmente non sarebbe un problema finché sarà possibile riconoscere correttamente le domande (o la fine delle domande).
Hauke ​​Laging,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.