Build Service/Anleitung
aus openSUSE, der freien Wissensdatenbank
Inhaltsverzeichnis
|
Grundvoraussetzungen
Sie sollten über ein allgemeines Verständnis im Bau von RPMs
oder über Erfahrung im Umgang mit anderen Paketsystemen wie dpkg verfügen. Dieses Dokument ersetzt nicht die Paketbaudokumentation, mit welcher sich schon viele andere Anleitungen, Führer und Bücher beschäftigen.
Sie sollten Sich mit der Quellkodeumgebung auskennen, welche ihr Projekt für ihr Paket verwendet. Der Build Service kann einige verbreitete Fehler umschiffen und wird Sie hoffentlich auf einige Probleme in ihrem Quellkode via Protokolldateien und mit einfachen Baufehlern hinweisen. Es existiert eine Build-Service-Mailing-Liste
, die ihnen als Quelle für Hilfe und Unterstützung dienen kann. Nichtsdestotrotz liegen die Entscheidungen darüber, welche Patches Sie anwenden wollen, welche Compiler-Flags Sie setzen wollen usw. bei ihnen.
Voraussetzungen
Um Gebrauch vom Build Service zu machen, benötigen Sie als erstes ein Nutzerkonto um sich anzumelden. ;-)
Ihr Benutzerkonto für den Build Service ist das selbe, welches Sie auch für das Wiki und Bugzilla verwenden. Wenn Sie noch über kein Konto verfügen, nutzen Sie einfach die Verknüpfung oben rechts auf dieser Seite um eins zu erstellen.
Nachdem Sie ihr Konto erstellt haben gehen Sie auf http://build.opensuse.org/
und melden sich dort an. Bei der ersten Anmeldung müssen Sie ein Anforderungsformular ausfüllen und erklären, warum Sie ein Benutzerkonto möchten und was Sie paketieren wollen. Danach müssen Sie nur noch warten bis ihr Konto freigeschaltet wird. Während Sie warten, können Sie sich schon auf der opensuse-buildservice-Mailing-Liste einschreiben und sich dort vorstellen. Erzählen Sie uns dort ihren Namen und etwas über das Projekt, welches Sie erstellen und betreuen wollen (einige Worte zu ihren Paketbaufähigkeiten sind auch immer willkommen).
Wenn Sie ihre Pakete zu Hause testen und/oder bauen wollen (immer eine gute Idee!) sollten Sie einen Blick auf das SUSE Build Tutorial werfen, um einen Überblick zu erhalten, was Sie für eine lokale Bauumgebung benötigen.
Arbeitsablauf
Die folgenden Schritte zeichnen einen normalen Arbeitsablauf nach, um ein Projekt zu erstellen und ihm Pakete hinzuzufügen. In einem Beispiel aus der realen Welt könnte es natürlich sein. dass Sie an manchen Stellen nicht weiterkommen und diese wiederholen müssen, bis sie nicht mehr fehlschlagen. Dieser Grundriss soll ihnen vor allem ein Gefühl dafür geben, was wir zu erreichen versuchen.
Wir werden ihnen, soweit möglich, zwei verschiedene Wege zeugen:
- Den Web-Client-Weg
- Den Kommandozeilen-Weg (wir werden osc für unser Beispeil verwenden)
Schritt Eins - Anmeldung
Wenn Sie bereits über ein Build-Service-Konto verfügen ist dies der einfachste Schritt.
- Web-Client: Öffnen Sie http://build.opensuse.org/
und klicken Sie auf eine der Verknüpfungen "List of All Projects" oder "Watched Projects". Sie werden daraufhin angehalten, ihren Benutzernamen und ihre Passwort für den openSUSE Build Service einzugeben. Haben Sie dies passiert, sehen Sie eine Liste von Projekten und in der oberen, rechten Ecke können Sie eine Verknüpfung zu ihrem "Home Project" finden. Folgen Sie bitte dieser Verknüpfung.
- Kommandozeile: Als erstes müssen Sie den Kommandozeilenklient auf ihrem lokalen Rechner installieren. Sie können osc-Pakete für verschiedene Distributionen im openSUSE-Tools-Depot finden (Ja, dies ist ebenfalls ein Build-Service-Projekt). Nutzen Sie ihre bevorzugte Paketverwaltung um das osc-Paket zu installieren. Beachten Sie: Für SUSE Linux 9.3 oder älter benötigen Sie zusätzlich die Pakete python-elementtree und python-urlgrabber von hier.
Danach wechseln Sie in das Verzeichnis, welches Sie für ihre Projektdateien verwenden wollen. Nun wird sich jeder, der sich mit SVN auskennt, wie zu Hause fühlen: Versuchen Sie, ihr Home-Projekt aus-zu-checken
osc checkout home:<Benutzername>
(Ersetzen Sie <Benutzername> bitte durch ihren Anmeldenamen). Sie werden dann angehalten, ihr Passwort einzugeben - danach wird osc versuchen, Pakete in ihr Home Project aus-zu-checken und ein neues Verzeichnis namens home:<Benutzername> erstellen. Sie können ihre Einstellungen in der Datei ~/.oscrc anpassen.
Schritt Zwei - Erstellen und Hochladen von Paketen
Es ist nicht wirklich notwendig, in ihrem eigenen Home Project zu starten - da Sie auch Pakete direkt zu einem existierenden Projekt hochladen können - aber es ist ein guter Startpunkt und niemand sollte ein Home Project eines anderen Nutzers als Bauabhängigkeit verwenden. So können Sie ihr eigenes Home Project als "Sandkasten" benutzen, um Pakete zu testen welche dann, sobald alles in Ordnung ist, in andere Projekte transferiert werden können.
- Web-Client: Klicken Sie einfach auf die Verknüpfung [Add Package]. Sie sollten die drei folgenden Textfelder ausfüllen: "Name", "Title" und "Description". Verwenden Sie einfach den Paketnamen als "Name", die Paketzusammenfassung als "Title" und die Paketbeschreibung als "Description".
- Danach klicken Sie auf die Verknüpfung [Add File] um ihrem Paket Dateien hinzuzufügen. Sie müssen mindestens den Quellkode ihres Pakets und eine .spec-Datei hochladen.
- KLÄRUNG Was benötige ich bei Debian-Pakete?
- Kommandozeile:
osc meta pkg -e home:<Benutzername> <Paketname>
osc wird eine XML-Vorlage in ihrem bevorzugtem Editor öffnen, in welcher Sie einfach die gleichen Dinge (Name, Title und Description) wie oben beschrieben eintragen. Rufen Sie nun
osc up
auf und Sie erhalten ein neues Verzeichnis mit dem Namen ihres neuen Pakets. Um Dateien über die Kommandozeile hinzuzufügen wechseln Sie einfach in das neue Verzeichnis und kopieren Sie die relevanten Dateien dorthin, Rufen Sie danach
osc add *
und die Dateien im Verzeichnis werden für die nächste Übertragung markiert. Die Übertragung können Sie mit folgendem Befehl starten:
osc commit
Schritt Drei - Paketdepot hinzufügen
Sie sollten sich nun entscheiden, für welche Distributionsdepots Sie ihr Paket bauen wollen.
- Web-Client: Klicken Sie einfach auf [Add Repository] und wählen Sie eine der verfügbaren Distributionen und Plattformen aus.
- Kommandozeile: Lassen Sie sich als erstes eine Liste der verfügbaren Depots anzeigen
osc ls
Bearbeiten Sie dann ihre Paket-Metadaten;
osc meta prj -e home:<Benutzername>
und fügen Sie das Depot etwa so hinzu:
<repository name="SUSE_Linux_Factory"> <path project="SUSE:Factory" repository="standard" /> <arch>x86_64</arch> <arch>i586</arch> </repository>
Hinweis: Der Eintrag repository="standard" dient lediglich zukünftigen Erweiterungen (Abzweige eines Depots).
Schritt Vier: Bauen Sie ihr Paket
Normalerweise wird ihr Paket für den Bauprozess eingeplant sobald es übergeben wurde oder sobald einige Dateien verändert wurden. Wenn ein benötigtes Paket neu gebaut wird, wird auch ihr Paket automatisch neu gebaut. Sie können auch manuell einen Neubau ihres Pakets auslösen, wenn Sie dies für notwendig erachten (machen Sie das aber bitte nicht zu oft, um Bauleistung für andere Pakete zu sparen).
Bauen Sie ihr Paket lokal
Manchmal kann es schneller gehen, ihr Paket auf ihrer lokalen Maschine zu bauen, anstatt auf die Ergebnisse des Build Service zu warten. osc unterstütz den lokalen Bau ihres Pakets falls ihre lokale Hardware es unterstützt (auf x86_64 können Sie für i586 und x86_64 bauen, auf i586 nur für i586).
osc build <Plattform> <Architektur> <spec-Datei> [--clean|--noinit]
Wenn Sie den Bauvorgang als normaler Nutzer starten (gute Idee!) werden Sie nach dem root-Passwort ihrer lokalen Maschine gefragt. Sie können dies umgehen, indem Sie ihren Nutzer zu /etc/sudoers hinzufügen und ihre ~/.oscrc bearbeiten:
su-wrapper: sudo
osc wird sich mit den Depot-Servern verbinden und alle benötigten RPMs in /var/tmp/osbuild-packagecache/<Plattform>/<Depot>/<Architektur> als Pufferverzeichnis herunterladen. (Wenn Sie also schon ein komplettes Depot haben können Sie die RPMs in diesem Verzeichnis verknüpfen um riesigen Datenverkehr zu vermeiden.)
Für ein openSUSE_10.2-Depot können Sie beispielsweise die Box-DVD wie unten gezeigt verwenden:
mount openSUSE-10.2.iso /mnt -o loop mkdir -p /var/tmp/osbuild-packagecache/openSUSE\:10.2 ln -s /mnt/suse /var/tmp/osbuild-packagecache/openSUSE:10.2/standard
Das oben gezeigte verschafft ihnen Depots sowohl für x86 als auch für x86_64.
Pakete können nun lokal wie folgt gebaut werden:
osc build openSUSE_10.2 i586 beryl-core-snapshot.spec
osc wird eine chroot-Umgebung in /var/tmp/osc-build-root/ erstellen und mit dem Bau ihres Pakets beginnen. Wenn Sie nur kleine Änderungen vorgenommen haben, können Sie die Neuerstellung der Bauumgebung mit der Option --noinit verhindern. Wenn Sie annehmen, dass ihre chroot-Umgebung kaputt ist, können Sie einen kompletten Neubau mit der Option --clean veranlassen.
Da ihre Pakete in diese chroot-Umgebung gebaut werden, können Sie die entstandenen Pakete in /var/tmp/osc-build-root/usr/src/packages/RPMS/ finden.
Die komplette Protokolldatei ihres lokalen Bauvorgang wird in /var/tmp/osc-build-root/.build.log abgelegt.
Bauen Sie ihr Paket im Build Service
Das Bauen im Build Service ist einfacher als das lokale Bauen - kann aber länger dauern.
- Web-Client: Wenn Sie einen Neubau manuell auslösen wollen, klicken Sie einfach auf [Trigger Rebuild] am Fuß der Paketseite.
- Kommandozeile: Mit den optionalen Argumenten <Depot> und <Architektur> kann der Neubau auf ein bestimmtes Depot oder eine bestimmte Architektur beschränkt werden.
osc rebuildpac <Projekt> <Paket> [<Depot> [<Architektur>]]
|
Schritt Fünf: Überprüfen der Protokolldateien
Der Build Service erstellt für jeden Bau eines Pakets eine große Protokolldatei.
- Web-Client: Klicken Sie in der Paketansicht einfach auf die Verknüpfung [Build Log].
- Kommandozeile: Sie haben verschiedene Möglichkeiten - abhängig von ihren Bedürfnissen. Wenn Sie sich im Paketverzeichnis befinden müssen Sie kein Paketverzeichnis hinzufügen.
osc prjresults [Paketverzeichnis]
Zeigt die gesammelten Bauergebnisse eines ganzen Projekts an.
osc results [Paketverzeichnis]
Zeigt die Bauergebnisse eines einzelnen Pakets an.
osc buildlog <Plattform> <Architektur>
Zeigt die Protokolldatei eines Pakets an (Sie müssen sich innerhalb eines Paketverzeichnisses befinden).
Schemata erstellen
Schemata (engl. patterns) sind Dateien, die eine Liste von Paketen sowie eine Beschreibung enthalten, wofür diese Sammlung gut ist. (Zukunft: Der Build Service wird Schemata in Paketdepots exportieren, so dass diese in YaST sichtbar werden.) Zusätzlich erstellt der Build Service für jedes erstellte Depotschemata .ymp-Dateien. Diese .ymp-Dateien können von Nutzern für die Ein-Klick-Installation genutzt werden.
Kurz gesagt sind Schemata nützlich, um einen Satz von Software für einen speziellen Anwendungsfalls zu installieren, ohne dafür extra Abhängigkeiten zwischen den Paketen erstellen zu müssen.
Die Unterbreitung von Schemata ist direkt über die API oder über osc möglich:
- Ein Schema im $EDITOR öffnen (erstellt es, falls es noch nicht existiert)
osc meta pattern -e <Projekt> <Schema>
- Existierende Schemata auflisten
osc meta pattern <Projekt>
- Ein existierendes Schema holen
osc meta pattern <Projekt> <Schema>
- Sie können auch eine bereits vorhandene Datei übertragen:
osc meta pattern --file <lakale_Datei> <Projekt> <Schema>
Zum testen: Ein Klick im Konqueror auf eine .ymp sollten das Installationsprogramm starten, falls Sie Konqueror nicht installiert haben, können Sie es als normaler Nutzer über die Kommandozeile versuchen:
/sbin/yast2 MetaPackageHandler http://download.opensuse.org/repositories/<Projekt>/<SUSE_Factory oder openSUSE_10.2>/<Schema>.ymp
Die folgende Datei ist eine Beispielschemadatei aus dem KDE:KDE4-Projekt. Sie können sich die daraus erstellte .ymp-Datei hier anschauen.
<pattern
xmlns="http://novell.com/package/metadata/suse/pattern"
xmlns:rpm="http://linux.duke.edu/metadata/rpm"
>
<name>KDE 4 Games</name>
<summary>KDE 4 Games</summary>
<description>A number of games for KDE 4.</description>
<uservisible/>
<category lang="en">Desktop Functions</category>
<rpm:recommends>
<rpm:entry name="kde4-kpat"/>
<rpm:entry name="kde4-kmahjongg"/>
<rpm:entry name="kde4-kmines"/>
<rpm:entry name="kde4-kreversi"/>
<rpm:entry name="kde4-ksudoku"/>
</rpm:recommends>
<rpm:suggests>
<rpm:entry name="kde4-katomic"/>
<rpm:entry name="kde4-kbattleship"/>
<rpm:entry name="kde4-ksquares"/>
<rpm:entry name="kde4-bovo"/>
<rpm:entry name="kde4-kiriki"/>
<rpm:entry name="kde4-kwin4"/>
<rpm:entry name="kde4-kolf"/>
<rpm:entry name="kde4-klines"/>
<rpm:entry name="kde4-ksame"/>
<rpm:entry name="kde4-lskat"/>
<rpm:entry name="kde4-kgoldrunner"/>
<rpm:entry name="kde4-kblackbox"/>
<rpm:entry name="kde4-kbounce"/>
<rpm:entry name="kde4-ktuberling"/>
<rpm:entry name="kde4-knetwalk"/>
<rpm:entry name="kde4-kjumpingcube"/>
<rpm:entry name="kde4-kspaceduel"/>
<rpm:entry name="kde4-konquest"/>
<rpm:entry name="kde4-kshisen"/>
</rpm:suggests>
</pattern>
Einige Tag-Beschreibungen:
| Tag | Beschreibung |
|---|---|
<rpm:requires> <rpm:entry name="example" /> </rpm:requires> | Requires RPM Beispiel: dieses Paket muss installiert sein - ansonsten ist das Schema nicht erfüllt. |
<rpm:recommends> <rpm:entry name="example" /> </rpm:recommends> | Recommends RPM Beispiel: falls verfügbar und falls alle Abhängigkeiten des Pakets erfüllt werden können, wird es installiert. Falls das Paket nicht verfügbar ist wird keine Fehlermeldung ausgegeben. Falls die Paketabhängigkeiten nicht erfüllt werden, ist das Paket zwar sichtbar, wird aber nicht installiert. |
<rpm:suggests> <rpm:entry name="example" /> </rpm:suggests> | Suggests RPM Beispiel: Wird im Schema angezeigt, aber nicht standardmäßig installiert |

