[[:mac|{{ :Apple.png?40|}}]]
===== Der Mac OS Startvorgang 10.6 =====
Es gibt Fälle, da beginnt das Troubleshooting bereits vor der Arbeit. Ein System fährt nicht mehr hoch oder bringt Fehlermeldungen gleich bei der Anmeldung oder kurz davor. Ein Szenarion, welches ich bei Mac OSx vielleicht aus den Anfangszeiten oder auch bei Windows ab NT4 kenne, sich aber zunehmend seltener zeigt. Dennoch habe ich schon immer die Philosophie vertreten, dass man die Startsequenz eines Systems kennen muss. Da man während des Bootens oft nur als Passagier der Dinge harrt die da kommen, grenzt man die Fehlersuche ungemein ein, wenn man versteht an welcher Stelle die Probleme auftreten. Dieser Artikel ist ein Nebenprodukt meiner Bemühungen den Startvorgang von Mac OSX Leopard bzw. Snow Leopard((http://developer.apple.com/library/mac/#documentation/MacOSX/Conceptual/BPSystemStartup/Articles/BootProcess.html)) zu analysieren und zu verstehen. Der Startvorgang - Auf moderner Hardware in ca. einer Minute erledigt und ein Thema, welches Bücher füllen könnte. Ich fand es immer schon spannend, auch wenn das folgende möglicherweise eine Knochenarbeit wird.
Kurz gefasst läuft der Start Prozess folgendermaßen ab:
^ StartUp Phase ^ Event ^
| **Power On:** | Boot-ROM/RAM check is initialized |
| **BootROM-POST:** | Black screen, power LED on -> POST or BootROM failure\\ Flashing power LED once per second -> bad RAM, no RAM\\ Three flashes, a pause, and three more flashes (occurs continuously) -> marginal RAM |
| **BootROM-EFI:** | Boot chime |
| **Boot EFI:** | Metallic Apple -> found boot.efi\\ Circle with Slash -> could not load boot.efi, or some other issue\\ Flashing globe -> looking for booter/kernel on netboot server\\ Metallic Apple with spinning earth below -> found booter/kernel on netboot server\\ Broken Folder that blinks -> no bootable device has been found |
| **kernel:** | Grey screen with Metallic Apple and spinning gear |
| **launchd:** | Blue Screen |
| **loginwindow:** | Login window appears |
| **User Environment Setup:** | The text "Logging in..." appears in login window along with a progress bar.\\ Upon successful login, the Desktop and Dock appear. |
==== Firmware -> EFI Control ====
{{:mac:316px-efi-simple.svg.png?200 |}}
Die Mac Firmware, auch BootROM genannt, befindet sich in einem Flash Speicher auf dem Motherboard. Sobald der Start-Button gedrückt wird, wird die Firmware quasi als Mini Betriebssystem gestartet, welches die grundlegenden Hardwarekomponenten initialisiert. In Intel-basierten Mac Systeme basiert die Firmware auf die Extensible Firmware Interface (EFI) Technologie. Neben dem Betrieb von Mac OS auf Intel Systemen wird durch die Verwendung von EFI auch die Nutzung anderer Plattformen, wie zB Windows, auf Mac Hardware möglich. Das EFI ist die interaktive Schnittstelle zwischen Firmware und Betriebssystem und kann über diverse Tastenkombinationen während des Bootvorgangs gesteuert werden. Das EFI ist in etwa vergleichbar mit dem BIOS eines konventionellen IBM kompatiblen PCs((http://en.wikipedia.org/wiki/Extensible_Firmware_Interface)).
Als erstes wird durch die Firmware ein Power On Self Test (POST((http://en.wikipedia.org/wiki/Power-on_self-test))) durchgeführt, der sicherstellt, dass die Basiskomponenten des Systems (RAM, CPU, Grafikkarte etc) einwandfrei funktionieren. Hat das System diese Phase fehlerfrei überstanden, hört man den System-Beep und alle (an der Hauptgrafikkarte) angeschlossenen Bildschirme wechseln von Schwarz auf Grau. Nach einem erfolgreichem POST sucht die Firmware nach einem Boot File bzw. einem Boot Image.
Treten allerdings beim POST Störungen auf, bleibt der Bildschirm Weiss bzw Schwarz oder es werden möglicherweise Fehlermeldungen ausgegeben. Welches der Szenarien zutrifft, hängt auch von der fehlerauslösenden Komponente ab. Abhängig vom Modell Typ und auch vom Alter des Systems können diese Fehler Codes auch akustisch über den Systemlautsprecher oder visuell über die Power On LED übermittelt werden. Unabhängig davon, welcher Fehlercode im Detail ausgegeben wird, kann man in dieser Phase davon ausgehen, dass es sich um Hardwareprobleme handelt. Um die Fehlercodes zu analysieren, kann man die Support Homepage von Apple www.apple.com/support kontaktieren und für sein Computermodel die Lister der Fehlercodes heraussuchen.
Wird der POST erfolgreich abgeschlossen, sucht die Firmware nach dem Boot Image, welches als letztes in den Systemeinstellungen -> Bootvolume in Mac OS oder Windows Boot Camp Konfiguration eingestellt wurde. Die Information zur Position der Boot Images wird in einem NVRAM((http://de.wikipedia.org/wiki/Nvram)) auf dem Motherboard abgelegt, die Bootimages selber befinden sich jeweils in den Partitionen, in denen das restliche Betriebssystem auch liegt. Wird das Boot Image gefunden, wird dieses geladen und ausgeführt. Das macht sich auf dem Bildschirm durch ein dunkelgraues Apple Logo auf dem Hauptbildschirm bemerkbar. Sollte kein Boot Image gefunden werden, wird dies durch ein dunkelgraues Ordnersymbol mit einem Fragezeichen angezeigt. Des Weiteren kennt das EFI zahlreiche Tastenkombinationen während des Bootvorgangs, mit welchen der Bootprozess beeinflusst werden kann. Das kann zB der Safe Mode oder der Single-User Mode sein, oder bei mehreren vorhandenen Betriebssystemen die Auswahl des zu startenden Betriebssystems. Mit Snow Leopard wird das System mit einem optionalen 64-Bit Kernel ausgeliefert, welcher während dem Booten mit der Tastenkombination 4 + 6 geladen werden kann. Weitere Informationen zu den Tastenkombinationen finden Sie im Artikel [[mac:loginoption|-> Boot Optionen]] und [[:mac:64-Bit|-> 64 Bit Kernel booten]]
\\ \\
==== Boot Image -> Boot Loader ====
Die abschliessende Aufgabe von EFI bzw. der Firmware, ist das Laden des Boot Images. Das Boot Image, welches sich wie oben bereits erwähnt im Dateisystem der Partition des zu startenden Betriebssystem befindet, ist verantwortlich den Betriebssystem Kernel mit allen notwendigen Treibern und Kernel Extensions zu laden, damit der Kernel den Bootprozess fortführen kann. Im Prinzip ist dies der Boot Loader. Die Firmware übergibt dem Boot Loader auch die Information, wenn vom Benutzer durch eine Tastenkombination ein spezieller Boot Modus, wie zB der Safe Mode oder den Single-User Mode, angefordert wird. Das Boot Image befindet sich sich in /System/Library/CoreServices/boot.efi
Um den Startprozess zu optimieren, versucht der Boot Loader weitere Kernel Dateien aus einen Cache zu laden. Die Cache Dateien beinhalten einen optimierten Kernel, der benötigte Treiber und Kernel Extensions (KEXTs) beinhaltet. Diese Cache Dateien befinden sich im /System/Library/Caches/com.apple.kernel.caches bzw. /System/Library/Caches/com.apple.kext.caches Verzeichnis. Fordert der Benutzer zB einen **sicheren Systemstart** an, wird auf das Laden dieser Cache Dateien verzichtet und die benötigten Kernel Extensions werden zur Laufzeit in /System/Library/Extensions gesucht und in den Kernel eingebunden. Die zum Start notwendigen Extensions sind in der Info.plist mit dem OSBundleRequired Flag gekennzeichnet. Bei dieser Startvariante dauert der Startvorgang erheblich länger, ist aber bei fehlerhaften Systemen eine der ersten Maßnahmen zum Troubleshooting.
Wie zuvor schon am Bildschirm durch ein dunkelgraues Apple Logo angezeigt wurde, dass die Firmware das Boot Image gefunden hat, wird jetzt das erfolgreiche Laden des Kernels durch einen grauen, sich drehenden, Fortschrittskreis angezeigt. Sollte dagegen das Boot Image nicht in der Lage sein, den Kernel zu laden, wird dies durch einen durchgestrichenen grauen Kreis, der an ein Parkverbot Schild erinnert, signalisiert.
==== Kernel -> OS Start ====
Nachdem das Boot Loader Image erfolgreich den Kernel und alle notwendigen KEXTs (Kernel Extensions) geladen hat, übernimmt der Kernel selbst den weiteren Startprozess. Der Kernel ist nun durch weitere KEXTs in der Lage das vorliegende Dateisystem zu erkennen, wodurch er weitere KEXTs nachladen kann um das Core BSD Unix System zu starten. Das sich drehende Fortschrittsrad unterhalb des Apple Logos auf dem immer noch grauen Startbildschirm zeigt dies an. Zum Schluss startet der Kernel den ersten (nonkernel) Prozess, den launchd-Prozess (PID 1), welcher den Parent Prozess aller folgender Prozesse darstellt. Das Laden des Kernels ist somit erfolgreich beendet, weißer Bildschirmhintergrund mit dem Apple Logo zeigt an, dass launchd dabei ist weitere Prozesse zu starten.
==== System launchd -> WindowServer (GUI) ====
Ist der Kernel geladen und launchd((http://de.wikipedia.org/wiki/Launchd)) gestartet, ist der Mac bereit weitere Prozesse zu starten. Frühere Versionen von Mac OSX zeigten einen "Willkommen in Mac OS X" Dialog mit einem Statusbalken, der den Fortschritt des Ladens der weiteren benötigten Prozesse anzeigt. Ab Mac OS 10.5 wurde der Startprozess optimiert und auf einen sehr kurzen Moment reduziert. Diese letzte Startphase wird durch einen blauen Bildschirmhintergrund angezeigt. Dieser blaue Hintergrund wird ausgelöst, wenn launchd den loginwindow-Prozess startet, welcher zB das Benutzer Interface (zB den Anmeldedialog) erzeugt und zeigt letztlich an, dass alle vorangegangenen Startphasen erfolgreich abgeschlossen wurden.
launchd ist sozusagen die Mutter aller Prozesse, was sich in der elitären Process ID 1 (PID 1) manifestiert. launchd arbeitet die in /System/Library/LaunchDaemons; /System/Library/LaunchAgents; /Library/LaunchDaemons; /Library/LaunchAgents; ~/Library/LaunchAgents als plist-Files abgelegten Startskripts ab. Weiterhin werden von launchd die UNIX Start Skripte in /etc/rc.local ausgeführt, falls solche vorhanden sind; was bei ≥ 10.4.x »out of the box« allerdings nicht der Fall ist. Wird ein netzwerkfähiger Daemon mit der Startoption >>OnDemand<< registriert, öffnet launchd den dazugehörigen Netzwerk-Port und überwacht diesen nach eingehenden Anforderungen (gestartet wird der Daemon erst dann, wenn es notwendig ist -> OnDemand)((http://de.wikipedia.org/wiki/Launchd#launchd)). Des Weiteren startet launchd einen Start Helfer Prozess: Den SystemStarter. Dieser Prozess startet zB die in /System/Library/StartUpItems und /Library/StartUpItems abgelegten Third Party Start Elemente.
**Note:** Aus Apple Kreisen wurde mir angeraten, die bislang in den StartUpItems definierten Startobjekte (Skripts) auf die Snow Leopard konforme plist-basierte Startroutine der in ~/Library/LaunchDeamons abgelegten plist-Files umzuschreiben, da die klassischen StartUpItems bei Apple zum Auslaufmodell gehören und nur aus Kompatibilitätsgründen in Snow Leopard ebenfalls unterstützt werden. Es ist davon auszugehen, dass die StartUpItems in den nächsten Major Releases nicht mehr supportet werden. Weitere Informationen zum launchd Prozess finden Sie in [[:mac:launchd|-> Der launchd Prozess]]
==== launchd -> loginwindow ====
Hat launchd seine Arbeit erledigt, wird als letzte Startphase der loginwindow-Prozess gestartet. Dieser Prozess kontrolliert nun verschiedene Aspekte der Benutzeranmeldung und stellt das Anmeldefenster zur Authentifizierung auf dem Bildschirm dar. Dabei gibt es einige Ausnahmen:
* Hat der Administrator für einen Benutzer die automatische Anmeldung aktiviert, wird das Anmeldefenster umgangen und sofort die Benutzersitzung eröffnet.
* Eine weitere Ausnahme stellt die Installation von Systemsoftware dar, hier wird nach dem Systemstart sofort das Installationsprogramm gestartet.
* Falls die Datei /private/var/db/.AppleSetupDone nicht existiert, wird der Dialog der Neuinstallation des Systems eingeleitet. Das System wird dabei jedoch nicht wirklich neu installiert. Es bleiben alle Programme und Einstellungen der bereits bestehenden Installation vorhanden. Apple nutzt im Prinzip das Vorhandensein dieser Datei als Test auf eine Erstinstallation, bei der zB ein Benutzer mit Administratorrechten angelegt werden kann. In dieser Datei werden Informationen über die Registrierung in Form von XML-Daten abgelegt. (Siehe auch: [[:mac:reset_passwd|-> Admin oder User Passwort zurücksetzen]])
Nach erfolgreicher Anmeldung prüft loginwindow ob es einen LoginHook((http://support.apple.com/kb/HT2420?viewlocale=en_US)) gibt. Dabei handelt es sich um ein Shellskript, das bei der Anmeldung irgendeines Benutzers mit root-Rechten ausgeführt wird. Zur Einrichtung eines Login-Hooks muss folgender Befehl ausgeführt werden:
$ sudo defaults write com.apple.loginwindow LoginHook ///Pfad/zum/Skript//
Nach der Benutzeranmeldung konfiguriert //loginwindow// die Benutzerumgebung und protokolliert die Logininformationen. Im Detail stellt sich das wie folgt dar:
* Der User Login wird durch unbefugten remote-Zugriff gesichert. Remote gestartete Anwendungen haben keinen Zugriff auf die Zwischenablage, die Kommandos copy, cut, paste, Apple Events und weitere werden in dieser Phase der Anmeldung blockiert.
* Der Login wird in der System //utmp//-Datenbank festgehalten.
* Konfiguriert die Berechtigungen für Konsole und Terminal.
* Setzt die User Preferences auf die Global Default Settings zurück.
* Registriert die Zwischenablage (Pasteboard Server //pbs//) am zugehörigen Port und startet //pbs//.
* Konfiguriert Maus, Tastatur und die Systemklänge laut den User Preferences.
* Setzt die Gruppen Berechtigungen (gid)
* Ermittelt ggf die User Stammdaten eines Directory Servers und integriert diese in die aktuelle Session.
* Lädt die benutzerdefinierten Einstellungen (User Preferences)
* Startet das Dock, den Finder und den SystemUIServer.
* Startet die benutzerdefinierten Startobjekte
**Note:** Werden Finder, Dock oder der SystemUIserver unerwartet beendet, werden diese von //loginwindow// automatisch neu gestartet. Wird loginwindow unerwartet beendet, wird dieser automatisch von //launchd// neu gestartet.
**Verwandte Artikel:**
[[:mac:launchd|-> Der launchd Prozess]]
[[:mac:start_script|-> Start-Skript erstellen (launchd)]]
[[:mac:schedule|-> Scheduled Tasks (launchd)]]
[[:mac:reset_passwd|-> Admin oder User Passwort zurücksetzen]]
--- //pronto 2010/05/02 21:11//
{{keywords>Mac OSX post boot rom nvram efi boot image loader launchd login window server launchagents launchdaemons startupitem}}