Provided by: bdebstrap_0.4.0-1_all bug

NAME

       bdebstrap - YAML config based multi-mirror Debian chroot creation tool

SYNOPSIS

       bdebstrap  [-h|--help]  [-c|--config  CONFIG]  [-n|--name  NAME] [-e|--env ENV] [-s|--simulate|--dry-run]
       [-b|--output-base-dir OUTPUT_BASE_DIR]  [-o|--output  OUTPUT]  [-q|--quiet|--silent|-v|--verbose|--debug]
       [-f|--force] [-t|--tmpdir TMPDIR] [--variant {extract,custom,essential,apt,required,minbase,buildd,impor‐
       tant,debootstrap,-,standard}]    [--mode   {auto,sudo,root,unshare,fakeroot,fakechroot,proot,chrootless}]
       [--aptopt APTOPT] [--keyring KEYRING] [--dpkgopt DPKGOPT]  [--hostname  HOSTNAME]  [--install-recommends]
       [--packages|--include  PACKAGES]  [--components COMPONENTS] [--architectures ARCHITECTURES] [--setup-hook
       COMMAND] [--essential-hook COMMAND] [--customize-hook COMMAND] [--cleanup-hook COMMAND]  [--suite  SUITE]
       [--target TARGET] [--mirrors MIRRORS] [SUITE [TARGET [MIRROR...]]]

DESCRIPTION

       bdebstrap  creates  a Debian chroot of SUITE into TARGET from one or more MIRRORs and places meta-data in
       the OUTPUT directory: A config.yaml containing the configuration for the build (useful for rebuilds)  and
       a  manifest  listing  all installed packages and versions.  If TARGET is just a filename (and not include
       the path), it will be placed in the OUTPUT directory as well.  bdebstrap extents  mmdebtrap  to  make  it
       configurable via YAML configuration files for more complex builds.

       The  configuration parameters can be passed to bdebstrap as command line arguments or in one or more con‐
       figuration YAML files.  The content of YAML files will be merged by appending lists and recursively merg‐
       ing maps.  Arguments specified on the command line will take precedence over values provided in the  YAML
       configuration file.  The final merged parameters will be stored in the output directory as config.yaml.

