DevOps im Startup

In agilen Umgebungen wie Startups sind starre Trennungen von Softwareentwicklung und IT Operations eher selten anzutreffen. Doch auch viele große Unternehmen wechseln immer öfter auf agile Prozesse und einem dazu passenden IT Umfeld. DevOps ermöglicht die Vernetzung der klassischen Silos. Durch die Einführung intelligenter und automatisierter Prozesse lässt sich die Auslieferung der Software und dessen Qualität erheblich steigern.

Die gängigen DevOps Prozesse und Tools decken die Bereiche Planung, Entwicklung, Build, Test, Release, Deployment, Operations und Monitoring ab. Welche Prozesse dabei automatisiert werden sollen und zu welchem Zeitpunkt hängt maßgeblich vom Reifegrad des Unternehmens und der verfügbaren Zeit ab. Dabei muss die DevOps Umgebung am Anfang nicht so perfekt optimiert sein wie bei Netflix deren Automatiserungsgrad einzigartig ist. Für die Einführung der Tools und Prozesse muss Zeit aufgewendet werden welche dann in der Entwicklung fehlt. Gerade bei Startups die noch ihr MVP (Minimum Viable Product) am Markt erproben wäre eine vollständige Automatisierung noch verfrüht. Dennoch hilft eine frühzeitige Einführung auch hier die Produktivität und Qualität zu erhöhen. Exemplarisch möchte ich die Umsetzung meines letzten Stacks für ein schnell wachsendes Startup Unternehmen beschreiben.

Ausgangslage und Anforderungen

Das MVP ist am Markt erprobt und das Team hat bereits einige Entwickler an Board. Die primären Anforderungen sind somit die Qualität der Software erhöhen, idealerweise durch Testautomatisierung und Code-Quality-Standards. Neue Features müssen jederzeit und von jedem Mitarbeiter getestet werden können bevor diese in die Produktionsumgebung kommen. Somit müssen mehrere Testumgebungen verfügbar sein. Im Hinblick auf weitere neue Entwickler sollen diese schnell produktiv sein. Außerdem müssen alle Umgebungen zur Nachstellung von Problemen gleichartig aufgesetzt und konfiguriert sein.

A fool with a tool is still a fool.

Ein weiteres wichtiges Kriterium ist eine einfache Wartbarkeit und Administration. Probleme und Anforderungen sollen nicht mit einem Zoo aus tausend Tools erschlagen werden. Dabei ist eine wichtige Frage welche Programme selber gehostet werden sollen und wo ein Zukauf bzw. ein SaaS Modell sinnvoll ist. Natürlich gilt es den Datenschutz bei letzterem zu wahren. Selber administrierte Tools müssen immer auf dem aktuellsten Softwarestand und mit sicheren Konfigurationen bestückt sein.

Tools

Ansible

Eines der zwei zentralen Tools ist hier Ansible geworden. In den sogenannten Playbooks und den Konfigurationsdateien lässt sich die gesamte Umgebung definieren. Ansible verfolgt dabei den Ansatz, dass der Endzustand beschrieben wird. Die Definition für den Applikationsserver sieht dann also beispielsweise wie folgt aus.

  • [AppServer]
    • Server1
    • Server2
  • [AppServer Installation]
    • nginx: installiert
    • PM2: gestartet
    • DatendankVerbindung: DbServerCluster

Ich nutze Ansible sogar um die Server direkt bei dem Cloud Anbieter aufzusetzen. Somit gibt es zwei Ansible Projekte. Ein Projekt um die gesamte Serverumgebung inkl. Datenbankservern, VPNs, Firewall Regeln, SSH-Keys und Object Storages zu verwalten und ein zweites Projekt welches dann für jeden Server die Software und deren Konfiguration beschreibt. Durch die einfache Konfiguration können somit innerhalb weniger Minuten beliebig viele gleichartige Integrations-/Testumgebungen aufgebaut werden. Alle Umgebungen werden außerdem automatisch in die Monitoring- (Icinga/Nagios) und Loggingumgebung (Graylog 2) eingebunden. Ich habe mich bewusst gegen Datadog und ähnliche SaaS Dienste entschieden weil die Administration und Konfiguration von Tools wie Graylog, Icinga, Elasticsearch und vielen mehr mit Ansible ein Kinderspiel ist. Wichtig sind hier nur zuverlässige und sichere Konfigurationsdefinitionen und sauber abgetrennte Netzwerkbereiche und Firewall Regeln.

