- Mitglied seit
- 1 Dez 2006
- Beiträge
- 73
- Punkte für Reaktionen
- 0
- Punkte
- 0
Hallo,
in den letzten Tagen habe ich mit Eurer Hilfe, insbesondere von kriegaex, olistudent und derheimi, den DS-MOD auf meiner 7170 zum Laufen gebracht, die nun als OpenVPN Server arbeitet
Meine andere Boxen laufen als OpenVPN Clients. Da diese Boxtypen vom DS-MOD leider nicht unterstützt werden (7140 Annex A) und zudem einen für OpenVPN zu kleinen Flashspeicher haben (7050 Annex A), mußte ein statisch gelinktes OpenVPN Binary mit lzo her.
Binaries fand ich bei www.tecchannel.de (2.1_beta8, Dateigröße 2 MB) und in einem Forumsbeitrag von jack1st (2.1_rc1, Dateigröße 3 MB), die während der Testphase gute Dienste leisteten.
Meine Zielsetzung war aber, das Binary selbst zu übersetzen und dabei von der optimierten Dateigröße des OpenVPN-Pakets im DS-MOD zu profitieren.
In den Makefiles sind bei der Übersetzung zwei Änderungen erforderlich: Bei lzo muß die Option --disable-static entfernt werden, damit die passende statische Bibliothek liblzo2.a erzeugt wird und bei OpenVPN muß in den LDFLAGS die Option -static hinzugefügt werden.
Folgende Schritte führen zum Ziel:
Achtung: Diese Beschreibung setzt noch den DS-MOD in Version ds26-14.4 voraus. Beim neuen ds26-15 gibt es laut Beschreibung Änderungen im Ablauf, die nicht berücksichtigt sind (u.a. entfällt make precompiled).
1. Ausgangpunkt ist ein Verzeichnis ds26-14.4, in dem das Paket OpenVPN ausgewählt und der Ablauf zur Erstellung eines Firmware-Images erfolgreich durchlaufen wurde (Beschreibung siehe hier).
2. Das Skript build-openvpnstatic wird in dieses Verzeichnis kopiert und arbeitet die folgenden Schritte ab:
3. Der Aufruf des Skripts erfolgt mit
4. Das resultierende Binary openvpn hat die in ds26-14.4 enthaltende Version 2.1_rc2 und ist knapp 1,4 MB groß.
Bei mir läuft es seit einem Tag einwandfrei (auf der 7050).
WICHTIG: Alle Informationen nutzt Ihr auf eigene Gefahr! Ich übernehme keine Haftung. Statt makefiles zu patchen und mich stundenlang über rätselhafte Fehlermeldungen zu wundern, hätte ich heute auch mal den Unix-Grundkurs machen können, den mir kriegaex aus gutem Grund ans Herz gelegt hat Ihr seid also gewarnt!
Neben dem Skript habe ich auch das Binary angehängt, falls jemand nicht kompilieren will oder kann.
Grüße,
DSLFritze
P.S: Zwei Fragen sind noch aufgetaucht, die die Linux-Profis hier vermutlich leicht beantworten können:
in den letzten Tagen habe ich mit Eurer Hilfe, insbesondere von kriegaex, olistudent und derheimi, den DS-MOD auf meiner 7170 zum Laufen gebracht, die nun als OpenVPN Server arbeitet
Meine andere Boxen laufen als OpenVPN Clients. Da diese Boxtypen vom DS-MOD leider nicht unterstützt werden (7140 Annex A) und zudem einen für OpenVPN zu kleinen Flashspeicher haben (7050 Annex A), mußte ein statisch gelinktes OpenVPN Binary mit lzo her.
Binaries fand ich bei www.tecchannel.de (2.1_beta8, Dateigröße 2 MB) und in einem Forumsbeitrag von jack1st (2.1_rc1, Dateigröße 3 MB), die während der Testphase gute Dienste leisteten.
Meine Zielsetzung war aber, das Binary selbst zu übersetzen und dabei von der optimierten Dateigröße des OpenVPN-Pakets im DS-MOD zu profitieren.
In den Makefiles sind bei der Übersetzung zwei Änderungen erforderlich: Bei lzo muß die Option --disable-static entfernt werden, damit die passende statische Bibliothek liblzo2.a erzeugt wird und bei OpenVPN muß in den LDFLAGS die Option -static hinzugefügt werden.
Folgende Schritte führen zum Ziel:
Achtung: Diese Beschreibung setzt noch den DS-MOD in Version ds26-14.4 voraus. Beim neuen ds26-15 gibt es laut Beschreibung Änderungen im Ablauf, die nicht berücksichtigt sind (u.a. entfällt make precompiled).
1. Ausgangpunkt ist ein Verzeichnis ds26-14.4, in dem das Paket OpenVPN ausgewählt und der Ablauf zur Erstellung eines Firmware-Images erfolgreich durchlaufen wurde (Beschreibung siehe hier).
2. Das Skript build-openvpnstatic wird in dieses Verzeichnis kopiert und arbeitet die folgenden Schritte ab:
- Sichern der makefiles für lzo und openvpn
- Patchen des makefiles von lzo (--disable-static entfernen)
- Neuübersetzung von lzo zur Erzeugung einer statischen Bibliothek liblzo2.a
- Patchen des makefiles von openvpn (LDFLAGS=-static hinzufügen)
- Neuübersetzung von openvpn zur Erzeugung des statisch gelinkten Binaries
- Kopieren des erzeugten openvpn Binaries ins Verzeichnis ds26-14.4
- Restaurieren der ursprünglichen makefiles
- Übersetzung von lzo und openvpn in der ursprünglichen, dynamischen Version für DS-MOD
Code:
# Create OpenVPN static binary after ds26-14.4 image creation
# 2007-07-09 by DSLFritze
# Save original makefiles
cp -p make/openvpn/openvpn.mk make/openvpn/openvpn.mk.orig
cp -p make/libs/lzo.mk make/libs/lzo.mk.orig
# Make lzo static library
patch -p0 << "EOLOOP0"
--- make/libs/lzo.mk.orig 2007-01-16 23:26:37.000000000 +0100
+++ make/libs/lzo.mk 2007-07-09 15:50:39.000000000 +0200
@@ -38,7 +38,6 @@
$(DISABLE_LARGEFILE) \
--disable-libtool-lock \
--disable-asm \
- --disable-static \
);
touch $@
EOLOOP0
rm source/lzo-2.02/.configured
make lzo-dirclean
make lzo-precompiled
# Make openvpn static binary
patch -p0 << "EOLOOP1"
--- make/openvpn/openvpn.mk.orig 2007-04-16 11:16:06.000000000 +0200
+++ make/openvpn/openvpn.mk 2007-07-09 16:28:46.000000000 +0200
@@ -35,7 +35,7 @@
$(TARGET_CONFIGURE_OPTS) \
CFLAGS="$(TARGET_CFLAGS)" \
CPPFLAGS="-I$(TARGET_MAKE_PATH)/../usr/include" \
- LDFLAGS="-static-libgcc -L$(TARGET_MAKE_PATH)/../usr/lib" \
+ LDFLAGS="-static -static-libgcc -L$(TARGET_MAKE_PATH)/../usr/lib" \
./configure \
--target=$(GNU_TARGET_NAME) \
--host=$(GNU_TARGET_NAME) \
EOLOOP1
rm source/openvpn-2.1_rc2/.configured
make openvpn-dirclean
make openvpn-precompiled
# Get the static binary
cp -p source/openvpn-2.1_rc2/openvpn .
# Restore original makefiles
mv -f make/openvpn/openvpn.mk.orig make/openvpn/openvpn.mk
mv -f make/libs/lzo.mk.orig make/libs/lzo.mk
# Make with original makefiles
rm source/lzo-2.02/.configured
make lzo-dirclean
make lzo-precompiled
rm source/openvpn-2.1_rc2/.configured
make openvpn-dirclean
make openvpn-precompiled
Code:
. ./build-openvpnstatic
4. Das resultierende Binary openvpn hat die in ds26-14.4 enthaltende Version 2.1_rc2 und ist knapp 1,4 MB groß.
Bei mir läuft es seit einem Tag einwandfrei (auf der 7050).
WICHTIG: Alle Informationen nutzt Ihr auf eigene Gefahr! Ich übernehme keine Haftung. Statt makefiles zu patchen und mich stundenlang über rätselhafte Fehlermeldungen zu wundern, hätte ich heute auch mal den Unix-Grundkurs machen können, den mir kriegaex aus gutem Grund ans Herz gelegt hat Ihr seid also gewarnt!
Neben dem Skript habe ich auch das Binary angehängt, falls jemand nicht kompilieren will oder kann.
Grüße,
DSLFritze
P.S: Zwei Fragen sind noch aufgetaucht, die die Linux-Profis hier vermutlich leicht beantworten können:
- Als es mit dem statischen Linken auch nach Stunden nicht klappen wollte, hatte ich die Idee, das dynamisch gelinkte Binary aus dem DS-MOD nebst Bibliotheken (libssl.0.9.8.so usw.) auf die 7050 zu kopieren. Bibliotheken werden beim Aufruf aber in /usr/lib erwartet. Wie kann ich auf einer Box ohne DS-MOD den Pfad für Bibliotheken erweitern, damit diese auch in anderen Verzeichnissen gesucht werden ?
- Mein DS-MOD Image wurde für 29.04.29 übersetzt, also für eine Box mit Kernel 2.6.13.1. Meine englische 7050 (14.04.26) läuft aber mit 2.4.17. Daher war ich eigentlich überrascht, dass das Binary hierauf überhaupt funktioniert. Wie sind hier die Abhängigkeiten? Wann muss gezielt für eine Kernelversion übersetzt werden und wann nicht