Benutzer-Werkzeuge

Webseiten-Werkzeuge


Writing /srv/www/htdocs/udo/singollo.de/linux.singollo.de/public_html/data/cache/9/9fa38e9e7373f0ca8679bde661301963.metadata failed
repo:repository_erstellen

Repository erstellen

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.

Verzeichnisstruktur

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.

Metadaten

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:

  • name = Name des Repositories
  • baseurl = URL
  • type = rpm-md (hier gibt es verschiedene Möglichkeiten, aber dieser Artikel beschäftigt sich mit rpm-md)
  • enable = 1 (schaltet das Repo aktiv)

Für die erforderliche Signatur werden die beiden Variablen gpgcheck (1 = ein, 0 = aus) und gpgkey benötigt.

Repository signieren

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

Repository einbinden

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]
repo/repository_erstellen.txt · Zuletzt geändert: 07.10.2012 18:31 (Externe Bearbeitung)