SoftEther VPN Server auf die Fritz Box installieren (sourcecode liegt vor)

Da machst Du jetzt genau das, wovon ich Dir eigentlich abraten würde:

- Angabe von "libname.a" beim Linken ===> statisches Einbinden der entsprechenden Library

- Angabe von "-l<libname>" (ohne das "lib" am Beginn, also "-lssl" für libssl.so, -ldl für libdl.so, usw.) beim Linken ===> Einbinden des Codes für den "dynamic loader", der erst zur Laufzeit die entsprechenden Bibliotheken lädt und die Abhängigkeiten auflöst

(vereinfachte Darstellung, für Deinen Fall aber ausreichend)
 
...
Ich würde also nicht komplett statisch linken und tatsächlich nur die libreadline.a - wie von sd3978 geschrieben - einbinden, da Du die Aufrufe von dlopen/dlsym zur Laufzeit aus der libcrypto.so nicht kontrollieren kannst.

okay, ich dachte genau so wäre dann der richtige weg...

...
...und tatsächlich nur die libreadline.a - wie von sd3978 geschrieben - einbinden...

wie geht genau das???
Ich weiß ich nerv euch, aber ich mag gerne was lernen zumal ich glaube, dass "wir" nicht weit vom ziel entfernt sind...

Angabe von "-l<libname>" (ohne das "lib" am Beginn, also "-lssl" für libssl.so, -ldl für libdl.so, usw.) beim Linken ===> Einbinden des Codes für den "dynamic loader", der erst zur Laufzeit die entsprechenden Bibliotheken lädt und die Abhängigkeiten auflöst

aber das ist doch genau das Problem: die FBF hat die libs doch gar nicht, also muss ich sie irgendwie "mitschleppen"... deshalb dacht ich statisch verlinken...

Oder gibts ne andere Möglichkeit die libs mitzunehmen, sodass ./vpnserver diese bei bedarf auch auf der FBF findet?
 
Zuletzt bearbeitet:
wie geht genau das???
Na gib doch einfach nur die "libreadline.a" (die ist normalerweise nicht als DL auf der Box vorhanden) auf der Kommandozeile an und laß den Rest per "-l" linken ... welche Libs auf der Box vorhanden sind und welche nicht, zeigt Dir ja ein "ls -la /lib" auf der Box problemlos an. Ob z.B. die "libm.so" vorhanden ist oder nicht, weiß ich nicht ... hängt u.a. auch davon ab, was Du da für eine Box hast und welche Firmware-Version Du verwendest.

Wie ein Lib-Name aussieht, habe ich in #21 geschrieben ... welche auf der Box sind, kriegst Du per Listing heraus und alles, was nicht ohnehin schon auf der Box ist, kannst Du entweder statisch linken oder Du mußt die entsprechende DL (also das so-File für diese Lib) zusätzlich auf die Box kopieren und über "LD_LIBRARY_PATH" eine passende Suchreihenfolge nach diesen Bibliotheken für den Aufruf von "vpnserver" konfigurieren.

EDIT: DL meint hier nicht "Download", sondern "dynamic library", also eine Bibliothek mit Funktionen, die von mehreren Programmen gleichzeitig benutzt werden kann und dann auch nur einmal für alle Programme in den Speicher geladen werden muß. Was Vor- und Nachteile dynamischer Bibliotheken sind, findet man bei entsprechender Suche im Internet.
 
Zuletzt bearbeitet:
Okay, jetzt hab ich glaub ich kapische :)

du meckerst mit mir, weil ich einfach alles statisch verlinkt hab, was gar nicht erforderlich war.
Das, was die Box nicht bietet muss ich statisch verlinken, den rest sollte ich unbedingt dyn lassen?!?

gut, dann hab ich jetzt durch try and error herausgefunden, dass libreadline und libncurses eingebunden werden müssen... mit den beiden eingebunden gibts "nur" noch

Code:
# ./vpnserver
-- Alert: SoftEther VPN Kernel --
String Library Init Failed.
Please check your locale settings and iconv() libraries.
#

file ./vpnserver gibt folgendes aus:

Code:
freetz@freetz-linux:~/v4.18-9570/bin/vpnserver$ file ./vpnserver
./vpnserver: ELF 32-bit MSB executable, MIPS, MIPS32 rel2 version 1, dynamically linked (uses shared libs), with unknown capability 0x41000000 = 0xf676e75, with unknown capability 0x10000 = 0x70403, not stripped
freetz@freetz-linux:~/v4.18-9570/bin/vpnserver$
 
aber das ist doch genau das Problem: die FBF hat die libs doch gar nicht, also muss ich sie irgendwie "mitschleppen"... deshalb dacht ich statisch verlinken...

