NAT-Router #

Ich möchte einen NAT-Router auf einem embedded Board haben. Dazu sind wir folgendermassen vorgegangen: Als erstes habe ich ein neues Linux-System in einem chroot-Jail erzeugt und dieses nach meinen Vorstellungewn angepasst:

  # cd MeinProjektVerzeichnis
  # debootstrap lenny router

Jetzt haben wir ein hübsches Basis-Debian (lenny-Distribution), das in dem Unterverzeichnis "natrouter" erzeugt wurde.

  # chroot router
  # mount proc /proc -t proc

Wir betreten das Verzeichnis mit "chroot", was dazu führt, daß wir uns (fast) wie in einem neuen, eigenen Linux-System fühlen. Natürlich arbeiten wir immer noch auf dem originalen System, daher empfehle ich nach Abschluss der ganzen Aktion einen Reboot des ganzen Systems. Das proc-System mounte ich, weil das chroot-System dadurch etwas "echter" wirkt, was bei der Installation weiterer Pakete ansonsten zu Fehlern führen kann.

  # aptitude install locales
  # dpkg-reconfigure locales
  # aptitude install joe less ssh
  # aptitude install shorewall ntpdate
  # aptitude install grub
  # aptitude install linux-image-2.6.26-486

Das sind ein paar Pakete, die immer bzw. speziell für unseren Router sinnvoll sind. Arbeitet man auf einem deutsch konfigurierten Muttersystem, sollte man "locales" als erstes installieren und konfigurieren, um Warnings bei den weiteren Paketinstallationen zu vermeiden.

  # umount /proc
  # exit

Jetzt habe ich das chroot-System wieder ordentlich verlassen und schreibe das Verzeichnis dann auf die CF-Karte.

  # cfdisk /dev/sdc

Ich erzeuge eine einzige, grosse Partition mit Filesystemtyp "Linux ext3". Diese mache ich z.B. 512 MB gross. Indem ich nicht die ganze Platte benutze, stelle ich sicher, daß das Image später auch auf verschieden grosse CF-Karten kopiert werden kann.

  # mke2fs -j /dev/sdc1
  # mount /dev/sdc1 /mnt
  # cp -a router /mnt

Jetzt installiere ich den grub-Bootloader (näheres siehe LinuxOhneBildschirm):

  # chroot router
  # cp -r /usr/lib/grub/i386-pc /boot/grub
  # exit
  # grub
  grub> device (hd0) /dev/sdb
  grub> root (hd0,0)
  grub> setup (hd0)
  grub> quit

Einige Kleinigkeiten zur Konfiguration innerhalb des chroot sind noch empfehlenswert. Auf LinuxOhneBildschirm ist ein Beispiel, wie man die inittab anpasst. Dazu empfehle ich noch folgendes:

  # echo "router" >/etc/hostname

Im laufenden System sollte man übrigens Datum und Uhrzeit richtig gesetzt haben:

  # date 030715212009       (bedeutet 7.3.09, 15:21)
  # hwclock --systohc

Jetzt haben wir ein funktionierendes System, das wir bereits produktiv einsetzen können.

bootcd #

Mit dem Debian-Paket "bootcd" können wir dieses System nun für ein embedded board noch etwas besser anpassen. Dazu installieren wir bootcd im Master-System, konfigurieren "/etc/bootcd/bootcdwrite.conf" (langsam und mit nachdenken) und starten "bootcdwrite". Die Besonderheit bei einem embedded System ist, daß man von der ersten Partition statt von einer Floppy bootet. Bei unserem System konnte man leider auch nicht direkt vom CD-Image booten (wurde vom embedded-BIOS nicht unterstützt). Dazu benutzen wir den grub-Bootblock (wie oben installiert), kopieren das "/boot"-Verzeichnis des Masters auf die erste Partition der Festplatte/CF-Karte und tragen in der "grub/menu.lst" in der Kernel-Zeile die zweite Partition als Bootdevice für den Kernel ein. Auf diese zweite Partition kopieren wir dann das CD-Image, das bootcd erzeugt hat.