Avatar of Gernot Starke

DISCLAIMER: In richtigen Cloud-Rechenzentren ist alles (!) noch viel viel komplizierter, als das hier dargestellt wird: Von der Stromversorgung, der Netzwerkkonfiguration bis hin zur eigentlichen Installation der Betriebssysteme - nichts von dem ist so einfach, wie ich das hier beschreibe.

Kalt und dunkel

Es ist kalt, still und fürchterlich dunkel. Es riecht klinisch sauber, nach Kabeln und Platinen, aber davon merke ich nichts. Schön, dass Du bei mir bist. Ich bin übrigens ein Computer und komme frisch aus der Fabrik. Ich war noch niemals eingeschaltet und kenne meinen Namen nicht. Ich bin, so nennt es die Fachwelt, bare metal, und gehöre zu einer Mehrlingsgeburt. Wir alle sollen zusammen ein Teil einer ganz einfachen Cloud [1] werden.

Cluster
Cluster

Deswegen, das hat mir jemand zugeflüstert, müsse ich noch provisioniert werden.

Power on…

Plötzlich schaltet jemand den Strom[2] ein und der Fluss der Elektronen trifft mich mit voller Wucht.

Das Netzteil reagiert zuerst – und beginnt nach wenigen Millisekunden, meine Hauptplatine (genannt Motherboard) über einen Adapter am Rande der Platine mit Energie zu versorgen.

Sofort fängt der auf dieser Platine angebrachte Taktgenerator an, regelmäßige Signale (engl. clock signals) im Gigahertz-Bereich zu erzeugen. Nach einigen Zyklen Einschwingzeit gelangt ein frequenzstabiles Signal (genannt Takt) auf mein Nervensystem (genannt Bus).

Das Mainboard ist ungefähr 20 cm breit, und etwa in der Mitte liegt mein Hirn (genannt CPU, central processing unit). Vom Netzteil bis zur CPU braucht der Strom fast eine Nanosekunde, um diese Strecke zurückzulegen. Du solltest wissen, dass einer CPU während ihrer Herstellung nur rudimentäre Fähigkeiten mitgegeben werden. Diese enthalten zwei wesentliche Regeln:

  1. Beim Neustart führe die Befehle aus der Firmware aus. Schaue dazu auf die Adresse, die im sogenannten Reset-Vektor[3] vermerkt ist.
  2. Ansonsten führe die Befehle aus dem RAM aus (RAM steht für random access memory).

Genau genommen gehören zu den sozusagen angeborenen Fähigkeiten der CPU auch noch die Grundrechenarten und sonstige Kleinigkeiten, auf die wir hier nicht weiter eingehen[4].

Abgesehen davon kommt die CPU ziemlich ungebildet daher: Sie kann keine Videos abspielen, keine Grafiken am Bildschirm anzeigen, keine E-Mails verschicken, ja nicht mal Tastatureingaben empfangen, und erst recht keine Docker-Container und Kubernetes-Pods starten – falls Du darauf gehofft hast. Solche Dinge muss sie erst lernen, dafür ist das Betriebssystem da. Da ich mit meinem Computerleben ja gerade erst anfange (ich starte ja zum ersten Mal!), kann ich also noch ziemlich wenig.

Zum Glück weiß ich aber schon, was die Begriffe Firmware und RAM bedeuten:

Firmware: BIOS, PXE oder UEFI

Firmware steht für FIRM-SoftWARE. Der englische Begriff „Firm“ steht für etwas, das sich nicht ändert. Firmware ist in einem besonderen Speicher hinterlegt, der seinen Inhalt nicht verliert. Das ist so ähnlich wie Musik-CDs oder Film-DVDs, nur erheblich kleiner. Und wenn wir ganz genau sein wollen: Mit etwas Trickserei könnte jemand meine Firmware sogar aktualisieren, oder innerhalb der Firmware Konfigurationseinstellungen ändern. Damit ich mir das alles merken kann, brauche ich ständig ein klein wenig Strom. Dafür ist auf meinem Mainboard eine kleine Batterie montiert, damit solche Firmware-Konfigurationen auch gespeichert werden können. Aber auch das ignorieren wir hier mal.