BTW: Alternativ zum Hinweis von PeterPawn auf "LD_LIBRARY_PATH", kannst Du die Such-Pfade für die Laufzeit-libraries, mit "-rpath" auch in die binaries hardcodieren. Siehe z. B. die Ausgabe von:
Code:
man ld | fgrep -A 14 -e -rpath=dir
und wenn so gemacht/versucht, dann siehe in deinem Build-System die Ausgabe von:
Code:
readelf -d <binary> | grep -i rpath
 
Hi,

hatte ich vorhin aus "spass und dollerei" mal mitkompiliert - kein erfolg...
aber was mich stutzig macht:

readelf -d ./vpnserver gab aus, dass libpthread eine abhängigkeit ist...
und
Code:
 ls -la /lib/libt*
lrwxrwxrwx    1 root     root            18 Feb  2  2015 /lib/libtcloud.so -> libtcloud.so.1.0.0
lrwxrwxrwx    1 root     root            18 Feb  2  2015 /lib/libtcloud.so.1 -> libtcloud.so.1.0.0
-rwxrwxrwx    1 root     root         59936 Feb  2  2015 /lib/libtcloud.so.1.0.0
lrwxrwxrwx    1 root     root            16 Feb  2  2015 /lib/libtffs.so -> libtffs.so.1.0.0
lrwxrwxrwx    1 root     root            16 Feb  2  2015 /lib/libtffs.so.1 -> libtffs.so.1.0.0
-rwxrwxrwx    1 root     root          4864 Feb  2  2015 /lib/libtffs.so.1.0.0
-rwxrwxrwx    1 root     root         20988 Feb  2  2015 /lib/libthread_db-0.9.33.2.so
lrwxrwxrwx    1 root     root            25 Feb  2  2015 /lib/libtiinterpreter.so -> libtiinterpreter.so.0.0.0
lrwxrwxrwx    1 root     root            25 Feb  2  2015 /lib/libtiinterpreter.so.0 -> libtiinterpreter.so.0.0.0
-r-xr-xr-x    1 root     root         76916 Feb  2  2015 /lib/libtiinterpreter.so.0.0.0

kein libpthread.0

... statisch linken geht nicht weil dann immer kommt
Code:
init.c:(.text+0x25c): undefined reference to `__libc_setup_tls'
init.c:(.text+0x268): undefined reference to `__libc_setup_tls'
collect2: error: ld returned 1 exit status

also muss ich weiter suchen.. jetzt erstmal feierabend, sonne genießen und später noch mal weitersuchen.... mein kopf qualmt :(
 
ls -la /lib/libt*
kein libpthread.0
Fällt Dir was auf?

Hast Du mal die explizite Angabe von LANG im Environment probiert? Siehe die Links weiter oben ... ansonsten muß eben eine libiconv dazugelinkt werden. Wenn ich das richtig gelesen habe, taucht diese Fehlermeldung auf, wenn irgendwelche Multibyte-String-Funktionen nicht vorhanden sind (und das wird offenbar erst zur Laufzeit getestet, weil es mehrere dafür taugliche Bibliotheken gibt).

Aber ich habe auch keinen Bock, mich in die Quellen zu vertiefen ... das sind ja bisher nur recht allgemeingültige Feststellungen meinerseits zum Linken an sich gewesen. Wenn da im Code verschiedene Libs dynamisch zur Laufzeit angetestet werden sollten, muß eben eine davon auf der Box zur Verfügung stehen. Genauso gut kann es aber auch mit der "locale"-Einstellung und den auf der Box m.W. generell fehlenden Dateien/Libs zur Lokalisierung zusammenhängen, da muß man entweder in die Quellen (an die Stelle, wo die Fehlermeldung erzeugt wird) oder von außen mit strace/ltrace (oder einem Debugger) die versuchten Ladevorgänge überwachen.

Da war doch auch ein Link zu einem GitHub-Vorschlag für eine OpenWRT-Version (MIPSEL) dabei ... das kann man fast 1:1 auf Freetz übertragen oder man sucht sich nur die Unterschiede heraus und paßt sein Makefile entsprechend an.
 
Fällt Dir was auf?...

shit, entschuldige bitte, war schon ganz matsche im kopp

natürlich libPthread und dann siehts auch so aus

Code:
# ls -la /lib/libpt*
-rwxrwxrwx    1 root     root         87568 Feb  2  2015 /lib/libpthread-0.9.33.2.so
lrwxrwxrwx    1 root     root            22 Feb  2  2015 /lib/libpthread.so -> libpthread-0.9.33.2.so
lrwxrwxrwx    1 root     root            22 Feb  2  2015 /lib/libpthread.so.0 -> libpthread-0.9.33.2.so
#

okay, ich werd wahrscheinlich die Nacht oder morgen mal weitersuchen... bis dahin sei euch beiden 1000 mal gedankt :)
ich meld mich wenn ich was gefunden haben sollte
lg
dirk
 
