In diesem Thema möchte ich kurz erklären, wie man mit Hilfe des openSUSE-buildService für Lazarus-Anwendungen Linux-Pakete erstellen kann. Sollte jemand Probleme mit dem Service haben, kann er diese auch hier posten.
------
0. Was ist der openSUSE buildService?
Der openSUSE Build Service ist eine offene und vollständige Plattform zur Entwicklung von Distributionen. Der Dienst versorgt Software-Entwickler mit einem Werkzeug, mit dem sie quelloffene Software für openSUSE und andere Linux-Distributionen einfach für verschiedene Hardware-Architekturen und eine große Nutzerschaft erstellen und veröffentlichen können. Nutzer können die von ihnen gesuchten Open Source-Pakete in aktuellen Versionen finden und sie nutzen. Der Dienst bietet eine Brücke zwischen Entwicklern und Nutzern mit Funktionen zur Rückmeldung und Bewertung. Für Entwickler ist er durch sein Projektmodell ein effizienter Ort, um Gruppen zu bilden und um zusammenzuarbeiten.
(Quelle: openSUSE)
1. Anmeldung
Um den buildService für ein Lazarus-Projekt zu nutzen, ist zuerst einmal eine Anmeldung am buildService nötig. Den NovellAccount holt man sich am besten direkt auf der Build Service Startseite.
Nach der Registrierung meldet man sich mit Name und Passwort am Build Service an. Diese Anleitung beschreibt, wie man das Webinterface des Build Service nutzt, die Terminal-Basierende Nutzung ist auf den openSUSE-Wiki Seiten ausführlich beschrieben.
Nach der Anmeldung gelangt man auf die Startseite des Service zurück.
Durch einen Klick auf "Home Project" im zweiten Feld (von oben) auf der linken Seite gelangt man zu seinem Startprojekt.
2. Infrastruktur erstellen
Um nun eine Lazarus-Anwendung erstellen zu können, ist erst noch einige Vorarbeit nötig. Durch Klick auf "Add Package" gelangt man zu einem Menü, in dem man den Paketnamen und die Beschreibung des Paketes für sein Lazarus-Projekt angeben kann. Mit "Save changes" wird das Paket gespeichert.
Da Lazarus nicht standardmäßig in den Distributionen vorhanden ist, muss das Paket manuell hinzugefügt werden. Ich habe dazu eine aktuelle Lazarus-Version für den Build Service angepasst.
Um Lazarus einzubinden muss zuerst ein neues Paket erstellt werden. dazu klickt man auf "Add package", gibt für "Name" lazarus und für "Title" Lazarus ein und klickt auf "Save changes". (Die Beschreibung des Paketes kann später angepasst werden)
Im Anhang dieser Anleitung befindet sich ein .tar.gz-Archiv mit benötigten Template-Dateien. Das Paket muss heruntergeladen und entpackt werden. Nun muss die Datei "_aggregate" (zu findem im Ordner "LazLink" des Paketes) über "Add file" dem neuen Paket "lazarus" im Build Service hinzugefügt werden. - Fertig! Lazarus ist nun ins Projekt integriert.
3. Projekt anpassen
INFO: Templates für die zum Build nötigen Dateien sind im Archiv im Anhang zu finden.
Nun muss ein Makefile und die entsprechenden Dateien für das im BS zu kompilierende Projekt erstellt werden. Dazu erstellt man im Projektverzeichnis eine Datei mit dem Namen "Makefile" und folgendem Inhalt:
Code: Alles auswählen
# Targets
# The First target is the one build when there is nothing on make command line
#
all:
./make.sh
clean:
./clean.sh
install:
./install.sh
uninstall:
./uninstall.sh
Die Datei "make.sh" erhält folgenden Inhalt:
Code: Alles auswählen
#!/bin/bash
set -e
# Detects and parses the architecture
ARCH=$(uname -m)
case "$ARCH" in
"i686") ARCH="i386";;
"i586") ARCH="i386";;
"i486") ARCH="i386";;
esac
echo "Target architecture: $ARCH"
if [ $ARCH = "x86_64" ]; then LCLDir="/usr/lib64/lazarus/"
else LCLDir="/usr/lib/lazarus"
fi
echo "LAZTarget: $LCLDir"
# Building the IDE and LCL
OS="linux"
echo "Target operating system: $OS"
#
# Command line to build the sofware
VER=$(fpc -iW)
echo "Compiler version: $VER"
echo "Compiling project..."
Alternativ kann man jedoch auch die Zeile
Code: Alles auswählen
$LCLDir/lazbuild -B projektname.lpr
Manchmal verursacht der Befehl jedoch Probleme im Build Service.
Die "make.sh" wird gespeichert.
Nun wird die "install.sh" mit einem Texteditor geöffnet und folgender Inhalt eingefügt:
Code: Alles auswählen
#!/bin/bash
#
# Parses command line options. Currently supported options are:
# DESTDIR Destination root directory
for arg; do
case $arg in
DESTDIR=*) DESTDIR=${arg#DESTDIR=};;
esac;
done
#Strips the debug-infos (not necessary everytime!)
# (uncomment this line if you want to publish debug packages)
strip --strip-all "./project1"
# Does the install
echo "Installing application..."
#Add commands to copy your project-files here
echo "Installation done."
Code: Alles auswählen
mkdir -p $DESTDIR/usr/share/listaller
mkdir -p $DESTDIR/usr/share/listaller/graphics
mkdir -p $DESTDIR/usr/share/listaller/graphics/categories
mkdir -p $DESTDIR/usr/share/listaller/lang
#Copy graphics
cp ./graphics/header.png $DESTDIR/usr/share/listaller/graphics/
cp ./graphics/mime-ipk.png $DESTDIR/usr/share/listaller/graphics/
Datei speichern und schließen.
Nun wird die "uninstall.sh" geöffnet und mit folgendem Inhalt versorgt:
Code: Alles auswählen
echo "Uninstallation started."
echo "Uninstalled."
Code: Alles auswählen
rm -f /usr/share/listaller/graphics/header.png
rm -f /usr/share/listaller/graphics/mime-ipk.png
rm -f /usr/share/listaller/graphics/SetupImage.png
rmdir /usr/share/listaller
Zuletzt bekommt die Datei "clean.sh" folgenden Inhalt:
Code: Alles auswählen
#!/bin/bash
rm -rf *.o
rm -rf *.ppu
rm -rf *.pas~
rm -rf *.sh~
rm -rf *.bak
rm -rf *~
rm -rf *.log
rm -rf project1
3. Projekt packen
Der Projektordner wird nun ein eine *.tar.gz Datei gepackt.
Im buildService wird diese Datei dann über "Add file" zum Paket hinzugefügt.
4. .spec-Datei erstellen
Eine neue Datei mit dem Namen "project1.spec" wird erstellt. (project1 mit dem Projektnamen ersetzen)
Sie könnte z.B. folgenden Inhalt haben:
Code: Alles auswählen
Name: myproject-gtk
Version: 1.0
Release: 0
License: GPLv3 and LGPLv3
BuildRoot: %{_tmppath}/build-%{name}-%{version}-%{rel}
BuildRequires: fpc, lazarus, wget, glib2-devel, gtk2-devel, glib-devel, glib2, glib, fpc-src, gtk2, xorg-x11-devel, gdk-pixbuf, gdk-pixbuf-devel
Source0: project1.tar.gz
Requires: gtk2, cairo, glib2, gdk-pixbuf, xdg-utils, glib
Group: Applications/Other
Summary: Sample application
Vendor: Me!
%description
Description of your Project
%prep
%setup -c
%build
make all
%install
./install.sh DESTDIR=%{_tmppath}/build-%{name}-%{version}-%{rel}
%clean
make clean
%files
%defattr(-,root,root)
%dir "/"
5. Bauen
Mit einem Klick auf "Home-Project" gelangt man wieder zum Home-Projekt zurück. Nun klickt man auf der Rechten Seite auf "Add repository" und wählt eine Distribution aus, für die ein RPM-paket erstellt werden soll. Das kann man auch mehmals tun. Der Build Service erstellt nun automatisch ein RPM-Paket und eine Paketquelle für das Projekt. - Fertig.
6. Ausblick
Das war natürlich längst nicht alles, was der Build Service kann. Man kann z.B. auch DEB-Pakete erstellen, ich arbeite allerdings noch daran, dass dies auch für Lazarus-Anwendungen möglich ist. Für mehr informationen sind die openSUSE-Wiki Seiten hervorragend geeignet.
Mit der Lazarus-Implementierung können im Moment nur GTK, GTK2 und Qt4-Anwendungen für Fedora und Mandriva gebaut werden.
Wenn man die Buildscripte erstellt
Fragen/Verbesserungsvorschläge zu diesem HowTo sind sehr Willkommen!