web-dev-qa-db-ja.com

AWSサーバーでUbuntuをアップグレードすると、「/ boot / grub / menu.lstの新しいバージョンが利用可能になります」

Sudo do_release_upgrade 14.04にアップグレードするAWS EC2 Ubuntu 13.10サーバー。次のメッセージが表示されるまで、すべてうまくいきました。

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 [〜#〜]確かにmenu.lstを変更していないため、ローカルでの変更はAmazonが行っていると思います。 「現在インストールされているローカルバージョンを維持する」オプションを選択して、最善を尽くします。

しかし、なぜこのメッセージが表示されるのですか?これはメッセージを処理する正しい方法ですか?

30
Mark Amery

この問題はさまざまな問題が原因で発生する可能性があるため、単一の解決策はありません。これらの手順はEC2で機能するはずです。

ソース:

この問題は、Grubレガシー構成でのローカルとリモートの変更の競合が原因で発生します。 GrubのレガシーとGrub2は異なる設定場所を使用します:

  • 従来のGrub:/boot/grub/menu.lst
  • Grub2:/boot/grub/grub.cfg

原因:

おそらくAmazon EBS-Backed AMIを使用しています。インスタンスは、事前に作成されたベースイメージ(スナップショット)からルートファイルシステムを構築します。 grub構成はスナップショットに書き込まれますが、UCFレジストリは正しくパージされません。これは、menu.lst構成がローカルで変更されたと考えるスナップショットがあることを意味します。詳細については、こちらをご覧ください: https://bugs.launchpad.net/ubuntu/+source/cloud-init/+bug/1485685

UbuntuがUCFをgrubに使用する理由は次のとおりです: https://askubuntu.com/a/147079

ソリューション:

機能する一般的な解決策の1つは、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

2番目の解決策は、メンテナーの変更を自動的に受け入れるように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トラッカーで問題レポートが開かれます。それらすべてにリンクしたいのですが、担当者がいません。

幸運を :)

8
Menzo Wijmenga

OVHのVPSで同じ「問題」に遭遇しました。
私の場合(およびグーグルで見つけた他の多くの場合)、変更は空白のみでした。
どこから来たのかはわかりませんが、選択した場合show the differences between the versionsと答えはNo non whitespace changes detectedメンテナ版を入手してください。

0
SleepProgger

この質問の私のバージョンは次のとおりです。「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からの奇妙なアーティファクト、またはパッケージングやローカル構成管理と相互作用するものです。」

0
dannyman

個人的には、あなたの代わりに「バージョン間の違いを表示」し、変更内容を注意深くメモしてから、「開発」AWSインスタンスで新しい違いを試してみます。注意が必要な場合は、問題の変更のmanページを読んで(menu.lstではないかもしれませんが、カーネルのような他のソフトウェアや、実際には何か)、何が変更されているかを正確に調べます。

または、この仮想マシンのクローンを作成してアップグレードを行い、何が起こるかを確認し、それが失敗した場合は、新しいVMをnukeして、別の選択肢でプロセスを再開します。仮想マシンは素晴らしいこの理由だけで。

0
Ernie