Wenn man seine ersten eigenen RPMs erstellt hat, wünscht man sich auch eine Möglichkeit, diese zentral über ein Repository (Repository) zur Verfügung stellen. Neben einem Web- oder FTP-Server benötigt man noch einen GPG-Schlüssel. Ich erkläre die Vorgehensweise am Beispiel meines eigenen Repositories auf diesen Server.
repo/i586/ repo/x86_64 repo/noarch/ repo/repodata/ repo/singollo.repo
Die Verzeichnisse i586 x86_64 und noarch (weitere Verzeichnisse für jede weitere Architektur sind sinnvoll, entsprechend dem Verzeichnis /usr/src/packages/RPMS) enthalten die selbstgebauten RPMs.
Jedes Repository benötigt einige Informationen darüber, was es beinhaltet. Dazu gehören u.a. die Dateinamen der im Repo enthaltenen RPMs. Diese Metadaten werden durch createrepo erstellt. Für den ersten Aufruf oder bei signifikanten Änderungen (z.B. ein bestehendes RPM wurde überschrieben) sollte man die Datenbank neu erstellen. Dazu wird die Option -d mitgegeben.
createrepo -v -d repo/
Werden neue RPMs in das Repo gespeichert, reicht auch ein Update der Metadaten.
createrepo -v --update repo/
Damit auch das Repository in die Repo-Verwaltung aufgenommen werden kann, benötigt man eine Info-Datei über das Repo selbst. Hier am Beispiel von http://linux.singollo.de/repo/singollo.repo:
[singollo.de] name=singollo.de baseurl=http://linux.singollo.de/repo/ type=rpm-md enable=1 gpgcheck=1 gpgkey=http://linux.singollo.de/repo/repodata/repomd.xml.asc
Die einzelnen Variablen sind im Prinzip selbsterklärend:
Für die erforderliche Signatur werden die beiden Variablen gpgcheck (1 = ein, 0 = aus) und gpgkey benötigt.
Um das Repository zu signieren, muss man einen gültigen GPG-Schlüssel besitzen. Für diejenigen, die noch keinen haben, müssen einen erstellen:
gpg --gen-key
Wenn bereits einer oder mehrere vorhanden sein sollten, kann man mit
gpg -k
eine Liste aller verfügbaren Schlüssel ausgeben lassen. Da ich selbst mehrere Schlüssel besitze, suche ich mir einen passenden mittels
gpg -k "Udo Neist"
aus der Liste heraus. Damit der Schlüssel auch öffentlich überprüfbar ist, sendet man diesen an einen Keyserver, wobei optional ein Keyserver angegeben werden kann. Mit folgender Zeile sendet man den Schlüssel an den Standard-Keyserver:
gpg --send-keys 082950ff
Den Schlüssel sollte man auch auf Gültigkeit prüfen:
gpg --check-sigs 082950ff
Den öffentlich Teil des Schlüssels exportiere ich mit
gpg -a --export 082950ff >repodata/repomd.xml.key
Mit dem letzten Schritt signiere ich das Repo und kann es damit per zypper einbinden.
gpg -a --detach-sign repodata/repomd.xml
Wenn die obigen Schritte erfolgreich verlaufen sind, so bindet man das Repository mittels zypper ein. Dabei muss man die .repo-Datei angeben, in YaST2 reicht es, wenn nur die URL eingeben wird.
caesar:~ # zypper ar -f http://linux.singollo.de/repo/singollo.repo Repository 'singollo.de' wird hinzugefügt [fertig] Repository 'singollo.de' erfolgreich hinzugefügt Aktiviert: Ja Autoaktualisierung: Ja URI: http://linux.singollo.de/repo/
Mittels
caesar:~ # zypper -v ref singollo.de Ausführlichkeitsgrad: 1 Programmargumente ohne Option: 'singollo.de' Ziel wird initialisiert Festgelegte Repositories: singollo.de Es wird überprüft, ob die Metadaten für singollo.de aktualisiert werden müssen. Abruf: repomd.xml.asc [fertig] Abruf: repomd.xml.key [fertig] Abruf: repomd.xml [fertig] Abruf: other.sqlite.bz2 [fertig] Abruf: filelists.sqlite.bz2 [fertig (0 B/s)] Abruf: primary.sqlite.bz2 [fertig (0 B/s)] Abruf: primary.xml.gz [fertig] Metadaten von Repository 'singollo.de' werden abgerufen [fertig] Zwischenspeicher für Repository 'singollo.de' wird erzeugt [fertig] Die festgelegten Repositories wurden aktualisiert.
binde ich das Repository in die Liste der Repos ein. Durch gpgcheck=1 überprüft zypper auch den GPG-Schlüssel.
Das Repository kann man testen, in dem man den öffentlichen GPG-Schlüssel als RPM installiert.
caesar:~ # zypper in rpmkey-gpg-pubkey-082950ff-4d270616 Daten des Repositorys laden ... Installierte Pakete lesen ... Paketabhängigkeiten auflösen ... Das folgende NEUE Paket wird installiert: rpmkey-gpg-pubkey-082950ff-4d270616 1 neues Paket zu installieren. Gesamtgröße des Downloads: 4,0 KiB. Nach der Operation werden zusätzlich 2,0 KiB belegt. Fortfahren? [j/n/?] (j): Paket rpmkey-gpg-pubkey-082950ff-4d270616-0.1-1.noarch wird abgerufen (1/1), 4,0 KiB (2,0 KiB entpackt) Abruf: rpmkey-gpg-pubkey-082950ff-4d270616-0.1-1.noarch.rpm [fertig] Installation von: rpmkey-gpg-pubkey-082950ff-4d270616-0.1-1 [fertig]