Merge remote-tracking branch 'origin/github/pr/45'
[grml.org.git] / docs / grml-paper.de.tex
1 %##############################################################################
2 % Filename: grml-paper.de.tex
3 % Purpose: Arbeit über 'grml' für die LV "Erstellen schriftlicher Arbeiten SS/2005"
4 % Latest change: Wed Sep 14 22:55:29 CEST 2005 [mika]
5 %##############################################################################
6 \documentclass[11pt,a4paper,german]{article}
7 %\documentclass[12pt,a4paper]{scrbook} % for longer documents
8
9 \usepackage[latin1]{inputenc} % for german umlauts
10 \usepackage{ngerman} % new german "Rechtschreibung"
11 %\usepackage[T1]{fontenc} % This package supports the "<" ">" and more signs
12 \usepackage{ae} % optimize for Acrobat Reader - only for display!
13 \usepackage{palatino} % This is just a font you maybe do not need ->
14 \usepackage{listings} % code
15
16 %% this specification checks wheter you use pdf or not:
17 \newif\ifpdf
18 \ifx\pdfoutput\undefined
19 \pdffalse % we are not running PDFLaTeX
20 \else
21 \pdfoutput=1 % we are running PDFLaTeX
22 \pdftrue
23 \fi
24
25 % now usepackage for pdf
26 \ifpdf
27 \usepackage[pdftex,
28 colorlinks=true,
29 urlcolor=rltblue,
30 anchorcolor=rltbrightblue,
31 filecolor=rltgreen,
32 linkcolor=rltred,
33 menucolor=webdarkblue,
34 citecolor=webgreen,
35 pdftitle={grml, Knoppix für Systemadministratoren und Texttool-User},
36 pdfauthor={Michael Prokop - mika (at) grml.org - www.grml.org / www.michael-prokop.at},
37 pdfsubject={grml, Knoppix für Systemadministratoren und Texttool-User},
38 pdfkeywords={grml, Knoppix, Linux, Systemadministratoren, Texttool-User, Geeks, Michael Prokop},
39 pagebackref,
40 pdfpagemode=None,
41 bookmarksopen=true]{hyperref}
42 \pdfcompresslevel=9
43 %\usepackage[pdftex]{graphicx}
44 %\usepackage{thumbpdf}
45 \else
46 \usepackage[
47 colorlinks=true,
48 urlcolor=rltblue,
49 anchorcolor=rltbrightblue,
50 filecolor=rltgreen,
51 linkcolor=rltred,
52 menucolor=webdarkblue,
53 citecolor=webgreen]{hyperref}
54 \usepackage{graphicx}
55 \fi
56
57 \newif\ifpdf
58 \ifx\pdfoutput\undefined
59   \pdffalse
60 \else
61   \pdfoutput=1
62   \pdftrue
63 \fi
64
65 \ifpdf
66   \usepackage[pdftex]{color}
67   \usepackage[pdftex]{graphicx}
68   \pdfcompresslevel=9
69 \else
70   \usepackage[dvips]{color}
71   \usepackage[dvips]{graphicx}
72 \fi
73
74 \usepackage{color}
75 % define the colors which are used in the pdf-document:
76 \definecolor{rltbrightred}{rgb}{1,0,0}
77 \definecolor{rltred}{rgb}{0.75,0,0}
78 \definecolor{rltdarkred}{rgb}{0.5,0,0}
79 \definecolor{rltbrightgreen}{rgb}{0,0.75,0}
80 \definecolor{rltgreen}{rgb}{0,0.5,0}
81 \definecolor{rltdarkgreen}{rgb}{0,0,0.25}
82 \definecolor{rltbrightblue}{rgb}{0,0,1}
83 \definecolor{rltblue}{rgb}{0,0,0.75}
84 \definecolor{rltdarkblue}{rgb}{0,0,0.5}
85 \definecolor{webred}{rgb}{0.5,.25,0}
86 \definecolor{webblue}{rgb}{0,0,0.75}
87 \definecolor{webgreen}{rgb}{0,0.5,0}
88
89 \usepackage{fancyhdr}
90 \pagestyle{fancy}
91 %% clear header and footer
92 \fancyhead{}
93 \fancyfoot{}
94 %% set footer
95 \lfoot{Michael Prokop}
96 \rfoot{\thepage\ von \pageref{LastPage}}
97 %\rfoot{\thepage\ von 5}
98 %% clear the 'nice' lines
99 \renewcommand{\headrulewidth}{0pt}
100 \renewcommand{\footrulewidth}{0pt}
101
102 \begin{document}
103 \title{grml - Linux fuer Systemadministratoren und Texttool-User}
104 \date{Revision: \today}
105 \author{{\bfseries Michael Prokop}\\
106  (Projektleiter des grml-Projektes,\\
107  mika@grml.org)\\
108 }
109 \maketitle
110
111 \begin{abstract}
112
113 Dieses Dokument gibt im ersten Teil einen Einstieg in die Linux-Live-CD
114 namens grml. Grundlegende Konzepte sowie Möglichkeiten von und mit grml
115 werden erläutert. Im zweiten Teil werden die Technologien hinter grml
116 beschrieben. Welche Möglichkeiten zur Hardwareerkennung existieren, kommen
117 zum Einsatz und welche Technologien sind für Live-Systeme von Interesse.
118
119 Diese Version des Dokumentes bezieht sich auf grml 0.4 und grml-small 0.1 sowie
120 die in Kürze erscheinenden Versionen grml 0.5, grml-small 0.2 und grml-usb 0.1.
121
122 \end{abstract}
123
124 % \begin{keywords}
125 % grml, Linux, Live-CD, Kernel, Knoppix, Systemadministratoren, Texttool-User,
126 % Hardwareerkennung, zsh
127 % \end{keywords}
128
129 \newpage
130 \tableofcontents
131 \newpage
132
133 \section{Einleitung}
134
135 Dieses Dokument entstand aus der Motivation, dass es zu den Themen grml,
136 Linux als Live-System und Hardwareerkennung mit Linux kaum bzw. keine
137 Dokumentation jenseits des Quellcodes gibt. Diese Arbeit soll diese Kluft
138 schließen und dem Leser einen Einblick in grml geben.
139
140 \section{Einführung}
141
142 \subsection{Was ist grml?}
143
144 'Die Freiheit beschäftigt die Menschheit seit ihrer Entwicklung von der
145 Rotte zum staatsbildenden Individuum. Beschäftigten sich in der
146 Vergangenheit vorwiegend Philosophen, Staatstheoretiker und Politiker mit
147 dem Thema, hat nun die IT-Branche dessen Relevanz für sich entdeckt.'
148 \cite{opensource}
149
150 So entstand im Herbst 2004 ein weiteres, neues OpenSource-Projekt namens
151 ''grml''. grml ist eine kostenlos via Internet erhältliche Live-CD. 'Eine
152 Live-CD ist eine bootfähige CD, welche ein Betriebssystem beinhaltet, das
153 aber nicht installiert werden muss, um zu funktionieren.' \cite{wikicd}.
154
155 Die bekannteste auf Linux basierende Live-CD ist Knoppix von Klaus Knopper.
156 Die Zielgruppe von Knoppix sind Ein- und Umsteiger, die sich die
157 Möglichkeiten von ''Linux ohne Risiko'' anschauen möchten. Das Zielpublikum der
158 hier behandelten Live-CD namens grml sind Fortgeschrittene und Experten.
159 Sowohl für Systemadministratoren (die oft Systeme debuggen und reparieren
160 müssen) als auch Textool-User (jene Personen, die gerne auf der Konsole
161 arbeiten) sind die zur Arbeit notwendigen Applikationen vorhanden. Über
162 2200 Software-Pakete sind Teil von grml, über 800 davon sind welche, die
163 man auf Knoppix nicht findet. In \cite{knoppixhacks} ist zu lesen, dass
164 'Knoppix das Schweizer Taschenmesser der Live-CDs' ist.  grml ist das
165 Schweizer Taschenmesser der Systemadministratoren und Texttool-User.
166
167 \subsection{Was braucht man für die Nutzung von grml?}
168
169 Um grml zu nutzen empfiehlt sich die typische Computerausstattung in Form
170 eines Computers mit CD-Laufwerk, Monitor sowie Eingabegeräte wie Tastatur
171 und Maus.  grml bringt eine automatische Hardware-Erkennung von Haus aus
172 mit. Man muss sich zum Beispiel keine Sorgen darüber machen, welche
173 Netzwerkkarte im Rechner steckt und welches Kernelmodul dafür notwendig
174 ist. grml erkennt Hardware selbstständig und ohne manuelles Zutun.
175 Natürlich kann durch manuelles Eingreifen - wie z.B. via einem speziellen
176 Bootparameter - diese Erkennung gesteuert werden.
177
178 \subsection{Was kann man mit grml machen?}
179
180 grml eignet sich hervorragend für typische Systemadministratortätigkeiten.
181 Darunter fallen Arbeiten wie Dateisystemchecks, Bootloader-Reparaturen,
182 Hardware-Untersuchungen und Netzwerkdebugging. Aber auch für forensische
183 Untersuchungen kommt grml zum Einsatz. Bei einer solchen Untersuchung wird
184 'ein forensisches Duplikat der betroffenen Datenträger
185 erstellt'\cite{geschonneck}. Dabei ist es wichtig, dass der betroffene
186 Datenträger - im Normalfall eine Festplatte - absolut unverändert und
187 unangetestet bleibt. Dies ist mit einem von CD laufenden grml-System
188 möglich. Weitere dient grml dem Testen von Software sowie als eine
189 risikoarme Test- und transportable Arbeitsumgebung. grml2hd ist ein
190 Installationsprogramm, mit dessen Hilfe man ein laufendes grml-System auf
191 die Festplatte schreiben und von dort nutzen kann. Innerhalb von wenigen
192 Minuten und mit nur wenigen zu beantwortenden Fragen hat man auf diese Art
193 und Weise ein benutzbares und mit Hardware-Erkennung ausgestattetes
194 Linux-System zur Verfügung. grml kann also auch zum Prototyping und Testen
195 von Hardware-Support seitens Linux herangezogen werden.
196
197 \subsection{Das grml-Team}
198
199 Die Projektleitung und Hauptentwicklung wird vom Autor dieses Dokumentes -
200 Michael Prokop - ausgeführt. Weitere Hauptentwickler kümmern sich um zentrale
201 Komponenten des grml-Systems. Der grml-Installer grml2hd zum Beispiel wird von
202 Andreas Gredler betreut, Michael Gebetsroither kümmert sich unter anderem um den
203 grml-Terminalserver. grml-Kontributoren wiederum sind Leute, die sich um
204 spezielle Aufgabengebiete wie Applikationskonfiguration, Grafiken und Fotos
205 sowie Accessibility/Zugänglichkeit aber auch Spezialgebiete wie udev kümmern.
206
207 \subsection{Support}
208
209 Kostenfreier Support ist über die englischsprachige \cite{grmlml} sowie den
210 IRC-Kanal \#grml auf irc.freenode.org zu beziehen. Speziell angepasste
211 Versionen von grml, längerfristiger Support mit garantierter Reaktionszeit,
212 Audits/Beratung, Vorträge, Workshops sowie Schulungen sind von den
213 grml-Entwicklern gegen Entgeld zu beziehen. Mehr Details dazu gibt es auf
214 \href{http://solutions.grml.org/}{solutions.grml.org}.
215
216 \subsection{News rund um grml}
217
218 Ankündigungen zu neuen grml-Releases, neuen Teammitgliedern und anderen
219 wichtigen Neuerungen rund um grml werden auf der \cite{grml}
220 bekanntgegeben. Zusätzlich zu der HTTP-Variante kann auch der
221 \cite{grmlrss}\footnote{engl. Really Simple Syndication, eine XML-Datei um
222 sich mit einem RSS-Reader auf dem Laufenden zu halten} abonniert werden.
223
224 Ein wichtiger Teil von grml ist die offene und transparente Entwicklung.
225 Deswegen sind aktuelle News zur Entwicklung von grml im öffentlich
226 verfügbaren \cite{grmldevblog} zu finden.
227
228 \subsection{Informationen rund um grml}
229
230 Der Hauptanlaufpunkt ist natürlich die \cite{grml}, auf der es nicht nur
231 allgemeine Informationen sowie eine
232 \cite{grmlfaq} (Frequently Asked Questions), sondern auch Informationen rund um
233 die jeweiligen Releases gibt.
234
235 Seit dem 5. Juli 2005 gibt es zusätzlich auch das \cite{grmlwiki}. In diesem
236 \cite{wiki} werden relativ ''bewegliche'' Informationen gesammelt. Angefangen
237 von einer Todoliste, über aktuelle Informationen bis hin zu Tipps und Tricks ist
238 dort alles Relevante zu finden. Das Wiki kann nicht nur von jedem gelesen,
239 sondern auch bearbeitet werden. Mitarbeit ist nicht nur möglich sondern
240 ausdrücklich erwünscht!
241
242 \subsection{Die ''grml-Geschmacksrichtungen''}
243
244 Am 15. Mai 2005 hat Marc Haber in der Newsgroup de.comp.os.unix.linux.misc
245 eine Debian-basierte Live-CD-Distribution mit einer ISO-Größe von maximal
246 55 MB gesucht \cite{groupsgooglehaber}. Es gab schon von grml-Entwicklern
247 öfters den Ruf nach einer kleineren, spezialisierten grml-Version.
248 Motiviert durch die Anforderungen von Marc Haber und durch Gespräche mit
249 ihm wurde an einer ''Miniversion'' von grml gearbeitet. Am 5. Juli 2005
250 wurde dann grml-small in Version 0.1 veröffentlicht. grml-small ist ein
251 rund 50MB großes ISO-Image und beinhaltet einen - im Vergleich zu grml(-large) -
252 abgespeckten aber trotzdem aktuellen Kernel und ein paar grundlegende und
253 für die Systemadministration wichtige Softwarepakete.  Weder ein X-Server
254 noch große Softwarepakete wie LaTeX oder Emacs sind an Board, die
255 platzfressende Dokumentation wurde ausgespart und auch eine
256 Festplatteninstallation via grml2hd ist (aktuell) nicht vorgesehen. Für
257 Rescue-Zwecke ist es aber ausreichend und dank der geringen ISO-Größe passt
258 grml-small sowohl auf Visitenkartenrohlinge als auch kleinere (<=64MB)
259 USB-Sticks.
260
261 grml-usb ist ein weitere grml-Version, welche im Zeitraum September
262 2005 veröffentlicht wird. Während grml(-large) der Luxusdampfer ist, der alle
263 Features bringt und grml-small ein minimalistisches System - vergleichbar
264 mit einem Jetski - ist, stellt grml-usb die Mitte - als eine Art Motorboot
265 - dar. grml-usb ist ein ISO-Image mit ca. 240 MB und ist - wie es der Name schon
266 andeutet - für den Einsatz auf USB-Sticks angepasst. Ein 256MB-USB-Stick
267 reicht aus um sowohl das grml-ISO-Image als auch persönliche Dateien
268 unterzubringen. Mit dem Skript \cite{grml2usb} lässt sich ein grml-ISO
269 -Image auch
270 einfach und unkompliziert auf einen USB-Stick installieren. grml-usb bringt
271 sowohl einen X-Server als auch viele Netzwerk- und Securitytools mit. Eine
272 Festplatteninstallation via grml2hd ist möglich, nur große Softwarepakete
273 wie LaTeX und Emacs mussten - aus offensichtlichen Gründen - eingespart
274 werden.
275
276 Im Folgenden wird die 700MB Variante von grml als \textbf{das} grml
277 bezeichnet, im Zweifelsfall wird es auch grml-large benannt. grml-small und
278 grml-usb kennzeichnen sich natürlich durch die Bezeichnung nach dem
279 Bindestrich.
280
281 \subsection{Qualitätssicherung}
282
283 Der Releasezyklus sieht öffentliche, stabile Releases alle zwei bis drei
284 Monate vor. Abweichungen können sich durch die Einführung von
285 speziellen Features ergeben, werden aber öffentlich angekündigt (siehe auch
286 \cite{grmlroadmap}). Der Debian-Unstable-Zweig - auf dem grml basiert -
287 befindet sich in ständiger Entwicklung. Auch die von grml unterstützte
288 Hardware kann aufgrund ihrer Vielfältigkeit nicht vollständig und im Detail
289 von den Entwicklern getestet werden. Aus diesem Grund wurde nach Erscheinen
290 von grml Version 0.3 das Beta-Tester-Unterprojekt ins Leben gerufen. Teil
291 dieses Projektes sind alle zwei bis drei Wochen erscheinende
292 Entwicklungsversionen. Diese Schnappschüsse der aktuell stattfindenen
293 Arbeit an der grml-CD werden von grml-Entwicklern, Kontributoren und
294 Beta-Testern getestet und etwaige Bugs werden zentral gesammelt. Stabile
295 Releases können dann freigegeben werden, sobald das 0-Bugs-Kriterium
296 erfüllt wurde. Bugs können natürlich auch bei stabilen Releases vorkommen.
297 Informationen, wie man einen Bug meldet, findet man im \cite{grmlwiki}
298 unter
299 \href{http://wiki.grml.org/doku.php?id=bugs}{http://wiki.grml.org/doku.php?id=bugs}.
300
301 Diskussionen rund um neue Features und eventuelle Probleme finden auf der
302 geschlossenen Development-Mailingliste statt. Alle für die Allgemeinheit
303 relevanten Informationen werden dann in gekürzter und aufbereiteter Form im
304 \cite{grmldevblog} veröffentlicht.
305
306 \subsection{grml-Spezialitäten}
307
308 \subsubsection{Softwareauswahl}
309
310 In den über 2200 Softwarepaketen steckt eine Vielzahl an Applikationen. Die
311 Software stammt hierbei zu >90\% aus dem Debianprojekt. Den Rest stellen
312 Debian-Pakete aus Ubuntu, vereinzelten anderen Quellen und natürlich dem
313 grml-Pool selbst dar. Die Software im grml-Pool wurde eigens für grml
314 paketiert, der Einsatz ist an sich aber auch auf reinen Debian-Systemen
315 möglich. Software, die als interessant eingestuft wird, aber weder bei
316 Debian, noch Ubuntu oder weiteren Quellen zu finden ist, wird von den
317 grml-Entwicklern selbst paketiert und in grml integriert.
318
319 Natürlich gehören verschiedene Editoren zum Lieferumfang von grml.
320 Angefangen bei \textbf{vim} und \textbf{nano} über \textbf{joe} und
321 \textbf{emacs} bis hin zu dem Original-Vi-Port \textbf{ex-vi} ist alles
322 dabei. Texttool-User bekommen mit dem Mailclient \textbf{mutt} und dessen
323 Fork \textbf{mutt-ng}, dem Newsreader \textbf{slrn}, dem
324 Instant-Messaging-Client \textbf{centericq} und dem IRC-Client
325 \textbf{irssi} wertvolle Software zur Auswahl.
326
327 Natürlich sind auch Tools zur Datenrettung an Board. \textbf{gpart} errät
328 Partitionstabellen, mit \textbf{recover} lassen sich Dateien auf
329 ext2-Dateisystemen wiederherstellen. \textbf{salvage-ntfs} und
330 \textbf{scrounge-ntfs} dienen zur Datenrettung auf Partitionen mit dem
331 NTFS-Dateisystem. Mit \textbf{ntfsresize} lassen sich NTFS-Partition
332 verkleinern und vergrößern.
333
334 Für Auditing gibt es ebenfalls eine Vielzahl an Software an Board. Mit
335 \textbf{rats} lassen sich typische Programmierfehler in Programmen - die in
336 C, C++, PHP, Perl oder Python geschrieben sind - identifizieren. Mit
337 \textbf{pscan} kann man typische Securityfehler in C-Quellcode aufspürfen.
338 \textbf{bass} ist ein so genannter ''Bulk Auditing Security Scanner'' mit
339 dem man nach einer Vielzahl von Exploits suchen kann. \textbf{satan} ist
340 eine Softwaresammlung um Netzwerke auf ihre Sicherheit hin zu überprüfen.
341 Mit \textbf{smb-nat} lassen sich Audits für NetBIOS-Dateifreigben
342 durchführen.
343
344 Nachdem grml auch für Netzwerkdebugging zum Einsatz kommt, ist eine
345 Vielzahl an Netzwerkapplikationen zu finden. Obligatorische Software wie
346 der Securityscanner \textbf{nessus} sowie \textbf{nmap} fehlen dabei
347 natürlich nicht. Mit \textbf{hping} lassen sich spezielle Netzwerkpakete
348 erzeugen.  \textbf{doscan} wiederum eignet sich für das verteilte Scannen
349 von großen Netzwerken.
350
351 %TCP-Stack-Fingerprinting zum Beispiel kommt bei Security-Audits sehr oft
352 %zum Einsatz. Es 'besteht daraus, eine Vielzahl von Paketuntersuchungen
353 %gegen ein Ziel zu schleudern und das entfernte Betriebssystem durch den
354 %Vergleich der Änderungen mit einer Datenbank vorherzubestimmen. Nmap von
355 %Fyodoor, zu finden auf Insecure.org, gilt als das beste Werkzeug für diesen
356 %Job.'\cite{kennedeinenfeind}
357
358 Der Nachfolger von CVS namens \textbf{subversion} ist sowohl als Client als
359 auch in Serverform vertreten. Der bekannte Webserver \textbf{Apache} ist in
360 Version 1.3 und Version 2.0 zu finden. Wer Datenbanken braucht, bekommt mit
361 \textbf{MySQL}, \textbf{PostgreSQL} und \textbf{sqlite} bekannte Vertreter
362 der OpenSource-Datenbanken zur Verfügung gestellt. Clients für weitere
363 Revisionssysteme wie \textbf{bazaar}, \textbf{darcs} und \textbf{tla} sind
364 natürlich auch verfügbar.
365
366 \subsubsection{zsh und zsh-lovers}
367
368 Jene Shell die im interaktiven Bereich auf Linuxsystemen meistens zum
369 Einsatz kommt ist die Bash. Während die Bash Grundfunktionalitäten durchaus
370 bietet, gibt es für Poweruser eine noch interessantere Shell: die Z-Shell,
371 kurz zsh\cite{zsh}. Die zsh ist sehr modular aufgebaut, bietet einen
372 hochkonfigurierbaren Vervollständigungsmechanismus und eine mächtige
373 Skriptingsprache. Die Aussage von Thorsten Zilm und Karsten Günther trifft
374 den Nagel auf den Kopf: 'Ihre Anwendung ist aufgrund der Leistungsfähigkeit
375 nicht unbedingt einfach; sie wird daher überwiegend von Spezialisten
376 eingesetzt.'\cite{bash} Aus diesem Grund kommt die zsh als die zentrale
377 Shell bei grml zum Einsatz. Sie ist auf grml aber nicht nur die
378 Standard-Loginshell, sondern sie wird auch als Interpreter für /bin/sh
379 herangezogen. Da die zsh in ihrer Standardkonfiguration leider sehr minimal
380 ist, wird sie auf grml mit einer erweiterten und angepassten Konfiguration
381 ausgeliefert. So können praktische Funktionen wie der
382 Vervollständigungsmechanismus sowie vordefinierte Shellaliases und
383 -funktionen out-of-the-box genutzt werden. zsh-Anfänger können so die
384 Mächtigkeit und Möglichkeiten der zsh in kurzer Zeit erlernen und nutzen.
385 Details zu der Konfiguration gibt es auf der \cite{grmlzsh} und in der dort
386 erhältlichen \textbf{grml-zsh-Referenzkarte}. Diese Referenzkarte
387 dokumentiert vordefinierte Aliases, Funktionen und Einstellungen der zsh
388 auf grml.
389
390 Die zsh bietet eine Vielzahl an eleganten Lösungen für den Alltag eines
391 Systemadministrators und Texttool-Users. Viele dieser Beispiele werden im
392 zsh-lovers-Projekt gesammelt, das Teil von grml ist. In der Manualpage
393 \textbf{zsh-lovers} ('man zsh-lovers') sind viele Tipps und Tricks
394 gesammelt und es soll dem interessierten Anwender eine Anlaufstelle für
395 Probleme und ein Ideengeber sein. Mehr Informationen zu der zsh bei grml
396 und dem zsh-lovers-Projekt gibt es auf der \cite{grmlzsh}.
397
398 \subsubsection{grml-etc}
399
400 Das Paket grml-etc beinhaltet diverse Konfigurationsdateien, die vor allem
401 eine verbesserte Standardkonfiguration mit sich bringen. So können
402 Programme in einer für den User angenehmeren Konfiguration ausgeliefert
403 werden.
404
405 \subsubsection{grml-scripts}
406
407 Im Paket grml-scripts werden verschiedene Skripte, für die ein jeweils
408 eigenes Paket zu viel Aufwand bedeuten würde, in Form einer Skriptsammlung
409 zusammengefasst.
410
411 \subsubsection{grml2hd}
412
413 Das grml-System kann auf Systemen ohne Festplatte gebootet werden.
414 Allerdings kann man grml nicht nur von CD-ROM nutzen, sondern es gibt auch
415 eine Möglichkeit um es auf eine Festplatte zu installieren. Das dafür
416 zuständige Programm ist grml2hd. Dieses Programm kopiert das aktuell
417 laufende System mit nur einigen wenigen Nachfragen auf die Festplatte. Auf
418 diese Weise kann man ein Linuxsystem inklusive vollständiger
419 Hardwareerkennung - diese lässt sich natürlich direkt via Live-CD testen -
420 schnell und einfach aufsetzen. Ein Beispiel, um grml auf der Partition
421 /dev/hda1 sowie den Masterbootrecord (MBR) in /dev/hda zu installieren:
422
423 \begin{verbatim}
424 # grml2hd /dev/hda1 -mbr /dev/hda
425 \end{verbatim}
426
427 In weiterer Folge muss man nur mehr ein paar generelle Frage beantworten.
428 Mehr ist nicht notwendig und wenige Minuten später ist das System schon
429 bootfähig. Die Dauer der Installation hängt primär von der verwendeten
430 Hardware - vor allem dem CD-ROM-Laufwerk - ab, mit einem schnellen
431 CD-ROM-Laufwerk, ca. 256MB RAM und einer schnellen Festplatte lässt sich
432 eine Installation innerhalb von 10 Minuten durchführen.
433
434 Weitere Informationen zu grml2hd gibt es auf \cite{grml2hd}.
435
436 \subsubsection{grml-terminalserver}
437
438 Nicht nur via CD-ROM oder via Festplatte lässt sich grml nutzen. Man kann
439 mit dem grml-terminalserver das grml-ISO auch über das Netzwerk booten.
440 Einerseits indem man die PXE-Möglichkeit\cite{wikipxe} (engl. Preboot
441 Execution Environment) des Rechners aktiviert oder indem man eine Diskette
442 mit dem notwendigen Netzwerktreiber nutzt. Beide Varianten werden vom
443 grml-terminalserver unterstützt. Mehr Details dazu auf
444 \cite{grmlterminalserver}.
445
446 \subsubsection{Bootmöglichkeiten von grml}
447
448 Der Vollständigkeit halber sollte noch erwähnt werden, welche Bootmedien
449 von grml unterstützt werden. Wie bereits zu lesen war, kann man grml nicht
450 nur von CD/DVD oder über das Netzwerk (via grml-terminalserver) booten.
451 Auch das Booten von einem USB- oder Firewire-Gerät ist möglich. Das
452 bedeutet, man kann grml z.B. via USB-Stick (siehe das Skript grml2usb), via
453 USB-Festplatte oder einem DVD-Laufwerk, das via Firewire angeschlossen ist,
454 booten.  Selbstverständlich lässt sich grml auch auf einer
455 Compact-Flashkarte nutzen.
456
457 \subsubsection{Kernel}
458
459 Mit Kernel 2.6 wurde das Entwicklungsmodell von den Kernelentwicklern
460 abgeändert. Stabile Releases wie man es noch von Kernel 2.4 gekannt hat
461 gibt es nicht mehr. Die Qualitätssicherung und einen ''brauchbaren'' Kernel
462 muss nun der Distributor zur Verfügung stellen. Obwohl mit den
463 2.6.x.y-Releases ein enormer Fortschritt zu bemerken ist, erfüllt man mit
464 einem unveränderten Kernel von \cite{kernel} - dem so genannten
465 Vanilla-Kernel - nicht immer alle gewünschten Anforderungen. Aus diesem
466 Grund gibt es auch bei grml einen angepassten Kernel.
467
468 Der Kernel umfasst einerseits aktuelle Bugfixes, aber auch zusätzliche
469 Funktionalitäten wie Support für Microsoft PPP compression/encryption
470 (MPPC/MPPE), das Reiser4-Dateisystem und Speakup-Support.  Kernelmodule für
471 viele Wireless-LAN-Netzwerkkarten wie zum Beispiel ipw2100/2200, madwifi
472 und ndiswrapper werden ebenfalls unterstützt.  Weitere Details rund um den
473 Kernel bei grml gibt es auf \cite{grmlkernel}.
474
475 \section{Die Technik hinter grml}
476
477 \subsection{Vorwort}
478
479 Die Beschreibung der folgenden Technologien bezieht sich - sofern nicht
480 explizit erwähnt - auf jene Implementierung, die in Debian GNU/Linux zum
481 Zeitpunkt der Entstehung dieses Dokumentes zu finden ist.
482
483 \subsection{Debian}
484
485 Das Debian-Projekt ist eine Gemeinschaft von Individuen, die in
486 Gemeinschaftsarbeit ein freies Betriebssystem namens Debian GNU/Linux -
487 oder kurz einfach nur Debian - entwickeln. Der Name Debian GNU/Linux
488 erklärt sich dadurch, dass das dem grml-System zugrunde liegende
489 Betriebssystem Linux ist.  Ein Großteil der sogenannten Coreutils
490 (Software wie cp und tar) entstammt dabei dem GNU-Projekt (GNU's Not UNIX).
491 Debian bietet eine große Auswahl an Software (über 15.000 Softwarepakete),
492 öffentlich zugängliche Mailinglisten, Bug-Tracking-Systeme und frei
493 verfügbare Installationsmedien. Weitere Informationen rund um Debian gibt
494 es unter \cite{aboutdebian}.
495
496 \subsection{Paketmanagement}
497
498 grml beinhaltet über 2200 Softwarepakete. Um den Überblick über diese große
499 Anzahl an Paketen nicht zu verlieren und die über 123.000 Dateien und
500 Verzeichnisse aktuell zu halten bedarf es eines Paketmanagements. Dieses
501 Paketmanagement ermöglicht ein automatisierbares und einheitlich
502 anzuwendendes Hinzufügen (Installation), Entfernen (Deinstallation) und
503 Aktualisieren (Update/Upgrade) der gewünschten Software. Wichtig ist auch,
504 dass Benutzer eine dokumentierte Schnittstelle und keinen WFM-Hack (Works
505 For Me) vorfinden. Aus diesem Grunde wurde Debian als Basis gewählt.  Das
506 Paketmanagement von Debian (bekannt als DPKG/APT bzw. die Debian-Pakete mit
507 der Dateiendung .deb) ermöglicht auch eine sehr gute Qualitätssicherung und
508 -kontrolle. Details zu APT findet man in \cite{apthowto}.
509
510 \subsection{Bootvorgang}
511
512 Um die Hardwareerkennung zu verstehen, bedarf es auch grundlegenden Wissens
513 über den Bootvorgang auf einem Live-CD-System. Beim Start von grml ist als
514 Erstes ein Bootsplash zu sehen. Dieser Bootsplash wird von isolinux
515 geladen. isolinux ist ein Bootloader für Linux, der im 'No-Emulation-Modus'
516 dem ISO 9660/El Torito-Standard folgt. Dadurch können das Limit des
517 Floppy-Emulation-Modus und die Kompatibilitätsprobleme des
518 Harddisk-Emulation-Modus umgangen werden.\cite{isolinux}
519
520 isolinux lädt dann den Linux-Kernel und dieser führt wiederum eine initiale
521 Ramdisk - bekannt unter dem Namen initrd - aus. Um jedoch überhaupt auf
522 das Root-Dateisystem zugreifen zu können, bedarf es je nach verwendeter
523 Hardware verschiedene Treiber. Das Root-Dateisystem selbst ist mit SquashFS
524 komprimiert, der dafür notwendige Treiber ist fix in den Kernel eingebaut.
525 Wenn das grml-ISO aber zum Beispiel in einem SCSI-CD-ROM-Laufwerk liegt,
526 muss man für das SCSI-Laufwerk den dafür passenden Treiber laden bevor man
527 die komprimierte Datei überhaupt erst ansprechen kann. Die Ramdisk
528 ermöglicht nun das Ausführen verschiedener Kommandos noch bevor das
529 Root-Dateisystem angesprochen wird. Der Vorgang soll möglichst flexibel und
530 mächtig sein, gleichzeitig soll die Ramdisk aber trotzdem klein sein, da
531 sie ja in den Speicher geladen werden muss. Dies wird durch die Verwendung
532 der statisch kompilierten Busybox-Shell erreicht. Auch die Einbindung von
533 UnionFS findet im Bootstrapping in der initrd statt.
534
535 Zur Erstellung der initrd gibt es verschiedene Möglichkeiten. Der erste
536 Schritt ist das Anlegen einer loop-back-Datei:
537
538 \subsubsection{initrd}
539
540 \begin{verbatim}
541 # dd if=/dev/zero of=/tmp/initrd bs=1024 count=5000
542 # mke2fs -b 1024 -N 8192 -F -q -m 0 /tmp/initrd
543 # mount -t ext2 -o loop /tmp/initrd /mnt/test
544 # cd /mnt/test ; rm -rf lost+found
545 \end{verbatim}
546
547 In diesem Dateisystem werden dann die notwendigen Treiber, Skripte und
548 Binaries platziert. Um Platz zu sparen wird die Datei noch mit gzip
549 komprimiert. Der Kernel dekomprimiert die initrd dann und bindet sie als
550 temporäres Root-Dateisystem ein. Dann wird die Datei /linuxrc ausgeführt
551 und sobald diese terminiert, wird das temporäre Dateisystem wieder
552 ausgebunden (engl. unmounted) und die eigentliche Hardwareerkennung beim
553 Bootvorgang kann ausgeführt werden.
554
555 In Zukunft ist auch der Einsatz von initramfs-tools nicht
556 auszuschließen.\cite{initramfs} Bei Debian ist weiters ein neues
557 init-System namens init-ng im Entstehen. grml verwendet für den Bootvorgang
558 via grml-autoconfig zwar bereits spezielle Methoden wie Statusmeldungen und
559 Parallelisierung, eine Integration von init-ng ist aber durchaus nicht
560 ausgeschlossen und bereits angedacht.
561
562 % Auch Ubuntu ist dabei, diese Umstellung zu wagen.\cite{initramfs-ubuntu}
563 % TODO: init http://www.linuxfibel.de/booten.htm
564
565 \subsection{Hardware-Erkennung}
566
567 \subsubsection{hotplug}
568
569 Hotplugging nennt sich die Möglichkeit, Geräte zur Laufzeit dem System
570 hinzu zu fügen oder zu entfernen. Während man eine solche Möglichkeit
571 früher nur von PCMCIA kannte, wurde mit der Verbreitung von USB- und
572 Firewire-Geräten sowie dem Ausblick auf PCI-Hotplugging der Wunsch,
573 Hotplugging-Support im Kernel zu haben immer größer. Seit dem Kernel 2.4
574 ist Hotplugging ein Standard-Feature von GNU/Linux.
575
576 Damit nicht jeder Linux-Distributor selbst Shellskripte entwickeln muss,
577 wurde im Rahmen des linux-hotplug-Projektes\cite{hotplug} unter Leitung von
578 David Brownell eine Shellskript-Sammlung für das Hotplugging geschaffen.
579 Bei der aktuellen Hotplugging-Implementierung namens hotplug werden neu
580 erkannte Geräte dem Userland via dem Shellskript-Wrapper /sbin/hotplug
581 zugänglich gemacht. Dieses Shellskript lädt auf einem Debian-System die zur
582 Geräteklasse gehörenden Skripte in /etc/hotplug.d/. Diese Skripte wiederum
583 kümmern sich darum, dass die passenden Treiber via modprobe geladen und via
584 rmmod entladen werden.
585
586 Allerdings ist zu beachten, dass bei Verwendung von udev dessen udevsend
587 noch zwischen Kernel und hotplug steht. Die manuelle Kontrolle mittels
588 ''cat /proc/sys/kernel/hotplug'' zeigt, ob wirklich udevsend zum Einsatz
589 kommt. Bei grml ist dies der Fall und udevsend leitet die Events an den
590 udev-Daemon weiter.
591
592 Eine Zuweisung von einer Gerätenummer (engl. device-id) zu deren passenden
593 Treiber (Kernelmodul) wäre in Shellskript-Form mit zu großem Overhead
594 versehen.  Daher wird jedem Kernelmodul entnommen, welche Geräte es
595 unterstützt. Diese Information wird beim Lauf von depmod durch Suchen nach
596 MODULE\_DEVICE\_TABLE() in den Treiberdateien in eine Tabelle geschrieben.
597 Diese Tabellen sind dann unter
598 /lib/modules/~\$KERNELVERSION/modules.\$(CLASS)map zu finden. Die
599 hotplug-Implementierung kann dann anhand dieser Zuweisungen die Zuordnung
600 vom Gerät zum passenden Treiber vornehmen. Aber nicht nur Treiber können
601 ge- und entladen werden, auch Netzwerkinterfaces können automatisch hinauf-
602 und hinuntergefahren und gleichzeitigt konfiguriert werden. Ebenso können
603 externe Geräte wie USB-Sticks automatisch in das Dateisystem eingebunden
604 und auf Wunsch auch ein Icon am Desktop angelegt werden.
605
606 Kernel 2.6 stellt Hotplugging für alle auf sysfs-basierenden Subsysteme
607 (Bussysteme und Treiber) zur Verfügung. Für jedes Gerät, das ein so
608 genanntes kobject im sysfs registriert, wird ein Hotplug-Event ausgelöst.
609 Obwohl der Name hotplug nur das Feature Hotplugging suggeriert, unterstützt
610 hotplug auch das so genannte Coldplugging, also die Erkennung von Geräten,
611 die nicht erst zur Laufzeit erkannt werden. Deswegen ist hotplug ein
612 essentieller Teil der Hardwareerkennung bei grml.
613
614 Die Shellskript-Implementierung hat leider einen entscheidenden Nachteil:
615 die modules.*map-Dateien werden zeilenweise mit Shellkomperatoren (engl.
616 bash comparitors) geparst. Dies ist sehr zeitintensiv und besonders bei
617 einer kurzen Bootzeit sehr störend. Diesem Problem wirken zwei weitere
618 Implementierung entgegen: hotplug-perl und hotplug-ng.
619
620 Die Perl-Implementierung namens hotplug-perl nutzt für jedes Subsystem ein
621 eigenes Perlmodul. Die Modulmappings (modules.*map) und die Blacklist
622 werden nur einmal pro Instanz gelesen und als Array bzw. Hash zur weiteren
623 Verarbeitung gespeichert.\cite{hotplug-perl}
624
625 hotplug-ng geht noch einen Schritt weiter und ist eine
626 hotplug-Implementierung in der Programmiersprache C.\cite{hotplug-ng}
627 Allerdings hat hotplug-ng noch keinen Einzug in Debian gefunden. Die
628 Autoren von udev die gleichzeitig auch hotplug-ng entwickelt haben
629 bezeichnen sogar selbst hotplug-ng für obsolet, da in Zukunft udev die
630 relevanten Teile von hotplug vollständig übernehmen könnte.
631
632 Um den Bootvorgang zu optimieren, kommt bei grml-small 0.1 und auch bei den
633 in Kürze erscheinenden Versionen grml 0.5 und grml-usb 0.1 hotplug-light
634 zum Einsatz. Diese von Marco D'Itri entwickelte Variante beschleunigt den
635 Bootprozess enorm, nutzt aber gleichzeitig die Features von hotplug
636 kombiniert mit den Möglichkeiten von udev.
637
638 % http://portal.suse.com/sdb/de/2004/05/91_coldhotplug.html
639
640 % chandev default dock ieee1394 input net pci scsi usb
641
642 % http://lkml.org/lkml/2005/2/10/179
643 % http://lwn.net/Articles/123932/
644 % http://www.kroah.com/linux/talks/ols_2001_hotplug_paper/hotplug.ps - 
645 % Greg Kroah-Hartman - 2001 / Ottawa Linux Symposium
646
647 \subsubsection{udev}
648
649 udev ist ein Userspace-Gerätedateisystem (engl. devfs - Device Filesystem).
650 Es überwacht Hotplug-Events und anhand von Geräteinformationen aus dem
651 sysfs (/sys) erstellt es dynamisch und zur Laufzeit Gerätedateien unter
652 /dev. Der Vorteil der Auslagerung aus dem Kernel (wie es beim früheren
653 Standard devfs der Fall war) ist eine hohe Flexibilität. Geräte können
654 beliebig benannt werden und die Benennung ist konform der LSB (Linux
655 Standard Base\footnote{ein, von der Free Standards Group verabschiedeter
656 Standard, mit dem Ziel, die verschiedenen Linux-Distributionen hinsichtlich
657 Dateisystemstruktur und grundsätzlich notwendiger Bibliotheken zu
658 vereinheitlichen, um eine zu starke Zersplitterung zu
659 vermeiden.\cite{wikilsb}}).
660
661 Vor allem kann auch Persistenz in der Namensgebung erreicht werden, wenn
662 Geräte de- und aktiviert werden. Wenn ein USB-Drucker angeschlossen wird,
663 bekommt die Gerätedatei die entsprechend der \cite{lanana} vordefinierte
664 Majornummer 180 und die erste freie Minornummer zugewiesen. Sofern noch
665 kein anderer USB-Drucker den Platz belegt wird die erste Minornummer '0'
666 vergeben. Was aber passiert wenn nun ein zweiter USB-Drucker angeschlossen
667 wird? Dieser bekommt die Minornummer '1' zugewiesen. Wenn aber der nun als
668 /dev/usb/lp1 anzusprechende zweite USB-Drucker unter /dev/usb/lp0 erwartet
669 wurde und eine dementsprechende Zuordnung via /etc/fstab geplant ist,
670 schlägt dies fehl. Durch die Verwendung von udev, der Verwendung
671 einer eindeutigen Geräte-Identität und einem definierten Mountpunkt (zum
672 Beispiel /mnt/usbdrucker\_raum42) kann sichergestellt werden, dass der
673 gewünschte Drucker passend anzusprechen ist.
674
675 Zum udev-Paket gehören mehrere Applikationen. Der udev-Daemon udevd
676 serialisiert die Hotplug-Events vom Kernel, so dass die Events im Userspace
677 in der richtigen Reihenfolge ankommen. Seit Release 0.050 kann udev auch
678 die Rolle des hotplug-Multiplexers selbst übernehmen. Dies bietet den
679 Vorteil, dass hotplug-Aufruf in der passenden Reihenfolge für die
680 Generierung der benötigten Gerätedateien geschieht.
681
682 udevsend leitet die die Events an den udev-Daemon. Das Tool scsi\_id dient
683 dazu, um die SCSI-Identifikation auszulesen und eine eindeutige
684 Identifikationsnummer zu generieren. udev\_volume\_id wird im Normalfall
685 von den udev-Regeln aufgerufen, um Gerätenamen passend zum Namen, UUID oder
686 dem Dateisystemtyp einer Partition anzulegen. % STIMMT DAS?!
687
688 Information zu einem Gerät können via udev mit dem Tool udevinfo abgefragt
689 werden. Mit udevtest kann simuliert werden, was udev im Nicht-Testlauf
690 ausführen würde. udevstart wiederum kommt - wie es schon der Name
691 suggeriert - beim Start von udev zum Einsatz. udevstart geht durch das
692 sysfs-Dateisystem und legt für jeden gefunden Eintrag ein Gerät im
693 Geräteverzeichnis /dev an. So kann ein leeres /dev-Verzeichnis befüllt
694 werden.
695
696 udev entwickelt sich sehr rasch und da ein gutes Zusammenspiel mit dem
697 verwendeten Kernel vorhanden sein soll (teilweise ist sogar eine relativ
698 aktuelle Kernelversion Voraussetzung zur vollständigen Funktion), nimmt das
699 grml-Team die Paketierung von udev selbst vor. In Zukunft wird udev noch
700 weitere Teile von hotplug übernehmen und es womöglich sogar obsolet
701 machen.\\
702
703 Im Folgenden nun ein paar Beispiel des Einsatze von udev:
704
705 \small
706 \begin{verbatim}
707 mika@grml ~ % udev_volume_id -l /dev/hdc    % Dateisystemlabel auslesen
708 grml_0.4-1
709 mika@grml ~ % udevinfo -q path -n /dev/hdc  % sysfs-Pfad eines Gerätes anzeigen
710 /block/hdc
711 mika@grml ~ % udevinfo -q all -n /dev/hdc   % alle Werte zu einem Gerät anzeigen
712 P: /block/hdc
713 N: hdc
714 S:
715 S: cdrom
716 S: cdrw
717 S: dvd
718 mika@grml ~ % udevtest `udevinfo -q path -n /dev/hdc` % Testlauf durchführen
719 version 056
720 looking at '/block/hdc'
721 opened class_dev->name='hdc'
722 configured rule in '/etc/udev/rules.d/cd-aliases.rules[9]' applied, \
723 added symlink '%c{1} %c{2} %c{3} %c{4} %c{5} %c{6}'
724 creating device node '/dev/hdc', major = '22', minor = '0', \
725 mode = '0660', uid = '0', gid = '24'
726
727 mika@grml % udevinfo -a -p /sys/class/net/eth0   % detaillierte Informationen
728
729 udevinfo starts with the device the node belongs to and then walks up the
730 device chain, to print for every device found, all possibly useful attributes
731 in the udev key format.
732 Only attributes within one device section may be used together in one rule,
733 to match the device for which the node will be created.
734
735  looking at class device '/sys/class/net/eth0':
736  SYSFS{addr_len}="6"
737  SYSFS{address}="11:22:33:44:55:66"
738  SYSFS{broadcast}="ff:ff:ff:ff:ff:ff"
739  SYSFS{features}="0x3"
740  SYSFS{flags}="0x1002"
741  SYSFS{ifindex}="4"
742  SYSFS{iflink}="4"
743  SYSFS{mtu}="1500"
744  SYSFS{tx_queue_len}="1000"
745  SYSFS{type}="1"
746
747 follow the class device's "device"
748  looking at the device chain at '/sys/devices/pci0000:00/0000:00:09.0':
749  BUS="pci"
750  ID="0000:00:09.0"
751  SYSFS{class}="0x020000"
752  SYSFS{detach_state}="0"
753  SYSFS{device}="0x9200"
754  SYSFS{irq}="17"
755  SYSFS{subsystem_device}="0x1000"
756  SYSFS{subsystem_vendor}="0x10b7"
757  SYSFS{vendor}="0x10b7"
758
759  looking at the device chain at '/sys/devices/pci0000:00':
760  BUS=""
761  ID="pci0000:00"
762  SYSFS{detach_state}="0"
763
764 grml@grml %
765 \end{verbatim}
766 \normalsize
767 % udevinfo -a -p `udevinfo -q path -n /dev/hdc`
768
769 %\href{ftp://ftp.kernel.org/pub/linux/utils/kernel/hotplug/udev.html}{udev-Homepage}
770 %\href{ftp://ftp.kernel.org/pub/linux/utils/kernel/hotplug/udev-FAQ}{udev-FAQ}
771 %\href{http://www.gentoo.org/doc/en/udev-guide.xml}{udev-Guide von Gentoo}
772 %\href{http://www.reactivated.net/udevrules.php}{Writing udev rules}
773 %\href{http://www.kroah.com/linux/talks/ols_2003_udev_paper/Reprint-Kroah-Hartman-OLS2003.pdf}{Greg Kroah-Hartman - Linux-Symposium 2003 / Ottawa}
774
775 \subsubsection{discover}
776
777 Discover ist ein von der Firma Progeny Linux Systems Inc. entwickeltes
778 Hardware-Identifikationssystem, das auf der Bibliothek libdiscover2
779 basiert.  Discover besteht aus den drei Kommandozeilenapplikationen
780 discover-modprobe (Laden von Kernelmodulen), discover-config (Information
781 über die Paketkonfiguration) und discover (die zentrale
782 Hardwareerkennungs-Applikation).  Die Implementierung für Linux wurde
783 basierend auf dem Code von detect von MandrakeSoft SA durchgeführt.
784
785 Bei discover werden in XML-Dateien Informationen zu Geräten und ihrer
786 Identifikation gespeichert. Es verwendet dabei für jeden Bustyp bis zu drei
787 verschiedene Arten von Listen: eine Bustypliste (busclass-list), eine
788 Herstellerliste (vendor-list) und eine Geräteliste (device-list). Discover
789 unterstützt aktuell die Bustypen ATA, PCI, PCMCIA, SCSI und USB. Die
790 Herstellerliste stellt nach außen hin Informationen zu einem bestimmten
791 Gerät zur Verfügung. Gültige Gerätetypen wären zum Beispiel audio, bridge,
792 display, network und printer. Die XML-Dateien sind auf einem Debian-System
793 unter /lib/discover/ zu finden. In diesen wird nun zum Beispiel angegeben,
794 welches Kernelmodul mit welchen Optionen für ein bestimmtes Gerät zu
795 verwenden ist.
796
797 Ein Beispiel um Informationen über die verfügbaren Grafikkarten zu
798 bekommen:
799
800 \small
801 %\begin{lstlisting}[language=bash, emph={}, emphstyle=\underbar, breaklines=true, showstringspaces=false]
802 %\begin{lstlisting}[breaklines=false, showstringspaces=false]
803 \begin{verbatim}
804 % discover -v --type-summary --disable-bus all --enable-bus pci display
805 Disabled ata
806 Disabled pci
807 Disabled pcmcia
808 Disabled scsi
809 Disabled usb
810 Enabled pci
811 Loading XML data... pci Done
812 ATI Technologies Inc RV350 AP [Radeon 9600]
813 ATI Technologies Inc RV350 AP [Radeon 9600] (Secondary)
814 \end{verbatim}
815 %\end{lstlisting}
816 \normalsize
817
818 Weite Details zu discover sind in der offiziellen
819 Dokumentation auf der \cite{discover} zu finden.
820
821 \subsubsection{hwinfo}
822
823 hwinfo ist ein auf der Hardware-Detection-Bibliothek (libhd) aufbauendes
824 Hardwareerkennungstool der Firma SuSE. hwinfo steht unter der GPL und kommt
825 bei grml aktuell nur bei der Grafikkartenerkennung bei grml-x zum Einsatz.
826 Eine weitergehende Integration in den Prozess der Hardwareerkennung ist
827 aber nicht auszuschließen. hwinfo liest seine Hardwareinformationen nämlich
828 anders als zum Beispiel kudzu (das bei grml aber ebenfalls nicht mehr
829 eingesetzt wird) nicht aus einer externen Datei aus, sondern bringt es in
830 der libhd mit. Dies hat zwar den Nachteil, dass eine Aktualisierung der
831 Hardwareinformationen (diese wird in den IDS-Dateien vorgenommen) ein
832 Neubauen der Software bedingt. Es bringt umgekehrt aber einen
833 Performancevorteil, der gerade beim Bootvorgang nicht zu vernachlässigen
834 ist.
835
836 Wie funktioniert hwinfo nun im Groben? Anhand eines Beispieles soll dies
837 nun nachvollzogen werden. Wir interessieren uns für die Grafikkarte und
838 möchten Herstellerinformationen über diese, aber auch den Namen des zu
839 ladenden Treibers bekommen. lspci liefert uns Informationen über Geräte die
840 an den PCI-Bus angeschlossen sind:
841
842 \small
843 \begin{verbatim}
844 % lspci | grep VGA
845 0000:01:00.0 VGA compatible controller: ATI Technologies Inc Rage Mobility P/M AGP 2x (rev 64)
846 % lspci -n | grep "0000:01:00.0"
847 0000:01:00.0 0300: 1002:4c4d (rev 64)
848 \end{verbatim}
849 \normalsize
850
851 Nachdem wir nun die PCI-ID kennen, vergleichen wir den Output einmal mit
852 jenem von hwinfo:
853
854 \small
855 \begin{verbatim}
856 % hwinfo --gfxcard | grep -A3 " Vendor:"
857  Vendor: pci 0x1002 "ATI Technologies Inc"
858  Device: pci 0x4c4d "3D Rage P/M Mobility AGP 2x"
859  SubVendor: pci 0x104d "Sony Corporation"
860  SubDevice: pci 0x80f6 
861
862 \end{verbatim}
863 \normalsize
864
865 Nun der dazu passende Ausschnitt aus den IDS-Dateien des hwinfo-Quellcodes:
866
867 \small
868 \begin{verbatim}
869  vendor.id pci 0x1002 
870 &device.id pci 0x4c4d 
871 +device.name 3D Rage P/M Mobility AGP 2x 
872 +driver.xfree 4|ati 
873 \end{verbatim}
874 \normalsize
875
876 Die Information darüber wird wirklich aus der libhd gelesen, wie uns das
877 nachfolgende Kommando beweist:
878
879 \small
880 \begin{verbatim}
881 % strings /usr/lib/libhd.so | grep "3D Rage P/M Mobility AGP 2x" 
882 3D Rage P/M Mobility AGP 2x
883
884 \end{verbatim}
885 \normalsize
886
887 % http://portal.suse.com/sdb/de/2004/05/91_sysconfig.html
888
889 \subsubsection{D-BUS}
890
891 D-BUS ist ein Nachrichten-Bussystem.\cite{dbus} Ein Systemdaemon kümmert
892 sich um Systemnachrichten wie 'neue Hardware wurde hinzugefügt'. Ein
893 Userspace-Dämon (per-user-login-session daemon) kümmert sich um die
894 Interprozesskommunikation (engl. IPC - Inter Process Communication)
895 zwischen den Userlandapplikationen.  D-BUS bietet optional Bindings für
896 GLib, Qt, Python und Mono/.NET. Projekte die auf D-BUS aufsetzen, sind
897 unter anderem udev und HAL.
898
899 \subsubsection{HAL}
900
901 Die Idee hinter \cite{hal} (Hardware Abstraction Layer, engl. Hardware
902 Abstraktionsschicht) ist es, die Hardware-Ebene zu abstrahieren und in Form
903 einer Bibliothek für Software zur Verfügung zu stellen. So muss sich
904 Software nicht um Details rund um die Hardware und deren Verwendung
905 kümmern. Applikationen können dadurch plattformübergreifend geschrieben und
906 verwendet werden. Sobald der HAL-Daemon (hald) und das D-BUS-System laufen,
907 kann man sich mit 'lshal' Hardwareinformationen anzeigen lassen. Ein
908 Beispiel der Anwendung um Prozessor-Informationen zu beziehen:
909
910 \small
911 %\begin{lstlisting}[breaklines=fales, showstringspaces=false]
912 \begin{verbatim}
913 % lshal 2>/dev/null | sed -ne "/^udi = .*Processor/,/^$/p"
914 lshal version 0.4.7
915 udi = '/org/freedesktop/Hal/devices/Processor'
916  linux.procfs.cpuinfo.bogomips = '3578.26' (string)
917  linux.procfs.cpuinfo.flags = 'fpu vme de pse tsc msr pae mce [...]
918  linux.procfs.cpuinfo.wp = 'yes' (string)
919  linux.procfs.cpuinfo.cpuid_level = '1' (string)
920  linux.procfs.cpuinfo.fpu_exception = 'yes' (string)
921  linux.procfs.cpuinfo.fpu = 'yes' (string)
922  linux.procfs.cpuinfo.coma_bug = 'no' (string)
923  linux.procfs.cpuinfo.f00f_bug = 'no' (string)
924  linux.procfs.cpuinfo.hlt_bug = 'no' (string)
925  linux.procfs.cpuinfo.fdiv_bug = 'no' (string)
926  linux.procfs.cpuinfo.cache_size = '256 KB' (string)
927  linux.procfs.cpuinfo.cpu_mhz = '1795.462' (string)
928  linux.procfs.cpuinfo.stepping = '1' (string)
929  linux.procfs.cpuinfo.model_name = 'AMD Athlon(tm) XP 2200+' (string)
930  linux.procfs.cpuinfo.model = '8' (string)
931  linux.procfs.cpuinfo.cpu_family = '6' (string)
932  linux.procfs.cpuinfo.vendor_id = 'AuthenticAMD' (string)
933  linux.procfs.cpuinfo.processor = '0' (string)
934  info.parent = '/org/freedesktop/Hal/devices/computer' (string)
935  info.product = 'Processor' (string)
936  info.bus = 'unknown' (string)
937  info.capabilities = 'linux.sysinfo' (string)
938 \end{verbatim}
939 %\end{lstlisting}
940 \normalsize
941
942 Via 'lshal --monitor' kann man die Geräteliste überwachen. Nützlich ist HAL
943 in Kombination mit hardwarenahen Applikationen wie udev und hotplug.
944
945 % \subsubsection{Diverses}
946
947 % TODO: Manuelle Erkennung... - dmidecode, ddcprobe, laptop-detect,
948 % xdebconfigurator, xviddetect, lshw, mdetect, nictools-nopci, nictools-pci,
949 % pconf-detect, read-edid,...
950
951 % http://wiki.debian.net/?HardwareAutodetection
952 % http://www.ubuntulinux.org/wiki/HardwareDatabase
953
954 \subsection{squashfs}
955
956 SquashFS ist ein komprimiertes read-only-Dateisystem für Linux. SquashFS
957 komprimiert Daten, Inodes und Verzeichnisse und kann dabei Dateien sowie
958 Dateisysteme bis zu einer Größe von 4 GB verarbeiten. Dabei werden
959 Blockgrößen von bis zu 64 KB verwendet, dies ermöglicht bessere
960 Komprimierungsraten im Vergleich zu normalen Blockgrößen wie 4KB.
961 Dateiduplikate werden dabei von SquashFS erkannt und entfernt.
962
963 Für SquashFS-Support benötigt man den SquashFS-Linuxkernel-Patch und das
964 Tool mksquashfs. Als ersten Schritt lädt man das SquashFS-Modul via insmod
965 bzw. modprobe. Dann überprüft man am Besten, ob der Kernel SquashFS
966 unterstützt:
967
968 \begin{verbatim}
969 % grep squashfs /proc/filesystems
970         squashfs
971 \end{verbatim}
972
973 Nun kann man via folgendem Kommando aus dem Verzeichnis
974 /ein/verzeichnis die SquashFS-Datei test.sqsh erzeugen:
975
976 \begin{verbatim}
977 % mksquashfs /ein/verzeichnis test.sqsh
978 \end{verbatim}
979 % mksquashfs /Grml/grml\_uncompressed /Grml/grml\_cd/GRML/GRML -noappend
980
981 Die Datei test.sqsh ist vom Speicherbedarf her nun wesentlich kleiner als
982 das Verzeichnis /ein/verzeichnis. Diese Technik macht es möglich, dass bei
983 grml rund 2.1 GB auf einen 700 MB-Rohling passen. Um diese SquashFS-Datei
984 nun zu nutzen bindet man sie in das Dateisystem wie folgt ein:
985
986 \begin{verbatim}
987 % mount test.sqsh /mnt/test -t squashfs -o loop
988 \end{verbatim}
989
990 Weitere Informationen zu SquashFS findet man auf der \cite{squashfs} sowie
991 im \cite{squashfshowto}.
992
993 \subsection{unionfs}
994
995 'Typischerweise besteht ein komplettes Linux-System aus mehreren Tausend
996 bis hin zu einigen Millionen Dateien, die zum Speichern von Programmen,
997 Daten und allen Arten von Informationen verwendet werden. Bekanntlich
998 werden hierarchische Verzeichnisstrukturen verwendet, um Dateien zu
999 katalogisieren und zu gruppieren. Es gibt verschiedene Ansätze, um die dazu
1000 notwendigen Strukturen zusammen mit den Daten permament zu
1001 speichern.'\cite{mauerer} Gängig sind hierbei Dateisysteme wie ext2/ext3,
1002 reiserfs und XFS. Klassische Dateisysteme unter Linux werden als Ganzes in
1003 eine bestehende Verzeichnisstruktur eingebunden. Die ursprünglichen Inhalte
1004 eines Verzeichnisses werden dabei ausgeblendet. Die Kombination von zwei
1005 Dateisystemen ist also nicht einfach möglich. Um dies trotzdem zu
1006 ermöglichen, gibt es so genannte transluzente Dateisysteme.
1007
1008 'Ein transluzentes Dateisystem baut auf zwei anderen Dateisystemen auf und
1009 vereinigt deren Inhalte in besonderer Form: Auf das erste der beiden
1010 unterliegenden Dateisysteme wird nur lesend zugegriffen und es dient als
1011 Basis für das transluzente Dateisystem. Das zweite Dateisystem erlaubt
1012 zusätzlich Schreibzugriffe und hat die Aufgabe neue und veränderte Dateien
1013 aufzunehmen.  Ansonsten verhält sich das Letztere für den Benutzer
1014 durchsichtig ­ daher der Name transluzent (translucent, engl: durchsichtig).' \cite{zitterell}
1015
1016 Durch diese Technologie ist es möglich, ein read-only-Medium wie zum
1017 Beispiel eine CD-ROM mit einer RAM-Disk (Bereich in einem temporären
1018 Speicher [RAM oder Swap]) zu vereinen und virtuell schreibbar zu machen.
1019 Unionfs ist ein solches transluzentes Dateisystem und ermöglicht es, eine
1020 RAM-Disk tranparent über das Dateisystem zu legen und das System somit wie
1021 eine Festplatteninstallation nutzbar zu machen. Der Name rührt daher, dass
1022 Unionfs mehrere Verzeichnisse in einer 'unified view' (einzelnen Sicht)
1023 vereint.
1024
1025 % Linux hält sich bei der Verwaltung der Datesisysteme an sein ''Vorbild''
1026 % Unix. ''Verwaltet werden diese vom VFS [Virtual FileSystem], das die
1027 % dateisystemspezifischen Funktionen der einzelnen Implementierungen
1028 % aufruft, um die Struktur zu füllen. Diese Funktionen sind in jeder
1029 % konkreten Implementierung enthalten.''\cite{kernelprogrammierung} Dies
1030 % ist dadurch auch bei Unionfs der Fall.
1031
1032 Transluzente Dateisysteme können dabei in zwei verschiedenen Arten
1033 implementiert werden: durch Manipulation von Systemaufrufen oder durch die
1034 Verwendung des virtuellen Dateisystemlayers VFS des Kernels. Die Variante
1035 mit Systemaufrufen hat aber folgende Nachteile:
1036
1037 \begin{itemize}
1038  \item Dateioperationen des Kernels werden nicht berücksichtigt
1039  \item seit Kernelversion 2.6 ist eine Manupulation der Systemaufrufe nicht
1040  mehr ohne Änderung der Kernelquellen möglich
1041  \item großer Overhead durch Überprüfen der den Systemcalls übergebenen
1042  Zeichenketten (Probleme zum Beispiel mit Symlinks)
1043  \item das Behandeln konkurrierender Prozesse ist problematisch
1044  \item Caching kaum bzw. sehr schwer möglich
1045 \end{itemize}
1046
1047 Aus diesem Grund setzt Unionfs auf dem VFS auf. Unionfs ist dabei nicht die
1048 einzige Implementierung eines transluzenten Dateisystems. FreeBSD bietet
1049 schon seit längerem ein sogenanntes 'union filesystem', dieses ist aber
1050 relativ schlecht dokumentiert und hat mit dem hier behandelten UnionFS
1051 nichts zu tun. Für SUN Solaris gibt es mit tfs auch ein äquivalentes
1052 Projekt. Weitere transluzente Dateisysteme sind Translucency von Bernhard
1053 Wiedemann, mini\_fo sowie cowfs als Teil der
1054 shadowfs-LD\_PRELOAD-Wrapper-Sammlung von Clifford Wolf. UnionFS ist
1055 relativ jung, aber aktuell die am weitesten fortgeschrittene Implementierung
1056 eines transluzenten Dateisystems.
1057
1058 % FiST und Wrapfs
1059 % Inheriting File System (IFS)
1060 % Overlay Filesystem
1061 % mini\_fo
1062
1063 % Stackable Filesystems
1064
1065 %  Fan Out Filesystems
1066 %  Interposition
1067
1068 % cowfs ist ein LD\_PRELOAD-Wrapper der libc-Funktionen (open, fopen, creat,
1069 % mknod,...) abfängt und passend verarbeitet.
1070
1071 % www.denx.de/PDF/Diplomarbeit-MK-1.0-net.pdf
1072
1073 % shadowfs is a collection of various LD\_PRELOAD wrappers for adding fancy
1074 % filesystem features to a linux system.
1075
1076 % This project builds a stackable unification file system, which can appear to
1077 % merge the contents of several directories (branches), while keeping their
1078 % physical content separate. Unionfs is useful for unified source tree management,
1079 % merged contents of split CD-ROM, merged separate software package directories,
1080 % data grids, and more. Unionfs allows any mix of read-only and read-write
1081 % branches, as well as insertion and deletion of branches anywhere in the fan-out.
1082 % To maintain unix semantics, Unionfs handles elimination of duplicates,
1083 % partial-error conditions, and more. Unionfs is part of the larger FiST project.
1084
1085 Um Unionfs zu nutzen benötigt man das Unionfs-Kernelmodul. Via 'modprobe
1086 unionfs' lädt man das Modul. Ob das Modul wirklich geladen ist kann man
1087 via 'lsmod | grep unionfs' überprüfen. Bei grml wird Unionfs bereits in der
1088 initrd-Phase geladen, da direkt nach dem Zugriff auf die SquashFS-Datei
1089 Unionfs transparent über das Root-Dateisystem ('/') gelegt wird.
1090
1091 Ein Beispiel, wie man aus einem readonly-Verzeichnis namens /GRML mit dem
1092 Darüberlegen eines schreibbaren Verzeichnisses (/ramdisk) mittels Unionfs
1093 ein schreibbares Verzeichnis erreichen kann:
1094
1095 \small
1096 \begin{verbatim}
1097 % mount -t unionfs -o dirs=/ramdisk=rw:/GRML=ro none /UNIONFS
1098 \end{verbatim}
1099 \normalsize
1100
1101 Ein weiteres Beispiel demonstriert, wie man die Verzeichnisse /dvd1 und
1102 /dvd2 gemeinsam in einem dritten Verzeichnis /mnt/allinone vereinen kann:
1103
1104 % mount /grml93dvd1
1105 % mount /grml93dvd2
1106 % mount none -t unionfs /mnt -o \
1107 %  dirs=/dvd1/i586=ro:/dvd2/i586=ro:/dvd1/noarch=ro:/dvd2/noarch=ro
1108 \small
1109 \begin{verbatim}
1110  mount -t unionfs -o dirs=/dvd1:/dvd2 none /mnt/allinone
1111 \end{verbatim}
1112 \normalsize
1113
1114 Unionfs steht aktuell noch in aktiver und ständiger Entwicklung. Mit
1115 weiteren Funktionen und einer erhöhten Stabilität kann in Zukunft also
1116 gerechnet werden.
1117
1118 % http://www.unionfs.org/
1119 % Overlay Filesystem: http://ovlfs.sourceforge.net/
1120 % http://www.fsl.cs.sunysb.edu/docs/unionfs-tr/index.html
1121
1122
1123 \section{Zusammenfassung}
1124
1125 Wir haben in diesem Dokument gezeigt, dass grml eine mächtige Live-CD ist,
1126 die sowohl für Systemadministratoren als auch für Texttool-User sehr gut
1127 geeignet ist. Der Bereich der Hardwareerkennung ist ein sich ständig
1128 weiterentwickelndes Betätigungsfeld. Neuartige Technologien müssen
1129 sorgfältig überprüft, getestet und in bestehende Systeme eingefügt werden.
1130 Nur dann ist ein stabiler und zufriedenstellender Betrieb möglich.
1131
1132 Feedback, Ergänzungen und Korrekturen zu diesem Dokument werden vom Autor
1133 gerne entgegen genommen!  \href{http://grml.org/contact/}{grml.org/contact/}
1134
1135 \newpage
1136 \begin{thebibliography}{5}
1137 % Kapitel~\ref{key} + in Kapitel~\ref{key} auf Seite~\pageref{key}
1138 % \bibitem[Beck, Böhme, Dziadzka, Kunitz, Magnus, Schröter 2001]{kernelprogrammierung} Michael Beck, Harald Böhme, Mriko Dziadzka, Ulrich Kunitz, Robert Magnus, Claus SChröter, Dirk Verworner: ``Linux Kernelprogrammierung``; Addison-Wesley Verlag, München (2001)
1139 \bibitem[Rankin 2005]{knoppixhacks} Kyle Rankin: ``KNOPPIX HACKS``; O'Reilly Media Inc., Gravenstein Highway North (2005)
1140 \bibitem[Mauerer 2004]{mauerer}  Wolfgang Mauerer: ``Linux Kernelarchitektur``; Carl Hanser Verlag, München/Wien (2004)
1141 \bibitem[Peikari, Chuvakin 2004]{kennedeinenfeind} Cyrus Peikari und Anton Chuvakin: ``Kenne deinen Feind``; O'Reilly Verlag GmbH \& Co. KG, Köln (2004)
1142 \bibitem[O'Reilly \& Associates 2005]{opensource} O'Reilly \& Associates: ``Open Source - kurz \& gut``; O'Reilly Verlag GmbH \& Co. KG, Köln (1999)
1143 \bibitem[Zilm, Günther 2004]{bash} Thorsten Zilm und Karsten Günther: ``Bash ge-packt``; mitp-Verlag, Bonn (2004)
1144 \bibitem[Geschonneck 2004]{geschonneck} Alexander Geschonneck: ``Computer Forensik``; dpunkt.verlag GmbH, Heidelberg (2004)
1145 \bibitem[APT-Howto]{apthowto}\url{http://www.debian.org/doc/manuals/apt-howto/index.de.html} (25.08.2005, Debian)
1146 \bibitem[Debian-Homepage: About Debian]{aboutdebian}\url{http://www.debian.org/intro/about} (01.06.2005, Debian)
1147 \bibitem[D-BUS]{dbus}\url{http://hal.freedesktop.org/wiki/Software_2fdbus} (26.04.2005, freedesktop.org)
1148 \bibitem[Discover-Homepage]{discover}\url{http://componentizedlinux.org/discover/documentation/guide.html} (25.08.2005, Progeny)
1149 %\bibitem[grml-Betatester 2005]{grmlbetatester}\url{http://grml.org/beta-tester/} (25.08.2005, grml)
1150 \bibitem[FAQ]{grmlfaq}\url{http://grml.org/faq/} (25.08.2005, grml)
1151 \bibitem[grml2hd-Webseite]{grml2hd}\url{http://grml.org/grml2hd/} (25.08.2005, grml)
1152 \bibitem[grml2usb]{grml2usb}\url{http://grml.org/files/scripts/grml2usb} (25.08.2005, grml)
1153 \bibitem[grml-Devel-Weblog]{grmldevblog}\url{http://grml.supersized.org/} (25.08.2005, grml)
1154 %\bibitem[grml IRC 2005]{grmlirc}\url{http://grml.org/irc/} (25.08.2005, grml)
1155 \bibitem[grml-Kernel]{grmlkernel}\url{http://grml.org/kernel/} (25.08.2005, grml)
1156 \bibitem[grml-Mailingliste]{grmlml}\url{http://grml.org/mailinglist/} (25.08.2005, grml)
1157 \bibitem[grml-Webseite]{grml}\url{http://grml.org/} (25.08.2005, grml)
1158 \bibitem[grml-Wiki]{grmlwiki}\url{http://wiki.grml.org/} (25.08.2005, grml)
1159 \bibitem[grml-Roadmap]{grmlroadmap}\url{http://grml.org/roadmap/} (25.08.2005, grml)
1160 \bibitem[grml-RSS-Feed]{grmlrss}\url{http://grml.org/index.rss} (25.08.2005, grml)
1161 %\bibitem[grml-Support 2005]{grmlsupport}\url{http://grml.org/support/} (25.08.2005, grml)
1162 \bibitem[grml-zsh-Webseite]{grmlzsh}\url{http:/grml.org/zsh/} (25.08.2005, grml)
1163 \bibitem[grml-terminalserver-Webseite]{grmlterminalserver}\url{http:/grml.org/terminalserver/} (25.08.2005, grml)
1164 \bibitem[Posting von Marc Haber in dcoulm]{groupsgooglehaber}\url{http://groups.google.at/group/de.comp.os.unix.linux.misc/msg/5220e8d133791129} (15.05.2005)
1165 \bibitem[HAL]{hal}\url{http://hal.freedesktop.org/wiki/Software_2fhal} (25.08.2005, freedesktop.org)
1166 \bibitem[hotplug-Webseite]{hotplug}\url{http://linux-hotplug.sourceforge.net/} (25.08.2005, linux-hotplug)
1167 \bibitem[hotplug-perl-Webseite]{hotplug-perl}\url{http://opensource.idealcorp.com/hotplug-perl/} (25.08.2005, I.D.E.A.L. Technology Corporation)
1168 \bibitem[hotplug-ng-Webseite]{hotplug-ng}\url{http://kernel.org/pub/linux/utils/kernel/hotplug/} (25.08.2005, kernel.org)
1169 \bibitem[initramfs]{initramfs}\url{http://lwn.net/Articles/14776/} (09.06.2005, LWN.net)
1170 %\bibitem[initramfs-ubuntu 2005]{initramfs-ubuntu}\url{http://www.ubuntulinux.org/wiki/Initramfs} (09.06.2005, Canonical Ltd.)
1171 \bibitem[isolinux-Homepage]{isolinux}\url{http://syslinux.zytor.com/iso.php} (25.08.2005, H. Peter Anvin)
1172 \bibitem[kernel.org]{kernel}\url{http://kernel.org/} (25.08.2005, kernel.org)
1173 \bibitem[LANANA-Liste]{lanana}\url{http://www.lanana.org/docs/device-list/devices.txt} (25.08.2005, The Linux Assigned Names And Numbers Authority)
1174 \bibitem[SquashFS-HowTo]{squashfshowto}\url{http://www.artemio.net/projects/linuxdoc/squashfs/SquashFS-HOWTO.html} (25.03.2005, Artemiy I. Pavlov)
1175 \bibitem[squashfs-Webseite]{squashfs}\url{http://squashfs.sourceforge.net/} (25.08.2005, squashfs.sourceforge.net)
1176 \bibitem[Wikipedia: Live-CD]{wikicd}\url{http://de.wikipedia.org/wiki/Live-CD} (22.05.2005, Wikipedia)
1177 \bibitem[Wikipedia: PXE]{wikipxe}\url{http://de.wikipedia.org/wiki/Preboot_Execution_Environment} (25.08.2005, Wikipedia)
1178 \bibitem[Wikipedia: LSB]{wikilsb}\url{http://de.wikipedia.org/wiki/Linux_Standard_Base} (25.08.2005, Wikipedia)
1179 \bibitem[Wiki]{wiki}\url{http://de.wikipedia.org/wiki/Wiki} (28.08.2005, Wikipedia)
1180 \bibitem[Zitterell 2005]{zitterell}\url{http://www.ks.uni-freiburg.de/download/studienarbeit/WS04/01-05-Studienarbeit-ThZitterell.pdf} (Jänner 2005)
1181 \bibitem[zsh-Webseite]{zsh}\url{http:/www.zsh.org/} (25.08.2005)
1182 \bibitem[zsh-Userguide]{zshuserguide}\url{http://zsh.sunsite.dk/Guide/zshguide.html} (02.06.1999)
1183 \end{thebibliography}
1184
1185 \section{Revisisionen dieses Dokumentes}
1186 \label{revisions}
1187
1188 Wed Sep 14 22:55:29 CEST 2005: einige Stilverbesserungen,
1189 Rechtschreibkorrekturen nach Hinweis durch Nico Golde\newline
1190 Tue Sep 13 12:06:57 CEST 2005: Rechtschreibfehler korrigiert,
1191 Textvorhebungen und Verweis auf grml-zsh-Referenzkarte nach Hinweis durch
1192 Marcel Cedric\newline
1193 Mon Sep 12 01:16:48 CEST 2005: Zwei Rechtschreibfehler nach Hinweis durch
1194 Ronny Plattner beseitigt\newline
1195 Thu Sep 01 11:12:41 CEST 2005: Veröffentlichung der 1. Revision
1196
1197 \label{LastPage}
1198 \end{document}
1199 % ######################## END OF FILE ####################################
1200 % vim: tw=75 ai