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.