[gelöst] vnstat mit Freetz

sf3978

IPPF-Promi
Mitglied seit
2 Dez 2007
Beiträge
8,014
Punkte für Reaktionen
28
Punkte
48
Ich versuche mit Freetz vnstat für die FritzBox zu kompilieren. Das binary bekomme ich auch ohne Probleme:
Code:
# file vnstat
vnstat: ELF 32-bit LSB executable, MIPS, MIPS32 version 1 (SYSV), dynamically linked (uses shared libs), not stripped
Nur beim Start von vnstat auf der Box, bekomme ich folgende Mitteilung:
Code:
# ./vnstat -h
./vnstat: can't load library 'wadd'
Als Ursache habe ich die Funktion "ibwadd" in der source code Datei "cfg.c" festgestellt. Denn wenn ich die Funktion kommentiere, bekomme ich diese Meldung nicht:
Code:
/* int ib[B][COLOR="Red"]wadd[/COLOR][/B](const char *iface, int limit)
{
	ibwnode *p = malloc(sizeof(ibwnode));

	if (p == NULL) {
		return 0;
	}

	p->next = ifacebw;
	ifacebw = p;
	strncpy(p->interface, iface, 32);
	p->limit = limit;

	return 1;
} */
Im vnstat-Forum konnte man mir nicht helfen:
The error message you have isn't from vnStat directly which would suggest the problem might be with compiling the binary correctly.
Weiss jemand was und warum hier schief läuft? Danke.
Hier noch das geänderte Makefile:
Code:
CC=gcc
CFLAGS=-Wall -g

ARCH=mipsel-linux

LDLIBS = -lm
OBJS = vnstat.o ifinfo.o dbxml.o dbshow.o dbaccess.o dbmerge.o common.o misc.o cfg.o traffic.o
DOBJS = vnstatd.o ifinfo.o dbaccess.o dbcache.o common.o misc.o cfg.o
IOBJS = vnstati.o image.o dbaccess.o dbmerge.o common.o misc.o cfg.o

default: vnstat

all: vnstat vnstatd vnstati

[B]vnstat: $(OBJS)
	$(CC) ${CFLAGS} -D${ARCH} $(OBJS) $(LDLIBS) -o vnstat[/B]
vnstatd: $(DOBJS)
	$(CC) $(LDFLAGS) $(DOBJS) $(LDLIBS) -o vnstatd
vnstati: $(IOBJS)
	$(CC) $(LDFLAGS) $(IOBJS) $(LDLIBS) -lgd -o vnstati

vnstat.o: vnstat.c vnstat.h common.h ifinfo.h traffic.h dbxml.h dbshow.h dbaccess.h dbmerge.h misc.h cfg.h
vnstatd.o: vnstatd.c vnstatd.h common.h ifinfo.h dbaccess.h dbcache.h misc.h cfg.h
vnstati.o: vnstati.c vnstati.h common.h image.h cfg.h dbaccess.h dbmerge.h

ifinfo.o: ifinfo.c ifinfo.h common.h dbaccess.h misc.h cfg.h
traffic.o: traffic.c traffic.h common.h ifinfo.h misc.h
dbxml.o: dbxml.c dbxml.h common.h
dbshow.o: dbshow.c dbshow.h misc.h common.h
dbaccess.o: dbaccess.c dbaccess.h common.h
dbmerge.o: dbmerge.c dbmerge.h dbaccess.h common.h
dbcache.o: dbcache.c dbcache.h dbaccess.h common.h ifinfo.h
common.o: common.c common.h
misc.o: misc.c misc.h common.h
cfg.o: cfg.c cfg.h common.h
image.o: image.c image.h vnstati.h common.h misc.h

clean:
	rm -f *.o *~ core *.i vnstat vnstatd vnstati
 
Zuletzt bearbeitet:
ldd zeigt Folgendes an:
Code:
# ldd vnstat
        wadd => not found
        e_dp => not found
        df => not found
        ld-uClibc.so.0 => /lib/ld-uClibc.so.0 (0x2aaa8000)
Im Anhang das binary.
 

Anhänge

  • vnstat.tar
    109 KB · Aufrufe: 8
Irgend etwas stimmt nicht mit dem erstellten Programm. 'wadd' und 'e_dp' sind nicht einzelne Strings im Programm, sondern das Ende von 'ibwadd' und '__make_dp'.

Versuche, es noch einmal neu zu erstellen. Wenn es nicht will, dann erstelle die Toolchain neu.
 
Mit der neu erstellten Toolchain geht es auch nicht. ldd zeigt jetzt weitere seltsame Abhängigkeiten an:
Code:
# ldd vnstat
        faultcfg => not found
        __pack_f => not found
        mp_parts_f => not found
        ld-uClibc.so.0 => /lib/ld-uClibc.so.0 (0x2aaa8000)

