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

Problem mit make update unter FW 5.0

Dieses Thema im Forum "D-Link" wurde erstellt von uli.e, 3 Nov. 2008.

  1. uli.e

    uli.e Neuer User

    Registriert seit:
    30 Apr. 2007
    Beiträge:
    22
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ort:
    Nähe Darmstadt
    Hi,

    ein make update mit der Firmware 5.0 bringt immer folgende Fehlermeldung und beim Update passiert nichts:
    Code:
    uli@uli-dlink:~/Work-Environment/Source-5.0/build_env$ make update
    [ -d horst_update/image ] || mkdir horst_update/image
    rm -f horst_update/image/update-fs horst_update/image/main-fs
    rm -f horst_update/image/opt-fs horst_update/image/zImage
    ln -sf ../../image/update-fs horst_update/image/update-fs
    ln -sf ../../image/main-fs horst_update/image/main-fs
    ln -sf ../../image/opt-fs horst_update/image/opt-fs
    ln -sf ../../image/zImage horst_update/image/zImage
    cd horst_update && perl update.pl
    Starting Update Daemon
    Tk::Error: Undefined subroutine &horstbox::trigger_update2 called at update.pl line 170.
     Tk callback for .button
     Tk::__ANON__ at /usr/lib/perl5/Tk.pm line 247
     Tk::Button::butUp at /usr/lib/perl5/Tk/Button.pm line 111
     <ButtonRelease-1>
     (command bound to event)
    
    Das selbe in Grün bei make update_cli:
    uli@uli-dlink:~/Work-Environment/Source-5.0/build_env$ make update_cli IP=192.168.1.1
    [ -d horst_update/image ] || mkdir horst_update/image
    rm -f horst_update/image/update-fs horst_update/image/main-fs
    rm -f horst_update/image/opt-fs horst_update/image/zImage
    ln -sf ../../image/update-fs horst_update/image/update-fs
    ln -sf ../../image/main-fs horst_update/image/main-fs
    ln -sf ../../image/opt-fs horst_update/image/opt-fs
    ln -sf ../../image/zImage horst_update/image/zImage
    cd horst_update && IP=192.168.1.1 PORT= perl update_cli.pl  ${IP:+--host=$IP} ${PORT:+--port=$PORT}
    Undefined subroutine &horstbox::trigger_update2 called at update_cli.pl line 56.
    A thread exited while 2 threads were running.
    make: *** [update_cli] Fehler 29
    
    Ein "make installer" funktioniert und generiert einen funktionierenden Windows-Installer. Nur ist der Weg umständlich da ich von der VM in der die original d-link Entwicklungsumgebung läuft in eine VM in der Windows läuft umkopieren muß.:spocht:

    Gibt es einen Weg, den Installer unter Linux ans Laufen zu bringen?

    Viele Grüße
    Uli
     
  2. uli.e

    uli.e Neuer User

    Registriert seit:
    30 Apr. 2007
    Beiträge:
    22
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ort:
    Nähe Darmstadt
    Ich habe mir mal auf die Schnelle die Scripte angeschaut, die können nicht funktionieren, :confused: da es zwar eine Funktion trigger_update aber keine Funktion trigger_update2 gibt. Soweit ich das erkennen kann, scheint trigger_update2 genauso aufgerufen zu werden, wie trigger_update. Wobei mir ein Aufruf von trigger_update in update_cli.pl sehr verdächtig aussieht.

    Einen Würgaround, um zumindest mal "make update" ist, ein Wrapper um trigger_update zu schreiben. Dazu fügt man in die Datei Work-Environment/Source-5.0/build_env/horst_update/horstbox.pm folgende Zeilen vor
    sub trigger_update ein:

    Code:
    sub trigger_update2($$$$)
    {
            my $host = shift;
            my $user = shift;
            my $pass = shift;
            my $port = shift;
    
            trigger_update ($host,  $user, $pass, $port);
    }
    
    Damit funktioniert zumindest ein make update. Für ein make update_cli übernehme ich keine Haftung.
     
  3. petershaus

    petershaus Neuer User

    Registriert seit:
    6 Dez. 2007
    Beiträge:
    18
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    #3 petershaus, 18 Nov. 2008
    Zuletzt bearbeitet: 19 Nov. 2008
    Die richtige (?) horstbox.pm steckt im SRC 4.1 tree.
    Im neuen Tree fehlt die richtige Funktion.
    Ich habe noch nicht getestet, ob die alte horstbox.pm dann funktioniert, oder ob man die fehlende Funktion einfach aus dem alten package übernehmen muss.
    Mit dem Ersatz, der hier vorgeschlagen wird, kann das update sicherlich nicht funktionieren.
    Code:
    ##
    # Triggers the update procedure at the horstbox.
    #
    #  Returns 0 on success.
    sub trigger_update
    {
            my $host = shift;
            my $user = shift;
            my $pass = shift;
            my $ip   = shift;
            my $port = shift;
            my $res  = 0;
    
            $res = &update_location( $host, $user, $pass, $ip, $port);
            if ($res) {
                    return $res;
            }
    
            $res = &nvram_set( $host, $user, $pass, "sys_firmware.update", time());
            return $res;
    }
    
    
    sub trigger_update2
    {
            my $host = shift;
            my $user = shift;
            my $pass = shift;
            my $port = shift;
            my $res  = 0;
            my $url  = "https://${host}/update";
    
            my $dsl  = &get_dsl_firmware();
            my $ver  = &get_dsl_version($dsl);
    
            my $ua  = new LWP::UserAgent( -timeout => 5);
            my $req = new HTTP::Request POST => $url;
    
            $req->authorization_basic($user, $pass);
            $req->content_type('application/x-www-form-urlencoded');
    
            # only update, if file is there
            if ($dsl) {
                    $req->content("port=$port&dsl_version=$ver");
            } else {
                    $req->content("port=$port");
            }
    
            $res = $ua->request($req);
    
            if ( !($res->is_success)) {
                    # 1 -> Error
                    # print "Error for $name, $value\n";
                    return 1;
            }
    
            if ( $res->as_string !~ /OK[ \t\n]*$/ ) {
                    return 2;
            }
    
            return 0;
    }
    
    
     
  4. petershaus

    petershaus Neuer User

    Registriert seit:
    6 Dez. 2007
    Beiträge:
    18
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ich habe es ausprobiert. Nachdem ich die horstbox.pm aus dem 4.1 tree genommen habe konnte ich meine selbstgebaute Firmware mit dem Updateprogramm installieren