Um ein Debian kompatibles Paket auf dem OBS zu bauen, benötigt man vier Dateien sowie die Sourcen. Die $PAKETNAME.dsc, debian.rules, debian.control, debian.changelog sowie die $PAKETNAME.orig.tar.gz.
1. $PAKETNAME.dsc
In der dsc Datei werden die Abhängigkeiten des Pakets zum Bauen festgelegt.
- Format: 1.0
- Source: Paketname
- Version: 5.6-3
- Binary: Paketname
- Maintainer: Vorname Nachname maxmuster@b1-systems.de
- Architecture: any
- Build-Depends: debhelper-compat (>= 13.0.0), NamenVonPaketenDieZumBauBenötigtWerden
- Files:
- d57283ebb88888e919762b58417353c8 133282 Paketname_5.6.orig.tar.gz
- 2fecf324a37777b08cefc0b047cfa5ee 63176 Paketname_5.6-1.diff.tar.gz
Beschreibung:
- Format: Ist die Formatversion des .deb-Pakets.
- Source: Ist der Name des Quellcodearchivs ohne .tar.bz2
- Version: Wird aus der Version der Quellen und der Ausgabe des Pakets zusammengesetzt
- Binary: Ist der Name des Binärpakets, so wie er im apt-Verwalter gesehen wird
- Maintainer: Ist der Name des Betreuers der Quellen (nicht Ihr Name oder der des Paketbauers)
- Architecture: Die Liste der Architekturen, für die das Paket gebaut werden soll
- Build-Depends: Die für das Kompilieren notwendigen Bibliotheken, z.B. ‘debhelper-compat (>= 13.0.0)’ müssen immer angegeben werden, da sie alle Helferskripte enthalten, die vom System zum Bau benötigt werden
- Files: Theoretisch muss hier die MD5SUM und die Größe in Byte der .orig.tar.gz und der .diff.tar.gz angegeben werden.
2. debian.rules
Die rules-Datei enthält die eigentlichen Befehlssequenzen, mit denen dpkg-buildpackage das Paket schließlich erstellt. Die Datei ist das sogenannte Makefile und enthält einige Regeln, die besagen, wie mit dem Quellcode verfahren werden soll.
Generell ist eine Regel folgendermaßen aufgebaut:
Ziel: Voraussetzung BEFEHL ……..
Eine debian.rules Datei sieht in etwa so aus:
#!/usr/bin/make -f
# -*- makefile -*-
# Sample debian/rules that uses debhelper.
# As a special exception, when this file is copied by dh-make into a
# dh-make output file, you may use that output file without restriction.
# Uncomment this to turn on verbose mode.
#export DH_VERBOSE=1
# This is the debhelper compatibility version to use.
export DH_COMPAT=4
CFLAGS = -Wall -g
ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))
CFLAGS += -O0
else
CFLAGS += -O2
endif
configure: configure-stamp
configure-stamp:
dh_testdir
# Add here commands to configure the package.
touch configure-stamp
build: build-stamp
build-stamp: configure-stamp
dh_testdir
# Add here commands to compile the package.
$(MAKE)
#docbook-to-man debian/testdeb.sgml > testdeb.1
touch build-stamp
clean:
dh_testdir
dh_testroot
rm -f build-stamp configure-stamp
# Add here commands to clean up after the build process.
-$(MAKE) clean
dh_clean
install: build
dh_testdir
dh_testroot
dh_clean -k
dh_installdirs
# Add here commands to install the package into debian/testdeb.
$(MAKE) install DESTDIR=$(CURDIR)/debian/testdeb
# Build architecture-independent files here.
binary-indep: build install
# We have nothing to do by default.
# Build architecture-dependent files here.
binary-arch: build install
dh_testdir
dh_testroot
dh_installchangelogs
dh_installdocs
dh_installexamples
# dh_install
# dh_installmenu
# dh_installdebconf
# dh_installlogrotate
# dh_installemacsen
# dh_installpam
# dh_installmime
# dh_installinit
# dh_installcron
# dh_installinfo
dh_installman
dh_link
dh_strip
dh_compress
dh_fixperms
# dh_perl
# dh_python
# dh_makeshlibs
dh_installdeb
dh_shlibdeps
dh_gencontrol
dh_md5sums
dh_builddeb
binary: binary-indep binary-arch
.PHONY: build clean binary-indep binary-arch binary install configure
- Der erste Block konfiguriert die zu benutzenden Compiler-Flags (CFLAGS), mit DH_VERBOSE wird der Debug-Level der Debian-Paketskripte verwendet.
- Mit den Regeln configure und configure-stamp wird die Konfiguration des Pakets festgelegt. Wenn das Quellpaket Autoconf oder Automake verwendet, sind dort evtl. schon Schritte angegeben.
- Durch build und build-stamp wir der eigentliche Erstellungsprozess des Pakets gesteuert.
- Mit der Regel clean wir das Entfernen temporärer Dateien aus dem Paketbaum verwaltet.
- Es werden mit binary-indep architekturunabhängige Pakete erstellt. Ist das nicht der Fall, ist hier keine Änderung notwendig.
- Bei der binary-arch-Regel werden die zahlreichen mit dh_ beginnenden Debhelper-Programme eingefügt.
Jede Regel besteht aus einem Ziel, welches der Name einer Aktion (z.B. build:, clean: oder install:) oder ein Dateiname sein kann. Wildcards sind ebenfalls erlaubt. Die BEFEHL-Zeile muss mit einem Tab beginnen und wird durch die Shell ausgeführt.
3. debian.changelog
Diese Datei legt Informationen über den Maintainer sowie Dateiinformationen zum DEB Paket fest.
NameDesPakets (5.6-3) stable; urgency=low
- Initial Release
– MeinName MeineMail@b1-systems.de Mon, 08 Mai 2023 10:50:38 +0100
4. debian.control
In der debian.control wird das Paket und seine Abhängigkeiten beschrieben. Sie enthält verschiedene Informationen, die dpkg benötigt, um das Paket bearbeiten zu können.
Eine debian.control Datei sieht in etwa so aus:
Source: testdeb
Section: univention
Priority: optional
Maintainer: Max Muster maxmuster@b1-systems.de
Build-Depends: debhelper-compat (>= 13.0.0)
Standards-Version: 4.6.2
Package: testdeb
Architecture: all
Depends: ${shlibs:Depends}, ${misc:Depends}, ${python:Depends}
Description: Ein Beispielpaket im Rahmen einer B1-Dokumentation.
Dieses Paket soll die Struktur von Debian Paketen beschreiben.
Außerdem erläutert die Dokumentation:
+ Installationsverlauf.
+ Aufbau eines Pakets.
+ Inhalt und Funktion der Kontroll Dateien.
- Source: Name des Quellpakets
- Section: Dient der Kategorisierung des Pakets (z.B. durch grafische Paketmanager)
- Priority: Dient der Priorisierung des Pakets (z.B. durch grafische Paketmanager)
- Maintainer: Name und Email-Adresse des Paketerstellers
- Build-Depends: Namen von Paketen, die zur Übersetzung dieses Pakets zwingend benötigt werden
- Standards-Version: Enthält die Version des Debian-Policy-Standards, anhand derer das Paket das letzte Mal aktualisiert wurde
- Package: Der Name des Binärpakets
- Architecture: Gibt die CPU-Architektur (z.B. amd64 oder i386) an, für die dieses Paket gebaut werden soll
- Depends: Abhängigkeit zur Laufzeit des Pakets; hier können auch Variablen wie ${shlibs:Depends} oder ${python:Depends} stehen, die durch Paketnamen von Programmbibliotheken ersetzt werden, die beim Erstellen des Pakets als zwingend benötigt ermittelt werden (siehe dh_shlibdeps)
- Description: Enthält eine max. 60 Zeichen lange Kurzbeschreibung des Pakets
Pakete erstellen auf dem OBS
Um den openSUSE Build Service (https://build.opensuse.org/) benutzen zu können, benötig man einen Account. Danach kann man sich oben rechts anhand des Log-Links einloggen und befindet sich in seinem Home-Projekt. Um ein Paket zu bauen, klickt man auf “Create Package” im Reiter “Packages”. Hier sollten die drei Textfelder “Name”, “Titel” und “Description” ausgefüllt werden. Nachdem das Paket erstellt ist, werden die benötigten Dateien im Paket unter dem Reiter “Add local files” hinzugefügt. Da wir ein Paket unter Debian bauen, benötigen wir noch ein Debian Repository, welches unter “Repositorys” hinzugefügt werden kann.
Genauere Informationen zum Erstellen von RPM und DEB Software-Pakete sind unter folgenden Links zu finden: