The Debian package repository is enormous, and the Sid distribution is in most
cases reasonably up-to-date, but it’s still sometimes desirable to build an
application and install it into /usr/local
when a packaged implementation
either isn’t available or is too out of date, or if you’re involved in the
development of a project and want to try out a fresh build that hasn’t been
packaged yet.
The usual cycle of configuring, compiling, and installing many open-source
applications for Unix-like systems applies here:
$ ./configure
$ make
# make install
The above is normally the approach taken to install code compiled on the
machine, rather than through packages. One problem with this approach is that
it doesn’t allow many of the advantages that a system running purely on
packages does; dpkg -l
will no longer give you a complete overview of all the
system’s software, and to remove the software and its configuration files you
may have to manually delete it rather than using apt-get purge
.
Fortunately, there exists a tool called checkinstall to allow having the
best of both worlds. After installing this tool via apt-get install
checkinstall
, you’re able to build a package for your locally built software
according to the rules defined in its Makefile
, and install that the same way
as any other package.
Instead of typing make install
, type checkinstall
, and you will be prompted
for details about the package, including its description, which is then built
and installed. In this example, I’m compiling Vim from source, which works very
well. I’ve also successfully installed tools like pam_ssh_agent_auth
and
tmux
this way.
With this done, the package’s files are installed in /usr/local
, and it
appears in the list of installed packages along with my explanation of its
contents:
$ ./configure
$ make
$ sudo -s
# checkinstall
...
*****************************************
**** Debian package creation selected ***
*****************************************
This package will be built according to these values:
0 - Maintainer: [ Tom Ryder <tom@sanctum.geek.nz> ]
1 - Summary: [ Custom build of latest Vim 7.3 ]
2 - Name: [ vim ]
3 - Version: [ 2:7.4 ]
4 - Release: [ 1 ]
5 - License: [ GPL ]
6 - Group: [ checkinstall ]
7 - Architecture: [ amd64 ]
8 - Source location: [ vim ]
9 - Alternate source location: [ ]
10 - Requires: [ ]
11 - Provides: [ vim ]
12 - Conflicts: [ ]
13 - Replaces: [ ]
Note that I’m assigning it a version number greater than the Debian
repository’s vim
package, which is a simple way to prevent it being replaced.
You can also do this via the /etc/apt/preferences
file to prevent replacement
of all packages from the checkinstall
group.
With this done, my custom build of Vim now shows in the package list, and its
files are correctly installed in /usr/local
:
# dpkg -l | grep vim
ii vim 2:7.4-1 Custom build of latest Vim 7.3
# dpkg -S vim
vim: /usr/local/share/vim/vim73/bugreport.vim
vim: /usr/local/share/vim/vim73/plugin
vim: /usr/local/share/vim/vim73/ftplugin/postscr.vim
vim: /usr/local/share/man/it.UTF-8/man1/vim.1.gz
...
The .deb
package built by checkinstall
is also present in my build
directory for me to keep for later, or for installation on another compatible
server:
$ ls *.deb
vim_7.4-1_amd64.deb
It’s worth noting that checkinstall
is not a Debian-specific tool; it works
for other packaging systems like RPM and Slackware, too.