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-dependsare treated likeDependsBreaksare treated likeConflicts
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--failuresand--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-nmost 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-archis 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โ convertArch:allpackages toMulti-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 withExtra-Source-Only:yes(these are dropped by default, fyi ๐).-P,--deb-profiles=name[,name...]โ comma-separated list of activated build profiles.--deb-emulate-sbuildโ replicatesbuildbehaviour to only keep the first alternative of build dependencies. cosplay, but make it build tooling. ๐ญ
๐ฆ EXIT CODES ๐ฆ
- exit codes
0-63mean a normal termination of the program. - exit codes
64-127mean an abnormal termination (stuff like parse errors, I/O errors). not the vibe. ๐ญ
in case of normal program termination:
- exit code
0means all foreground packages are found installable ๐ - exit code
1means 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 ๐
deb-control(5)dose3-distcheck(1)- <http://www.edos-project.org> is the home page of the EDOS project.
- <http://www.mancoosi.org> is the home page of the Mancoosi project.
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
- ubuntu stonking: dose-builddebcheck 7.0.0-8build2 ยท LGPL-3.0-or-later
- ๐ girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms