Sie sind auf Seite 1von 34

PyCon DE 2012 - Debian-Paketierung

Paketierung von Python-Code fr Debian Jan Dittberner <jandd@debian.org> @jandd

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

Einleitung .. .. . ber den Vortragenden

Hinweise fr Upstreams . ...

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

Demo . .. ... ... .

Wer ist Jan Dittberner?


Softwarearchitekt bei der T-Systems Multimedia Solutions GmbH in Dresden Debian Developer CAcert.org Infrastrukturadministrator Spezialgebiete: freie Software, Kryptograe,

Jan Dittberner <jandd@debian.org> @jandd PyCon DE 2012 - Debian-Paketierung

Einleitung .. .. . ber den Vortragenden

Hinweise fr Upstreams . ...

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

Demo . .. ... ... .

Was habe ich mit Python zu tun?


Maintainer von sqlalchemy-migrate Maintainer des Python-Bindings fr cracklib2 Entwicklung und Hosting des Debian Member Portfolio Service (Pylons-Anwendung): http://portfolio.debian.net/ Maintainer diverser Debian-Pakete fr Python-Module und Mitglied in den Debian Python Module und Application Packaging-Teams Entwicklung diverser interner Python-Tools fr Projekte

Jan Dittberner <jandd@debian.org> @jandd PyCon DE 2012 - Debian-Paketierung

Einleitung .. .. . ber Debian

Hinweise fr Upstreams . ...

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

Demo . .. ... ... .

eine der umfangreichsten Distributionen freier Software 1993 gegrndet hoher Anspruch an technische Qualitt und Freiheit, festgeschrieben im Social Contract [1] inklusive DFSG (Debian Free Software Guidelines) reines Community-Projekt mit demokratischer Wahl des Projektleiters und Doocracy mehr als 800 Projektmitglieder (Debian Developers), viele weitere Beitragende

Jan Dittberner <jandd@debian.org> @jandd PyCon DE 2012 - Debian-Paketierung

Einleitung .. .. . ber Debian

Hinweise fr Upstreams . ...

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

Demo . .. ... ... .

Portierungen fr 12 ozielle (10 mit Linux-Kernel, 2 mit FreeBSD-Kernel) und weitere inozielle Architekturen mehr als 28000 Software-Pakete fr AMD64/x86_64- und i386-Architekturen Basis fr viele weitere Distributionen (populrster Vertreter: Ubuntu)

Jan Dittberner <jandd@debian.org> @jandd PyCon DE 2012 - Debian-Paketierung

Einleitung .. .. . Python und Debian

Hinweise fr Upstreams . ...

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

Demo . .. ... ... .

mehrere Python-Versionen in den Repositories /usr/bin/python == Python 2.x, /usr/bin/python3 == Python 3.x Team-Maintenance fr Python-Module (DPMT [2]) und Python-Anwendungen (PAPT [3]) IRC-Channel: #debian-python (OFTC, irc.debian.org) Mailingliste: debian-python@lists.debian.org Kooperation mit Upstreams, Debian-Derivaten und anderen Distributionen ist erwnscht!

Jan Dittberner <jandd@debian.org> @jandd PyCon DE 2012 - Debian-Paketierung

Einleitung .. .. .

Hinweise fr Upstreams . ...

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

Demo . .. ... ... .

Wie kommt Software in Debian?

normaler Ablauf fr 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 fr 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 Lizenzprfung)

Jan Dittberner <jandd@debian.org> @jandd PyCon DE 2012 - Debian-Paketierung

Einleitung .. .. .

Hinweise fr Upstreams . ...

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

Demo . .. ... ... .

Was sollte man als Upstream beachten?

eine anerkannte DFSG-kompatible Lizenz (korrekt) nutzen, die Nutzung dokumentieren und Lizenztext mitliefern alle zum Bauen bentigten 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 <jandd@debian.org> @jandd PyCon DE 2012 - Debian-Paketierung

Einleitung .. .. .

Hinweise fr Upstreams . ...

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

Demo . .. ... ... .