Ich habe dann doch mal das Git-Repository geclont ... wenn man sich das "InitInternational()" ansieht, stellt man schnell fest, daß es für UNIX-Umgebungen, die nicht "MacOS X" sind, irgendwelche japanischen Locale-Einstellungen verwenden will:
Code:
void InitInternational()
{
[COLOR="#00FF00"]#ifdef  OS_UNIX
[/COLOR]        void *d;

        if (iconv_lock != NULL)
        {
                return;
        }

        GetCurrentCharSet(charset, sizeof(charset));
        d = IconvWideToStrInternal();
        if (d == (void *)-1)
        {
#ifdef  UNIX_MACOS
                StrCpy(charset, sizeof(charset), "utf-8");
[COLOR="#FF0000"]#else   // UNIX_MACOS
                StrCpy(charset, sizeof(charset), "EUCJP");[/COLOR]
#endif  // UNIX_MACOS
                d = IconvWideToStrInternal();
                if (d == (void *)-1)
                {
[COLOR="#00FF00"]                        StrCpy(charset, sizeof(charset), "US");[/COLOR]
                }
                else
                {
                        IconvFreeInternal(d);
                }
        }
        else
        {
                IconvFreeInternal(d);
        }

        iconv_lock = NewLockMain();

        iconv_cache_wide_to_str = IconvWideToStrInternal();
        iconv_cache_str_to_wide = IconvStrToWideInternal();
#endif  // OS_UNIX
}
Wenn das Initialisieren mit Japanisch fehlschlägt, wird "US" (das dürfte "ASCII" sein) angenommen, was dann nicht zur Systemeinstellung (die sollte "UTF-8" sein) paßt. Also entweder patchen oder "UNIX_MACOS" setzen, damit der o.a. Code gleich "UTF-8" verwendet oder - wie an anderen Stellen (s. Links oben) schon festgehalten - die LC_*-Variablen für den Aufruf richtig setzen, dann sollte "GetCurrentCharSet" gleich funktionieren.

Die Software wurde ja an einer japanischen Universität entwickelt, da ist es sicherlich normal, wenn die sich um I18n ordentlich bemüht. Da die FRITZ!Box bei diesem Aspekt nur sehr rudimentär entwickelt ist, wäre ein Patchen der "Internat.c" wahrscheinlich der sinnvollste Weg, um ein richtiges Freetz-Paket daraus zu bauen.
 
Hi Peter,

erst einmal noch ein super fettes Dankeschön, dass du da die notwendigen Infos "mal eben" rauskrost und deine Zeit opferst.

Ich hab gerade auch noch ein bissl geforscht und scheibar laut einem auch hier im Forum http://www.ip-phone-forum.de/showthread.php?t=150038 arbeitet die Fritz Box mit ISO-8859-1. Ich glaub damit können die Japaner gar nichts wirkliches anfangen (zumindest softether) und deshalb läuft es auf die Pumpe.
Nu müsste wahrscheinlich der gesamte Bereich verändert werden, damit es auf der FBF läuft?!?

Ich werde mal auch im entsprechenden Forum www.vpnusers.com eine entsprechende Anfrage stellen.

Wie sieht es mit der freetz modifikation aus? Aktuell ist meine Box noch mit Original AVM Firmware versehen, läuft freetz auf UTF-8? Weil wenn mein Problem durch die Installation von freetz zu lösen ist, werd ich mich mal daran begeben...

Danke, Danke und nochmal Danke an euch beide :)
LG aus Kölle
 
@ChAoS:
Hast Du bei der Fundstelle von kriegaex mal auf das Datum gesehen?

Die FRITZ!Box arbeitet inzwischen lange mit UTF-8 ... der Vorschlag mit dem Patchen (das ist ja (erst einmal) nur das eine "ifdef" beim oben gezeigten "UNIX_MACOS" in Internat.c) war durchaus ernst gemeint. Ich weiß ja nicht, was Du Dir von einer Anfrage in dem anderen Forum erhoffst ... aber sicherlich doch nicht, daß das jemand für Dich patcht, oder?
 
Hi PterPawn

Okay, sorry, das wusste ich nicht, dachte das wäre noch aktuell. wenn ich locale eingebe erkennt die box das nicht gibt mir also nicht an mit welchem zeichensatz sie arbeitet...
okay, sie arbeitet auf utf-8
damm habe ich doch heute morgen als erstes direkt das richtige gemacht ich habe entsprechend den code so abgeändert

