Kompilierung verschiedener Pakete für ARM ========================================= In dieser Rubrik wollen wir verschiedene Pakete vorstellen und zeigen wie man sie mit einem Cross-Compiler für ARM-Architekturen kompiliert. Bekannte Webserver ------------------ =========== =========== Webserver Marktanteil =========== =========== Apache 46.64% Microsoft 29.33% nginx 12.40% =========== =========== http://news.netcraft.com/archives/2015/06/25/june-2015-web-server-survey.html Nach den drei Giganten, die sich zusammen mehr als 88% Marktanteil unter allen erreichbaren Webservern teilen, folgt der häufig verwendete ``lighttpd`` (ausgesprochen "lighty"), mit einem Anteil von ungefähr 0,46%. "Lighty" - lighttpd ------------------- Der leichtgewichtige Webserver ist quelloffen unter BSD lizensiert. Er zeichnet sich trotz des großen Funktionsumfangs voralem durch den geringen Speicherverbrauch aus und eignet sich deshalb auch für kleine Systeme. PCRE - Perl Compatible Regular Expressions __________________________________________ Vorraussetzung für ``lighttpd`` ist die Bibliothek ``pcre`` Paket herunterladen und enpacken ```````````````````````````````` get the sources from ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/ .. code:: bash $ wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.37.tar.gz $ tar -xvf pcre-8.37.tar.gz Paket kompilieren ````````````````` now switch to folder and start configure: .. code:: bash $ cd pcre-8.37 $ CXX=arm-linux-gnueabi-g++ CC=arm-linux-gnueabi-gcc RANLIB=arm-linux-gnueabi-ranlib STRIP=arm-linux-gnueabi-strip LD=arm-linux-gnueabi-ld AR=arm-linux-gnueabi-ar ./configure --enable-pcre32 --enable-cpp --host=arm-v5te-linux-gnueabi --prefix=/home/willy/linux/build/arm-v5te Paket kompilieren und installieren `````````````````````````````````` .. code:: bash $ make $ make install Lighttpd ________ This Document discribes howto cross-compile lighttpd for ARM-Architectures. Before Beginnung, make sure you have a suitable cross-compiler installed. Paket herunterladen und enpacken ```````````````````````````````` get the sources from http://www.lighttpd.net/download/ .. code:: bash $ wget http://download.lighttpd.net/lighttpd/releases-1.4.x/lighttpd-1.4.35.tar.gz $ % tar -xvf lighttpd-1.4.35.tar.gz Paket kompilieren konfigurieren und installieren ```````````````````````````````````````````````` .. code:: bash $ cd lighttpd-1.4.35 $ CC=arm-linux-gnueabi-gcc RANLIB=arm-linux-gnueabi-ranlib STRIP=arm-linux-gnueabi-strip CFLAGS="$CFLAGS -I/home/willy/linux/build/arm-v5te/include -DHAVE_PCRE_H=1 -DHAVE_LIBPCRE=1" LDFLAGS="-Wl,-rpath=/usr/arm-linux-gnueabi/lib" PCRECONFIG=/home/willy/linux/build/arm-v5te/bin/pcre-config $ ./configure --host=arm-v5te-linux-gnueabi --without-zlib --without-bzip2 --with-pcre --with-openssl=/home/willy/linux/build/arm-v5te Paket kompilieren ````````````````` .. code:: bash $ make Die Binärdatei wird in ``src/`` Verzeichnis abgelegt .. code:: bash $ file lighttpd % lighttpd: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.3, for GNU/Linux 2.6.32, not stripped GDB - GNU Debugger ------------------ Der GDB - GNU Debugger - ist der De-facto-Standard-Debugger von Linux-Systemen und wurde vom GNU-Projekt entwickelt. GDB ist auf eine breite Palette von Systemen portiert worden und unterstützt die Programmiersprachen C, C++, Objective-C, FORTRAN, Java, Pascal, Modula-2, Ada, D und Go. Herunterladen der Quellen _________________________ Die Quellen könnnen hier heruntergeladen werden: http://ftp.gnu.org/gnu/gdb/ .. code:: bash % wget http://ftp.gnu.org/gnu/gdb/gdb-7.9.1.tar.xz Umgebungsvariablen __________________ In diesem Fall kompilieren wir GDB so das er auf dem Host System läuft aber Code für die Target-Architektur debuggen kann. Aus diesem Grund können wir fürs kompilierne den Host-GCC verwenden. Kompilierung ____________ enpacken: .. code:: bash % tar -xvf gdb-7.9.1.tar.xz wir wechseln ins Verzeichnis und starten configure: .. code:: bash % cd gdb-7.9.1 % LDFLAGS=-L/home/willy/linux/tarballs/termcap-1.3.1 ./configure --target=arm-linux-gnueabi --prefix=/usr make .. code:: bash % make install .. code:: bash % make install OpenSSL ------- OpenSSL ist eine freie Implementierung für TLS (Transport Layer Security), ursprünglich SSL (Secure Sockets Layer). OpenSSL wird unter anderem für die Übersetzung von OpenSSH benötigt. zunächst laden wir die Quelldateien herunter: .. code:: bash wget https://openssl.org/source/openssl-1.0.2-latest.tar.gz und entpacken diese anschließend: .. code:: bash tar -xvf openssl-1.0.2-latest.tar.gz Nun erzeugen wir eine Makefile mit Autotools: .. code:: bash cd openssl-1.0.2-latest ./Configure linux-generic32 shared -DL_ENDIAN --openssldir=/home/willy/linux/build/arm-v7l anschließend können wir das Paket kompilieren und installieren: .. code:: bash # dont use -jX here!!! make CC=arm-linux-gnueabi-gcc RANLIB=arm-linux-gnueabi-ranlib LD=arm-linux-gnueabi-ld make CC=arm-linux-gnueabi-gcc RANLIB=arm-linux-gnueabi-ranlib LD=arm-linux-gnueabi-ld install SQLite3 ------- SQLite3 ist eine kleine, leichtgewichtige Implementierung einer SQL-Datenbank. Die Datenbank läuft dabei nicht wie bei anderen großen Vertretern als Server-Dienst sondern es wird bei Zugriffen auf eine Datei geschrieben, was die Datenbank für große Datenmengen praktisch unbrauchbar macht. Allerdings ist sie für kleine Projekte sehr hilfreich und dazu noch in fast jeder gängingen Programmiersprache verfügbar. Laden Sie zunächst die Quelldateien herunter: .. code:: bash wget http://sqlite.org/2015/sqlite-autoconf-3081002.tar.gz und entpacken diese anschließend: .. code:: bash tar -xvf sqlite-autoconf-2081002.tar.gz Nun beginnen wir mit der Konfiguration (Autotools): .. code:: bash cd sqlite-autoconf-2081002 ./configure --prefix=/home/willy/linux/build/arm-v7l --host=x86_64 --target=arm-v7l-linux-gnueabi --disable-readline anschließend können wir das Paket kompilieren und installieren: .. code:: bash make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- install