34
PyCon DE 2012 - Debian-Paketierung Paketierung von Python-Code für Debian Jan Dittberner <[email protected]> @jandd 1. November 2012 PyCon DE 2012 – Deutsche Python-Konferenz Leipzig

PyCon De 2012 - Paketierung von Python-Code für Debian

Embed Size (px)

DESCRIPTION

Das Debian-Projekt ist mit mehr als 30000 Binärpaketen eine der größten Distributionen freier Software. Auch viele Python-Bibliotheken und Anwendungen wurden bereits für Debian paketiert. Es gibt aber viele Software die noch auf eine Paketierung oder bessere Pflege wartet.Im Vortrag wird gezeigt, wie man Python-Code für Debian paketiert. Dabei wird anhand eines Beispielpakets auf folgende Punkte näher eingegangen:* Wie erleichtert man als Upstream die Paketierung seiner Python-Software?* Was sind die aktuellen Tools für das Python-Packaging?* Wie baue ich Python2-, Python3- und (sphinx-)Dokumentations-Pakete?Die Demoschritte sind in dem Git-Repository unter https://gitorious.org/pycon-de-2012-debian-packaging-demo/debpkg-demo nachvollziehbar. Dazu mit git reset --hard [name_des_branches] auf die einzelnen Schritte springen.

Citation preview

Page 1: PyCon De 2012 - Paketierung von Python-Code für Debian

PyCon DE 2012 - Debian-PaketierungPaketierung von Python-Code für Debian

Jan Dittberner <[email protected]>@jandd

1. November 2012PyCon DE 2012 – Deutsche Python-Konferenz

Leipzig

Page 2: PyCon De 2012 - Paketierung von Python-Code für Debian

. .

. .

.

Einleitung.. . .

Hinweise für Upstreams.. . . .. . ..

Python-Module paketieren.. .. . .. . ..

Demo

Über den Vortragenden

Wer ist Jan Dittberner?▶ Softwarearchitekt bei der T-Systems Multimedia

Solutions GmbH in Dresden▶ Debian Developer▶ CAcert.org Infrastrukturadministrator▶ Spezialgebiete: freie Software, Kryptografie, …

Jan Dittberner <[email protected]> @janddPyCon DE 2012 - Debian-Paketierung

Page 3: PyCon De 2012 - Paketierung von Python-Code für Debian

. .

. .

.

Einleitung.. . .

Hinweise für Upstreams.. . . .. . ..

Python-Module paketieren.. .. . .. . ..

Demo

Über den Vortragenden

Was habe ich mit Python zu tun?▶ Maintainer von sqlalchemy-migrate▶ Maintainer des Python-Bindings für cracklib2▶ Entwicklung und Hosting des Debian Member

Portfolio Service (Pylons-Anwendung):http://portfolio.debian.net/

▶ Maintainer diverser Debian-Pakete fürPython-Module und Mitglied in den DebianPython Module und ApplicationPackaging-Teams

▶ Entwicklung diverser interner Python-Tools fürProjekte

Jan Dittberner <[email protected]> @janddPyCon DE 2012 - Debian-Paketierung

Page 4: PyCon De 2012 - Paketierung von Python-Code für Debian

. .

. .

.

Einleitung.. . .

Hinweise für Upstreams.. . . .. . ..

Python-Module paketieren.. .. . .. . ..

Demo

Über Debian

▶ eine der umfangreichsten Distributionen freierSoftware

▶ 1993 gegründet▶ hoher Anspruch an technische Qualität und

Freiheit, festgeschrieben im Social Contract [1]inklusive DFSG (Debian Free SoftwareGuidelines)

▶ reines Community-Projekt mit demokratischerWahl des Projektleiters und Doocracy

▶ mehr als 800 Projektmitglieder (DebianDevelopers), viele weitere Beitragende

Jan Dittberner <[email protected]> @janddPyCon DE 2012 - Debian-Paketierung

Page 5: PyCon De 2012 - Paketierung von Python-Code für Debian

. .

. .

.

Einleitung.. . .

Hinweise für Upstreams.. . . .. . ..

Python-Module paketieren.. .. . .. . ..

Demo

Über Debian

▶ Portierungen für 12 offizielle (10 mitLinux-Kernel, 2 mit FreeBSD-Kernel) undweitere inoffizielle Architekturen

