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


30

sudo do_release_upgradeAWS EC2 Ubuntu 13.10サーバーでaを実行して、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>

私は確かにそう、私は地元の変更がAmazonのやっていると仮定し、menu.lstファイルを変更していません。「現在インストールされているローカルバージョンを維持する」オプションを選択し、最善を期待します。

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


回答:


8

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

ソース:

この問題は、Grubのレガシー構成でのローカルおよびリモートの変更の競合が原因です。Grub legacyと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がgrubにUCFを使用する理由はここで説明されています: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トラッカーでは、さまざまなソリューションが提供され、問題レポートが開かれています。それらすべてにリンクしたいのですが、担当者はいません。

がんばろう :)


ubuntu 18.04でW:--force-yesが表示されなくなりました。代わりに--allowで始まるオプションのいずれかを使用してください。
スコットステンランド

2019年であり、このソリューションは機能しません(もう)。バグが再び回帰しているようです。bugs.launchpad.net
images

0

この質問の私のバージョンが行く:「私はEC2の自動カーネルupatesを持っており、最近はやったapt-get autoremove -y。後でもsudo update-grub、私が唯一の参照3.13.0-48に記載されている/boot/grub/menu.lst。しかし、インストールされていないカーネル間でどのようにねじ込み私は?」

私の答え:「おそらくねじ込まれてmenu.lstいません。他のUbuntuシステムでは存在しません。代わりupdate-grubに構成を配置している/boot/grub/grub.cfgようですmenu.lst。EC2のUbuntu AMIからの奇妙なアーティファクト、またはパッケージングまたはローカル構成管理との相互作用です。 」


0

個人的には、あなたの代わりに「バージョン間の違いを表示」し、変更点に注意して、「開発」AWSインスタンスで新しい違いを試してみます。私が余分な注意を払っていた場合、問題の変更のマニュアルページを読んで(menu.lst用ではないかもしれませんが、カーネルのような他のソフトウェア、または実際には何か)、何が変わっているのかを正確に見つけます。

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


0

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


-1

あなたの選択

  • バージョン間の違いを示す

それから

  • パッケージメンテナーのバージョンをインストールする

または

  • 現在インストールされているローカルバージョンを保持する

とにかく、今、あなたは走ることができます

ls -hl /boot/grub/menu.lst*
diff --suppress-common-lines /boot/grub/menu.lst*

1
-1; これは質問にまったく答えません(実際、ほとんど引用したメッセージの一部を繰り返しているだけです)、また提供されたコードを実行したい理由やそれが何をするのかを説明しません。
マークアメリー

ファイルハッシュの不一致により、オプション付きのメッセージが表示されます。正しいオプションを選択するには、ファイル間の違いを見つける必要があります。「whatis ls diff」は、コマンドの説明を出力します。
-Imya

「ファイルハッシュの不一致が原因のメッセージとオプション」 -はい、読むことができます。私の質問は、これらの違いがEC2インスタンスに存在する理由と、それらを保持または破棄した結果はどうなるかです。あなたの答えはこれに全く対処しておらず、メッセージに印刷されているものを繰り返すだけです。あなたの答えはAmazonやEC2にさえ言及していません。尋ねられた質問とは関係ありません。
マークアメリー

ああ、boi、ファイルのコンテンツさえ提供しておらず、他の人が彼のシステムで何が起こっているかを知るのを待っています。
-Imya

1
「私のシステム」ではありません。EC2についての質問で、EC2タグでタグ付けされた標準のEC2インストール動作について質問しています。もちろん、質問を理解して回答できる必要はないため、ファイルの完全な内容を質問にダンプしないことにしました。EC2でUbuntuを使用している人は誰でも、問題を調査したい場合にその内容をチェックできます。人気のあるライブラリのソースコードを質問する前にStack Overflowの質問にダンプするよりも、ここでファイルのソースを提供することが期待される理由がわかりません。
マークアメリー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.