Debian packages are maintained by a community of Debian Developers and volunteers. This page contains information relevant to developers wishing to packaging software for Debian.
If you were looking for information on installing and removing packages from your Debian system, see the package management pages instead.
What is a "package"?
A Debian package is a collection of files that allow for applications or libraries to be distributed via the Debian package management system. The aim of packaging is to allow the automation of installing, upgrading, configuring, and removing computer programs for Debian in a consistent manner.
A Debian package consists of one source package component and one or more binary package components. Debian Policy requires that these package files are built with a particular structure and format but there are many methods of arriving at these files.
Only packages that are compliant with Debian policy will be accepted into the archive. Manually constructed binary packages (.deb) that are not built from a source package will never be accepted.
Source packages not only contain the upstream source distribution and options for the Debian package build system but also lists of run-time dependencies and conflicting packages, a machine-readable description of copyright and license information, initial configurations, etc.
While the goal of packaging is to produce these files, for the most part, you will be working with the unpacked source in a directory. The source package (.dsc) and binary packages (.deb) will be built for you by tools such as dpkg-buildpackage.
Introduction to Debian Packaging
If you're just starting out with Debian packaging, please read the official documentation first:
To get a good grounding in Debian packaging:
first read the excellent introduction to Debian Packaging to build a package from scratch,
you can also look at the building tutorial to apply changes to an existing package.
Now that you have seen the basics, it is highly recommended that you read some real stuff:
the Debian New Maintainers' Guide describes the building of a Debian package to ordinary Debian users.
the Debian Policy includes technical requirements that each package must satisfy.
Then, if you are looking for answers, you can come back here or read:
the interesting pdf file included in the package packaging-tutorial.
The Developers Reference provides an overview of the recommended procedures and the available resources for Debian developers.
What not to do:
There are no shortcuts to learning good packaging practices. Avoid equivs which is only useful for building trivial metapackages and does not teach you anything about packaging.
Types / Formats
AndroidTools - android tools
Fonts - packages
Go - libraries and applications
Java - libraries and applications
Lua - modules
Mono - libraries and applications
Mozilla Extensions - XUL extensions
OCaml - libraries
Python - modules and applications
Ruby - modules and applications
RPM - repackaging RPM packages as .deb packages
Quilt - patch management
Darcs - version control
Git - version control
Pbuilder - build tool
Secure Pbuilder - builder tool
?Adding and removing diversions
?How to split a package into smaller packages
Repackage_srcrpm - creating a proper Debian source package while referencing the src.rpm package
Creating package without some particular architectures - for easy porting
DEX - improving Debian and its derivatives through cross-community teamwork
From Debian Women
External useful links
http://www.debian.org/doc/manuals/apt-howto/ and package apt-howto
http://www.debian.org/devel/wnpp/prospective - requested packages, and packages being worked on.
What's in a debian/ directory - detailed worked example
http://www-128.ibm.com/developerworks/linux/library/l-debpkg.html : creating debian packages - high-level description of debian packaging .
http://www.debian-administration.org/articles/336 Rolling your own debian packages.
Autobuilding non-free packages: http://article.gmane.org/gmane.linux.debian.devel.announce/997
PackageConfigUpgrade : propose a new way to smoothly handle configuration upgrades during package upgrades