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 
  • 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  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 
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:

Jeremias Brödel
Jeremias Brödel arbeitet seit 2010 als Linux-Consultant bei B1 Systems und beschäftigt sich mit den Themen Monitoring, Automatisierung, Container, Mail, Software Paketierung.