Was sollte man als Upstream beachten?

stabile, versionierte ohne JavaScript aundbare Download-URLs paketierte Versionen von Abhngigkeiten verwenden oder bei deren Aktualisierung mitwirken API- und ABI-Interfaces mglichst stabil halten (besonders bei Modulen wichtig) keine fest eingebauten Dateipfade verwenden Standardtools verwenden (z.B. distutils, distribute) Tests im Source-Archiv

Jan Dittberner <jandd@debian.org> @jandd PyCon DE 2012 - Debian-Paketierung

Einleitung .. .. .

Hinweise fr Upstreams . ...

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

Demo . .. ... ... .

Was sollte man als Upstream beachten?

nichts von what to do if you dont want your module in Debian? [8] tun

Jan Dittberner <jandd@debian.org> @jandd PyCon DE 2012 - Debian-Paketierung

Einleitung .. .. . Fr Eilige

Hinweise fr Upstreams . ...

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

Demo . .. ... ... .

Tools fr Eilige

stdeb Python to Debian source package conversion utility https://github.com/astraw/stdeb.git, auch per aptitude install stdeb installierbar pypi2deb GSoC-Projekt 2012 von Natalia Frydrych zum Erzeugen von lokalen Debian-Repositories aus PyPI-Paketen https://gitorious.org/pypi2deb

Jan Dittberner <jandd@debian.org> @jandd PyCon DE 2012 - Debian-Paketierung

Einleitung .. .. . Aufbau von Debian-Paketen

Hinweise fr Upstreams . ...

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

Demo . .. ... ... .

Quellpakete

Upstream-Archiv (mglicherweise befreit von unfreien Bestandteilen) .diff.gz oder .debian.tar.gz mit Debian-Anpassungen (je nach Version des Formats) aus einem Quellpaket knnen mehrere Binrpakete erzeugt werden

Jan Dittberner <jandd@debian.org> @jandd PyCon DE 2012 - Debian-Paketierung

Einleitung .. .. . Aufbau von Debian-Paketen

Hinweise fr Upstreams . ...

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

Demo . .. ... ... .

Quellpakete - wichtige Dateien in debian/


copyright Lizenz- und Copyrightinformationen control Metadaten wie Maintainer, Abhngigkeiten, Beschreibungen, Denition der Binrpakete changelog dokumentiert nderungen am Paket, deniert Versionsnummer rules Script mit Regeln zum Bauen der Binrpakete

Jan Dittberner <jandd@debian.org> @jandd PyCon DE 2012 - Debian-Paketierung

Einleitung .. .. . Aufbau von Debian-Paketen

Hinweise fr Upstreams . ...

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

Demo . .. ... ... .

Binrpakete bauen

dpkg-buildpackage -rfakeroot debuild pdebuild

Jan Dittberner <jandd@debian.org> @jandd PyCon DE 2012 - Debian-Paketierung

Einleitung .. .. . Aufbau von Debian-Paketen

Hinweise fr Upstreams . ...

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

Demo . .. ... ... .

Binrpakete - Aufbau

Dateiendung .deb Unix-ar-Archiv, mit 2 .tar.{gz,bz2,xz}-Dateien control.tar.gz fr Metadaten und Maintainer-Skripte data.tar.{gz,bz2,xz} mit den zu installierenden Dateien *_all.deb fr architekturunabhngige Dateien (Daten, Python-Module, Skripte ...) *_<arch>.deb fr architekturabhngige Dateien (kompilierter native Code wie Python-Extensions)

Jan Dittberner <jandd@debian.org> @jandd PyCon DE 2012 - Debian-Paketierung

Einleitung .. .. . Tools

Hinweise fr Upstreams . ...

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

Demo . .. ... ... .

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 wnscht RFH Pakete fr die Hilfe bentigt wird ITP Pakete die jemand erstellen will

Jan Dittberner <jandd@debian.org> @jandd PyCon DE 2012 - Debian-Paketierung

Einleitung .. .. . Tools

