我只是尝试在AWS EC2 Ubuntu 13.10服务器上执行sudo do_release_upgrade
以升级到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,所以我假设本地修改是亚马逊的做法。 我将打“保持当前版本安装”选项,并希望最好的。
但是,为什么我收到这个信息,这是正确的处理方法?
这个问题可能是由一系列不同的问题引起的,所以没有一个解决scheme。 这些步骤应该在EC2上工作。
这个问题是由Grub传统configuration中的本地和远程更改冲突造成的。 Grub传统和Grub2使用不同的configuration位置:
/boot/grub/menu.lst
/boot/grub/grub.cfg
您可能正在使用Amazon EBS支持的AMI。 实例从预先构build的基础映像(快照)构build其根文件系统。 grubconfiguration写入快照,但是UCFregistry没有正确清除。 这意味着你有一个快照,认为menu.lst
configuration是本地修改的。 更多信息可以在这里find: https : //bugs.launchpad.net/ubuntu/+source/cloud-init/+bug/1485685
为什么Ubuntu使用UCF for grub在这里解释: https : //askubuntu.com/a/147079
一个通用的解决scheme是删除menu.list并重新configuration它。 这确保了ucfregistry项和configuration文件parsing为相同的散列。
#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
第二种解决scheme是修改UCFconfiguration以自动接受维护人员更改
unset UCF_FORCE_CONFFOLD export UCF_FORCE_CONFFNEW=YES ucf --purge /var/run/grub/menu.lst sudo apt-get dist-upgrade -qq --force-yes
这个问题非常广泛,用例会影响所需的解决scheme。 如果可能,强烈build议升级到grub2。 可以在不修改系统文件的情况下configurationGrub2。
还有很多不同的解决scheme提供和ubuntu跟踪器中打开的问题报告。 我很想链接到所有的人,但没有代表。
祝你好运 :)
我的这个问题的版本是这样的:“我在ec2上自动创build内核,最近做了apt-get autoremove -y
,即使在sudo update-grub
我只能在/boot/grub/menu.lst
看到3.13.0-48
但不是安装好的内核,我是怎么搞的?
我的答案是:“可能没有搞砸,在其他的Ubuntu系统上, menu.lst
甚至不存在, update-grub
似乎把configuration放在/boot/grub/grub.cfg
我的猜测是menu.lst
是一些来自EC2的Ubuntu AMI的奇怪的神器,或者一些与包装或本地configurationpipe理交互的东西。“
就我个人而言,我将“展示版本之间的差异”,仔细logging所做的更改,然后在“开发”AWS实例中尝试新的差异。 如果我要格外谨慎,那么我只是简单地阅读手册页来了解有关的变化(它们可能不是menu.lst,但是其他一些软件,比如内核,或者其他任何软件)来确切地发现什么是变化的。
或者,您可以克隆此虚拟机,执行升级,查看会发生什么情况,如果失败,则可以使用新的虚拟机并使用不同的选项重新启动该过程。 虚拟机非常适合这个原因。
你的select
- 显示版本之间的差异
然后
- 安装包维护者的版本
要么
- 保持当前安装的本地版本
无论如何,现在你可以跑步了
ls -hl /boot/grub/menu.lst* diff --suppress-common-lines /boot/grub/menu.lst*