DOSE-DISTCHECK(1)

🌸 NAME 🌸

distcheck β€” check installability of packages according to metadata πŸ’…

(ok so this whole thing lives in the DOSE Tools manual set, page DOSE-DISTCHECK(1), and yes there's a whole fam of checkers hiding in here: distcheck, debcheck, rpmcheck, eclipsecheck. iykyk ✨)


πŸŽ€ SYNOPSIS πŸŽ€

distcheck [option] ... uri
debcheck [option] ... [file]
rpmcheck [option] ... [file]
eclipsecheck [option] ... [file]

πŸ’– DESCRIPTION πŸ’–

ok bestie, sit down, because this one's the main character. distcheck figures out, for a bunch of package control stanzas (we call that whole pile the repository), whether the packages in that repository can actually be installed relative to the repository β€” and it does that by looking at the inter-package relationships written in the package control stanzas themselves. 🧚

Which control fields even matter, and what they mean, depends on the type of repository you're feeding it. no universal answer, sorry.

The constraint solving algorithm is complete β€” as in, it finds a solution whenever one exists, even with multiple disjunctive dependencies and deep package conflicts. like, it's not gonna give up on you. 😀 In theory this problem is computationally infeasible (that is, NP-complete, the classic "cry about it" complexity class), but for package repositories that actually occur in practice it can be solved very efficiently. slay. πŸ”₯

Packages get split into foreground and background: only foreground packages are checked for installability, but dependencies may be satisfied by foreground packages and by background packages. By default, everything is in the foreground. everyone's on stage, no one's backstage. 🎭

🌈 Input Specification

Right now the supported input types are debian, rpm, and eclipse. The distcheck tool expects its input specifications in the form

type://pathname

where type is one of deb, synthesis, hdlist or eclipse, and pathname is the pathname of a file containing the input. And heads up: the package metadata sitting inside that file must correspond to the type you gave in the URI. don't be out here lying to the parser. πŸ™ˆ

When invoked as typecheck then the type of input is assumed to be type, and repositories (in positional arguments or in the values of the options --fg and --bg) are simply given in form of a pathname of a file containing the repository. If no positional argument is given then input is read from standard input. distcheck also accepts compressed files (.gz, .bz2) as positional arguments. Input read on standard input cannot be in compressed form. sorry, that's just the rules. πŸ’…

πŸ“¦ Input Formats πŸ“¦

🐧 Debian

The input file has to contain stanzas in the format of deb-control(5), separated by one blank line. For instance, the Packages files as found on a Debian mirror server, or in the directory /var/lib/apt/lists/ of a Debian system, are suitable as input to debcheck. Installability of packages is analyzed according to their Depends, Conflicts, and Provides fields with their meaning as of Debian policy version 3.9.0. Pre-depends are treated like Depends, and Breaks are treated like Conflicts. the vibe is: same energy, different name. ✨

If the input contains several packages with the same values of name, version, and architecture then only the last of these is taken into account, and a warning is issued. last one wins, iconic behavior, but you do get warned about it. ⚠️

In the case of Debian, it is not possible to install at the same time two packages with the same name but different versions. no cap, that's a hard no. 🚫

πŸŒ€ Rpm

The input file can be either a synthesis file or a hdlist file. By default rpmcheck expects a synthesis file as input. To specify a hdlist file distcheck must be invoked with a file argument of the form hdlist://.

πŸ“ Npm

The input file is a 822 encoding of an npm repository.

🌿 Opam

The input file is a 822 encoding of an opam repository.

πŸ¦‹ Pef

The input is a generic 822 file. Versions are compared by default using the debian comparing function, or if provided the function specified by --compare.

πŸŒ™ Eclipse

The input is a 822 file containing the encoding of OSGi plugins content.xml files.


✨ OPTIONS ✨

πŸŽ€ MISC OPTIONS πŸŽ€

  • --version β€” Show program version and exit. short and sweet, she said what she said. πŸ’…
  • -h, --help β€” Display this list of options.
  • -v, --verbose β€” Enable info / warnings / debug messages. This option may be repeated up to three times in order to increase verbosity. (yes bestie, stack them like little verbal bracelets: -v -v -v πŸ’–)
  • --progress β€” Show progress bars.
  • --timers β€” Show timing information. ⏱️
  • --quiet β€” Do not print warning messages.

πŸ” DISTCHECK OPTIONS πŸ”

  • -e, --explain β€” Give explanations. If used together with --failures then the explanation consists of dependency chains leading to a conflict or a dependency on a missing package. If used together with --successes then the explanation consists of an installation set.
  • -m, --explain-minimal β€” For all packages P that are found installable, and when used in conjunction with --successes, prints a reduced installation set containing only those packages in the dependency cone of P. When used with Debian repositories, all essential packages and their dependencies that are not in the cone of P are omitted. When used in conjunction with --failures, and --explain, all dependencies chains are not printed.
  • -c, --explain-condense β€” Compress explanation graph.
  • -f, --failures β€” List all packages that are found not to be installable. 😭
  • -s, --successes β€” List all packages that are found to be installable. May be used together with --failures, in this case the value of the status field in the output allows one to distinguish installable from non-installable packages. 🫢
  • --summary β€” Gives a more detailed summary of the findings.
  • --coinst package [,package] ... β€” Takes a comma-separated list of package names, each of them possibly with a version constraint, as argument. If this list consists of n expressions, then co-installability will be checked independently for each set of n packages where the i-th element of the set matches the i-th expression. The initial distinction between foreground and background is ignored. This option must not be combined with --checkonly.

Example: --coinst "a (>1), b"

If we have package a in versions 1, 2 and 3, and package b in versions 11 and 12, then this will check 4 pairs of packages for co-installability, namely (a=2,b=11), (a=2,b=12), (a=3,b=11) and (a=3,b=12). math girl summer πŸ”’βœ¨

  • --fields=strlst β€” Print additional fields if available.
  • --lowmem β€” Serialise multiple distcheck runs to save memory. This might take more time. (trade-off queen πŸ’€)

πŸ“₯ INPUT OPTIONS πŸ“₯

  • -t input-spec β€” Select the input type. Possible values are:
    • cudf for cudf files
    • csw
    • opam
    • deb for Debian binary package files, also known as Packages files. Possibly compressed with gzip(1), bzip2(1) or xz(1), depending on compile-time options for dose3.
    • debsrc for Debian source package files, also knows as Sources files. Possibly compressed with gzip(1), bzip2(1) or xz(1), depending on compile-time options for dose3.
    • edsp for apt-get External Dependency Solver Protocol
    • eclipse for Eclipse (p2) package files
    • hdlist for RPM hdlists
    • synthesis for urpmi synthesis hdlists
    • pef
  • --checkonly package [,package] ... β€” Takes a comma-separated list of package names, each of them possibly with a version constraint, as argument. The foreground is constituted of all packages that match any of the expressions, all other packages are pushed into the background. The initial distinction between foreground and background is ignored. This option must not be combined with --coinst.

Example: --checkonly "libc6 , 2ping (= 1.2.3-1)"

πŸ“€ OUTPUT OPTIONS πŸ“€

  • -o, --outfile=file β€” Send output to file.
  • -d, --outdir=directory β€” Set the output directory (default current directory).
  • --dot β€” Save the explanation graph (one for each package) in dot format. 🎨

🐧 DEBIAN SPECIFIC OPTIONS 🐧

Multi-arch annotations are correctly considered by distcheck. Packages whose's architecture is neither the native architecture nor in the list of foreign architectures (see below) are ignored. bye, not ur problem bestie πŸ‘‹

  • --deb-native-arch=name β€” Specify the native architecture. The default behavior is to deduce the native architecture from the first package stanza in the input that has an architecture different from all.
  • --deb-foreign-archs=name [,name] ... β€” Specify a comma-separated list of foreign architectures. The default is an empty list of foreign architectures.
  • --deb-ignore-essential β€” Do not consider essential packages as part of the installation problem. By default all essential package are considered as part of the installation problem for all packages, that is a package is installable if and only if it is co-installable with all essential packages. This option allows the user to test the installability with no essential packages installed.
  • --deb-builds-from β€” Add builds-from relationship of binary packages on source packages as dependency. This allows one to create graphs for bootstrapping purposes. 🌱

πŸšͺ EXIT CODES πŸšͺ

Exit codes 0-63 indicate a normal termination of the program, codes 64-127 indicate abnormal termination of the program (such as parse errors, I/O errors).

In case of normal program termination:

  • exit code 0 indicates that all foreground packages are found installable; πŸ‘‘
  • exit code 1 indicates that at least one foreground package is found uninstallable. πŸ’€

πŸ’« EXAMPLE πŸ’«

Check which packages in a particular distribution are not installable and why:

 dose-distcheck -v -f -e \
 --bg deb:///var/lib/apt/lists/ftp.fr.debian.org_debian_dists_sid_main_binary-amd64_Packages\
 --bg deb:///var/lib/apt/lists/ftp.fr.debian.org_debian_dists_sid_non-free_binary-amd64_Packages\
 --fg deb:///var/lib/apt/lists/ftp.fr.debian.org_debian_dists_sid_contrib_binary-amd64_Packages

where Packages is the file pertaining to that distribution, as for instance found in the directory /var/lib/apt/lists.

Check which packages in contrib are not installable when dependencies may be satisfied from main:

  debcheck --failures --bg=main_Packages contrib_Packages

πŸ“Œ NOTE πŸ“Œ

Distcheck is a complete reimplementation of edos-debcheck, written for the EDOS project. history lesson, but make it slay. πŸ’œ

πŸ’« AUTHOR πŸ’«

Okay so storytime bestie πŸ“–βœ¨ the very first version of debcheck was written by Jerome Vouillon for the EDOS project. Iconic of him honestly. πŸ™Œ

And then the current version got a full glow-up β€” it was rewritten on the basis of the dose3 library by Pietro Abate. Periodt. πŸ‘‘


🌸 SEE ALSO 🌸

lowkey obsessed with a project having its own lil home page ngl, very main character energy of both of them πŸ’…

and that's a wrap on the whole page babe πŸŽ€ no cap, you read all of it. this was the dose-distcheck(1) manual page, and the source stamped it <italic>2026-07-06</italic> β€” so it's dated July 6, 2026, mwah πŸ“πŸ’– go forth and distcheck, you absolute legend πŸ‘‘πŸŒˆ

πŸ“¦ where this page comes from