Cpan auf Fritzbox

Aus FHEMWiki

Cpan (genauer Cpanmin) auf FritzBox 7390 einrichten

Mit Cpanmin können die meisten Perl-Pakete auf der FritzBox installiert werden (z.B. DBI das für DbLog benötigt wird). Dadurch umgeht man die oft störende Einschränkungen der FritzBox. Die Installation auf anderen FritzBox-Typen wurde bis jetzt nicht getestet, könnte aber auch funktionieren. Für die Installation werden Debian-mips-Pakete von debian.org verwendet. Die Pakete werden einfach entpackt und auf der FritzBox in entsprechenden Verzeichnissen verteilt. Es müssen selbstverständlich Abhängigkeiten von den Paketen erfüllt sein. Dadurch ist es möglich die meisten Pakete die Debian für mips-Architektur bereitstellt nach zu installieren.

Voraussetzungen

  • FritzBox 7390 mit Freetz als USB-Root
  • Da die Pakete einiges an Speicher benötigen, sollte die rootfs-Partition ausreichende Größe haben. 512MB reichen bei mir locker.


grober Installationsablauf

  1. Benötigte .deb Pakete von debian.org besorgen
  2. Pakete entpacken und auf die FritzBox kopieren
  3. Pakete in entsprechende Verzeichnisse auf der FritzBox verteilen
  4. Cpanmin einrichten


ausführlicher Installationsablauf

Benötigte Pakete runterladen

Für die Installation benötigte Pakete werden von http://www.debian.org/distrib/packages heruntergeladen.

libc6_2.13-38_mips
libc6-dev_2.13-38_mips
perl-base_5.14.2-20_mips
perl_5.14.2-20_mips
perl-modules_5.14.2-20_all
make_3.81-8.2_mips
cpp-4.6_4.6.3-14_mips
cpp_4.6.3-8_mips
gcc-4.6-base_4.6.3-14_mips
gcc-4.6_4.6.3-14_mips
gcc_4.6.3-8_mips
binutils_2.22-8_mips
libmpc2_0.9-4_mips
libmpfr4_3.1.0-5_mips
libgmp10_5.0.5+dfsg-2_mips
openssl_1.0.1e-2_mips
libssl1.0.0_1.0.1e-2_mips
libssl-dev_1.0.1e-2_mips
grep_2.6.3-3_mips
linux-headers-2.6.32-5-common_2.6.32-48squeeze1_mips

Benötigte .deb Pakete entpacken

Ich verwende dazu MidnightCommander, damit werden Symlinks auch als solche entpackt (dpkg -x macht die zu Hardlinks). In MidnightCommander auf die .deb Datei gehen, mit Enter die Datei öffnen und Dateien einfach rauskopieren.

Enpackte Pakete auf die Fritzbox kopieren

Ich mounte dazu einfach die Fritzbox mit sshfs "sshfs 192.168.0.1:/ /mnt/fritz.box". Wenn man die Fritzbox vor dem Entpacken gemountet hat, kann auch direkt auf die Fritzbox entpackt werden.

Symlink falls miniperl installiert ist löschen

rm /usr/bin/perl

Pakete in entsprechenden Verzeichnissen auf der FritzBox verteilen

Für Perl wird libc6 benötigt

cp -rd libc6_2.13-38_mips/CONTENT/etc/. /etc/.
cp -rd libc6_2.13-38_mips/CONTENT/lib/. /lib/.
cp -rd libc6_2.13-38_mips/CONTENT/usr/lib/. /usr/lib/.

cp -rd libc6-dev_2.13-38_mips/usr/include/. /usr/include/. cp -rd libc6-dev_2.13-38_mips/usr/lib/. /usr/lib/. Perl insatllieren

mkdir /usr/share/perl
cp -rd perl-base_5.14.2-20_mips/CONTENT/usr/bin/. /usr/bin/.
cp -rd perl-base_5.14.2-20_mips/CONTENT/usr/lib/. /usr/lib/.
cp -rd perl-base_5.14.2-20_mips/CONTENT/usr/share/perl/. /usr/share/perl/.

