48 votes

Mise à niveau de Debian 100% non-interactive

Existe-t-il un moyen de faire un apt-get dist-upgrade dans Debian qui non seulement répond automatiquement "oui" à toutes les questions posées, mais utilise également des valeurs par défaut raisonnables comme réponses aux questions qui sont suffisamment sophistiquées pour nécessiter l'apparition de diverses boîtes de dialogue interactives ? Je pense ici au truc de keymap qui apparaît lors de la mise à jour libc6 et les choix d'images du noyau.

L'objectif est de pouvoir lancer à distance un projet d'envergure. dist-upgrade - même pour une machine très en retard - et ne pas avoir à la surveiller du tout, à moins que quelque chose ne soit tout simplement horrible, désastreusement erronée.

Est-ce possible ?

Merci d'avance !

49voto

Ryan Sampson Points 2898

Si vous définissez DEBIAN_FRONTEND=noninteractive (pour empêcher les invites debconf d'apparaître) et ajoutez force-confold y force-confdef à votre /etc/dpkg/dpkg.cfg vous devriez avoir une expérience d'installation de paquets totalement non interactive. Tout paquet qui vous demande encore des informations présente un bogue critique (et je dis cela à la fois en tant qu'accro à l'automatisation et en tant que développeur Debian).

27voto

Jo Liss Points 2788

Florian Lohoff affichée 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 entendu, vous pouvez également utiliser -o Dpkg::Options::="--force-confnew --force-confdef" (rechercher les Page de manuel dpkg pour confnew). Je ne suis pas sûr de savoir dans quels cas cela ferait une différence. Personnellement, j'ai besoin de la mise à jour non-interactive pour mettre à jour les images vanille, auquel cas je suppose que je choisis toujours le nouveau fichier de configuration (sans --force-confdef ) est une chose raisonnable.

5voto

yonilevy Points 2106

Même si la réponse de womble ci-dessus est généralement bonne, elle n'a pas fonctionné pour moi et j'ai dû faire des recherches supplémentaires avant de me lancer à 100% sans surveillance. J'ai pensé partager le résultat d'une manière concise pour simplifier les choses pour les futurs visiteurs.

Ce qui suit est un script qui s'exécutera selon les recommandations de mise à jour des notes de version de debian 8 (pour la plupart) avec des drapeaux et des variables d'environnement qui le rendront sans surveillance. (le echo sont juste pour le débogage et peuvent être enlevés - bien que je recommande de les garder pour que si le script se bloque, vous sachiez 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

5voto

Zafar Points 241

>= Apt 1.1

Si vous utilisez Apt 1.1 ou plus, --force-yes a été supprimé 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 .

Le commandement est donc le suivant :

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

Note : Utiliser --force-confold pour garder l'âge, et --force-confnew pour conserver les nouvelles configurations.

Source : CFE-2360 : Prise en compte de la version du module de paquetage apt_get .

En rapport :

-3voto

Muhd Points 1311

A partir 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.

À titre de référence, la -y L'option fonctionne sur yum(8) également.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X