Debian Pakete selber erstellen Steffen Möller Night of Open Knowledge Lübeck 2013
Debian – was ist das? Ein Miteinander von Entwicklern „Society“ mit Infrastruktur für Mitglieder, einem gewählten „Project Leader“, Abstimmungen Weltweite Präsenz Organisierte Treffen (Sprints) bis hin zu Konferenzen Grundstimmung ähnelt der NooK Paketierung von Wissen – Software – Workflows Verteilung an alle Interessierte Integration von Feedback
Debian – was ist das? Technisches Referenz-Archiv mit freier Software Viele Spiegel in aller Welt „.deb“ Format für Pakete „Binary“ „Source“ „apt“ zur Paket-Verwaltung Bug reporting und management System Automatisches Bauen von „Source“ Paketen >10 Architekturen (ARM, MIPS, PowerPC, Intel 32 und 64 bit, …) Linux, FreeBSD und HURD kernel
In den kommenden 20 Minuten Direkt installierbare (.deb) Pakete Erstellen eigener Pakete Hochladen der Pakete zur Distribution
.deb Paket-Format reverse engineered Debian Pakete sind „ar“ Archive $ ar -t boinc-app-examples_7.2.28+dfsg-1exp1_amd64.deb debian-binary control.tar.gz data.tar.xz Informationen zum Paket selbst Abhängigkeiten Maintainer Full-text zur Beschreibung Tar Archiv, wird direkt von root aus entpackt
.deb Paket-Format reverse engineered $ ar -t boinc-app-examples_7.2.28+dfsg-1exp1_amd64.deb debian-binary control.tar.gz data.tar.xz
.deb Paket-Format: data.tar.xz $ tar Jtf data.tar.xz $./ ./usr/ ./usr/share/ ./usr/share/doc/ ./usr/share/doc/boinc-app-examples/ ./usr/share/doc/boinc-app-examples/README.Debian ./usr/share/doc/boinc-app-examples/changelog.Debian.gz ./usr/share/doc/boinc-app-examples/copyright ./usr/lib/ ./usr/lib/boinc-server-maker/ ./usr/lib/boinc-server-maker/apps/ ./usr/lib/boinc-server-maker/apps/upper_case ./usr/lib/boinc-server-maker/apps/sleeper ./usr/lib/boinc-server-maker/apps/worker ./usr/lib/boinc-server-maker/apps/concat ./usr/lib/boinc-server-maker/apps/wrapper ./usr/lib/boinc-server-maker/apps/uc2 ./usr/lib/boinc-server-maker/apps/1sec
.deb Paket-Format: control.tar.gz $ tar zxvf control.tar.gz $ cat md5sums $ cat control ./ ./md5sums ./control $ cat md5sums b16212c9224fdf10491110ca85b642a3 usr/lib/boinc-server-maker/apps/1sec dfdffb385c1aca44c250ef8b9495fc8e usr/lib/boinc-server-maker/apps/concat ecfb42818bb1f18d21af5919d5093458 usr/lib/boinc-server-maker/apps/sleeper 4ac17118707819e29a4fc178661a1ea6 usr/lib/boinc-server-maker/apps/uc2 9d04ba9c7136385fa2a47ccb9fb17eed usr/lib/boinc-server-maker/apps/upper_case …- Package: boinc-app-examples Source: boinc Version: 7.2.28+dfsg-1exp1 Architecture: amd64 Maintainer: Debian BOINC Maintainers <pkg-boinc-devel@lists.alioth.debian.org> Installed-Size: 2095 Depends: libc6 (>= 2.15), libgcc1 (>= 1:4.1.1), libstdc++6 (>= 4.1.1) Recommends: boinc-server-maker Section: net Priority: optional Homepage: http://boinc.berkeley.edu/ Description: example binaries for BOINC servers The Berkeley Open Infrastructure for Network Computing (BOINC) is a software platform for distributed computing using volunteered computer resources. For every scientific problem its own distinct project-server must be provided. The users only run a common client with project-specific additions (if not self-compiled or available as a Linux distribution's package itself) being downloaded from the server. . This package extends the boinc-server-maker package. It features a series of small applications that a newly installed environment may decide to use for testing purposes. Having them separated has the neat side effect that those binaries may be retrieved more easily for foreign platforms to feed the local servers with. The package also features the wrapper application, which is likely to find its audience also in real projects.
Package: boinc-app-examples Source: boinc Version: 7.2.28+dfsg-1exp1 Architecture: amd64 Maintainer: Debian BOINC Maintainers <pkg-boinc-devel@lists.alioth.debian.org> Installed-Size: 2095 Depends: libc6 (>= 2.15), libgcc1 (>= 1:4.1.1), libstdc++6 (>= 4.1.1) Recommends: boinc-server-maker Section: net Priority: optional Homepage: http://boinc.berkeley.edu/ Description: example binaries for BOINC servers The Berkeley Open Infrastructure for Network Computing (BOINC) is a software platform for distributed computing using volunteered computer resources. For every scientific problem its own distinct project-server must be provided. The users only run a common client with project-specific additions (if not self-compiled or available as a Linux distribution's package itself) being downloaded from the server. . This package extends the boinc-server-maker package. It features a series of small applications that a newly installed environment may decide to use for testing purposes. Having them separated has the neat side effect that those binaries may be retrieved more easily for foreign platforms to feed the local servers with. The package also features the wrapper application, which is likely to find its audience also in real projects.
Binäre (installierbare) Pakete Lassen sich von Hand herstellen oder Skripten Aber Sie lassen sich nicht „nachbauen“ und deswegen nicht portieren auf andere Architekturen Die Parameter zur Kompilation des Quellcode sind nicht angegeben, Veränderungen sind schwerer möglich Es findet nicht die Interaktion zwischen Entwicklern und Anwendern statt, die möglich wäre bei Weitergabe des Quellcodes zusammen mit Automatisierbare lesebare Anwendungen zur Erstellung des Pakets
Source Pakete Original „tarball“ „debian“ folder control changelog rules Optionales watch menu manpages …
Untersuchung des „upstream“ Tarballs Nur das von Hand erstellte bleibt Keine vergessene Objekt-Dateien Keine externen .jar Dateien Copyright-Überprüfung anhand Debian Free Software Guidelines (DFSG) Fallen alle Dateien darunter? Sind Weitergabe und Veränderungen gestattet?
Erstellen des debian directory von Hand – machbar dh_make – leichter Prima für alle Programme mit „Makefile“ Kennt auch autoconf, automake Analoge Helfer für Perl und Java es bleibt Separieren von Architektur-abhängigen und Architektur-unabhängigen Programmteilen –Installation nach /usr/share oder /usr/lib Paketier-Schritten – advanced Erklärung von Abhängigkeiten zur Paketerstellung und zur Laufzeit Manpages erstellen Testen der Funktionalität Ausfüllen von Lücken aus dh_make Textuelle Beschreibung der binären Pakete README.Debian, README.source Je nach Programm-Typ Pre- und Post-install Skripte Menü-Integration
debian/rules Jedes Programm, das „binary“ als Argument versteht und die in debian/control beschriebenen Pakete erzeugt Üblicherweise als Makefile implementiert Funktioniert direkt für configure make; make install „override“ targets für Sonderfälle / Ergänzungen
debian/rules – funktioniert erstmal %: dh $@ --parallel
debian/rules – später mehr %: dh $@ --parallel CFGFLAGS = --disable-static-client --disable-static --enable-shared --enable-client \ --disable-server --enable-dependency-tracking --with-gnu-ld $(SETIEXTRAFLAGS) override_dh_auto_configure: aclocal -I m4 && autoheader && automake && autoconf # use two directories for graphics/nographics CFLAGS="$(CFLAGS)" CXXFLAGS="$(CXXFLAGS)" CPPFLAGS="$(CPPFLAGS)“ \ -- $(CFGFLAGS) --enable-graphics BOINCDIR=/usr/include/boinc \ dh_auto_configure --builddirectory=graphics -- $(CFGFLAGS) --enable-graphics CFLAGS="$(CFLAGS)" CXXFLAGS="$(CXXFLAGS)" CPPFLAGS="$(CPPFLAGS)" \ LDFLAGS="$(LDFLAGS)" BOINCDIR=/usr/include/boinc \ dh_auto_configure --builddirectory=nographics -- $(CFGFLAGS) --disable-graphics
Source tree direkt nach Bauen ------ regulärer Quellcode | |--- debian | |---- changelog |---- control |---- rules |---- binary-package-name 1 |---- binary-package-name 2 | . . . . Verzeichnisse in Debian mit Namen der binären Pakete enthalten den schliesslich als data.tar.xz der entsprechenden .deb Pakete präsentiert.
debian/rules – später mehr %: dh $@ --parallel CFGFLAGS = --disable-static-client --disable-static --enable-shared --enable-client \ --disable-server --enable-dependency-tracking --with-gnu-ld $(SETIEXTRAFLAGS) override_dh_auto_configure: aclocal -I m4 && autoheader && automake && autoconf # use two directories for graphics/nographics CFLAGS="$(CFLAGS)" CXXFLAGS="$(CXXFLAGS)" CPPFLAGS="$(CPPFLAGS)“ \ -- $(CFGFLAGS) --enable-graphics BOINCDIR=/usr/include/boinc \ dh_auto_configure --builddirectory=graphics -- $(CFGFLAGS) --enable-graphics CFLAGS="$(CFLAGS)" CXXFLAGS="$(CXXFLAGS)" CPPFLAGS="$(CPPFLAGS)" \ LDFLAGS="$(LDFLAGS)" BOINCDIR=/usr/include/boinc \ dh_auto_configure --builddirectory=nographics -- $(CFGFLAGS) --disable-graphics
debian/rules – später mehr %: dh $@ --parallel CFGFLAGS = --disable-static-client --disable-static --enable-shared --enable-client \ --disable-server --enable-dependency-tracking --with-gnu-ld $(SETIEXTRAFLAGS) override_dh_auto_configure: aclocal -I m4 && autoheader && automake && autoconf # use two directories for graphics/nographics CFLAGS="$(CFLAGS)" CXXFLAGS="$(CXXFLAGS)" CPPFLAGS="$(CPPFLAGS)“ \ -- $(CFGFLAGS) --enable-graphics BOINCDIR=/usr/include/boinc \ dh_auto_configure --builddirectory=graphics -- $(CFGFLAGS) --enable-graphics CFLAGS="$(CFLAGS)" CXXFLAGS="$(CXXFLAGS)" CPPFLAGS="$(CPPFLAGS)" \ LDFLAGS="$(LDFLAGS)" BOINCDIR=/usr/include/boinc \ dh_auto_configure --builddirectory=nographics -- $(CFGFLAGS) --disable-graphics
dpkg-buildpackage ruft debian/rules auf separiert Paketierung von upstream tarball Erstellt .dsc und .changes Dateien als Zusammenfassung aller source und binary Pakete gestattet Signatur durch Paket-Ersteller Garantie der Unveränderlichkeit durch Dritte
Hochladen ftp zu incoming.debian.org/pub/UploadQueue Alle zwei Minuten wird das Verzeichnis nach neuen Paketen untersucht. Signierte Pakete werden akzeptiert, wenn der Unterschreiber auf der Liste steht von Debian Entwicklern oder Akzeptierten Maintainern dieses Pakets Erstmalige Submissions werden manuell gecheckt auf Verletzungen von Copyrights Paketierungs-Fehlern
Zum Mitmachen Debian oder Derivate wie Ubuntu/Mint/… nutzen Tägliche Routine mit verfügbaren Paketen abgleichen Paketierungs-Techniken nutzen auch bei eigenen Entwicklungen Austausch von Programm-Versionen Sauberes Entfernen Maintenance von Paketen nur von solchen, die Ihr selber oft nutzt Uploads kosten keine Zeit Paket-Updates auch nicht wirklich Testen schon
Weg zum eigenen Upload Paket erstellen und um Upload durch Entwickler bitten (mentors.debian.net) GPG Schlüssel erstellen Durch zwei Debian Entwickler signieren lassen (Schleswig-Holstein hat vier) Antrag auf Akzeptanz als Paket-Maintainer stellen - dauert 2-4 Wochen
Weg in die Community Blends – gemeinsame Paketbetreuung Patches an upstream GPG Key sigining im Urlaub / auf Dienstreisen stets sehr freundlich, Debian slang „beer signing“ Diskussionsforen / Mailing lists
Patches Veränderungen sollte es nicht geben, gibt es aber Fehlermeldungen des Compilers Skripte sind ausführbar, die nur als Bibliothek dienen Erleichterung der Installation für Debian …. Veränderungen sind als Patch zu verwalten Damit updates leichter fallen Entwickler werden auf die Veränderung hingewiesen Werkzeuge wie „quilt“ unterstützen den Prozess