Code:
void InitInternational()
{
#ifdef  OS_UNIX
        void *d;

        if (iconv_lock != NULL)
        {
                return;
        }

        GetCurrentCharSet(charset, sizeof(charset));
        d = IconvWideToStrInternal();
        if (d == (void *)-1)
        {
#ifdef  UNIX_MACOS
                StrCpy(charset, sizeof(charset), "utf-8");
#else   // UNIX_MACOS
                StrCpy(charset, sizeof(charset), "[COLOR=#ff0000]utf-8[/COLOR]");
#endif  // UNIX_MACOS
                d = IconvWideToStrInternal();
                if (d == (void *)-1)
                {
                        StrCpy(charset, sizeof(charset), "[COLOR=#ff0000]utf-8[/COLOR]");
                }
                else
                {
                        IconvFreeInternal(d);
                }
        }
        else
        {
                IconvFreeInternal(d);
        }

        iconv_lock = NewLockMain();

        iconv_cache_wide_to_str = IconvWideToStrInternal();
        iconv_cache_str_to_wide = IconvStrToWideInternal();
#endif  // OS_UNIX
}

so, dass er egal bei welchem Ergebnis seiner Prüfungen utf8 nimmt. Merkwürdig finde ich, dass mit dieser Umstellung, make clean und make die BIN zwar ein neues Datum hat aber bis aufs Byte genau so groß ist.
Getestet geht aber so leider auch nicht.

Ich hatte schon die Anfrage fertig in vpnusers aber hab den Post direkt wieder gelöscht, weil es demnach mit dem ISO eine falschaussage war...

Ich werde dann mal weiter basteln wobei ich so langsam an dem Punkt bin das aufzugeben wobei ich mir nicht vorstellen kann, dass es unmöglich oder super aufwändig ist :(
 
Aus Neugierde habe ich das auch mal versucht und bin der Anregung von @er13 in #6 gefolgt. Ich konnte SoftEther VPN mit buildroot 2015.08-rc1 MIPS big endian und WCHAR support für die toolchain und ohne Kernelauswahl ohne Probleme auf Anhieb bauen. Das generierte rootfs.tar habe ich auf die USB Platte, entpackt dann mit chroot geladen und mit ./usr/sbin/vpnserver start ließ sich der Server auch problemlos auf meiner 3490 starten.
 
Hi andiling

mit buildroot bin ich am Anfang auf die Pumpe gelaufen, der brach immer bei einem seiner 1 mio Skripts ab, so dass ich gar nicht bis Softether gekommen bin.
Deshalb hat es mich scheinbar in die falsche Richtung gedrückt.

Gerade, wo ich jetzt wirklich ganz am Ende damit war und die Hoffnung aufgegeben habe, hatte ich mir nochmal ein frisches Ubuntu genommen, alle Abhängigkeiten für Buildroot installiert und buildroot ebenso in der aktuellen rc1 installiert, make menuconfig, wchar uns softether ausgewählt -> make und hab genau während das am maken war deinen Beitrag rein bekommen ;)

Es gibt also (wieder) Hoffnung :)

habe jetzt auch das rootfs.tar und werde mal schauen, ob ich damit was anfangen kann ;)

LG
 
Ich habe inzwischen ein bisschen weiter rumgespielt und der Server scheint seinen Dienst zu verrichten.

Weiterhin viel Erfolg!
 
habs nun auf der box und auch entpackt (aktuell in /var/media/ftp/br) aber hänge jetzt an der chroot geschichte :( sagt immer /bin/sh Exec format error

versuche nun auf der box -> chroot /var/media/ftp/br

edit - ich glaube da ist etwas beim "backen" schief gegangen... Welche Einstellungen hast du genau bei make menuconfig gegenüber der standardeinstellung geändert?

Danke schonmal für die Info und LG
 
Zuletzt bearbeitet:
Ich glaube wo gesehen zu haben, dass Du mips32 r2 ausgewählt hast während ich mips32 genommen habe.

Der Fehler deutet darauf hin, dass das rootfs nicht zum chroot bzw Basissysten passt.
 
Oh, sorry,

habe die gesamte VM zurückgesetzt zum Zustand bevor make menuconfig (ein Lob auf VMs und Snapshots) und beim make menuconfig fiel mir auf, dass ich arm big endian gewählt hab - also hast recht. Die bins waren für den so nicht lesbar ;)

Hat es irgendwelche (performancemäßigen oder sicherheitstechnische) Nachteile, wenn ich es in einer chroot Umgebung laufen lasse?
Ich bekomme gerade eine Verbindung, supiiiiii ;)

Werde jetzt die kommenden Tage mal weiter so damit rumspielen und testen und Bescheid geben ;)

Super LG

Edit: ich bin baff - einfach die softether konfig aus meiner VM gesichert, die VM heruntergefahren, Konfig in das SE der Fritz eingespielt und siehe da - rennt :)

Nur jetzt ist es eine schon angetagte Version aus März - how to update? ;)
 
Zuletzt bearbeitet:

Zurzeit aktive Besucher

Statistik des Forums

Themen
244,970
Beiträge
2,221,963
Mitglieder
371,746
Neuestes Mitglied
Wurstpeter2000
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.