Comment automatiser les fichiers de configuration modifiés lors de la mise à niveau d'apt-get dans Ubuntu 12

13

J'aime utiliser "couteau cloudstack server create ..." pour construire une nouvelle machine virtuelle. Mon modèle de bootstrap commence par une "mise à jour apt-get" et une "mise à niveau apt-get -y".

La mise à niveau s'arrête alors avec:

10.190.113.11 Configuration file `/etc/nscd.conf'
10.190.113.11  ==> Modified (by you or by a script) since installation.
10.190.113.11  ==> Package distributor has shipped an updated version.
10.190.113.11    What would you like to do about it ?  Your options are:
10.190.113.11     Y or I  : install the package maintainer's version
10.190.113.11     N or O  : keep your currently-installed version
10.190.113.11       D     : show the differences between the versions
10.190.113.11       Z     : start a shell to examine the situation
10.190.113.11  The default action is to keep your current version.
10.190.113.11 *** nscd.conf (Y/I/N/O/D/Z) [default=N] ?

Il y a donc vraiment deux problèmes:

Tout d'abord, puis-je demander à apt-get de faire quelque chose par défaut? De toute évidence, il n'y a aucun moyen de fournir une réponse.

Deuxièmement, je ne sais même pas quelle devrait être la bonne réponse à la question. Le fichier de configuration qu'il remplace provient d'un modèle. Je n'ai pas encore recherché ce que fait "nscd". (Vraisemblablement, "Y" est la bonne réponse, mais la recherche impliquée au moment de la question est intimidante.)

Mojo
la source

Réponses:

15

Vous pouvez passer des arguments pour éviter d'obtenir des invites. Cela fonctionne pour moi;

apt-get update
apt-get --yes --force-yes -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" upgrade
apt-get --yes --force-yes -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" dist-upgrade

--force-confold(mon choix) rendra ces questions "Que voulez-vous faire au sujet du fichier de configuration modifié" par défaut N(conserver votre version actuellement installée)

--force-confold: do not modify the current configuration file, the new version is installed with a .dpkg-dist suffix. With this option alone, even configuration files that you have not modified are left untouched. You need to combine it with --force-confdef to let dpkg overwrite configuration files that you have not modified.
--force-confnew: always install the new version of the configuration file, the current version is kept in a file with the .dpkg-old suffix.
--force-confdef: ask dpkg to decide alone when it can and prompt otherwise. This is the default behavior of dpkg and this option is mainly useful in combination with --force-confold.
--force-confmiss: ask dpkg to install the configuration file if it’s currently missing (for example because you have removed the file by mistake).

Avertissement - certains fichiers de configuration modifiés peuvent casser votre système s'ils sont conservés et non compatibles avec la version mise à jour du package. Veuillez le tester avant de déployer des solutions d'automatisation.

Jossef Harush
la source
5

Si vous ne voulez absolument pas répondre à des questions interactives, définissez la DEBIAN_FRONTENDvariable frontale sur noninteractive.

Cela peut être aussi simple que DEBIAN_FRONTEND=noninteractive apt-get upgrade.

Vous n'obtiendrez aucun message et les valeurs par défaut seront choisies. Dans la plupart des cas, cela signifie que vos fichiers de configuration ne seront pas modifiés et que vous vous retrouverez avec des fichiers nommés comme *.dpkg-newpour tous les endroits où un fichier de configuration n'a pas été modifié. Vous pouvez ensuite résoudre manuellement les modifications ou pousser votre configuration locale vers le système à l'aide d'un système de gestion de configuration ou autre.

Deuxièmement, je ne sais même pas quelle devrait être la bonne réponse à la question

Appuyer sur la touche D affichera la différence, que vous pourrez ensuite inspecter. Si vous êtes certain que vous n'avez jamais modifié manuellement ce fichier, choisir Y pour le remplacer est probablement sûr (vous avez vérifié que vos sauvegardes sont à DROITE !! ). Choisir N conserve simplement l'ancien fichier qui est également sûr 95% du temps, à moins que le package n'ait des changements majeurs, qui sont généralement couverts dans le journal des modifications / notes de version que vous avez également lu avant d'exécuter la commande upgrade / dist-upgrade.

Après cela, essayez d'abord la commande dans votre environnement de test. Voyez si les choses ne fonctionnent pas. Si vous n'êtes vraiment pas sûr d'obtenir le diff et de lire la documentation du package et de la recherche.

Zoredache
la source
Vous conseillez DEBIAN_FRONTEND = non interactif sur - force-oui? Il semble que par défaut NON, et "oui" est plus probable dans ce cas. (Je ne peux toucher aucune touche car il n'y a pas de stdin.)
Mojo