Differences between revisions 1 and 52 (spanning 51 versions)
Revision 1 as of 2006-07-22 22:52:27
Size: 33
Editor: EddyPetrisor
Comment: most popular search term should be occupied
Revision 52 as of 2016-04-30 11:10:48
Size: 7567
Comment: rephrase first sentence
Deletions are marked like this. Additions are marked like this.
Line 1: Line 1:
#REDIRECT HowToPackageForDebian #language en
~-[[DebianWiki/EditorGuide#translation|Translation(s)]]: English - [[it/Packaging|Italiano]] - [[sv/Packaging|Svenska]] -~
----

{{{#!wiki debian
If you're just starting out with Debian packaging, please read the official documentation first:

 * [[http://www.debian.org/doc/manuals/maint-guide/index.en.html|the Debian New Maintainers' Guide]] -- tutorial for simple package
 * [[http://www.debian.org/doc/devel-manuals#packaging-tutorial|Debian Packaging Tutorial]] -- slides-based overview of Debian packaging
 * [[http://www.debian.org/doc/debian-policy/|Debian Policy]] -- guiding rules
 * [[http://www.debian.org/doc/manuals/developers-reference/|Developers Reference]] -- advanced guide etc.

}}}

----

<<TableOfContents()>>


== Why Packaging ==

Whether you want
 * to install some programs or data on several computers
 * to have consistent and deterministic versioning
 * the packaging system to take care of updates
 * to help the Debian project. (see [[http://www.debian.org/devel/wnpp/|Work-Needing and Prospective Packages]])

== What is a "package"? ==

There are two kinds of packages: "binary" (.deb) and "source" (.dsc) packages. There are tools (e.g. cpack) that are able to generate "binary" packages but such packaging is ad-hoc (build-system specific) and fragile. Such packages are more likely to fail to operate when the target system diverges from the original environment they were built in.

"source" packages in turn can be built to produce "binary" packages on any other machine and architecture. In a standardized, language and underlying build-system (make vs cmake) agnostic form they provide all the necessary information about build and run-time dependencies and conflicts, a standardized description of copyright and license information, an initial configuration, etc. That is why "binary" packages alone, without the "source" packages originating them, can not be submitted for inclusion into an official Debian distribution.

Therefore ''Packaging'' in the Debian world is primarily concerned with "source" packages. "binary" packages are just a product of such work.

== Introduction to Debian Packaging ==

To get a good grounding in Debian packaging:
  * first read the excellent [[IntroDebianPackaging|introduction to Debian Packaging]] to build a package from scratch,
  * you can also look at the [[BuildingTutorial|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:
 * [[http://www.debian.org/doc/manuals/maint-guide/index.en.html|the Debian New Maintainers' Guide]] describes the building of a Debian package to ordinary Debian users.
 * [[http://www.debian.org/doc/debian-policy/|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 [[DebianPkg:packaging-tutorial|packaging-tutorial]].
  * [[http://www.debian.org/doc/manuals/developers-reference/|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 [[DebianPkg:equivs]] which is only useful for building trivial metapackages and does not teach you anything about packaging.

== Packaging Procedures ==

=== Types / Formats ===

 * [[AndroidTools]] - android tools
 * [[Fonts/PackagingPolicy|Fonts]] - packages
 * [[http://pkg-go.alioth.debian.org/packaging.html|Go]] - libraries and applications
 * [[http://pkg-haskell.alioth.debian.org/haskell-policy/|Haskell]] - libraries (outdated, updating is listed as TODO item on [[Haskell]])
 * [[Java/Packaging|Java]] - libraries and applications
 * [[Javascript/Policy|JavaScript]] - libraries and applications
 * [[http://pkg-lua.alioth.debian.org/policy.html|Lua]] - modules
 * [[Teams/DebianMonoGroup/NewPackage|Mono]] - libraries and applications
 * [[Teams/DebianMozExtTeam#Common_practices|Mozilla Extensions]] - XUL extensions
 * [[http://pkg-ocaml-maint.alioth.debian.org/ocaml_packaging_policy.html/index.html|OCaml]] - libraries
 * [[Python/Packaging|Python]] - modules and applications
 * [[Teams/Ruby/Packaging|Ruby]] - modules and applications
 * [[RPM]] - repackaging RPM packages as .deb packages

=== Tools ===

 * [[UsingQuilt|Quilt]] - patch management
 * [[PackagingWithDarcs|Darcs]] - version control
 * [[PackagingWithGit|Git]] - version control
 * [[PbuilderTricks|Pbuilder]] - build tool
 * [[SecurePbuilder|Secure Pbuilder]] - builder tool

=== Advanced Procedures ===

 * [[AdvancedBuildingTips|some advanced building tips]]
 * [[Courses2005/BuildingWithoutHelper|How to make a Debian package without using a helper]]
 * [[/HackingDependencies|hacking dependencies]]

=== Useful Pages ===

 * [[PackagingFAQ|Packaging FAQ]]
 * [[Renaming_a_Package|Renaming a Package]]
 * [[PackageTransition|Package Transition]]
 * [[Adding and removing diversions]]
 * BzrBuildpackage/DesignIdeas
 * [[PkgSplit|How to split a package into smaller packages]]
 * [[Repackage_srcrpm]] - creating a proper Debian source package while referencing the src.rpm package
 * [[DebugPackage|Debug Package]]
 * [[PackageArchitectureAlmostAny|Creating package without some particular architectures]] - for easy porting
 * [[ConfigPackages|Config Package]]
 * [[EditingBinaryPackageMetadata|Editing Binary Package Metadata]]
 * [[SoftwarePackaging|Software Packaging]]
 * [[SponsorChecklist|Sponsor Checklist]]
 * [[HowToPackageForDebian|How to package for Debian]]
 * [[Package]]
 * [[AutomaticPackagingTools|Automatic Packaging Tools]]
 * [[DEX|DEX]] - improving Debian and its derivatives through cross-community teamwork

== Training Sessions ==

=== From Debian Women ===

[[DebianWomen]] organise interesting [[DebianWomen/Projects/Events/TrainingSessions|training sessions]].


== Other Information ==

=== External useful links ===
 * http://www.ibiblio.org/pub/Linux/docs/HOWTO/other-formats/html_single/Debian-Binary-Package-Building-HOWTO.html
 * http://qref.sourceforge.net/Debian/reference/ch-package.en.html
 * 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.
 * [[http://people.connexer.com/~roberto/howtos/debcustomize|Debian Package Customization HOWTO]]
 * [[http://feeding.cloud.geek.nz/posts/whats-in-a-debian-directory/|What's in a debian/ directory]] - detailed worked example
 * [[https://github.com/dod38fr/config-model/wiki/Managing-Debian-packages-with-cme|Managing Debian package files with cme]]
 * [[http://packaging.ubuntu.com/|Ubuntu Packaging Guide]]

=== See also: ===
 * http://www-128.ibm.com/developerworks/linux/library/l-debpkg.html : creating debian packages - high-level description of debian packaging .
 * WikiPedia:List_of_open-source_software_packages
 * [[http://www.debian-administration.org/articles/336]] Rolling your own debian packages.
 * [[http://vcs-pkg.org/|VCSPackaging]]
 * Autobuilding non-free packages: http://article.gmane.org/gmane.linux.debian.devel.announce/997

 * AutomakeTransition
 * PackageConfigUpgrade : propose a new way to smoothly handle configuration upgrades during package upgrades
 * DataPackages
----
CategoryPackageManagement CategoryPackaging
----

Translation(s): English - Italiano - Svenska


If you're just starting out with Debian packaging, please read the official documentation first:


Why Packaging

Whether you want

  • to install some programs or data on several computers
  • to have consistent and deterministic versioning
  • the packaging system to take care of updates
  • to help the Debian project. (see Work-Needing and Prospective Packages)

What is a "package"?

There are two kinds of packages: "binary" (.deb) and "source" (.dsc) packages. There are tools (e.g. cpack) that are able to generate "binary" packages but such packaging is ad-hoc (build-system specific) and fragile. Such packages are more likely to fail to operate when the target system diverges from the original environment they were built in.

"source" packages in turn can be built to produce "binary" packages on any other machine and architecture. In a standardized, language and underlying build-system (make vs cmake) agnostic form they provide all the necessary information about build and run-time dependencies and conflicts, a standardized description of copyright and license information, an initial configuration, etc. That is why "binary" packages alone, without the "source" packages originating them, can not be submitted for inclusion into an official Debian distribution.

Therefore Packaging in the Debian world is primarily concerned with "source" packages. "binary" packages are just a product of such work.

Introduction to Debian Packaging

To get a good grounding in Debian packaging:

Now that you have seen the basics, it is highly recommended that you read some real stuff:

Then, if you are looking for answers, you can come back here or read:

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.

Packaging Procedures

Types / Formats

Tools

Advanced Procedures

Useful Pages

Training Sessions

From Debian Women

DebianWomen organise interesting training sessions.

Other Information

See also:


CategoryPackageManagement CategoryPackaging