Posted by Steve on Fri 1 Oct 2004 at 13:09
Most people are happy with the binary packages which Debian provides, as they tend to be setup to cover the common uses. But what happens if you are looking to rebuild an existing package with different options? Well you can rebuild a package from source very easily.
Rebuilding Debian packages is a two step process, first of all you must fetch the source which was used to build the package, and then you must actually rebuild it.
In order to build most common packages you will need a compiler of some description, and you may well find that you need some development libraries which are used in the rebuild process itself.
Thankfully installing the required packages to build a Debian package is a simple process which the apt-get tool will help you with. (If you're new to using apt-get you might find this simple introduction useful).
There are two commands that you will need to use to rebuild a package:
These two steps you will have to perform for each rebuild you need to do, but thankfully they are very simple to remember and automate.
The only other thing you need are the Debian repackaging utilities which you can install with apt-get install devscripts build-essential fakeroot. This command will allow you to have a build environment, which will allow you to convert the sources you downloaded into .deb files you can actually install.
Lets have an example of how you would rebuild the package less.
First we download the source to the current package:
steve@earth:~$ apt-get source less Reading Package Lists... Done Building Dependency Tree... Done Need to get 258kB of source archives. Get:1 http://http.us.debian.org stable/main less 374-4 (dsc) [611B] Get:2 http://http.us.debian.org stable/main less 374-4 (tar) [243kB] Get:3 http://http.us.debian.org stable/main less 374-4 (diff) [14.3kB] Fetched 258kB in 2s (120kB/s) dpkg-source: extracting less in less-374
Now we can download and install the required packages to build it. (Depending on the packages you have installed on the machine you're using you may find you don't need to install anything).
root@earth:~# apt-get build-dep less Reading Package Lists... Done Building Dependency Tree... Done Note, selecting libncurses5-dev instead of libncurses-dev The following NEW packages will be installed: libncurses5-dev 0 packages upgraded, 1 newly installed, 0 to remove and 0 not upgraded. Need to get 998kB of archives. After unpacking 4988kB will be used. Do you want to continue? [Y/n] Get:1 http://ftp.us.debian.org stable/main libncurses5-dev 5.2.20020112a-7 [998kB] Fetched 998kB in 5s (177kB/s) Selecting previously deselected package libncurses5-dev. (Reading database ... 21135 files and directories currently installed.) Unpacking libncurses5-dev (from .../libncurses5-dev_5.2.20020112a-7_i386.deb) ... Setting up libncurses5-dev (5.2.20020112a-7) ...
In our case we discovered that we needed to install the libncurses5-dev package in order to compile less.
Now we can actually rebuild the package. We perform a rebuild by using the debuild command. If we are not the maintainer of the package will need to add two flags to this telling the building process not to sign the package. In most cases debuild -us -uc is what you wish to use.
steve@earth:~$ cd less-374/ steve@earth:~$ debuild -us -uc ... ... dpkg-deb: building package `less' in `../less_374-4_i386.deb'. dpkg-genchanges dpkg-genchanges: not including original source code in upload dpkg-buildpackage: binary and diff upload (original source NOT included)
Now if we look in the parent directory we will find a brand new, recompiled, .deb file.
This can be installed with dpkg as follows:
steve@earth:~/less-374$ cd .. steve@earth:~$ su Password: root@earth:~# dpkg --install less_374-4_i386.deb (Reading database ... 21941 files and directories currently installed.) Preparing to replace less 374-4 (using less_374-4_i386.deb) ... Unpacking replacement less ... Setting up less (374-4) ...
of course we did miss out any editing of the package to make it build differently, but if you know already you need to rebuild a package to change its options, or bahaviour, you will know how to do that!
Thanks for the comment, it might be nice to redo this piece in the future.
To specifically answer your question though - you can adjust which flags are passed to the configure script by looking at the file inside the debian/ directory called rules.
This is where "./configure" and "make" are called from ..
Steve
-- Steve.org.uk
[ Parent ]
[ Parent ]
[ Parent ]
Note:
Before commanding "apt-get source ", cd to the folder you want the source downloaded in.
("apt-get source less" will download the source-files in your present working directory (pwd).
Since I was standing in /etc/apt in order to modify my sources.list, I was in for tiny shock! ;-))
[ Parent ]
[ Parent ]
[ Parent ]
If you store your packages inside an Apt repository then you can use "pinning" to make your local package have a higher priority than others.
This doesn't work if you're just using "dpkg --install foo.deb" though. In that case you can either:
I hope that helps a little.
Steve
--
[ Parent ]
There were a couple of comments explaining how to put packages on hold posted recently.
Steve
--
[ Parent ]
[ Parent ]
[ Parent ]
[ Parent ]
[ Parent ]
[ Parent ]
[ Parent ]
[ Parent ]
[ Parent ]
Mostly yes, Ubuntu uses the same tools and techniques for their packages.
[ Parent ]
[ Parent ]
[ Parent ]
[ Parent ]
The issue here is that you're modifying the source of the package which is built around the quilt system. The quilt tool applies patches from ./debian/patches prior to building - and that is where your complaints are coming from.
You might find this useful reading:
[ Parent ]
If compiling from source I might change things by passing variables to the configure script. How would I accomplish something similar here?
[ Parent ]