Differences between revisions 1 and 60 (spanning 59 versions)
Revision 1 as of 2015-04-22 06:59:35
Size: 45
Comment:
Revision 60 as of 2015-09-08 19:26:56
Size: 6300
Comment: add pypi2deb
Deletions are marked like this. Additions are marked like this.
Line 1: Line 1:
Rédiger « AutomaticPackagingTools » ici. This page references tools that aim at providing basic working Debian packages.

||<rowstyle="background-color: #EEEEEE;">'''Language'''|| Any || Perl || Ruby || Python || Python || Node.js || Haskell || Go ||
||'''Tool (package name)'''|| [[https://tracker.debian.org/dh-make|dh-make]] || [[https://tracker.debian.org/dh-make-perl|dh-make-perl]] || [[https://tracker.debian.org/gem2deb|gem2deb]] || [[https://tracker.debian.org/python3-stdeb|python3-stdeb]] || [[https://github.com/p1otr/pypi2deb|pypi2deb]] || [[https://tracker.debian.org/npm2deb|npm2deb]] || [[https://tracker.debian.org/cabal-debian|cabal-debian]] || [[https://tracker.debian.org/dh-make-golang|dh-make-golang]] ||
||'''Upstream repository'''|| N/A || [[http://www.cpan.org/|CPAN.org]] || [[http://www.rubygems.org/|Rubygems.org]] || [[http://pypi.python.org/|PyPI]] || [[http://pypi.python.org/|PyPI]] || [[https://www.npmjs.com|npm]] || [[http://hackage.haskell.org/|Hackage]] ||
||||||||||||||||<rowstyle="background-color: #EEEEEE;"> Features ||
|| version || 1.20150601 || 0.87-1 || 0.21.1 || 0.8.5-1 || 0.20150816 || 0.2.2-1 || 4.31-1 || 0.0~git20150726.0.fc4210a-1 ||
|| cdbs or dh? || dh || dh || dh || dh || dh || dh || cdbs || dh ||
|| use DEBEMAIL || yes || yes || yes || yes || yes || yes || yes || yes ||
|| Build-Depends || no || yes || yes || partial || yes || no || yes || yes ||
|| Depends || no || yes || yes || yes || yes || yes || at build time || yes ||
|| Homepage || no || yes || yes || yes || yes || yes || no || yes ||
|| short/long descriptions || no || yes || yes || yes || yes || short only || yes || yes ||
|| DEP8 tests || no || no || only template || no || no || basic (only require) || no || no ||
|| .docs / .examples / etc. || no || docs + examples || docs only || no || yes || docs || no || no ||
|| debian/copyright || only template || yes || only template || no || yes || yes || yes || yes ||
|| debian/watch || only template || yes|| yes || yes || yes || yes || yes || no ||
|| git repo creation, pristine-tar, etc. || no || yes || no || no || no || no || no || yes ||
|| [[UpstreamMetadata|debian/upstream/metadata]] || no || yes || no || no || no || no || no || no ||
|| ITP mail template || no || no || no || no || yes || yes || no || yes ||
== Notes ==
 * There's a [[https://github.com/lnussbaum/autodeb-tests|Git repo]] with some example outputs
 * ''only template'' means that the tool provides a file that is not customized per-package
 * npm2deb only generates the Debian files from metadata, but does not create a proper source package. The upstream source is not downloaded.
 * Several tools use wrap-and-sort to unify structure of debian/ files
=== Build-depends and Depends generation ===
 * dh-make-perl uses local packages and apt-file to identify packages ([[https://bugs.debian.org/783110|broken with 0.84-2 and multiarch]])
 * stdeb also uses apt-file with a fallback on module name conversion ([[https://sources.debian.net/src/stdeb/0.8.2-4/stdeb/util.py/#L265|code]])
 * npm, gem2deb and cabal-Debian only convert upstream package names found in metadata, to Debian package names
 * [[https://wiki.debian.org/DEP-11|DEP-11]] could end up being the proper way to generate language-specific dependencies

=== Copyright file generation ===
TODO. 'cme update dpkg-copyright' is another approach.

== Usage ==
 * Download upstream package from repository
  * '''Perl:''' not supported? ({{{cpan -g Oxford::Calendar}}} does nothing here...)
  * '''Python:''' {{{pypi-download NAME --release VERSION}}}, f.e. {{{pypi-download Mako --release 1.0.1}}}
  * '''npm:''' {{{npm install PKGNAME}}}
  * '''Ruby:''' {{{gem fetch GEMNAME}}}
  * '''Haskell:''' {{{cabal unpack --pristine PKGNAME}}}
 * Debianize an unpacked upstream source
  * '''Perl:''' {{{dh-make-perl [make] .}}}
  * '''Python:''' {{{python3 setup.py --command-packages=stdeb.command debianize}}}
  * '''Ruby:''' {{{dh-make-ruby}}}
  * '''npm:''' not supported
  * '''Haskell:''' {{{cabal-debian --official}}} (see [[Haskell/CollabMaint/GettingStarted|the step-by-step guide]])
 * Debianize (without building source)
  * '''Perl:''' {{{dh-make-perl [make] {SOURCE_DIR | --cpan MODULE|DIST} }}}
  * '''Python:''' not supported
  * '''Ruby:''' {{{gem2deb --only-source-dir GEMNAME|GEMFILE}}}
  * '''npm:''' {{{npm2deb create PKGNAME}}}
  * '''Haskell:''' not supported, need unpacked source
 * Debianize and build source package
  * '''Perl:''' {{{dh-make-perl [make] {SOURCE_DIR | --cpan MODULE|DIST} --build-source}}} or {{{cpan2dsc MODULE}}}
  * '''Python:''' {{{py2dsc DISTFILE}}}
  * '''Ruby:''' {{{gem2deb --only-debian-source GEMNAME|GEMFILE}}}
  * '''npm, Haskell:''' not supported
 * Debianize and build binary packages
  * '''Perl:''' {{{dh-make-perl [make] {SOURCE_DIR | --cpan MODULE|DIST} --build}}} or {{{cpan2deb MODULE}}}
  * '''Python:''' {{{py2dsc-deb DISTFILE}}}
  * '''Ruby:''' {{{gem2deb GEMNAME|GEMFILE}}}
  * '''npm, Haskell:''' not supported
 * Debianize, build, install
  * '''Perl:''' {{{dh-make-perl [make] {SOURCE_DIR | --cpan MODULE|DIST} --install}}}
  * '''Python:''' {{{pypi-install NAME}}}
  * '''Ruby:''' not supported
  * '''npm, Haskell:''' not supported
 * Refresh an already created package, moving old files to .bak:
  * '''All:''' {{{cme migrate dpkg}}} or {{{cme fix dpkg}}}
  * '''Perl:''' {{{dh-make-perl refresh}}}
  * '''Python, Ruby:''' not supported
  * '''npm:''' not supported
  * '''Haskell:''' {{{cabal-debian --official --upgrade}}}

== Not (yet) covered tools ==
 * OCaml : oasis2debian and opam2debian

== Other languages without an automated generator ==
 * PHP (PEAR packages) -- see pkg-php-tools for packaging tools (and debpear for a simple generator)
 * Java -- see javahelper/maven-debian-helper for packaging tools. There is also "mh_make"

== See also ==
 * debdry: common frontend for most of the helpers described above [[https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=750576|description]]
 * alien: converts RPM/etc binary packages to deb binary packages
 * checkinstall: run an arbitrary upstream build system and auto-package the output

== TODO ==
 * Look at http://tapoueh.org/blog/2015/05/02-ql-to-deb.html
 * The R team seems to have a cran2deb package

This page references tools that aim at providing basic working Debian packages.

Language

Any

Perl

Ruby

Python

Python

Node.js

Haskell

Go

Tool (package name)

dh-make

dh-make-perl

gem2deb

python3-stdeb

pypi2deb

npm2deb

cabal-debian

dh-make-golang

Upstream repository

N/A

CPAN.org

Rubygems.org

PyPI

PyPI

npm

Hackage

Features

version

1.20150601

0.87-1

0.21.1

0.8.5-1

0.20150816

0.2.2-1

4.31-1

0.0~git20150726.0.fc4210a-1

cdbs or dh?

dh

dh

dh

dh

dh

dh

cdbs

dh

use DEBEMAIL

yes

yes

yes

yes

yes

yes

yes

yes

Build-Depends

no

yes

yes

partial

yes

no

yes

yes

Depends

no

yes

yes

yes

yes

yes

at build time

yes

Homepage

no

yes

yes

yes

yes

yes

no

yes

short/long descriptions

no

yes

yes

yes

yes

short only

yes

yes

DEP8 tests

no

no

only template

no

no

basic (only require)

no

no

.docs / .examples / etc.

no

docs + examples

docs only

no

yes

docs

no

no

debian/copyright

only template

yes

only template

no

yes

yes

yes

yes

debian/watch

only template

yes

yes

yes

yes

yes

yes

no

git repo creation, pristine-tar, etc.

no

yes

no

no

no

no

no

yes

debian/upstream/metadata

no

yes

no

no

no

no

no

no

ITP mail template

no

no

no

no

yes

yes

no

yes

Notes

  • There's a Git repo with some example outputs

  • only template means that the tool provides a file that is not customized per-package

  • npm2deb only generates the Debian files from metadata, but does not create a proper source package. The upstream source is not downloaded.
  • Several tools use wrap-and-sort to unify structure of debian/ files

Build-depends and Depends generation

  • dh-make-perl uses local packages and apt-file to identify packages (broken with 0.84-2 and multiarch)

  • stdeb also uses apt-file with a fallback on module name conversion (code)

  • npm, gem2deb and cabal-Debian only convert upstream package names found in metadata, to Debian package names
  • DEP-11 could end up being the proper way to generate language-specific dependencies

TODO. 'cme update dpkg-copyright' is another approach.

Usage

  • Download upstream package from repository
    • Perl: not supported? (cpan -g Oxford::Calendar does nothing here...)

    • Python: pypi-download NAME --release VERSION, f.e. pypi-download Mako --release 1.0.1

    • npm: npm install PKGNAME

    • Ruby: gem fetch GEMNAME

    • Haskell: cabal unpack --pristine PKGNAME

  • Debianize an unpacked upstream source
    • Perl: dh-make-perl [make] .

    • Python: python3 setup.py --command-packages=stdeb.command debianize

    • Ruby: dh-make-ruby

    • npm: not supported

    • Haskell: cabal-debian --official (see ?the step-by-step guide)

  • Debianize (without building source)
    • Perl: dh-make-perl [make] {SOURCE_DIR | --cpan MODULE|DIST} 

    • Python: not supported

    • Ruby: gem2deb --only-source-dir GEMNAME|GEMFILE

    • npm: npm2deb create PKGNAME

    • Haskell: not supported, need unpacked source

  • Debianize and build source package
    • Perl: dh-make-perl [make] {SOURCE_DIR | --cpan MODULE|DIST} --build-source or cpan2dsc MODULE

    • Python: py2dsc DISTFILE

    • Ruby: gem2deb --only-debian-source GEMNAME|GEMFILE

    • npm, Haskell: not supported

  • Debianize and build binary packages
    • Perl: dh-make-perl [make] {SOURCE_DIR | --cpan MODULE|DIST} --build or cpan2deb MODULE

    • Python: py2dsc-deb DISTFILE

    • Ruby: gem2deb GEMNAME|GEMFILE

    • npm, Haskell: not supported

  • Debianize, build, install
    • Perl: dh-make-perl [make] {SOURCE_DIR | --cpan MODULE|DIST} --install

    • Python: pypi-install NAME

    • Ruby: not supported

    • npm, Haskell: not supported

  • Refresh an already created package, moving old files to .bak:
    • All: cme migrate dpkg or cme fix dpkg

    • Perl: dh-make-perl refresh

    • Python, Ruby: not supported

    • npm: not supported

    • Haskell: cabal-debian --official --upgrade

Not (yet) covered tools

  • OCaml : oasis2debian and opam2debian

Other languages without an automated generator

  • PHP (PEAR packages) -- see pkg-php-tools for packaging tools (and debpear for a simple generator)
  • Java -- see javahelper/maven-debian-helper for packaging tools. There is also "mh_make"

See also

  • debdry: common frontend for most of the helpers described above description

  • alien: converts RPM/etc binary packages to deb binary packages
  • checkinstall: run an arbitrary upstream build system and auto-package the output

TODO