EDIT:
ldd vnstat mit OpenSuSE:
Code:
:~/vnstat-1.9/src> ldd vnstat
        linux-vdso.so.1 =>  (0x00007ffff33ff000)
        libm.so.6 => /lib64/libm.so.6 (0x00007ff86f021000)
        libc.so.6 => /lib64/libc.so.6 (0x00007ff86ecc8000)
        /lib64/ld-linux-x86-64.so.2 (0x00007ff86f277000)

ldd vnstat mit FreeBSD:
Code:
$ ldd /usr/bin/vnstat
/usr/bin/vnstat:
        libm.so.5 => /lib/libm.so.5 (0x33c9d000)
        libc.so.7 => /lib/libc.so.7 (0x33cb2000)/var/media/ftp/uStor02

Kann evtl. die Toolchain aus Freetz, den source code von vnstat nicht richtig interpretieren/verstehn?
 
Zuletzt bearbeitet:
Kann evtl. die Toolchain aus Freetz, den source code von vnstat nicht richtig interpretieren/verstehn?

Du hast da oben den gleichen Effekt wie vorher: irgendwelche wahllosen Teilstrings werden als zu ladende Libraries interpretiert.
Ich glaube nicht, daß die Freetz Toolchain ein Problem hat, schließlich können auch alle anderen Programme erstellt werden. Und es ist eher nicht eine Frage des SOurce-Codes, sondern ein Problem des Linkers.

Hier noch das geänderte Makefile:
Code:
[B]ARCH=mipsel-linux[/B]
...
vnstat: $(OBJS)
	$(CC) ${CFLAGS} -[B]D${ARCH}[/B] $(OBJS) $(LDLIBS) -o vnstat

Diese Konstruktion finde ich seltsam. Hast Du das selbst so geändert? Was passiert, wenn Du bei ARCH nur mipsel herein schreibst, oder auf jeden Fall etwas ohne Minus-Zeichen?
 
Ja, das Makefile habe ich selbst geändert. Aber diese Änderungen habe ich auch bei "noip" und "portsentry", und dort habe ich diese Probleme nicht.
Code:
ARCH=mipsel-linux
${TGT}: Makefile ${TGT}.c 
	${CC} ${CFLAGS} -D${ARCH} -DPREFIX=\"${PREFIX}\" ${TGT}.c -o ${TGT} ${LIBS}
Code:
ARCH = mipsel-linux

${TGT}: Makefile ${TGT}.c 
	${CC} ${CFLAGS} -D${ARCH} -o ./${TGT} ./${TGT}.c ./${TGT}_io.c ./${TGT}_util.c
"ARCH=mipsel-linux" kann man auch weglassen. Ändert aber nichts:
Code:
vnstat: $(OBJS)
	$(CC) ${CFLAGS} $(OBJS) $(LDLIBS) -o vnstat
Code:
:~/myfreetz/freetz3809a/freetz-trunk> file packages/vnstat-1.9/root/usr/bin/vnstat
packages/vnstat-1.9/root/usr/bin/vnstat: ELF 32-bit LSB executable, MIPS, MIPS32 version 1 (SYSV), dynamically linked (uses shared libs), [B]stripped[/B]
Statt "not stripped" jetzt "stripped".

Code:
# ldd vnstat
        faultcfg => not found
        __pack_f => not found
        mp_parts_f => not found
        ld-uClibc.so.0 => /lib/ld-uClibc.so.0 (0x2aaa8000)
 
Im Anhang die vnstat-Dateien:
 

Anhänge

  • vnstat_dateien.tar
    98.7 KB · Aufrufe: 9
  • vnstat.mk.txt
    780 Bytes · Aufrufe: 8
  • Config.in.txt
    448 Bytes · Aufrufe: 9
  • Makefile.in.txt
    65 Bytes · Aufrufe: 8
Jetzt nicht im Freetz-Mantel, aber ...;-):

Code:
joerg@joerg-ubuntu:~/freetz-trunk/source/vnstat-1.9$ make CC="mipsel-linux-gcc" CXX=mipsel-linux-g++  AR=mipsel-linux-uclibc-ar AS=mipsel-linux-uclibc-as LD=mipsel-linux-uclibc-ld  CFLAGS="-Os -static -pipe -march=4kc -Wa,--trap" ARCH=mips  
make -C src
make[1]: Betrete Verzeichnis '/home/joerg/freetz-trunk/source/vnstat-1.9/src'
[...snipp...]
make[1]: Verlasse Verzeichnis '/home/joerg/freetz-trunk/source/vnstat-1.9/src'
joerg@joerg-ubuntu:~/freetz-trunk/source/vnstat-1.9$ mipsel-linux-ldd src/vnstat
/lib/libgcc_s.so.1: not an ELF file.
	libm.so.0 => not found (0x00000000)
	libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x00000000)
	libc.so.0 => not found (0x00000000)
	/lib/ld-uClibc.so.0 => /lib/ld-uClibc.so.0 (0x00000000)