Hinweise fr Upstreams . ...

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

Demo . .. ... ... .

Helfer fr 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 Untersttzung von Subversion (gibt es auch fr andere VCS, z.B. git-buildpackage) lintian Prft Pakete auf Policy-Verletzungen uscan halbautomatischer Download von Upstream-Archiven

Jan Dittberner <jandd@debian.org> @jandd PyCon DE 2012 - Debian-Paketierung

Einleitung .. .. . Tools

Hinweise fr Upstreams . ...

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

Demo . .. ... ... .

debhelper

Sammlung von Skripten fr debian/rules Command-Sequencer dh fr Automatisierung von Paketbuilds mit gngigen Buildsystemen

dh_python{2,3}

dh_sphinxdoc

Spezika von Python-Packages


rumt generierte Sphinx-Dokumentation auf automatische Verlinkung mit paketierten Versionen der ntigen JavaScript-Dateien

Byte-Kompilierung Dependency-Berechnung Verlinkung in richtige Verzeichnisse

Jan Dittberner <jandd@debian.org> @jandd PyCon DE 2012 - Debian-Paketierung

Einleitung .. .. . Best Practice

Hinweise fr Upstreams . ...

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

Demo . .. ... ... .

Pakete werden fr Debian unstable gebaut (wandern spter automatisch nach testing und ggf. stable) Verwenden von pbuilder [12], cowbuilder [13] oder einem aktuellen unstable-chroot zum Bauen Verwenden eines Versionskontrollsystems (DPMT und PAPT verwenden Subversion)

Jan Dittberner <jandd@debian.org> @jandd PyCon DE 2012 - Debian-Paketierung

Einleitung .. .. . Vor dem Paketieren

Hinweise fr Upstreams . ...

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

Demo . .. ... ... .

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 briey describe this package

