Benutzer-Werkzeuge

Webseiten-Werkzeuge


repo:automatisiertes_rpm_und_repository_erstellen

Dies ist eine alte Version des Dokuments!



Warning: preg_match(): Compilation failed: invalid range in character class at offset 3154 in /srv/www/htdocs/udo/singollo.de/linux.singollo.de/public_html/inc/parser/lexer.php on line 118
A PCRE internal error occured. This might be caused by a faulty plugin

===== 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 ==== * gpg-Key für signiertes RPM (siehe Artikel [[repo:RPM selbst erstellen#signieren|RPM selbst erstellen - Abschnitt "Signieren"]]) * gpg-Key für Repository (siehe Artikel [[repo:Repository erstellen#repository_signieren|Repository erstellen - Abschnitt "Repository Signieren"]]) * ssh-Zugang mittels Keys (siehe Artikel [[ssh:auth_keys|ssh: Mit Schlüsseln authentifizieren]]) ==== 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 [[repo:automatisiertes_rpm_und_repository_erstellen#entferntes_script|createrepo.sh]] aufgerufen. === Festes Script === Dieses Script läuft unter openSUSE 11.3. == createrpm-elela.sh == <code bash> #!/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" </code> === 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 == <code bash> #!/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/ | grep .rpm` scp ~/rpmbuild/RPMS/$ARCH/$1*.rpm $USER:$REPO/$ARCH ssh $USER "./createrepo.sh" </code> 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 [[wpde>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 == <code bash> #!/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 </code> Den Pfad zum Repository auf dem Server und das Passwort (Passphrase) des Repo-Keys müssen angepasst werden.

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