This repository contains packaging files to turn Fossil check-ins into installable Debian packages, especially useful if you have many Debian machines to manage and want to update them all to the Fossil trunk (or even a newer release than Debian provides). It is not intended to be a replacement for Debian's own package, and the versioning is crafted specifically so that Debian's packages can upgrade from these custom-made packages.
Building
To build a local Debian package, you are required to have dpkg-dev, libssl-dev, and tcl installed on a Debian system. This needs not be the same system you install the package on. You will also need a copy of the Fossil source code. You can obtain it via a repository clone and check-out, a source tarball, or by running fossil get https://fossil-scm.org/home. The manifest and manifest.uuid files must be present, whichever method you use. If they do not exist in a local check-out, run fossil settings manifest on.1
With the required Debian packages and the Fossil source code, you will also need to obtain the files from this repository: fossil-debian-packaging.tar.gz
From these files, copy the debian/ directory into the Fossil source tree. You can use cp -r debian/ $FOSSIL_SOURCES to perform this task. From here, go into the root of the Fossil source tree:
$ debian/changelog.prepare
$ dpkg-buildpackage -uc -b
The debian/changelog.prepare script uses Fossil's manifest, manifest.uuid, and VERSION files to generate a version number for the resulting package to describe itself.
Package versioning
The versioning is chosen specifically so that it should provide a newer version than Debian's own, but these packages can still be upgraded to Debian's version if a new Debian release provides a suitable candidate. As an example list, from oldest to newest:
- 1:2.26-2
- 1:2.29~20260407.095825-0201a1e2cc
- 1:2.29-1
Here, 1:2.26-2 is the version provided by Debian 13. 1:2.29~20260407.095825-0201a1e2cc is a locally-created package with a version field signifying what it was built from, and 1:2.29-1 is a version from Debian that will qualify as newer than the interim package.
Notice the use of the ~ character. In Debian versioning, it always precedes the - character. It is common practice to increase the version number in Fossil's trunk immediately following a stable release. Where Fossil 2.28 released on 2026-03-11, trunk subsequently received a version bump to 2.29 on 2026-03-12. This makes for a reliable mechanism for making packages from trunk that will always be newer than what Debian provides on the same day.
This also causes a build for 2.28 to result in a package version of 1:2.28~20260311.113146-52445a27f1. Even though it coincides with the exact upstream stable release, Debian's own 2.28 package will qualify as an upgrade if apt sees it in a Debian repository.
- ^
The fossil-scm.org repository is actually configured with
manifestset tortu, which generates amanifest.tagsfile as well. This file is required in SQLite's build process but is unused by Fossil. It nevertheless shows up in generated tarballs/zips/fossil get. There is no harm in its presence, nor its absence.