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:
[email protected]:~/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:
[email protected]:~/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
 

uli.e

Neuer User
Mitglied seit
30 Apr 2007
Beiträge
22
Punkte für Reaktionen
0
Punkte
0
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.
 

petershaus

Neuer User
Mitglied seit
6 Dez 2007
Beiträge
18
Punkte für Reaktionen
0
Punkte
0
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:

petershaus

Neuer User
Mitglied seit
6 Dez 2007
Beiträge
18
Punkte für Reaktionen
0
Punkte
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
 

3CX PBX - GRATIS
Linux / Win / Cloud

Statistik des Forums

Themen
232,355
Beiträge
2,021,493
Mitglieder
349,917
Neuestes Mitglied
pm3000