OPTIONS

       -h, --help
              Show a help message and exit

       -c CONFIG, --config CONFIG
              Configuration  YAML  file.   See YAML CONFIGURATION below for the expected structure of this file.
              This parameter can be specified multiple times.  The content of YAML files will be merged  by  ap‐
              pending lists and recursively merging maps.

       -n NAME, --name NAME
              name of the generated golden image.  If no output directory is specified, the golden image will be
              placed in OUTPUT_BASE_DIR/NAME.

       -e ENV, --env ENV
              Add  an  additional environment variable.  These environment variable will be set when calling the
              hooks.

       -s, --simulate, --dry-run
              Run apt-get with --simulate.  Only the package cache is initialized but  no  binary  packages  are
              downloaded  or  installed.   Use this option to quickly check whether a package selection within a
              certain suite and variant can in principle be installed as far as their dependencies go.   If  the
              output is a tarball, then no output is produced.  If the output is a directory, then the directory
              will be left populated with the skeleton files and directories necessary for apt to run in it.

       -b OUTPUT_BASE_DIR, --output-base-dir OUTPUT_BASE_DIR
              output base directory.  By default it is the current directory.

       -o OUTPUT, --output OUTPUT
              output directory (default: output-base-dir/name)

       -q, --quiet, --silent
              Do  not  write anything to standard error except errors.  If used together with --verbose or --de‐
              bug, only the last option will take effect.

       -v, --verbose
              Write informational messages (about configuration files, environment variables,  mmdebstrap  call,
              etc.)  to standard error.  Instead of progress bars, mmdebstrap writes the dpkg and apt output di‐
              rectly to standard error.  If used together with --quiet or --debug, only  the  last  option  will
              take effect.

       --debug
              In  addition to the output produced by --verbose, write detailed debugging information to standard
              error.  Errors of mmdebstrap will print a backtrace.  If used together with --quiet or  --verbose,
              only the last option will take effect.

       -f, --force
              Remove existing output directory before creating a new one

       -t TMPDIR, --tmpdir TMPDIR
              Temporary directory for building the image (default: /tmp)

       --variant {extract,custom,essential,apt,required,minbase,buildd,important,debootstrap,-,standard}
              Choose which package set to install.

       --mode {auto,sudo,root,unshare,fakeroot,fakechroot,proot,chrootless}
              Choose how to perform the chroot operation and create a filesystem with ownership information dif‐
              ferent from the current user.

       --aptopt APTOPT
              Pass arbitrary options or configuration files to apt.

       --keyring KEYRING
              Change the default keyring to use by apt.

       --dpkgopt DPKGOPT
              Pass arbitrary options or configuration files to dpkg.

       --hostname HOSTNAME
              Write the given HOSTNAME into /etc/hostname in the target chroot.

       --install-recommends
              Consider recommended packages as a dependency for installing.

       --packages PACKAGES, --include PACKAGES
              Comma or whitespace separated list of packages which will be installed in addition to the packages
              installed by the specified variant.

       --components COMPONENTS
              Comma  or  whitespace  separated  list of components like main, contrib and non-free which will be
              used for all URI-only MIRROR arguments.

       --architectures ARCHITECTURES
              Comma or whitespace separated list of architectures.  The first architecture is the native  archi‐
              tecture inside the chroot.

       --setup-hook COMMAND
              Execute  arbitrary COMMAND right after initial setup (directory creation, configuration of apt and
              dpkg, ...) but before any packages are downloaded or installed.  At that point, the chroot  direc‐
              tory does not contain any executables and thus cannot be chroot-ed into.  This option can be spec‐
              ified multiple times.

       --essential-hook COMMAND
              Execute  arbitrary  COMMAND  after  the Essential:yes packages have been installed, but before in‐
              stalling the remaining packages.  This option can be specified multiple times.

       --customize-hook COMMAND
              Execute arbitrary COMMAND after the chroot is set up and all packages got installed but before fi‐
              nal cleanup actions are carried out.  This option can be specified multiple times.

       --cleanup-hook COMMAND
              Execute arbitrary COMMAND after all customize hooks have been executed.  This option can be speci‐
              fied multiple times.

       --suite SUITE, SUITE
              The suite may be a valid release code name (eg, sid, stretch, jessie) or a symbolic name (eg,  un‐
              stable, testing, stable, oldstable).

       --target TARGET, TARGET
              The  optional  target  argument can either be the path to a directory, the path to a tarball file‐
              name, the path to a squashfs image or -.

       --mirrors MIRRORS, MIRRORS
              Comma separated list of mirrors.  If no mirror option is provided, http://deb.debian.org/debian is
              used.

