Provided by: piuparts_1.3_all bug

NAME

       piuparts - .deb installation, upgrade, and removal testing suite

SYNOPSIS

       piuparts  [-a  -p  -v  -V]  [-d distro] [-i filename] [-I regexp] [-l logfile] [-m URL] [‐
       --bindmount dir] [package ...] [changes_file ...]

DESCRIPTION

       piuparts tests that Debian packages handle installation, upgrading, and removal correctly.
       It  does  this  by  creating  a  minimal  Debian installation in a chroot, and installing,
       upgrading, and removing packages in that environment,  and  comparing  the  state  of  the
       directory tree before and after. piuparts reports any files that have been added, removed,
       or modified during this process.

       piuparts is meant as a quality assurance tool for people who  create  Debian  packages  to
       test them before they upload them to the Debian package archive.

       By default, piuparts can do three different tests:

       • A  simple  install-purge test within one Debian distribution (chosen with the -d option,
         unstable by default). It sets up the chroot with the desired distribution, then installs
         and purges the packages, and reports problems.

       • A  simple  install-upgrade-purge  test within one Debian distribution. This test is like
         the install-purge test, but it installs the packages first via apt-get and then upgrades
         them  with  the package files given on the command line. If the command line has package
         names (option --apt used), or no tested package is known to apt-get (new packages), this
         test is skipped, otherwise it is performed automatically.

       • An  upgrade  test  between  Debian releases. This test is enabled by using the -d option
         multiple times and disables the other two tests. It sets up the chroot  with  the  first
         distribution  named,  then  upgrades  it  to each successive one, and then remembers the
         directory tree state at the end. After this, it starts over with the chroot of the first
         distribution,  installs  the  desired  packages  (via  apt-get  install),  and  does the
         successive upgrading (via apt-get dist-upgrade). Then, if package files  (and  not  just
         package  names)  were  given  on the command line, it installs them. Finally, it reports
         problems against the state of the directory tree at the last distribution compared  with
         the  state  without  the  packages having been installed. This test can be quite slow to
         execute. Note that this does not  work  with  experimental,  because  apt-get  does  not
         automatically upgrade to packages in experimental. To test a particular package or group
         of packages in experimental, use the second test.

       Command line arguments are the paths  to  package  files  (e.g.,  piuparts_1.0-1_all.deb),
       paths  to  changes files (e.g., piuparts_1.0-1_i386.changes), or names of packages, if the
       --apt option is given.

       When processing changes files, by  default,  all  packages  in  a  changes  file  will  be
       processed  together  with  all  individual  packages  given on the command line. Then each
       package given on the command line is processed in a single group. If --single-changes-list
       is  used,  the  packages  in  all  changes  files  are  processed  together along with any
       individual packages that were given on the command line. To avoid this  behaviour,  it  is
       possible to specify --single-packages.

       piuparts  outputs  to the standard output some log messages to show what is going on. If a
       log file is used, the messages go there as well.

       piuparts needs to be run as root.

