Create Signed APT repository

Aus Gemini-Wiki
Version vom 5. Oktober 2014, 08:10 Uhr von Bschaar (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „{|width="40%" |Bild:deutsch.png - in Deutsch |Bild:english.png - in English …“)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen
Deutsch.png - in Deutsch English.png - in English
Ambox attention.png 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.

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

Ambox attention.png 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

Weblinks