Jenkins

Die zweite Zentrale Software ist Jenkins. Dieser löst Deploybot ab um mehr Kontrolle über den gesamten Release Prozess zu haben. Jenkins kümmert sich um mehrere Teile. Zum einen prüft er sämtliche Check-Ins die auf GitHub getätigt werden. Dies umfasst die Prüfung der Code Qualität (Linting, SonarQube, …). Zum anderen führt Jenkins Unit Tests durch, startet die API Tests mit postman bzw. newman und führt die User Acceptance Tests von Selenium aus. Abhängig von den gewählten Branches automatisiert Jenkins auch das Deployment. Sämtliche commits auf den develop branch führen zu einem Deployment auf die Integrationsumgebung. Alle master commits müssen von mindestens zwei Entwicklern und Jenkins selber geprüft werden und führen dann zu einem Deployment auf die Produktionsumegbung.

Jeder Entwickler hat darüber hinaus jederzeit die Möglichkeit beliebige Branches auf Testumgebungen zu deployen. Dabei kann außerdem festgelegt werden welche Testdaten initial in den Datenbankservern zur Verfügung gestellt werden. Die Testumgebungen werden darüber hinaus in gesonderten virtuellen Netzwerken aufgebaut.

Produktion als lokale Entwicklunsumgebung

Ansible funktioniert auch mit Vagrant. Sämtliche Konfigurationen die für die Serverumgebungen definiert sind funktionieren somit auch lokal. Jeder Entwickler hat daher eine Umgebung deren Softwarestände und Konfiguration 1:1 mit der Produktion übereinstimmen. Lediglich die Datenbank ist in den Entwicklungsumgebung lokal anstelle von dedizierten Servern. Die lokalen Umgebungen können jederzeit auf Knopfdruck neu erstellt werden und erhalten direkt Testdaten. Neue Mitarbeiter lassen sich somit innerhalb von ca. 30 Minuten arbeitsfähig einbinden!

Zusammenfassung

Durch die Automatisierung des Aufbaus der lokalen Entwicklungsumgebung bis hin zur vollständigen Serverumgebung und der Automatisierung der Deployments findet jeder Entwickler jederzeit gleichartige Umgebungen vor. Fehler können lokal nachgestellt werden und notwenige Konfigurationsänderungen werden versioniert und auditiert zentral verwaltet. Jeder Entwickler kann jederzeit Änderungen von Code und Infrastruktur nachvollziehen und überprüfen.

 

Bildquelle: pixabay.com

IOTA, Bitcoin und Ethereum kaufen

Derzeit vergeht kein Tag an dem nicht irgendeine Webseite über Kryptowährungen (insbesondere Bitcoin) und deren neue Rekorde und Gefahren berichtet. Viele warnen davor, dass es sich hier um eine große Blase handelt die irgendwann platzen muss. Die Muster ähneln den letzten Entwicklungen von Aktienkursen kurz vor den großen Abstürzen der Geschichte. Trotzdem beflügeln die Zuwächse von 2700% und mehr den Traum von vielen Menschen um schnell reich zu werden. Wer sich auch (noch) an dem Hype beteiligen möchte und alles als großes Glücksspiel sieht hat derzeit viele Möglichkeiten die Währungen zu kaufen. Ein paar Hürden sind dabei aber zu überwinden.

DISCLAIMER: Um es noch einmal deutlich vorab zu sagen. Der Kurs der Kryptowährungen ist aktuell nicht vorauszusagen. Entweder verhundertfacht sich alles noch und es gibt riesige Gewinne zu holen oder das ganze System crash unvermittelt. Der Kauf von Bitcoin und Co. sollte daher auch nur mit Geld gemacht werden welches man auch für ein gutes Abendessen oder einem Besuch im Casino erübrigen kann. Es ist nach aktuellen Einschätzungen keine Geldanlage! Der Artikel ist keine Finanzberatung und Gewinne aus Spekulationen sind natürlich zu versteuern!

Genug der warnenden Worte. Jetzt geht es los mit dem Kauf der Währungen. Dabei ist der Erwerb des klassischen Bitcoins (BTC) und Ethereum (ETH) am einfachsten. Der Weg zur Währung IOTA geht über ein paar Zwischenstationen. Bei allen vorgestellten Wegen ist etwas Zeit einzuplanen. Sowohl die Identifikation auf den Plattformen (glücklicherweise nur einmalig) und der Transfer bzw. deren Bestätigung dauert ein paar Minuten.

