Professionelle Bücher. Auch für Einsteiger.

Inhaltsverzeichnis
Vorwort
Einleitung
1 Was ist Ubuntu?
2 Die Versionen im Detail
3 Die Shell
4 Migration und Synchronisation
5 Die Installation
6 Erste Schritte
7 Ubuntu mobil
8 Derivate
9 Internet und E-Mail
10 Office
11 Grafik und Bildbearbeitung
12 Multimedia und Spiele
13 Programmierung und Design
14 Hardware-Konfiguration
15 Software- und Paketverwaltung
16 Architektur
17 Backup und Sicherheit
18 Server-Installation
19 Datei- und FTP-Server
20 Weitere Server-Dienste
21 Kontrolle und Monitoring
22 Desktop-Virtualisierung
23 Server-Virtualisierung mit KVM
24 Server-Virtualisierung mit Xen
25 Hilfe
26 Befehlsreferenz Ubuntu Linux
A Übersicht: Software für (K)Ubuntu
B Mark Shuttleworth
C Glossar
D Häufig gestellte Fragen
Stichwort
Download: - ZIP, ca. 36,6 MB
Buch bestellen
Ihre Meinung?
<< zurück | Galileo Computing / <openbook> / Ubuntu | vor >>
Ubuntu GNU/Linux von Marcus Fischer Das umfassende Handbuch, aktuell zu Ubuntu 9.04 - Jaunty Jackalope
Ubuntu GNU/Linux 4., aktualisierte und erweiterte Auflage, geb. 1.120 S., 39,90 Euro Galileo Computing ISBN 978-3-8362-1439-1 |
| 16 Architektur
|  | 16.1 Betriebssysteme
|  | 16.2 Details des Boot-Vorgangs
|  | 16.3 GRUB
|  |  | 16.3.1 Reguläre Installation
|  |  | 16.3.2 Wiederherstellung
|  | 16.4 Start- und Stoppskripte
|  | 16.5 Dienste
|  | 16.6 Initialisierung
|  |  | 16.6.1 Runlevel
|  |  | 16.6.2 init
|  |  | 16.6.3 Upstart
|  | 16.7 Den Startvorgang beschleunigen
|  |  | 16.7.1 Das Boot-Menü schneller ausblenden
|  |  | 16.7.2 Boot-Skripte parallel ausführen
|  |  | 16.7.3 Eigenes Boot-Profil erstellen
|  |  | 16.7.4 Nicht benötigte Dienste und Startprogramme deaktivieren
|  | 16.8 Dateisystem
|  |  | 16.8.1 Datenträger
|  |  | 16.8.2 Die fstab
|  |  | 16.8.3 Swap
|  |  | 16.8.4 Der Verzeichnisbaum
|  |  | 16.8.5 Beschädigte Dateisysteme reparieren
|  | 16.9 Kernel und Module
|  |  | 16.9.1 Kernel-Historie
|  |  | 16.9.2 Module
|  |  | 16.9.3 Einen eigenen Kernel bauen
## 16.6 Initialisierung ### 16.6.1 Runlevel Und dann wären da noch die Runlevel: Während des Systemstarts werden verschiedene Stufen durchlaufen, für die jeweils Skripte abgearbeitet werden. Diese befinden sich im Systemverzeichnis /etc/init.d. Die Reihenfolge, in der die Skripte in den einzelnen Stufen (Runleveln) durchlaufen werden, ist in Unterverzeichnissen /etc/rc.Xd abgelegt. Im Einzelnen unterscheidet man die folgenden Runlevel: Runlevel 0 Anhalten des Systems bzw. kontrolliertes Herunterfahren in den Systemhalt. Runlevel 1 Hierbei handelt es sich um den Einzelbenutzermodus, d. h., es kann maximal ein Benutzer mit dem System arbeiten. Runlevel 2–5 Volle grafische Runlevel mit Multiuser- sowie Netzwerkfähigkeiten. Dies ist mittlerweile der Standard-Runlevel bei modernen Debian- und Ubuntu-Versionen. Zwischen den Runleveln 2–5 werden keine Unterschiede mehr gemacht. Runlevel 6 Reboot (Neustart) des Systems.
Runlevel bearbeiten
Viele erfahrene Linux-Anwender kennen chkconfig. Mit diesem äußerst praktischen kleinen Tool haben Sie direkten Einfluss auf die Runlevel und somit auf die Dienste, die Linux beim Booten startet. Zwar ist dies bei vielen Distributionen auch mit allerlei grafischen Tools möglich, die Geschwindigkeit der schnellen Konfiguration über die Kommandozeile ist damit aber nicht zu erreichen.
In den Ordnern /etc/rc.d/ bzw. /etc/init.d/ befinden sich nach Runleveln sortiert die symbolischen Links, die das Startverhalten festlegen. Hier reicht es eigentlich, wenn Sie lediglich unerwünschte Links entfernen oder neue hinzufügen. Dadurch werden bestimmte Dienste beim nächsten Start dieses Runlevels entweder ignoriert oder gestartet. Das Tool chkconfig hilft bei der Verwaltung dieser Dienste.
Bei Ubuntu ist dies Debian-typisch ein bißchen anders. Während OpenSUSE beispielsweise in Runlevel 5 startet, ist es bei Debian-basierten Distributionen Runlevel 2. Aber das ist nicht der einzige Unterschied; Ubuntu kennt beispielsweise standardmäßig das Tool chkconfig nicht. Als Ersatz dafür ist allerdings das Programm sysv-rc-conf über die hauseigene Paketverwaltung installierbar, das die gleichen Aufgaben übernimmt. Die Syntax ist hierbei leicht verändert.
Nach der Installation erfolgt die Anzeige aller Dienste als root über die Option --list:
sysv-rc-conf --list
Um einzelne Dienste an- oder abzuschalten, dienen die Befehle
sysv-rc-conf ''Dienst'' on sysv-rc-conf ''Dienst'' off
Nähere Informationen zu sysv-rc-conf erhalten Sie auf der Seite http://sysv-rc-conf.sourceforge.net/.
Der Übergang in die einzelnen Runlevel kann vom Superuser unter Verwendung des Kommandos init herbeigeführt werden. Loggen Sie sich zu diesem Zweck einmal als Root ein, und versuchen Sie, das System von der Konsole aus neu zu starten: sudo init 6. Nun können Sie auch einmal versuchen, in den Singleuser-Modus via init 1 zu wechseln: Dabei öffnet sich eine Linux-Konsole. Apropos Kommandozeile: Im Multiuser-Modus können Sie jederzeit mittels + + Funktionstaste auf eine Konsole Ihrer Wahl im textbasierten Modus wechseln. , und sind Standardkonsolen, ist die Grafikkonsole. Das ersetzt quasi mehrere Fenster, falls Sie sich im Runlevel 1 oder 3 befinden. ### 16.6.2 init In Abschnitt haben Sie kurz die Runlevel kennengelernt, die vom Sys-V-init (init auf System-V-orientierten Systemen) verwaltet werden. Das Sys-V-init wird heutzutage von fast allen UNIX-Systemen verwendet und stellt das standardmäßige Boot-Konzept dar. Genauer gesagt handelt es sich bei Sys-V-init um den Prozess, der als Erstes vom Kernel gestartet wird und daher die Prozess-ID 1 bekommt. Dieser Prozess nun startet anhand der gewünschten Runlevel die benötigten Systemdienste. Der Ablauf ist fest vorgegeben und normalerweise unter Linux in der Datei /usr/src/linux/init/main.c festgelegt. Die Aufgaben von init sind mannigfaltig. Am Anfang wird init (oder Sys-V-init) vom Kernel gestartet. Dies ist der erste Prozess, und er bekommt folgerichtig die Prozess-ID 1. Init startet nun im Userspace alle weiteren nötigen Prozesse und initialisiert den Rechner. Es werden nun Kernel-Module geladen, Netzwerke eingerichtet, Dateisysteme gemountet, Serverdienste gestartet und letztendlich der grafische Login-Manager gdm geladen. Dass dies alles in einer vernünftigen Reihenfolge geschehen muss, leuchtet sofort ein, denn z B. macht die Synchronisation der Systemzeit erst Sinn, wenn zuvor die Netzwerk-Hardware korrekt initialisiert und eingerichtet wurde. ### 16.6.3 Upstart Wenn man sich die Vorgehensweise von init verinnerlicht (siehe Abschnitt), tritt eine deutliche Schwäche dieses Systems hervor: Aufgrund seiner Konzeption startet Sys-V-init in den Runlevel, die Prozesse immer in einer vorgegebenen Reihenfolge und startet einen Prozess meist erst dann, wenn der vorherige Prozess fertig initialisiert wurde und damit abgeschlossen ist. Dieses Schritt-für-Schritt-Vorgehen macht den Boot-Vorgang sehr zuverlässig, aber leider auch relativ langsam. Schon seit Längerem gibt es verschiedene Versuche, dieses Konzept zu überarbeiten oder wenigstens zu modifizieren. So gibt es zum Beispiel bei einigen Linux-Distributionen (z. B.Gentoo Linux) Umsetzungen, alle Prozesse in einem Runlevel gleichzeitig starten zu lassen. Diese Modifikationen beschleunigen zwar den Startprozess geringfügig, können aber natürlich bei anderen Problemen, wie z. B. bei wechselnder Hardware im laufenden Betrieb, keine Akzente setzen. Alternativen zu init gab es in der Vergangenheit zuhauf. Beispiele sind hier InitNG, eINIT und Launchd in Mac OS X. Nun ist die Anzahl der zu startenden Dienste aufgrund der Komplexität moderner Hardware und veränderten Bedürfnissen der Benutzer in den letzten Jahren stetig gewachsen. Von einem Betriebssystem wird heutzutage erwartet, dass es spielend leicht und schnell mit wechselnden Mobilgeräten umgehen kann, wie sie z. B. oft per USB an den Rechner angeschlossen werden. Es muss somit dynamisch seine Systemkonfiguration ändern können. #### Ziel vs. Ereignis Upstart (http://upstart.ubuntu.com) ist der Name eines völlig neuartigen Konzepts, das eine völlige Abkehr von init darstellen soll. Die bisherigen Konzepte haben eines gemeinsam: Sie sind zielorientiert. Dies bedeutet, dass vorher festgelegt wird, welche Dienste am Ende des Startvorganges laufen sollen. Die Abhängigkeiten werden vorher in einer sinnvollen Reihenfolge definiert. Upstart hingegen soll ereignisorientiert sein. Bei dieser Vorgehensweise lauern die Dienste im Hintergrund und starten erst dann, wenn alle Vorbedingungen erfüllt sind. Dies sind die sogenannten »Events«. Beispiel: Wenn Sie einen USB-Stick an den Rechner stecken, löst dies ein Event aus, das dazu führt, dass der USB-Stick gemountet wird. Die Events werden in die folgenden drei Klassen eingeteilt:
1. | Edge-Events Dies sind einfache Events wie »Benutzer löst durch Tastendruck eine bestimmte Funktion aus«.
2. | Temporale Events Dies sind zeitgesteuerte Ereignisse.
3. | Level-Events Diese Events erhalten einen zusätzlichen Parameter, beispielsweise den Zustand einer bestimmten Hardware. Dienste starten hierbei bei jedem beliebigen Wert oder einem Schwellenwert des Parameters.
Upstart soll nicht nur das Booten des Sytems beschleunigen, sondern auch das dynamische Verwalten von Diensten. Dies betrifft folgende Bereiche, die mit Upstart vereinheitlicht und verwaltet werden sollen: Viele Dienste hängen vom Funktionieren bestimmter Hardware ab. So können manche Dienste erst gestartet werden, wenn die dazu nötige Netzwerkverbindung ad hoc aufgebaut wurde. Die Dynamik der Dienste-Verwaltung betrifft auch zeitabhängige Prozesse. So gibt es Services wie Cron oder den Anacron, die bestimmte Prozesse zu festgelegten Zeitpunkten starten. Die Entwicklung steht noch am Anfang, aber die erste Implementation dieses neuen Konzeptes hat 2006 Einzug in die regulären Ubuntu-Versionen und inzwischen auch in die testing-Version von Debian gehalten. Um den reibungslosen Betrieb der Distributionen nicht zu gefährden, erfolgen große Teile der Initialisierung mithilfe des Kompatibilitätsskriptes <I>/etc/init.d/rc<P> durch die herkömmlichen init-Dateien. Die Ausweitung auf Teile des Systemstarts erfolgt kontinuierlich in neueren Ubuntu-Versionen, wobei temporale Events noch nicht integriert sind. #### Start-Analyse Der Systemstart (Version 7.10, Upstart 0.3.8) erfolgt recht zügig. Allerdings sind die Unterschiede aufgrund des Kompatibilitätsmodus marginal. Testmessungen zeigen Unterschiede im Bereich von wenigen Sekunden. Zur Auswertung eignet sich das Tool Bootchart, das Sie über die Quellen von Ubuntu bekommen (siehe Abbildung). Dieses Messwerkzeug protokolliert während des Startvorgangs in einem Takt von 0,2 Sekunden die CPU-Auslastung sowie die Platten-IO-Leistung und speichert die grafische Darstellung in dem Ordner /var/log/Bootchart/. Hier werden alle Protokolle eindeutig bezeichnet und im PNG-Format abgespeichert. Hier klicken, um das Bild zu vergrößern Abbildung 16.3 Die Abbildung zeigt eine Boot-Chart-Analyse eines Ubuntu GNU/Linux 7.10, das mit Upstart hochfährt. Der Beispielrechner benötigt 19 Sekunden vom Starten des Kernels bis zum grafischen Login-Manager. Wenn für Ihre Distribution bootchart nicht in den Paketquellen ist, können Sie dieses praktische Tool auch von der Seite www.bootchart.org herunterladen. Nach der Installation muss der Start des Programms noch in der Kernel-Kommandozeile eingetragen werden. Dies sieht für das normale init beispielsweise folgendermaßen aus:
    /boot/grub/menu.lst
    [...]
    title Ubuntu (2.6.10) – bootchart
        root (hd0,1)
        kernel /vmlinuz-2.6.10 ro root=/dev/hda1 init=/sbin/bootchartd
        initrd /initrd-2.6.10.img