Diese Firmware ist traditionell unter dem Begriff BIOS bekannt, was für basic input output system steht. In neueren Computern verbirgt sich dahinter oftmals das UEFI (unified extended firmware interface), was aber manche Hersteller immer noch als BIOS bezeichnen. Ignorieren wir das auch mal.

Also – die CPU fragt jetzt die Firmware nach den Befehlen für den Neustart. Dabei sucht sie Instruktionen an der Position des oben erwähnten Reset-Vektors[3].

Als Erstes geht dabei die POST ab – der power on self test:

POST

Dabei wird meine sonstige Hardware einerseits auf ihre anatomische Beschaffenheit hin überprüft, andererseits einer Gesundheitsprüfung unterzogen. Genauer gesagt, stellt die CPU im system test mindestens folgende Fragen:

Der RAM-Speicher meldet die verfügbare Kapazität zurück, in meinem Fall 8 Gigabyte, also etwas mehr als 8 Milliarden Speicherzellen. Genau genommen sind es 8.192.000.000, aber auch das ignorieren wir hier der Einfachheit halber [5].

Jetzt schreibt die CPU an jede dieser Stellen eine Zahl und prüft, ob sie diese Zahl auch wieder lesen kann. Damit ist die Funktionsfähigkeit des RAM zumindest oberflächlich sichergestellt [6]

Insbesondere weiß ich ja jetzt schon, dass ein Monitor angeschlossen ist. Auf dem kann ich das Logo meines Herstellers anzeigen lassen.

Falls Du während des Startvorgangs eine bestimmte Taste (bei mir ist es Escape, andere Hersteller verwenden F2 oder F10, auf Apple-Computern Option (⌥) oder Alt), zeigt das BIOS ein paar Auswahlmöglichkeiten an.

HP-EliteDesk BIOS
HP-EliteDesk BIOS

Lehnen wir uns ein Stück zurück und klären mal, wo wir jetzt eigentlich stehen: Zu diesem Zeitpunkt (einige Sekunden nach dem Einschalten) weiß ich, dass ich ein an sich betriebsbereiter Computer bin.

Und jetzt müssen wir eine kleine Fallunterscheidung vornehmen:

  1. ich werde wirklich das allererste Mal eingeschaltet – und habe noch kein Betriebssystem (so wie Linux oder Windows) auf meiner Festplatte installiert.
  2. ich verfüge bereits über ein Betriebssystem.

Betriebssystem: Grundschulbildung für Computer

Oben habe ich Dir erzählt, dass ich fabrikneu bin. Das bedeutet, ich habe außer der Firmware noch keine weiteren Instruktionen, und kann noch keine sinnvollen Dinge erledigen. Ich brauche also dringend Bildung in Form eines Betriebssystems. Wo ich danach suchen soll, steht zum Glück in meinem BIOS.

Wäre ich jetzt ein normaler Computer und stünde bei Dir zu Hause, dann würde ich das Betriebssystem auf der eingebauten Festplatte erwarten, oder ersatzweise auf einem eingesteckten USB-Stick oder einer eingelegten DVD.

Da ich aber ein (mini-)Cloud-Computer werden will, und dazu noch fabrikneu, habe ich nichts dergleichen[7].

Ach ja, ich nenne mein Betriebssystem „Grundschulbildung“, weil meine Ausbildung mit dem reinen Betriebssystem natürlich nicht abgeschlossen ist, sondern ich viele weitere Dinge erst erlernen muss. Dazu muss mir dann später jemand noch weitere Software installieren. Kubernetes zum Beispiel. Oder Postgres. Oder ein schönes Schachprogramm, damit ich in meiner Freizeit (genannt idle-time) mit den Computer-Kumpels in der Cloud ein bisschen zocken kann.

Ab ins Netz

