git als static binary compilieren

GIT

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

Sparkleshare als alternative zu „STRATO HiDrive“, Dropbox, „Google Drive“ oder SkyDrive

Linux Server für die Nutzung mit Sparkleshare vorbereiten:
In die Datei „authorized_keys“

adduser --disabled-password {USERNAME}
mkdir /home/{USERNAME}/.ssh
vim /home/{USERNAME}/.ssh/authorized_keys
chmod 700 /home/{USERNAME}/.ssh
chmod 600 /home/{USERNAME}/.ssh/authorized_keys
chown {USERNAME}:{USERNAME} /home/{USERNAME}/.ssh -R

git installieren und das Homeverzeichnis des Benutzers als git-Repository anlegen:

apt-get install git git-core
git init --bare /home/{USERNAME}/

anschließend die Synchronisation testen:

git clone ssh://{USERNAME}@server.tld/home/{USERNAME}/

Windows Client

Nun noch den Windows Client herunter laden:

https://github.com/hbons/SparkleShare/downloads

Und nach der Einrichtung angeben, dass man einen eigenen Server verwenden möchte

Server: ssh://{USERNAME}@server.tld:Port
Pfad: /home/{USERNAME}

Aktualisieren von FFmpeg und x264

FFmpeg

Um ffmpeg, x264, libx264-dev und yasm zu aktualisieren, wenn diese zuvor mit diese Anleitung eingerichtet wurde müssen diese zuerst deinstalliert werden:
sudo apt-get remove yasm ffmpeg x264 libx264-dev

Jetzt ein Paket nach dem anderen bereinigen, aktualisieren und neu Übersetzen:

yasm

cd /usr/src/yasm
make distclean
git pull
./autogen.sh
./configure --disable-nls --prefix=/usr
make
sudo checkinstall --pkgname=yasm --pkgversion="$(cat YASM-VERSION-FILE)" \
--backup=no --deldoc=yes --fstrans=no --default

x264

cd /usr/src/x264
make distclean
git pull
./configure
make
sudo checkinstall --pkgname=x264 --pkgversion="3:$(./version.sh | awk -F'[" ]' '/POINT/{print $4"+git"$5}')" --backup=no --deldoc=yes --fstrans=no --default

ffmpeg

cd /usr/src/ffmpeg/
make distclean
git pull
./configure --enable-gpl --enable-version3 --enable-nonfree --enable-postproc --enable-libfaac --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libxvid --enable-x11grab
make
sudo checkinstall --pkgname=ffmpeg --pkgversion="5:$(./version.sh)" --backup=no --deldoc=yes --fstrans=no --default
hash x264 ffmpeg ffplay ffprobe

Sollten zweifel bestehen ob ffmpeg und x264 korrekt eingerichtet wurden, im Aufruf von x264 –version und im Aufruf von ffmpeg erscheint als „built“-Datum das aktuelle Datum.

Aktuelle FFmpeg und x264 Version Installieren

x264

Abhängigkeiten Installieren

Entfernen der alten Installationen von x264, libx264-dev und ffmpeg.

sudo apt-get remove ffmpeg x264 libx264-dev

Alle für die übersetzung von x264 und FFmpeg notwendigen Pakete holen.

sudo apt-get update
sudo apt-get install build-essential checkinstall git libfaac-dev \
libjack-jackd2-dev libmp3lame-dev libopencore-amrnb-dev \
libopencore-amrwb-dev libsdl1.2-dev libtheora-dev libva-dev \
libvdpau-dev libvorbis-dev libx11-dev \
libxfixes-dev texi2html yasm zlib1g-dev

Der aktuelle Benutzer muss noch in die Gruppe „src“ so das er in /usr/src schreiben darf:

sudo usermod -aG src $(whoami)

YASM holen und Compilieren!

cd /usr/src
git clone https://github.com/yasm/yasm.git
cd yasm
./autogen.sh
./configure --disable-nls --prefix=/usr
make
sudo checkinstall --pkgname=yasm --pkgversion="$(cat YASM-VERSION-FILE)" \
--backup=no --deldoc=yes --fstrans=no --default

x264 Installieren

Die aktuellen Sourcecodes für x264 holen und übersetzen.

cd /usr/src
git clone git://git.videolan.org/x264
cd x264
./configure --enable-static
make
sudo checkinstall --pkgname=x264 --pkgversion="3:$(./version.sh | \
awk -F'[" ]' '/POINT/{print $4"+git"$5}')" --backup=no --deldoc=yes \
--fstrans=no --default

Install libvpx

VP8/WEBM holen und compilieren

sudo apt-get remove libvpx-dev
cd
git clone http://git.chromium.org/chromium/deps/libvpx.git
cd libvpx
./configure
make
sudo checkinstall --pkgname=libvpx --pkgversion="1:$(date +%Y%m%d%H%M)-git" \
--backup=no --deldoc=yes --fstrans=no --default

Installation von FFmpeg

Holen der aktuellsten Version, Compilieren, und Installation von FFMPEG.

cd /usr/src
git clone --depth 1 git://source.ffmpeg.org/ffmpeg
cd ffmpeg
./configure --enable-gpl --enable-libfaac --enable-libmp3lame \
--enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libtheora \
--enable-libvorbis \ --enable-libx264 --enable-nonfree --enable-postproc \
--enable-version3 --enable-x11grab --enable-libvpx
make
sudo checkinstall --pkgname=ffmpeg --pkgversion="5:$(date +%Y%m%d%H%M)-git" \
--backup=no --deldoc=yes --fstrans=no --default
hash x264 ffmpeg ffplay ffprobe

lavf Support zu x264 Hinzufügen.

Der lavf-Support erlaubt x264 alle Input-Dateien anzunehmen die von FFmpeg unterstützt werden. Dies ist sehr praktisch wenn x264 direkt verwendet werden soll.

cd /usr/src/x264
make distclean
./configure --enable-static
make
sudo checkinstall --pkgname=x264 --pkgversion="3:$(./version.sh | \
awk -F'[" ]' '/POINT/{print $4"+git"$5}')" --backup=no --deldoc=yes \
--fstrans=no --default

Hiermit ist die Installation abgeschlossen.
Du solltest die Source-Verzeichnisse von x264, libvpx, und ffmpeg behalten um Sie später einfach aktualisieren zu können. Siehe auch Aktualisieren von FFmpeg und x264 für weitere Informationen.

Um die Änderungen dieser Anleitung rückgängig zu machen und FFmpeg, x264, yasm und alle anderen Pakete aus dieser Anleitung wieder zu entfernen nutze folgendes Kommando:

sudo apt-get autoremove x264 ffmpeg qt-faststart build-essential git checkinstall \
yasm texi2html libfaac-dev libjack-jackd2-dev libmp3lame-dev libsdl1.2-dev \
libtheora-dev libva-dev libvdpau-dev libvorbis-dev libvpx libx11-dev \
libxfixes-dev zlib1g-dev