staging.inyokaproject.org

EFI Nachbearbeitung

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:

Dieser Artikel ist größtenteils für alle Ubuntu-Versionen gültig.

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

Seit mehreren Jahren kommen zunehmend Computer-Systeme auf den Markt, die mit einem Unified Extensible Firmware Interface (U)EFI statt des lange Zeit genutzten BIOS ausgestattet sind. Deshalb soll in diesem Artikel die Aufmerksamkeit auf den durch diese Technik entstehenden Unterschied gelenkt werden.

Beschrieben wird das Konfigurieren eines Rechners nach der Installation, wie es zurzeit bei Ubuntu und deren Derivaten erforderlich werden kann. Es werden Hinweise und Problemlösungen gegeben, wie man Einstellungen vornimmt, die bei einer normal ablaufenden Installation nicht automatisch vorgenommen werden.

Dabei wird in diesem Unterartikel auf Besonderheiten eingegangen, die den ersten Start nach erfolgter Installation betreffen – sofern sie etwas mit der Nutzung von (U)EFI zu tun haben. Anderweitige Probleme mit Ubuntu auf EFI-Systemen, die eventuell nach längerer Laufzeit hervortreten, sind nicht Gegenstand dieses Artikels.

Hinweis:

Alle Hinweise und Beschreibungen in diesem Artikel beziehen sich ausschließlich auf eine Installation auf einem Rechner mit einem (U)EFI-BIOS.

EFI-Eintrag neu erstellen

Sollte ein erster Start mangels EFI-Eintrag nicht auf Anhieb funktionieren, muss dieser (neu) erstellt werden, wie es in EFI Problembehebung (Abschnitt „EFI-Eintrag-wurde-geloescht-oder-zerstoert“) beschrieben ist.

Andere Distribution einbinden

Der Ubuntu-Installer erkennt während der Installation nicht immer andere, bereits vorhandene EFI-Installationen. Deshalb muss man ggf. die Einträge anderer Betriebssysteme im GRUB 2-Menü in einem späteren Arbeitsgang nachholen. Entsprechende Beschreibungen und Vorgaben findet man unter

Andererseits sollte man bei einem Upgrade prüfen, ob der Windows-Eintrag im Grub-Menü, der über ein separates Skript eingebracht wurde, wieder entfernt werden kann.

Hinweis:

Dieses ist konzeptionell so vorgesehen und nicht als Fehler zu betrachten. EFI-Modus bedeutet eben, dass man das UEFI-Boot-Menü zur Auswahl benutzen kann.

Für das Einbinden einer anderen Distribution auf einem externen Datenträger siehe diese separate Beschreibung.

Zusätzliches Bootverzeichnis erstellen

Wenn man bei einem Mehrfach-Bootsystem nicht gleich von Anfang an die Installation von GRUB unterdrückt hat, kann die mehrfache Benutzung des Bootverzeichnisses (/boot/efi)/EFI/ubuntu dazu führen, dass dieses Verzeichnis und dessen Datei(en) bei der Installation eines weiteren Derivats überschrieben werden – insbesondere bei einer Aktualisierung von GRUB_2:-Paketen über das eine oder andere Derivat führt das dann zu unkontrollierten Startbedingungen, da dann die Zuordnung, welches als das primäre System gilt, immer wieder wechselt.

Aus diesem Grund empfiehlt es sich bei einem sekundären Betriebssystems, gleich nach der Installation und nachdem man sich vom allgemeinen funktionieren der neuen Installation überzeugt hat, ein gesondertes Verzeichnis mit einer markanten Bezeichnung zu erstellen, quasi als "Parkplatz" für die redundante nicht benötigte GRUB-Installation und deren automatische Aktualisierungen.

Dazu kann man in der Datei /etc/default/grub in einem Editor mit Root-Rechten [2] die Zeile

GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`

beispielhaft ändern in

GRUB_DISTRIBUTOR="Precise-Server"

und dann GRUB erneut installieren [1]:

sudo grub-install 

Damit wird für diese Installation dauerhaft der GRUB-Installationspfad auf

  • (/boot/efi)/EFI/precise-server

gelegt und auch ein darauf fixierter EFI-Menü-Eintrag im NVRAM angelegt.

Hinweis:

Der Befehl grub-install verändert Großbuchstaben aus der Vorgabe in der Datei /etc/default/grub immer in Kleinbuchstaben!

Systeme ohne secure-boot

Bei Systemen ohne secure-boot-Fähigkeit wird hierbei nur die Datei grubx64.efi im Bootverzeichnis angelegt. Das sekundäre Betriebssystem kann dann auch direkt über das UEFI-Boot-Menü gestartet werden. Dabei werden dann auch die Anweisungen aus der diesem zugehörigen /boot/grub/grub.cfg angewendet.

Systeme mit secure-boot

Bei Systemen mit secure-boot-Fähigkeit werden hierbei die Dateien grubx64.efi, grub.cfg sowie evtl. shimx64.efi angelegt, seit Ubuntu 13.10 noch evtl. zusätzlich die Datei MokManager.efi. Die GRUB-Konfiguration, auf die per grub.cfg verwiesen wird, kommt dabei allerdings nicht zur Anwendung aufgrund von folgendem:

Experten-Info:

Das Verzeichnis /boot/efi/EFI/ubuntu darf nie gelöscht werden – dieses wird immer vom aktuell primären Betriebssystem verwaltet und ggf. (auch automatisch) aktualisiert! Die sekundären Betriebssysteme werden dann über den GRUB 2 Menü-Eintrag im primären Betriebssystem aufgerufen / gestartet.

Im Fall des signierten Ubuntu-GRUB-Bootloaders (secure-boot-fähig) ist die Verwendung der grub.cfg in EFI\ubuntu\ fest verdrahtet 🇺🇸, sodass trotz der Auswahl des sekundären Bootloaders per UEFI-Boot-Menü dadurch immer wieder die /boot/grub/grub.cfg des primären Betriebssystems ausgeführt wird. Um dies zu ändern, müsste dafür in der z.B. EFI\precise-server\grubx64.efi die Zeichenkette "EFI\ubuntu" mittels eines Hex-Editors in "EFI\precise-server" manipuliert werden, wodurch jedoch wegen der dann ungültigen Signatur secure boot nicht mehr möglich ist.

Nachdem ein sekundäres Betriebssystem über die GRUB-Umgebung des primären Betriebssystem erfolgreich gestartet werden kann, sollte man deshalb bei Nutzung von secure boot den zusätzlichen Eintrag für das sekundäre Betriebssystem im NVRAM wieder löschen!

Wenn man auf die Nutzung von secure-boot verzichten kann, kann man einen unsignierten Bootloader (nicht secure-boot-fähig) erzwingen. Dazu deinstalliert man die signierten Pakete und installiert GRUB anschließend neu:

sudo apt purge grub-efi-amd64-signed shim-signed --allow-remove-essential
sudo apt-mark hold grub-efi-amd64-signed shim-signed
sudo grub-install 

Dadurch wird dieser intern automatisch mit der entsprechenden /boot/grub/grub.cfg des sekundären Betriebssystems verknüpft und man kann letzteres dann nicht nur über das GRUB-Menü des primären Systems starten, sondern auch über den entsprechenden Eintrag im UEFI-Boot-Menü.

Eintrag im NVRAM absichern

Ubuntu versucht standardmäßig als Regeleintrag im NVRAM die nächste freie Position ab 0000 aufwärts zu belegen. Wird eine derartige Position aber vom EFI-BIOS für andere Zwecke gebraucht (Hardware- und Hersteller-abhängig) und so dieser Eintrag nur flüchtig angelegt oder z.B. durch Starten von Windows zerstört, ist er dann bei einem Reboot verschwunden und wird im UEFI-Boot-Menü auch nicht mehr angezeigt, und damit ist dieses Ubuntu nicht mehr start- bzw. auswählbar.

Als Lösung wird die Bearbeitung des UEFI-Boot-Menüs empfohlen. Nach einer Wiederherstellung des EFI-Eintrags werden mit

sudo efibootmgr | grep ^Boot[0-9] | cut -b 5-8 

die benutzten Einträge im NVRAM angezeigt. Wird beispielhaft 000A als freier Platz angenommen, kann man dann im Terminal [1] mit

sudo efibootmgr -c -b 000A -d /dev/sda -p 1 -L "Precise Server" -l \\EFI\\precise-server\\grubx64.efi 

einen neuen UEFI-Boot-Menü-Eintrag anlegen (bitte die jeweils doppelten 'backslash' bei der Eingabe beachten). Danach muss dann noch die Bootreihenfolge wieder festgelegt werden auf das primäre Derivat.

Anzeige Grubmenü anpassen

Für Ubuntu wird aufgrund der System-ID als Anzeige im Grubmenü immer "Ubuntu" verwendet, auch wenn es sich z.B. um das Derivat "Lubuntu" handelt. Dieser Umstand als solches ist für viele Benutzer unbefriedigend. Damit diese Anzeige auf das jeweils wirkliche Derivat in einer Installation mit mehreren Derivaten hinweist, kann man sich ab Trusty Tahr für jede Installation auch die zutreffende Bezeichnung anzeigen lassen.

Dazu muss für jede Installation diese Maßnahmen ausgeführt werden. Nach einem [1]

sudo update-grub 

im primären System werden dann auch die Bezeichnungen aus den sekundären Systemen übernommen.

Secure-Boot nachrüsten

Hat man Ubuntu auf einem Rechner mit UEFI ohne secure-boot-Eigenschaften installiert, so kann man diese Schutzmaßnahme auch nachträglich in ein bestehendes System einbringen.

Experten-Info:

Alle ISO-Dateien der verschiedenen Ubuntu-Derivate werden erst nach und nach mit der secure-boot-Eigenschaft ausgestattet, um damit auch gleich in diesem Modus installieren zu können. Man sollte die Fähigkeit des Bootens über eine EFI-Firmware mit aktiven secure-boot vorab mit Ubuntu bzw. einem Derivat seiner Wahl auf z.B. einem USB-Stick ausgiebig testen!

Beispielhafte Einstellungen von secure-boot sind diesen Bildern zu entnehmen. Diese Einstellungen sind im eigenen System sinngemäß aufzusuchen und soweit erforderlich einzustellen.

Bevor man mit der Nachinstallation der Pakete beginnt, sollte man sein System - zumindest aber die Paketlisten - auf den aktuellen Stand bringen. Dazu gibt man in ein Terminal [1] ein:

sudo apt-get update 

Pakete installieren

  • linux-signed-generic

  • grub-efi-amd64-signed

  • shim-signed

Befehl zum Installieren der Pakete:

sudo apt-get install linux-signed-generic grub-efi-amd64-signed shim-signed 

Oder mit apturl installieren, Link: apt://linux-signed-generic,grub-efi-amd64-signed,shim-signed

Es werden, je nach der Ubuntuversion und dem Stand der Updates, weitere Pakete der Installation automatisch hinzugefügt. Mit der Installation der Pakete wird automatisch die GRUB 2-Datei /boot/grub/grub.cfg auf den neuesten Stand gebracht. Bis hierhin ist diese Maßnahme leicht wieder rückgängig zu machen. Man kann diese Pakete in einem Terminal [1] wieder aus dem System entfernen mit

sudo apt-get purge "Liste installierte Pakete" 

Hinweis:

Es wird nur der aktuelle Kernel umgestellt! Bei dem update-grub wird im Submenü-Verzeichnis ab der zweiten Kernelgruppe die bisherigen, nicht signierten Kernel weiter verwendet. Erkennbar ist dies daran, dass der Zeile mit

linux	/boot/vmlinuz-3.8.0-0-generic root=UUID=2eea1ed3-a715-4722-8aba-7dc4a7f99e9b ro   quiet splash $vt_handof 

hinter der Kernelbezeichnung das .efi.signed fehlt! Dieser Kernel kann aber im normalen EFI-Modus gestartet und weiterhin als Notstarter verwendet werden.

Nun muss man nur noch in das EFI-BIOS (NVRAM) die neuen Gegebenheiten im Terminal [1] eintragen mit

sudo grub-install --uefi-secure-boot # --force 

Die hierbei erfolgte Anzeige sowie die /boot/grub/grub.cfg sollte man danach erst einmal auf Plausibilität überprüfen, bevor man das System rebootet. Die Option --force wird nur angewendet, wenn je nach der Fehlermeldung ein weiterer Versuch ausgeführt werden soll.

Hinweis:

Wird das System nach der Umstellung im EFI-secure-boot-Modus gestartet, so ist die Option --uefi-secure-boot bei einem erneuten grub-install nicht mehr erforderlich!

Start ohne secure-boot

Ein derart umgestelltes System kann jederzeit auch über den normalen EFI-Modus ohne secure-boot-Einstellung gestartet werden - es erfolgt dann auf dem Monitor der (kurze) Hinweis:

secure boot not enabled

auf dem Bildschirm, was aber keinen Einfluss auf das nachfolgende Starten hat.

Hinweis:

Man sollte beachten, dass - sofern in diesem Zustand ein Kernelupdate ausgeführt wird - das relevante Paket linux-signed-generic entfernt wird und danach mit diesem Kernel kein secure-boot mehr möglich ist. Auch werden nachfolgende Updates ohne die entsprechenden -signed- Pakete ausgeführt. Man muss dann die obige Nachinstallation wiederholen.

Secure-Boot wieder entfernen

Es ist zwar nicht zwingend erforderlich, aber man kann das System durch Entfernen des Paketes grub-efi-amd64-signed wieder auf den normalen EFI-Modus umstellen. Dazu gibt man in das Terminal [1] ein:

sudo apt-get purge grub-efi-amd64-signed 

Zu beachten ist dabei, dass die Einträge im Verzeichnis (/boot/efi)EFI/ubuntu bzw. in einem selbst erstellten Verzeichnis gemäß Anderes Bootverzeichnis von Hand gelöscht werden müssen.

Diese Revision wurde am 3. Mai 2023 23:59 von UlfZibis erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: Ubuntu, Installation, System, BIOS, EFI