web-dev-qa-db-fra.com

100% non interactif debian dist-mise à niveau

Y a-t-il un moyen de faire un apt-get dist-upgrade Dans Debian, cela ne répond pas seulement automatiquement "oui" à toutes les questions posées, mais utilise également des valeurs par défaut raisonnables comme des réponses aux questions suffisantes de manière sophistiquée pour exiger diverses boîtes de dialogue interactives à apparaître? Je pense ici aux trucs Keymap qui apparaît lorsque vous mettez à niveau libc6 et des choix d'images du noyau.

L'objectif est de pouvoir initier à distance un assez grand dist-upgrade - Même pour une machine qui est sévèrement derrière l'époque - et ne pas avoir à le goûter du tout, à moins que quelque chose soit horriblement, désastreusement faux.

C'est sûrement possible?

Merci d'avance!

40
Alex Balashov

Si vous définissez DEBIAN_FRONTEND=noninteractive (arrêter Debconf invite à apparaître) et ajoutez force-confold et force-confdef à ton /etc/dpkg/dpkg.cfg Fichier, vous devez avoir une expérience d'installation de package complètement non interactive. Tout emballage qui vous invite toujours à des informations ait un bogue critique de publication (et je dis cela comme une automatisation junkie -et en tant que développeur Debian).

42
womble

Florian Lohoff Publié Un moyen d'obtenir ce que Womble a suggéré dans 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 la page Page DPKG pour Confnef). Je ne suis pas sûr dans quels cas cela ferait une différence cependant. J'ai personnellement besoin de la mise à niveau non interactive pour amener les images à la vanille à jour, auquel cas je suppose toujours choisir le nouveau fichier de configuration (sans --force-confdef) est une chose raisonnable.

22
Jo Liss

Même si la réponse de Womble ci-dessus est généralement bonne, elle n'a pas fonctionné pour moi et je devais faire des recherches supplémentaires pour aller à 100% sans surveillance. Je pensais que je partagerai le résultat de manière concise pour rendre les choses plus simples pour les futurs visiteurs.

Ce qui suit est un script qui fonctionnera selon les recommandations de mise à niveau de Notes de publication de Debian 8 (principalement) ainsi que des drapeaux et des variables d'environnement qui le feront sans surveillance. (Les echos sont juste pour le débogage et pourraient être supprimés - bien que je recommande de les garder afin que le script soit 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
4
Tom Klino

> = Apt 1.1

Si vous utilisez APT 1.1 ou plus, --force-yes a été obsolète , vous devez donc utiliser les options commençant par --allow Au lieu de cela, par exemple. --allow-downgrades, --allow-remove-essential, --allow-change-held-packages.

Donc, la commande est:

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 --force-confold Pour garder vieux, et --force-confnew Pour conserver de nouvelles configures.

Source: CFE-2360: faire au courant de la version du module de package apt_get .

En rapport:

2
kenorb