debbisect

DEBBISECT(1)                     User Commands                    DEBBISECT(1)

NAME
       debbisect - bisect snapshot.debian.org

DESCRIPTION
       usage:  debbisect  [-h]  [-d]  [-v] [--cache CACHE] [--nocache] [--port
       PORT]

              [--depends DEPENDS] [--qemu QEMU] [--architecture  ARCHITECTURE]
              [--suite SUITE] [--components COMPONENTS] [--no-find-exact-pack-
              age] good bad script

       Execute a script or a shell snippet for a known good  timestamp  and  a
       known  bad  timestamp  and then bisect the timestamps until a timestamp
       from snapshot.debian.org is found where the script first  fails.  Envi-
       ronment  variables are used to tell the script which timestamp to test.
       See ENVIRONMENT VARIABLES below. At the end of the execution, the files
       debbisect.log.good  and debbisect.log.bad are the log files of the last
       good and last bad run, respectively. By default,  a  temporary  caching
       mirror  is  executed  to reduce bandwidth usage on snapshot.debian.org.
       If you plan to run debbisect multiple times on a similar range of time-
       stamps,  consider  setting  a  non-temporary  cache  directory with the
       --cache option.

       The program has three basic modes of operation. In the first, the given
       script is responsible to set up everything as needed:

              $ ./debbisect "last week" today script.sh
              $ diff -u debbisect.log.good debbisect.log.bad

       If  also  the  --depends  option is given, then a chroot of the correct
       timestamp will be created each time and  the  script  will  receive  as
       first  argument the path to that chroot. Additionally, this mode allows
       debbisect to figure out the exact package that was responsible for  the
       failure  instead  of  only  presenting  you the last good and first bad
       timestamp.

       Lastly, you can also provide the --qemu option. In this mode, your test
       will  be  create  a  qemu virtual machine of the correct timestamp each
       time. The script will receive the correct ssh config to log into a host
       named qemu and execute arbitrary commands.

   positional arguments:
       good   good timestamp -- see section TIMESTAMPS for valid formats

       bad    bad timestamp -- see section TIMESTAMPS for valid formats

       script test  script  --  can  either be a shell code snippet or an exe-
              cutable script. A non zero exit  code  indicates  failure.  When
              also  --depends  is  used, then the first argument to the script
              will be the chroot directory.  When --qemu  is  used,  then  the
              first argument to the script will an ssh config for a host named
              qemu.

   options:
       -h, --help
              show this help message and exit

       -d, --debug
              Print lots of debugging statements

       -v, --verbose
              Be verbose

       --cache CACHE
              cache directory -- by default $TMPDIR is used

       --nocache
              disable cache

       --port PORT
              manually choose port number for the apt cache instead  of  auto-
              matically choosing a free port

       --depends DEPENDS
              Comma  separated  list  of  binary  packages the test script re-
              quires. With this option, the test script will run inside a  ch-
              root with the requested packages installed.

       --qemu QEMU
              Create  qemu  virtual  machine and pass a ssh config file to the
              test script. This argument  takes  a  commaseparated  series  of
              key=value  pairs to specify the virtual machine memory size (via
              memsize) and the virtual machine disksize (via disksize).  Sizes
              are  measured in bytes or with common unit suffixes like M or G.
              To pick the default values (disksize=4G,memsize=1G)  the  short-
              hand 'defaults' can be passed.

       --architecture ARCHITECTURE
              Chosen  architecture  when creating the chroot with --depends or
              --qemu (default: native architecture)

       --suite SUITE
              Chosen suite when creating the chroot with --depends  or  --qemu
              (default: unstable)

       --components COMPONENTS
              Chosen components (separated by comma or whitespace) when creat-
              ing the chroot with --depends or --qemu (default: main)

       --no-find-exact-package
              Normally, when the --depends argument is given so that debbisect
              takes  care  of  managing dependencies, the precise package that
              introduced the problem is  determined  after  bisection  by  in-
              stalling  the  packages  that  differ  between the last good and
              first bad timestamp one by one. This option disables  this  fea-
              ture.

TIMESTAMPS
       Valid good and bad timestamp formats are either:

              > the format used by snapshot.debian.org
              > ISO 8601 (with or without time, seconds and timezone)
              > RFC 2822 (used in debian/changelog)
              >  all  formats understood by the Python dateutil module (if in-
              stalled)
              > all formats understood by the Python parsedatetime module  (if
              installed)

       Without specifying the timezone explicitly, the local offset is used.

       Examples (corresponding to the items in above list, respectively):

              > 20200313T065326Z
              > 2020-03-13T06:53:26+00:00
              > Fri, 29 Nov 2019 14:00:08 +0100
              > 5:50 A.M. on June 13, 1990
              > two weeks ago

