Introduction

This page is intended to gather a pragmatic and simplistic guide to creating a simple Debian package.

This ?HowTo It is also intended to show that Debian packaging is not that hard. Since Debian packaging is not that hard, why shouldn't plain beginners understand and do it, too?

Contents

?TableOfContents([1])

Why does this page even exist?

Since the [http://www.debian.org/doc/debian-policy/ Debian Policy] and [http://www.debian.org/doc/manuals/maint-guide/index.en.html the Debian New Maintainers' Guide] sometimes are too big to read for the people that prefer a more pragmatic approach to problems, this ?HowTo will focus on a pragmatic approach on learning how to create Debian packages.

Creating the package

If the information below seems scarce, please look in the [http://www.debian.org/doc/maint-guide/ New Maintainer's Guide] and in the [http://www.debian.org/doc/debian-policy/ Debian Policy].

If you want to create an official package make sure it is not already packaged. If [http://www.us.debian.org/devel/wnpp/being_packaged somebody is working on the package], then you should contact him/her if you intent to make an official package together. More info in the [http://www.debian.org/doc/maint-guide/ New Maintainer's Guide].

Initial compilation

Steps:

Note: It is best to create a chroot in which the application shall be built. This could avoid various security and system corruption problems. Additionally, it ensure that any local changes to your machine don't interfere with the build.

If the package compiles then it means you might have figured out all the dependencies; don't worry, this will be checked later in a chroot environment. Try the application in a chroot environment (some things might be needed in the chroot - proc to be mounted, sys to be mounted).

DO NOT run make install, unless you are absolutely sure. Broken installation scripts are, unfortunetely, very common and you probably don't want to run a test installation yet.

Note: running make on a system can sometimes be a security risk! It is a good idea to check that the Makefile does not contain funny stuff. Obscure applications might rarely fall into this case.

Debianization

After the first compilation it is time to create the debian specific part of the package.

[http://www.debian.org/doc/maint-guide/ch-first.en.html#s-dh_make Debianize] the package by using [http://packages.debian.org/dh-make dh_make].

File debian/control: Add to the Build-Depends (sometimes even Build-Depends-Indep) the list of packages needed to be installed for the application to compile (remember the list done previousely). You should leave out any packages that are listed in /usr/share/build-essential/essential-packages-list or /usr/share/build-essential/list and also leave out any packages that listed as dependencies by any of those packages.

File debian/rules: If any quirking was done then:

Delete all the unneeded templates. Don't worry, copies are present on the system and can be copied and modified at any time later.

Make sure that all the directories you will place files in are listed in the debian/dirs file without a leading slash (/).

Make sure that in the files are installed in the proper place (under a directory, not on the root system). Take care at the install target from the application makefile.

Note: very often the package will be installed under /usr/local. DO NOT INSTALL ANY FILES IN THERE.

Initial compilation of the package

TODO: add notes

All tests in chroot

Why is it a good idea to use a chroot?

Testing the package

TODO: add notes

Linda

Test all the packages with [http://packages.debian.org/linda linda].

linda package-version.changes

Lintian

Test all the packages with [http://packages.debian.org/lintian lintian].

lintian package-version.changes

Piuparts

Test all the .deb packages with [http://packages.debian.org/piuparts piuparts].

piuparts binpackage-version.deb

Check points for any package

This page is still incomplete; please help completing it by adding information to it. Do not forget that the information here should be in a concise form.

Notes: [20060410] EddyPetrisor is working on this; an initial complete page should be ready asap.

Advanced Packaging Procedures