▶ mehr als 28000 Software-Pakete fürAMD64/x86_64- und i386-Architekturen

▶ Basis für viele weitere Distributionen(populärster Vertreter: Ubuntu)

Jan Dittberner <[email protected]> @janddPyCon DE 2012 - Debian-Paketierung

Page 6: PyCon De 2012 - Paketierung von Python-Code für Debian

. .

. .

.

Einleitung.. . .

Hinweise für Upstreams.. . . .. . ..

Python-Module paketieren.. .. . .. . ..

Demo

Python und Debian

▶ mehrere Python-Versionen in den Repositories▶ /usr/bin/python == Python 2.x,

/usr/bin/python3 == Python 3.x▶ Team-Maintenance für Python-Module (DPMT [2]) und

Python-Anwendungen (PAPT [3])▶ IRC-Channel: #debian-python (OFTC, irc.debian.org)▶ Mailingliste: [email protected]▶ Kooperation mit Upstreams, Debian-Derivaten und anderen

Distributionen ist erwünscht!

Jan Dittberner <[email protected]> @janddPyCon DE 2012 - Debian-Paketierung

Page 7: PyCon De 2012 - Paketierung von Python-Code für Debian

. .

. .

.

Einleitung.. . .

Hinweise für Upstreams.. . . .. . ..

Python-Module paketieren.. .. . .. . ..

Demo

Wie kommt Software in Debian?

normaler Ablauf für neues Paket▶ interessante Software gefunden▶ Suche in WNPP, ob schon jemand daran arbeitet▶ RFP (Request for Packaging) oder ITP (Intent to

Package) im Bugtracking-System▶ Ermittlung von Lizenzinformationen und anderen für

die Paketierung notwendigen Daten▶ Paketierungsarbeit durch Debian-Developer oder

interessierten Maintainer▶ Upload durch Debian-Developer▶ bei erstem Upload Freigabe oder Ablehnung durch

einen FTP-Master (vor allem wegen Lizenzprüfung)Jan Dittberner <[email protected]> @janddPyCon DE 2012 - Debian-Paketierung

Page 8: PyCon De 2012 - Paketierung von Python-Code für Debian

. .

. .

.

Einleitung.. . .

Hinweise für Upstreams.. . . .. . ..

Python-Module paketieren.. .. . .. . ..

Demo

Was sollte man als Upstream beachten?

▶ eine anerkannte DFSG-kompatible Lizenz (korrekt)nutzen, die Nutzung dokumentieren und Lizenztextmitliefern

▶ alle zum Bauen benötigten Dateien mitliefern▶ saubere Versionierung nach PEP-0386 [4] und

PEP-396 [5], eine Version pro Source-Archiv▶ Metadaten in setup.py (siehe PEP-314 [6]) oder

besser setup.cfg (siehe PEP-390 [7])▶ Hinweise aus

http://wiki.debian.org/UpstreamGuide beachten

Jan Dittberner <[email protected]> @janddPyCon DE 2012 - Debian-Paketierung

Page 9: PyCon De 2012 - Paketierung von Python-Code für Debian

. .

. .

.

Einleitung.. . .

Hinweise für Upstreams.. . . .. . ..

Python-Module paketieren.. .. . .. . ..

Demo

Was sollte man als Upstream beachten?

▶ stabile, versionierte ohne JavaScript auffindbareDownload-URLs

▶ paketierte Versionen von Abhängigkeiten verwendenoder bei deren Aktualisierung mitwirken

▶ API- und ABI-Interfaces möglichst stabil halten(besonders bei Modulen wichtig)

▶ keine fest eingebauten Dateipfade verwenden▶ Standardtools verwenden (z.B. distutils, distribute)▶ Tests im Source-Archiv

Jan Dittberner <[email protected]> @janddPyCon DE 2012 - Debian-Paketierung

Page 10: PyCon De 2012 - Paketierung von Python-Code für Debian

. .

. .

.

Einleitung.. . .

Hinweise für Upstreams.. . . .. . ..

Python-Module paketieren.. .. . .. . ..

Demo

Was sollte man als Upstream beachten?

▶ nichts von ”what to do if you don’t want your modulein Debian?“ [8] tun

Jan Dittberner <[email protected]> @janddPyCon DE 2012 - Debian-Paketierung

