Was ist eine „static binary“?
Während der Übersetzung eines Quellcodes in ein ausführbares Programm verknüpft der Compiler die ausführbare Datei des Programms, um später bei der Ausführung des Programms Arbeitsspeicher zu sparen, mit „shared dynamic libraries“.
Diese Bibliotheken sind eine Sammlung von Funktionen welche von mehreren Programmen geteilt verwendet werden um bestimmte Aufgaben zu zu erfüllen. Durch die gemeinsame Nutzung dieser Bibliotheken kann der Arbeitsspeicher des Computers geschont werden, da nur eine Kopie der Bibliothek für viele verschiedene Programme im Speicher geladen sein muss.
Um ein unerwartetes Verhalten von Programmen zu vermeiden, ist es manchmal unumgänglich das Programm mit einer bestimmten Version einer Bibliothek zu Übersetzen. Auch um die Portabilität eines Programms zu verbessern ist es wichtig die Abhängigkeit vom vorhanden sein einer dynamischen Bibiothek zu vermeiden.
In Linux Systemen sorgt ein Paketmanager dafür, dass Versionsabhängigkeiten korrekt erfüllt werden. Wenn Du auf einem Computer arbeitest über den Du keine Administrative Kontrolle besitzt kannst Du die Version der verwendeten Bibliothek nicht bestimmen oder eine aktualisiert verhindern.
Programme können, wenn sie mit „shared dynamic libraries“ übersetzt wurden nur auf andere Computer übertragen werden auf der, die gleiche Prozessorarchitektur und die gleichen Bibliotheken verfügbar sind.
Falls die Bibliotheken des Computers auf den das Programm übertragen wurde aktualisiert werden, eine Bibliothek entfernt wird oder eine der Bibliotheken auf dem Zielrechner werden kompromittiert oder durch bösartige Versionen ersetzt. Hier kommt das bauen einer „static binary“ ins Spiel.
Wie wird GIT als „static binary“ übersetzt?
in diesem Beispiel gehe ich davon aus das auf der NAS, entsprechend meiner Anleitung, bereits mit dem hier notwendigen Buildsystem ausgestattet wurde. Im Anschluss kann die entstehende GIT Binärdatei auf allen identischen ARM Prozessoren verwendet werden.
Die aktuellste GIT Version kann auf http://git-scm.com gefunden werden.
Die Folgenden 3 Schritte sind auszuführen:
1) Lade den GIT Quellcode herunter, entpacke die tar.gz-Datei und wechsle in das GIT Buildverzeichnis:
wget --no-check-certificate https://kernel.org/pub/software/scm/git/git-2.9.5.tar.gz tar xzf git-2.9.5.tar.gz cd git-2.9.5
2) Setze die Compilervariablen und konfiguriere ihn mittels ./configure. Hierbei kannst du ein separates Verzeichnis zum übersetzen angeben.:
mkdir /usr/src/git-static CHOST="armv6j-hardfloat-linux-gnueabi" CFLAGS="-Os -march=arm1136jf-s -mfpu=vfp -mfloat-abi=hard -pipe -fomit-frame-pointer" CXXFLAGS="${CFLAGS}" ./configure --prefix=/usr/src/git-static CFLAGS="${CFLAGS} -static"
3) übersetze GIT:
make
…und installiere GIT in das Zielverzeichnis
make install
4) Prüfe anschließend das deine neue GIT-Version wie erwartet funktioniert
cd /usr/src/git-static ./git --version