1. Introduction
This brief HOWTO shows how a simple Debian DEB package file can be built. To keep it simple, various shortcuts have been taken and assumptions have been made.
- The package will be usable for the i386 architecture only.
- The source code will not be available (e.g. via apt-get source). This means that the package will be non-free.
- The Debian Policy will not be adhered to. This means that the package will not be accepted into the official Debian archive.
- By building a binary package, all the files must have permissions and ownerships that match the intended permissions and ownerships. Thus, all steps are expected to be run under the root account.
2. Steps
The steps to build a package that contains a script to update a local APT repository's Packages.gz file will be demonstrated. The package will contain one configuration file, /etc/test.conf, and one executable file, /usr/sbin/test.
2.1. Directory structure
Create the following directory structure in a place that is not managed by Debian APT itself, usually /usr/local/src.
test_0.1-1_i386
test_0.1-1_i386/DEBIAN
test_0.1-1_i386/etc
test_0.1-1_i386/usr
test_0.1-1_i386/usr/sbin
The package will be named test, version 0.1, build 1, and intended for the i386 architecture.
2.2. Files
2.2.1. Files to be installed
Create the configuration file, test_0.1-1_i386/etc/test.conf, with the following contents.
LOC=/var/local/debian
By taking the special steps in creating a configuration file, Debian will allow you to make local changes, and will highlight these during a later package upgrade.
Create the executable file, test_0.1-1_i386/usr/sbin/test, with the following contents.
#!/bin/sh
. /etc/test.conf
cd $LOC
dpkg-scanpackages -a i386 pool indices/override.sarge.opt|gzip >dists/sarge/opt/binary-i386/Packages.gz
Then make it executable using the command chmod 755 test_0.1-1_i386/usr/sbin/test.
2.2.2. Debian control file
Create the file, test_0.1-1_i386/DEBIAN/control, with the following contents.
Package: test Version: 0.1-1 Section: non-free Priority: optional Architecture: i386 Installed-Size: 1 Maintainer: Ewan Parker <eparker@public1.ejp.cc> Conffiles: /etc/test.conf 007b710b3f6846252e3712657195d665 Description: Test scripts to update a local APT repository This script is used as a test to show how a binary package can be built for Debian GNU/Linux. . For more information about creating packages in Debian, please visit http://www.ewan.cc/simple-binary-dpkg-deb-howto.shtml
The Installed-Size: is the size of all the installed files, in kB. The hexadecimal number after each of the Conffiles: is the MD5 checksum of the configuration file. For example, to calculate this for test.conf, use the command md5sum test_0.1-1_i386/etc/test.conf and use the value in the first column of the output.
2.2. Build
Use the command dpkg-deb --build test_0.1-1_i386. This will create the file test_0.1-1_i386.deb which can be installed using dpkg -i test_0.1-1_i386.deb or copied into an APT repository.