Mise à niveau distian Debian 100% non interactive

38

Existe-t-il un moyen de créer apt-get dist-upgradedans Debian une réponse non seulement «oui» automatique à toutes les questions posées, mais également d'utiliser des valeurs par défaut raisonnables pour répondre à des questions suffisamment sophistiquées pour nécessiter l'ouverture de diverses boîtes de dialogue interactives? Je pense ici aux éléments de clavier qui apparaissent lors de la mise à niveau libc6et aux choix d’images du noyau.

Le but est de pouvoir initier à distance dist-upgradeune machine assez volumineuse - même pour une machine qui est sérieusement en retard - et de ne pas avoir à la garder du tout, à moins que quelque chose ne soit horriblement, catastrophiquement faux.

C'est sûrement possible?

Merci d'avance!

Alex Balashov
la source
Pour ceux qui ne souhaitent que mettre à niveau (plutôt que dist-upgrade) sur Ubuntu, essayez le paquet de mise à niveau sans surveillance .
Jo Liss

Réponses:

42

Si vous définissez DEBIAN_FRONTEND=noninteractive(pour que les invites debconf n'apparaissent plus) et que vous ajoutiez force-confoldet force-confdefà votre /etc/dpkg/dpkg.cfgfichier, vous devriez avoir une expérience d'installation de paquet totalement non interactive. Tout paquet qui vous demande toujours des informations a un bogue critique pour la publication (et je le dis à la fois en tant que drogué en automatisation et en tant que développeur Debian).

femme
la source
Cela n'a pas fonctionné pour moi. apt-listchangesa été ouvert par less.
Magnétar
@magnetar: C'est un problème avec apt-listchanges, pas avec apt. Désinstallez apt-listchanges ou configurez-le correctement.
womble
1
Essayez: env APT_LISTCHANGES_FRONTEND = aucune apt-get dist-upgrade -u -y
H.-Dirk Schmitt le
21

Florian Lohoff a publié un moyen d’obtenir ce que womble a suggéré en une seule commande:

DEBIAN_FRONTEND=noninteractive \
apt-get \
-o Dpkg::Options::="--force-confnew" \
--force-yes \
-fuy \
dist-upgrade

Bien sûr, vous pouvez également utiliser -o Dpkg::Options::="--force-confnew --force-confdef"(recherchez confnew dans la page de manuel dpkg). Je ne sais pas dans quels cas cela ferait une différence. J'ai personnellement besoin de la mise à niveau non interactive pour mettre à jour les images vanilla. Dans ce cas, je suppose que choisir le nouveau fichier de configuration (sans --force-confdef) est une chose raisonnable.

Jo Liss
la source
W: --force-yes is deprecated, use one of the options starting with --allow instead.
Alex
3

Bien que la réponse de womble ci-dessus soit généralement bonne, cela ne fonctionna pas pour moi et je dus faire des recherches supplémentaires pour rester à 100% sans surveillance. Je pensais partager le résultat de manière concise pour simplifier les choses pour les futurs visiteurs.

Ce qui suit est un script qui s'exécutera conformément aux recommandations de mise à niveau (principalement) de la version 8 des notes de publication de Debian, ainsi que des indicateurs et des variables d’environnement qui le rendront autonome. (les echos sont juste pour le débogage et peuvent être supprimés - bien que je recommande de les garder ainsi si le script est bloqué vous saurez où)

#!/bin/bash

apt-get remove apt-listchanges --assume-yes --force-yes &&

#using export is important since some of the commands in the script will fire in a subshell
export DEBIAN_FRONTEND=noninteractive &&
export APT_LISTCHANGES_FRONTEND=none &&

#lib6c was an issue for me as it ignored the DEBIAN_FRONTEND environment variable and fired a prompt anyway. This should fix it
echo 'libc6 libraries/restart-without-asking boolean true' | debconf-set-selections &&

echo "executing wheezy to jessie" &&
find /etc/apt -name "*.list" | xargs sed -i '/^deb/s/wheezy/jessie/g' &&

echo "executing autoremove" &&
apt-get -fuy --force-yes autoremove &&

echo "executing clean" &&
apt-get --force-yes clean &&

echo "executing update" &&
apt-get update &&

echo "executing upgrade" &&
apt-get --force-yes -o Dpkg::Options::="--force-confold" --force-yes -o Dpkg::Options::="--force-confdef" -fuy upgrade &&

echo "executing dist-upgrade" &&
apt-get --force-yes -o Dpkg::Options::="--force-confold" --force-yes -o Dpkg::Options::="--force-confdef" -fuy dist-upgrade
Tom Klino
la source
1
Remarque: "--force-yes Force yes; c’est une option dangereuse qui incitera à continuer sans demander d’informations si elle fait quelque chose de potentiellement dangereux. Elle ne doit pas être utilisée sauf dans des situations très spéciales. Utiliser force-yes peut potentiellement détruire Votre système! Élément de configuration: APT :: Get :: force-yes. Il est déconseillé et remplacé par --allow-downgrades, --allow-remove-essential, --allow-change-held-packages dans 1.1. ""
Alex
1

> = Apt 1.1

Si vous utilisez Apt 1.1 ou au- dessus, --force-yesa été dépréciée , de sorte que vous avez à utiliser les options commençant par la --allowplace, par exemple --allow-downgrades, --allow-remove-essential, --allow-change-held-packages.

La commande est donc:

DEBIAN_FRONTEND=noninteractive \
  apt-get \
  -o Dpkg::Options::=--force-confold \
  -o Dpkg::Options::=--force-confdef \
  -y --allow-downgrades --allow-remove-essential --allow-change-held-packages \
  dist-upgrade

Remarque: Utilisez cette option --force-confoldpour conserver l’ancien et --force-confnewpour conserver les nouvelles configurations.

Source: CFE-2360: Indiquer la version du module de paquet apt_get .

En relation:

Kenorb
la source
-4

De la apt-get(8)page de manuel:

   -y, --yes, --assume-yes
       Automatic yes to prompts; assume "yes" as answer to all prompts
       run non-interactively. If an undesirable situation, such as
       changing a held package, trying to install a unauthenticated
       package or removing an essential package occurs then apt-get will
       abort. Configuration Item: APT::Get::Assume-Yes.

Pour référence, l' -yoption fonctionne yum(8)également.

Koenigdmj
la source
5
Je sais à ce sujet. J'utilise ce drapeau et il répond avec succès «oui» aux questions APT O / N standard sur le maintien du remplacement des configurations existantes, etc., etc. Ce ne sont pas les questions dont je parle. Quand je fais un apt-get -y dist-upgrade, il me donnait quand même quelques invites de 'dialogue' indiquant ce qu'il considère comme des choses coûteuses, telles que les changements de keymap, le redémarrage du service lié à libc6, etc. Je cherchais un indicateur supplémentaire pour éteignez ça aussi.
Alex Balashov