Pakete mit dem PackMan Build Service erstellen.
Gibt es bei Detlef auf Anfrage per Mail. ;)
Um mit dem PMBS ein Paket zu bauen braucht dieser unter ”/srv/pmbs/files” als erstes ein Verzeichnis mit dem Paketnamen. In diesem Verzeichnis müssen alle Dateien liegen, die “rpm” zum bauen der RPMs benötigt, also Sources, Specfile, Patches etc..
Sind die Sourcen im Specfile als http/https/ftp angegeben und befinden sich nicht in diesem Ordner, werden diese automatisch vom PMBS gedownloadet.
Besonderheiten: - Mit dem Namen des Specfiles kann man den PackMan-Namen in der PackMan-Datenbank bestimmen. - In dem Specfile darf "Packager", "Distribution" und "Vendor" nicht gesetzt sein, das erledigt PMBS automatisch. - In dem Specfile sollte mit "make %{?jobs:-j%{jobs}}" compiliert werden damit beide CPUs genutzt werden
Zusätzlich wird eine Bauanweisung in dem Verzeichnis erwartet, diese muss “build.conf” heissen.
die “build.conf” ist in mehrere Abschnitte unterteilt, der erste Abschnitt “info” enthält allgemeine Infos zum Paket, die für alle zu bauenden RPMs gültig sind.
Beispiel Abschnitt “info”:
[[info]] packager: Max Mustermann <max@mustermann.foo> -> (zwingend erforderlich, sonst können die RPMs nicht in der PM-DB eingetragen werden specfile: beispiel.spec -> (zwingend erforderlich, wie soll PMBS sonst wissen, was er bauen soll ;) upload: 1 -> (nicht zwingend erforderlich, Standard = 1 (1=on, 0=off), RPMs nach Pluto uploaden commit: 1 -> (nicht zwingend erforderlich, Standard = 1 (1=on, 0=off), RPMs in die PM-DB eintragen email: 1 -> (nicht zwingend erforderlich, Standard = 1 (1=on, 0=off), Sende Info-Mail an den Jobersteller (SUCCESS/FAILED) keep: 0 -> (nicht zwingend erforderlich, Standard = 0 (1=on, 0=off), Behalte alte Releases auf Pluto, es wird das neue Release zusätzlich in die PM-DB eingetragen baselibs: 0 -> (nicht zwingend erforderlich, Standard = 0 (1=on, 0=off), Es werden 32bit-baselibs für x86_64 gebaut testbuild: 0 -> (nicht zwingend erforderlich, Standard = 0 (1=on, 0=off), Es wird nur gebaut, kein speichern im lokalem Repository, kein Upload, kein Commit, einfach nur zum testen ;)
Als nächstes kommen die Anweisungen, für welche Distribution/Release/Arch gebaut werden soll. Diese Abschnitte beginnen immer mit Nr. Alle Angaben sind zwingend erforderlich.
Beispiel Abschnitt ”1”
[[1]] dist: openSUSE -> Name der Distribution, genaue Bezeichnung beachten (siehe "Zur Zeit unterstütze Distributionen") release: 10.2 -> Release der Dist. build: 1 -> 1 = wird gebaut, 0 = wird nicht gebaut, diese Option kann man nutzen, um für eine Dist. temporär den Build abzuschalten, ohne gleich den kompletten Abschnitt löschen zu müssen noarch: 0 i586: 1 i686: 0 x86_64: 1 -> Bauen von Arch an- oder abschalten
Der nächste Abschnitt würde hier die 2 haben, usw., usw……
Für folgende Distributionen kann PMBS RPMs erstellen:
SuSE 10.1 openSUSE 10.2 openSUSE 10.3 openSUSE 11.0
Ein
touch /srv/pmbs/jobs/$paketname
reicht um PMBS die Anweisung zu geben, das Paket zu bauen.
”/srv/pmbs/jobs/” wird nach Erstellungsdatum abgearbeitet, d.h., alte Jobs zuerst. Habe ich z.B. “foo”, das “libbar” braucht, einfach erst “libbar” touchen und anschließend “bar”. “libfoo” ist sofort nach dem bauen verfügbar für weitere Builds.
Nach jedem Job verschickt PMBS eine Mail (email: 1) an den Ersteller des Jobs mit Infos was gebaut oder nicht gebaut wurde. Bei einem Fehler werden zusätzlich die letzten 50 Zeilen des Buildlogs verschickt, das den Fehler verursacht hat.
Die Logfiles für jedes Paket sind unter ”/srv/pmbs/logs/$package” zu finden.
Das aktuelle pm-upload-job-Skript ist immer im packman-SVN verfügbar.
pm-tools/pm-upload-job
Um das pm-upload Skript nutzen zu können ist der folgende Eintrag in der
~/.ssh/config
erforderlich:
Host pmbs HostName packman-bs.links2linux.de User your_packman_user
Der Aufruf von pm-upload-job:
pm-upload-job
oder
pm-upload-job spec-file
Damit werden alle Dateien welche im spec-file mit den Tags SourceX oder PatchX referenziert werden mit rsync zum PMBS-Server übertragen. Es wird eine build.conf erstellt und mit dem Standardeditor (default = vi) geöffnet. Nun kann man letzte Feintunings anbringen und SuSE-Versionen an-/abschalten.
Falls das Paket ein “noarch” Paket ist, werden die i586, i686, x86_64 Flags abgeschaltet. Zur Zeit sind alle SuSE-Versionen von 10.0 bis 10.3 per default angeschaltet.
Falls es mehrere spec-files im aktuellen Verzeichnis gibt, kann man das gewünschte im Aufruf angeben. Es werden nur die Sourcen und Patches für diese Spec-Datei hochgeladen.
Wenn pm-upload eine build.conf im aktuellen Verzeichnis findet, wird diese direkt verwendet und der Editor wird nicht gestartet! D.h. wenn man eine neue build.conf erstellen möchte mit pm-upload, muss zuerst die vorhandene build.conf gelöscht werden.
Einige Parameter für die build.conf werden aus diversen System-Dateien ermittelt. Dazu gehören der “packager”. Dieser Eintrag besteht aus drei Teilen
vorname nachname <email@links2linux.de>
Der “packager”-Eintrag wird aus der /etc/passwd ausgelesen, falls dieser Eintrag nicht verwendbar ist wird die ~/.rpmmacros ausgewertet. Sollte auch dieses nicht gelingen wird in der aktuellen lbuild-Konfiguration nachgeforscht. Es besteht beim ersten Anlegen aber immer die Möglichkeit diesen Eintrag zu ändern.
Beispiel für eine build.conf (von btanks, es wird nur für SuSE-10.2 gebaut)
[[info]] specfile: btanks.spec packager: packer <packer@links2linux.de> upload: 1 commit: 1 email: 1 baselibs: 0 autobuilddeps: 0 [[1]] dist: SuSE release: 10.0 build: 0 noarch: 0 i586: 1 i686: 0 x86_64: 1 [[2]] dist: SuSE release: 10.1 build: 0 noarch: 0 i586: 1 i686: 0 x86_64: 1 [[3]] dist: openSUSE release: 10.2 build: 1 noarch: 0 i586: 1 i686: 0 x86_64: 1 [[4]] dist: openSUSE release: 10.3 build: 0 noarch: 0 i586: 1 i686: 0 x86_64: 1