Workaround für Bootprobleme (Segmentation fault) unter FLI4L 2.0.8

Hinweis: Gilt nicht für FLI4L 3.0.0 oder neuer!

Wenn unter FLI4L 2.0.8 sehr viele OPTs eingesetzt werden, kann es passieren, dass eines oder mehrere Pakete bereits beim Bootvorgang nicht richtig gestartet werden. Statt dessen wird in der Konsole ein „segmentation fault“ ausgegeben. Der Grund dafür ist, dass die Shell von FLI4L eigentlich nicht für umfangreiche Installationen ausgelegt ist.

Um dieses Problem zu umgehen, genügt es oft, die Datei /opt/etc/rc.local so zu ändern, dass die Start-Scripte der Zusatzpakete in /etc/rc.d nacheinander und einzeln ausgeführt werden. Die Idee dazu stammt von Michael Sauer und ist auch nur als Notlösung zu sehen – mitunter gibt es trotzdem Probleme (oder auch ganz andere Effekte, die vorher nicht aufgetreten sind). Im Zweifelsfall hilft nur eine komplette Neuinstallation, bei der man erstmal nur die absolut notwendige Minimalinstallation einrichtet und dann schrittweise die einzelnen Pakete dazunimmt, die man einsetzen möchte. Man sollte bei allen Schwierigkeiten nicht vergessen, dass FLI4L eigentlich nur als schlanker Router gedacht ist und nicht als „Universal-Kommunikationsserver“.

Da ich schon Nachfragen deswegen hatte – rc_start.sh wird innerhalb des Scripts automatisch erzeugt!

Für den Fall, dass jemand nicht genau weiss, wie er diesen Patch einbringen soll, hier noch eine kurze Anleitung auf Anregung von Juergen Foterek, der mich darauf angesprochen hat:

Die beschriebenen Änderungenen sind mit einem Texteditor auf dem Quellrechner vorzunehmen, von dem aus man die FLI4L-Bootdiskette erstellt bzw. das Update via imonc ausführt.

Die Datei rc.local findet sich im Verzeichnis opt/etc von FLI4L. Wenn man FLI4L-Dateien z.B. nach c:\fli4l gelegt hat, ist Datei rc.local in c:\fli4l\opt\etc zu finden. Man öffnet die Datei und sucht sich die Stelle, die wie unten beschrieben losgeht und ersetzt den gesamten Abschnitt bis zu der Zeile mit

chmod 400 /etc/shadow

durch den unten gezeigten Text. Dann speichert man das Ganze und führt ein Update seiner FLI4L-Installation aus.

#----------------------------------------------------------------------------
# optional packages: /etc/rc.d/rc.PACKAGE
# examples: rc.lcd, rc.modem, rc.telnetd, rc.ftpd
#----------------------------------------------------------------------------

for j in /etc/rc.d/rc*.*
do
    if [ -f $j ]
    then
    /usr/local/bin/dtou $j                # strip CRs
#ms . $j
#ms neu
    rc_start=/etc/rc_start.sh
    (echo "#! /bin/sh"
    echo "j2=$j"
    echo 'colecho ">>Script: $j2>>" br x br'
    echo ''
    echo '. /etc/rc.cfg'                   # Variablen einfuegen
    echo '. $j2'                           # Orginal rc script
    echo ''
    echo 'colecho "<<Script: $j2<<" br x br'
    ) >$rc_start

    chmod +x $rc_start
    $rc_start
    sleep 1
    fi
done
rm $rc_start                             #Hilfsscript löschen
#/ms

chmod 400 /etc/shadow