27
Debian Pakete selber erstellen Steffen Möller Night of Open Knowledge Lübeck 2013

Debian Pakete selber erstellen Steffen Möller Night of Open Knowledge Lübeck 2013

Embed Size (px)

Citation preview

Page 1: Debian Pakete selber erstellen Steffen Möller Night of Open Knowledge Lübeck 2013

Debian Pakete selber erstellen

Steffen MöllerNight of Open Knowledge

Lübeck2013

Page 2: 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

Page 3: Debian Pakete selber erstellen Steffen Möller Night of Open Knowledge Lübeck 2013

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

Page 4: Debian Pakete selber erstellen Steffen Möller Night of Open Knowledge Lübeck 2013

In den kommenden 20 Minuten

• Direkt installierbare (.deb) Pakete• Erstellen eigener Pakete• Hochladen der Pakete zur Distribution

Page 5: Debian Pakete selber erstellen Steffen Möller Night of Open Knowledge Lübeck 2013

.deb Paket-Format reverse engineered

$ ar -t boinc-app-examples_7.2.28+dfsg-1exp1_amd64.debdebian-binarycontrol.tar.gzdata.tar.xz

Informationen zum Paket selbst• Abhängigkeiten• Maintainer• Full-text zur Beschreibung

Tar Archiv, wird direkt von root aus entpackt

• Debian Pakete sind „ar“ Archive

Page 6: Debian Pakete selber erstellen Steffen Möller Night of Open Knowledge Lübeck 2013

.deb Paket-Format reverse engineered

$ ar -t boinc-app-examples_7.2.28+dfsg-1exp1_amd64.debdebian-binarycontrol.tar.gzdata.tar.xz

Page 7: Debian Pakete selber erstellen Steffen Möller Night of Open Knowledge Lübeck 2013

.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

Page 8: Debian Pakete selber erstellen Steffen Möller Night of Open Knowledge Lübeck 2013

.deb Paket-Format: control.tar.gz

• $ tar zxvf control.tar.gz

• $ cat md5sums

• $ cat control

./

./md5sums

./control

Package: boinc-app-examplesSource: boincVersion: 7.2.28+dfsg-1exp1Architecture: amd64Maintainer: Debian BOINC Maintainers <[email protected]>Installed-Size: 2095Depends: libc6 (>= 2.15), libgcc1 (>= 1:4.1.1), libstdc++6 (>= 4.1.1)Recommends: boinc-server-makerSection: netPriority: optionalHomepage: 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.

$ cat md5sumsb16212c9224fdf10491110ca85b642a3 usr/lib/boinc-server-maker/apps/1secdfdffb385c1aca44c250ef8b9495fc8e usr/lib/boinc-server-maker/apps/concatecfb42818bb1f18d21af5919d5093458 usr/lib/boinc-server-maker/apps/sleeper4ac17118707819e29a4fc178661a1ea6 usr/lib/boinc-server-maker/apps/uc29d04ba9c7136385fa2a47ccb9fb17eed usr/lib/boinc-server-maker/apps/upper_case…-

Page 9: Debian Pakete selber erstellen Steffen Möller Night of Open Knowledge Lübeck 2013

Package: boinc-app-examplesSource: boincVersion: 7.2.28+dfsg-1exp1Architecture: amd64Maintainer: Debian BOINC Maintainers <[email protected]>Installed-Size: 2095Depends: libc6 (>= 2.15), libgcc1 (>= 1:4.1.1), libstdc++6 (>= 4.1.1)Recommends: boinc-server-makerSection: netPriority: optionalHomepage: 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.

Page 10: Debian Pakete selber erstellen Steffen Möller Night of Open Knowledge Lübeck 2013

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

Page 11: Debian Pakete selber erstellen Steffen Möller Night of Open Knowledge Lübeck 2013

Source Pakete

• Original „tarball“• „debian“ folder– control– changelog– rules– Optionales

• watch• menu• manpages• …

Page 12: Debian Pakete selber erstellen Steffen Möller Night of Open Knowledge Lübeck 2013

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?

Page 13: Debian Pakete selber erstellen Steffen Möller Night of Open Knowledge Lübeck 2013

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

Page 14: Debian Pakete selber erstellen Steffen Möller Night of Open Knowledge Lübeck 2013

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

Page 15: Debian Pakete selber erstellen Steffen Möller Night of Open Knowledge Lübeck 2013

debian/rules – funktioniert erstmal%: dh $@ --parallel

Page 16: Debian Pakete selber erstellen Steffen Möller Night of Open Knowledge Lübeck 2013

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

Page 17: Debian Pakete selber erstellen Steffen Möller Night of Open Knowledge Lübeck 2013

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.xzder entsprechenden .deb Pakete präsentiert.

Page 18: Debian Pakete selber erstellen Steffen Möller Night of Open Knowledge Lübeck 2013

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

Page 19: Debian Pakete selber erstellen Steffen Möller Night of Open Knowledge Lübeck 2013

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

Page 20: Debian Pakete selber erstellen Steffen Möller Night of Open Knowledge Lübeck 2013

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

Page 21: Debian Pakete selber erstellen Steffen Möller Night of Open Knowledge Lübeck 2013

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

Page 22: Debian Pakete selber erstellen Steffen Möller Night of Open Knowledge Lübeck 2013
Page 23: Debian Pakete selber erstellen Steffen Möller Night of Open Knowledge Lübeck 2013

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

Page 24: Debian Pakete selber erstellen Steffen Möller Night of Open Knowledge Lübeck 2013

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

Page 25: Debian Pakete selber erstellen Steffen Möller Night of Open Knowledge Lübeck 2013

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

Page 26: Debian Pakete selber erstellen Steffen Möller Night of Open Knowledge Lübeck 2013

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

Page 27: Debian Pakete selber erstellen Steffen Möller Night of Open Knowledge Lübeck 2013