YAML CONFIGURATION

       This section describes the expected data-structure hierarchy of the YAML configuration file(s).  The top-
       level structure is expected to be a mapping.  The top-level mapping may contain following keys:

   env
       mapping of environment variables names to their values.  Environment variables can be overridden by spec‐
       ifying them with --env using the same name.  These environment variable are set before calling the hooks.

   name
       String.  Name of the generated golden image.  Can be overridden by --name.

   mmdebstrap
       mapping.  The values here are passed to mmdebstrap(1).  Following keys might be specified:

       aptopts
              list of arbitrary options or configuration files (string) to apt.  Additional apt options  can  be
              specified with --aptopt.

       architectures
              list  of architectures (string).  The first architecture is the native architecture inside the ch‐
              root.  Additional architectures can be specified with --architectures.

       components
              list of components (string) like main, contrib and non-free which will be used  for  all  URI-only
              MIRROR arguments.  Additional components can be specified with --components.

       dpkgopts
              list of arbitrary options or configuration files (string) to dpkg.  Additional dpkg options can be
              specified with --dpkgopt.

       hostname
              String.  If specified, write the given hostname into /etc/hostname in the target chroot.  This pa‐
              rameter  does not exist in mmdebstrap and is implemented as customize hook for mmdebstrap.  Can be
              overridden by --hostname.

       install-recommends
              Boolean.  If set to True, the APT option Apt::Install-Recommends “true” is  passed  to  mmdebstrap
              via --aptopt.  Can be overridden by --install-recommends.

       keyrings
              list of default keyring to use by apt.  Additional keyring files can be specified with --keyring.

       mirrors
              list of mirrors (string).  Additional mirrors can be specified with --mirrors.

       mode   Choose how to perform the chroot operation and create a filesystem with ownership information dif‐
              ferent  from the current user.  It needs to be one of auto, sudo, root, unshare, fakeroot, fakech‐
              root, proot, or chrootless.  See mmdebstrap(1) for details.  Can be overridden by --mode.

       packages
              list of packages (string) which will be installed in addition to the  packages  installed  by  the
              specified  variant.  Additional packages can be specified with --packages or --include.  This set‐
              ting is passed to mmdebstrap using the --include parameter.

       setup-hooks
              list of setup hooks (string).  Execute arbitrary commands right  after  initial  setup  (directory
              creation, configuration of apt and dpkg, ...) but before any packages are downloaded or installed.
              At  that point, the chroot directory does not contain any executables and thus cannot be chroot-ed
              into.  See HOOKS in mmdebstrap(1) for more information and examples.  Additional setup  hooks  can
              be specified with --setup-hook.

       essential-hooks
              list  of  essential  hooks  (string).  Execute arbitrary commands after the Essential:yes packages
              have been installed, but before installing the remaining packages.  See HOOKS in mmdebstrap(1) for
              more information and examples.  Additional essential hooks can be specified with --essential-hook.

       customize-hooks
              list of customize hooks (string).  Execute arbitrary commands after the chroot is set up  and  all
              packages  got  installed  but  before  final cleanup actions are carried out.  See HOOKS in mmdeb‐
              strap(1) for more information and examples.  Additional customize  hooks  can  be  specified  with
              --customize-hook.

       cleanup-hooks
              list of cleanup hooks (string).  Cleanup hooks are just hooks that are run directly after all oth‐
              er  customize  hooks.   See customize-hooks above.  Additional cleanup hooks can be specified with
              --cleanup-hook.

       suite  String.  The suite may be a valid release code name (eg, sid, stretch, jessie) or a symbolic  name
              (eg, unstable, testing, stable, oldstable).  Can be overridden by --suite.

       target String.   The  target  argument can either be the path to a directory, the path to a tarball file‐
              name, the path to a squashfs image or -.  Can be overridden by --target.

       variant
              Choose which package set to install.  It needs to be one of extract, custom, essential,  apt,  re‐
              quired, minbase, buildd, important, debootstrap, -, standard.  See mmdebstrap(1) for details.  Can
              be overridden by --variant.

HOOKS

       bdebstrap  enhances  the hooks provided by mmdebstrap.  Hooks can use the environment variables specified
       via the env configuration option or the --env parameter.  bdebstrap sets following environment  variables
       by default to be consumed by the hooks:

       BDEBSTRAP_HOOKS
              Path to the hooks provided by bdebstrap.

       BDEBSTRAP_NAME
              name  of  the  generated golden image which is set via the name configuration option of the --name
              parameter.

       BDEBSTRAP_OUTPUT_DIR
              Path of a temporary directory inside the chroot.  Files and directories  that  are  placed  inside
              this directory will be copied out of the image into the output directory.  This temporary directo‐
              ry will be removed in a final cleanup hook.

       Following hook scripts are shipped with bdebstrap:

       disable-units
              Disable services / systemd units.

       enable-units
              Enable services / systemd units.

       Example usage for the hook scripts:

              ---
              mmdebstrap:
                customize-hooks:
                  - $BDEBSTRAP_HOOKS/disable-units "$1" apt-daily.timer cron
                  - $BDEBSTRAP_HOOKS/enable-units "$1" systemd-timesyncd
                suite: bullseye
                target: root.tar
                variant: important

