How to: Recompiling / Rebuild Debian / Ubuntu Linux Binary Source File Packages
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:
- Debian Binary Package Building HOWTO
- Debian New Maintainers' Guide
- Man pages - dpkg-source, apt-get, dpkg, dpkg-buildpackage, fakeroot
Subscribe to our free e-mail newsletter or RSS feed to get all updates.
You can Email this page to a friend.
Related Other Helpful FAQs:
- Ubuntu Linux: How do I install .deb packages?
- Ubuntu Linux: Uninstall / Remove Any Installed Software
- Debian / Ubuntu Linux Install tracepath / traceroute6 / tracepath6 commands
- Linux List All Outdated Packages Which Could be Updated and Applied to System
- Install Multimedia Codecs For Ubuntu Linux
Discussion on This FAQ
Leave a Reply
We encourage your comments, and suggestions. But please stay on topic, be polite, and avoid spam. Thank you very much for stopping by our site!
Tags: building tools, c development, debian package, development environment, dpkg-buildpackage, dpkg-source, environment variable, fakeroot, makefile, manipulation tool, root privileges, source archives, source code package, source package, ubuntu, version directory



January 15th, 2008 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
January 15th, 2008 at 4:44 pm
Scott,
devscripts make the life of a Debian Package really easy.
January 15th, 2008 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.
January 17th, 2008 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
January 19th, 2008 at 1:53 am
Is this possible for Fedora 7+ ?
January 19th, 2008 at 6:43 am
Use rpmbuild under RHEL / CentOS / Suse / Fedora Linux