You are on page 1of 34

PyCon DE 2012 - Debian-Paketierung

Paketierung von Python-Code für Debian Jan Dittberner <jandd@debian.org> @jandd

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

Einleitung .. .. . Über den Vortragenden

Hinweise für 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, Kryptografie, …

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

Einleitung .. .. . Über den Vortragenden

Hinweise für Upstreams . ...

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

Demo . .. ... ... .

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ür Python-Module und Mitglied in den Debian Python Module und Application Packaging-Teams Entwicklung diverser interner Python-Tools für Projekte

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

Einleitung .. .. . Über Debian

Hinweise für Upstreams . ...

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

Demo . .. ... ... .

▶ ▶ ▶

eine der umfangreichsten Distributionen freier Software 1993 gegründet hoher Anspruch an technische Qualität 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 für Upstreams . ...

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

Demo . .. ... ... .

Portierungen für 12 offizielle (10 mit Linux-Kernel, 2 mit FreeBSD-Kernel) und weitere inoffizielle Architekturen mehr als 28000 Software-Pakete für AMD64/x86_64- und i386-Architekturen Basis für viele weitere Distributionen (populärster Vertreter: Ubuntu)

▶ ▶

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

Einleitung .. .. . Python und Debian

Hinweise für 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 für 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 erwünscht!

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

Einleitung .. .. .

Hinweise für Upstreams . ...

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

Demo . .. ... ... .

Was sollte man als Upstream beachten?

▶ ▶ ▶ ▶ ▶ ▶

stabile, versionierte ohne JavaScript auffindbare Download-URLs paketierte Versionen von Abhängigkeiten verwenden oder 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 <jandd@debian.org> @jandd PyCon 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 module ” in Debian?“ [8] tun

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

Einleitung .. .. . Für Eilige

Hinweise für Upstreams . ...

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

Demo . .. ... ... .

Tools für 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 für Upstreams . ...

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

Demo . .. ... ... .

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

Einleitung .. .. . Aufbau von Debian-Paketen

Hinweise für Upstreams . ...

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

Demo . .. ... ... .

Quellpakete - wichtige Dateien in debian/
▶ ▶

copyright – Lizenz- und Copyrightinformationen control – Metadaten wie Maintainer, Abhängigkeiten, Beschreibungen, Definition der Binärpakete changelog – dokumentiert Änderungen am Paket, definiert Versionsnummer rules – Script mit Regeln zum Bauen der Binärpakete

▶ ▶

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

Einleitung .. .. . Aufbau von Debian-Paketen

Hinweise für Upstreams . ...

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

Demo . .. ... ... .

Binärpakete bauen
▶ ▶ ▶ ▶

dpkg-buildpackage -rfakeroot debuild pdebuild

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

Einleitung .. .. . Aufbau von Debian-Paketen

Hinweise für Upstreams . ...

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

Demo . .. ... ... .

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

Einleitung .. .. . Tools

Hinweise für 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 wünscht RFH – Pakete für die Hilfe benötigt wird ITP – Pakete die jemand erstellen will

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

Einleitung .. .. . Tools

Hinweise für Upstreams . ...

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

Demo . .. ... ... .

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

Einleitung .. .. . Tools

Hinweise für Upstreams . ...

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

Demo . .. ... ... .

debhelper
▶ ▶

Sammlung von Skripten für debian/rules Command-Sequencer dh für Automatisierung von Paketbuilds mit gängigen Buildsystemen

dh_python{2,3}

dh_sphinxdoc
▶ ▶

Spezifika von Python-Packages
▶ ▶ ▶

räumt generierte Sphinx-Dokumentation auf automatische Verlinkung mit paketierten Versionen der nötigen 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 für Upstreams . ...

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

Demo . .. ... ... .

▶ ▶ ▶

Pakete werden für Debian unstable gebaut (wandern später 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 für 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 briefly 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 für 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 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 <jandd@debian.org> @jandd PyCon DE 2012 - Debian-Paketierung

Einleitung .. .. . Paketierung – Grundlagen

Hinweise für Upstreams . ...

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

Demo . .. ... ... .

Erster Buildversuch
▶ ▶

% pdebuild --buildresult ../build-area

Ergebnis:
▶ ▶

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 <jandd@debian.org> @jandd PyCon 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 sphinxdoc bei dh --with hinzufügen override_dh_{auto_install, python2, sphinxdoc, compress}-Regeln definieren

debian/rules
▶ ▶

Jan Dittberner <jandd@debian.org> @jandd PyCon 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:

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

▶ ▶

% pdebuild --buildresult ../build-area

Jan Dittberner <jandd@debian.org> @jandd PyCon 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 <jandd@debian.org> @jandd PyCon 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 python3 bei dh --with hinzufügen python3-errorhandler bauen

debian/rules
▶ ▶

▶ ▶

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

Jan Dittberner <jandd@debian.org> @jandd PyCon 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 <jandd@debian.org> @jandd PyCon 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. fired False >>> logger .error ('test ') >>> e. fired True

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

Einleitung .. .. . Finale

Hinweise für 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 für 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 Ożarowski. what to do if you don’t 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