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?


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 

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

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).


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.