= Minimales Debian =

Immer mal wieder ist es sinnvoll, ein Debian-System möglichst klein
zu machen. Dies kann z.B. für ein System sinnvoll sein, das auf
eine CD passen soll (wie KrefixLinux), das von einem USB-Stick
booten soll oder in ein EmbeddedLinux-System in einen
Flash-Speicher muss oder für ein UserModeLinux-System, das viele
Installationen enthalten soll. Natürlich kann man in so einem Fall
auch ein Linux "from Scratch" aufsetzen. Allerdings hat das Debian
Paketmanagement so viele Vorteile, das ich es auch in einem solchen
Extremsystem nicht missen möchte. So ist dann auch die spätere
Wartung eines Systems durch Updates viel einfacher, wenn man nur
'''apt-get update''' schreiben muss.

== Festplatten-Größe ==

Als erstes habe ich ein DeBootstrapBasisSystem erstellt, ohne
weitere Pakete zu installieren. Dieses hat 144MB (und noch keinen
Kernel). Nun kann man folgendes tun, um das System zu verkleinern:

=== Debian-konform ===

durch folgende Änderungen zerstört man nichts, was ein normales
Debian-System ausmacht. Man kann jederzeit mit Hilfe der
AptPaketverwaltung wieder den Urzustand herstellen. Am besten geht
man hierzu mit ''chroot'' in das Verzeichnis, in dem die
Distribution liegt (oder bootet sie direkt, wenn sie bereits
installiert ist). Dann kann man sich mit '''dpkg -l''' anschauen,
welche Pakete installiert sind und einige weglassen, die nicht
essentiell sind:

  apt-get remove --purge aptitude      (7MB, Funktionalität hat auch apt-get)
  apt-get remove --purge nano          (1MB, Funktinalität hat auch vi)
  apt-get remove --purge telnet
 
jetzt haben wir noch 136MB. 
Da man auf einem Minisystem normalerweise keine Dokumentation
braucht, lösche ich noch einige Pakete, die zum Hilfesystem
gehören:

  apt-get remove --purge manpages man-db info groff-base     (5MB)

Als letztes löschen wir verschiedene Caches der AptPaketverwaltung
(heruntergeladene Pakete, Paketlisten, pkgcache?!?). Diese können
wir jederzeit mit '''apt-get update''' wieder herstellen:

  apt-get clean
  rm /var/lib/apt/lists/*sarge*
  rm /var/cache/apt/*.bin


Jetzt sinds bei mir noch 87MB, wenn man keine Funktionalität
entfernt.

=== nicht-Debian-konform ===

Hier lösche ich "mit der Brechstange" einige Teile des
Debian-Systems, die man im Betrieb eines CD-Routers, Servers oder
auf einem USB-Notfall-Stick nicht benötigt. Insbesondere haben wir
ja oben schon auf alle Dokumentations-Tools verzichtet, also kann
die Doku selber nun auch weg. Darüberhinaus sind die locales
(zumindest die meisten) auch nicht nötig.

  rm -r /usr/share/doc
  rm -r /usr/share/doc-base
  rm -r /usr/share/man
  rm -r /usr/share/locale
  rm -r /usr/share/zoneinfo

(zusammen 37MB)
{{{

wer es nicht per Hand machen will nimmt das debian paket (ist in etch auf alle fälle enthalten)

 apt-get install localepurge (kostet ein paar kb aber es löscht auch eine menge Müll)

}}}

==== gepacktes Filesystem ====

Eine gute Idee ist auch, das Filesystem zu komprimieren. Spontan
weiss ich jedoch nicht, ob es auch vernünftige beschreibbare
Lösungen unter Linux gibt. Hier sollte nochmal eine intensivere
Recherche angestellt werden (Ergebnisse bitte hierhin!).

Wer mit einem Read-Only System leben kann (ist je nach Anwendung
auch von der Sicherheit her eine gute Idee!), kann sich z.B. mit
'''bootcd''' ein komprimiertes CD-ROM Image erzeugen. Die Ersparnis
liegt bei ca. 50%. Als Beispiel führe ich unser KrefixLinux bzw.
KrefixLinux2 an. Insbesondere [KrefixLinux.ImageVonFestplatteBooten]
dürfte interessant sein, um das System von einer normalen Platte
aus laufen zu lasssen.

==== weitere Ideen ====

Einige Pakete kann man löschen, wenn man auf bestimmte
Funktionalitäten verzichten kann. Dies sieht man am besten in der
Paketliste. Als Beispiel möchte ich ''ppp'', ''pppoe'', ''fdutils''
und ''dhcp-client'' nennen. Ein löschen von ''exim4-base'' (2,7MB)
erscheint meistens sinnvoll, löscht aber ''at'' mit, das leider von
einem Mailserver abhängig ist. Normalerweise kann man darauf auch
verzichten, aber das muss der geneigte Leser selbst entscheiden.

Ich habe bisher Pakete, die irgendwie mit dem Paketmanager zu tun
haben, nicht angerührt. IMHO sollte es aber z.B. möglich sein, auf
die Textmodus-Fenster im Debconf zu verzichten. In diese Richtung
könnte man noch "forschen", wenn die Platzersparnis immer noch
nicht ausreicht.

Wie die locales können auch die zoneinfo-Dateien zumindest
größtenteils gelöscht werden (5,5MB). Hier fehlt noch ein griffiger
Befehl, der "alles ausser ..." löscht.

Auf der Seite FestplatteAufraeumen steht, wie man das System durch die Benutzung von SparseFiles und Hardlinks noch weiter verkleinern kann. Ich habe irgendwo gelesen, man könne damit je nach Distribution noch mal bis zu 20% Platz sparen.


=== Abschluss ===

Um das vorläufige Endergebnis hier mal zu nennen: Ich bin ohne
bsondere Einschränkung der Funktionalität auf '''50 MB''' für ein
Basis-Debian-System (ohne Kernelpaket) gekommen.  -- ThomasBayen


== Kernel ==

Hier können Ideen gesammelt werden, um einen möglichst kleinen
Kernel zu bauen. Dies wirkt sich natürlich sowohl auf die
Festplatten- oals auch auf die Speicher-Größe aus. Wenn man z.B.
mit

  apt-get install kernel-image-2.6-386

ein aktuelles Kernel-Image installiert, kostet das mit allen
dazuinstallierten Paketen ca. 4 MB. Das ist nach der Byteklauberei
vorher natürlich suboptimal. Andererseits verlangen Minisysteme
sowieso meistens nach einem eigens kompilierten Kernel wie auf
DebianKernelKompilieren beschrieben.

Wer ein initrd-System installieren will, sollte in einem
chroot-System einige Besonderheiten beachten: ''/proc'' mounten, in
''/etc/mkinitrd/mkinitrd.conf'' das spätere root-Device einstellen
und in ''/dev'' mit '''MAKEDEV update''' die Devices anlegen. Dann
benötigt man ggf. noch ''lilo'' oder ''grub''.

== Speicher-Größe ==

Die Größe eines laufenden Systems im Hauptspeicher ist ebenfalls
ein wichtiger Aspekt. Allerdings habe ich mich damit bisher noch
nicht so intensiv beschäftigt. Hier kann aber jeder gerne
Vorschläge einbringen. -- ThomasBayen

Eine Idee von FranzLischka ist, aus allen Binaries, insbesondere
auch aus häufig benutzten Libraries die Debug-Informationen
wegzulassen bzw. diese zu "strippen".


[{Tag Debian}]