This guide assumes that the reader has a reasonable knowledge of building and installing software from source on Linux distributions. The guide also uses the Command Line Interface (CLI) throughout, so you should be comfortable using a terminal. Below is a quick overview or review of some of the requisite knowledge.
Description:
GNU Make is a very important software building tool. It is used to transform a complex compilation task into a trivial one. It is important that you know how to use it, because we will store most of the information about the packaging process in a Makefile.
References:
GNU Make has a well-written man page and extensive info documentation. Documentation is also available at the GNU website.
Description:
This script is included in almost all Linux source, especially for
software written in compiled languages such as C and C++. It is used to
generate a Makefile (file used by make) that is
properly configured for your system. Standard Debian packaging tools use it,
so it is important that you know what the
configure
script does. You do not need to know how to
create a configure
script yourself, as the software
author (or autoconf will do that. However, you
may have to adjust it at some point to get a Ubuntu package to build
correctly.
Quick Howto:
First, get the GNU Hello source. From a terminal:
wget http://ftp.gnu.org/gnu/hello/hello-2.1.1.tar.gz # get the package tar -xzf hello-2.1.1.tar.gz # unpack it cd hello-2.1.1/
Now, with ./configure you can run the
configure
script to generate a Makefile that is
customized to your system.
You can also give ./configure
command line options.
For instance, by default GNU Hello will install
to the /usr/local/
directory. You could instead
install it somewhere else (a personal binary directory,
~/programs/
, for example)
./configure --prefix="$HOME/programs/" # specify install directory.
You can see all the ./configure
options by running
./configure --help.
References:
Information on ./configure
can be found in the
make documentation.
Beyond the basic use of installing programs, apt and dpkg have many features that are useful for packaging.
apt-cache dump - lists every package in the cache. This command is especially helpful in combination with a grep pipe such as apt-cache dump | grep foo to search for packages whose names or dependencies include “foo”.
apt-cache policy - lists the repositories (main/restricted/universe/multiverse) in which a package exists.
apt-cache show - displays information about a binary package.
apt-cache showsrc - displays information about a source package.
apt-cache rdepends - shows reverse dependencies for a package (which packages require the queried one.
dpkg -S - lists the binary package to which a particular file belongs.
dpkg -l - lists currently installed packages. This is similar to apt-cache dump but for installed packages.
dpkg -c - lists the contents of a binary package. It is useful for ensuring that files are installed to the right places.
dpkg -f - shows the control file for a binary package. It is useful for ensuring that the dependencies are correct.
grep-dctrl - searches for specialized information in packages. It is a specific use of the grep package (but not installed by default).
The diff program can be used to compare two files and to make patches. A typical example might be diff -ruN file.old file.new > file.diff. This command will create a diff (recursively if directories are used) that shows the changes, or “delta”, between the two files.
The patch program is used to apply a patch (usually created by diff or another similar program) to a file or directory. To apply the patch created above, we can invoke patch -p0 < file.diff. The -p tells patch how much it should strip from the paths for the file names in the patch. -p0 means to strip nothing, or leave the path intact.