Wenn Sie Upstart parallel installiert haben, fügen Sie zu der betreffenden Zeile die Angabe
    bootchart_init=/opt/upstart/sbin/init
hinzu.
Boot-Splash abschalten
Bei einer Standardinstallation von Ubuntu werden die Fortschritte beim Booten durch ein Boot-Splash versteckt. Wenn Sie hier die Meldungen des Systems sehen möchten, ändern Sie eine Zeile der Grub-Konfigurationsdatei (siehe Abbildung menu.png). Löschen Sie den Parameter quiet splash aus der Kernel-Zeile und starten Sie Ihren Rechner neu.
Hier klicken, um das Bild zu vergrößern Abbildung 16.4 In der Grub-Konfigurationsdatei können Sie bestimmen, wie gesprächig Linux sich beim Starten gibt. Entfernen Sie den Parameter quiet splash aus der Kernel-Kommandozeile, wenn Sie eine detaillierte Anzeige wünschen. #### Jobs Die einzelnen Skripte, die beim Eintreffen eines Events ausgeführt werden sollen, werden von Upstart als Jobs bezeichnet. Diese Skripte werden im Verzeichnis /etc/event.d gesammelt (siehe Abbildung). Wie bei dem init-Konzept wird auch bei Upstart das Programm /sbin/init als erster Prozess vom Kernel gestartet. Die bekannte Datei /etc/inittab gibt es bei Upstart nicht mehr. Stattdessen werden die Jobs aus dem Verzeichnis /etc/event.d vom Upstart-Init gelesen. Hier klicken, um das Bild zu vergrößern Abbildung 16.5 Upstart-Events Viele dieser Skripte sind in einem Kompatibilitätsmodus geschrieben. So werden Sie bei vielen Job-Skripten, beispielsweise einem typischen Runlevel-Skript, zurzeit feststellen, dass sie nichts anderes tun, als das entsprechende rc-Skript aufzurufen. Hier klicken, um das Bild zu vergrößern Abbildung 16.6 Kompatibilitätsscript vom rc1-Skript, das das System in den ersten Runlevel startet. Die Synthax ähnelt der Shell-Programmierung. Das Skript aus Abbildung rc1.png ähnelt der normalen Shell-Programmierung und wird gestartet, wenn das System in den ersten Runlevel startet (start on runlevel 1, Zeile 5). Sobald dieser Runlevel verlassen wird, wird das Skript derart gestartet, dass alle gestarteten Tasks beendet werden (stop on runlevel [!1], Zeile 7). Die Ausgabe des Skripts läuft über /dev/console (console output, Zeile 9), anstatt sie standardmäßig nach /dev/null zu leiten und damit zu ignorieren. Mit den Befehlen script und end script (Zeile 10 und 19) wird das eigentliche Skript begrenzt. Innerhalb dieser Grenzen werden alle enthaltenen Zeilen durch die Shell /bin/sh ausgeführt; es wird der Runlevel gewechselt (Zeile 14) und der alte Runlevel über PREVLEVEL neu gesetzt (Zeile 13). Zum Schluss wird der exec-Befehl ausgeführt (Zeile 18). Dieser ruft das /etc/init.d/rcSkript mit dem Parameter 1 auf (erster Runlevel). Damit sind alle Schritte abgearbeitet, und der Job ist erledigt. Eine komplexere Semantik mit der Berücksichtigung von Vorbedingungen wird durch zusätzliche Befehle wie pre-start/end script und post-stop/end script formuliert. Weiterhin können logische Verknüpfungen erstellt und den Skripten Parameter übergeben werden. Wenn mehrere Dienste voneinander abhängig sind, können die Ereignisse start on bzw. stop on in Form von stopped name bzw. started name definiert werden. Hier klicken, um das Bild zu vergrößern Abbildung 16.7 Dieser Job startet den Start des Terminal-Emulators getty für die Textkonsole 1. Beispielsweise erreichen Sie durch folgende Zeilen, dass das Skript erst dann ausgeführt wird, wenn rcS gestoppt ist:
    @l:# /etc/event.d/rc-default
    start on stopped rcS
    script
    ...
    end script
