Beim Upgrade von Ubuntu auf einem AWS-Server ist eine neue Version von /boot/grub/menu.lst verfügbar

29

Ich habe gerade versucht, sudo do_release_upgradeauf einem AWS EC2 Ubuntu 13.10-Server ein Upgrade auf 14.04 durchzuführen. Alles lief gut, bis ich die folgende Nachricht erhielt:

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>

Ich habe menu.lst mit Sicherheit nicht geändert, daher gehe ich davon aus, dass die lokalen Änderungen von Amazon vorgenommen werden. Ich werde die Option "Aktuelle lokale Version beibehalten" aktivieren und auf das Beste hoffen.

Aber warum erhalte ich diese Nachricht und wie gehe ich richtig damit um?

Mark Amery
quelle
1
check this unix.stackexchange.com/questions/113732/…
Federico Sierra

Antworten:

8

Dieses Problem kann durch eine Reihe verschiedener Probleme verursacht werden, sodass es keine einzige Lösung gibt. Diese Schritte sollten auf EC2 funktionieren.

Quelle:

Das Problem wird durch einen lokalen und Remote-Änderungskonflikt in der Grub- Legacy-Konfiguration verursacht. Grub Legacy und Grub2 verwenden unterschiedliche Konfigurationspfade:

  • Grub-Erbe: /boot/grub/menu.lst
  • Grub2: /boot/grub/grub.cfg

Ursachen:

Sie verwenden wahrscheinlich ein von Amazon EBS unterstütztes AMI. Instanzen erstellen ihr Root-Dateisystem aus einem vorgefertigten Basisimage (Snapshot). Die Grub-Konfiguration wird in den Snapshot geschrieben, die UCF-Registrierung wird jedoch nicht ordnungsgemäß gelöscht. Dies bedeutet, dass Sie einen Snapshot haben, der denkt, dass die menu.lstKonfiguration lokal geändert wurde. Weitere Informationen finden Sie hier: https://bugs.launchpad.net/ubuntu/+source/cloud-init/+bug/1485685

Warum Ubuntu UCF für Grub verwendet, erfahren Sie hier: https://askubuntu.com/a/147079

Lösung (en):

Eine allgemeine Lösung, die funktioniert, besteht darin, menu.list zu entfernen und neu zu konfigurieren. Dadurch wird sichergestellt, dass der ucf-Registrierungseintrag und die Konfigurationsdatei in denselben Hash aufgelöst werden.

#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

Eine zweite Lösung besteht darin, die UCF-Konfiguration so zu ändern, dass die Änderungen des Betreuers automatisch akzeptiert werden

unset UCF_FORCE_CONFFOLD
export UCF_FORCE_CONFFNEW=YES
ucf --purge /var/run/grub/menu.lst
sudo apt-get dist-upgrade -qq --force-yes

Haftungsausschluss:

Dieses Problem ist sehr umfassend und Anwendungsfälle wirken sich auf die erforderliche Lösung aus. Wenn möglich, wird dringend empfohlen, ein Upgrade auf grub2 durchzuführen. Grub2 kann ohne Änderung der Systemdateien konfiguriert werden.

Darüber hinaus werden unzählige verschiedene Lösungen angeboten und im Ubuntu-Tracker werden Fehlerberichte geöffnet. Ich würde gerne auf alle verlinken, aber keinen Repräsentanten haben.

Viel Glück :)

Menzo Wijmenga
quelle
Ubuntu 18.04 Wenn W: --force-yes veraltet ist, verwenden Sie stattdessen eine der Optionen, die mit --allow beginnen.
Scott Stensland
Es ist 2019 und diese Lösung funktioniert (nicht mehr). Es scheint, dass der Fehler erneut zurückgegangen ist, siehe: bugs.launchpad.net/cloud-images/+bug/1747464
DarkNeuron
0

Meine Version dieser Frage lautet: "Ich habe automatische Kernel-Upgrades auf ec2 und habe dies kürzlich getan apt-get autoremove -y. Auch wenn sudo update-grubich nur 3.13.0-48die in, /boot/grub/menu.lstaber nicht die in den installierten Kerneln aufgelisteten Kernel sehe . Wie verschraubt bin ich?"

