Est-ce que Per apt-get (ou aptitude) est exécuté avec -y mais ne demande pas le remplacement des fichiers de configuration?
J'ai fait ce qui suit:
ec2run ami-3c994355 --region us-east-1 -n 1 -t m1.large -z us-east-1d
Sur la machine:
sudo apt-get update
sudo apt-get -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" dist-upgrade
Je reçois toujours une invite me demandant quel fichier de configuration je veux utiliser. Voici les lignes qui précèdent l’invite:
Setting up grub-pc (1.99-21ubuntu3.1) ...
ensuite:
┌───────────────────────────────────────────────────────┤ Configuring grub-pc ├───────────────────────────────────────────────────────┐
│ A new version of configuration file /etc/default/grub is available, but the version installed currently has been locally modified. │
│ │
│ What do you want to do about modified configuration file grub? │
│ │
│ install the package maintainer's version │
grub2
apt
amazon-ec2
Fratrik
la source
la source
Réponses:
Le
/etc/default/grub
fichier est généré au moment de l'installation du paquet, ce qui est nécessaire car il s'intègre à debconf. Cela signifie qu'il ne peut pas être traité comme un fichier de configuration dpkg, et que le traitement du fichier de configuration de dpkg ne le sait pas.Au lieu de cela, il utilise
ucf
un outil Debian plus sophistiqué pour gérer la configuration. Malheureusement, cela ne comprend pas les options de dpkg, donc le réglageDpkg::Options::="--force-confdef"
ne vous aidera pas. Il a sa propre façon de faire des mises à niveau sans invite, via les variables d'environnementUCF_FORCE_CONFFNEW
etUCF_FORCE_CONFFOLD
.ucf
utilisedebconf
pour les invites, aussi définir l'interface de debconf pournoninteractive
faire taire le message. Si vous voulez vraiment des mises à jour non interactives, vous devrez quand même le faire - des paquets arbitraires peuvent poser des questions à debconf (bien que ce ne soit généralement pas le cas lors des mises à niveau).Vous pouvez définir l'interface debconf comme un élément unique en l'ajoutant
DEBIAN_FRONTEND=noninteractive
à votre environnement ou vous pouvez la définir de manière permanente en exécutantdpkg-reconfigure debconf
et en sélectionnant l'interface frontale non interactive. Si vous utilisez l'interface frontale non interactive, vous aurez la réponse par défaut à toutes les questions qu'un paquet peut poser.Car
ucf
, la réponse par défaut est «Conserver le fichier existant».Ainsi, la commande complète pour effectuer une mise à jour vraiment 100% garantie¹ ne nécessitant aucune invite serait.
¹: Il est techniquement possible que les paquets utilisent une autre méthode d’invite que debconf, mais cela est contraire à la politique Debian. Si vous rencontrez un tel paquet, créez un bogue.
la source
abandonnant la réponse de RAOF et après avoir passé d'innombrables heures à chercher sur le Web pour pouvoir effectuer une mise à jour et une mise à niveau complètement manuelles sur Ubuntu 12.04, je suis parvenu à cela grâce au fait que cet article ( https: // bugs .launchpad.net / ubuntu / + source / grub / + bug / 239674 / comments / 1 ) signale que grub adhère à UCF et non à Dpkg Options lorsque vous souhaitez utiliser les mainteneurs de paquet grub menu.lst au lieu de tout menu local possible .lst édite.
J'ai laissé les options Dpkg force-confnew pour d'autres paquets qui ne sont pas grub.
la source
unattended-upgrades
et ayez également modifié une configuration de grub: comment vous positionnez-vousUCF_FORCE_CONFFNEW
dans ce contexte? Ou auriez-vous besoin de mettre la liste noire de grub après la mise à jour?Les solutions précédentes ne fonctionneraient pas avec 16.04. Cela fonctionne à partir de cette réponse sur le dépassement de pile :
la source
Je me suis déjà disputé avec le même problème sous Ubuntu 18.04 ces derniers jours. Lors du lancement d'une nouvelle instance EC2 (en particulier ami-00035f41c82244dab), j'exécute un script d'approvisionnement automatique (via la configuration de données utilisateur fournie au moment de l'initialisation), dont l'une des premières étapes consiste à exécuter une mise à jour / mise à niveau.
Le script est bloqué lorsque l'utilisateur est informé des fichiers GRUB modifiés - d'abord / etc / default / grub, puis /boot/grub/menu.lst. Dans la mesure où il s'exécute en mode sans assistance lorsqu'il est fourni en tant que données utilisateur, le processus est bloqué et ne récupère jamais.
D'après beaucoup de recherches sur Google, il semble que ce soit un problème récurrent de GRUB, sous une forme ou une autre, avec des corrections appliquées, puis régressant à nouveau, pour autant que je sache.
En fin de compte, la seule solution de contournement que j'ai pu appliquer avec succès est le piratage laid suivant dans mon script de provisionnement. Espérons que cela puisse sortir quelqu'un d'autre d'une situation difficile cependant!
Je ne peux que supposer que le problème rencontré est assez spécifique à la version Ubuntu 18.04 AMI actuellement disponible et que toute version mise à jour intégrant de nouveaux packages GRUB peut ne pas être soumise au même problème. En particulier, la nature des modifications à
/etc/default/grub
ne sera probablement pas applicable aux nouvelles versions de l’AMI. Juste en mettant ça là-bas quand même.la source
sudo DEBIAN_FRONTEND=noninteractive apt-get -y -o DPkg::options::="--force-confdef" -o DPkg::options::="--force-confold" -qq --force-yes upgrade