Create Signed APT repository
- in Deutsch | - in English |
Dieser Artikel erfordert mehr Erfahrung im Umgang mit der Dreambox / Linux und ist daher nur für fortgeschrittene Benutzer gedacht. |
Wenn jemand erfolgreich ein Dreambox SDK eingerichtet hat, z.B. für OE 2.2, dann ist dieser Artikel sicherlich interessant. Er beschreibt das einrichten eines signierten APT Repositories. So könnt ihr eure gebauten Pakete via Paketverwaltung (APT) der Dreambox installieren.
Basis des hier beschriebenen Artikels ist eine DEB basierende Distribution (z.B. Ubuntu, Mint, Debian, usw.) die auf eurem Rechner mit dem Dreambox SDK läuft. Eine Webserver brauchen wir auch, welcher die Daten für die Dreambox bereitstellen wird.
Inhaltsverzeichnis
Repository erstellen
Abhängigkeiten installieren
sudo apt-get install dpkg-dev apache2 dpkg-sig
GPG Schlüssel erstellen
Jetzt erstellen wir einen GPG Schlüssel für das signieren der Pakete und des Repositories.
gpg --gen-key
Die einzelnen Abfragen werde ich hier nicht genauer beschreiben. Funktioniert mit den Standard Abfragen. Gebt am Schluss eine Passphrase ein und wartet bis das erzeugen erfolgreich abgeschlossen ist. Einfach geduldig sein und mit der Maus / Keyboard ein bisschen herumfuchteln.
Abfragen des Schlüssels
Informationen über den erstellen Schlüssel könnt ihr mit folgendem Befehl abfragen.
gpg --list-keys
Public Key exportieren/speichern
Erstellt nun den Öffentlichen Schlüssel mit dem folgenden Befehl und speicher die Ausgabe in eine Datei (z.B. mein_public.key
). Der Schlüssel muss im root Verzeichnis des Webservers platziert werden und wird später von den Client-Dreamboxen geladen, damit Pakete installiert werden können.
gpg --output keyFile --armor --export eureid_oder_name
Webserver einrichten
Die Dateistruktur des Webservers habe ich wie folgt eingerichtet für eine DM 8000 HD PVR. Beim Erstellen der Pakete via Dreambox SDK erhält man z.B folgende Verzeichnisse all
, dm8000
, mips32el
. So habe ich hier unter dem vorkonfiguriertem Webroot Verzeichnis des Webservers die Pakete abgelegt. Z.B. unter:
/var/www/html/repository/dm8000/all /var/www/html/repository/dm8000/dm8000 /var/www/html/repository/dm8000/mip32el
Pakete signieren
Die Pakete in den Verzeichnissen könnt ihr mit dem folgenden Befehl signieren.
dpkg-sig --sign *.deb
Repository Index-Dateien erzeugen
Erstellt mit den folgenden Befehlen die benötigte Packages Index-Datei und komprimiert sie. Eine unkomprimierte Datei muss auch enthalten sein.
apt-ftparchive packages . > Packages gzip -c Packages > Packages.gz
Release, InRelease, and Release.gpg Datei erstellen
Release Dateien erstellen.
apt-ftparchive release . > Release gpg --clearsign -o InRelease Release gpg -abs -o Release.gpg Release
Dreambox einrichten
Public Key imporieren
Auf der Dreambox muss der Öffentliche Schlüssel importiert werden mit dem folgenden Befehl. Server Ip-Adresse und Verzeichniss muss sicherlich angepasst werden.
wget -O - http://server_ip/mein_public.key | apt-key add -
Paketlisten anpassen
Nun müsst ihr auf der Dreambox im Verzeichnis /etc/apt/sources.list
drei Dateien erstellen für die verfügbaren Feeds (z.B. all, dm8000, mips32el). Die folgenden Befehlen zeigen den Inhalt der Dateien.
root@dm8000:~# cat /etc/apt/sources.list.d/all-feed.list deb http://server_ip/repository/dm8000/all ./ root@dm8000:~# cat /etc/apt/sources.list.d/dm8000-feed.list deb http://server_ip/repository/dm8000/dm8000 ./ root@dm8000:~# cat /etc/apt/sources.list.d/mips32el-feed.list deb http://server_ip/repository/dm8000/mips32el ./ root@dm8000:~#
Paketliste aktualisieren / Pakete installieren
Ist alles eingerichtet könnt ihr von der Dreambox die Paketlisten aktualisieren mit dem Befehl:
apt-get update
Anschliessend könnt ihr die verfügbaren Pakete vom Feed installieren, usw.
Tipps & Tricks
Script zum Erstellen eines signierten Repositories
Dieser Abschnitt ist ein Beispiel, wie ein signiertes Repsitory erstellt werden kann. |
Am einfachstes ist es sicherlich ein Script zu erstellen, welches die Daten für ein Repository der Dreambox bereitstellt. Z.B kann ein solches Script wie folgt ausschauen, um die einzelnen Schritte zeigen. Ist aber nicht zum Copy & Pasten empfohlen, und dient nur als grobe Vorlage für das erstellen eines Repos für die Dreambox.
#!/bin/bash #Webserver dirs erstellen mkdir -p /var/www/html/repository/dm8000/{all,dm8000,mips32el} #Pakete nach webserver dir kopieren cp -u /media/oe/oe2.2/opendreambox/build/dm8000/tmp-eglibc/deploy/deb/all/* /var/www/html/repository/dm8000/all cp -u /media/oe/oe2.2/opendreambox/build/dm8000/tmp-eglibc/deploy/deb/dm8000/* /var/www/html/repository/dm8000/dm8000 cp -u /media/oe/oe2.2/opendreambox/build/dm8000/tmp-eglibc/deploy/deb/mips32el/* /var/www/html/repository/dm8000/mips32el #Pakete signieren dpkg-sig -s -p builder /var/www/html/repository/dm8000/all/*.deb dpkg-sig -s -p builder /var/www/html/repository/dm8000/dm8000/*.deb --batch dpkg-sig -s -p builder /var/www/html/repository/dm8000/mips32el/*.deb --batch #Alte Sachen entfernen rm -f /var/www/html/repository/dm8000/all/Packages Packages.gz Packages.xz Release.gpg rm -f /var/www/html/repository/dm8000/dm8000/Packages Packages.gz Packages.xz Release.gpg rm -f /var/www/html/repository/dm8000/mips32el/Packages Packages.gz Packages.xz Release.gpg #Indexen dpkg-scanpackages -t deb /var/www/html/repository/dm8000/all/ ./ | tee Packages | gzip -9c > Packages.gz dpkg-scanpackages -t deb /var/www/html/repository/dm8000/dm8000/ ./ | tee Packages | gzip -9c > Packages.gz dpkg-scanpackages -t deb /var/www/html/repository/dm8000/mips32el/ ./ | tee Packages | gzip -9c > Packages.gz #Indexen cd /var/www/html/repository/dm8000/all && apt-ftparchive packages . > Packages && gzip -c Packages > Packages.gz cd /var/www/html/repository/dm8000/dm8000 && apt-ftparchive packages . > Packages && gzip -c Packages > Packages.gz cd /var/www/html/repository/dm8000/mips32el && apt-ftparchive packages . > Packages && gzip -c Packages > Packages.gz #Repo signieren cd /var/www/html/repository/dm8000/all && apt-ftparchive release . > Release && gpg --clearsign -o InRelease Release && gpg -abs -o Release.gpg Release cd /var/www/html/repository/dm8000/dm8000 && apt-ftparchive release . > Release && gpg --clearsign -o InRelease Release && gpg -abs -o Release.gpg Release cd /var/www/html/repository/dm8000/mips32el && apt-ftparchive release . > Release && gpg --clearsign -o InRelease Release && gpg -abs -o Release.gpg Release