ENVIRONMENT VARIABLES
       The following environment variables are available to the test script:

       DEBIAN_BISECT_MIRROR    Contains the caching mirror address.

       DEBIAN_BISECT_EPOCH     Contains an integer representing the unix epoch
       of the

       current timestamp. The value of this variable can
              directly be assigned to SOURCE_DATE_EPOCH.

       DEBIAN_BISECT_TIMESTAMP Contains a timestamp in the format used by

       snapshot.debian.org. Can also be generated from
              DEBIAN_BISECT_EPOCH via: date --utc --date=@$DEBIAN_BISECT_EPOCH
              +%Y%m%dT%H%M%SZ

       DEBIAN_BISECT_*          All  environment  variables  starting with DE-
       BIAN_BISECT_

              are passed to the test script.

EXAMPLES
       Just run "do_something" which runs the test and returns a non-zero exit
       on failure.

              $   ./debbisect   "last  week"  today  "mmdebstrap  --customize-
              hook='chroot  \"\$1\"  do_something'  unstable  -   \$DEBIAN_BI-
              SECT_MIRROR >/dev/null"
              $ diff -u debbisect.log.good debbisect.log.bad

       Since  the  command  can  easily  become very long and quoting very in-
       volved, lets instead use a script:

              $ cat << END > script.sh

              > #!/bin/sh
              > set -exu
              > mmdebstrap \
              > --verbose \
              > --aptopt='Acquire::Check-Valid-Until "false"' \
              > --variant=apt \
              > --include=pkga,pkgb,pkgc \
              > --customize-hook='chroot "$1" dpkg -l' \
              > --customize-hook='chroot "$1" do_something' \
              > unstable \
              > - \
              > $DEBIAN_BISECT_MIRROR \
              > >/dev/null
              > END

              $ chmod +x script.sh
              $ ./debbisect --verbose --cache=./cache "two years ago"  yester-
              day ./script.sh
              $ diff -u debbisect.log.good debbisect.log.bad
              $ rm -r ./cache

       This  example  sets  Acquire::Check-Valid-Until to not fail on snapshot
       timestamps from "two years ago", uses the "apt"  variant  (only  Essen-
       tial:yes  plus  apt), installs the packages required for the test using
       --include, runs "dpkg -l" so that we can see which packages differed in
       the  logs  at the end and uses --cache=cache so that the apt cache does
       not get discarded at the end and the  command  can  be  re-run  without
       downloading everything from snapshot.debian.org again.

       If you want to build a source package you can use the script shipped by
       devscripts as  /usr/share/doc/devscripts/examples/debbisect_buildsrc.sh
       and either use it unmodified like this:

              $ DEBIAN_BISECT_SRCPKG=mysrc ./debbisect "two years ago" yester-
              day      >   /usr/share/doc/devscripts/examples/debbisect_build-
              src.sh

       or use the script as a starting point to do your own custom builds.

       Once debbisect has finished bisecting and figured out the last good and
       the first bad timestamp, there might be more than one package that dif-
       fers  in version between these two timestamps. debbisect can figure out
       which package is the culprit if you hand it control over installing de-
       pendencies  for  you via the --depends option. With that option active,
       the script will not be responsible to set up a  chroot  itself  but  is
       given  the  path to an existing chroot as the first argument. Here is a
       real example that verifies  the  package  responsible  for  Debian  bug
       #912935:

              $  ./debbisect --depends=botch "2018-11-17" "2018-11-22" 'chroot
              "$1" botch-dose2html --packages=/dev/null --help'

              [...]  test upgrading python3-minimal 3.6.7-1 -> 3.7.1-2...

              upgrading python3-minimal triggered the problem

       If you want to run above test under qemu, then you would run:

              $  ./debbisect  --depends=botch   --qemu=defaults   "2018-11-17"
              "2018-11-22"   'ssh   -F   "$1"   qemu  botch-dose2html  --pack-
              ages=/dev/null --help'

       In the last two examples we omitted the --cache argument  for  brevity.
       But please make use of it to reduce the load on snapshot.debian.org.

AUTHOR
       Written by Johannes Schauer Marin Rodrigues <josch@debian.org>

debbisect 2.22.1ubuntu1          January 2022                     DEBBISECT(1)
Man Pages Copyright Respective Owners. Site Copyright (C) 1994 - 2025 Hurricane Electric. All Rights Reserved.