EXAMPLES

   Minimal Debian unstable tarball
       This example shows how to use a small YAML configuration to build a minimal Debian unstable tarball.  As‐
       sume following configuration is stored in unstable.yaml:

              ---
              mmdebstrap:
                keyrings:
                  - /usr/share/keyrings/debian-archive-keyring.gpg
                mode: unshare
                suite: unstable
                target: root.tar.xz
                variant: minbase

       Then the tarball can be generated by running

              $ bdebstrap -c unstable.yaml --name example1
              $ ls example1/
              config.yaml  manifest  root.tar.xz

   Debian live system
       This  example  shows how to use a YAML configuration to build a Debian 11 (bullseye) live system.  Assume
       following configuration is stored in live.yaml:

              ---
              mmdebstrap:
                architectures:
                  - amd64
                cleanup-hooks:
                  - cp /dev/null "$1/etc/hostname"
                  - if test -f "$1/etc/resolv.conf"; then cp /dev/null "$1/etc/resolv.conf"; fi
                customize-hooks:
                  - cp --preserve=timestamps -v "$1"/boot/vmlinu* "$1${BDEBSTRAP_OUTPUT_DIR?}/vmlinuz"
                  - cp --preserve=timestamps -v "$1"/boot/initrd.img* "$1${BDEBSTRAP_OUTPUT_DIR?}/initrd.img"
                  - mkdir -p "$1/root/.ssh"
                  - upload ~/.ssh/id_rsa.pub /root/.ssh/authorized_keys
                keyrings:
                  - /usr/share/keyrings/debian-archive-keyring.gpg
                mode: unshare
                packages:
                  - init
                  - iproute2
                  - less
                  - libpam-systemd
                  - linux-image-cloud-amd64
                  - live-boot
                  - locales
                  - openssh-server
                suite: bullseye
                target: root.squashfs
                variant: minbase

       This example assumes that ~/.ssh/id_rsa.pub  exists,  because  it  will  be  copied  into  the  image  to
       /root/.ssh/authorized_keys to allow SSH access using the user’s SSH key.

       The squashfs image can be generated by running

              $ bdebstrap -c live.yaml --name example2
              $ ls example2/
              config.yaml  initrd.img  manifest  root.squashfs  vmlinuz

       The kernel and initrd are copied out of the squashfs image using customize hooks to allow them to be used
       directly  by  QEMU.  To launch this image locally with QEMU, the root.squashfs image needs to be provided
       by a HTTP server:

              $ python3 -m http.server -b localhost --directory example2 8080

       This command exposes the generated image via HTTP on localhost on port 8080.  QEMU can be started passing
       the TCP traffic on port 8080 to the webserver:

              $ cd example2
              $ qemu-system-x86_64 -machine accel=kvm -m 1G -device virtio-net-pci,netdev=net0 -monitor vc \
                  -netdev user,id=net0,hostfwd=tcp::2222-:22,guestfwd=tcp:10.0.2.252:8080-tcp:localhost:8080,hostname=debian-live \
                  -kernel ./vmlinuz -initrd ./initrd.img -append "boot=live fetch=http://10.0.2.252:8080/root.squashfs quiet"

       To print the output on the launching terminal, add -nographic -serial stdio to the QEMU command line  and
       console=ttyS0 to the -append parameter.  Once the virtual machine is started, it can be accessed via SSH:

              $ ssh -oUserKnownHostsFile=/dev/null -oStrictHostKeyChecking=no -p 2222 root@localhost

SEE ALSO

       mmdebstrap(1), debootstrap(8)

AUTHOR

       Benjamin Drung <bdrung@posteo.de>

bdebstrap                                          2020-05-26                                       BDEBSTRAP(1)