pycon de 2012 - paketierung von python-code für debian
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.TRANSCRIPT
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
. .
. .
.
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
. .
. .
.
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
. .
. .
.
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
. .
. .
.
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
. .
. .
.
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
. .
. .
.
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
. .
. .
.
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
. .
. .
.
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
. .
. .
.
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
. .
. .
.
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
. .
. .
.
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
. .
. .
.
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
. .
. .
.
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
. .
. .
.
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
. .
. .
.
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
. .
. .
.
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
. .
. .
.
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
. .
. .
.
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
. .
. .
.
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
. .
. .
.
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
. .
. .
.
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
. .
. .
.
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
. .
. .
.
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
. .
. .
.
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
. .
. .
.
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
. .
. .
.
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
. .
. .
.
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
. .
. .
.
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
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
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
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
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