Comment installer des packages avec APT sans interaction avec l'utilisateur?

9

J'ai un script qui télécharge et remplace les en-têtes du noyau dans 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  
}

Le problème que j'ai est qu'après que aptitude ait téléchargé le paquet, il jette le script dans une interface graphique et pose à l'utilisateur un tas de questions. Existe-t-il un moyen de sauter ceci ou d'envoyer un onglet / entrer aux moments appropriés pour sélectionner "OK" pour toutes les réponses?

에이 바
la source
1
Je ne sais pas si cela fonctionne dans votre cas, mais le réglage DEBIAN_FRONTEND = noninteractivefonctionne pour les mises à niveau des versions debian / ubuntu.
Daniel t.

Réponses:

9

Sur la base du commentaire de Daniel t, j'ai pu le faire avec DEBIAN_FRONTEND=noninteractive

DEBIAN_FRONTEND=noninteractive /usr/bin/apt-get install -y -q --force-yes linux-image-2.6.32-5-amd64 
에이 바
la source
1
Vous devez également rechercher la préconfiguration des packages. Cela vous permet de répondre aux questions avant même qu'elles ne soient posées.
Zoredache
4

Attention, cette réponse que je cite ne supprimera pas tous les dialogues, elle affichera tout de même ce que APT / DPKG juge critique . Il est peut-être préférable d'expérimenter la deuxième option + en utilisant l' readlineinterface pour debconfet de préparer un fichier de réponses.

Citant d'un site sœur :

Cela devrait faire ce que vous avez demandé; poser ensuite les questions de configuration:

$ 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

Vous pouvez également essayer de poser toutes les questions de configuration avant:

$ 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
la source
La mise à niveau apt-get ne fonctionnera pas dans ma situation. Je remplace les en-têtes du noyau, je ne mets pas à niveau le noyau vers une nouvelle version, mais je sélectionne une version différente.
에이 바
J'ai cité la réponse telle quelle. Cela fonctionne avec apt-get installet dpkg-configuresera appelé dans les deux cas.
fuero
Cela invite toujours l'utilisateur à répondre à des questions, qu'il ne verra pas car cette partie du script s'exécute dans une fonction - je pourrais le changer mais la personne qui exécute le script (qui n'est pas moi) ne comprendra pas. Je cherchais vraiment une solution automatisée.
에이 바
0

Vous pouvez envoyer tout ce que vous voulez avec l'outil expect, étant donné que vous pouvez identifier les «heures appropriées» (car l'entrée ne change pas).

Hauke ​​Laging
la source
Le nombre de fois où vous cliquez sur "OK" varie selon la machine et ses configurations.
에이 바
Cela seul ne serait probablement pas un problème tant qu'il est possible de reconnaître correctement les questions (ou la fin des questions).
Hauke ​​Laging