To create a .deb package, firstly make sure you have all the dependencies required for compiling the package. Basically, try to compile it first and if once you can do that, it means everything is installed properly and you can create the .deb package.

Let’s get started!

1. Install all the packages needed for creating a .deb package

sudo apt-get install build-essential autoconf automake autotools-dev dh-make debhelper devscripts fakeroot xutils lintian pbuilder

2. Folder and source preparations

Extract the archive for the application you want to create the .deb file and name the folder like this:


Important: the folder name must be lowercase!

For instance, if compiling x264 from SVN, name the folder like this:


(I’ve also added the date when I’ve downloaded the package from SVN – 2 days ago)

Important: You should start packaging with a completely clean (pristine) source directory, or simply with freshly unpacked sources.

Then, place the source package .tar.gz file one directory up from where the source files have been extracted.

Example: if you want to compile X264, you can place the « x264-0.1+svn20100107 » folder containing the source files in your home folder (/home/yourusername/x264-0.1+svn20100107) and the .tar.gz file also in your home folder, meaning it shouldn’t be in the x264_0.1+svn20100107 folder. Hope you understood what I’m trying to say =)

If you don’t have the source files .tar.gz archive, simply create an archive from your source files (if for instance you downloaded the packages using Git).

3. Begin the « Debianization »

I will use the x264 files in my example, for easier explanations. To begin the « debianization », run the following commands:

cd x264-0.1+svn20100107
dh_make -e youremail@address -f ../x264-0.1+svn20100107.tar.gz

Where x264-0.1+svn20100107 is the source files folder of the application you want to create the .deb package of, x264-0.1+svn20100107.tar.gz is the tar.gz archive of the original source files and youremail@address is your email address.

This should be displayed after running the above command:

Type of package: single binary, indep binary, multiple binary, library, kernel module, kernel patch or cdbs?

We’ll not get into complicated things right now, so select « s » (single binary). Then hit « Enter » to confirm.

Please note that you should run dh_make only once, and that it won’t behave correctly if you run it again in the same, already « debianized », directory.

4. The « control » file.

Probably the most important step is how you edit the control file. This file contains various values which dpkg, dselect and other package management tools will use to manage the package.

This file will be created after completing step 3, and you can find it in the « debian » folder in the directory containing your source files. It initially looks like this:

1 Source: x264
2 Section: unknown
3 Priority: extra
4 Maintainer: andrei <>
5 Build-Depends: debhelper (>= 7), autotools-dev
6 Standards-Version: 3.8.1
7 Homepage: <insert the upstream URL, if relevant>
9 Package: x264
10 Architecture: any
11 Depends: ${shlibs:Depends}, ${misc:Depends}
12 Description: <insert up to 60 chars description>
<insert long description, indented with spaces>

I have numbered the lines for easier explanations. I won’t explain what’s already obvious though.

For now, enter a hompage (line 7) and a description (line 12) for your package and also a section, such as « X11 », on line 2.

Now, a very important step: we must enter the build dependencies on line 5. To find out which files our package needs, run the following command:

dpkg-depcheck -d ./configure

At the bottom, the output of this command should be something like this:Packages needed:


Enter all these packages on the line 5 of your control file, separated by a comma and a space. Don’t remove the already existing packages on line 5!

Here is how my control file now looks like:

Source: x264
Section: X11
Priority: extra
Maintainer: Andrew <>
Build-Depends: debhelper (>= 7), autotools-dev, libc6-i686, libldap-2.4-2, libsasl2-2, libtasn1-3, yasm, libgpg-error0, libgcrypt11, libkeyutils1, libidn11, libgnutls26, libk5crypto3, locales, libcurl3-gnutls, libkrb5support0, libkrb5-3, libgssapi-krb5-2, gawk
Standards-Version: 3.8.1

Package: x264
Architecture: any
Depends: ${shlibs:Depends}, ${misc:Depends}
Description: x264 is a free library for encoding H264/AVC video streams.

Then, save the file.

You can of course further modify this file, and enter what packages it replaces, suggests and so on, but I’ll post a link at the end of this post for all that because, like I said, my guide will be a very basic one.

5. The « copyright » file

In the same « debian » folder, you will also find a « copyright » file which you need to edit. The important things to add to this file are the place you got the package from and the actual copyright notice and license. You must include the complete license, unless it’s one of the common free software licenses such as GNU GPL or LGPL, BSD or the Artistic license, when you can just refer to the appropriate file in /usr/share/common-licenses/ directory that exists on every Debian system.

6. The « changelog » file

Also in the same « debian » folder, this file is very important, especially for signing your .deb file with your GPG key. If you do not have a GPG key, see THIS HOW-TO.

Very important: the name of the maintainer in the changelog file must be exactly the same as the one entered for the GPG key, so edit it and enter your name. Here is how mine looks like:

x264 (0.1+svn20100107-1) unstable; urgency=low

* Initial release (Closes: #nnnn) <nnnn is the bug number of your ITP>

— andrei <> Sat, 09 Jan 2010 22:40:24 +0200

If you enter the wrong name, you will see something like this:

dpkg-deb: building package `x264′ in `../x264-0.1+svn20100107-1_i386.deb’.
signfile x264-0.1+svn20100107-1.dsc
gpg: skipped « Andrew <> »: secret key not available
gpg: [stdin]: clearsign failed: secret key not available

7. Building the actual .deb package

Run the following command:

dpkg-buildpackage -rfakeroot

If you successfully completed step 6, you should be asked for your GPG passkey. Enter it and proceed. The .deb file should be now created in your home file, along with the .dsc, .changes, .diff.gz and .orig.tar.gz files.

8. Optional: Check your new .deb package using lintian:

Run the following command:

lintian -Ivi ../yourpackage.changes

In the case of my x264 example:

lintian -Ivi ../x264_0.1+svn20100107-1_i386.changes