.titleBar { margin-bottom: 5px!important; }

syntax error in custom script

Dieses Thema im Forum "Freetz" wurde erstellt von r_kleineisel, 6 Okt. 2008.

  1. r_kleineisel

    r_kleineisel Neuer User

    Registriert seit:
    24 Jan. 2007
    Beiträge:
    4
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Hallo,

    ich versuche Freetz (http://svn.freetz.org/branches/freetz-stable-1.0, Revision 2636) für einen W900V zu kompilieren.

    Ich bekomme immer die Fehlermeldung:

    2008-10-06 17:41:20 (3.65 MB/s) - `fw_Speedport_W900V_v34.04.57.image' saved [5201920/5201920]

    done.

    STEP 1: UNPACK
    unpacking firmware image
    splitting kernel image
    unpacking filesystem image
    unpacking var.tar
    unpacking tk image
    done.

    STEP 2: MODIFY
    applying patches
    installing mod base
    replacing busybox
    installing packages
    invoking custom script
    Badly placed ()'s.
    ERROR: syntax error in custom script
    make: *** [firmware-nocompile] Error 1

    Außer dem "Alien Hardware Type" habe ich keine Pakete oder Optionen verändert.

    Hat jemand eine Ahnung was das ist?
     
  2. RalfFriedl

    RalfFriedl IPPF-Urgestein

    Registriert seit:
    22 Apr. 2007
    Beiträge:
    12,343
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Hast Du etwas geändert an der custom Datei?

    Was steht bei Dir in der Datei fwmod_custom ?
     
  3. Silent-Tears

    Silent-Tears IPPF-Promi

    Registriert seit:
    3 Aug. 2007
    Beiträge:
    7,456
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ort:
    BI
    Häng mal bitte deine .config-Datei an. Und am besten die fwmod_custom dazu
     
  4. r_kleineisel

    r_kleineisel Neuer User

    Registriert seit:
    24 Jan. 2007
    Beiträge:
    4
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    config und fwmod_custom

    sind anbei. Geändert habe ich nichts, nur "svn co", "make menuconfig" und den Hardware type gesetzt.
     

    Anhänge:

  5. RalfFriedl

    RalfFriedl IPPF-Urgestein

    Registriert seit:
    22 Apr. 2007
    Beiträge:
    12,343
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Hast Du ein ungewöhnliches System, evtl. MAC oder alte oder andere Shell?
    Gib mal folgende Kommandos ein:
    Code:
    echo $SHELL
    bash --version
    bash -n fwmod_custom
    $SHELL -n fwmod_custom
    
     
  6. r_kleineisel

    r_kleineisel Neuer User

    Registriert seit:
    24 Jan. 2007
    Beiträge:
    4
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    #6 r_kleineisel, 6 Okt. 2008
    Zuletzt bearbeitet: 6 Okt. 2008
    Eigentlich nicht, aktuelles Fedora 9 Linux.

    Code:
    $echo $SHELL
    /bin/tcsh
    $bash --version
    GNU bash, version 3.2.33(1)-release (i386-redhat-linux-gnu)
    Copyright (C) 2007 Free Software Foundation, Inc.
    $bash -n fwmod_custom
    $$SHELL -n fwmod_custom
    Badly placed ()'s.
    
    Wenn ich erst eine bash aufrufe und dann darin "make", bekomme ich den Fehler aber wieder. Anschliießend bin ich wieder in der tcsh. Seltsam.

    Code:
    $bash
    $ make
    STEP 1: UNPACK
    unpacking firmware image
    splitting kernel image
    unpacking filesystem image
    unpacking var.tar
    unpacking tk image
    done.
    
    STEP 2: MODIFY
    applying patches
    installing mod base
    replacing busybox
    installing packages
    invoking custom script
    Badly placed ()'s.
    ERROR: syntax error in custom script
    make: *** [firmware-nocompile] Error 1
    $ echo $SHELL
    /bin/tcsh
    
     
  7. McNetic

    McNetic Mitglied

    Registriert seit:
    7 Feb. 2007
    Beiträge:
    672
    Zustimmungen:
    0
    Punkte für Erfolge:
    16
    Ort:
    Aachen
    #7 McNetic, 7 Okt. 2008
    Zuletzt bearbeitet: 7 Okt. 2008
    Anscheinend hat unser Build-Prozess noch Schwächen im Bezug auf die Auswahl/Nutzung der korrekten Shell. Es wird auf jeden Fall eine Bash oder zumindest sehr Bash-kompatible Shell vorrausgesetzt. Ich denke aber, daß, wenn die Bash im System vorhanden ist, es auch unter einer anderen Shell funktionieren sollte.

    Um das Problem zu umgehen, könntest Du jetzt noch versuchen, bei Deinem User als Login Shell die Bash einzutragen (bei Bedarf nach googlen, hat was mit /etc/passwd zu tun), aus- und wieder neu einzuloggen, und dann nochmal zu probieren.

    EDIT:
    Wenn das nicht funktioniert, könntest Du mal bitte nachsehen, worauf /bin/sh zeigt (ls -l /bin/sh). Wenn das nicht bash ist, könntest Du das mal ändern (als root: rm /bin/sh; ln -s bash /bin/sh;) und dann nochmal probieren.

    Wenn alles nix hilft, dann liegt es wohl doch nicht an der Shell, denke ich. Wenn eine der beiden Möglichkeiten hilft, könntest Du mal ein Ticket im Trac diesbezüglich aufmachen, denn dann ist es ein Bug, der behoben werden sollte.
     
  8. r_kleineisel

    r_kleineisel Neuer User

    Registriert seit:
    24 Jan. 2007
    Beiträge:
    4
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Wenn ich meine Login-Shell (im /etc/passwd) auf bash stelle ist der Fehler weg und Freetz läuft durch. Ich verstehe zwar nicht, warum man keine tcsh verwenden kann, aber das ist zumindest ein Workaround.

    /bin/sh zeigt auf bash.
     
  9. olistudent

    olistudent IPPF-Urgestein

    Registriert seit:
    19 Okt. 2004
    Beiträge:
    14,756
    Zustimmungen:
    1
    Punkte für Erfolge:
    0
    Beruf:
    Softwareentwickler
    Ort:
    Kaiserslautern
    Wir haben doch im Makefile schon ein Variable SHELL und in den fwmod's schon /bin/bash im shebang!?

    MfG Oliver
     
  10. McNetic

    McNetic Mitglied

    Registriert seit:
    7 Feb. 2007
    Beiträge:
    672
    Zustimmungen:
    0
    Punkte für Erfolge:
    16
    Ort:
    Aachen
    Hehe. Genau das ist das Problem. Im Makefile wird SHELL definiert; im fwmod aber nicht. Dort wird es trotzdem genutzt, um fwmod_custom aufzurufen. Dadurch wiederum wird die Shebang-Zeile ausser Kraft gesetzt. Ich habe das im aktuellen Trunk mal so behoben, daß ich oben in fwmod auch die Shell-Variable setze; ob das so ideal ist, weiss ich noch nicht.
     
  11. olistudent

    olistudent IPPF-Urgestein

    Registriert seit:
    19 Okt. 2004
    Beiträge:
    14,756
    Zustimmungen:
    1
    Punkte für Erfolge:
    0
    Beruf:
    Softwareentwickler
    Ort:
    Kaiserslautern
    fwmod wird doch vom Makefile als Kindprozess gestartet. Müsste die Variable da nicht weitergegeben werden?

    MfG Oliver
     
  12. McNetic

    McNetic Mitglied

    Registriert seit:
    7 Feb. 2007
    Beiträge:
    672
    Zustimmungen:
    0
    Punkte für Erfolge:
    16
    Ort:
    Aachen
    Nein, sie wird nicht exportiert. Das wär noch ne (vielleicht bessere) Alternative.
     
  13. RalfFriedl

    RalfFriedl IPPF-Urgestein

    Registriert seit:
    22 Apr. 2007
    Beiträge:
    12,343
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Das ist nicht ganz richtig. $SHELL wird nur verwendet, um den Syntax-Check von fwmod_custom durchzuführen ($SHELL -n "${BASE_DIR}/fwmod_custom"). Für den Aufruf danach wird fwmod_custom normal aufgerufen, und folgluch wird dafür auch bash verwendet, bzw. würde verwendet werden, wenn der Syntax-Check mit der Default-Shell durchgehen würde.

    Die bessere Lösung ist, bei der Syntax-Prüfung $SHELL durch bash zu ersetzen: "bash -n "${BASE_DIR}/fwmod_custom". Damit ist klar, daß das Skript immer mit bash aufgerufen werden soll. Ansonsten entsteht der Eindruck "Welche Shell auch immer der Benutzer eingestellt hat, nur daß viel weiter vorne im Skript SHELL fest auf bash eingestellt wurde". Im Endergebnis ist es aber das gleiche.

    Eine andere Frage ist, ob der Syntax-Check überhaupt notwendig ist. Wenn es Syntax-Fehler im custom-Skript gibt, wird dieses mit Fehler abbrechen. Wenn es logische Fehler enthält, werden diese vom Syntax-Check nicht erkannt, und die logischen Fehler sind meistens die schlimmeren.

    @r_kleineisel
    Abgesehen von den bereits genannten Änderungen hätte es auch gereicht, statt eine andere Shell in /etc/passwd einzutragen, die SHELL nur für den aktuellen Prozeß umzustellen:
    Code:
    SHELL=/bin/bash make
    oder
    export SHELL=/bin/bash
    make
    
     
  14. McNetic

    McNetic Mitglied

    Registriert seit:
    7 Feb. 2007
    Beiträge:
    672
    Zustimmungen:
    0
    Punkte für Erfolge:
    16
    Ort:
    Aachen
    Klar, man kann auch fest 'bash' eintragen. Die Variablen sind aber ja da, um das Ganze parametriesierbar zu machen, darum dachte ich, es wäre sinnvoller, das ganz oben zu definieren, wie man das ja üblicherweise mit Konstanten macht.

    Notwendig ist er nicht; es gibt für den unbedarften User aber eine bessere Fehlermeldung, weil gleich klar ist, warum der Prozess nicht durchläuft.
     
  15. RalfFriedl

    RalfFriedl IPPF-Urgestein

    Registriert seit:
    22 Apr. 2007
    Beiträge:
    12,343
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Eben, aber in diesem Fall wird nur der Eindruck erweckt, es wäre parametrisierbar, während es das eben nicht ist, weil nur bash richtig ist.
     
  16. McNetic

    McNetic Mitglied

    Registriert seit:
    7 Feb. 2007
    Beiträge:
    672
    Zustimmungen:
    0
    Punkte für Erfolge:
    16
    Ort:
    Aachen
    Ja, das betrifft dann aber auch andere Stellen, wo es so aufgerufen wird. Insbesondere ist die vorherige Variante (die ja auch die Variable SHELL benutzte) gleichwertig. Letztendlich ist mir auch egal, wie es auf Dauer gelöst wird; so wie es war, war es eben fehlerhaft.