Im Folgenden sind ein paar Portale vorgestellt über die ich meine Transaktionen abwickle. Wichtig ist hierbei zu wissen, dass es aufgrund des Booms auch eine Explosion an Handelsplätzen gibt. Einige davon sind durchaus mit Skepsis zu betrachten und manchen Börsen sind erhebliche Geldmengen abhandengekommen. Große Geldbeträge sollten daher immer nur in lokalen Wallets oder auf dem Papier liegen (dazu ggf. in einem weiteren Artikel mehr)!

bitcoin.de

Die Webseite bitcoin.de* ist ein Bitcoin-Marktplatz mit Sitz und Entwicklerteam in Deutschland. Neben Bitcoins können dort auch „Bitcoin Cash“ und Ether erworben werden. Die Registrierung ist sehr einfach mittels E-Mail-Adresse und einem einmaligen Passwort je Anmeldung durchzuführen. Danach wird einmalig das Bankkonto durch eine Überweisung verifiziert. Über die Funktion Kauf können die verschiedenen Währungen erworben werden. Dies erfolgt so, dass die gewünschte Menge eingetragen wird. Nach einigen Sekunden erscheinen dann mögliche Angebote. Durch den Klick auf Kauf können diese dann erworben werden. Die Bezahlung erfolgt per Überweisung direkt an den Verkäufer.

In der nicht verifizierten Version können maximal 2500€ transferiert werden und viele Angebote stehen nur Personen mit höheren Bewertungen zur Verfügung. Dadurch sind die Kurse für „Standardbenutzer“ mitunter schlechter. Es gibt zwei Wege dies zu verbessern. Entweder mittels Ident-Verfahren (Post-ident oder Video-ident) oder durch ein Konto bei der Fidor Bank. Beim Video-ident Anbieter häufen sich zum Zeitpunkt dieses Artikels gerade die Meldungen über extrem lange Wartezeiten auf den Prozess. Ein Konto bei der Fidor Bank ist kostenlos!

Coinbase

Die Webseite Coinbase* ermöglicht das Kaufen von Litecoin, Bitcoin und Ethereum mittels Bankeinzug oder Kreditkarte. Die Kreditkarte kann nach einem sehr kurzen Verifikationsprozess mit bis zu 500€ pro Monat für Transaktionen genutzt werden.

Zwischendurch gibt es dort Hinweise auf langsame Transfers „ETH Delays – We’re currently experiencing delays in processing some ETH transactions. Recent or new outbound transactions may remain pending longer than expected.“.

Bitfinex

Bei Bitfinex handelt es sich um eine der größten (Bitcoin) Handelsplattformen. Hier gibt es neben den klassischen Kryptowährungen auch den besagten IOTA, NEO, Monero, ZSCAH, Ripple und noch viele mehr. Dabei lassen sich viele Coins aus US-Dollar und Bitcoin eintauschen. Für manche Währungen gibt es auch die Möglichkeit Ethereum einzutauschen. Der Verifikationsprozess ist extrem langsam und umfangreich. Idealerweise ist Bitfinex also die Zwischenstation für den Handel mit den einzelnen Währungen. Über die Wallets (quasi die Konten) können von anderen Plattformen die Währungen übertragen werden (Transaktionsgebühren beachten!) und dann gehandelt werden. Zum Auszahlen lassen sich Bitcoins und Ethereum dann wieder zurück transferieren.

Kaufen

Bitcoins und Ethereum lassen sich zusammengefasst also sehr leicht bei bitcoin.de per Überweisung oder bei Coinbase mittels Kreditkarte und Bankeinzug erwerben oder auszahlen. Bei IOTA müssen die erworbenen Bitcoins oder Ethereum an die Wallets auf Bitfinex übertragen werden. Danach lassen sich diese über die Börse in IOTA traden. Sowohl bei den einzelnen Käufen als auch bei den Transfers fallen Transaktionskosten an!

Übersicht behalten und Steuern

Über mehrere Webseiten verteilt ist eine Übersicht nicht so einfach. Mit Hilfe von CoinTracking* lassen sich die Daten aller Käufe, Verkäufe und Transaktionen importieren. Dies erfolgt entweder per CSV Datei, wobei für jede Seite eine kurze Anleitung existiert oder per API, dies jedoch nur in der bezahlten Version. Als besonderes Feature können Steuer-Reports generiert werden. Hierbei sind die einzelnen Gewinne der Coins ausgewiesen mit verschiedenen Verrechnungsmodellen. Eine enorme Zeitersparnis bei der Steuererklärung.