Also, POST ist erfolgreich abgeschlossen, aber meine Festplatte ist immer noch komplett leer. Für diesen Fall schreibt mir das BIOS vor, ich solle versuchen, ein Betriebssystem über das Netzwerk zu laden. Leider kann das BIOS über mein konkretes Netzwerk überhaupt nichts wissen, sondern sagt mir nur „beschaff” Dir Dein Betriebssystem irgendwo aus Deinem Netzwerk her.“ Schade ist, dass ich leider bisher auch nichts über das Netzwerk weiß, und andere Computer wissen auch nichts über mich. Das müssen wir dringend ändern.

Genau der richtige Moment, an dem ein wenig Geschichtsunterricht angesagt ist: 1993. Richtig gelesen. Neunzehnhundertdreiundneunzig. Knapp dreißig Jahre her. Damals wurde Bill Clinton Präsident der USA. Und schlaue Leute haben eine großartige Erfindung gemacht, die seither ungeheuer verbreitet unter Computern ist: DHCP, das dynamic host configuration protocol.

Mithilfe von DHCP können Computer laut in die Gegend (also in das mit ihnen verbundene Netzwerk) rufen „Hey, ich hätte gerne eine Adresse“. Ein sogenannter DHCP-Server antwortet dann (wir setzen mal wieder voraus, dass alles gut geht, noch freie Adressen vorhanden sind, und auch sonst keine Fehler auftreten) mit einem Vorschlag, den der rufende Computer schließlich noch annehmen muss. Adressen, aber das weißt Du bestimmt, sind die sogenannten IP-Adressen – wobei IP für internet protocol steht. Meistens sehen sie so ähnlich aus wie 192.168.0.41[8]. Was diese Zahlen so genau bedeuten, ignorieren wir hier mal (ich kann mir vorstellen, dass dieses ständige Ignorieren Sie nervt, aber wenn ich alles ganz genau erkläre, habe ich in ein paar Monaten immer noch kein Betriebssystem.)

DHCP und IP-Adressen[9] sind allerdings für mein Betriebssystem existenziell, darum musst Du zumindest ein paar Grundlagen davon verstehen.

Adressenverleih mit Extras

Ich hatte es weiter oben schon erwähnt, als Teil des initialen Tests meiner Hardware prüft die CPU, ob Netzwerkadapter (z.B. Ethernet-Kabel oder WLAN-Adapter) vorhanden sind. Diese Netzwerkgeräte haben die angenehme Eigenschaft, dass sie, im Gegensatz zu mir selbst[10], von ihren Herstellern mit einem individuellen Namen versehen werden, der sogenannten MAC-Adresse. Der Name hat nichts mit den verbreiteten Mac-Computern der Firma Apple zu tun, sondern steht für media access control. Auch die Details dazu ignorieren wir.

Mein Netzwerkadapter hat die MAC-Adresse bc:d0:74:04:6f:c6, und mit dieser MAC-Adresse kann ich nun laut (natürlich nur im übertragenen Sinne laut, in Wirklichkeit schicke ich ein paar Datenpakete völlig geräuschlos über meine Adapter ins lokale Netzwerk) rufen: „Hey, DHCP, hast Du für den Computer mit der MAC-Adresse bc:d0:74:04:6f:c6 eine IP-Adresse, bitte?“

Ihr Menschen versteht solche Interaktionen doch am besten in Diagrammen, darum habe ich die hin- und hergehenden Nachrichten zwischen mit und dem DHCP-Server mal aufgezeichnet:

Getting IP address via DHCP, standard sequence
Getting IP address via DHCP, standard sequence
  1. Im sogenannten DISCOVER frage ich, ob für meine MAC-Adresse eine IP-Adresse zur Verfügung steht. Genau genommen frage ich das ins gesamte Netzwerk, aber die Details… ignorieren wir wieder.
  2. Der DHCP-Server antwortet im OFFER mit einem Vorschlag
  3. Im REQUEST sage ich dem Server, dass mir der Vorschlag gefällt, und
  4. im ACKNOWLEDGE bestätigt mir der DHCP-Server, dass er die IP-Adresse für eine bestimmte Zeitdauer exklusiv für mich reserviert. Ich könnte diese Adresse problemlos später verlängern, aber das spielt hier keine Rolle.

Damit habe ich jetzt also eine Adresse ausgeliehen, für die sogenannte lease time von normalerweise 24h. Aber was bringt mir die Adresse, ich brauche doch ein Betriebssystem?

