fli4l - Sources README V__FLI4LVER__ ------------------------------------------------------------------------------- Dieses README ist für diejenigen gedacht, die selbst Erweiterungen an fli4l vornehmen möchten. Zur Konfiguration eines Standard-fli4l-Routers ist dieses Verzeichnis src nicht nötig. In diesem Fall reicht die Lektüre von ../doc vollkommen aus. Die Datei ist in folgende Abschnitte aufgeteilt: 1. Dateien in diesem Verzeichnis 2. Aufbau der Boot-Diskette 3. Dateien im root-Filesystem 4. Konfiguratonsdateien 5. Erstellen eines neuen root-Filesystem-Images 6. Verwendung eines modifizierten Kernels Bevor es losgeht, noch eine Bemerkung: Sollen Dateien modfiziert werden - insb. Dateien aus dem rootfs-Image, ist ein lauffähiges Linux notwendig und root-Berechtigung nötig. Das Mounten/Bearbeiten von rootfs-Image-Dateien ist unter DOS/Windows und anderen Unix-Varianten (BSD vielleicht doch?) nicht möglich. ---------------------------------------------------------------------------- 1. Dateien ========== Dokumentation: - CHANGES Änderungen - README Diese Datei - BUGS Bekannte Fehler Kernel/Root-Filesysteme: - kernel Linux Mini-Kernel 2.2.19 - rootfs.img Gefülltes ext2-Filesystem als Image, wird beim ersten Aufruf von mount-rootfs.sh erzeugt. - rootfs-empty.img Leeres ext2-Filesystem als Image Kernel-Generierung: - kernel/dot-config Meine .config-Datei für Kernel 2.2.19 - kernel/main.c Speziell für fli4l angepasste Bootprozedur - kernel/*.patch Weitere Kernel-Patches Scripts/Prozeduren: - compact-rootfs.sh Script zum Erzeugen der komprimierten Image-Datei ../img/rootfs.gz - mount-rootfs.sh Script zum Mount von rootfs.img - umount-rootfs.sh Script zum Umount von rootfs.img Source: - lcd Sources LCD-Package - local div. C-Sources, u.a. von imond und telmond. siehe local/README ---------------------------------------------------------------------------- 2. Aufbau der Boot-Diskette =========================== Ab fli4l-Version 1.5 wird das Programmpaket syslinux zum Booten von Diskette verwendet. Dieses hat den Vorteil, daß ein DOS-Filesystem zur Verfügung steht. Die Boot-Diskette enthält folgende Dateien: ldlinux.sys Bootloader syslinux syslinux.cfg Konfigurationsdatei für syslinux kernel Linux-Kernel rootfs.gz Root-Filesystem opt.tgz Optionale Dateien: Treiber und Opt-Pakete Durch das Script mk-floppy.sh (bzw. mk-floppy.bat) wird zunächst die Datei img/opt.tgz erzeugt. Die dafür nötige Dateiliste erstellt das Programm mkfli4l (im unix- bzw. windows-Unterverzeichnis). In dem tgz-Archiv (Mit GnuZip komprimiertes Tar-Archiv) sind die benötigten Kernel- und Opt-Module und die Datei rc.cfg (abgespeckte Version von config.txt) enthalten. Anschließend werden die 3 Dateien img/kernel, img/rootfs.gz, img/opt.tgz zusammen mit den syslinux-Dateien auf die Diskette kopiert. Beim Booten von fli4l wird über das Script /etc/rc das komprimierte Tar-Image extrahiert und installiert. Anschließend wird das Boot-Script /etc/rc.cfg aus dem Archiv ausgeführt, um die notwendigen Umgebungsvariablen zu setzen. Bevor nun das ISDN-Subsystem und die notwendigen Dienste wie imond, telmond, syslogd und ens hochgefahren werden, erstellt das Script etc/config.sh zunächst alle notwendigen Konfigurationsdateien aus diesen Variablen. ---------------------------------------------------------------------------- 3. Dateien im root-Filesystem ============================= Das Shell-Script "mount-rootfs.sh" in diesem Verzeichnis erstellt zunächst eine root-Filesystem-Image-Datei namens rootfs.img, falls diese noch nicht existiert. Anschließend wird diese Image-Datei über das loop-Device (nicht zu verwechseln mit dem loopback-Device) gemounted. Aufruf: sh mount-rootfs.sh Das Script legt im aktuellen Verzeichnis ein Directory "rootfs/" an und montiert darin das ext2-Filesystem. Wichtig: Der Kernel muß das Loop-Device untertützen, damit der Mount funktioniert! Folgende Dateien werden dann in "rootfs/" sichtbar: .profile profile-Datei für ash bin/cat Anzeigen von Dateien (BB) bin/chgrp Setzen von Gruppenzugehörigkeit von Dateien (BB) bin/chmod Setzen von Berechtigungen von Dateien (BB) bin/chown Setzen des Eigentümers von Dateien (BB) bin/cp Kopieren von Dateien (BB) bin/date Datum ausgeben/setzen (BB) bin/dd Dateien kopieren/konvertieren (BB) bin/df Freien Plattenplatz ausgeben (BB) bin/dir Verzeichnis in Kurzform ausgeben bin/false Liefert exit-Wert 1 bin/hostname Setzen/Abfragen von hostname bin/kill Prozess beenden / Signal schicken (BB) bin/ln Datei linken (BB) bin/login Link auf /home/local/bin/mini-login (optional) bin/ls Dateiverzeichnis ausgeben (BB) bin/mkdir Dateiverzeichnis anlegen (BB) bin/mount Mount-Programm (BB) bin/mv Dateien umbenennen/verschieben (BB) bin/ping Ping pong (BB) bin/ps Prozesstabelle anzeigen (BB) bin/rm Dateien löschen (BB) bin/sh Shell, gelinkt auf /usr/bin/ash bin/sleep x Sekunden warten (BB) bin/sync Synchronisieren des Linux-Filesystem-Caches bin/tar tar (BB) bin/true Liefert exit-Wert 0 bin/umount Umount-Programm dev/... Devices etc/fstab Filesysteme zum Mounten etc/group Group-Datei etc/host.conf Bestimmt Verfahren für Hostnamen-Auflösung etc/ld.so.cache Cache-Datei für Shared-Libs etc/mtab Mount-Tabelle etc/passwd Password-Datei etc/ppp/auth-down Script für ipppd, leer etc/ppp/auth-up Script für ipppd, leer etc/ppp/ioptions Konfig für ipppd, leer etc/ppp/options pppd-Optionen, leer etc/protocols protocols-Datei etc/rc Boot-Script etc/services Services-Tabelle etc/shadow Shadow-Datei etc/shells Mögliche Shells lib/*.so* Shared Libs lib/modules/ Kernel-Module lost+found/ Verzeichnis für e2fsck mnt/ Verzeichnis für temporären Mount proc/ Verzeichnis für Prozesstabellen sbin/halt Halt Linux :-) sbin/ifconfig IP Konfigurationsprogramm sbin/insmod Programm zum Laden von Kernel-Modulen sbin/ipchains Programm zur Konfiguration der Firewall sbin/reboot Reboot Linux, symbolic linked -> halt sbin/rmmod Löschen von Kernelmodulen (symlink auf insmod) sbin/route Programm zum Konfigurieren von IP-Routen tmp/ Verzeichnis für temporäre Dateien usr/bin/ash Shell, bash ist viel zu groß für Floppy! usr/bin/basename Basisnamen eines Dateinamens anzeigen usr/bin/cut Link auf Busysbox-cut usr/bin/dirname Verzeichnis eines Dateinamens anzeigen usr/bin/expr Mini-Rechenprogramm, zum Inkrementieren usr/bin/grep Link auf Busybox-grep usr/bin/gunzip GNU unzip-Programm usr/bin/killall Link auf Busybox-killall usr/bin/nslookup Abfragen von DNS-Servern usr/bin/sed stream editor sed usr/bin/tr Link auf Busybox-tr usr/lib/isdn Verzeichnis für ISDN-Dateien, z.B. für AVM B1 usr/lib/terminfo/l/linux Linux-Console: terminfo-Datei usr/local/bin/busybox Busybox, s.a. http://busybox.lineo.org usr/local/bin/clrhome Script: löscht Bildschirm, setzt Cursor oben links usr/local/bin/colecho echo mit Farbe :-) usr/local/bin/dtou DOS to Unix: CRs aus DOS Dateien eliminieren var/adm/ Verzeichnis für tmp-Dateien (Administration) var/log/wtmp tmp-Datei var/run/utmp tmp-Datei var/spool/lp1/ Drucker-Spool-Verz. und Mount-Point f. Ramdisk var/spool/lpd/ Lock-Verzeichnis var/tmp/ Verzeichnis für tmp-Dateien (Administration) Die mit (BB) gekennzeichneten Dateien sind Hard-Links auf das Programm usr/local/bin/busybox. ---------------------------------------------------------------------------- 4. Konfigurationsdateien ======================== Hier werden die Dateien kurz aufgeführt, die vom fli4l-Router on-the-fly beim Booten erzeugt werden. 1. Konfiguration fli4l: etc/rc.cfg 2. Konfiguration Provider: etc/ppp/pap-secrets etc/ppp/chap-secrets 3. Konfiguration DNS: etc/resolv.conf usr/local/ens/ens.conf 4. Hosts-Datei etc/hosts 5. imond-Konfiguration: etc/imond.conf 4.1. Konfiguration fli4l ------------------------ Die Datei etc/rc.cfg wird aus dem Archiv opt.tgz extrahiert. Der Inhalt entspricht der fli4l-Konfigurationsdatei config.txt, reduziert um die Kommentare und Carriage-Returns. Diese Datei ist der eigentliche Ausgangspunkt für alle weiteren Konfigurationsdateien, die dann erstellt werden (s. rootfs/etc/rc, opt/etc/rc.local und opt/etc/config.sh). 4.2. Konfiguration Provider --------------------------- Für den ausgesuchten Provider wird in etc/ppp/pap-secrets die User-ID und das Password angepasst. Beispiel für Provider Planet-Interkom: # Secrets for authentication using PAP # client server secret IP addresses "anonymer" * "surfer" Dabei ist im Beispiel "anonymer" die USER-ID. Als Remote-Server wird prinzipiell jeder erlaubt (deshalb "*"). "surfer" ist das Password für den Provider Planet-Interkom. 4.3. Konfiguration DNS ---------------------- Man kann den fli4l-Router als DNS-Server einsetzen. Warum dies sinnvoll - ja sogar bei Windows-Rechnern im LAN zwingend notwendig ist, wurde bereits in ../doc erläutert. a) Resolver-Datei: etc/resolv.conf Standard-Inhalt: search domain.de nameserver 127.0.0.1 Der Name domain.de ist nur ein Beispiel. Tatsächlich ist die Konfigurationsvariable DOMAIN_NAME ausschlaggebend. b) ENS-Konfiguration: usr/local/ens/ens.conf Hier ein Beispiel: logfile /tmp/ens.log # Log-Datei autoptr # Automatische Revers-Auflösung 192.168.6.1 fli4l.domain.de # 1. Rechner 192.168.6.2 client2.domain.de # 2. Rechner 192.168.6.3 client3.domain.de # 3. Rechner 192.168.6.4 client4.domain.de # 4. Rechner NS domain.de 127.0.0.1 # DNS-Server für lokale Domain forwarder 192.76.144.66 # alles weitere an Forwarder forward_entry_timeout 50 # TTL für weitergeleitete Anfrage forward_next_timeout 5 # Nach Timeout alternativer NS cache_max 10000 # Cache-Größe, Anzahl Einträge Die Datei wird beim Booten über das Script config.sh automatisch erzeugt. 4.4. Hosts-Datei ---------------- Sollte jedem bekannt sein :-) Ist eigentlich überflüssig, wenn zusätzlich ein lokaler DNS-Server gestartet wird. 4.5. imond-Konfiguration ------------------------ Die Datei etc/imond.conf wird u.a. aus den Konfigurationsvariablen CIRC_x_NAME, CIRC_x_ROUTE, CIRC_x_CHARGEINT und CIRC_x_TIMES konstruiert. Sie kann aus bis zu 32 Zeilen (ohne die Kommentarzeilen) bestehen. Jede Zeile besteht aus 8 Spalten: 1. Bereich Wochentag bis Wochentag 2. Bereich Stunde bis Stunde 3. Device (ipppX oder isdnX) 4. Circuit mit Default-Route: yes/no 5. Telefonnummer 6. Name des Circuits 7. Telefonkosten pro Minute in DM 8. Zeittakt (charge interval) in Sekunden Hier ein Beispiel: #day hour device defroute phone name charge ch-int Mo-Fr 18-09 ippp0 yes 010280192306 Addcom 0.0248 60 Sa-Su 00-24 ippp0 yes 010280192306 Addcom 0.0248 60 Mo-Fr 09-18 ippp1 yes 019160 Compuserve 0.019 180 Mo-Fr 09-18 isdn2 no 0221xxxxxxx Firma 0.08 90 Mo-Fr 18-09 isdn2 no 0221xxxxxxx Firma 0.03 90 Sa-Su 00-24 isdn2 no 0221xxxxxxx Firma 0.03 90 Weitere Erklärungen zum Least-Cost-Routing findet man in ../doc. ---------------------------------------------------------------------------- 5. Erstellen eines neuen root-Filesystem-Images =============================================== Das root-Filesystem kann mit dem Befehl sh umount-rootfs wieder abgemeldet werden. Möchte man jedoch ein neues komprimiertes root-Filesystem-Image ../img/rootfs.gz erzeugen, sollte man stattdessen das Kommando sh compact-rootfs.sh verwenden. Dann werden die vorhandenen Dateien im ext2-Image in ein neues Image umkopiert. Anschließend wird das neue Image wieder in "rootfs.img" umbenannt. Das hat folgenden Grund: Durch Änderungen in den Dateien bleiben Rest-Daten im Filesystem-Image liegen, die nicht gelöscht, aber nicht mehr verwendet werden. Diese erschweren die Komprimierung beim Erstellen der Boot-Diskette. Dabei kann es dann passieren, dass das komprimierte Filesystem-Image dann nicht mehr auf die Floppy passt! Nach dem Umkopieren wird das root-Filesystem-Image komprimiert als ../img/rootfs.gz abgespeichert. Möchte man nun sein "Werk" auf einer frischen Bootdiskette verewigen, geht's weiter mit: cd .. sh mkfloppy.sh Weiteres dazu in ../doc ---------------------------------------------------------------------------- 6. Verwendung eines modifizierten Kernels ========================================= Möchte man die Konfiguration des 2.2.19er Kernel für fli4l modifizieren, muß man sich erst einmal alle notwendigen Kernel-Sources besorgen. Am besten folgendermaßen vorgehen: 1. Kernel-Sources und Patches herunterladen und unter /usr/src/ ablegen: http://www.kernel.org/pub/linux/kernel/v2.2/linux-2.2.19.tar.gz 2. Kernel-Sources auspacken: cd /usr/src # dort gehört der Kernel hin rm linux # evtl. alten symlink löschen tar xvfz linux-2.2.19.tar.gz # 2.2.19 auspacken ln -s linux-2.2.19 linux # neuer symlink 3. Die Datei kernel/dot-config aus diesem Verzeichnis als Vorlage nach /usr/src/linux-2.2.19/.config kopieren: cp ..../fli4l-xxx/src/kernel/dot-config linux-2.2.19/.config 4. Die Datei kernel/main.c aus diesem Verzeichnis nach /usr/src/linux-2.2.19/init/ kopieren: cp ..../fli4l-xxx/src/kernel/main.c linux-2.2.19/init/main.c In diesem Source-Modul musste ich den Boot-Vorgang über die Date /etc/rc wieder einbauen. Dieser wurde nämlich im Original 2.2er Kernel entfernt. Als Vorlage habe ich Teile des main.c aus dem 2.0.38er Kernel verwendet. 5. VPN-Patch installieren: cp .../fli4l-xxx/src/kernel/ip_masq_vpn-2.2.15.patch /usr/src cd /usr/src/linux-2.2.19 patch -p1 <../ip_masq_vpn-2.2.15.patch 6. Im Verzeichnis /usr/src/linux-2.2.19 den Kernel konfigurieren und abspeichern, z.B mit cd linux-2.2.19 make menuconfig 7. Kernel übersetzen, z.B. mit make dep make clean make zImage Siehe dazu auch /usr/src/linux-2.2.19/README 8. arch/i386/boot/zImage nach ..../fli4l-xxx/img/kernel kopieren Sollen noch zusätzliche Kernel-Module installiert werden, dann ist noch notwendig: 9. Module übersetzen und installieren make modules make modules_install Die neuen Module müssen dann von /lib/modules/2.2.19/.... nach ..../fli4l-xxx/opt/lib/modules kopiert werden. Eventuell ist dann noch ..../fli4l-xxx/opt/opt.txt anzupassen, damit die gewünschten Kernel-Module auch auf die Diskette kommen. Wie dann die Bootdiskette zu erstellen ist, steht ja bereits in der Dokumentation unter ../doc/ und deshalb ist jetzt hier *SCHLUSS* ;-) ---------------------------------------------------------------------------- Frank Meyer mailto: frank@fli4l.de