auf Mail vom BTS warten, ITP-Nummer merken ( #691190, http://bugs.debian.org/691190)

Jan Dittberner <jandd@debian.org> @jandd PyCon DE 2012 - Debian-Paketierung

Einleitung .. .. . Paketierung Grundlagen

Hinweise fr Upstreams . ...

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

Demo . .. ... ... .

Basissetup

Upstream-Sourcen besorgen, richtig verlinken, auspacken, ggf. Verzeichnis umbenennen Struktur in debian/ anlegen debian/control, debian/copyright, debian/watch hndisch anlegen debian/changelog mit
% dch --create --fromdirname

anlegen, ITP-Nummer eintragen


uscan testen debian/rules hndisch anlegen und ausfhrbar machen

Jan Dittberner <jandd@debian.org> @jandd PyCon DE 2012 - Debian-Paketierung

Einleitung .. .. . Paketierung Grundlagen

Hinweise fr Upstreams . ...

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

Demo . .. ... ... .

Erster Buildversuch

% pdebuild --buildresult ../build-area

Ergebnis:

Lintian: Kurzbeschreibung in debian/control zu lang Unit-Tests ausfhren in override_dh_auto_test in debian/rules

% pdebuild --buildresult ../build-area

Jan Dittberner <jandd@debian.org> @jandd PyCon DE 2012 - Debian-Paketierung

Einleitung .. .. .

Hinweise fr Upstreams . ...

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

Demo . .. ... ... .

Paketierung Multi-Binary-Package

Sphinx-Dokumentation hinzufgen

debian/control

neues Binrpaket python-errorhandler-doc eintragen python-sphinx in Build-Depends eintragen python-errorhandler-doc als Recommends fr python-errorhandler eintragen sphinxdoc bei dh --with hinzufgen override_dh_{auto_install, python2, sphinxdoc, compress}-Regeln denieren

debian/rules

Jan Dittberner <jandd@debian.org> @jandd PyCon DE 2012 - Debian-Paketierung

Einleitung .. .. .

Hinweise fr 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:

Lintian: fehlende doc-base-Registrierung debian/python-errorhandler-doc.doc-base Lintian: doppelte Lizenz Patch fr docs/index.txt, docs/license.txt entfernen

% pdebuild --buildresult ../build-area

Jan Dittberner <jandd@debian.org> @jandd PyCon DE 2012 - Debian-Paketierung

Einleitung .. .. .

Hinweise fr 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 <jandd@debian.org> @jandd PyCon DE 2012 - Debian-Paketierung

Einleitung .. .. .

Hinweise fr Upstreams . ...

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

Demo . .. ... ... .

Paketierung mit Python3-Untersttzung

Python3-Untersttzung hinzufgen

setup.py patchen (use_2to3) debian/control


neues Binrpaket python3-errorhandler python3 und python3-setuptools zu Build-Depends hinzufgen python3 bei dh --with hinzufgen python3-errorhandler bauen

debian/rules

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

Jan Dittberner <jandd@debian.org> @jandd PyCon DE 2012 - Debian-Paketierung

Einleitung .. .. .

Hinweise fr Upstreams . ...

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

Demo . .. ... ... .

Paketierung mit Python3-Untersttzung

Binrpakete testen

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

Dokumentation in Browser nen:


% iceweasel /usr/ share/doc/python - errorhandler -doc/html/ index.html

Jan Dittberner <jandd@debian.org> @jandd PyCon DE 2012 - Debian-Paketierung

Einleitung .. .. .

Hinweise fr Upstreams . ...

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

Demo . .. ... ... .

Paketierung mit Python3-Untersttzung

Binrpakete testen

Modul in interaktiven Python-Sessions testen (python bzw. python3)


>>> from logging import getLogger >>> from errorhandler import ErrorHandler >>> logger = getLogger () >>> e = ErrorHandler () >>> e. fired False >>> logger .error ('test ') >>> e. fired True

Jan Dittberner <jandd@debian.org> @jandd PyCon DE 2012 - Debian-Paketierung

Einleitung .. .. . Finale

Hinweise fr Upstreams . ...

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

Demo . .. ... ... .

% 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 <jandd@debian.org> @jandd PyCon DE 2012 - Debian-Paketierung

Fragen

Zeit fr Fragen

Jan Dittberner <jandd@debian.org> @jandd PyCon DE 2012 - Debian-Paketierung

Kontakt

Literatur

Jan Dittberner E-Mail: XMPP: Twitter/Identi.ca: IRC:

jandd@debian.org jan@dittberner.info @jandd jandd (OFTC, Freenode)

Jan Dittberner <jandd@debian.org> @jandd PyCon DE 2012 - Debian-Paketierung

Kontakt

Literatur

[1] [2] [3] [4]

Debian Social Contract. url: http://www.debian.org/social_contract. Debian Python Modules Team. url: http://wiki.debian.org/Teams/PythonModulesTeam. Python Applications Packaging Team. url: http: //wiki.debian.org/Teams/PythonAppsPackagingTeam. Tarek Ziad. PEP-386: Changing the version comparison module in Distutils. 2009. url: http://www.python.org/dev/peps/pep-0386/. Barry Warsaw. PEP-396: Module Version Numbers. 2011. url: http://www.python.org/dev/peps/pep-0396/.

[5]

Jan Dittberner <jandd@debian.org> @jandd PyCon DE 2012 - Debian-Paketierung

Kontakt

Literatur

[6]

A.M. Kuchling und Richard Jones. PEP-314: Metadata for Python Software Packages v1.1. 2003. url: http://www.python.org/dev/peps/pep-0314/. Tarek Ziad. PEP-390: Static metadata for Distutils. 2009. url: http://www.python.org/dev/peps/pep-0390/. Piotr Oarowski. what to do if you dont want your module in Debian. 2010. url: http://mail.python.org/pipermail/pythondev/2010-April/099729.html. Wie werden Fehler in Debian mit Reportbug berichtet? url: http://www.debian.org/Bugs/Reporting.

[7] [8]

[9]

Jan Dittberner <jandd@debian.org> @jandd PyCon 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 prospective packages. 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 <jandd@debian.org> @jandd PyCon DE 2012 - Debian-Paketierung