Page 11: PyCon De 2012 - Paketierung von Python-Code für Debian

. .

. .

.

Einleitung.. . .

Hinweise für Upstreams.. . . .. . ..

Python-Module paketieren.. .. . .. . ..

Demo

Für Eilige

Tools für Eilige▶ stdeb – Python to Debian source package conversion utility

https://github.com/astraw/stdeb.git, auch peraptitude install stdeb installierbar

▶ pypi2deb – GSoC-Projekt 2012 von Natalia Frydrych zumErzeugen von lokalen Debian-Repositories aus PyPI-Paketenhttps://gitorious.org/pypi2deb

Jan Dittberner <[email protected]> @janddPyCon DE 2012 - Debian-Paketierung

Page 12: PyCon De 2012 - Paketierung von Python-Code für Debian

. .

. .

.

Einleitung.. . .

Hinweise für Upstreams.. . . .. . ..

Python-Module paketieren.. .. . .. . ..

Demo

Aufbau von Debian-Paketen

Quellpakete▶ Upstream-Archiv (möglicherweise befreit von unfreien

Bestandteilen)▶ .diff.gz oder .debian.tar.gz mit Debian-Anpassungen

(je nach Version des Formats)▶ aus einem Quellpaket können mehrere Binärpakete erzeugt

werden

Jan Dittberner <[email protected]> @janddPyCon DE 2012 - Debian-Paketierung

Page 13: PyCon De 2012 - Paketierung von Python-Code für Debian

. .

. .

.

Einleitung.. . .

Hinweise für Upstreams.. . . .. . ..

Python-Module paketieren.. .. . .. . ..

Demo

Aufbau von Debian-Paketen

Quellpakete - wichtige Dateien in debian/▶ copyright – Lizenz- und

Copyrightinformationen▶ control – Metadaten wie Maintainer,

Abhängigkeiten, Beschreibungen, Definition derBinärpakete

▶ changelog – dokumentiert Änderungen amPaket, definiert Versionsnummer

▶ rules – Script mit Regeln zum Bauen derBinärpakete

Jan Dittberner <[email protected]> @janddPyCon DE 2012 - Debian-Paketierung

Page 14: PyCon De 2012 - Paketierung von Python-Code für Debian

. .

. .

.

Einleitung.. . .

Hinweise für Upstreams.. . . .. . ..

Python-Module paketieren.. .. . .. . ..

Demo

Aufbau von Debian-Paketen

Binärpakete bauen▶ dpkg-buildpackage -rfakeroot▶ debuild▶ pdebuild▶ …

Jan Dittberner <[email protected]> @janddPyCon DE 2012 - Debian-Paketierung

Page 15: PyCon De 2012 - Paketierung von Python-Code für Debian

. .

. .

.

Einleitung.. . .

Hinweise für Upstreams.. . . .. . ..

Python-Module paketieren.. .. . .. . ..

Demo

Aufbau von Debian-Paketen

Binärpakete - Aufbau▶ Dateiendung .deb▶ Unix-ar-Archiv, mit 2 .tar.{gz,bz2,xz}-Dateien▶ control.tar.gz für Metadaten und Maintainer-Skripte▶ data.tar.{gz,bz2,xz} mit den zu installierenden Dateien▶ *_all.deb für architekturunabhängige Dateien (Daten,

Python-Module, Skripte ...)▶ *_<arch>.deb für architekturabhängige Dateien (kompilierter

native Code wie Python-Extensions)

Jan Dittberner <[email protected]> @janddPyCon DE 2012 - Debian-Paketierung

Page 16: PyCon De 2012 - Paketierung von Python-Code für Debian

. .

. .

.

Einleitung.. . .

Hinweise für Upstreams.. . . .. . ..

Python-Module paketieren.. .. . .. . ..

Demo

Tools

Debian Bugtracking System BTS▶ http://bugs.debian.org▶ Interaktion per E-Mail oder mit reportbug [9] sowie mit bts

aus dem Paket devscripts [10]▶ WNPP – Work needing and prospective packages [11]

▶ RFP – Pakete die sich jemand wünscht▶ RFH – Pakete für die Hilfe benötigt wird▶ ITP – Pakete die jemand erstellen will

