Problem mit make update unter FW 5.0

uli.e

Neuer User
Mitglied seit
30 Apr 2007
Beiträge
22
Punkte für Reaktionen
0
Punkte
0
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
 
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.
 
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;
}
 
Zuletzt bearbeitet:
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
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.