APT-Repository aufsetzen

Posted on Tue 17 July 2012 in linux • 2 min read

Motivation

Für ein eigenes APT-Repository gibt es mehrere Gründe. Ich hatte den Anreiz, da ich ein Metapaket erstellt habe, mit welchem ich auf jedem neu aufgesetztem Computer immer die selben Pakete installieren kann. Um das Metapaket bereitstellen zu können, und bei einer Änderung der zu installierenden Pakete wenig aufwand zu haben, habe ich dieses in ein eigenes Repository gepackt. Ist leichter als es sich anhört:) Als das Repository "fertig" war, habe ich es gleich erweitert, da ich Probleme mit den Paketquellen von Owncloud habe. Ich habe also deren Quelle gespiegelt und die .deb-Pakete übernommen (Und das ganze gleich mit einem Skript automatisiert).

Umsetzung

Für eine Paketquelle braucht man zunächst mal einen PGP-Schlüssel, um diese signieren zu können. Es sei noch anzumerken, dass ich einen recht einfachen Weg gegangen bin, der dafür leicht umzusetzen ist. Dafür werden alle Pakete unterhalb des Root-Ordner (hier /path/to/repo) des Repos platziert, eine Aufteilung in Unterordner ist kein Problem. Nun wird das folgende Script ausgeführt, es erstellt die benötigten Release und Package Dateien und signiert die Releasedatei. Das Script sollte somit unter dem Benutzer ausgeführt werden, unter welchem auch das PGP-Zertifikat erstellt worden ist. Eine etwas detailliertere Beschriebung findet man bei Michael Stapelberg, wo ich auch die meisten Teile hergenommen habe.

Script update_aptrepo.sh:

make_apt_archive(){
# alte Dateien löschen
rm -f Release
rm -f Release.gpg
rm -f Packages
rm -f Packages.gz

# Packages erzeugen, jeweils mit und ohne gzip
apt-ftparchive packages . > Packages
gzip -9 Packages
apt-ftparchive packages . > Packages

# Release Datei erzeugen
apt-ftparchive release . > Release

# Signieren
gpg --output Release.gpg -ba Release
}

cd /path/to/archiv
make_apt_archive

Es ist nun ein leichtes, mehrere Repositories in Unterordner des Webroots zu erzeugen, indem zum Beispiel einfach ein

cd /path/to/otherarchiv
make_apt_archive

An das Script angehängt wird.

Anschließend wird der Ordner mit dem Repo über einen Webserver freigegeben, so dass der erste Ordner über

http://repo.example.com/archiv

und der zweite über

http://repo.example.com/otherarchiv

zu erreichen ist. Die Paketquelle kann dann hinzugefügt werden, die entsprechende Zeile für die sources.list lautet dann

deb http://repo.example.com/archiv /

Wenn man nun versucht, Pakete aus dieser Paketquelle zu installieren, wird die Paketverwaltung meckern, da sie die Authentizität der Paketquelle nicht überprüfen kann. Dies liegt daran, dass wir APT noch mit dem PGP-Public-Key bekannt machen müssen. Angenommen, der Publickey ist unter der Datei PublicKey gespeichert, so lautet der Befehl

apt-key add PublicKey

Dann sollte die Paketquelle ordnungsgemäß funktionieren.

Wer doch lieber ein etwas komplexeres Setting möchte, sollte sich den Artikel von Pro-Linux einmal durchlesen.

Quellen