Benutzer-Werkzeuge

Webseiten-Werkzeuge


Writing /srv/www/htdocs/udo/singollo.de/linux.singollo.de/public_html/data/cache/6/6a72d5504a6f05dcfff26a0abc4071b7.metadata failed
repo:automatisiertes_rpm_und_repository_erstellen

Automatisiertes rpmbuild und createrepo

Wenn man desöfteren ein RPM erstellt und es in das eigene Repository kopieren will, dann sind das einige Schritte auf der Shell. Das ganze lässt sich natürlich auch mit einem Script automatisieren.

Vorrausetzungen

Lokales Script

Ich habe in den Artikeln „RPM selbst erstellen“ und „Repository erstellen“ am Beispiel des Programms EleLa beschrieben, wie man ein RPM selbst erstellen und in ein Repository einstellen kann. Am gleichen Beispiel zeige ich hier, wie man schnell und einfach man diese Schritte automatisieren kann.

Das RPM wird mittels rpmbuild und den passenden Optionen aufgerufen (wie man es auch manuell tun würde). Hier verwende ich die Übergabe der Versionsnummer von EleLa als zusätzliche Möglichkeit. Natürlich kann man hier auch gleich den ganzen Namen des SPEC-Files und/oder das passende Target übergeben. Nach erfolgreichen Erstellen des RPMs, wird es per scp auf den angegebenen Server kopiert und dort das Script createrepo.sh aufgerufen.

Festes Script

Dieses Script läuft unter openSUSE 11.3.

createrpm-elela.sh
#!/bin/sh
 
rpmbuild -v -bb /usr/src/packages/SPECS/EleLa-$1.spec --target=i586 --sign
scp /usr/src/packages/RPMS/i586/EleLa-$1*.rpm USER@SERVER:PFAD_ZU_REPO/i586
ssh USER@SERVER "./createrepo.sh"

Universelles Script

Unter openSUSE 12.1 lief das o.g. createrpm-elela.sh nicht mehr als normaler User durch, es blieb beim Signieren hängen. So hab ich das Signieren geändert. Es wird nicht (!) auf eventuelle Fehler beim Bauen, Signieren oder Kopieren geprüft, dazu müssten noch die Rückgabewerte ausgewertet werden.

createrpm.sh
#!/bin/sh
 
ARCH="x86_64"
USER="USER@SERVER"
REPO="PFAD_ZU_REPO"
 
rpmbuild -v -bb ~/rpmbuild/SPECS/$1.spec --target=$ARCH
rpmsign --resign `find ~/rpmbuild/ -name "*.rpm"` 
scp ~/rpmbuild/RPMS/$ARCH/$1*.rpm $USER:$REPO/$ARCH
ssh $USER "./createrepo.sh"

Die Angaben für das SPEC-File und das entsprechende RPM sowie die Daten für den SSH-Zugang, den Pfad zum Repository und zum Script „createrepo.sh“ auf dem Server sind natürlich auf die eigenen Bedürfnisse anzupassen.

Entferntes Script

Ist das RPM-File im Repository per scp gelandet, so muss man die Metadaten aktualisieren. Da allerdings die Option update von createrepo nicht immer sauber funktioniert (bei mir hatte die Option beim Testen einen Fehler ausgegeben), verzichten wir hier und müssen halt ein paar Sekunden länger warten. Für die Signierung des Repos wird erstmal die alte Signierung gelöscht, um sie dann neu zu erstellen. gpg bietet die Möglichkeit, das Passwort (Passphrase) auch über eine Pipe_(Informatik) entgegen zu nehmen. Diese Tatsache allerdings macht es unbedingt notwendig, das Script im eigenen Verzeichnis zu speichern und mit chmod 0700 nur für sich selbst ausführbar zu machen.

createrepo.sh
#!/bin/sh
 
createrepo -v PFAD_ZU_REPO
gpg -a --export KEY >PFAD_ZU_REPO/repodata/repomd.xml.key
rm PFAD_ZU_REPO/repodata/repomd.xml.asc
echo "PASSWORT" | gpg -a --detach-sign --batch --passphrase-fd 0 PFAD_ZU_REPO/repodata/repomd.xml

Den Pfad zum Repository auf dem Server und das Passwort (Passphrase) des Repo-Keys müssen angepasst werden.

repo/automatisiertes_rpm_und_repository_erstellen.txt · Zuletzt geändert: 07.10.2012 18:31 (Externe Bearbeitung)