Je viens d'essayer de faire un Sudo do_release_upgrade
sur un serveur AWS EC2 Ubuntu 13.10 pour effectuer la mise à niveau vers 14.04. Tout allait bien jusqu'à ce que je reçoive le message suivant:
A new version of /boot/grub/menu.lst is available, but the version installed currently has been locally modified. What would you like to do about menu.lst? * install the package maintainer's version * keep the local version currently installed * show the differences between the versions * show a side-by-side difference between the versions * show a 3-way difference between available versions * do a 3-way merge between available versions (experimental) * start a new Shell to examine the situation <Ok>
I n'a certainement pas modifié menu.lst, donc je suppose que les modifications locales sont effectuées par Amazon. Je vais cliquer sur l'option "garder la version locale actuellement installée" et espérer le meilleur.
Mais pourquoi reçois-je ce message, et est-ce la bonne façon de le gérer?
Ce problème peut être dû à différents problèmes, il n'y a donc pas de solution unique. Ces étapes devraient fonctionner sur EC2.
Le problème est dû à un conflit de modifications local et distant dans la configuration héritée Grub . Grub legacy et Grub2 utilisent différents emplacements de configuration:
/boot/grub/menu.lst
/boot/grub/grub.cfg
Vous utilisez probablement une AMI basée sur Amazon EBS. Les instances construisent leur système de fichiers racine à partir d'une image de base prédéfinie (instantané). La configuration de grub est écrite dans l'instantané, mais le registre UCF n'est pas purgé correctement. Cela signifie que vous avez un instantané qui pense que le menu.lst
config a été modifié localement. Plus d'informations peuvent être trouvées ici: https://bugs.launchpad.net/ubuntu/+source/cloud-init/+bug/1485685
Pourquoi ubuntu utilise UCF pour grub est expliqué ici: https://askubuntu.com/a/147079
Une solution générale qui fonctionne est de supprimer menu.list et de le reconfigurer. Cela garantit que l'entrée de registre ucf et le fichier de configuration sont résolus sur le même hachage.
#Remove the menu.lst config.
Sudo rm /boot/grub/menu.lst
# Generate a new configuration file.
Sudo update-grub-legacy-ec2 -y
#Upgrade the configuration
Sudo apt-get dist-upgrade -qq --force-yes
Une deuxième solution consiste à modifier la configuration UCF pour accepter automatiquement les modifications du responsable
unset UCF_FORCE_CONFFOLD
export UCF_FORCE_CONFFNEW=YES
ucf --purge /var/run/grub/menu.lst
Sudo apt-get dist-upgrade -qq --force-yes
Ce problème est très large et les cas d'utilisation auront un impact sur la solution requise. Si possible, il est fortement recommandé de passer à grub2. Grub2 peut être configuré sans modifier les fichiers système.
Il existe également une tonne de solutions différentes proposées et des rapports de problèmes ouverts dans le tracker ubuntu. J'adorerais créer un lien vers chacun d'eux, mais je n'ai pas de représentant.
Bonne chance :)
Je viens de rencontrer le même "problème" avec un VPS d'OVH.
Dans mon cas (et bien d'autres que j'ai trouvés en cherchant sur Google), les seuls changements étaient des espaces blancs.
D'où ils viennent, je ne sais pas, mais si vous sélectionnez show the differences between the versions
et la réponse est No non whitespace changes detected
prenez simplement la version mainteneurs.
Ma version de cette question est la suivante: "J'ai des mises à jour automatiques du noyau sur ec2, et j'ai récemment apt-get autoremove -y
. Même après Sudo update-grub
Je vois seulement 3.13.0-48
répertorié dans /boot/grub/menu.lst
mais pas parmi les noyaux installés. Comment je suis foutu? "
Ma réponse: "Probablement pas vissé. Sur d'autres systèmes Ubuntu. menu.lst
n'existe même pas, et update-grub
semble mettre la configuration dans /boot/grub/grub.cfg
au lieu. Je suppose que menu.lst
est un artefact étrange de l'AMI Ubuntu d'EC2, ou certains interagissant avec le packaging ou la gestion de configuration locale. "
Personnellement, à votre place, je voudrais "montrer la différence entre les versions", prendre soigneusement note des changements, puis expérimenter les nouvelles différences dans une instance AWS de "développement". Si j'étais très prudent, je lirais simplement la page de manuel pour les changements en question (ils pourraient ne pas être pour menu.lst, mais d'autres logiciels comme le noyau, ou diable, quoi que ce soit vraiment) pour savoir exactement ce qui change .
Alternativement, vous pouvez cloner cette machine virtuelle, faire la mise à niveau, voir ce qui se passe et si cela échoue, vous nuke le nouveau VM et recommencer le processus avec un choix différent. Les machines virtuelles sont excellentes pour cette seule raison.