cp -rd perl_5.14.2-20_mips/CONTENT/usr/bin/. /usr/bin/. cp -rd perl_5.14.2-20_mips/CONTENT/usr/lib/. /usr/lib/. cp -rd perl-modules_5.14.2-20_all/CONTENT/etc/. /etc/. cp -rd perl-modules_5.14.2-20_all/CONTENT/usr/share/perl/. /usr/share/perl/. Außerdem wird Make benötigt

cp -rd make_3.81-8.2_mips/CONTENT/usr/bin/. /usr/bin/.
mkdir -p /usr/share/locale/de
cp -rd make/usr/share/locale/de/. /usr/share/locale/de/.

Kompiler installieren

cp -rd cpp-4.6_4.6.3-14_mips/CONTENT/usr/bin/. /usr/bin/.
cp -rd cpp-4.6_4.6.3-14_mips/CONTENT/usr/lib/. /usr/lib/.

cp -rd cpp_4.6.3-8_mips/CONTENT/usr/bin/. /usr/bin/. ln -s /usr/bin/gcc /usr/bin/cc cp -rd gcc-4.6-base_4.6.3-14_mips/CONTENT/usr/lib/. /usr/lib/. cp -rd gcc-4.6_4.6.3-14_mips/CONTENT/usr/bin/. /usr/bin/. cp -rd gcc-4.6_4.6.3-14_mips/CONTENT/usr/lib/. /usr/lib/. cp -rd gcc_4.6.3-8_mips/CONTENT/usr/bin/. /usr/bin/. cp -rd binutils_2.22-8_mips/CONTENT/usr/bin/. /usr/bin/. cp -rd binutils_2.22-8_mips/CONTENT/usr/lib/. /usr/lib/. cp -rd binutils_2.22-8_mips/CONTENT/usr/share/locale/de/. /usr/share/locale/de/. cp -rd libmpc2_0.9-4_mips/CONTENT/usr/lib/. /usr/lib/. cp -rd libmpfr4_3.1.0-5_mips/CONTENT/usr/lib/. /usr/lib/. cp -rd libgmp10_5.0.5+dfsg-2_mips/CONTENT/usr/lib/. /usr/lib/. ln -s /usr/bin/gcc /usr/bin/cc ln -s /usr/lib/gcc/mips-linux-gnu/4.6/cc1 /usr/bin/cc1 OpenSSL installieren

cp -rd openssl_1.0.1e-2_mips/CONTENT/etc/. /etc/.
cp -rd openssl_1.0.1e-2_mips/CONTENT/usr/bin/. /usr/bin/.
cp -rd openssl_1.0.1e-2_mips/CONTENT/usr/lib/. /usr/lib/.

cp -rd libssl1.0.0_1.0.1e-2_mips/usr/lib/. /usr/lib/. cp -rd libssl-dev_1.0.1e-2_mips/CONTENT/usr/include/. /usr/include/. cp -rd libssl-dev_1.0.1e-2_mips/CONTENT/usr/lib/. /usr/lib/. Grep ersetzen da Cpan bei Installation von manchen Paketen Probleme damit hat

cp -rd grep_2.6.3-3_mips/CONTENT/bin/. /bin/.
cp -rd grep_2.6.3-3_mips/CONTENT/usr/bin/. /usr/bin/.
cp -rd grep_2.6.3-3_mips/CONTENT/usr/share/locale/de/. /usr/share/locale/de/.

Includes kopieren

mkdir /usr/include/linux
cp -rd linux-headers-2.6.32-5-common_2.6.32-48squeeze1_mips/CONTENTS/usr/src/linux-headers-2.6.32-5-common/include/linux/param.h /usr/include/linux
cp -rd linux-headers-2.6.32-5-common_2.6.32-48squeeze1_mips/CONTENTS/usr/src/linux-headers-2.6.32-5-common/include/linux/limits.h /usr/include/linux
cp -rd linux-headers-2.6.32-5-common_2.6.32-48squeeze1_mips/CONTENTS/usr/src/linux-headers-2.6.32-5-common/include/linux/errno.h /usr/include/linux