Mehr Informationen

Die Webseite bitcoin.de betreibt ein deutschsprachiges Forum unter Coinforum.de.

* Der Link ist ein Affiliate Link. Für dich als Besucher entstehen keine Kosten oder Nachteile. Ich erhalte eine kleine Provision die zur Erhaltung der Webseite beiträgt. Vielen Dank!

Seit gestern gibt es die developer preview (alpha v1) der Google Assistant API zur freien Verfügung. Auf der Developer Webseite sind neben der Ankündigung einige Samples veröffentlicht. Der in Python geschriebene Code steht auch für den Raspberry Pi zur Verfügung.

Google Assistant

Der Google Assistant ist ein persönlicher Assistent von Google für Android, Google Home und den Messenger Google Allo, der sowohl gesprochene als auch eingegebene natürliche Sprache empfängt und verarbeitet. Die Software ist der Nachfolger von Google Now. (Quelle: Wikipedia) In diversen Android Produkten von Smartphones bis zum Smart TV ist der Assistent im Einsatz. Jetzt können alle Entwickler von dem Dienst profitieren.

Google Assistant mit dem Raspberry Pi

Auf der Beispiele Webseite findet sich eine kleine Anleitung zur Einbindung des Dienstes in den Raspberry Pi. Die Komponenten sind schnell gekauft. Neben dem Pi selber wird nur ein Mikrofon und ein Lautsprecher benötigt. Nach der Einrichtung erfolgt die Erstellung eines Projektes und die Generierung von API Keys.

Das Sample selber steht über den Python Paketverwaltung zur Verfügung und lässt sich mit wenigen Zeilen Code installieren.

 

Raspberry Pi Gesichtserkennung mit Microsoft Cognitive Services

Microsoft stellt mit den Microsoft Cognitive Services eine Reihe von Services für Bilderkennungsverfahren zur Verfügung. Die Face API bildet eine gute Schnittstelle um dem Raspberry Pi die Gesichtserkennung zu ermöglichen. Mit Hilfe einer Webcam und etwas JavaScript und Node.js lassen sich Bilder aufnehmen und zur Analyse hochladen. Der Cloud-Dienst ist dabei bis zu einer gewissen Menge von Abfragen kostenlos nutzbar.

Pakete installieren

Project Oxford for Node.js ist eine einfach zu nutzende Bibliothek um die Schnittstelle nutzen zu können.

$ mkdir face
$ cd face
$ npm install project-oxford

Account erstellen und API Key generieren

Auf der Microsoft Cognitive Services Webseite ist ein Account zu erstellen. Nach einer kurzen E-Mail Verifikation kann dort ein API Key erstellt werden. Dazu den Punkt „Face Preview – 30,000 transactions per month, 20 per minute.“ anklicken und nach Bestätigung der Lizenz den Subscribe Button klicken. Der Key erscheint nun in der Übersicht.

Foto generieren

Ein nützliches Programm für die Aufnahmen mit einer Webcam ist fswebcam. Es lässt sich einfach über die Kommandozeile zum Erstellen von Snapshots nutzen. Die Installation erfolgt direkt über das Paket.

$ sudo apt-get install fswebcam

Um mit dem Programm ein Screenshot ohne Zeitstempel im Bild aufzunehmen erfolgt der Aufruf mit der entsprechenden Option.

$ fswebcam --no-banner 001.jpg

Gesichter erkennen

Der folgende Code ist von der oben genannten project-oxford package Webseite übernommen. Es wurden aber Fehler behoben (faceAttributes anstelle von attributes) und der Code ist um die Anzeige mehrerer Gesichter ergänzt.

$ nano face.js
# oder vi ;-)
var oxford = require('project-oxford'),
    client = new oxford.Client('xxx KEY HIER EINTRAGEN xxx');

client.face.detect({
    path: '001.jpg',
    analyzesAge: true,
    analyzesGender: true
}).then(function (response) {
    for(var i = 0; i < response.length; i++) {
        console.log('Gesicht ' + i);
        console.log('  Alter: ' + response[i].faceAttributes.age);
        console.log('  Geschlecht: ' + response[i].faceAttributes.gender);
        console.log('  Position: Oben ' + response[i].faceRectangle.top + ' - Links ' + response[i].faceRectangle.left);
        console.log('  Position: Breite ' + response[i].faceRectangle.width + ' - Hoehe ' + response[i].faceRectangle.height);
    }
});