Jan Dittberner <[email protected]> @janddPyCon DE 2012 - Debian-Paketierung

Page 17: PyCon De 2012 - Paketierung von Python-Code für Debian

. .

. .

.

Einleitung.. . .

Hinweise für Upstreams.. . . .. . ..

Python-Module paketieren.. .. . .. . ..

Demo

Tools

Helfer für Arbeit mit Quellpaketen▶ dch – Bearbeiten von debian/changelog▶ debcommit – Arbeiten mit Versionskontrollsystemen mit

Informationen aus debian/changelog und debian/control▶ svn-buildpackage – Bauen von Paketen mit Unterstützung

von Subversion (gibt es auch für andere VCS, z.B.git-buildpackage)

▶ lintian – Prüft Pakete auf Policy-Verletzungen▶ uscan – halbautomatischer Download von Upstream-Archiven

Jan Dittberner <[email protected]> @janddPyCon DE 2012 - Debian-Paketierung

Page 18: PyCon De 2012 - Paketierung von Python-Code für Debian

. .

. .

.

Einleitung.. . .

Hinweise für Upstreams.. . . .. . ..

Python-Module paketieren.. .. . .. . ..

Demo

Tools

debhelper▶ Sammlung von Skripten für debian/rules▶ Command-Sequencer dh für Automatisierung von Paketbuilds

mit gängigen Buildsystemen

dh_python{2,3}▶ Spezifika von

Python-Packages▶ Byte-Kompilierung▶ Dependency-Berechnung▶ Verlinkung in richtige

Verzeichnisse

dh_sphinxdoc

▶ räumt generierteSphinx-Dokumentation auf

▶ automatische Verlinkung mitpaketierten Versionen dernötigen JavaScript-Dateien

Jan Dittberner <[email protected]> @janddPyCon DE 2012 - Debian-Paketierung

Page 19: PyCon De 2012 - Paketierung von Python-Code für Debian

. .

. .

.

Einleitung.. . .

Hinweise für Upstreams.. . . .. . ..

Python-Module paketieren.. .. . .. . ..

Demo

Best Practice

▶ Pakete werden für Debian unstable gebaut (wandern späterautomatisch nach testing und ggf. stable)

▶ Verwenden von pbuilder [12], cowbuilder [13] oder einemaktuellen unstable-chroot zum Bauen

▶ Verwenden eines Versionskontrollsystems (DPMT und PAPTverwenden Subversion)

Jan Dittberner <[email protected]> @janddPyCon DE 2012 - Debian-Paketierung

Page 20: PyCon De 2012 - Paketierung von Python-Code für Debian

. .

. .

.

Einleitung.. . .

Hinweise für Upstreams.. . . .. . ..

Python-Module paketieren.. .. . .. . ..

Demo

Vor dem Paketieren

Vorbereitung▶ Paketierbarkeit analysieren (Lizenz, …)▶ ITP im Debian-Bugtracker eintragen:

% reportbug wnpp▶

”Choose the request Type:“ – 1 (ITP)▶

”Please enter the proposed package name“ –python-errorhandler

▶”Please briefly describe this package …“

