How to: Recompiling / Rebuild Debian / Ubuntu Linux Binary Source File Packages

by Vivek Gite · 14 comments

Q. I'd like to rebuild a Debian / Ubuntu package called foo with additional option. How do I recompile .deb packages?

A. To build a Debian package, you need the following packages / software installed on system
[a] fakeroot : fakeroot package - runs a command in an environment wherein it appears to have root privileges for file manipulation. This is useful for allowing users to create archives (tar, ar, .deb etc.) with files in them with root permissions/ownership.

[b] dpkg-dev : package building tools for Debian

[c] Development environment - You need gcc, make and all other compiler collection installed on system. Under Debian / Ubuntu package build-essential takes care of everything.

Step #1: Install required packages

Type the following command
$ sudo apt-get install build-essential fakeroot dpkg-dev

Step #2: Install source code package

First, create a directory to store source package, enter:
$ mkdir build
$ cd build

Use apt-get command to install source code for a package called foo
$ sudo apt-get source foo
Install all build-dependencies, enter:
$ sudo apt-get build-dep foo
Unpacks Debian / Ubuntu source archives with Debian source package (.dsc) manipulation tool, enter:
$ dpkg-source -x foo_version-revision.dsc
To just compile the package, you need cd into foo-version directory and issue the command
$ dpkg-buildpackage -rfakeroot -b
If you want to pass custom additonal options to configure, you can set up the DEB_BUILD_OPTIONS environment variable. For instance, if you want pass option called --enable-radio --enable-gui, enter:
$ DEB_BUILD_OPTIONS="--enable-gui --enable-radio" fakeroot debian/rules binary
You can also pass some variables to the Makefile. For example, if you want to compile with gcc v3.4, enter:
$ CC=gcc-3.4 DEB_BUILD_OPTIONS="--enable-gui --enable-radio" fakeroot debian/rules binary

A complete example - mplayer

Let us see how to rebuild mplayer media player package with --enable-radio --disable-ivt options:
# sudo apt-get source mplayer
# sudo apt-get build-dep mplayer
# dpkg-source -x mplayer_version-revision.dsc
# DEB_BUILD_OPTIONS="--enable-gui --enable-radio --disable-ivt" fakeroot debian/rules binary

Now wait for some time as compile procedure going to take its own time. To install the newly-built package, enter:
# dpkg -i ../mplayer_version-revision_arch.deb

Further readings:

Featured Articles:

Want to read Linux tips and tricks, but don't have time to check our blog everyday? Subscribe to our daily email newsletter to make sure you don't miss a single tip/tricks. Subscribe to our weekly newsletter here!

{ 1 trackback }

chewearn’s blog - Chronicles of iplist in Debian NSLU2 part 3
12.03.08 at 5:54 am

{ 13 comments… read them below or add one }

1 Scott Carlson 01.15.08 at 4:23 pm

I also use these lines to up the package number for a local deb to indicate what I’ve changed.

export EMAIL=someemail@gmail.com
dch -n

2 vivek 01.15.08 at 4:44 pm

Scott,

devscripts make the life of a Debian Package really easy.

3 housetier 01.15.08 at 8:25 pm

When I build from source, I create a build script that sets the environment variables and then executes debian/rules. That way I don’t have to find the correct setting again, when I build anew some time later. The script lives in ~/bin and thus is easily found.

4 atul_iims 01.17.08 at 6:11 am

i have one query that is i am having one text file which include lots of version like

likeCompress-Raw-Zlib-2.001.tar.gz
Compress-Zlib-2.001.tar.gz
ConsoleKit-0.2.3.tar.gz
Convert-ASN1-0.20.tar.gz
Crypt-SSLeay-0.51.tar.gz

my problem is how to extract string one place like
Compress-Zlib & version in other file 2.001.tar.gz
please if you have any idea about this please mail me

5 Nilesh 01.19.08 at 1:53 am

Is this possible for Fedora 7+ ?

6 vivek 01.19.08 at 6:43 am

Use rpmbuild under RHEL / CentOS / Suse / Fedora Linux

7 Killmyself 11.07.08 at 11:19 am

All this command didn’t help me much because I didn’t have any network connection at my home. All I can do is by downloading all the binary sources packages. But, I didn’t know the correct command to compile and execute the file. So, how can you help me then?
Before this I tried to install realplayer, but all those command I found from internet niether can help me much, but, when I drag the .bin file to terminal windows, it suddenly execute the file. Then, my installation complete, I didn’t need any command like:
sudo chmod a+x XXXXXX.bin

I didn’t need this command, I think my step quite easy. But know the problem is how can I install tar.gz packages? I tried the same way to but, it didn’t work at all. Can you suggest me any other alternative way to install this kind of packages?

I want to install video codecs for my ubuntu 8.04, I search a lot of blog in internet, but must of the way they show required me to have internet connection, but I didn’t have one, so please I’m begging anyone that can help me?
here my e-mail glistening.dream@gmail.com

8 Wilson Hung 12.07.08 at 1:25 pm

My environment is on ubuntu 8.10 and I entered $ sudo apt-get source foo at step 2, for all build-dependencies installation, but got an error : cannot find sources of foo package. What should I do to continue following steps? Thanks.

9 Vivek Gite 12.07.08 at 1:48 pm

Replace foo with actual package name such as apache2 or whatever you wish to rebuild.

10 brownman 04.20.09 at 1:48 am

u absolutly saved me years of pains..

im struggeling to recompiling- other games – for my desired learning..

10X alot – it’s a bless finding your page !

11 Chris Brito 05.26.09 at 1:55 pm

you help me so much! thank you

12 Maks 10.03.09 at 3:52 am

hi! but isn’t “apt-get source foo” doing “dpkg-source -x foo.dsc” ???? so in
# sudo apt-get source mplayer
# sudo apt-get build-dep mplayer
# dpkg-source -x mplayer_version-revision.dsc
# DEB_BUILD_OPTIONS=”–enable-gui –enable-radio –disable-ivt” fakeroot debian/rules binary

Isnt this step already included whet you do apt-get source ?? # dpkg-source -x mplayer_version-revision.dsc

13 Daniel 02.09.10 at 8:35 pm

When I rebuild a package this way and install it, then it will be overwritte with same version from repository next time I run apt-get update/dist-upgrade. I guess you forgot to tell how to push the version number. Perhaps “dch -i”?

Leave a Comment

You can use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Previous FAQ:

Next FAQ: