DOSE-BUILDDEBCHECK(1)

๐Ÿ’– DOSE-BUILDDEBCHECK โ€” the "can this even build tho" checker ๐Ÿ’–

okay bestie, sit down, hydrate, and let me tell you about dose-builddebcheck โ€” a tool from the DOSE Tools squad whose whole entire job is checking whether a package can actually be built on a Debian system. no cap. it's giving build-environment oracle and honestly? iconic. ๐Ÿงšโœจ


โœจ SYNOPSIS โœจ

dose-builddebcheck --deb-native-arch=name [options] binary-repositories
source-repository

๐ŸŒธ DESCRIPTION ๐ŸŒธ

so here's the tea ๐Ÿ“: dose-builddebcheck takes a bunch of Debian source package control stanzas โ€” the whole little crowd of them is called the source repository โ€” and figures out whether a build environment for those source packages can actually be installed on the native architecture you picked, using packages from the binary repository. that's it. that's the plot.

and bestie, it only looks at package meta-information. like, no actual building, no compiling, none of that cardio. specifically:

  • the build-dependencies and build-conflicts in the source package, and
  • the inter-package relationships expressed over in the binary repository.

the constraint solving algorithm is complete โ€” meaning if a solution exists, it WILL find it. multiple disjunctive dependencies? deep package conflicts? doesn't matter, she ate. ๐Ÿ’…

now, theoretically this problem is computationally infeasible (it's NP-complete, which is the fancy way of saying "lol good luck"). BUT ๐Ÿ”ฅ for package repositories that actually occur in practice, it gets solved very efficiently. the vibes are immaculate, the math is just built different.

installability of binary packages is analyzed according to their Depends, Conflicts, and Provides fields, with the meaning they have as of Debian policy version 3.9.0. also, for the record:

  • Pre-depends are treated like Depends
  • Breaks are treated like Conflicts

periodt. ๐Ÿ’€


๐ŸŽ€ INPUT FORMAT ๐ŸŽ€

the binary-repositories argument? it's a list of filenames full of stanzas in the format of deb-control(5), separated by one (1) blank line. think Packages files like the ones chilling on a Debian mirror server, or in the directory /var/lib/apt/lists/ of a Debian system. those work, chef's kiss, perfect fit. ๐Ÿ‘‘

the source-repository argument is the name of a file containing debian source control stanzas, also separated by one blank line. so like Sources files from a Debian mirror, or in /var/lib/apt/lists/ on a Debian system โ€” those are suitable too. and yes bestie, both binary-repositories and source-repository can be passed in compressed format (.gz, .bz2). we love a girl who accepts you as you are. ๐Ÿซถ

multi-arch annotations? correctly considered, obviously she's paying attention. packages whose architecture is neither the native architecture nor in the list of foreign architectures (see below, bestie) are just ignored, no hard feelings. and quick vocab check: here, "native" and "foreign" refer at the same time to both the architecture the compilation will run on AND the host architecture of the compilation. ๐Ÿ‘€

cross-compilation is supported โ€” you just specify the host architecture. it's giving "multitasking queen". ๐ŸŒˆ


๐Ÿ’… OPTIONS ๐Ÿ’…

๐Ÿ”ฎ MISC OPTIONS

  • --version โ€” shows the program's version and dips. that's it, that's the whole job.
  • -h, --help โ€” displays the help message. when in doubt, ask for help, always valid.
  • -v, --verbose โ€” turns on info / warnings / debug messages. you can repeat this option up to three times to crank the verbosity up even higher. yes, like a volume knob, but for logs. ๐Ÿ“ข
  • --progress โ€” prints progress bars. we love a visual. ๐Ÿฆ‹
  • --timers โ€” prints timing information. for when you need to know how long things took, because time is fake but timers are not.
  • --quiet โ€” do no print any messages. shhh. ๐Ÿคซ

๐Ÿง  DISTCHECK OPTIONS

  • -e, --explain โ€” gives explanations. if you use it together with --failures, the explanation is dependency chains leading to a conflict or a dependency on a missing package. if you use it together with --successes, the explanation is an installation set. receipts either way. ๐Ÿงพ
  • -m, --explain-minimal โ€” for all packages P that are found installable, and when used in conjunction with --successes, it 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 get omitted. when used in conjunction with --failures and --explain, all dependency chains are not printed. minimalism era. ๐Ÿ™ˆ
  • -c, --explain-condense โ€” compresses the explanation graph.
  • -f, --failures โ€” only show broken packages that fail the installability check. the flop report, if you will. ๐Ÿ’€
  • -s, --successes โ€” only show packages that do not fail the installability check. the win report. ๐Ÿ‘‘
  • --summary โ€” gives a more detailed summary of the findings. tl;dr but make it thorough.

๐Ÿ“ฅ INPUT OPTIONS

  • --checkonly package [,package] ... โ€” takes a comma-separated list of package names as argument, each possibly carrying a version constraint. the foreground becomes all the packages that match any of the expressions, and every other package gets 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)"
  • --latest n โ€” only consider the latest -n most recent versions of each package. older versions get ignored, sorry old-timers. โณ