Um die Ereignisorientierung zu verstehen, sehen wir uns die Konfigurationsdatei /etc/event.d/tty1 an (siehe Abbildung). Dieser Job ist für den Start des Terminal-Emulators getty für die Textkonsole 1 zuständig. Hier sieht man, dass die exec-Anweisung (Zeile 16) erst dann ausgeführt wird, wenn eines der vorher mit start on definierten Ereignisse eintritt (Zeile 6-9). Analog wird getty wieder beendet, sobald ein Ereignis mit stop on eintritt (Zeile 11–13). Wenn das Programm ungeplant beendet wird, bewirkt das respawn einen Neustart von getty (Zeile 15).
Linux-Jobs
Aktiv laufende Programme werden unter Linux Jobs genannt. Sie starten ein Programm im Hintergrund, wenn Sie an den entsprechenden Befehl ein »&« hängen. Wenn Sie dies mal vergessen sollten, können Sie mit der Tastenkombination + das Programm manuell anhalten. Mit den Befehlen fg bzw. bg können Sie das Programm nun im Vordergrund bzw. im Hintergrund weiterarbeiten lassen.
Möchten Sie wissen, wann ein lange laufendes Programm sich beendet, können Sie es (wie wir bereits wissen) mit + anhalten und dann mit folgendem Befehl wieder starten:
fg ; while /bin/true; do echo -ne a; sleep 1; done
Nachdem nun das Programm beendet ist, wird in einer Endlosschleife ein Piepgeräusch erzeugt.
#### Kompatibilität Zurzeit werden lediglich die Terminal-Emulatoren der Textkonsolen von Upstart gestartet. Alle anderen Aufgaben werden durch das Kompatibilitätsskript /etc/init.d/rc erledigt. Dieses Skript wird durch die Upstart-Konfigurationsdateien rc0 bis rc6 sowie rcS gestartet und funktioniert wie gehabt. Das heißt, es führt alle Start- und Stopp-Skripte in den Ordnern /etc/rc0...6, S aus. Mittelfristig werden diese Verzeichnisse aber verschwinden, und /etc/event.d wird alle Aufgaben übernehmen. Wie Sie gesehen haben, benutzt Upstart einige neue Kommandos, um Prozesse zu starten und zu stoppen, anstehende Ereignisse anzuzeigen und zu überwachen. Dienste, die über die Kompatibilitätsschicht gestartet werden, funktionieren weiterhin nach der Debian-Methode, d. h. über invoke.rc, update-rc.d usw. Das erste Ereignis beim Systemstart ist startup, das durch /sbin/init ausgelöst wird. Nach Ausführen der Skripte in rcS und rc-default wird der Runlevel 2 aktiviert. Daraufhin wird das Skript aus rc2 und die exec-Anweisungen aus tty1 bis tty6 ausgeführt. Die folgende Tabelle zeigt eine Übersicht der in Ubuntu 9.04 vorhandenen Skripte im Verzeichnis /etc/event.d (die zweite Spalte gibt lediglich die start-on-Ereignisse an).
Skript | Ereignis | Funktion
control-alt-delete | control-alt-delete | Neustart des Systems mit + +
logd | – | Protokollierung
rc0-rc6 | runlevel n | Wechselt in den Runlevel n
rc-default | stopped rcS | Setzt den Standard-Runlevel 2
rcS | startup | Systeminitialisierung
rcS-sulogin | runlevel S | rcS im Single-User-Betrieb
sulogin | – | Rescue Modus (läuft bei Abwesenheit anderer Jobs)
tty1 | runlevel 2-5 | Start der Terminalemulatoren in Textkonsole 1
tty2-tty6 | runlevel 2-3 | Startet die Terminalemulatoren der anderen Textkonsolen

