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