mkdir /usr/include/asm cp -rd linux-headers-2.6.32-5-common_2.6.32-48squeeze1_mips/CONTENTS/usr/src/linux-headers-2.6.32-5-common/arch/mips/include/asm/ioctls.h /usr/include/asm cp -rd linux-headers-2.6.32-5-common_2.6.32-48squeeze1_mips/CONTENTS/usr/src/linux-headers-2.6.32-5-common/arch/mips/include/asm/ioctl.h /usr/include/asm cp -rd linux-headers-2.6.32-5-common_2.6.32-48squeeze1_mips/CONTENTS/usr/src/linux-headers-2.6.32-5-common/arch/mips/include/asm/socket.h /usr/include/asm cp -rd linux-headers-2.6.32-5-common_2.6.32-48squeeze1_mips/CONTENTS/usr/src/linux-headers-2.6.32-5-common/arch/mips/include/asm/param.h /usr/include/asm cp -rd linux-headers-2.6.32-5-common_2.6.32-48squeeze1_mips/CONTENTS/usr/src/linux-headers-2.6.32-5-common/arch/mips/include/asm/sockios.h /usr/include/asm cp -rd linux-headers-2.6.32-5-common_2.6.32-48squeeze1_mips/CONTENTS/usr/src/linux-headers-2.6.32-5-common/arch/mips/include/asm/errno.h /usr/include/asm mkdir /usr/include/asm-generic cp -rd linux-headers-2.6.32-5-common_2.6.32-48squeeze1_mips/CONTENTS/usr/src/linux-headers-2.6.32-5-common/include/asm-generic/ioctl.h /usr/include/asm-generic cp -rd linux-headers-2.6.32-5-common_2.6.32-48squeeze1_mips/CONTENTS/usr/src/linux-headers-2.6.32-5-common/include/asm-generic/socket.h /usr/include/asm-generic cp -rd linux-headers-2.6.32-5-common_2.6.32-48squeeze1_mips/CONTENTS/usr/src/linux-headers-2.6.32-5-common/include/asm-generic/param.h /usr/include/asm-generic cp -rd linux-headers-2.6.32-5-common_2.6.32-48squeeze1_mips/CONTENTS/usr/src/linux-headers-2.6.32-5-common/include/asm-generic/sockios.h /usr/include/asm-generic cp -rd linux-headers-2.6.32-5-common_2.6.32-48squeeze1_mips/CONTENTS/usr/src/linux-headers-2.6.32-5-common/include/asm-generic/errno-base.h /usr/include/asm-generic


Cpan installieren

Als Ersatz für Cpan wird Cpanminus verwendet. Normales Cpan benötigt zu viel Arbeitsspeicher, die Fritzbox hängt sich auf.

rm /usr/bin/cpan
wget http://search.cpan.org/CPAN/authors/id/M/MI/MIYAGAWA/App-cpanminus-1.6103.tar.gz
tar -xzvf App-cpanminus-1.6103.tar.gz
mkdir -p /usr/local/bin
cp App-cpanminus-1.6103/bin/cpanm /usr/local/bin
chmod 755 /usr/bin/cpanm
ln -s /usr/local/bin/cpanm /usr/bin/cpanm

Der Script muss gepatcht werden da wget von Freetz nicht alle Parameter kennt

patch /usr/local/bin/cpanm < /var/media/ftp/uStor12/temp/cpanm.patch

Jetzt noch noch einmal sauber installieren

cpanm App::cpanminus


Jetzt können benötigte Perl-Module eifach nachinstalliert werden

Die werden für normalen betrieb von FHEM benötigt:

cpanm Net::SSLeay
cpanm IO::Socket::SSL
cpanm --verbose Device::SerialPort
cpanm IO::Uncompress::Gunzip
cpanm HTTP::Request::Common

und die für DbLog:

cpanm DBI
cpanm Class::DBI::SQLite