๐Ÿ“ค OUTPUT OPTIONS

  • -o, --outfile= file โ€” send output to file.
  • -d, --outdir= directory โ€” set the output directory (default is the current directory).
  • --dot โ€” save the explanation graph (one for each package) in dot format.
  • --dump=file โ€” dump the cudf file. dump it, bestie. ๐Ÿ—‘๏ธ

๐Ÿง DEBIAN OPTIONS

  • --deb-native-arch=name โ€” specify the native architecture. ๐Ÿšจ this argument is mandatory. no native arch, no party.
  • --deb-host-arch=name... โ€” specify the host architecture.
  • --deb-foreign-archs=name [,name] ... โ€” specify a comma-separated list of foreign architectures. the default is an empty list of foreign architectures. and heads up: if --deb-host-arch is set, it gets used as an implicit foreign architecture. ๐Ÿ‘€
  • --deb-ignore-essential โ€” do not consider essential packages as part of the installation problem. by default, all essential packages are considered part of the installation problem for all packages โ€” meaning a package is installable if and only if it's co-installable with all essential packages. this option lets you test installability with no essential packages installed. chaotic? maybe. allowed? yes. ๐Ÿ’…
  • --deb-builds-from โ€” add the builds-from relationship of binary packages on source packages as a dependency. this lets you create graphs for bootstrapping purposes. ๐ŸŒฑ
  • --deb-tupletable=file โ€” path to an architecture tuple table like /usr/share/dpkg/tupletable.
  • --deb-cputable=file โ€” path to a cpu table like /usr/share/dpkg/cputable.
  • --deb-defaulted-m-a-foreign โ€” convert Arch:all packages to Multi-Arch: foreign.
  • --deb-drop-b-d-indep โ€” drop Build-Indep dependencies.
  • --deb-drop-b-d-arch โ€” drop Build-Arch dependencies.
  • --deb-include-extra-source โ€” include packages with Extra-Source-Only:yes (these are dropped by default, fyi ๐Ÿ™ˆ).
  • -P, --deb-profiles=name[,name...] โ€” comma-separated list of activated build profiles.
  • --deb-emulate-sbuild โ€” replicate sbuild behaviour to only keep the first alternative of build dependencies. cosplay, but make it build tooling. ๐ŸŽญ

๐Ÿšฆ EXIT CODES ๐Ÿšฆ

  • exit codes 0-63 mean a normal termination of the program.
  • exit codes 64-127 mean an abnormal termination (stuff like parse errors, I/O errors). not the vibe. ๐Ÿ˜ญ

in case of normal program termination:

  • exit code 0 means all foreground packages are found installable ๐ŸŽ‰
  • exit code 1 means at least one foreground package is found uninstallable ๐Ÿ’€

๐ŸŒŸ EXAMPLE ๐ŸŒŸ

want the list of source packages in Sources for which it is not possible to install a build environment on i386, assuming the binary packages described in the file Packages are available? say less:

dose-builddebcheck -v -f -e --deb-native-arch=amd64 \
/var/lib/apt/lists/ftp.fr.debian.org_debian_dists_sid_main_binary-amd64_Packages\
/var/lib/apt/lists/ftp.fr.debian.org_debian_dists_sid_main_source_Sources

and want the list of source packages for armel in Sources for which it's not possible to install a mix build environment on amd64 plus armel, assuming the binary packages in Packages are available? say even less:

deb-builddebcheck --failures --successes --deb-native-arch=amd64 \
--deb-foreign-archs=armel,linux-any --deb-host-arch=armel \
DebianPackages/Sid-amd64-armel-Packages-050812.bz2
DebianPackages/Sid-Sources-single-version-050812.bz2

๐Ÿซถ AUTHOR ๐Ÿซถ

the current version was rewritten on the basis of the dose3 library by Pietro Abate. it replaces an earlier version that was simply a wrapper for edos-distcheck. glow-up of the century honestly. โœจ


๐Ÿ‘€ SEE ALSO ๐Ÿ‘€


and that's the whole page bestie!! this was DOSE-BUILDDEBCHECK(1) from the DOSE Tools girlies, dated 2026-07-06. go forth, check those builds, and stay installable. ๐Ÿ’–โœจ๐ŸŽ€๐Ÿฆ‹ mwah!!

๐Ÿ“ฆ where this page comes from