▶ …▶ auf Mail vom BTS warten, ITP-Nummer merken (

#691190, http://bugs.debian.org/691190)

Jan Dittberner <[email protected]> @janddPyCon DE 2012 - Debian-Paketierung

Page 21: PyCon De 2012 - Paketierung von Python-Code für Debian

. .

. .

.

Einleitung.. . .

Hinweise für Upstreams.. . . .. . ..

Python-Module paketieren.. .. . .. . ..

Demo

Paketierung – Grundlagen

Basissetup▶ Upstream-Sourcen besorgen, richtig verlinken, auspacken, ggf.

Verzeichnis umbenennen▶ Struktur in debian/ anlegen▶ debian/control, debian/copyright, debian/watch

händisch anlegen▶ debian/changelog mit

% dch --create --fromdirname

anlegen, ITP-Nummer eintragen▶ uscan testen▶ debian/rules händisch anlegen und ausführbar machen

Jan Dittberner <[email protected]> @janddPyCon DE 2012 - Debian-Paketierung

Page 22: PyCon De 2012 - Paketierung von Python-Code für Debian

. .

. .

.

Einleitung.. . .

Hinweise für Upstreams.. . . .. . ..

Python-Module paketieren.. .. . .. . ..

Demo

Paketierung – Grundlagen

Erster Buildversuch▶ % pdebuild --buildresult ../build-area▶ Ergebnis:

▶ E Lintian: Kurzbeschreibung in debian/control zu lang▶ Unit-Tests ausführen in override_dh_auto_test in

debian/rules

▶ % pdebuild --buildresult ../build-area

▶ ,

Jan Dittberner <[email protected]> @janddPyCon DE 2012 - Debian-Paketierung

Page 23: PyCon De 2012 - Paketierung von Python-Code für Debian

. .

. .

.

Einleitung.. . .

Hinweise für Upstreams.. . . .. . ..

Python-Module paketieren.. .. . .. . ..

Demo

Paketierung – Multi-Binary-Package

Sphinx-Dokumentation hinzufügen▶ debian/control

▶ neues Binärpaket python-errorhandler-doc eintragen▶ python-sphinx in Build-Depends eintragen▶ python-errorhandler-doc als Recommends für

python-errorhandler eintragen▶ debian/rules

▶ sphinxdoc bei dh --with hinzufügen▶ override_dh_{auto_install, python2, sphinxdoc,

compress}-Regeln definieren

Jan Dittberner <[email protected]> @janddPyCon DE 2012 - Debian-Paketierung

Page 24: PyCon De 2012 - Paketierung von Python-Code für Debian

. .

. .

.

Einleitung.. . .

Hinweise für Upstreams.. . . .. . ..

Python-Module paketieren.. .. . .. . ..

Demo

Paketierung – Multi-Binary-Package

Buildversuch mit Sphinx-Dokumentation▶ % pdebuild --buildresult ../build-area▶ ! Fehlschlag: pkginfo kann nicht importiert werden▶ python-pkginfo in Build-Depends eintragen▶ % pdebuild --buildresult ../build-area▶ Ergebnis:

▶ E Lintian: fehlende doc-base-Registrierung :debian/python-errorhandler-doc.doc-base

▶ E Lintian: doppelte Lizenz : Patch für docs/index.txt,docs/license.txt entfernen

▶ % pdebuild --buildresult ../build-area

▶ ,Jan Dittberner <[email protected]> @janddPyCon DE 2012 - Debian-Paketierung

Page 25: PyCon De 2012 - Paketierung von Python-Code für Debian

. .

. .

.

Einleitung.. . .

Hinweise für Upstreams.. . . .. . ..

Python-Module paketieren.. .. . .. . ..

Demo

Paketierung – Multi-Binary-Package

Testen ob Paket zweimal nacheinander durchbaut▶ % pdebuild --buildresult ../build-area -- --twice▶ ! Fehlschlag: dpkg-source: info: local changes

detected▶ errorhandler.egg-info in debian/rules in

override_dh_auto_clean entfernen▶ % pdebuild --buildresult ../build-area -- --twice

▶ ,Jan Dittberner <[email protected]> @janddPyCon DE 2012 - Debian-Paketierung

Page 26: PyCon De 2012 - Paketierung von Python-Code für Debian

. .

. .

.

Einleitung.. . .

Hinweise für Upstreams.. . . .. . ..

Python-Module paketieren.. .. . .. . ..

Demo

Paketierung – mit Python3-Unterstützung

Python3-Unterstützung hinzufügen▶ setup.py patchen (use_2to3)▶ debian/control

▶ neues Binärpaket python3-errorhandler▶ python3 und python3-setuptools zu Build-Depends

hinzufügen▶ debian/rules

▶ python3 bei dh --with hinzufügen▶ python3-errorhandler bauen

▶ % pdebuild --buildresult ../build-area -- --twice

▶ ,Jan Dittberner <[email protected]> @janddPyCon DE 2012 - Debian-Paketierung

Page 27: PyCon De 2012 - Paketierung von Python-Code für Debian

. .

. .

.

Einleitung.. . .

Hinweise für Upstreams.. . . .. . ..

Python-Module paketieren.. .. . .. . ..

Demo

Paketierung – mit Python3-Unterstützung

Binärpakete testen▶ installieren mit

% sudo dpkg -i ../python*errorhandler*.deb

▶ Dokumentation in Browser öffnen:% iceweasel '

/usr/share/doc/python-errorhandler -doc/html/ 'index.html

Jan Dittberner <[email protected]> @janddPyCon DE 2012 - Debian-Paketierung

Page 28: PyCon De 2012 - Paketierung von Python-Code für Debian

. .

. .

.

Einleitung.. . .

Hinweise für Upstreams.. . . .. . ..

Python-Module paketieren.. .. . .. . ..

Demo

Paketierung – mit Python3-Unterstützung

Binärpakete testen▶ Modul in interaktiven Python-Sessions testen (python bzw.

python3)>>> from logging import getLogger>>> from errorhandler import ErrorHandler>>> logger = getLogger()>>> e = ErrorHandler()>>> e.firedFalse>>> logger.error('test')>>> e.firedTrue

Jan Dittberner <[email protected]> @janddPyCon DE 2012 - Debian-Paketierung

Page 29: PyCon De 2012 - Paketierung von Python-Code für Debian

. .

. .

.

Einleitung.. . .

Hinweise für Upstreams.. . . .. . ..

Python-Module paketieren.. .. . .. . ..

Demo

Finale

% cd ../build-area% svn-inject -o python-errorhandler_1.1.1-1.dsc '

svn+ssh://svn.debian.org/svn/python-modules/ 'packages/

% cd python-errorhandler% dch -r ""% svn-buildpackage% cd ..% dput python-errorhandler_1.1.1-1_amd64.changes% cd python-errorhandler% debcommit -r

Jan Dittberner <[email protected]> @janddPyCon DE 2012 - Debian-Paketierung

Page 30: PyCon De 2012 - Paketierung von Python-Code für Debian

Fragen

Zeit für Fragen

Jan Dittberner <[email protected]> @janddPyCon DE 2012 - Debian-Paketierung

Page 31: PyCon De 2012 - Paketierung von Python-Code für Debian

Kontakt Literatur

Jan DittbernerE-Mail: [email protected]: [email protected]

Twitter/Identi.ca: @janddIRC: jandd (OFTC, Freenode)

Jan Dittberner <[email protected]> @janddPyCon DE 2012 - Debian-Paketierung

Page 32: PyCon De 2012 - Paketierung von Python-Code für Debian

Kontakt Literatur

[1] Debian Social Contract. url:http://www.debian.org/social_contract.

[2] Debian Python Modules Team. url:http://wiki.debian.org/Teams/PythonModulesTeam.

[3] Python Applications Packaging Team. url: http://wiki.debian.org/Teams/PythonAppsPackagingTeam.

[4] Tarek Ziadé. PEP-386: Changing the version comparisonmodule in Distutils. 2009. url:http://www.python.org/dev/peps/pep-0386/.

[5] Barry Warsaw. PEP-396: Module Version Numbers. 2011.url: http://www.python.org/dev/peps/pep-0396/.

Jan Dittberner <[email protected]> @janddPyCon DE 2012 - Debian-Paketierung

Page 33: PyCon De 2012 - Paketierung von Python-Code für Debian

Kontakt Literatur

[6] A.M. Kuchling und Richard Jones. PEP-314: Metadata forPython Software Packages v1.1. 2003. url:http://www.python.org/dev/peps/pep-0314/.

[7] Tarek Ziadé. PEP-390: Static metadata for Distutils. 2009.url: http://www.python.org/dev/peps/pep-0390/.

[8] Piotr Ożarowski. what to do if you don’t want your modulein Debian. 2010. url:http://mail.python.org/pipermail/python-dev/2010-April/099729.html.

[9] Wie werden Fehler in Debian mit Reportbug berichtet? url:http://www.debian.org/Bugs/Reporting.

Jan Dittberner <[email protected]> @janddPyCon DE 2012 - Debian-Paketierung

Page 34: PyCon De 2012 - Paketierung von Python-Code für Debian

Kontakt Literatur

[10] devscripts source package. url:http://packages.qa.debian.org/d/devscripts.html.

[11] Debian Bug Tracking System: Work needing and prospectivepackages. url: http://bugs.debian.org/wnpp.

[12] pbuilder source package. url:http://packages.debian.org/p/pbuilder.html.

[13] cowbuilder source package. url:http://packages.debian.org/c/cowbuilder.html.

Jan Dittberner <[email protected]> @janddPyCon DE 2012 - Debian-Paketierung