Aufnehmen und verschicken

Für die Einbindung von fswebcam bietet das node-webcam Paket einen Wrapper. Die Installation erfolgt wieder über npm.

$ npm install node-webcam

Das neue Paket binden wir nun in den Code mit ein. Da Dateiausgaben asynchron durchgeführt werden muss die Gesichtserkennung im Function Callback des node-webcam Codes stehen (oder als eigene Funktion). Trotz des Ausgabetyps jpeg endet der Dateiname in jpg!

var NodeWebcam = require('node-webcam');

var opts = {
    quality: 100,
    output: "jpeg",
    verbose: true
}

var oxford = require('project-oxford'),
    client = new oxford.Client('xxx KEY HIER EINTRAGEN xxx');

NodeWebcam.capture('001', opts, function(err, data) {
    if(!err) {
        console.log('Image created!');
    }

    client.face.detect({
        path: '001.jpg',
        analyzesAge: true,
        analyzesGender: true
    }).then(function (response) {
        for(var i = 0; i < response.length; i++) {
            console.log('Gesicht ' + i);
            console.log('  Alter: ' + response[i].faceAttributes.age);
            console.log('  Geschlecht: ' + response[i].faceAttributes.gender);
            console.log('  Position: Oben ' + response[i].faceRectangle.top + ' - Links ' + response[i].faceRectangle.left);
            console.log('  Position: Breite ' + response[i].faceRectangle.width + ' - Hoehe ' + response[i].faceRectangle.height);
        }
    });
});

Emotionen erkennen

Das Erkennen von Emotionen ist ebenfalls einfach umzusetzen. Allerdings weißt das Paket nicht auf die Notwendigkeit eines zweiten Clientobjektes und eines weiteren API Keys hin. Auf der Microsoft Webseite muss ebenfalls das API „Emotion – Preview – 30,000 transactions per month, 20 per minute.“ aktiviert werden. Der API Key ist dann an einen weiteren client (hier emoclient (Haha, super Name, ist mir aber erst später nach dem Schreiben aufgefallen)) zu übergeben.

var oxford = require('project-oxford'),
    emoclient = new oxford.Client('xxx ANDEREN KEY HIER EINTRAGEN xxx');

emoclient.emotion.analyzeEmotion({
    path: '001.jpg',
}).then(function (response) {
    console.log(response);
});
Parrot AR Drone 2.0 mit Raspberry Pi steuern

Die Parrot AR.Drone 2.0 Power Edition ist schon etwas älter, aufgrund der hervorragenden Entwicklungsumgebungen eignet sich der Quadrocopter jedoch sehr gut für ein Projekt mit dem Raspberry Pi. Im Folgenden soll die Steuerung mit Hilfe von, auf Node.js aufbauenden, Skripten erfolgen. Für das Fliegen über den Minicomputer sind keine Vorerfahrungen notwendig. Der Copter stabilisiert sich eigenständig in der Luft und die Kommunikation erfolgt direkt über WLAN. Das Linux Betriebssystem des Quadrocopter ist in Teilen konfigurierbar. Außerdem verfügt das Gerät über zwei Kameras welche sich zur Gesichtserkennung oder für Videoaufnahmen eignen.

Alle Befehle der Parrot AR.Drone 2.0 sind im AR.Drone Developer Guide beschrieben. Das mehrere hundert Seiten umfassende Werk bietet sich aber eher zum Nachschlagen an. Unter dem Projekt NodeCopter hacking ist eine Node.js basierende Skript Bibliothek entstanden. Diese bildet die Grundlage für die folgende Implementierung. Die Idee der Gesichtserkennung basiert dabei auf dem Artikel How to build an autonomous, voice-controlled, face-recognizing drone for $200. In dem Artikel bilden die Microsoft Azure Cognitive Services die Grundlage. Für die Spracheingabe lässt sich auch IBM Watson nutzen.

Pakete installieren mit npm

Zuerst erfolgt das Anlegen eines Verzeichnisses in dem die Daten liegen. Die Initialisierung über npm (Node Package Manager) ist hierbei Optional. Das Tool generiert eine package.json in der später die Abhängigkeiten abgelegt werden, falls der Code beispielsweise auf github veröffentlicht werden soll.