Meine Antwort: "Wahrscheinlich nicht verschraubt. Auf anderen Ubuntu-Systemen. menu.lstGibt es noch nicht einmal und update-grubscheint stattdessen die Konfiguration /boot/grub/grub.cfgeinzubauen. Ich vermute, dass dies menu.lstein seltsames Artefakt von EC2s Ubuntu AMI ist, oder ein anderes, das mit dem Packen oder der lokalen Konfigurationsverwaltung interagiert. "

dannyman
quelle
0

Persönlich würde ich an Ihrer Stelle "den Unterschied zwischen den Versionen zeigen", die Änderungen sorgfältig notieren und dann mit den neuen Unterschieden in einer AWS-Instanz "Entwicklung" experimentieren. Wenn ich besonders vorsichtig wäre, würde ich einfach die Manpage für die fraglichen Änderungen lesen (möglicherweise nicht für menu.lst, sondern für eine andere Software wie den Kernel oder was auch immer), um genau herauszufinden, was sich ändert .

Alternativ können Sie diese virtuelle Maschine klonen, das Upgrade durchführen und sehen, was passiert. Wenn dies fehlschlägt, können Sie die neue VM mit einem Nuke versehen und den Vorgang mit einer anderen Auswahl erneut starten. Virtuelle Maschinen sind schon aus diesem Grund großartig.

Ernie
quelle
0

Ich bin gerade auf das gleiche "Problem" mit einem VPS von OVH gestoßen.
In meinem Fall (und vielen anderen, die ich beim Googeln gefunden habe) waren die einzigen Änderungen Leerzeichen.
Woher sie kommen, weiß ich nicht, aber wenn Sie auswählen show the differences between the versionsund die Antwort lautet, No non whitespace changes detectednehmen Sie einfach die Betreuer-Version.

SleepProgger
quelle
-1

Deine Entscheidung

  • Zeigen Sie die Unterschiede zwischen den Versionen

dann

  • Installieren Sie die Version des Paketbetreuers

oder

  • Behalten Sie die aktuell installierte lokale Version bei

Wie auch immer, jetzt kannst du rennen

ls -hl /boot/grub/menu.lst*
diff --suppress-common-lines /boot/grub/menu.lst*
Imya
quelle
1
-1; Dies beantwortet die Frage überhaupt nicht (in der Tat wiederholt es meist nur Teile der Nachricht, die ich bereits zitiert habe), noch erklärt es, warum ich den bereitgestellten Code ausführen möchte oder was er tun wird.
Mark Amery
Dateien Hash nicht übereinstimmen verursachen Meldung mit Optionen, müssen Sie Unterschiede zwischen ihnen finden, um die richtige Option zu wählen. "whatis ls diff" gibt eine Beschreibung der Befehle aus.
Imya
"Hash-Dateien stimmen nicht überein, verursachen Meldung mit Optionen" - Ja, ich kann lesen. Meine Frage ist, warum diese Unterschiede in EC2-Instanzen bestehen und welche Konsequenzen es hat, wenn sie beibehalten oder verworfen werden. Ihre Antwort spricht dies überhaupt nicht an, sondern wiederholt nur das, was in der Nachricht abgedruckt ist. In Ihrer Antwort wird nicht einmal Amazon oder EC2 erwähnt. Es ist nicht relevant für die gestellte Frage.
Mark Amery
Oh, boi, hat nicht einmal Inhalte von Dateien bereitgestellt und wartet, bis andere herausfinden, was auf seinem System vor sich geht.
Imya
1
Es ist nicht "mein System". Ich frage nach dem Standardverhalten der EC2-Installation bei einer Frage zu EC2 und bin mit dem EC2-Tag versehen. Klar, ich habe beschlossen, nicht den gesamten Inhalt der Datei in die Frage zu schreiben, da es nicht erforderlich ist, dass die Frage verstanden und beantwortet wird. Jeder, der Ubuntu auf EC2 verwendet, kann seinen Inhalt überprüfen, wenn er das Problem untersuchen möchte. Ich verstehe nicht, warum von mir erwartet wird, dass ich die Quelle der Datei hier weitergebe, ehe ich den Quellcode einer populären Bibliothek in eine Stapelüberlauf-Frage stecke, bevor ich danach frage.
Mark Amery