REPROTEST(1) User Commands REPROTEST(1) (NAME) reprotest - (SYNOPSIS) reprotest --help [] reprotest [options] [-c ] [] [-- [ ...]] reprotest [options] [-s ] [] [-- [ ...]] "" (DESCRIPTION) reprotest . diffoscope(1) ( diff(1)) . COMMAND-LINE EXAMPLES . /usr/share/doc/reprotest/README.rst . source_root|build_command source_root ( -s ) build-command ( -c ) . : -c -s "auto" source_root build_command . -c -s . . artifact_pattern (build artifact) . "*.deb *.changes" . virtual_server_args virtual_server . ( -xxx --xxx) "--" reprotest . : "null" /tmp. : chroot, lxc, lxd, null, qemu, schroot, ssh.SS ":" --help [VIRTUAL_SERVER_NAME] . . -f --config-file CONFIG_FILE . (: None) : --verbosity VERBOSITY . (0: ( /) 1: 2: ). -v --verbose --verbosity . --host-distro HOST_DISTRO (: None) -s --source-root PATH . . : "." ( ). --source-pattern PATTERNS (glob pattern) . : . -c --build-command COMMANDS . "auto" reprotest source_root ( ) . : auto --store-dir DIRECTORY . ( ) diff ( ) . --no-clean-on-error . --variations VARIATIONS . "+all" : "+environment, +build_path, +kernel, +aslr, +num_cpus, +time, +user_group, +fileordering, +domain_host, +home, +locales, +exec_path, +timezone, +umask" . VARIATIONS . --vary VARIATIONS --variations --vary . --variations --vary . --extra-build VARIATIONS VARIATIONS ( ) --variations --vary . reprotest . --auto-build --variations --vary. --extra-build . --env-build . --vary=-all . --extra-build --autobuild . --min-cpus NUM (CPU) num_cpus. : 1..SS " diff (diff options):" --diffoscope-arg ARG diffoscope . : ['--exclude-directory-metadata=yes']. {}-format : {0} {1} . --diffoscope PATH diffoscope(1). : diffoscope --no-diffoscope diffoscope diff(1). diffoscope / . (advanced options): --testbed-pre COMMANDS (testbed) . . --testbed-init COMMANDS . disorderfs chroot . --testbed-build-pre COMMANDS (variations) . (build-dependencies) . --auto-preset-expr PYTHON_EXPRESSION . _ reprotest.presets.ReprotestPreset . . : _ --no-clean-on-error virtual_server . virtual_server . --dry-run . --print-sudoers sudoers --variations user_group.available domain_host.use_sudo. --control-build CONTROL_BUILD . . --append-build-command COMMANDS (COMMAND-LINE EXAMPLES) reprotest : # null (/tmp) $ reprotest . $ reprotest . -vv -- null -d # # make $ reprotest "make clean && make" mybinary # Debian $ apt-get source hello && cd hello-2.10 $ reprotest auto -- null # Debian $ reprotest --vary=-user_group,-domain_host,-fileordering auto -- null # Debian schroot # https://wiki.debian.org/sbuild . $ reprotest reprotest_0.3.3.dsc -- schroot unstable-amd64-sbuild # RPM # null (/tmp) . $ reprotest reprotest-0.7.16.src.rpm # RPM $ reprotest --testbed-build-pre 'dnf -y builddep ./*.src.rpm' reprotest-0.7.16.src.rpm Debian RPM . (patch) - reprotest.presets . (CLI) . : / (build artifact) . : $ reprotest 'python3 setup.py bdist' 'dist/*.tar.gz' . . : $ reprotest -s ../path/to/other/project 'python3 setup.py bdist' 'dist/*.tar.gz' $ reprotest -c 'python3 setup.py bdist' ../path/to/other/project 'dist/*.tar.gz' . : o reprotest "dpkg-buildpackage -b --no-sign" [..]. o (wildcard) reprotest [..] "*.tar.gz *.tar.xz". o '"a file with spaces.gz"' '"dir 1"/* "dir 2"/*' . (CLI) : $ reprotest --help " " . chroot . : $ reprotest 'python3 setup.py bdist_wheel' 'dist/*.whl' -- qemu /path/to/qemu.img $ reprotest 'dpkg-buildpackage -b --no-sign' '../*.deb' -- schroot unstable-amd64 . --help "virtual_server_args" "positional arguments" . ( "schroot") : $ reprotest --help schroot . "Debian directory" : # "Debian directory" preset $ reprotest . -- schroot unstable-amd64-sbuild # This is exactly equivalent to this: $ reprotest -c auto . -- schroot unstable-amd64-sbuild # In the non-preset full CLI, this is roughly similar to: $ reprotest \ --testbed-init 'apt-get -y --no-install-recommends install \ disorderfs faketime locales-all sudo util-linux; \ test -c /dev/fuse || mknod -m 666 /dev/fuse c 10 229; \ test -f /etc/mtab || ln -s ../proc/self/mounts /etc/mtab' \ --testbed-build-pre 'apt-get -y --no-install-recommends build-dep ./' \ --build-command 'dpkg-buildpackage --no-sign -b' \ . \ '../*.deb' \ -- \ schroot unstable-amd64-sbuild --testbed-init reprotest . virtual_server . --testbed-build-pre --build-command ( -c) . apt-get dpkg-buildpackage(1) . source_root artifact_pattern . . "schroot" "unstable-amd64-sbuild" . . . . reprotest ./artifacts "Debian dsc" : $ reprotest --store-dir=artifacts \ --auto-preset-expr '_.prepend.testbed_init("apt-get install -y wget; \ echo deb http://reproducible.alioth.debian.org/debian ./ >> /etc/apt/sources.list; \ wget -q -O- https://reproducible.alioth.debian.org/reproducible.asc | apt-key add -; \ apt-get update; apt-get upgrade -y; ")' \ ./bash_4.4-4.0~reproducible1.dsc \ -- \ schroot unstable-amd64-sbuild chroot unstable-amd64-sbuild chroot chroot "unstable-amd64-sbuild" . --auto-preset-expr ..SH " (CONFIG FILE)" reprotest . auto . ( .) --help . (Whitespace) . . reprotest . --config-file -f . . .reprotestrc . : [basics] verbosity = 1 variations = environment build_path user_group.available+=builduser:builduser fileordering home kernel locales exec_path time timezone umask store_dir = /home/foo/build/reprotest-artifacts [diff] diffoscope_arg = --debug DIFF (ANALYSING DIFF OUTPUT) diffoscope - - . . : () . () make install . reprotest () --exclude-directory-metadata=yes diffoscope . reprotest () --diffoscope-args=--exclude-directory-metadata=no reprotest diffoscope . (false-positive) . (VARIATIONS) --vary --variations . --help --variations . : +$variation ( $variation ) -$variation @$variation ( ) . $variation.$param=$value $variation.$param+=$value $variation.$param-=$value // $value // $param $variation. $variation.$param++ $variation.$param-- / $param $variation. + - . : build_path.path . . ( ) --control-build reprotest . domain_host.use_sudo sudo(1) unshare(1) hostname domainname . 0 sudo sudo . 0 "Varying the domain and host names" . environment.variables reprotest . "REPROTEST_CAPTURE_ENVIRONMENT" . (regex) : o PID=\d{1,6} o HOME=(/\w{3,12}){1,4} o (GO|PYTHON|)PATH=(/\w{3,12}){1,4}(:(/\w{3,12}){1,4}){0,4} : o $VARNAME= ( ) reprotest o $VARNAME=.{0} reprotest o \x2c \x3b , ;. user_group.available + reprotest sudo(1) . . + $user:$group $user $group . time.faketimes faketime(1) . : ( source_root ) . . faketime(1) . locales.locale (locale) . . en_US.UTF-8 fr_CH.UTF-8 ru_RU.CP1251 kk_KZ.RK1048 zh_CN. et_EE.UTF-8 . num_cpus.cpus num_cpus. --vary --variations . --variations --vary . : reprotest --vary=-user_group +all ( --variations) -user_group ( --vary) : reprotest --variations=-all,locales --variations=home,time --vary=timezone --vary=-time home time ( --variations) timezone -time ( --vary) home timezone. (NOTES ON VARIATIONS) reprotest (root) . . . virtual_server . . virtual_server "null" () . (Number of CPUs) (control build) (CPU) (nondeterminism) (multithreading) (multiprocessing) . ( ) --min-cpus=99999 . (Domain or host) sudo . - - . (namespace) "root" "root" . unshare(1) reprotest . use_sudo=1 . "Avoid sudo(1) password prompts" . virtual-server: sudo "Operation not permitted" /proc/sys/kernel/unprivileged_userns_clone . . sudo sudo . (User or group) (fileordering) ( ) "fuse" . usermod -aG fuse $OTHERUSER (root) . sudo(1) "Avoid sudo(1) password prompts" . (Time) "time" faketime(1) . : o reprotest . o ./configure faketime . bash autotools . o / . ( [FOSS] reprotest .) --variations=-time reprotest / ( ) ..SS " (Kernel)" "kernel" RPM ldconfig . ldconfig FATAL: kernel too old . SUDO(1) (AVOID SUDO(1) PASSWORD PROMPTS) . (EXPERIMENTAL) . : $ reprotest --print-sudoers \ --variations=user_group.available+=guest-builder,domain_host.use_sudo=1 \ | sudo EDITOR=tee visudo -f /etc/sudoers.d/local-reprotest . root . ( (wildcards) chown . sudo .) - . chroot sudoers chroot ( /mount ) . schroot () schroot /etc/sudoers.d/local-reprotest ( ) () : /etc/sudoers.d/local-reprotest /etc/sudoers.d/local-reprotest none bind 0 0 fstab schroot . reprotest 0.7.32 December 2025 REPROTEST(1)