Я просто пытался сделать sudo do_release_upgrade
на сервере AWS EC2 Ubuntu 13.10 для обновления до 14.04. Все шло хорошо, пока я не получил следующее сообщение:
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>
я конечно, не изменял menu.lst, поэтому я предполагаю, что локальные изменения - дело рук Amazon. Я собираюсь выбрать вариант «оставить текущую локальную версию» и надеюсь на лучшее.
Но почему я получаю это сообщение, и правильно ли это сделать?
Эта проблема может быть вызвана целым рядом различных проблем, поэтому единого решения нет. Эти шаги должны работать на EC2.
Проблема вызвана конфликтом локальных и удаленных изменений в Жратва устаревшая конфигурация. Grub legacy и Grub2 используют разные расположения конфигурации:
/boot/grub/menu.lst
/boot/grub/grub.cfg
Вероятно, вы используете AMI с поддержкой Amazon EBS. Экземпляры создают свою корневую файловую систему из предварительно созданного базового образа (снимка). Конфигурация grub записана в снимке, но реестр UCF не очищен правильно. Это означает, что у вас есть снимок, на котором menu.lst
config был изменен локально. Более подробную информацию можно найти здесь: https://bugs.launchpad.net/ubuntu/+source/cloud-init/+bug/1485685
Почему ubuntu использует UCF для grub, объясняется здесь: https://askubuntu.com/a/147079
Одно из общих эффективных решений - это удалить menu.list и перенастроить его. Это гарантирует, что запись реестра ucf и файл конфигурации разрешаются в один и тот же хэш.
#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
Второе решение - изменить конфигурацию UCF для автоматического принятия изменений сопровождающего.
unset UCF_FORCE_CONFFOLD
export UCF_FORCE_CONFFNEW=YES
ucf --purge /var/run/grub/menu.lst
sudo apt-get dist-upgrade -qq --force-yes
Это очень обширная проблема, и ее варианты использования повлияют на необходимое решение. Если возможно, настоятельно рекомендуется перейти на grub2. Grub2 можно настроить без изменения системных файлов.
Также предлагается множество различных решений и отчетов о проблемах, открытых в трекере ubuntu. Я бы хотел дать ссылку на все из них, но у меня нет репутации.
Удачи :)
Лично на вашем месте я бы «показал разницу между версиями», внимательно отметил бы изменения, а затем поэкспериментировал бы с новыми различиями в «разрабатываемом» экземпляре AWS. Если бы я проявлял особую осторожность, я бы просто прочитал справочную страницу об изменениях, о которых идет речь (они могут быть не для menu.lst, а для некоторого другого программного обеспечения, такого как ядро, или, черт возьми, что угодно на самом деле), чтобы точно узнать, что меняется .
В качестве альтернативы вы можете клонировать эту виртуальную машину, выполнить обновление, посмотреть, что произойдет, и, если это не удастся, вы уничтожите новую виртуальную машину и снова запустите процесс с другим выбором. Виртуальные машины хороши только по этой причине.
Моя версия этого вопроса звучит так: "У меня есть автоматические обновления ядра на ec2, и недавно я сделал apt-get autoremove -y
. Даже после sudo update-grub
Я только вижу 3.13.0-48
перечислены в /boot/grub/menu.lst
но не среди установленных ядер. Как я облажался? "
Мой ответ: «Наверное, не облажался. На других системах Ubuntu. menu.lst
даже не существует, и update-grub
похоже, вводит конфигурацию в /boot/grub/grub.cfg
вместо. Я предполагаю, что menu.lst
это какой-то странный артефакт из EC2 Ubuntu AMI, или какое-то взаимодействие с упаковкой или локальным управлением конфигурацией ".
Я просто столкнулся с такой же "проблемой" с VPS от OVH.
В моем случае (и многих других, которые я нашел во время поиска в Google) единственными изменениями были пробелы.
Откуда они, я не знаю, но если вы выберете show the differences between the versions
и ответ No non whitespace changes detected
просто возьмите версию сопровождающей.
Твой выбор
- показать различия между версиями
затем
- установить версию сопровождающего пакета
или
- оставить текущую локальную версию
В любом случае, теперь ты можешь бежать
ls -hl /boot/grub/menu.lst*
diff --suppress-common-lines /boot/grub/menu.lst*