$ mkdir ardrone
$ cd ardrone
#OPTIONAL
$ npm init
This utility will walk you through creating a package.json file.
name: (ardrone)
version: (1.0.0)
description: Parrot AR.Drone 2.0 Control
entry point: (index.js)
test command:
git repository:
keywords: Drone
author: Sebastian Pech
license: (ISC)
About to write to /home/pi/ardrone/package.json

Im Anschluss daran erfolgt die Installation der ar-drone Pakete.

$ npm install ar-drone
# ODER mit -save wenn die package.json über npm init erstellt wurde
$ npm install ar-drone -save

WLAN einrichten

Die Parrot AR.Drone stellt ein öffentliches und unverschlüsseltes WLAN zur Verfügung. Zum kontrollieren des Quadrocopter muss sich der Raspberry Pi mit diesem verbinden. Danach lassen sich die Steuerbefehle übermitteln.

$ sudo iwlist wlan0 scan

Nach dem Scan sollte in der Liste ein Eintrag mit _ESSID:“ardrone2123456″ oder ähnlichem erscheinen. Zu diesem soll nun die Verbindung hergestellt werden.

$ sudo nano /etc/wpa_supplicant/wpa_supplicant.conf
network={
        ssid="ardrone2_123456"
        key_mgmt=NONE
}
# Bei mehreren WLAN Einträgen können diese priorisiert sein
network={
        ssid="ardrone2_123456"
        key_mgmt=NONE
        priority=1
}

Die korrekte Verbindung lässt sich dann wie folgt ermitteln.

$ wpa_cli status

Weitere Informationen im Fehlerfall finden sich im Setting WiFi up via the command line Artikel. Mit einem weiteren WLAN Empfänger können auch zwei Netze genutzt werden.

Drone steuern mit dem Raspberry Pi

Nun kommt der spannendste Teil des ganzen Projektes. Der Quadrocopter soll sich magisch in die Luft erheben, etwas drehen und dann wieder landen. Dazu dient der folgende Code vom Node Copter Projekt in einer Datei namens ardrone.js.

$ nano ardrone.js
# oder vi ;-)
var arDrone = require('ar-drone');
var client = arDrone.createClient();

client.takeoff();

client
  .after(5000, function() {
    this.clockwise(0.5);
  })
  .after(1000, function() {
    this.stop();
    this.land();
  });

Checkliste vor dem Ausführen:

  • Smartphone nicht verbunden (oder Pooling aktiviert)
  • Raspberry Pi mit der Drone verbunden
  • Akku voll
  • Indoor-Gehäuse angebracht
  • Kinder, Tiere, Glas, Papierblätter, … außer Reichweite gebracht
  • Keinen Mut angetrunken (Nüchtern! ;-))

Dann kann nicht mehr viel schief gehen (außer einige Crashes, usw.) … Viel Glück!

$ node ardrone.js

Sicherheit

Das WLAN der AR.Drone ist unverschlüsselt, ein Zugriff ist also jederzeit von jedem Gerät möglich! Das Anlegen eines WPA Schlüssels kann hier Abhilfe schaffen.

Grundsätzlich gelten alle Sicherheitsbestimmungen der Anleitung. Ich rate dazu, die Drone drinnen nur mit dem Indoor-Gehäuse zu fliegen. Die Bewegung der Quadrocopter ist dadurch etwas träger und schwammiger aber die Einrichtung wird es einem danken.

Um das Unsanfte Fallen der Drone ein bisschen zu verbessern kann ein Landegestell aus Kabelbindern helfen.

Probleme mit dem Video

Die Beispiele png-stream.js und tcp-video-stream.js setzen das veraltete FFmpeg voraus. Die Installation ist leider nicht ganz trivial. Dennoch gibt es ein paar gute Anleitungen für experimentierfreudige Bastler. How to compile ffmpeg on a Raspberry Pi und Compiling software from source code on the raspberry pi – the ffmpeg suite.

# Wenn mstorsjo-fdk-aac und faac-1.28 installiert sind:
$ git clone http://source.ffmpeg.org/git/ffmpeg.git
$ cd ffmpeg
$ ./configure --prefix=/usr/local --enable-gpl --enable-nonfree --enable-libass 
  --enable-libfdk-aac --enable-libfreetype --enable-libmp3lame --enable-libopus 
  --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libxvid
$ make && sudo make install
$ ffmpeg