Tabelle 16.2 Vorhandene Upstart-Skripte

Im Übrigen befinden sich im Ordner /var/log/boot zahlreiche Log-Informationen. Generell gehen die Ausgaben der Upstart-Skripte an den in Upstart enthaltenen logd, der die Informationen im genannten Verzeichnis speichert. #### Kommandos Wenn im Verzeichnis /etc/event.d eine entsprechende Konfigurationsdatei liegt, starten bzw. beenden die Befehle start bzw. stop einen Prozess. Der Befehl status gibt den aktuellen Zustand des Prozesses an. Administrative Aufgaben erledigen Sie mit initctl (man initctl). Mit initctl list verschaffen Sie sich einen Überblick über alle laufenden Prozesse (siehe Abbildung). Wenn Sie eigene Skripte testen möchten, können Sie durch Eingabe von
    initctl emit 'name'
ein Ereignis mit dem Namen name erzeugen. Hier klicken, um das Bild zu vergrößern Abbildung 16.8 Mit start bzw. stop können Sie Prozesse stoppen. Upstart kennt aus Kompatibilitätsgründen zum Init-V-System auch Runlevel. Diese sind allerdings als Ereignisse mit den Namen runlevel n definiert. Das Kommando runlevel zeigt Ihnen den aktuellen Runlevel an. Einen neuen Runlevel aktivieren Sie mit telinit n. Hier klicken, um das Bild zu vergrößern Abbildung 16.9 Mit dem Befehl initctl verschaffen Sie sich Überblick. #### Fazit Auch Upstart ist also kein Wundermittel; Boot-Zeiten wie bei Spielekonsolen sind auch mit diesem Ansatz reine Fantasie. Die Unterschiede zum bisherigen init sind marginal, aber es ist nicht zu bezweifeln, dass Upstart vom Konzept her der bisherigen Technik überlegen ist. Mit etwas Optimismus lässt sich erahnen, dass seine Vorteile in den nächsten Jahren wesentlich stärker zutage treten werden. Auch wenn Upstart nur einige Sekunden Zeitvorteil erarbeitet, schont es hier doch die Nerven der Anwender unserer modernen Betriebssysteme. Wer Upstart nur auf das Booten des PCs beschränkt, tut dem Projekt unrecht. Upstart ist auf dem guten Weg dahin, in zukünftigen Versionen immer mehr die Aufgabe eines zentralen Service-Daemons zu übernehmen. ### Ihr Kommentar Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen. >> Zum Feedback-Formular
<< zurück | <top> | vor >>
Zum Katalog
Ubuntu GNU/Linux Jetzt bestellen
Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen? Ihre Meinung
Buchtipps
| Linux
| IT-Handbuch für Fachinformatiker
| Webserver einrichten und administrieren
| Xen
| VirtualBox
| LPIC-1
| Einstieg in Ubuntu 8.10 »Intrepid Ibex«
| Einstieg in Ubuntu Linux - Videotraining
| Debian GNU/Linux
Shopping
Versandkostenfrei bestellen in Deutschland und Österreich Info

Copyright © Galileo Press 2009
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.

[Galileo Computing]
Galileo Press, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de