HowTo recompile Debian packages

This article will show how you can rebuild any debian package. You might need to rebuild a package for various reasons: add/remove some compilation options, make some changes to the sources, or compile a newer version from testing/sid into stable, etc. Regardless of your reason, this can be done very easy using debian tools.

First you will need to have some basic debian building tools installed:

apt-get install devscripts build-essential

1. Get the source package

Debian repositories contain the sources for all existing debian packages. In order to get a source package you will need to have in your /etc/apt/sources.list a deb-src line (this is exactly as a regular deb repository line, but it is for sources). This will look like:

deb-src etch main non-free contrib

change it accordingly to your needs (a close mirror, testing or sid instead of etch, and so on).

Once you have your sources file updated refresh your packages lists:

apt-get update

Now you can install the source package using:

apt-get source <package>

this will download the source package inside the local folder, so you might want to change to a proper location before doing this. Also as the final step it verifies and uncompresses the package and prepares it for compilation. You will just have to move in the newly created folder (name and version of the package).

2. Installing dependencies

The compilation of each package will have its own unique set of dependencies, based on the software itself. You will need to install them prior to the actual compilation, if not the process will most certainly fail. To do this we will again rely on the powerful apt:

apt-get build-dep <package>

this will pull from your current repository the needed dependencies, and install them.

3. Make your changes and rebuild the package

Now is the time to make your changes. This is outside the scope of this post, but normally you will either modify source files of the package or make changes inside the debian compilation scripts (or maybe no changes are needed and you are doing just a recompile on a different architecture). Inside the debian folder you have important files like rules (that contain the compilation options among others), changelog if you want to add your own version you will need to add it here, and so on. Check the debian maintainer’s guide for full details.

Once you’ve made your changes you can start the compilation using:

cd <package-ver>
debuild -us -uc

We used debuild -us -uc since we are not the maintainer of the package and we will not be able to sign the package.

You will find the debian packages that you have just compiled one folder above, among some other files (the initial sources, compilation logs, etc.). You can either put them in a local repository and install them using apt-get as usual, or you can just install them using dpkg:

cd ..
dpkg -i <package_file.deb>

Finally here is a real life example

Ok, let’s see how this works for a real package. Let’s say we want to recompile for some reason the mysql server package (mysql-server-5.0). Here is how this would work:

apt-get source mysql-server-5.0
apt-get build-dep mysql-server-5.0
cd mysql-dfsg-5.0-5.0.32
debuild -us -uc
cd ..
dpkg -i *.deb
comments powered by Disqus