Die Antwort liegt im zweiten Schritt, dem OFFER: Darin kann mir der DHCP-Server nämlich die Adresse eines sogenannten Boot-Servers übergeben, und sogar einen Dateinamen mit weiteren Instruktionen. Das nennt sich DHCP options, und in meinem Fall könnte das wie folgt aussehen:

DHCP options with boot server and boot filename
DHCP options with boot server and boot filename

Schon besser, ich bekomme den Namen einer Datei (hier: pxelinux.0), in der alles Weitere steht. Zu dumm, dass ich jetzt noch nicht weiß, wie ich diese Datei laden soll, denn mir fehlt ja immer noch das Betriebssystem. Ich brauche also eine einfache Möglichkeit der Datenübertragung per Netzwerk.

Und schon wieder hilft ein Blick in die Geschichte, diesmal ins Jahr 1981. Damals wurde TFTP erfunden, das trivial file transfer protocol. Krass – über fünfzig Jahre alt, und immer noch das Mittel der Wahl, wenn es um remote-boot oder remote-install geht. Nun denn – über TFTP bekomme ich vom Boot-Server jetzt also meine pxelinux.0 Datei übermittelt. Ich bin schon gespannt auf meine Bildung, und endlich kommt auch PXE ins Spiel (silbisch ausgesprochen „Pixie“).

Bei meinen großen Geschwistern in echten Cloud-Rechenzentren ist TFTP übrigens verpönt, weil ihnen dabei das „s“ für Security fehlt. Die halten sich lieber an secure boot, aber das ignorieren wir hier.

Pixie

Das Preboot Execution Environment (PXE, silbisch ausgesprochen Pixie) ist ein ursprünglich von der Firma Intel entwickeltes Client-Server-Modell, um netzwerkfähige Rechner von einem Server ausgehend über ein lokales Rechnernetz booten zu können. Wikipedia

Kurz gesagt kann PXE-Code auch auf einem ansonsten ungebildeten Computer ablaufen, eben ohne Betriebssystem. Du könntest Pixie also als eine Art Kindergarten ansehen. Ganz typisch für kleine Kinder: Sobald sie im Kindergarten sind, vergessen sie vor lauter Begeisterung, was ihre Eltern ihnen am Morgen erzählt haben.

Ich vergesse bei der Ausführung meines PXE-Codes zunächst die schöne IP-Adresse, die mir der DHCP-Server kurz vorher mitgeteilt hat. Daher geht der DHCP-Zirkus gleich wieder los, aber mit einem feinen Unterschied: Diesmal stellt nämlich nicht die Firmware oder das BIOS die Anfrage, sondern Pixie. Und Pixie steckt, ganz unbescheiden, in ihre eigene DHCP-Anfrage ein sogenanntes PXE-Label hinein.

Dadurch weiß der DHCP-Server, dass der anfragende Computer zusätzlich zur IP-Adresse noch Installationsanweisungen erwartet. Gleich noch ein Diagramm dazu:

DHCP with PXE-Label
DHCP with PXE-Label

Hier bekomme ich jetzt endlich genaue Infos über Installation und Start meines Betriebssystems. Beispielhaft könnte dieses ubuntu.ipxe wie folgt aussehen:

# ubuntu.ipxe
kernel vmlinuz
initrd initramdisk
cmdline console=tty0
boot

Bildung, in Portionen

Jetzt frage ich den Boot-Server (dessen Adresse mir DHCP gerade mitgeteilt hat), nach den einzelnen Teilen des ubuntu.ipxe Skriptes, also kernel, vmlinuz und so weiter.

Und da ist sie endlich, meine Bildung: das Betriebssystem. Welches genau, und in welcher Konfiguration, das hätte ich im Rahmen des PXE-Labels mitteilen können. Es muss also nicht Ubuntu sein, sondern im Rahmen von PXE können User auch interaktiv aus verschiedenen Optionen auswählen, sofern Bildschirm und Tastatur angeschlossen sind.

