Ubuntu 12.10 „Quantal Quetzal“
Ubuntu 12.04 „Precise Pangolin“
Seit mehreren Jahren kommen zunehmend Computer-Systeme auf den Markt, die mit einem Unified Extensible Firmware Interface (U)EFI statt dem 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 zur Zeit 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 Unterabschnitt 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.
Alle Hinweise und Beschreibungen in diesem Artikel beziehen sich ausschließlich auf eine Installation auf einem Rechner mit einem (U)EFI-BIOS. Die Nutzung von secure-boot ist erst ab dem Point-Release 12.04.2 für Ubuntu 12.04 sinnvoll/problemlos möglich.
Falls man es mal geschafft hat, seinen Eintrag im EFI-Menü zu zerstören, im BIOS-Setup diesen aus Versehen zu löschen oder aus anderen Gründen das System nicht mehr starten will, so kann man diesen am Live-Desktop neu erstellen.
Man setzt den für sein System passenden, mit z.B. UNetbootin erstellten USB-Stick ein und startet damit seinen Rechner. Am Desktop stellt man eine chroot-Umgebung von seinem System im Terminal [1] her. Da alle Befehle mit Rootrechten ausgeführt werden müssen, kann man das Benutzer-Terminal auf ein Root-Terminal umstellen mit
sudo -s
Ab jetzt werden alle Eingaben in das Terminal [1] ohne das voran gestellte sudo
ausgeführt. Verlassen wird dieser Modus wieder mit:
exit
Der Befehl
blkid
informiert über die beteiligten Festplatten und Partitionen. Die nachfolgenden Angaben / Annahmen sind an den markierten Stellen an das eigene System anzupassen. Die Root-Partition wird eingebunden mit:
mount /dev/sda4 /mnt
Abweichung bei einem Btrfs-Dateisystem:
mount -o compress,ssd,subvol=@ /dev/sda4 /mnt
Ergänzung bei getrennter /boot-Partition:
mount /dev/sda3 /mnt/boot
Nun erfolgt noch das Einbinden der EFI-Partition
mount /dev/sda1 /mnt/boot/efi
Mit den folgenden Eingaben wird die chroot-Umgebung vorbereitet (am besten Kopieren -> Einfügen verwenden)
for i in dev dev/pts proc sys sys/firmware; do mount --bind /$i /mnt/$i; done
Nun kann man in das beschädigte System wechseln mit
chroot /mnt
und repariert dort die Einstellungen für die Datei /boot/grub/grub.cfg und den Eintrag für das EFI-Menü mit:
update-grub
und nun ohne Angabe einer Festplatte/Partition:
grub-install
Nachdem man sich über die ausgeführten Aktionen informiert hat und diese für richtig befunden hat, kann man das System wieder verlassen mit
exit
Nach einem Reboot aus dem Livesystem sollte der Eintrag "ubuntu" ein Starten in das eigene System wieder erlauben. Am dortigen Desktop kann man dann, soweit erforderlich, weitere Informationen abfragen bzw. Korrekturen / Reparaturen ausführen.
Der Ubuntu-Installer erkennt während der Installation keine weiteren EFI-Installationen, deshalb muss man dieses in einem späteren Arbeitsgang nachholen. Entsprechende Beschreibungen und Vorgaben findet man unter
GRUB 2/Skripte -> andere Betriebssysteme im EFI-Modus starten
Bei einem Mehrfach-Bootsystem führt die mehrfache Benutzung des Verzeichnisses (/boot/efi)/EFI/ubuntu dazu, dass dieses Verzeichnis und dessen Datei(en) bei der Installation eines weiteren Derivats überschrieben wird - insbesondere bei einem Update von GRUB 2-Paketen führt das dann zu unkontrollierten Startbedingungen.
Aus diesem Grund empfiehlt es sich, gleich nach der Installation ein gesondertes Verzeichnis mit einer markanten Bezeichnung zu erstellen.
Die folgende Beschreibung ist aufgeteilt nach ohne secure-boot und mit secure-boot. Ob die Änderung in der /etc/default/grub auch für ein System mit secure-boot dauerhaft funktioniert, ist abhängig vom technischen Layout des (U)EFI-BIOS und muss vorab getestet werden!
Man kann in der Datei /etc/default/grub die Zeile mit
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
beispielhaft ändern in
GRUB_DISTRIBUTOR="Precise_Server"
Damit wird für diese Installation dauerhaft der Startpfad auf
(/boot/efi)/EFI/precise_server
gelegt und auch der Eintrag im NVRAM darauf fixiert.
Das Befehl grub-install
verändert aus der Vorgabe in der Datei /etc/default/grub Großbuchstaben immer auf Kleinbuchstaben!
Man muss wie oben beschrieben, manuell im Terminal [1] ein Verzeichnis mit einer markanten Bezeichnung (je nach aktuellem Pfad) erstellen mit:
cd /boot/efi/EFI
sudo mkdir precise_server
und die Dateien shimx64.efi, grubx64.efi sowie grub.cfg aus dem Verzeichnis /ubuntu in das neu erstellte Verzeichnis kopieren mit:
cp ubuntu/* precise_server/
Dieses Kopieren sollte man nach jeder Veränderung an den grub-efi..-Paketen wiederholen.
Danach muss man die Datei shimx64.efi einschließlich seinem Verzeichnis wie nachfolgend beschrieben in das EFI-Menü eintragen.
Ubuntu versucht per Default 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), so wird dieser Eintrag nur flüchtig angelegt und wird dann bei einem Reboot nicht mehr angezeigt und damit das Ubuntu nicht mehr auswählbar.
Als Lösung wird die Bearbeitung des EFI-Menü empfohlen - indem man im Terminal [1]
sudo efibootmgr | grep ^Boot[0-9] | cut -b 5-8
eingibt - es werden die benutzten Einträge im NVRAM angezeigt. Beispielhaft wird 000A
als freier Platz angenommen, man kann im Terminal [1] mit
sudo efibootmgr -c --bootnum 000A -d /dev/sda -p 1 -L "Precise Server" -l \\EFI\\precise_server\\grubx64.efi
einen neuen EFI-Menueintrag anlegen (bitte die jeweils doppelten "backslash" bei der Eingabe beachten).
Will man eine bestehendes EFI-System ohne "secure-boot"-Eigenschaften in ein System umwandeln, welches sich auch auf einem EFI-BIOS mit aktiven "secure-boot" starten lässt, so ist das auch nachträglich möglich.
Man sollte die Fähigkeit des Bootens über eine EFI-Firmware mit secure-boot vorab mit einem dafür geeigneten USB-Stick von Ubuntu gleicher Version ausgiebig austesten! Alle Derivate (bis auf Ubuntu selbst) können nur auf diesem Wege auf secure-boot gebracht werden, weil die bisherigen Startmedien (*.iso-Dateien) nicht secure-boot-fähig sind.
Beispielhafte Einstellungen von secure-boot sind diesen Bildern zu entnehmen. Diese Einstellungen sind im eigenen System sinngemäß aufzusuchen und soweit erforderlich einzustellen.
Nachrüstung getestet für Ubuntu und Derivate | ||||
![]() | ![]() | ![]() | ![]() | |
![]() | ![]() | ![]() | ![]() | ![]() |
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
Die folgende Nachinstallation ist erst ab Version 12.04.2 problemlos anwendbar. Die Pakete für Ubuntu 12.04 sind kernelbezogen, deshalb wurde eine Trennung für die Versionen vorgenommen.
linux-signed-generic-lts-quantal
grub-efi-amd64-signed
shim-signed
mit apturl
Paketliste zum Kopieren:
sudo apt-get install linux-signed-generic-lts-quantal grub-efi-amd64-signed shim-signed
sudo aptitude install linux-signed-generic-lts-quantal grub-efi-amd64-signed shim-signed
linux-signed-generic
grub-efi-amd64-signed
shim-signed
mit apturl
Paketliste zum Kopieren:
sudo apt-get install linux-signed-generic grub-efi-amd64-signed shim-signed
sudo aptitude install linux-signed-generic grub-efi-amd64-signed shim-signed
Es werden je nach der Ubuntuversion und dem Stand der Updates weitere Pakete automatisch der Installation 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"
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 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.
Nach dem nächsten Start im EFI-secure-boot-Modus ist die Option uefi-secure-boot
in der obigen Befehlsfolge nicht mehr erforderlich!
Ein derart umgestelltes System kann jederzeit auch über den normale 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.
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.
Der Bootloader-Eintrag für ein System erfolgt per Default in die Datei
/EFI/ubuntu
der ersten EFI-Partition auf dem System.
Man sollte daher sorgfältig bei der Installation darauf achten, dass auch jedes weitere System, das auf einer separaten Festplatte oder externen Medium (USB-Stick, USB- bzw. eSATA-Festplatte) installiert wird, eine eigene EFI-Partition erhält. Enthält der Hostrechner bereits eine eigene EFI-Partition (in der Regel /dev/sda1), so muss man vorübergehend dieser Partition die Eigenschaft EFI-Systempartition entziehen (Alternative 1) oder das Installieren eines Starteintrages unterbinden (Alternative 2).
Das lässt sich am Besten über die Laufwerkverwaltung bewerkstelligen
Siehe Bilder ->
(zur Darstellung
)
Windows -Taste antippen -> ins Suchfeld
"Laufwerksverwaltung" bzw. "disks" eingeben -> ⏎
"Laufwerksverwaltung" -> Hostsystem "EFI-Partition" mit auswählen
"Partition bearbeiten -> Partitionstyp" mit öffnen
"Systemeigenschaft" abwählen
Auch wenn das Hostsystem weiter mit dieser Einstellung arbeiten kann, so wird das Zurückstellen am Ende der Installation dringend angeraten! Danach lässt sich die Installation eines weiteren Systems am Live-Desktop wie bisher vorbereiten und einrichten.
Man ruft am Live-Desktop den Ubuntuinstaller ubiquity nicht aus dem Starter mit auf, sondern öffnet mit der Tastenkombination
Strg + Alt + T
ein Benutzer-Terminal [1] und gibt dort ein
ubiquity -b
Es wird die Installation gestartet und dabei keine Auswahl für das Anlegen eines Starteintrages angezeigt und auch keiner angelegt. Dieses muss man nach dem Ende der Installation nachholen und
anstelle -> "Rebooten" -> "Weiter ausprobieren"
wählen und wie oben unter EFI-Eintrag neu erstellen beschrieben, den erforderlichen Starteintrag erzeugen.
Ein derart auf einem externen Medium erstelltes System lässt sich ohne Nachbereitung nur auf dem Rechner starten, auf dem die Installation ausgeführt wurde.
Um ein weiteres System auf einer zweiten Festplatte im gleichen Rechner auswählen zu können oder eine externe Festplatte von einem anderen Rechnern (mit EFI-Partition) einsetzen zu können, muss dazu nicht zwangsläufig ein Eintrag in das NVRAM des Hostrechners eingebracht werden. Man kann das alternativ über das GRUB_2-Menü regeln.
In der Regel erkennen die EFI-BIOS-Routinen beim Starten des Rechner Speichermedien, die extern angeschlossen werden und eine EFI-Partition (VFAT-Formatierung) haben. Diese werden im EFI-Menüeintrag angezeigt.
Nach der Auswahl im EFI-Menü prüft das EFI-BIOS dann das Vorhandensein eines Verzeichnisses
/EFI/Boot
wobei die Schreibweise (Groß- bzw. Kleinbuchstaben) ohne Belang sind. In diesem Verzeichnis wird nach einer Datei
bootx64.efi
gesucht und wenn vorhanden, zum Starten ausgewertet.
Um ein auf einem beliebigen Hostrechner vorbereitetes externes Medium die (U)EFI-Eigenschaft zuzuordnen, erstellt man auf der EFI-Partition des externen Mediums das Verzeichnis /EFI/Boot.
Ohne "secure-boot"
kopiert man die Datei /EFI/ubuntu/grubx64.efi in das neu erstellte Verzeichnis und benennt diese um in bootx64.efi.
Mit "secure-boot"
kopiert man die Dateien shimx64.efi, grubx64.efi sowie grub.cfg aus dem Verzeichnis /EFI/ubuntu in das neu erstellte Verzeichnis und benennt die Datei shimx64.efi um in bootx64.efi.
Man kann nach der Umstellung sowie erfolgreichem Probestart den zugehörigen Eintrag im NVRAM wieder löschen. Angenommen wird als letzter Regeleintrag von ubuntu
#0000. Dann kann man man im Terminal [1] mit:
sudo efibootmgr -b 0000 -B
diesen Eintrag löschen (siehe auch efibootmgr).
EFI Bootmanagement Übersicht zur Artikelserie
EFI Grundlagen - Alles Wissenwerte rund um Ubuntu mit (U)EFI
EFI Installieren - Hinweise vor einer und zur Installation
efibootmgr - (U)EFI-Menü einstellen und prüfen
EFI Problembehebung - eine Sammlung von Erfahrungen und Abhilfen