A flexible debian control file linter supporting debian/control, DEBIAN/control, debian/copyright, .changes and .dsc files.
debian-control-linter --type <type> path/to/fileYou can also specify various presets:
debian-control-linter --preset strict --type <type> path/to/fileOr toggle checks manually:
debian-control-linter --enable recommendedFields,spaceAfterColon,urlForceHttps path/to/fileThere are more options and checks available; for an up-to-date list, please check
debian-control-linter --helpor the provided man page.
Any file following the debian control file format can be parsed into a series of stanzas containing data fields. For the supported formats, these parsed stanzas are matched with the specification and, if successful, are then checked for errors.
Errors can be checked in:
- Individual fields
- Across multiple fields in a stanza (e.g. a
Sourcefield declaring the same version as theVersionfield) - Across multiple stanzas in the same control file (e.g. checking if more generic file patters come first in a copyright file)
There are a large number of individual checks that can be enabled or disabled. They can be listed using debian-control-linter --list checks. There are also check presets available; normal and strict are the most useful ones for regular users.
Some errors cannot be disabled, not even with the quirks preset. Generally, these are parsing errors, or errors that might break other people's scripts.
Variable substitutions are not supported.
As this linter only processes the control file, it is not possible to check for errors across files, such as files without copyright notice or missing entries from a file list.
URLs using a scheme other than HTTP/HTTPS may be misreported as invalid.
This project is written in Java 21, which is required for building the project (and for running the jar package). It is not required when using the native executable.
To build this project with Maven, do
mvn packageThis will produce the sources, javadoc and the library jar files. For a runnable jar (with all dependencies included), use the portable profile. The native executable can be compiled via the native profile, which requires GraalVM 21 to be set up on your system. To generate all project files, use
mvn package -P native,portableFor development, you can also enable debug mode to greatly cut compile times for the native image. (Using the native image for development is not necessary, but is made a lot easier with this option.)
mvn package -Ddebug=true -Pnative