Druckversion | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
Standen Sie schon einmal vor der Aufgabe, ein Computerkabinett mit Linux zu bestücken? Gelangen Sie oftmals in diese Situation, weil in der einen Woche Linux und in der anderen ein anderes System benötigt wird? Spätestens hier bieten sich erste Überlegungen an, wie man den Installationsprozess automatisieren könnte. »Diskette rein und [Enter]« sollte doch genügen, um die unbeaufsichtigte Linuxeinrichtung auf einem Rechner in Gang zu setzen. Und genau diese Möglichkeiten der Installation bringen nahezu alle heutigen Distributionen mit. Mit ein wenig einmaligem Aufwand reduziert sich das Prozedere auf das Einlegen einer Diskette... Installationsserver?Die gebräuchlichste - und bei Fai einzige - Methode ist wohl der Zugriff auf einen Installationsserver. Dieser Server besitzt die komplette zu installierende Software (und noch einige Skripte mehr); im einfachsten Fall werden die CD-ROMs der Distributionen in einem Verzeichnis des Serverrechner abgelegt. Für Clients ohne Netzanbindung nützt ein Server herzlich wenig. Hier hilft nur die Beschränkung auf die Software, die die einzelnen Distributionen mit der ersten CDROM ausliefern (zumindest das Basissystem sollte vollständig enthalten sein). Der Client ist nun quasi sein eigener Server und das CDROM-Laufwerk das Quellverzeichnis. Bei SuSE-Linux zieht diese Beschränkung leider auch eine Einschränkung nach sich - die Partitionierung der Festplatte kann nun nicht automatisiert ablaufen, da die notwendige Beschreibungsdatei auf der CDROM fehlt. Wem allerdings die dargebotene Software ohnehin nicht genügt, der kommt um eine eigene Kreation einer Installations-CD nicht umhin; ergänzt man diese im Falle von SuSE-Linux um die Datei mit den Partitionierungsdaten, so steht einer Kaffeepause nichts im Wege... Für die nachfolgenden Anleitungen gehen wir vom Zugriff auf einen Installationsserver aus; der Leser sollte die notwendigen Anpassungen bei rein lokalem Zugriff leicht nachvollziehen können.
Fai Fully Automatic Installation ist durchaus keine Floskel, erlauben die Routinen von Debian selbst die automatische Konfiguration zu installierender Anwendungsprogramme. Darüber hinaus lässt sich Fai ebenso als Recovery-Werkzeug nach einem Plattenausfall »missbrauchen«. Fai automatisiert all jene Schritte, die der Administrator zum Aufsetzen eines kompletten Linuxsystems zu absolvieren hat. Ist die Konfiguration für einen Rechner erst einmal vollzogen, erfordert die Anpassung auf weitere »Clients« kaum Mehraufwand. Fai entfaltet seine Wirksamkeit umso eindrucksvoller, je größer der zu administrierende Rechnerpool ist. Fai kann prinzipiell auf jeder Distribution eingesetzt werden; die dafür notwendigen Eingriffe in die Shell- und Perlskripte bleiben jedoch dem Experten vorbehalten. Ein wesentlicher Unterschied zu den von RedHat und SuSE entwickelten Mechanismen ist die Lage der Konfigurationsdateien. Fai speichert sie konsequent auf dem Installationsserver, womit das Erstellen einer einzigen Bootdiskette (bzw. mehrerer Kopien) für die Clients genügt. InstallationsserverBeim Server muss es sich nicht zwingend um ein Linuxsystem handeln, auch wenn die nachfolgende Darstellung in manchem Punkten davon ausgeht. Weiterhin nehmen wir vereinfachend an, dass alle notwendigen Dienste durch einen einzigen Server bereit gestellt werden. Aber auch das ist kein Muss. Wer sich in der Netzwerkadministration etwas auskennt, wird dem Text entnehmen können, welche Bestandteile auch andere Rechner übernehmen könnten. Ein via Fai zu konfigurierender Client kennt in der Bootphase weder seinen Rechnernamen noch seine IP-Adresse. Beide Parameter (und ggf. anderes mehr) erfragt er anhand der weltweit eindeutigen MAC-Adresse seiner Netzwerkkarte bei einem DHCP- oder einem BOOTP-Server. Ein solcher muss somit vorhanden sein und seine Datenbasis muss Einträge für jeden Client umfassen. Ein Client mountet während der Installation sein Root-Dateisystem über das Network File System. Der Fai-Server ist als NFS-Server einzurichten. Des Weiteren benötigt der Client Zugang zu einem Archiv mit den Debian-Paketen. Im einfachsten Fall bietet gleich der Installationsserver ein solches via NFS an. Alternativen (denen wir nicht folgen werden) sind der Zugriff zu einem Debian-Spiegel über FTP oder HTTP. PaketinstallationNeben dem eigentlichen Fai-Basis-Paket empfiehlt sich die Installation des Pakets mit speziellen Fai-Kerneln, die die Fähigkeiten zum Booten übers Netz bereits enthalten. Es spricht natürlich nichts dagegen, einen solchen Kernel selbst zu erzeugen.
Ein lokaler SpiegelFür die weiteren Aussagen nehmen wir an, dass der lokale Spiegel aus den Debian-Installations-CD's erzeugt werden soll. In den meisten Situationen dürfte dies wohl zutreffen. Wie ist eine Debian-Installationsquelle aufgebaut? Unterhalb eines mit »dist« benannten Verzeichnisses existieren immer (mindestens) 4 Einträge:
»potato« ist der Name der aktuellen Debian-Distribution (ein Synonym für die sonst gebräuchliche Versionsnummer, dieser Name kann sich ändern). »frozen«, »stable« und »unstable« sind auf den CD's symbolische Links auf »potato«; sie sind als Verweise auf Entwicklerversionen einer Distribution gedacht. Der Aufbau unterhalb eines solchen Verzeichnisses ist wiederum identisch (bei symbolischen Links erübrigt sich die Aussage):
Hiermit realisiert Debian eine strikte Trennung der GPL-Software vom »Rest«. Unter »main« sammelt sich die Software, die der GPL und vergleichbarer freier Lizenzen unterliegt. »contrib« beinhaltet freie Software, die allerdings von »nicht freier« Software abhängt (bspw. KDE von der Freigabe der QT-Bibliotheken). »non-free« enthält schließlich die »nicht freien« Pakete. Eventuell finden Sie noch ein Verzeichnis »non-US«, das Software enthält, deren Export durch US-Gesetze beschränkt ist (bspw. kryptografische Programme). »Contents-i368.gz« enthält eine Zuordnung zwischen jeder im Debian-System verfügbaren Datei (mit Pfadangabe) und dem Paket, das diese enthält. Sie dient einzig der Information. Eine weitere Stufe enthält für eine i386-Distribution folgende Verzeichnisse:
»binary-all« umfasst die Architektur unabhängigen Pakete, wie Schriften, Dokumentationen... und »binary-i368« beinhaltet - analog zum Serienkonzept von SuSE - Verzeichnisse, in denen letztlich die Pakete nach ihrem Verwendungszweck gruppiert sind:
Das Anlegen eines lokalen Spiegels läuft also darauf hinaus, die Verzeichnisstruktur der Installationsquelle auf dem Server nachzubilden und alle benötigten Pakete in das entsprechende Verzeichnis - laut Debian »Sektion« genannt - zu kopieren. Einziger Haken ist die Beschreibungsdatei »Packages.gz«, die die Informationen zu den auf dieser CD befindlichen Paketen enthält:
Debian benötigt während der Installation die Beschreibung aus der »Packages«-Datei. Für den Fall, dass der Inhalt mehrerer CD's komplett in den lokalen Spiegel übernommen wurde, lassen sich die verschiedenen Beschreibungsdateien einfach verketten (»zcat«). Eine Möglichkeit, den Inhalt der Datei auf die tatsächlich gespiegelten Debian-Pakete abzustimmen, besteht im Auslesen der Paketinformationen und daraus generierter »Packages«-Datei:
Die zentrale Konfigurationsdatei /etc/fai.confDie Konfiguration von FAI nimmt das Skript fai-setup anhand der Angaben in der Datei /etc/fai.conf vor. Vermutlich sind einige der Variablen auf die lokalen Gegebenheiten anzupassen: FAI_BASETGZ Lage der Datei mit dem Basissystem. Dabei handelt es sich um ein Tape Archiv mit dem Namen baseVersion.tgz. Die Angabe kann sowohl ein Verzeichnis als auch eine Datei auf einem FTP- oder HTTP-Server sein. Befindet sich jedoch eine gleichnamige Datei im lokalen Verzeichnis /tmp, wird stets diese verwendet - unabhängig von der Belegung der Variablen! FAI_SOURCE_LIST Angabe der Lage der Debianquellen und der Zugriffsmethode. Die Syntax entspricht der der Datei sources.list:
Die Lage des Archivs wird mit einem Schlüsselwort eingeleitet. Die drei Wichtigsten sind:
Dem Schlüsselwort folgt, durch einen Doppelpunkt getrennt, der Zugriffspfad zum Archiv. Der Distributionsname ist das schon weiter oben erwähnte Synonym für die Version, also bspw. »potato«, »woody« oder »stable«. Bei Zugriff auf mehrere Distributionen ist jede auf einer eigenen Zeile zu beschreiben. Komponenten sind die Namen der zu verwendenden Verzeichnisse unterhalb des Distributionsverzeichnisses (bspw. »contrib«, »non-free«). NFSROOT Verzeichnisname, unter dem das NFS-Wurzelverzeichnis des Client eingerichtet werden soll. KERNELPACKAGE Name (inklusive Pfad) des Debian-Pakets, das den auf Clientseite zu bootenden Kernel enthält, das Paket wird unter NFSROOT installiert. FAI_ROOTPW Das verschüsselte Passwort für Root SSH_IDENTITY Datei mit dem öffentlichen SSH-Schlüssel (identity.pub), um einem Benutzer (um dessen Schlüssel es sich handelt,) das passwortfreie Anmelden am Client als Root (!) via ssh zu gestatten. Das Setzen ist nur sinnvoll, wenn der Bootp- bzw. Dhcp-Server dem Client das Flag "sshd" übermittelt (Siehe: »Einen Bootp-Server einrichten«). NFSROOT_PACKAGES Liste zusätzlicher Debian-Pakete, die unter NFSROOT zu installieren sind. Das folgende Beispiel einer Datei »fai.conf« sollte leicht an die eigenen Bedürfnisse anzupassen sein:
fai-setupNachdem die Konfigurationsdatei (fai.conf) für fai-setup angepasst wurde, erledigt der Aufruf des Skripts die eigentliche Einrichtung auf Serverseite:
Im Einzelnen vollbringt das Skript Folgendes:
fai-setup ist somit immer zu starten, sobald Sie Änderungen an der Datei /etc/fai.conf vorgenommen haben oder einen neuen Kernel installieren möchten. Den Bootp-Server einrichtenDer Server selbst befindet sich bei Debian im Paket »net-boot.deb«. Details zum Aufsetzen eines Bootp-Servers erfahren Sie im Abschnitt DHCP&Co. unter Netzwerk-Server. Dort finden Sie auch die Erläuterungen zu den im nachfolgenden Beispiel verwendeten Optionen.
Ein Fai-Client benötigt Informationen, die über den üblichen Informationsgehalt eines Bootp-Servers hinausgehen. Um diese dennoch bereit zu stellen, greift der Server auf »Hersteller spezifische« Erweiterungen zurück, die sich hinter den mit T.. beginnenden »Tags« verbergen. Die derzeit von Fai verwendeten Tags sind: T170 Verzeichnis, das die FAI-Konfiguration enthält T171 Die so genannte FAI-Aktion, welche im Hauptinstallationsskript des Clients (rcS_fai) ausgewertet wird T172 Liste von Flags für Fai; möglich sind:
Die BootdisketteDem Fai-Paket liegt ein Programm zum Erzeugen der Bootdiskette bei, sodass sich die ganze Arbeit auf das Einlegen einer leeren Diskette und den Aufruf eines Kommandos reduziert:
Kopieren und Bearbeiten der TemplatesDie bisherigen Vorarbeiten ermöglichen es einem Client, seine IP-Adresse von einem Server zu beziehen, den Kernel vom Server zu laden, zu booten und sein Root-Dateisystem via NFS zu mounten. Das Ziel von Fai ist jedoch, auf Clientseite ein vollständiges Linuxsystem zu installieren. Der Client startet hierzu im folgenden Schritt das Programm /sbin/rcS_fai. Dieses Skript erzeugt zunächst eine Ramdisk und mountet diese nach /tmp - das vorerst einzig beschreibbare Verzeichnis auf dem Client. Vom Fai-Server wird über NFS nun das Verzeichnis (vergleiche FAI_CONFIGDIR in fai.conf) mit den eigentlichen Konfigurationsdateien nach /fai gemountet. Genau jene Dateien beschreiben die Schritte, die ein Client nachfolgend zu vollziehen hat. Natürlich steht es jedem frei, die Konfiguration komplett selbst zu erstellen. Einfacher ist jedoch die Verwendung der Templates aus /usr/share/doc/fai/templates und das Anpassen von Kopien an die eigenen Gegebenheiten:
Ein Blick unter /usr/local/share/fai fördert einige Verzeichnisse zu Tage: class Skripte und Dateien zur Definition von Klassen (siehe im Anschluss an diese Tabelle) disk_config Beschreibung der Partitionierung der Festplatten auf den Clients mit Dateinamen gleich Klassennamen fai_config Dateien mit Variablendefinition (Dateinamen gleich Klassennamen + global.conf) zur Überschreibung der Varaiblen aus /etc/rcS_fai.conf files Dateien für cfengine package_config Software-Paket-Konfigurationen mit Dateinamen gleich Klassennamen scripts cfengine-Skripts mit Dateinamen gleich Klassennamen Schritt 1: Definition der KlassenJeder Konfigurationsschritt, der auf dem Client zu vollziehen ist, wird durch eine so genannte Klasse beschrieben. Da für verschiedene Clients sicherlich verschiedene Konfigurationen sinnvoll sind, ermitteln Skripte die Klassennamen, die nachfolgend gelten sollen. rcS_fai arbeitet hierzu - ähnlich dem Ressource Control Script eines »normalen« Linux-Bootvorgangs - die im Verzeichnis /fai/class(nach dem Mounten liegt es dort!) liegenden und mit "S[0-9][0-9]" beginnenden Skripte in der durch die alphabetische Anordnung gegebenen Reihenfolge ab. Bei den Skripten kann es sich wohl um Bash- (Endung *.sh) als auch um Perlskripte (Endung. *pl) handeln; jedes Wort, das ein Skript auf die Standardausgabe schreibt, wird als Klassenname interpretiert. Beispiel: Ein typisches Skript könnte anhand des Rechnernamens gleichnamige Klassen definieren, um für jeden Client oder eine Gruppe von Clients eine dedizierte Konfiguration vorzunehmen:
Etwas vereinfacht ausgedrückt, testen die Skripte unter class im Wesentlichen die lokale Hardware und ermitteln daraus die Klassenname zur Steuerung der weiteren Konfiguration. Zusätzlich werden immer die Klassennamen $HOSTNAME und LAST gesetzt. Schon der nächste Schritt von rcS_fai verdeutlich das Konzept der Klassennamen. Das Skript sucht im Verzeichnis /fai/class nach Dateien mit dem Namen Klassenname.var und führt sie aus, wodurch bestimmte Shellvariablen mit konkreten Werten belegt werden. Folgendes Beispiel (aus den Quellen des Fai-Pakets) setzt eine Variable hdparm, um Festplattenparameter zu konfigurieren:
Schritt 2: Partitionieren der Festplatte(n), Erzeugen der DateisystemeExistiert das Skript /usr/local/bin/my-fdisk, so übernimmt dieses die Partitionierung und das Einrichten der Dateisysteme. Auf diese Weise kann die Ausführung von setup_harddisks durch rcS_fai verhindert werden. Letzteres Skript durchsucht das Verzeichnis /fai/disk_config, ob ein Klassenname mit dem Namen einer Datei übereinstimmt. Die erste passende Datei (bei sauberer Konfiguration sollte es nur eine geben) wird eingelesen und anhand der Angaben die Festplatte(n) eingerichtet:
Schritt 3: Software-InstallationZunächst wird das Basissystem (vergleiche FAI_BASETGZ aus /etc/fai.conf) entpackt und installiert. rcS_fai liest nachfolgend jede in /fai/package_config enthaltene Datei ein, deren Name einem definierten Klassennamen entspricht. Auf diese Art und Weise kann einfach eine clientabhängige Software-Ausstattung erzielt werden:
Schritt 4: Lokale KonfigurationZu einem kompletten System gehört noch die Konfiguration verschiedenster Dienste. So ist das Netzwerk einzurichten, der Druckerzugriff zu gewährleisten oder die Uhrzeit zu setzen... Zuständig für diesen abschließenden Schritt sind die Skripte im Verzeichnis /fai/scripts. Auch hier werden wiederum genau jene Skripts zur Ausführung gebracht, deren Namen mit eingangs definierten Klassennamen übereinstimmen. Zulässig sind Bash-, Perl-, Expect- und Cfengine-Skripts. Manche dieser Skripts werden vorgefertigte Konfigurationsdateien ins System einspielen. Solche Vorgaben können im Verzeichnis /fai/files gesammelt werden. Der letzte SchrittNach Abschluss werden die Protokolldateien des Installationsvorgangs nach /var/log/fai/$HOSTNAME/install/ geschrieben und der Rechner neu gebootet. Der Installationsvorgang beim ClientGenau genommen sind drei Handlungen von Nöten:
Die im Verborgenen ablaufenden Vorgänge sind dann doch um Einiges komplexer:
Für die unbeaufsichtigte Installation hat sich bei RedHat der Name Kickstart eingebürgert. Die Tätigkeit des "Installationsservers" beschränkt sich hier einzig auf die Bereitstellung der RPM-Pakete; die gesamte Steuerung der Installation liegt in der Hand des Clienten; er bestimmt über die Aufteilung der Festplatte, über den Umfang der Installation usw. Echte administrative Arbeit steht somit nur bei der Erzeugung der Bootdiskette und der Anpassung der darauf befindlichen Konfigurationsdateien an. InstallationsserverWie schon angedeutet, stellt der Server einzig die Software-Pakete zur Verfügung. In den meisten Fällen wird es sich um einen NFS-Server handeln, so dass die Schritte:
durchzuführen sind. Alternative Quellen für die Pakete sind lokale CDROMs, lokale Festplatten oder eine Webseite (URL). Die BootdisketteAuf der zweiten CDROM Ihrer RedHat-Distribution finden Sie im Verzeichnis "images" die beiden Dateien boot.img und bootnet.img. Erstere Datei sollten Sie auf die Bootdiskette kopieren, wenn sich die zu installierenden Pakete auf einem lokalen Medium (CDROM, Festplatte) befinden; letztere, falls Sie auf ein Verzeichnis im Netz zugreifen:
Auf der Diskette finden Sie nun im Wurzelverzeichnis die Datei syslinux.cfg (es handelt sich um die Konfigurationsdatei für den syslinux-Bootloader), die Sie ggf. an Ihre Umgebung anpassen müssen;
Erläuterung: Der Name des Eintrags lautet "linux" (die "default"-Zeile ist genau genommen unsinnig, da nur ein einziger Kernel gebootet werden kann). Der zu startende Kernel ist "vmlinuz". Die "append"-Zeile definiert die Parameter, die dem Kernel beim Start als Argumente zu übergeben sind. Hier wird eine Ramdisk verwendet, Informationen dazu finden Sie im Kapitel Systemadministration unter Der Bootvorgang. Die Anzeige eines Prompts wird abgeschaltet und mit "timeout" wird die Verweildauer (in Milisekunden; 0 bedeutet "Warten auf eine Eingabe") des Eingabeprompts angegeben. Die wesentliche Administration findet in der Datei ks.cfg statt, die Sie ebenfalls im Wurzelverzeichnis auf der Diskette finden. Hier wird sowohl die Partitionierung der Festplatte beschrieben, als auch die Liste zu installierender Pakete spezifiziert. Des Weiteren lassen sich Skripte angeben, die unmittelbar vor bzw. nach der Installation auszuführen sind. Auf Einhaltung einer bestimmten Reihenfolge der Einträge in der Datei ist dringend zu achten:
Der Installationsvorgang beim ClientDie Schritte, die der Client ab dem Booten von der Diskette durchläuft, sind:
InstallationsserverDer Server ist zunächst als NFS-Server einzurichten. Für die Software, die später auf den Clients zu installieren ist, benötigen Sie ein eigenes Verzeichnis. Dieses darf nicht suse heißen, da das Skript linuxrc in diesem die RPM-Pakete erwartet; SuSE selbst diese aber in einem Unterverzeichnis suse ablegt. linuxrc kann den Pfad "suse/suse" (warum auch immer) nicht auflösen. Die NFS-Freigabe dieses Stammverzeichnisses wird später in den Skripten als $I: referenziert; nachfolgend soll dieses Symbol für das von Ihnen angelegte Verzeichnis stehen. Vergessen Sie nicht, das neue Verzeichnis in die Datei "/etc/exports" aufzunehmen und dem NFS-Server ein SIGHUP zu senden. Kopieren Sie den Inhalt der SuSE-CD's, den Sie benötigen (also zumindest die 1.CD komplett) in dieses neue Verzeichnis. Die verschiedenen CD's enthalten teils identische Dateien (Indexverzeichnisse), diese werden im Zielverzeichnis (logischer weise) nur einmal benötigt und können getrost überschrieben werden. Zusätzliche RPM-Pakete, die nicht zum Umfang der SuSE-Distribution gehören, lassen sich unter $I:/suse/ADD_RPMS/ ablegen und werden automatisch mit installiert. Zusätzliche Skripte lassen sich nach dem selben Schema in ein Verzeichnis $I:/suse/ADD_SCRIPTS/ integrieren. Diese können unmittelbar vor oder nach der Installation gestartet werden (dies wird in der Datei info fest gelegt). Ein sinnvolles Skript, das unmittelbar nach der Installation ausgeführt werden sollte, betrifft die Vergabe des Rootpasswortes. Dieses könnte wie folgt ausschauen:
Eine Datei AutoSuSE.sel (der Name kann frei gewählt werden; die Endung ".sel" ist bindend) im Verzeichnis $I:/suse/setup/descr beinhaltet die Liste der zu installierenden Pakete. Am einfachsten ist es, im YaST1 unter "Konfiguration erstellen/ändern" eine solche Auswahl zu erzeugen:
Da es sich um eine ASCII-Datei handelt, steht einer manuellen Anpassung nichts im Wege (man muss nur die Paketnamen kennen). Ein Client kann sich bez. der Softwareauswahl nur auf die Vorgaben einer solchen Datei beziehen; benötigt man mehrere Konfigurationen, ist für jede eine Paketauswahldatei zu generieren. Auf dem Server fehlen einzig noch die Dateien mit den Partitionierungsanweisungen. Sie müssen im Verzeichnis $I:/suse/setup/descr liegen und nennen sich part_XXXXX, wobei XXXXX eine fünfstellige Zahl > 0 ist, die die Anzahl des für das System anzulegenden Speicherplatzes in Megabyte angibt. Existieren mehrere part_XXXXX-Dateien im Verzeichnis, wählt der Client selbsttätig diejenige, deren Größe bez. der Festplattenkapazität am besten passt (die also kleiner oder gleich dieser ist).
Erläuterung: 2 GByte Plattenplatz werden wie folgt verteilt:
Die BootdisketteAuf der ersten SuSE-CD finden Sie im Verzeichnis images/ die Datei boot.img, die auf die Diskette zu kopieren ist:
Mounten Sie anschließend die Diskette und passen die dortige Datei syslinux.cfg (es handelt sich um die Konfigurationsdatei für den syslinux-Bootloader) an:
Erläuterung: Der Name des Eintrags lautet »linux«, ebenso nennt sich der zu startende Kernel »linux«. Die »append«-Zeile definiert die Parameter, die dem Kernel beim Start als Argumente zu übergeben sind. Hier wird eine Ramdisk verwendet, Informationen dazu finden Sie im Kapitel Systemadministration unter Der Bootvorgang. Mit »timeout« wird die Verweildauer (in Millisekunden; 0 bedeutet »Warten auf eine Eingabe«) des Eingabeprompts angegeben. Als abschließenden Schritt müssen Sie nun die Datei info bearbeiten, die Sie im Wurzelverzeichnis auf der Diskette finden. Hier findet die eigentliche Konfiguration statt, d.h. welchen Server Sie kontaktieren, welche Dateien Sie von diesem benutzen usw. Die folgende Beispieldatei wurde bewusst um ausführliche Kommentare ergänzt und kann als Ausgangspunkt für eigene Experimente dienen:
Die Erzeugung der Bootdiskette ist damit abgeschlossen. Der Installationsvorgang beim ClientDie Schritte, die der Client ab dem Booten von der Diskette durchläuft, sind:
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
Korrekturen, Hinweise? |