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".