An dieser Stelle erfordert der weitere Start- und Installationsvorgang allerdings meine gesamte Aufmerksamkeit. Leider kann ich Dir also nicht mehr erklären, was weiter geschieht. Vermutlich kennst Du aber schon andere Computer mit installiertem Betriebssystem – also wäre das für Dich ohnehin nicht spannend.

Es war auf jeden Fall sehr nett mit Dir, danke für Deine Aufmerksamkeit.

Dein 192.168.0.42, oder sollte ich bc:d0:74:04:6f:c6 sagen?

Wie geht’s weiter?

Was Du hier gelesen hast, ist der einfachste Fall von bare metal provisioning, also das Einrichten von neuen Computern. Die sind zwar nicht aus reinem Metall, aber die IT-Branche nennt sie halt so. Damit das ganze automatisiert ablaufen kann, gibt es beispielsweise das Open-Source Projekt Tinkerbell, und noch jede Menge kommerzielle Alternativen.

Falls Du also mal automatisiert einen Computer konfigurieren (ähm - provisionieren) möchtest, dann wirf’ doch einen Blick dorthin.

Danksagung

Danke an meine Kolleg:innen Ben Wolf, Jörg Müller, “m” und Kaja Gleiß für’s gründliche Korrekturlesen, Tipps und Hinweise. Danke an Alexander Lorz für Updates zu Biologie, Mikroprogrammierung und Co.

Quellen + Bilder

  1. Wie im Disclaimer schon gesagt: Leider stellt sich die Wirklichkeit in heutigen Rechenzentren deutlich komplizierter dar als hier beschrieben. Der hier beschriebene Fall gilt insofern nur für eine “Spiel–Cloud”.  ↩

  2. Ja, statt einschalten könnte auch ein Wakeup–on–LAN Signal eintreffen und mich aufwecken. Ignorieren wir diesen Fall einfach.  ↩

  3. Reset–Vektor: der Standardort, an dem die CPU den ersten Befehl findet, den sie beim Start oder nach einem Reset ausführt. Die Adresse befindet sich in einem Abschnitt des nichtflüchtigen Speichers (Firmware, ROM).  ↩

  4. Ebenso ignorieren wir den Unterschied zwischen atomaren CPU–Instruktionen und Mikroprogramm.  ↩

  5. In Wirklichkeit besteht die Cloud, die Gernot hier beschreibt, aus 2–3 refurbished HP–ProDesk G2 800 g Computern, die es gebraucht günstig zu kaufen gab. Darum auch nur 8 GB, in einem echten bare–metal Cloud Server würden wir eher 64 GB oder mehr erwarten. Aber die stehen auch in gesicherten Rechenzentren und sprechen nicht mit Dir!  ↩

  6. Genau genommen gehört zu einer gründlichen Speicherprüfung das mehrmalige Schreiben und Lesen, auch von größeren Speicherbereichen statt nur einzelnen Adressen, sowie exakte Spannungs– und Timing–Überprüfungen. Aber auch das ignorieren wir hier.  ↩

  7. Und schon wieder müssen wir etwas vereinfachen: Manche Hersteller vereinfachen die Installation von Betriebssystemen, indem sie Festplatten mit bereits aufgespieltem Betriebssystem einbauen. Computer bekommen damit sozusagen mit Ihrer Herstellung direkt die notwendige Bildung eingebaut.  ↩

  8. Liebe IPv6 Afficionados, bitte entschuldigt. V4 ist halt verbreiteter.  ↩

  9. Für DHCP und IP–Adressen müssten wir genau genommen noch Details des TCP–Stack klären, also die Unterscheidung zwischen direkten Nachrichten zu einem spezifischen Computer (etwa unserem Boot–Server), und broadcast Anfragen, die sozusagen an alle gehen.  ↩

  10. Die CPU–ID ist noch etwas, das ich hier nur vereinfacht darstelle: Seit einigen Jahren bekommen auch CPUs eindeutige Bezeichner. Intel verwendet dazu die sogenannte [APTO–Nummer](https://www.intel.com/content/www/us/en/support/articles/000054875/processors.html. Diese APTO spielt für unsere Diskussion keine Rolle.  ↩