OPTIONS

       Options must come before the other command line arguments.

       -a, --apt
              The package arguments on the command line are to be treated as  package  names  and
              installed  via  apt-get  install  instead  of  being  names of package files, to be
              installed via dpkg -i.

       --allow-database
              Allow starting MySQL and PostgreSQL database servers in  the  chroot  for  packages
              requiring  database  access in their maintainer scripts.  Do not use this option if
              there is already a database server running  on  the  system  running  piuparts  (or
              piuparts-slave)!   In  master-slave setups with multiple slaves running on one host
              collisions may occur, these will be  detected  by  detect_piuparts_issues  and  the
              affected packages will be tested again.

       --arch arch
              Create chroot and run tests for (non-default) architecture arch. The default is the
              output from dpkg --print-architecture.

       -b tarball, --basetgz tarball
              Use tarball as the contents of the initial chroot, instead of building  a  new  one
              with debootstrap.

              The tarball can be created with the -s option, or you can use one that pbuilder has
              created (see -p). If you create one manually, make sure the root of the  chroot  is
              the  root  of  the  tarball. Despite the option name implying gzip compression, the
              compression scheme is deduced by tar from the filename suffix.

       --bindmount dir
              Bind-mount a directory inside the chroot.

       -d name, --distribution name
              Which Debian distribution to use: a code name (for example  bullseye,  bookworm  or
              sid) or experimental. The default is sid (= unstable).

       -D flavor, --defaults flavor
              Use  default  settings suitable for a particular flavor of Debian: either debian or
              ubuntu. The default is debian.

       --do-not-verify-signatures
              Do not verify signatures from the Release files when running debootstrap. Also  set
              APT::Get::AllowUnauthenticated accordingly in /etc/apt/apt.conf in the chroots.

       --dpkg-force-confdef
              Make  dpkg  use  --force-confdef,  which lets dpkg always choose the default action
              when a modified conffile is found. This option will make piuparts ignore errors  it
              was  designed  to  report  and  therefore  should  only be used to hide problems in
              depending packages. This option shall normally not be used. (See #466118.)

       --dpkg-noforce-unsafe-io
              Prevent running dpkg with --force-unsafe-io.  --force-unsafe-io causes dpkg to skip
              certain  file  system  syncs  known to cause substantial performance degradation on
              some filesystems.  Thus, including this option reverts to safe but slower behavior.
              The  --dpkg-noforce-unsafe-io  is required for running tests on distributions older
              than squeeze.

       --no-eatmydata
              Prevent use of eatmydata.  The --no-eatmydata option is required for running  tests
              on squeeze or older distributions.

       --extra-old-packages pkg1[,pkg2]...
              Install   additional   old  packages  before  upgrading.   Allows  testing  package
              renames/merges where the old package is no longer available in the new distribution
              and  the  new  one  utilizes Conflicts/Replaces.  The argument is a comma separated
              list  of  package  names  and  the  option  can  be  given  multiple  times.    For
              install/purge  tests these packages will be installed before the package that is to
              be tested.

       -e dirname, --existing-chroot dirname
              Use the specified directory as source for the new chroot, instead of building a new
              one  with  debootstrap.  This  is  similar  to  --basetgz, but the contents are not
              archived. See also the --hard-link option.

       --distupgrade-to-testdebs
              Use the "testdebs" repository to override the packages in  the  distupgrade  target
              distribution.  This  allows  one  to test complex upgrade paths before the packages
              enter the archive.

       --extra-repo deb-line
              Provide an additional (unparsed) line to be appended to sources.list, for example:

                 'deb <URL> <distrib> <components>'
                  or
                 'deb file:// </bind/mount> ./'

              Useful for e.g. backports, security or local repositories that cannot be handled by
              --mirror. May be repeated to add more than one line.

       --fake-essential-packages pkg1[,pkg2]...
              Install additional packages in the base chroot that are not removed after the test.
              These are available during purge and for checking against  mistreatment.   Takes  a
              comma separated list of package names and can be given multiple times.

       --hard-link
              When  the --existing-chroot option is used, and the source directory is on the same
              filesystem, hard-link files instead of  copying  them.  This  is  faster,  but  any
              modifications to files will be reflected in the originals.

       -i filename, --ignore filename
              Add a filename to the list of filenames to be ignored when comparing changes before
              and after installation. By default,  piuparts  ignores  files  that  always  change
              during  a  package  installation and uninstallation, such as dpkg status files. The
              filename should be relative to the root of the chroot (e.g.,  var/lib/dpkg/status).
              Filenames  prefixed with a : will be logged verbosely if found.  This option can be
              used as many times as necessary.

       -I regexp, --ignore-regexp regexp
              Add a regular expression pattern to the  list  of  patterns  for  filenames  to  be
              ignored  when  comparing  changes before and after installation.  Patterns prefixed
              with a : will log verbosely all matching files.  This option can be  used  as  many
              times as necessary.

       --install-purge-install
              Purge  package  after  installation  and  reinstall. All dependencies are available
              during purge.

       --install-recommends
              Enable installation of Recommends.

       --install-suggests
              Enable installation of Suggests.

       --install-remove-install
              Remove package after  installation  and  reinstall.  For  testing  installation  in
              config-files-remaining state.

       -k, --keep-env
              Depending  on  which  option is passed, keep the environment used for testing after
              the program ends

                 • By default it doesn't remove the temporary directory for the chroot,

                 • or if --schroot is used, the schroot session is not terminated,

                 • or if --docker-image is used, the container created is not destroyed.

       -K filename, --keyring filename
              Use filename as the keyring to use with debootstrap when creating chroots.

       --keep-sources-list
              Don't modify the chroot's /etc/apt/sources.list.

       --list-installed-files
              List the files added to the chroot after the installation of the package and  after
              the installation of the package dependencies.

       --lvm-volume lvm-volume
              Use  the  specified  lvm-volume as source for the chroot, instead of building a new
              one with debootstrap. This creates a snapshot of the given LVM volume and mounts it
              to the chroot path.

       --lvm-snapshot-size snapshot-size
              Use  the  specified snapshot-size as snapshot size when creating a new LVM snapshot
              (default: 1G)

       -l filename, --log-file filename
              Append log file to filename in addition to the standard output.

       --log-level level
              Display messages from loglevel level,  possible  values  are:  error,  info,  dump,
              debug. The default is dump.

       --max-command-output-size size
              Set  the  maximum  permitted  command  output  to  size  (in MB) for debugging runs
              exceeding the default of 8 MB.

       --merged-usr
              When using debootstrap to create the chroot, use the --merged-usr option to  create
              a chroot with /bin, /lib, /sbin being symlinks to their /usr counterparts.

       --no-merged-usr
              When using debootstrap to create the chroot, use the --no-merged-usr option.

       -m URL, --mirror URL
                 Which  Debian  mirror  to  use.  The  default  is  the  first  mirror  named  in
                 /etc/apt/sources.list or http://deb.debian.org/debian if  none  is  found.  This
                 option may be used multiple times to use multiple mirrors. Only the first mirror
                 is used with debootstrap.

                 The 'components' that are used for a mirror can also be set with this option:  a
                 space  separated  list within the same argument (so you need to quote the entire
                 argument in the shell). If no components are given explicitly, the usual  Debian
                 components  are  used  (main,  contrib, non-free and non-free-firmware). For the
                 mirrors read from /etc/apt/sources.list, the components are read from  the  same
                 place.

              Note  that  file: addresses work if the directories are made accessible from within
              the chroot with --bindmount.

       --no-adequate
              Don't run adequate after installation. The default is to run adequate, provided  it
              is installed.

       --no-check-valid-until
              Set  apt  option  Acquire::Check-Valid-Until=false  in  the  chroot  to  ignore the
              expiration of Release files. This is needed for testing archived releases.

       --no-diversions
              Don't check for broken diversions.

       -n, --no-ignores
              Forget all built-in and other ignores that have been set  so  far.  Any  -i  or  -I
              arguments  that  come after this one will be obeyed, but none of the ones that come
              before.

       -N, --no-symlinks
              Don't check for broken symlinks.

       --fail-if-inadequate
              Fail on inadequate results from running adequate. The  default  is  to  just  issue
              those errors as warnings.

       --fail-on-broken-symlinks
              Fail on broken symlinks. The default is to just issue those errors as warnings.

       --no-upgrade-test
              Skip testing upgrade from an existing version in the archive.

       --no-install-purge-test
              Skip the install and purge test.

       -p, --pbuilder
              Use  /var/cache/pbuilder/base.tgz  as the base tarball. This is a shorthand so that
              you don't need to use -b for it.

       --pedantic-purge-test
              Be pedantic when checking if a purged package leaves files behind. If  this  option
              is not set, files left in /tmp are ignored.

       --proxy URL
              Use  the  proxy  at  URL  to access the Debian mirror(s). Takes precedence over the
              http_proxy environment  variable.  Using  a  local  proxy  is  recommended  because
              piuparts may use large amounts of bandwidth to repeatedly download the same files.

       -s filename, --save filename
              Save  the chroot, after it has been set up, as a tarball into filename. It can then
              be used with -b.

       -B filename, --end-meta filename
              Load chroot package selection and file meta data from filename.  See  the  function
              install_and_upgrade_between_distros()  in  piuparts.py  for defaults. Mostly useful
              for large scale distro upgrade tests.

       -S filename, --save-end-meta filename
              Save chroot package selection and file meta data in filename for later use. See the
              function  install_and_upgrade_between_distros() in piuparts.py for defaults. Mostly
              useful for large scale distro upgrade tests.

       --scriptsdir directory
              Directory where are custom scripts are placed. By default, this  is  not  set.  For
              more information about this, read README_server.txt

       --schroot SCHROOT-NAME
              Use  schroot  session  named  SCHROOT-NAME  for the testing environment, instead of
              building a new one with debootstrap.

       --docker-image DOCKER-IMAGE
              Use a container  created  from  the  docker  image  DOCKER-IMAGE  for  the  testing
              environment,  instead  of  building a new one with debootstrap.  This only supports
              overlay2 for now and it uses the MergedDir layer where piuparts  can  access,  add,
              edit and remove files easily by directly accessing the directory.

       --single-changes-list
              When  processing  changes  files,  piuparts  will  process  the  packages  in  each
              individual changes file separately. This option  will  set  piuparts  to  scan  the
              packages of all changes files together along with any individual package files that
              may have been given on the command line.

       --single-packages
              Process every package file or package name individually, thus piuparts process runs
              multiple times. This option can be useful with conflicting packages.

       --shell-on-error
              Start an interactive shell in the chroot after an error occurred.  This should help
              debugging failures directly inside  the  piuparts  test  environment.   The  chroot
              cleanup  will continue after the shell terminates.  Note: This does not work if the
              piuparts command is prefixed with 'timeout', which is usually the case  in  command
              lines  directly  copied  from  logfiles  from  a  master-slave  setup. Removing the
              'timeout' part is sufficient.

       --skip-minimize
              Allow skip minimize chroot step. This is useful  when  you  want  to  test  several
              packages  with  piuparts. You can prepare a tarball already minimized and skip this
              step in all the tests. This is the default now.

       --minimize
              Minimize the chroot with debfoster. This used to be the default until  #539142  was
              fixed.

       --skip-cronfiles-test
              Skip  testing  the  output  from  the  cron files left in the system after remove a
              package.

       --skip-logrotatefiles-test
              Skip testing the output from the logrotate files left in the system after remove  a
              package.

       --testdebs-repo deb-line
              Provide an additional line to be appended to sources.list, for example:

                 'deb [ trusted=yes ] <URL> <distrib> <components>'
                  or
                 'deb [ trusted=yes ] file:// </bind/mount> ./'

              If  only  an  URL or local path is given as argument, deb [ trusted=yes ], file://,
              and ./ will be prepended/appended as needed.  The  "testdebs"  repository  provides
              the  packages  to  be tested (and some additional dependencies, if needed, e.g. all
              packages built from the same source package as the (binary) package  being  tested)
              and  can  be  used for testing complex installation and upgrade scenarios involving
              dependencies that are not yet in the archive. This  repository  will  be  available
              only  for  installing  the  target  packages. Dependency resolution will be done by
              apt-get. The packages to be tested can be passed as .debs or as package names (with
              --apt).

              The  trusted=yes  option  causes  this (and only this) repository to be trustworthy
              even  if  the  Packages  file  is  not  signed,  such  that  a  (globally   acting)
              --do-not-verify-signatures will not be needed.

       -t directory, --tmpdir directory
              Use  directory  as the place where temporary files and directories are created. The
              default is the environment  variable  TMPDIR,  or  /tmp  if  not  set.   Note:  the
              temporary directory must not be mounted with the nodev or nosuid mount option.

       --update-retries num-retries
              Rerun  apt-get  update  up  to  num-retries times.  Useful to work around temporary
              network failures and hashsum mismatch errors.

       --upgrade-before-dist-upgrade
              Perform two-stage upgrades: apt-get upgrade && apt-get dist-upgrade.

       -v, --verbose
              This option no longer has any meaning, but  it  is  still  accepted  for  backwards
              compatibility.

       -V, --version
              Write out the version number of the program.

       --warn-on-debsums-errors
              Print a warning rather than failing if debsums reports modified files.

       --warn-on-leftovers-after-purge
              Print a warning rather than failing if files are left behind after purge.

       --warn-on-others
              Print  a warning rather than failing if files are left behind, modified, or removed
              by a package that was not given on the command-line.

              This way, you can basically isolate the purge test  to  your  own  packages.  If  a
              package that is brought in as a dependency doesn't purge cleanly, the test will not
              fail because of it (but a warning message will be printed).

              Behavior with multiple packages given on the  command-line  could  be  problematic,
              particularly  if the dependency tree of one package in the list includes another in
              the list. Therefore, it is recommended to use this option with  one  package  at  a
              time.

       --warn-on-usr-move disabled|warn|fail
              Whether  to  enable the test (with a warning or a failure) that checks if files are
              moved between /bin|sbin|lib* and  /usr/bin|sbin|lib*.   Accepted  values:  disabled
              (default), warn, fail.

EXAMPLES

       Assume  that  you  have just built a new version of your Debian package, to be uploaded to
       Debian unstable. It is in ../foo_1.0-2_i386.deb and you would  like  to  know  whether  it
       installs and uninstalls properly. Here's what you would do:

          piuparts ../foo_1.0-2_i386.deb

       If  the package exists in the Debian archive already, the above command also tests that it
       upgrades properly.

       To do the same test, but using a particular mirror, and only the main component, you would
       do this:

          piuparts -m 'http://gytha/debian main' ../foo_1.0-2_i386.deb

       If you want to do the same as above but for your changes files, pass in your changes files
       when running piuparts, and piuparts will process each package  in  the  changes  files  as
       though  you  had  passed  all those packages on the command line to piuparts yourself. For
       example:

          piuparts ../foo_1.0-2_i386.changes

          piuparts -m 'http://gytha/debian main' ../foo_1.0-2_i386.changes

       If you want to test that a package installs properly in the  stable  (currently  bullseye)
       Debian  release,  then  can  be  upgraded to the testing (currently bookworm) and unstable
       (sid) versions, and then uninstalled  without  problems,  you  would  give  the  following
       command:

          piuparts -a -d bullseye -d bookworm -d sid foo

ENVIRONMENT

       TMPDIR Location  for  temporary  files and directories. If not set, use /tmp. See also the
              --tmpdir option.

NOTES

       Output of commands run by piuparts is limited to three megabytes. To  change  this  limit,
       the source code needs to be edited.  Commands exceeding this limit will be aborted.

SEE ALSO

       pbuilder(1), debootstrap(8)

AUTHOR

       Lars Wirzenius (liw@iki.fi) and others

                                           Jan 13, 2024                               PIUPARTS(1)