joerg@joerg-ubuntu:~/freetz-trunk/source/vnstat-1.9$ make clean
make -C src clean
make[1]: Betrete Verzeichnis '/home/joerg/freetz-trunk/source/vnstat-1.9/src'
rm -f *.o *~ core *.i vnstat vnstatd vnstati
make[1]: Verlasse Verzeichnis '/home/joerg/freetz-trunk/source/vnstat-1.9/src'
joerg@joerg-ubuntu:~/freetz-trunk/source/vnstat-1.9$ make CC="mipsel-linux-gcc" CXX=mipsel-linux-g++  AR=mipsel-linux-uclibc-ar AS=mipsel-linux-uclibc-as LD=mipsel-linux-uclibc-ld  CFLAGS="-Os -static -pipe -march=4kc -Wa,--trap" ARCH=mips  LDFLAGS=-static 
make -C src
make[1]: Betrete Verzeichnis '/home/joerg/freetz-trunk/source/vnstat-1.9/src'
[...snipp...]
make[1]: Verlasse Verzeichnis '/home/joerg/freetz-trunk/source/vnstat-1.9/src'
joerg@joerg-ubuntu:~/freetz-trunk/source/vnstat-1.9$ mipsel-linux-ldd src/vnstat
	not a dynamic executable
joerg@joerg-ubuntu:~/freetz-trunk/source/vnstat-1.9$

Jörg


EDIT: Mal gerade direkt mit den von dir geposteten Dateien getestet (make vnstat-precompiled) und das Binary per scp auf die Box kopiert. Nur Download, .txt entfernt und die make/config.in um vnstat ergänzt. Keine weiteren Änderungen.
Code:
joerg@joerg-ubuntu:~/freetz-trunk$ mipsel-linux-ldd packages/vnstat-1.9/root/usr/bin/vnstat 
/lib/libgcc_s.so.1: not an ELF file.
	libm.so.0 => not found (0x00000000)
	libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x00000000)
	libc.so.0 => not found (0x00000000)
	/lib/ld-uClibc.so.0 => /lib/ld-uClibc.so.0 (0x00000000)
joerg@joerg-ubuntu:~/freetz-trunk$ scp packages/vnstat-1.9/root/usr/bin/vnstat [email protected]:/tmp
[email protected]'s password: 
vnstat                                                                                                                                               100%  107KB 106.9KB/s   00:00    
joerg@joerg-ubuntu:~/freetz-trunk$

Wo ist denn dein Problem, du hast doch perfekt gearbeitet ;-):
Code:
/var/tmp # ./vnstat 
Error: Unable to open database directory "/var/lib/vnstat".
Make sure it exists and is at least read enabled for current user.
Exiting...
/var/tmp # ./vnstat --help
 vnStat 1.9 by Teemu Toivola <tst at iki dot fi>

         -q,  --query          query database
         -h,  --hours          show hours
         -d,  --days           show days
         -m,  --months         show months
         -w,  --weeks          show weeks
         -t,  --top10          show top10
         -s,  --short          use short output
         -u,  --update         update database
         -i,  --iface          select interface (default: eth0)
         -?,  --help           short help
         -v,  --version        show version
         -tr, --traffic        calculate traffic
         -ru, --rateunit       swap configured rate unit
         -l,  --live           show transfer rate in real time

See also "--longhelp" for complete options list and "man vnstat".
/var/tmp # 
/var/tmp # ./vnstat -l
Monitoring eth0...    (press CTRL-C to stop)

   rx:        0 kbit/s     1 p/s          tx:        4 kbit/s     1 p/s


 eth0  /  traffic statistics

                           rx         |       tx
--------------------------------------+------------------------
  bytes                        1 KiB  |           5 KiB
--------------------------------------+------------------------
          max               0 kbit/s  |        4 kbit/s
      average            0.29 kbit/s  |     1.43 kbit/s
          min               0 kbit/s  |        0 kbit/s
--------------------------------------+------------------------
  packets                         20  |              18
--------------------------------------+------------------------
          max                  1 p/s  |           1 p/s
      average                  0 p/s  |           0 p/s
          min                  0 p/s  |           0 p/s
--------------------------------------+------------------------
  time                    28 seconds

/var/tmp #
 
Zuletzt bearbeitet:
Jetzt nicht im Freetz-Mantel, aber ...;-):
... und im Freetz-Mantel?
Wo ist denn dein Problem, ...
Mein Problem ist, dass es bei mir nicht funktioniert.
Muss ma mit der KNOPPIX-Live-CD probieren.

EDIT:
Mit:
Code:
:~/myfreetz/freetz3920/freetz-trunk> make CC="mipsel-linux-gcc" CXX=mipsel-linux-g++  AR=mipsel-linux-uclibc-ar AS=mipsel-linux-uclibc-as LD=mipsel-linux-uclibc-ld  CFLAGS="-Os -static -pipe -march=4kc -Wa,--trap" ARCH=mips  LDFLAGS="-lm" source/vnstat-1.9/src/vnstat
bekomme ich "nur" noch diese Meldung:
Code:
/var/media/ftp/uStor02 # ./vnstat --help
./vnstat: can't load library ''

Code:
:~/myfreetz/freetz3920/freetz-trunk> toolchain/build/gcc-4.2.4-uClibc-0.9.29/mipsel-linux-uclibc/bin/mipsel-linux-ldd source/vnstat-1.9/src/vnstat
checking sub-depends for 'not found'
checking sub-depends for '/lib/libgcc_s.so.1'
checking sub-depends for 'not found'
checking sub-depends for '/lib/libc.so.6'
        libm.so.0 => not found (0x00000000)
        libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x00000000)
        libc.so.0 => not found (0x00000000)
        libc.so.6 => /lib/libc.so.6 (0x00000000)
        /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x00000000)

EDIT 2:
Das binary das ich mit der KNOPPIX-Live-CD erstellt habe funktioniert auch nicht. Dann kann es ja nur an meiner FritzBox liegen.

EDIT 3:
@MaxMuster
Könntest Du bitte das binary das bei dir funktioniert hier anhängen, dann kann ich es auf meiner Box testen. Danke.
 
Zuletzt bearbeitet:
... und im Freetz-Mantel?
Den hatte ich im Edit nachgeliefert ;-), vorher hatte ich es einfach so gebaut.
Hier erstmal das dynamisch gelinkte Programm, falls benötigt kann ich später noch das statisch gelinkte hinzufügen.

Jörg

EDIT statisches Binary angehängt
 

Anhänge

  • vnstat.zip
    40.5 KB · Aufrufe: 3
  • vnstat_static.gz
    73.8 KB · Aufrufe: 6
Zuletzt bearbeitet:
Danke für die binaries. Leider funktionieren auch diese nicht auf meinen FritzBoxen:
Code:
# ./vnstat
./vnstat: can't load library 'ultcfg'

Code:
# ./vnstat_static --help
Bus error

Ich denke es liegt an der FB 7170.
 
Wahrscheinlich eine blöde Frage, aber: Hast du es auch mal direkt auf die Box ins /tmp/ kopiert? Nicht, dass es am USB-Stick oder so liegt.

Jörg
 
Ja, auf beiden Boxen probiert, im tmp-Verzeichnis und vom USB-Stick.
 
... wie, du hast gleich zwei Boxen mit dem gleichen Verhalten? Das ist aber dann echt merkwürdig....

Jörg
 
Ja (siehe auch Signatur), eine am Kabelmodem und eine am DSL-Anschluss. Bei beiden identische Ausgabe bzw. Verhalten mit vnstat.
 
Das Testen aus dem /tmp/ hast du aber komplett ohne die Nutzung des USB gemacht? Also direkt per ftp/scp/rudishell... auf die Box gemacht???
Wenn sonst alles läuft, verstehe ich nicht, was gerade an diesem Binary anders sein soll.
Ich habe es auf einer Eumex (06.49) und auf einer 7270 (04.76) getestet (zumindest das statische).

Jörg
 
Das Testen aus dem /tmp/ hast du aber komplett ohne die Nutzung des USB gemacht? Also direkt per ftp/scp/rudishell... auf die Box gemacht???
Ja, einmal mit sftp auf die Box und einmal mit vsftpd auf den USB-Stick.
Ich werde mal versuchen das statische mit einem Freetz-Image auf die Box zu bekommen.
 
Im Anhang die vnstat-Dateien:

Bei mir werden die *.o Dateien aus dem obigen Artikel auch problemlos zusammengebunden:
Code:
$ mipsel-linux-gcc -o vnstat -Wall -g -Dmipsel-linux vnstat.o ifinfo.o dbxml.o dbshow.o dbaccess.o dbmerge.o common.o misc.o cfg.o traffic.o -lm
$ readelf -d vnstat

Dynamic section at offset 0x160 contains 24 entries:
  Tag        Type                         Name/Value
 0x00000001 (NEEDED)                     Shared library: [libm.so.0]
 0x00000001 (NEEDED)                     Shared library: [libgcc_s.so.1]
 0x00000001 (NEEDED)                     Shared library: [libc.so.0]
...
 
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.