summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--Makefile18
-rw-r--r--README66
-rw-r--r--TODO9
-rwxr-xr-xdebootstrap871
-rw-r--r--debootstrap.8206
-rw-r--r--functions2043
-rw-r--r--scripts/aequorea202
-rw-r--r--scripts/amber226
l---------scripts/artful1
l---------scripts/ascii1
l---------scripts/bartholomea1
l---------scripts/beowulf1
l---------scripts/bionic1
l---------scripts/bookworm1
-rw-r--r--scripts/breezy164
l---------scripts/bullseye1
l---------scripts/buster1
l---------scripts/byzantium1
l---------scripts/ceres1
l---------scripts/chromodoris1
l---------scripts/cosmic1
l---------scripts/crimson1
-rw-r--r--scripts/dapper169
l---------scripts/dasyatis1
-rw-r--r--scripts/debian-common243
l---------scripts/disco1
-rw-r--r--scripts/edgy188
l---------scripts/eoan1
-rw-r--r--scripts/etch18
l---------scripts/etch-m68k1
-rw-r--r--scripts/feisty190
l---------scripts/focal1
l---------scripts/groovy1
-rw-r--r--scripts/gutsy327
l---------scripts/hardy1
l---------scripts/hirsute1
-rw-r--r--scripts/hoary179
-rw-r--r--scripts/hoary.buildd159
l---------scripts/impish1
l---------scripts/intrepid1
l---------scripts/jammy1
l---------scripts/jaunty1
l---------scripts/jessie1
l---------scripts/jessie-kfreebsd1
-rw-r--r--scripts/kali17
l---------scripts/kali-dev1
l---------scripts/kali-last-snapshot1
l---------scripts/kali-rolling1
l---------scripts/karmic1
l---------scripts/kinetic1
l---------scripts/lenny1
l---------scripts/lucid1
l---------scripts/maverick1
l---------scripts/natty1
l---------scripts/oldoldstable1
l---------scripts/oldstable1
l---------scripts/oneiric1
-rw-r--r--scripts/potato106
l---------scripts/precise1
l---------scripts/quantal1
l---------scripts/raring1
-rw-r--r--scripts/sarge220
-rw-r--r--scripts/sarge.buildd166
-rw-r--r--scripts/sarge.fakechroot171
l---------scripts/saucy1
-rw-r--r--scripts/sid16
l---------scripts/squeeze1
l---------scripts/stable1
l---------scripts/stretch1
l---------scripts/testing1
l---------scripts/trixie1
l---------scripts/trusty1
l---------scripts/unstable1
l---------scripts/utopic1
l---------scripts/vivid1
-rw-r--r--scripts/warty166
-rw-r--r--scripts/warty.buildd159
l---------scripts/wheezy1
l---------scripts/wily1
-rw-r--r--scripts/woody205
-rw-r--r--scripts/woody.buildd168
l---------scripts/xenial1
l---------scripts/yakkety1
l---------scripts/zesty1
84 files changed, 6729 insertions, 0 deletions
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..8516803
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,18 @@
+# avoid dpkg-dev dependency; fish out the version with sed
+VERSION := $(shell sed 's/.*(\(.*\)).*/\1/; q' debian/changelog)
+
+all:
+
+clean:
+
+DSDIR=$(DESTDIR)/usr/share/debootstrap
+install:
+ mkdir -p $(DSDIR)/scripts
+ mkdir -p $(DESTDIR)/usr/sbin
+
+ cp -a scripts/* $(DSDIR)/scripts/
+ install -o root -g root -m 0644 functions $(DSDIR)/
+
+ sed 's/@VERSION@/$(VERSION)/g' debootstrap >$(DESTDIR)/usr/sbin/debootstrap
+ chown root:root $(DESTDIR)/usr/sbin/debootstrap
+ chmod 0755 $(DESTDIR)/usr/sbin/debootstrap
diff --git a/README b/README
new file mode 100644
index 0000000..430142c
--- /dev/null
+++ b/README
@@ -0,0 +1,66 @@
+README for debootstrap
+======================
+
+See the manpage for (some) documentation.
+
+Running debootstrap from source
+-------------------------------
+
+You can run debootstrap from its source tree without installing it. This
+can be useful if you want a quick way to make a Debian chroot on another
+system, or if you are testing modifications to debootstrap.
+
+First, get the source.
+
+* Either by using git
+ git clone https://salsa.debian.org/installer-team/debootstrap.git
+
+* Or by visiting <https://packages.debian.org/source/sid/debootstrap>
+ and downloading the tar.gz file
+
+Then in the debootstrap source directory:
+
+ export DEBOOTSTRAP_DIR=`pwd`
+ sudo ./debootstrap stable my-stable-dir
+
+If you are running a multi-stage boot strap (for example for a QEMU
+rootfs) you don't even need root:
+
+ export DEBOOTSTRAP_DIR=`pwd`
+ fakeroot ./debootstrap --foreign --arch=armhf testing my-testing-dir http://deb.debian.org/debian
+
+Of course you will need to execute the second stage as root to finish the bootstrap:
+
+ (on foreign hardware)
+ /debootstrap/debootstrap --second-stage
+
+
+Future
+------
+
+ * Cross-strap support - so you can bootstrap a filesystem to the
+ point where it will successfully boot, and finish installing itself
+ without having to be running the target architecture or OS yourself.
+ This means you should be able to run
+
+ debootstrap --arch powerpc sarge ./sarge-ppc-chroot ...
+
+ on an i386 system, boot a powerpc box with sarge-ppc-chroot as its
+ root files system, and have it "work". The cross-hurd package does
+ something similar, and should be replaced by this feature.
+
+ * There should be some (better) way of telling debootstrap what "base"
+ packages you want to install -- this varies between making a chroot,
+ doing an install, and doing a buildd. Also, some installs want
+ different base packages (to setup networking, or kernels, eg)
+
+
+NMUing
+------
+
+If there's a problem with debootstrap that you need fixed, feel free to do
+an NMU to fix it. Usual rules: try not to break anything, and mail the
+patch to the BTS. Don't worry about asking first though.
+
+However, note that debootstrap is now team maintained. Anyone in d-i can do
+a release without the bother of a NMU.
diff --git a/TODO b/TODO
new file mode 100644
index 0000000..3a86214
--- /dev/null
+++ b/TODO
@@ -0,0 +1,9 @@
+
+Features:
+ ++ second stage via chroot debootstrap/debootstrap
+ ++ debootstrap/deb file to record deb destinations/information
+
+ -- configuration file
+ -- versus command line
+ -- support for sources (vs mirrors)
+ -- faux-pinning for packages
diff --git a/debootstrap b/debootstrap
new file mode 100755
index 0000000..996c620
--- /dev/null
+++ b/debootstrap
@@ -0,0 +1,871 @@
+#!/bin/sh
+set -e
+
+VERSION='@VERSION@'
+
+unset TMP TEMP TMPDIR || true
+
+# might not be exported if we're running from init=/bin/sh or similar
+export PATH
+
+###########################################################################
+
+if [ -z "$DEBOOTSTRAP_DIR" ]; then
+ if [ -x /debootstrap/debootstrap ]; then
+ DEBOOTSTRAP_DIR=/debootstrap
+ else
+ DEBOOTSTRAP_DIR=/usr/share/debootstrap
+ fi
+fi
+
+. "$DEBOOTSTRAP_DIR/functions"
+exec 4>&1
+
+LANG=C
+EXTRA_SUITES=""
+USE_COMPONENTS=main
+KEYRING=""
+DISABLE_KEYRING=""
+FORCE_KEYRING=""
+VARIANT=""
+MERGED_USR=""
+ARCH=""
+HOST_ARCH=""
+HOST_OS=""
+KEEP_DEBOOTSTRAP_DIR=""
+USE_DEBIANINSTALLER_INTERACTION=""
+SECOND_STAGE_ONLY=""
+CHROOTDIR=""
+MAKE_TARBALL=""
+EXTRACTOR_OVERRIDE=""
+UNPACK_TARBALL=""
+ADDITIONAL=""
+EXCLUDE=""
+EXCLUDE_DEPENDENCY=""
+VERBOSE=""
+CERTIFICATE=""
+CHECKCERTIF=""
+PRIVATEKEY=""
+CACHE_DIR=""
+INRELEASE_PATH=""
+
+DEF_MIRROR="http://deb.debian.org/debian"
+DEF_HTTPS_MIRROR="https://deb.debian.org/debian"
+
+# set $CONTAINER
+detect_container
+
+export LANG USE_COMPONENTS
+umask 022
+
+###########################################################################
+
+## phases:
+## finddebs dldebs printdebs save_variables first_stage second_stage
+
+RESOLVE_DEPS=true
+
+WHAT_TO_DO="finddebs dldebs save_variables first_stage second_stage"
+am_doing_phase () {
+ # usage: if am_doing_phase finddebs; then ...; fi
+ local x;
+ for x in "$@"; do
+ if echo " $WHAT_TO_DO " | grep -q " $x "; then return 0; fi
+ done
+ return 1
+}
+
+###########################################################################
+
+usage_err()
+{
+ info USAGE1 "usage: [OPTION]... <suite> <target> [<mirror> [<script>]]"
+ info USAGE2 "Try \`${0##*/} --help' for more information."
+ error "$@"
+}
+
+usage()
+{
+ echo "Usage: ${0##*/} [OPTION]... <suite> <target> [<mirror> [<script>]]"
+ echo "Bootstrap a Debian base system into a target directory."
+ echo
+ cat <<EOF
+ --help display this help and exit
+ --version display version information and exit
+ --verbose don't turn off the output of wget
+
+ --download-only download packages, but don't perform installation
+ --print-debs print the packages to be installed, and exit
+
+ --arch=A set the architecture to install (use if no dpkg)
+ [ --arch=powerpc ]
+
+ --include=A,B,C adds specified names to the list of base packages
+ --exclude=A,B,C removes specified packages from the list
+ --extra-suites=A,B,C also use packages from the listed suites of the
+ archive
+ --components=A,B,C use packages from the listed components of the
+ archive
+ --variant=X use variant X of the bootstrap scripts
+ (currently supported variants: buildd, fakechroot,
+ minbase)
+ --merged-usr make /{bin,sbin,lib}/ symlinks to /usr/
+ (default for newer Debian suites)
+ --no-merged-usr do not make /{bin,sbin,lib}/ symlinks to /usr/
+ (default for older Debian suites)
+ --keyring=K check Release files against keyring K
+ --no-check-gpg avoid checking Release file signatures
+ --force-check-gpg force checking Release file signatures
+ (also disables automatic fallback to HTTPS in case
+ of a missing keyring), aborting otherwise
+ --no-resolve-deps don't try to resolve dependencies automatically
+ --log-extra-deps record extra dependency info in debootstrap.log
+ --cache-dir=DIR Use specified directory as package cache directory
+
+ --unpack-tarball=T acquire .debs from a tarball instead of http
+ --make-tarball=T download .debs and create a gzipped tarball
+ --second-stage-target=DIR
+ Run second stage in a subdirectory instead of root
+ (can be used to create a foreign chroot)
+ (requires --second-stage)
+ --extractor=TYPE override automatic .deb extractor selection
+ (supported: $EXTRACTORS_SUPPORTED)
+ --debian-installer used for internal purposes by debian-installer
+ --private-key=file read the private key from file
+ --certificate=file use the client certificate stored in file (PEM)
+ --no-check-certificate do not check certificate against certificate authorities
+
+ --inrelease-path determine the path to the InRelease file of the main
+ archive relative to the normal position of an InRelease
+ file
+EOF
+}
+
+###########################################################################
+
+if [ -z "$PKGDETAILS" ]; then
+ error 1 NO_PKGDETAILS "No pkgdetails available; either install perl, or build pkgdetails.c from the base-installer source package"
+fi
+
+###########################################################################
+
+if [ $# != 0 ] ; then
+ while true ; do
+ case "$1" in
+ --help)
+ usage
+ exit 0
+ ;;
+ --version)
+ echo "debootstrap $VERSION"
+ exit 0
+ ;;
+ --debian-installer)
+ if ! (echo -n "" >&3) 2>/dev/null; then
+ error 1 ARG_DIBYHAND "If running debootstrap by hand, don't use --debian-installer"
+ fi
+ USE_DEBIANINSTALLER_INTERACTION=yes
+ shift
+ ;;
+ --foreign)
+ check_conflicting_option "$1"
+ if [ -n "$LOOSEN_CONFLICTING_RESTRICTION" ]; then
+ WHAT_TO_DO="first_stage"
+ else
+ WHAT_TO_DO="finddebs dldebs save_variables first_stage"
+ fi
+ shift
+ ;;
+ --second-stage)
+ check_conflicting_option "$1"
+ WHAT_TO_DO="second_stage"
+ SECOND_STAGE_ONLY=true
+ shift
+ ;;
+ --second-stage-target|--second-stage-target=?*)
+ if [ "$SECOND_STAGE_ONLY" != "true" ] ; then
+ error 1 STAGE2ONLY "option %s only applies in the second stage" "$1"
+ fi
+ if [ "$1" = "--second-stage-target" ] && [ -n "$2" ] ; then
+ CHROOTDIR="$2"
+ shift 2
+ elif [ "$1" != "${1#--second-stage-target=}" ]; then
+ CHROOTDIR="${1#--second-stage-target=}"
+ shift
+ else
+ error 1 NEEDARG "option requires an argument: %s" "$1"
+ fi
+ ;;
+ --print-debs)
+ check_conflicting_option "$1"
+ WHAT_TO_DO="finddebs printdebs kill_target"
+ shift
+ ;;
+ --download-only)
+ check_conflicting_option "$1"
+ WHAT_TO_DO="finddebs dldebs"
+ shift
+ ;;
+ --make-tarball|--make-tarball=?*)
+ check_conflicting_option "$1"
+ WHAT_TO_DO="finddebs dldebs save_variables maketarball kill_target"
+ if [ "$1" = "--make-tarball" ] && [ -n "$2" ] ; then
+ MAKE_TARBALL="$2"
+ shift 2
+ elif [ "$1" != "${1#--make-tarball=}" ]; then
+ MAKE_TARBALL="${1#--make-tarball=}"
+ shift
+ else
+ error 1 NEEDARG "option requires an argument %s" "$1"
+ fi
+ ;;
+ --resolve-deps)
+ # redundant, but avoids breaking compatibility
+ RESOLVE_DEPS=true
+ shift
+ ;;
+ --no-resolve-deps)
+ RESOLVE_DEPS=false
+ shift
+ ;;
+ --log-extra-deps)
+ LOG_EXTRA_DEPS=true
+ shift
+ ;;
+ --keep-debootstrap-dir)
+ KEEP_DEBOOTSTRAP_DIR=true
+ shift
+ ;;
+ --arch|--arch=?*)
+ if [ "$1" = "--arch" ] && [ -n "$2" ] ; then
+ ARCH="$2"
+ shift 2
+ elif [ "$1" != "${1#--arch=}" ]; then
+ ARCH="${1#--arch=}"
+ shift
+ else
+ error 1 NEEDARG "option requires an argument %s" "$1"
+ fi
+ ;;
+ --extractor|--extractor=?*)
+ if [ "$1" = "--extractor" ] && [ -n "$2" ] ; then
+ EXTRACTOR_OVERRIDE="$2"
+ shift 2
+ elif [ "$1" != "${1#--extractor=}" ]; then
+ EXTRACTOR_OVERRIDE="${1#--extractor=}"
+ shift
+ else
+ error 1 NEEDARG "option requires an argument %s" "$1"
+ fi
+ if valid_extractor "$EXTRACTOR_OVERRIDE"; then
+ if ! in_path "$EXTRACTOR_OVERRIDE"; then
+ error 1 MISSINGEXTRACTOR "The selected extractor cannot be found: %s" "$EXTRACTOR_OVERRIDE"
+ fi
+ else
+ error 1 BADEXTRACTOR "%s: unknown extractor" "$EXTRACTOR_OVERRIDE"
+ fi
+ ;;
+ --unpack-tarball|--unpack-tarball=?*)
+ if [ "$1" = "--unpack-tarball" ] && [ -n "$2" ] ; then
+ check_conflicting_option "$1"
+ if [ -n "$LOOSEN_CONFLICTING_RESTRICTION" ]; then
+ WHAT_TO_DO="first_stage"
+ else
+ WHAT_TO_DO="first_stage second_stage"
+ fi
+ UNPACK_TARBALL="$2"
+ shift 2
+ elif [ "$1" != "${1#--unpack-tarball=}" ]; then
+ check_conflicting_option "$1"
+ if [ -n "$LOOSEN_CONFLICTING_RESTRICTION" ]; then
+ WHAT_TO_DO="first_stage"
+ else
+ WHAT_TO_DO="first_stage second_stage"
+ fi
+ UNPACK_TARBALL="${1#--unpack-tarball=}"
+ shift
+ else
+ error 1 NEEDARG "option requires an argument %s" "$1"
+ fi
+ if [ ! -f "$UNPACK_TARBALL" ] ; then
+ error 1 NOTARBALL "%s: No such file or directory" "$UNPACK_TARBALL"
+ fi
+ ;;
+ --include|--include=?*)
+ if [ "$1" = "--include" ] && [ -n "$2" ]; then
+ ADDITIONAL="$2"
+ shift 2
+ elif [ "$1" != "${1#--include=}" ]; then
+ ADDITIONAL="${1#--include=}"
+ shift 1
+ else
+ error 1 NEEDARG "option requires an argument %s" "$1"
+ fi
+ ADDITIONAL="$(echo "$ADDITIONAL" | tr , " ")"
+ ;;
+ --exclude|--exclude=?*)
+ if [ "$1" = "--exclude" ] && [ -n "$2" ]; then
+ EXCLUDE="$2"
+ shift 2
+ elif [ "$1" != "${1#--exclude=}" ]; then
+ EXCLUDE="${1#--exclude=}"
+ shift 1
+ else
+ error 1 NEEDARG "option requires an argument %s" "$1"
+ fi
+ EXCLUDE="$(echo "$EXCLUDE" | tr , " ")"
+ ;;
+ --verbose)
+ VERBOSE=true
+ export VERBOSE
+ shift 1
+ ;;
+ --extra-suites|--extra-suites=?*)
+ if [ "$1" = "--extra-suites" ] && [ -n "$2" ]; then
+ EXTRA_SUITES="$2"
+ shift 2
+ elif [ "$1" != "${1#--extra-suites=}" ]; then
+ EXTRA_SUITES="${1#--extra-suites=}"
+ shift 1
+ else
+ error 1 NEEDARG "option requires an argument %s" "$1"
+ fi
+ EXTRA_SUITES="$(echo "$EXTRA_SUITES" | tr , " ")"
+ ;;
+ --components|--components=?*)
+ if [ "$1" = "--components" ] && [ -n "$2" ]; then
+ USE_COMPONENTS="$2"
+ shift 2
+ elif [ "$1" != "${1#--components=}" ]; then
+ USE_COMPONENTS="${1#--components=}"
+ shift 1
+ else
+ error 1 NEEDARG "option requires an argument %s" "$1"
+ fi
+ USE_COMPONENTS="$(echo "$USE_COMPONENTS" | tr , "|")"
+ ;;
+ --variant|--variant=?*)
+ if [ "$1" = "--variant" ] && [ -n "$2" ]; then
+ VARIANT="$2"
+ shift 2
+ elif [ "$1" != "${1#--variant=}" ]; then
+ VARIANT="${1#--variant=}"
+ shift 1
+ else
+ error 1 NEEDARG "option requires an argument %s" "$1"
+ fi
+ ;;
+ --cache-dir|--cache-dir=?*)
+ # Okay, let's check user's option
+ if [ "$1" = "--cache-dir" ] && [ -n "$2" ] ; then
+ CACHE_DIR="$2"
+ shift 2
+ elif [ "$1" != "${1#--cache-dir=}" ]; then
+ CACHE_DIR="${1#--cache-dir=}"
+ shift
+ else
+ error 1 NEEDARG "option requires an argument %s" "$1"
+ fi
+ if [ ! -z "${CACHE_DIR##/*}" ]; then
+ error 1 NOTABSOLUTEPATH "cache directory should be specified with an absolute path"
+ fi
+ if [ ! -d "$CACHE_DIR" ] ; then
+ error 1 NOCACHEDIR "%s: No such directory" "$CACHE_DIR"
+ fi
+ ;;
+ --merged-usr)
+ MERGED_USR=yes
+ shift
+ ;;
+ --no-merged-usr)
+ MERGED_USR=no
+ shift
+ ;;
+ --keyring|--keyring=?*)
+ if ! gpgv --version >/dev/null 2>&1; then
+ error 1 NEEDGPGV "gpgv not installed, but required for Release verification"
+ fi
+ if [ "$1" = "--keyring" ] && [ -n "$2" ]; then
+ KEYRING="$2"
+ shift 2
+ elif [ "$1" != "${1#--keyring=}" ]; then
+ KEYRING="${1#--keyring=}"
+ shift 1
+ else
+ error 1 NEEDARG "option requires an argument %s" "$1"
+ fi
+ if [ ! -e "$KEYRING" ]; then
+ error 1 KEYRING "specified keyring file ($KEYRING) not found"
+ fi
+ ;;
+ --no-check-gpg)
+ shift 1
+ DISABLE_KEYRING=1
+ ;;
+ --force-check-gpg)
+ shift 1
+ FORCE_KEYRING=1
+ ;;
+ --certificate|--certificate=?*)
+ if [ "$1" = "--certificate" ] && [ -n "$2" ]; then
+ CERTIFICATE="--certificate=$2"
+ shift 2
+ elif [ "$1" != "${1#--certificate=}" ]; then
+ CERTIFICATE="--certificate=${1#--certificate=}"
+ shift 1
+ else
+ error 1 NEEDARG "option requires an argument %s" "$1"
+ fi
+ ;;
+ --private-key|--private-key=?*)
+ if [ "$1" = "--private-key" ] && [ -n "$2" ]; then
+ PRIVATEKEY="--private-key=$2"
+ shift 2
+ elif [ "$1" != "${1#--private-key=}" ]; then
+ PRIVATEKEY="--private-key=${1#--private-key=}"
+ shift 1
+ else
+ error 1 NEEDARG "option requires an argument %s" "$1"
+ fi
+ ;;
+ --no-check-certificate)
+ CHECKCERTIF="--no-check-certificate"
+ shift
+ ;;
+ --inrelease-path|--inrelease-path=?*)
+ if [ "$1" = "--inrelease-path" ] && [ -n "$2" ]; then
+ INRELEASE_PATH="$2"
+ shift 2
+ elif [ "$1" != "${1#--inrelease-path=}" ]; then
+ INRELEASE_PATH=${1#--inrelease-path=}
+ shift 1
+ else
+ error 1 NEEDARG "option requires an argument %s" "$1"
+ fi
+ ;;
+ -*)
+ error 1 BADARG "unrecognized or invalid option %s" "$1"
+ ;;
+ *)
+ break
+ ;;
+ esac
+ done
+fi
+
+###########################################################################
+# do auto proxy discovery
+AUTOPROXY=""
+if ! doing_variant fakechroot && command -v apt-config >/dev/null; then
+ eval "$(apt-config shell AUTOPROXY Acquire::http::Proxy-Auto-Detect)"
+ if [ -z "$AUTOPROXY" ]; then
+ eval "$(apt-config shell AUTOPROXY Acquire::http::ProxyAutoDetect)"
+ fi
+ if [ -z "$http_proxy" ] && [ -x "$AUTOPROXY" ]; then
+ http_proxy="$($AUTOPROXY)"
+ if [ -n "$http_proxy" ]; then
+ info AUTOPROXY "Using auto-detected proxy: $http_proxy"
+ export http_proxy
+ fi
+ fi
+fi
+
+###########################################################################
+if [ -n "$DISABLE_KEYRING" ] && [ -n "$FORCE_KEYRING" ]; then
+ error 1 BADARG "Both --no-check-gpg and --force-check-gpg specified, please pick one (at most)"
+fi
+
+###########################################################################
+
+if [ "$SECOND_STAGE_ONLY" = "true" ]; then
+ SUITE=$(cat "$DEBOOTSTRAP_DIR/suite")
+ if [ -e "$DEBOOTSTRAP_DIR/extra-suites" ]; then
+ EXTRA_SUITES=$(cat "$DEBOOTSTRAP_DIR/extra-suites")
+ fi
+ ARCH=$(cat "$DEBOOTSTRAP_DIR/arch")
+ USER_MIRROR=$(cat "$DEBOOTSTRAP_DIR/mirror")
+ if [ -e "$DEBOOTSTRAP_DIR/variant" ]; then
+ VARIANT=$(cat "$DEBOOTSTRAP_DIR/variant")
+ SUPPORTED_VARIANTS="$VARIANT"
+ fi
+ if [ -z "$CHROOTDIR" ]; then
+ TARGET=/
+ else
+ TARGET=$CHROOTDIR
+ fi
+ SCRIPT="$DEBOOTSTRAP_DIR/suite-script"
+else
+ if ! in_path wget; then
+ error 1 NEEDWGET "You must install wget to download packages."
+ fi
+ if [ -z "$1" ] || [ -z "$2" ]; then
+ usage_err 1 NEEDSUITETARGET "You must specify a suite and a target."
+ fi
+ SUITE="$1"
+ TARGET="$2"
+ USER_MIRROR="$3"
+ TARGET="${TARGET%/}"
+ if [ "${TARGET#/}" = "${TARGET}" ]; then
+ if [ "${TARGET%/*}" = "$TARGET" ] ; then
+ TARGET="$(pwd)/$TARGET"
+ else
+ TARGET="$(cd "${TARGET%/*}"; echo "$(pwd)/${TARGET##*/}")"
+ fi
+ fi
+
+ SCRIPT="$DEBOOTSTRAP_DIR/scripts/$1"
+ if [ -n "$VARIANT" ] && [ -e "${SCRIPT}.${VARIANT}" ]; then
+ SCRIPT="${SCRIPT}.${VARIANT}"
+ SUPPORTED_VARIANTS="$VARIANT"
+ fi
+ if [ "$4" != "" ]; then
+ if [ -e "$DEBOOTSTRAP_DIR/scripts/$4" ]; then
+ SCRIPT="$DEBOOTSTRAP_DIR/scripts/$4"
+ else
+ SCRIPT="$4"
+ fi
+ fi
+fi
+
+###########################################################################
+
+if am_doing_phase kill_target; then
+ # Require empty target when we are going to remove it afterwards
+ if [ -d "$TARGET" ] && [ -n "$(ls -A "$TARGET")" ] && \
+ [ "$KEEP_DEBOOTSTRAP_DIR" != "true" ]; then
+ error 1 BADTARGET "Target directory '$TARGET' is not empty and it would be wiped"
+ fi
+fi
+
+###########################################################################
+
+if in_path dpkg && \
+ dpkg --print-architecture >/dev/null 2>&1; then
+ HOST_ARCH=$(/usr/bin/dpkg --print-architecture)
+elif in_path udpkg && \
+ udpkg --print-architecture >/dev/null 2>&1; then
+ HOST_ARCH=$(/usr/bin/udpkg --print-architecture)
+elif [ -e "$DEBOOTSTRAP_DIR/arch" ]; then
+ HOST_ARCH=$(cat "$DEBOOTSTRAP_DIR/arch")
+fi
+HOST_OS="$HOST_ARCH"
+# basic host OS guessing for non-Debian systems
+if [ -z "$HOST_OS" ]; then
+ case $(uname) in
+ Linux)
+ HOST_OS=linux
+ ;;
+ GNU/kFreeBSD)
+ HOST_OS=kfreebsd
+ ;;
+ GNU)
+ HOST_OS=hurd
+ ;;
+ FreeBSD*)
+ HOST_OS=freebsd
+ ;;
+ esac
+fi
+
+if [ -z "$ARCH" ]; then
+ ARCH="$HOST_ARCH"
+fi
+
+if [ -z "$ARCH" ] || [ -z "$HOST_OS" ]; then
+ error 1 WHATARCH "Couldn't work out current architecture"
+
+fi
+
+if [ "$HOST_OS" = "kfreebsd" ] || [ "$HOST_OS" = "freebsd" ]; then
+ for module in linprocfs fdescfs tmpfs linsysfs; do
+ kldstat -m "$module" > /dev/null 2>&1 || warning SANITYCHECK "Probably required module %s is not loaded" "$module"
+ done
+fi
+
+if [ "$TARGET" = "/" ]; then
+ CHROOT_CMD=""
+else
+ CHROOT_CMD="chroot \"$TARGET\""
+fi
+
+# fakeroot cannot check /proc/1/environ
+if [ "$HOST_OS" = Linux ] && ! doing_variant fakechroot && [ "$CONTAINER" = "lxc-libvirt" ]; then
+ CHROOT_CMD="unshare --net $CHROOT_CMD"
+fi
+
+if [ -z "$SHA_SIZE" ]; then
+ SHA_SIZE=256
+fi
+if ! in_path "sha${SHA_SIZE}sum" && ! in_path "sha${SHA_SIZE}"; then
+ warning SHA_SIZE "Cannot find binary for checking sha%s checksums, falling back to sha1" "${SHA_SIZE}"
+ SHA_SIZE=1
+fi
+DEBOOTSTRAP_CHECKSUM_FIELD="SHA$SHA_SIZE"
+
+export ARCH SUITE EXTRA_SUITES TARGET CHROOT_CMD SHA_SIZE DEBOOTSTRAP_CHECKSUM_FIELD
+
+if am_doing_phase first_stage second_stage; then
+ if in_path id && [ "$(id -u)" -ne 0 ]; then
+ error 1 NEEDROOT "debootstrap can only run as root"
+ fi
+ # Ensure that we can create working devices and executables on the target.
+ if ! check_sane_mount "$TARGET"; then
+ error 1 NOEXEC "Cannot install into target '$TARGET' mounted with noexec or nodev"
+ fi
+fi
+
+if [ ! -e "$SCRIPT" ]; then
+ error 1 NOSCRIPT "No such script: %s" "$SCRIPT"
+fi
+
+###########################################################################
+
+if [ "$TARGET" != "" ]; then
+ mkdir -p "$TARGET/debootstrap"
+fi
+
+###########################################################################
+
+# Use of fd's by functions/scripts:
+#
+# stdin/stdout/stderr: used normally
+# fd 4: I:/W:/etc information
+# fd 5,6: spare for functions
+# fd 7,8: spare for scripts
+
+if [ "$USE_DEBIANINSTALLER_INTERACTION" = yes ]; then
+ # stdout=stderr: full log of debootstrap run
+ # fd 3: I:/W:/etc information
+ exec 4>&3
+elif am_doing_phase printdebs; then
+ # stderr: I:/W:/etc information
+ # stdout: debs needed
+ exec 4>&2
+else
+ # stderr: used in exceptional circumstances only
+ # stdout: I:/W:/etc information
+ # $TARGET/debootstrap/debootstrap.log: full log of debootstrap run
+ exec 4>&1
+ exec >>"$TARGET/debootstrap/debootstrap.log"
+ exec 2>&1
+fi
+
+###########################################################################
+
+if [ -x /usr/bin/arch-test ] && am_doing_phase second_stage; then
+ if doing_variant fakechroot; then
+ ret=0; arch-test "$ARCH" || ret=$?
+ # Avoid failure with old arch-test package
+ elif arch-test --version > /dev/null 2>&1; then
+ ret=0; arch-test -c "$TARGET" "$ARCH" || ret=$?
+ else
+ ret=3
+ fi
+
+ case $ret in
+ 0) info ARCHEXEC "Target architecture can be executed" ;;
+ 1) error 1 ARCHNOTEXEC "Unable to execute target architecture" ;;
+ *) info ARCHEXECUNKNOWN "Can't verify that target arch works" ;;
+ esac
+fi
+
+###########################################################################
+
+
+
+if [ "$UNPACK_TARBALL" ]; then
+ if [ "${UNPACK_TARBALL#/}" = "$UNPACK_TARBALL" ]; then
+ error 1 TARPATH "Tarball must be given an absolute path"
+ fi
+ if [ "${UNPACK_TARBALL%.tar}" != "$UNPACK_TARBALL" ]; then
+ (cd "$TARGET" && tar -xf "$UNPACK_TARBALL")
+ elif [ "${UNPACK_TARBALL%.tar.[g|x]z}" != "$UNPACK_TARBALL" ]; then
+ (cd "$TARGET" && tar -xf "$UNPACK_TARBALL")
+ elif [ "${UNPACK_TARBALL%.tgz}" != "$UNPACK_TARBALL" ]; then
+ (cd "$TARGET" && zcat "$UNPACK_TARBALL" | tar -xf -)
+ else
+ error 1 NOTTAR "Unknown tarball: must be .tar.[gz,xz], .tar or .tgz"
+ fi
+fi
+
+###########################################################################
+
+. "$SCRIPT"
+
+MIRRORS="$DEF_MIRROR"
+if [ "$USER_MIRROR" != "" ]; then
+ MIRRORS="${USER_MIRROR%/}"
+fi
+
+export MIRRORS
+
+ok=false
+for v in $SUPPORTED_VARIANTS; do
+ if doing_variant "$v"; then ok=true; fi
+done
+if ! "$ok"; then
+ error 1 UNSUPPVARIANT "unsupported variant"
+fi
+
+###########################################################################
+
+if am_doing_phase finddebs; then
+ if [ "$FINDDEBS_NEEDS_INDICES" = "true" ] || \
+ [ "$RESOLVE_DEPS" = "true" ]; then
+ download_indices
+ GOT_INDICES=true
+ fi
+
+ work_out_debs
+
+ base=$(without "$base $ADDITIONAL" "$EXCLUDE")
+ required=$(without "$required" "$EXCLUDE")
+
+ if [ "$RESOLVE_DEPS" = true ]; then
+ requiredX=$(echo "$required" | tr ' ' '\n' | sort | uniq)
+ baseX=$(echo "$base" | tr ' ' '\n' | sort | uniq)
+
+ info RESOLVEREQ "Resolving dependencies of required packages..."
+ required=$(resolve_deps "$requiredX")
+ info RESOLVEBASE "Resolving dependencies of base packages..."
+ base=$(resolve_deps "$baseX")
+ base=$(without "$base" "$required")
+
+ if [ "$LOG_EXTRA_DEPS" = true ]; then
+ baseN=$(without "$baseX" "$requiredX")
+ baseU=$(without "$baseX" "$baseN")
+
+ if [ "$baseU" != "" ]; then
+ info REDUNDANTBASE "Found packages in base already in required: %s" "$baseU"
+ fi
+
+ requiredX=$(without "$required" "$requiredX")
+ baseX=$(without "$base" "$baseX")
+ if [ "$requiredX" != "" ]; then
+ info NEWREQUIRED "Found additional required dependencies: %s" "$requiredX"
+ fi
+ if [ "$baseX" != "" ]; then
+ info NEWBASE "Found additional base dependencies: %s" "$baseX"
+ fi
+ fi
+ fi
+
+ all_debs="$required $base"
+fi
+
+if am_doing_phase printdebs; then
+ echo "$all_debs"
+fi
+
+if am_doing_phase dldebs; then
+ if [ "$GOT_INDICES" != "true" ]; then
+ download_indices
+ fi
+ download "$all_debs"
+fi
+
+if am_doing_phase save_variables; then
+ cp "$0" "$TARGET/debootstrap/debootstrap"
+ cp "$DEBOOTSTRAP_DIR/functions" "$TARGET/debootstrap/functions"
+ cp "$SCRIPT" "$TARGET/debootstrap/suite-script"
+ # pick up common setting scripts
+ cp "$DEBOOTSTRAP_DIR"/scripts/*-common "$TARGET/debootstrap/"
+ echo "$ARCH" >"$TARGET/debootstrap/arch"
+ echo "$SUITE" >"$TARGET/debootstrap/suite"
+ [ "" = "$EXTRA_SUITES" ] ||
+ echo "$EXTRA_SUITES" >"$TARGET/debootstrap/extra-suites"
+ [ "" = "$VARIANT" ] ||
+ echo "$VARIANT" >"$TARGET/debootstrap/variant"
+ echo "$required" >"$TARGET/debootstrap/required"
+ echo "$base" >"$TARGET/debootstrap/base"
+
+ chmod 755 "$TARGET/debootstrap/debootstrap"
+fi
+
+if am_doing_phase maketarball; then
+ (cd "$TARGET";
+ tar czf - var/lib/apt var/cache/apt debootstrap) >"$MAKE_TARBALL"
+fi
+
+if am_doing_phase first_stage; then
+ choose_extractor
+
+ if [ -n "$UNPACK_TARBALL" ]; then
+ required=$(cat "$TARGET/debootstrap/required")
+ base=$(cat "$TARGET/debootstrap/base")
+ all_debs="$required $base"
+ fi
+
+ # first stage sets up the chroot -- no calls should be made to
+ # "chroot $TARGET" here; but they should be possible by the time it's
+ # finished
+ first_stage_install
+
+ if ! am_doing_phase second_stage; then
+ cp "$0" "$TARGET/debootstrap/debootstrap"
+ cp "$DEBOOTSTRAP_DIR/functions" "$TARGET/debootstrap/functions"
+ cp "$SCRIPT" "$TARGET/debootstrap/suite-script"
+ # pick up common setting scripts
+ cp "$DEBOOTSTRAP_DIR"/scripts/*-common "$TARGET/debootstrap/"
+ echo "$ARCH" >"$TARGET/debootstrap/arch"
+ echo "$SUITE" >"$TARGET/debootstrap/suite"
+ [ "" = "$EXTRA_SUITES" ] ||
+ echo "$EXTRA_SUITES" >"$TARGET/debootstrap/extra-suites"
+ echo "$USER_MIRROR" >"$TARGET/debootstrap/mirror"
+ [ "" = "$VARIANT" ] ||
+ echo "$VARIANT" >"$TARGET/debootstrap/variant"
+ echo "$required" >"$TARGET/debootstrap/required"
+ echo "$base" >"$TARGET/debootstrap/base"
+
+ chmod 755 "$TARGET/debootstrap/debootstrap"
+ fi
+
+ # create sources.list
+ if [ "${MIRRORS#http*://}" != "$MIRRORS" ]; then
+ setup_apt_sources "${MIRRORS%% *}"
+ else
+ setup_apt_sources "$DEF_MIRROR"
+ fi
+fi
+
+if am_doing_phase second_stage; then
+ if [ "$SECOND_STAGE_ONLY" = true ]; then
+ required=$(cat "$DEBOOTSTRAP_DIR/required")
+ base=$(cat "$DEBOOTSTRAP_DIR/base")
+ all_debs="$required $base"
+ fi
+
+ # second stage uses the chroot to clean itself up -- has to be able to
+ # work from entirely within the chroot (in case we've booted into it,
+ # possibly over NFS eg)
+ second_stage_install
+
+ if [ -e "$TARGET/debootstrap/debootstrap.log" ]; then
+ if [ "$KEEP_DEBOOTSTRAP_DIR" = true ]; then
+ cp "$TARGET/debootstrap/debootstrap.log" "$TARGET/var/log/bootstrap.log"
+ else
+ # debootstrap.log is still open as stdout/stderr and needs
+ # to remain so, but after unlinking it some NFS servers
+ # implement this by a temporary file in the same directory,
+ # which makes it impossible to rmdir that directory.
+ # Moving it instead works around the problem.
+ mv "$TARGET/debootstrap/debootstrap.log" "$TARGET/var/log/bootstrap.log"
+ fi
+ fi
+ sync
+
+ if [ "$KEEP_DEBOOTSTRAP_DIR" = true ]; then
+ if [ -x "$TARGET/debootstrap/debootstrap" ]; then
+ chmod 644 "$TARGET/debootstrap/debootstrap"
+ fi
+ else
+ rm -rf "$TARGET/debootstrap"
+ fi
+fi
+
+if am_doing_phase kill_target; then
+ if [ "$KEEP_DEBOOTSTRAP_DIR" != true ]; then
+ info KILLTARGET "Deleting target directory"
+ rm -rf --one-file-system "$TARGET"
+ fi
+fi
diff --git a/debootstrap.8 b/debootstrap.8
new file mode 100644
index 0000000..3253144
--- /dev/null
+++ b/debootstrap.8
@@ -0,0 +1,206 @@
+.TH DEBOOTSTRAP 8 2001-04-27 "Debian Project" "Debian GNU/Linux manual"
+.SH NAME
+debootstrap \- Bootstrap a basic Debian system
+.SH SYNOPSIS
+.B debootstrap
+.RB [ OPTION\&.\&.\&. ]
+.I SUITE TARGET
+.RI [ MIRROR
+.RI [ SCRIPT ]]
+
+.B debootstrap
+.RB [ OPTION\&.\&.\&. ]
+\-\-second\-stage
+.SH DESCRIPTION
+.B debootstrap
+bootstraps a basic Debian system of
+.I SUITE
+into
+.I TARGET
+from
+.I MIRROR
+by running
+.IR SCRIPT .
+.I MIRROR
+can be an http:// or https:// URL, a file:/// URL, or an ssh:/// URL.
+.PP
+The
+.I SUITE
+may be a release code name (eg, sid, stretch, jessie)
+or a symbolic name (eg, unstable, testing, stable, oldstable)
+.PP
+Notice that file:/ URLs are translated to file:/// (correct scheme as
+described in RFC1738 for local filenames), and file:// will \fBnot\fR work.
+ssh://USER@HOST/PATH URLs are retrieved using
+.BR scp ;
+use of
+.B ssh\-agent
+or similar is strongly recommended.
+.PP
+\fBDebootstrap\fR can be used to install Debian in a system without using an
+installation disk but can also be used to run a different Debian flavor in a \fBchroot\fR
+environment.
+This way you can create a full (minimal) Debian installation which
+can be used for testing purposes (see the \fBEXAMPLES\fR section).
+If you are looking for a chroot system to build packages please take a look at
+\fBpbuilder\fR.
+.SH "OPTIONS"
+.PP
+.IP "\fB\-\-arch=ARCH\fP"
+Set the target architecture (use if dpkg isn't installed).
+See also \-\-foreign.
+.IP
+.IP "\fB\-\-include=alpha,beta\fP"
+Comma separated list of packages which will be added to download and extract
+lists.
+.IP
+.IP "\fB\-\-exclude=alpha,beta\fP"
+Comma separated list of packages which will be removed from download and
+extract lists.
+WARNING: you can and probably will exclude essential packages, be
+careful using this option.
+.IP
+.IP "\fB\-\-extra-suites=alpha,beta\fP"
+Also use packages from the listed suites of the archive.
+.IP
+.IP "\fB\-\-components=alpha,beta\fP"
+Use packages from the listed components of the archive.
+.IP
+.IP "\fB\-\-no\-resolve\-deps\fP"
+By default, debootstrap will attempt to automatically resolve any missing
+dependencies, warning if any are found.
+Note that this is not a complete dependency resolve in the sense of dpkg
+or apt, and that it is far better to specify the entire base system than
+rely on this option.
+With this option set, this behaviour is disabled.
+.IP
+.IP "\fB\-\-log\-extra\-deps\fP"
+If you want to record additional dependencies when resolving package dependencies,
+set this option to track them through debootstrap.log.
+.IP
+.IP "\fB\-\-variant=minbase|buildd|fakechroot\fP"
+Name of the bootstrap script variant to use.
+Currently, the variants supported are minbase, which only includes
+\fIrequired\fR packages and apt; buildd, which installs the build-essential
+packages and fakechroot, which installs the packages without root privileges.
+The default, with no \fB\-\-variant=X\fP argument, is to create a
+base Debian installation with all packages of priority \fIrequired\fR and
+\fIimportant\fR, including apt.
+.IP
+.IP "\fB\-\-merged-usr\fP"
+Create /{bin,sbin,lib}/ symlinks pointing to their counterparts in /usr/.
+(Default for most variants and suites.)
+.IP
+.IP "\fB\-\-no-merged-usr\fP"
+Do not create /{bin,sbin,lib}/ symlinks pointing to their counterparts in /usr/.
+(Default for the buildd variant of Debian 12 'bookworm' or older, and all
+variants of Debian 9 'stretch' or older.)
+.IP
+.IP "\fB\-\-keyring=KEYRING\fP"
+Override the default keyring for the distribution being bootstrapped,
+and use
+.IR KEYRING
+to check signatures of retrieved Release files.
+.IP
+.IP "\fB\-\-no-check-gpg\fP"
+Disables checking gpg signatures of retrieved Release files.
+.IP
+.IP "\fB\-\-force-check-gpg\fP"
+Forces checking Release file signatures, disabling automatic fallback to
+HTTPS in case of a missing keyring. Incompatible with the previous option.
+.IP
+.IP "\fB\-\-verbose\fP"
+Produce more info about downloading.
+.IP
+.IP "\fB\-\-print\-debs\fP"
+Print the packages to be installed, and exit.
+Note that an empty or non-existing TARGET directory must be specified so
+that debootstrap can download Packages files to determine which packages
+should be installed, and to resolve dependencies. The TARGET directory
+will be deleted unless \-\-keep\-debootstrap\-dir is specified.
+.IP
+.IP "\fB\-\-download\-only\fP"
+Download packages, but don't perform installation.
+.IP
+.IP "\fB\-\-foreign\fP"
+Do the initial unpack phase of bootstrapping only, for example if the
+target architecture does not match the host architecture.
+A copy of debootstrap sufficient for completing the bootstrap process
+will be installed as /debootstrap/debootstrap in the target filesystem.
+You can run it with the \fB\-\-second\-stage\fP option to complete the
+bootstrapping process.
+.IP
+.IP "\fB\-\-second\-stage\fP"
+Complete the bootstrapping process.
+Other arguments are generally not needed.
+.IP
+.IP "\fB\-\-second\-stage\-target=DIR\fP"
+Run second stage in a subdirectory instead of root. (can be used to create
+a foreign chroot) (requires \-\-second\-stage)
+.IP
+.IP "\fB\-\-keep\-debootstrap\-dir\fP"
+Don't delete the /debootstrap directory in the target after completing the
+installation.
+.IP
+.IP "\fB\-\-cache\-dir=DIR\fP"
+Cache .deb files under directory. It should be an absolute path.
+.IP
+.IP "\fB\-\-unpack\-tarball=FILE\fP"
+Acquire .debs from gzipped tarball FILE (specified with absolute path)
+instead of downloading via HTTP(S).
+.IP
+.IP "\fB\-\-make\-tarball=FILE\fP"
+Instead of bootstrapping, make a gzipped tarball (written to FILE) of the
+downloaded packages.
+The resulting tarball may be passed to a later
+.BR \-\-unpack\-tarball .
+Note that an empty or non-existing TARGET directory must be specified so
+that debootstrap can download packages to prepare the tarball. The TARGET
+directory will be deleted unless \-\-keep\-debootstrap\-dir is specified.
+.IP
+.IP "\fB\-\-debian\-installer\fP"
+Used for internal purposes by the debian-installer
+.IP
+.IP "\fB\-\-extractor=TYPE\fP"
+Override automatic .deb extractor selection to
+.IR TYPE .
+Supported extractors are: dpkg-deb and ar.
+.IP
+.IP "\fB\-\-no\-check\-certificate\fP"
+Do not check certificate against certificate authorities
+.IP
+.IP "\fB\-\-certificate=FILE\fP"
+Use the client certificate stored in file (PEM)
+.IP
+.IP "\fB\-\-private\-key=FILE\fP"
+Read the private key from file
+.IP
+.IP "\fB\-\-inrelease\-path\fP"
+Determine the path to the InRelease file of the suite relative to the
+normal position of an InRelease file
+.IP
+
+.SH EXAMPLES
+.
+.PP
+To setup a \fIstretch\fR system:
+.PP
+ debootstrap stretch ./stretch-chroot http://deb.debian.org/debian
+.PP
+ debootstrap stretch ./stretch-chroot file:///LOCAL_MIRROR/debian
+.PP
+Full process to create a complete Debian installation of \fIsid\fR (unstable)
+in a chroot:
+.PP
+ main # debootstrap sid sid-root http://deb.debian.org/debian/
+ [ ... watch it download the whole system ]
+ main # echo "proc sid-root/proc proc defaults 0 0" >> /etc/fstab
+ main # mount proc sid-root/proc -t proc
+ main # echo "sysfs sid-root/sys sysfs defaults 0 0" >> /etc/fstab
+ main # mount sysfs sid-root/sys -t sysfs
+ main # cp /etc/hosts sid-root/etc/hosts
+ main # chroot sid-root /bin/bash
+.SH AUTHOR
+.B debootstrap
+was written by Anthony Towns <ajt@debian.org>.
+This manpage was written by Matt Kraai <kraai@debian.org>.
diff --git a/functions b/functions
new file mode 100644
index 0000000..5a9c9de
--- /dev/null
+++ b/functions
@@ -0,0 +1,2043 @@
+############################################################### smallutils
+
+smallyes() {
+ YES="${1-y}"
+ while echo "$YES" 2>/dev/null ; do : ; done
+}
+
+in_path () {
+ local OLD_IFS="$IFS"
+ local dir
+ IFS=":"
+ for dir in $PATH; do
+ if [ -x "$dir/$1" ]; then
+ IFS="$OLD_IFS"
+ return 0
+ fi
+ done
+ IFS="$OLD_IFS"
+ return 1
+}
+
+############################################################### interaction
+
+error () {
+ # <error code> <name> <string> <args>
+ local err name fmt x
+ err="$1"
+ name="$2"
+ fmt="$3"
+ shift; shift; shift
+ if [ "$USE_DEBIANINSTALLER_INTERACTION" ]; then
+ (echo "E: $name"
+ for x in "$@"; do echo "EA: $x"; done
+ echo "EF: $fmt") >&4
+ else
+ (printf "E: $fmt\n" "$@") >&4
+ fi
+ exit "$err"
+}
+
+warning () {
+ # <name> <string> <args>
+ local name fmt x
+ name="$1"
+ fmt="$2"
+ shift; shift
+ if [ "$USE_DEBIANINSTALLER_INTERACTION" ]; then
+ (echo "W: $name"
+ for x in "$@"; do echo "WA: $x"; done
+ echo "WF: $fmt") >&4
+ else
+ printf "W: $fmt\n" "$@" >&4
+ fi
+}
+
+info () {
+ # <name> <string> <args>
+ local name fmt x
+ name="$1"
+ fmt="$2"
+ shift; shift
+ if [ "$USE_DEBIANINSTALLER_INTERACTION" ]; then
+ (echo "I: $name"
+ for x in "$@"; do echo "IA: $x"; done
+ echo "IF: $fmt") >&4
+ else
+ printf "I: $fmt\n" "$@" >&4
+ fi
+}
+
+PROGRESS_NOW=0
+PROGRESS_END=0
+PROGRESS_NEXT=""
+PROGRESS_WHAT=""
+
+progress_next () {
+ PROGRESS_NEXT="$1"
+}
+
+wgetprogress () {
+ [ ! "$VERBOSE" ] && NVSWITCH="-nv"
+ local ret=0
+ if [ "$USE_DEBIANINSTALLER_INTERACTION" ] && [ "$PROGRESS_NEXT" ]; then
+ # The exit status of a pipeline is that of the last command in
+ # the pipeline, so wget's exit status must be saved in the
+ # pipeline's first command. Since commands in a pipeline run in
+ # subshells, we have to print the exit status (on a file
+ # descriptor other than standard output, which is used by the
+ # pipeline itself) and then assign it to $ret outside of the
+ # pipeline. The "||" is necessary due to "set -e"; otherwise, a
+ # non-zero exit status would cause the echo command to be
+ # skipped. If wget succeeds, $ret will be "", so it then has to
+ # be set to a default value of 0.
+ ret=$({ { wget $@ 2>&1 >/dev/null || echo $? >&2; } | "$PKGDETAILS" "WGET%" "$PROGRESS_NOW" "$PROGRESS_NEXT" "$PROGRESS_END" >&3; } 2>&1)
+ : ${ret:=0}
+ else
+ wget ${NVSWITCH:+"$NVSWITCH"} "$@"
+ ret=$?
+ fi
+ return $ret
+}
+
+progress () {
+ # <now> <end> <name> <string> <args>
+ local now end name fmt x
+ now="$1"
+ end="$2"
+ name="$3"
+ fmt="$4"
+ shift; shift; shift; shift
+ if [ "$USE_DEBIANINSTALLER_INTERACTION" ]; then
+ PROGRESS_NOW="$now"
+ PROGRESS_END="$end"
+ PROGRESS_NEXT=""
+ (echo "P: $now $end $name"
+ for x in "$@"; do echo "PA: $x"; done
+ echo "PF: $fmt") >&3
+ fi
+}
+
+dpkg_progress () {
+ # <now> <end> <name> <desc> UNPACKING|CONFIGURING
+ local now end name desc action expect
+ now="$1"
+ end="$2"
+ name="$3"
+ desc="$4"
+ action="$5"
+ expect=""
+
+ if [ "$action" = UNPACKING ]; then
+ expect=half-installed
+ elif [ "$action" = CONFIGURING ]; then
+ expect=half-configured
+ fi
+
+ dp () {
+ now=$(($now + ${1:-1}))
+ }
+
+ exitcode=0
+ while read status pkg qstate; do
+ if [ "$status" = "EXITCODE" ]; then
+ exitcode="$pkg"
+ continue
+ fi
+ [ "$qstate" = "$expect" ] || continue
+ case $qstate in
+ half-installed)
+ dp; progress "$now" "$end" "$name" "$desc"
+ info "$action" "Unpacking %s..." "${pkg%:}"
+ expect="unpacked"
+ ;;
+ unpacked)
+ expect="half-installed"
+ ;;
+ half-configured)
+ dp; progress "$now" "$end" "$name" "$desc"
+ info "$action" "Configuring %s..." "${pkg%:}"
+ expect="installed"
+ ;;
+ installed)
+ expect="half-configured"
+ ;;
+ esac
+ done
+ return "$exitcode"
+}
+
+############################################################# set variables
+
+default_mirror () {
+ DEF_MIRROR="$1"
+}
+
+FINDDEBS_NEEDS_INDICES="false"
+finddebs_style () {
+ case "$1" in
+ hardcoded)
+ ;;
+ from-indices)
+ FINDDEBS_NEEDS_INDICES="true"
+ ;;
+ *)
+ error 1 BADFINDDEBS "unknown finddebs style"
+ ;;
+ esac
+}
+
+mk_download_dirs () {
+ if [ "$DLDEST" = "apt_dest" ]; then
+ mkdir -p "$TARGET/$APTSTATE/lists/partial"
+ mkdir -p "$TARGET/var/cache/apt/archives/partial"
+ fi
+}
+
+download_style () {
+ case "$1" in
+ apt)
+ if [ "$2" = "var-state" ]; then
+ APTSTATE="var/state/apt"
+ else
+ APTSTATE="var/lib/apt"
+ fi
+ DLDEST="apt_dest"
+ export APTSTATE DLDEST DEBFOR
+ ;;
+ *)
+ error 1 BADDLOAD "unknown download style"
+ ;;
+ esac
+}
+
+keyring () {
+ # avoid unnecessary warning with --second-stage
+ if [ -z "$KEYRING" ] && [ "$SECOND_STAGE_ONLY" != true ]; then
+ if [ -e "$1" ]; then
+ KEYRING="$1"
+ elif [ -z "$DISABLE_KEYRING" ]; then
+ if [ -n "$DEF_HTTPS_MIRROR" ] && [ -z "$USER_MIRROR" ] && [ -z "$FORCE_KEYRING" ]; then
+ info KEYRING "Keyring file not available at %s; switching to https mirror %s" "$1" "$DEF_HTTPS_MIRROR"
+ USER_MIRROR="$DEF_HTTPS_MIRROR"
+ else
+ warning KEYRING "Cannot check Release signature; keyring file not available %s" "$1"
+ if [ -n "$FORCE_KEYRING" ]; then
+ error 1 KEYRING "Keyring-based check was requested; aborting accordingly"
+ fi
+ fi
+ fi
+ fi
+}
+
+detect_container () {
+ if [ "$container" = lxc ]; then
+ CONTAINER="lxc"
+ elif grep -qs container=lxc-libvirt /proc/1/environ; then
+ CONTAINER="lxc-libvirt"
+ elif grep -qs ^systemd-nspawn$ /run/systemd/container || grep -qs systemd-nspawn /proc/1/environ || [ "$container" = "systemd-nspawn" ]; then
+ CONTAINER="systemd-nspawn"
+ elif grep -qs '[[:space:]]/docker/.*/sys/fs/cgroup' /proc/1/mountinfo || [ -e "/.dockerenv" ]; then
+ CONTAINER="docker"
+ else
+ CONTAINER=""
+ fi
+}
+
+########################################################## variant handling
+
+doing_variant () {
+ if [ "$1" = "$VARIANT" ]; then return 0; fi
+ if [ "$1" = "-" ] && [ "$VARIANT" = "" ]; then return 0; fi
+ return 1
+}
+
+SUPPORTED_VARIANTS="-"
+variants () {
+ local v
+ SUPPORTED_VARIANTS="$*"
+ for v in $*; do
+ if doing_variant "$v"; then return 0; fi
+ done
+ error 1 UNSUPPVARIANT "unsupported variant"
+}
+
+########################################################### option handling
+check_conflicting_option () {
+ if ( [ "$set_what_to_do" = --foreign ] && [ "${1%%=*}" = --unpack-tarball ] ) || \
+ ( [ "${set_what_to_do%%=*}" = "--unpack-tarball" ] && [ "$1" = --foreign ] ); then
+ LOOSEN_CONFLICTING_RESTRICTION="true"
+ elif [ -n "$set_what_to_do" ]; then
+ error 1 ARG_CONFLICTING "$set_what_to_do is specified with $1, please use only one of those options."
+ fi
+ set_what_to_do="$1"
+}
+
+################################################# work out names for things
+
+mirror_style () {
+ case "$1" in
+ release)
+ DOWNLOAD_INDICES="download_release_indices"
+ DOWNLOAD_DEBS="download_release"
+ ;;
+ main)
+ DOWNLOAD_INDICES="download_main_indices"
+ DOWNLOAD_DEBS="download_main"
+ ;;
+ *)
+ error 1 BADMIRROR "unknown mirror style"
+ ;;
+ esac
+ export DOWNLOAD_INDICES
+ export DOWNLOAD_DEBS
+}
+
+force_md5 () {
+ DEBOOTSTRAP_CHECKSUM_FIELD=MD5SUM
+ export DEBOOTSTRAP_CHECKSUM_FIELD
+}
+
+verify_checksum () {
+ # args: dest checksum size
+ local expchecksum="$2"
+ local expsize="$3"
+ if [ "$DEBOOTSTRAP_CHECKSUM_FIELD" = "MD5SUM" ]; then
+ if in_path md5sum; then
+ relchecksum=$(md5sum < "$1" | sed 's/ .*$//')
+ elif in_path md5; then
+ relchecksum=$(md5 < "$1")
+ else
+ error 1 SIGCHECK "Cannot check md5sum"
+ fi
+ else
+ if in_path "sha${SHA_SIZE}sum"; then
+ relchecksum="$(sha${SHA_SIZE}sum < "$1" | sed 's/ .*$//')"
+ elif in_path "sha${SHA_SIZE}"; then
+ relchecksum="$(sha${SHA_SIZE} < "$1")"
+ else
+ error 1 SIGCHECK "Cannot check sha${SHA_SIZE}sum"
+ fi
+ fi
+ relsize="$(wc -c < "$1")"
+ if [ "$expsize" -ne "$relsize" ] || [ "$expchecksum" != "$relchecksum" ]; then
+ return 1
+ fi
+ return 0
+}
+
+get () {
+ # args: from dest 'nocache'
+ # args: from dest [checksum size] [alt {checksum size type}]
+ # args: from dest 'byhash' [checksum size] [alt {checksum size type}]
+ local displayname
+ local versionname
+ local from_base
+ local dest_base
+ local nocache=""
+ local byhash=""
+ local a
+ from_base="$1"; shift
+ dest_base="$1"; shift
+ if [ "$1" = "nocache" ]; then
+ nocache="true"; shift
+ elif [ "$1" = "byhash" ]; then
+ byhash="true"; shift
+ fi
+ if [ "${dest_base%.deb}" != "$dest_base" ]; then
+ displayname="$(echo "$dest_base" | sed 's,^.*/,,;s,_.*$,,')"
+ versionname="$(echo "$dest_base" | sed 's,^.*/,,' | cut -d_ -f2 | sed 's/%3a/:/')"
+ else
+ displayname="$(echo "$from_base" | sed 's,^.*/,,')"
+ fi
+
+ if [ -e "$dest_base" ]; then
+ if [ -z "$1" ]; then
+ return 0
+ elif [ -n "$nocache" ]; then
+ rm -f "$dest_base"
+ else
+ info VALIDATING "Validating %s %s" "$displayname" "$versionname"
+ if verify_checksum "$dest_base" "$1" "$2"; then
+ return 0
+ else
+ rm -f "$dest_base"
+ fi
+ fi
+ fi
+
+ if [ "$#" -gt 3 ]; then
+ local st=1
+ if [ "$3" = "-" ]; then st=4; fi
+ local order="$(a=$st; while [ "$a" -le $# ]; do eval echo \"\${$(($a+1))}\" $a;
+ a=$(($a + 3)); done | sort -n | sed 's/.* //')"
+ else
+ local order=1
+ fi
+ for a in $order; do
+ local checksum siz typ from dest iters
+ checksum="$(eval echo \${$a})"
+ siz="$(eval echo \${$(( $a+1 ))})"
+ typ="$(eval echo \${$(( $a+2 ))})"
+ iters="0"
+
+ case "$typ" in
+ xz) from="$from_base.xz"; dest="$dest_base.xz" ;;
+ bz2) from="$from_base.bz2"; dest="$dest_base.bz2" ;;
+ gz) from="$from_base.gz"; dest="$dest_base.gz" ;;
+ *) from="$from_base"; dest="$dest_base" ;;
+ esac
+
+ if [ ! -z "$CACHE_DIR" ]; then
+ dest="${dest%%*/}"
+ elif [ "${dest#/}" = "$dest" ]; then
+ dest="./$dest"
+ fi
+ local dest2="$dest"
+ if [ -d "${dest2%/*}/partial" ]; then
+ dest2="${dest2%/*}/partial/${dest2##*/}"
+ fi
+
+ while [ "$iters" -lt 10 ]; do
+ local from2=""
+ info RETRIEVING "Retrieving %s %s" "$displayname" "$versionname"
+ if [ "$checksum" != "" ] && [ "$byhash" != "" ]; then
+ # assume we don't mix acquire-by-hash and md5
+ from2="$(dirname "$from")/by-hash/SHA${SHA_SIZE}/$checksum"
+ fi
+ if [ ! -e "$dest2" ]; then
+ if [ -z "$from2" ] || ! just_get "$from2" "$dest2"; then
+ if ! just_get "$from" "$dest2"; then continue 2; fi
+ fi
+ fi
+ if [ "$checksum" != "" ]; then
+ info VALIDATING "Validating %s %s" "$displayname" "$versionname"
+ if verify_checksum "$dest2" "$checksum" "$siz"; then
+ checksum=""
+ fi
+ fi
+ if [ -z "$checksum" ]; then
+ [ "$dest2" = "$dest" ] || mv "$dest2" "$dest"
+ case "$typ" in
+ gz) gunzip "$dest" ;;
+ bz2) bunzip2 "$dest" ;;
+ xz) unxz "$dest" ;;
+ esac
+ return 0
+ else
+ rm -f "$dest2"
+ warning RETRYING "Retrying failed download of %s" "$from"
+ iters=$(($iters + 1))
+ fi
+ done
+ warning CORRUPTFILE "%s was corrupt" "$from"
+ done
+ return 1
+}
+
+just_get () {
+ # args: from dest
+ local from="$1"
+ local dest="$2"
+ mkdir -p "${dest%/*}"
+ if [ "${from#null:}" != "$from" ]; then
+ error 1 NOTPREDL "%s was not pre-downloaded" "${from#null:}"
+ elif [ "${from#http://}" != "$from" ] || [ "${from#https://}" != "$from" ] || [ "${from#ftp://}" != "$from" ]; then
+ # http/https/ftp mirror
+ if wgetprogress ${CHECKCERTIF:+"$CHECKCERTIF"} ${CERTIFICATE:+"$CERTIFICATE"} ${PRIVATEKEY:+"$PRIVATEKEY"} -O "$dest" "$from"; then
+ return 0
+ else
+ rm -f "$dest"
+ return 1
+ fi
+ elif [ "${from#file:}" != "$from" ]; then
+ local base="${from#file:}"
+ if [ "${base#//}" != "$base" ]; then
+ base="/${from#file://*/}"
+ fi
+ if [ -e "$base" ]; then
+ cp "$base" "$dest"
+ return 0
+ else
+ return 1
+ fi
+ elif [ "${from#ssh:}" != "$from" ]; then
+ local ssh_dest="$(echo "$from" | sed -e 's#ssh://##' -e 's#/#:/#')"
+ if [ -n "$ssh_dest" ]; then
+ scp "$ssh_dest" "$dest"
+ return 0
+ else
+ return 1
+ fi
+ else
+ error 1 UNKNOWNLOC "unknown location %s" "$from"
+ fi
+}
+
+download () {
+ mk_download_dirs
+ "$DOWNLOAD_DEBS" "$(echo "$@" | tr ' ' '\n' | sort)"
+}
+
+download_indices () {
+ mk_download_dirs
+ "$DOWNLOAD_INDICES" "$(echo "$@" | tr ' ' '\n' | sort)"
+}
+
+debfor () {
+ (while read pkg path; do
+ for p in "$@"; do
+ [ "$p" = "$pkg" ] || continue;
+ echo "$path"
+ done
+ done <"$TARGET/debootstrap/debpaths"
+ )
+}
+
+apt_dest () {
+ # args:
+ # deb package version arch mirror path
+ # pkg suite component arch mirror path
+ # rel suite mirror path
+ case "$1" in
+ deb)
+ echo "/var/cache/apt/archives/${2}_${3}_${4}.deb" | sed 's/:/%3a/'
+ ;;
+ pkg)
+ local m="$5"
+ printf "%s" "$APTSTATE/lists/"
+ echo "${m}_$6" | sed -e 's,^[^:]\+://,,' -e 's/\//_/g'
+ ;;
+ rel)
+ local m="$3"
+ printf "%s" "$APTSTATE/lists/"
+ echo "${m}_$4" | sed -e 's,^[^:]\+://,,' -e 's/\//_/g'
+ ;;
+ esac
+}
+
+################################################################## download
+
+get_release_checksum () {
+ local reldest path
+ reldest="$1"
+ path="$2"
+ if [ "$DEBOOTSTRAP_CHECKSUM_FIELD" = MD5SUM ]; then
+ local match="^[Mm][Dd]5[Ss][Uu][Mm]"
+ else
+ local match="^[Ss][Hh][Aa]$SHA_SIZE:"
+ fi
+ sed -n "/$match/,/^[^ ]/p" < "$reldest" | \
+ while read a b c; do
+ if [ "$c" = "$path" ]; then echo "$a $b"; fi
+ done | head -n 1
+}
+
+extract_release_components () {
+ local c
+ local reldest="$1"; shift
+ TMPCOMPONENTS="$(sed -n 's/Components: *//p' "$reldest")"
+ for c in $TMPCOMPONENTS ; do
+ case " $COMPONENTS " in
+ *" $c "*) continue ;;
+ esac;
+
+ eval "
+ case \"\$c\" in
+ $USE_COMPONENTS)
+ COMPONENTS=\"\$COMPONENTS \$c\"
+ ;;
+ esac
+ "
+ done
+
+ if [ -z "$COMPONENTS" ]; then
+ mv "$reldest" "$reldest.malformed"
+ error 1 INVALIDREL "Invalid Release file, no valid components"
+ fi
+}
+
+CODENAME=""
+validate_suite () {
+ local reldest suite s
+ reldest="$1"
+
+ CODENAME=$(sed -n "s/^Codename: *//p" "$reldest")
+ suite=$(sed -n "s/^Suite: *//p" "$reldest")
+
+ for s in $SUITE $EXTRA_SUITES; do
+ if [ "$s" = "$suite" ] || [ "$s" = "$CODENAME" ]; then
+ return 0
+ fi
+ done
+ if [ "$EXTRA_SUITES" = "" ]; then
+ error 1 WRONGSUITE "Asked to install suite %s, but got %s (codename: %s) from mirror" "$SUITE" "$suite" "$CODENAME"
+ else
+ error 1 WRONGSUITE "Asked to install suites %s %s, but got %s (codename: %s) from mirror" "$SUITE" "$EXTRA_SUITES" "$suite" "$CODENAME"
+ fi
+}
+
+split_inline_sig () {
+ local inreldest reldest relsigdest
+ inreldest="$1"
+ reldest="$2"
+ relsigdest="$3"
+
+ # Note: InRelease files are fun since one needs to remove the
+ # last newline from the PGP SIGNED MESSAGE part, while keeping
+ # the PGP SIGNATURE part intact. This shell implementation
+ # should work on most if not all systems, instead of trying to
+ # sed/tr/head, etc.
+ rm -f "$reldest" "$relsigdest"
+ nl=""
+ state="pre-begin"
+ while IFS= read -r line; do
+ case "${state}" in
+ pre-begin)
+ if [ "x${line}" = "x-----BEGIN PGP SIGNED MESSAGE-----" ]; then
+ state="begin"
+ fi
+ ;;
+ begin)
+ if [ "x${line}" = "x" ]; then
+ state="data"
+ fi
+ ;;
+ data)
+ if [ "x${line}" = "x-----BEGIN PGP SIGNATURE-----" ]; then
+ printf "%s\n" "${line}" > "$relsigdest"
+ state="signature"
+ else
+ printf "${nl}%s" "${line}" >> "$reldest"
+ nl="\n"
+ fi
+ ;;
+ signature)
+ printf "%s\n" "${line}" >> "$relsigdest"
+ if [ "x${line}" = "x-----END PGP SIGNATURE-----" ]; then
+ break
+ fi
+ esac
+ done < "$inreldest"
+}
+
+download_release_sig () {
+ local m1 suite inreldest reldest relsigdest
+ m1="$1"
+ suite="$2"
+ inreldest="$3"
+ reldest="$4"
+ relsigdest="$5"
+
+ progress 0 100 DOWNREL "Downloading Release file"
+ progress_next 100
+ if [ -n "$INRELEASE_PATH" ]; then
+ get "$m1/dists/$suite/$INRELEASE_PATH" "$inreldest" nocache ||
+ error 1 NOGETREL "Failed getting release file %s" \
+ "$m1/dists/$suite/$INRELEASE_PATH"
+ split_inline_sig "$inreldest" "$reldest" "$relsigdest"
+ progress 100 100 DOWNREL "Downloading Release file"
+ elif get "$m1/dists/$suite/InRelease" "$inreldest" nocache; then
+ split_inline_sig "$inreldest" "$reldest" "$relsigdest"
+ progress 100 100 DOWNREL "Downloading Release file"
+ else
+ get "$m1/dists/$suite/Release" "$reldest" nocache ||
+ error 1 NOGETREL "Failed getting release file %s" "$m1/dists/$suite/Release"
+ progress 100 100 DOWNREL "Downloading Release file"
+ fi
+ if [ -n "$KEYRING" ] && [ -z "$DISABLE_KEYRING" ]; then
+ progress 0 100 DOWNRELSIG "Downloading Release file signature"
+ if ! [ -f "$relsigdest" ]; then
+ progress_next 50
+ get "$m1/dists/$suite/Release.gpg" "$relsigdest" nocache ||
+ error 1 NOGETRELSIG "Failed getting release signature file %s" \
+ "$m1/dists/$suite/Release.gpg"
+ progress 50 100 DOWNRELSIG "Downloading Release file signature"
+ fi
+
+ info RELEASESIG "Checking Release signature"
+ # Don't worry about the exit status from gpgv; parsing the output will
+ # take care of that.
+ (gpgv --status-fd 1 --keyring "$KEYRING" --ignore-time-conflict \
+ "$relsigdest" "$reldest" || true) | read_gpg_status
+ progress 100 100 DOWNRELSIG "Downloading Release file signature"
+ fi
+}
+
+download_release_indices () {
+ local m1 inreldest reldest relsigdest totalpkgs \
+ subpath xzi bz2i gzi normi i ext \
+ donepkgs pkgdest acquirebyhash s c m
+ m1="${MIRRORS%% *}"
+ for s in $SUITE $EXTRA_SUITES; do
+ inreldest="$TARGET/$($DLDEST rel "$s" "$m1" "dists/$s/InRelease")"
+ reldest="$TARGET/$($DLDEST rel "$s" "$m1" "dists/$s/Release")"
+ relsigdest="$TARGET/$($DLDEST rel "$s" "$m1" "dists/$s/Release.gpg")"
+
+ download_release_sig "$m1" "$s" "$inreldest" "$reldest" "$relsigdest"
+
+ validate_suite "$reldest"
+
+ extract_release_components "$reldest"
+
+ acquirebyhash=$(grep "^Acquire-By-Hash: yes$" "$reldest" || true)
+ totalpkgs=0
+ for c in $COMPONENTS; do
+ subpath="$c/binary-$ARCH/Packages"
+ xzi="$(get_release_checksum "$reldest" "$subpath.xz")"
+ bz2i="$(get_release_checksum "$reldest" "$subpath.bz2")"
+ gzi="$(get_release_checksum "$reldest" "$subpath.gz")"
+ normi="$(get_release_checksum "$reldest" "$subpath")"
+ if [ "$normi" != "" ]; then
+ i="$normi"
+ elif in_path bunzip2 && [ "$bz2i" != "" ]; then
+ i="$bz2i"
+ elif in_path unxz && [ "$xzi" != "" ]; then
+ i="$xzi"
+ elif in_path gunzip && [ "$gzi" != "" ]; then
+ i="$gzi"
+ fi
+ if [ "$i" != "" ]; then
+ totalpkgs=$(( $totalpkgs + ${i#* } ))
+ else
+ mv "$reldest" "$reldest.malformed"
+ error 1 MISSINGRELENTRY "Invalid Release file, no entry for %s" "$subpath"
+ fi
+ done
+
+ donepkgs=0
+ progress 0 $totalpkgs DOWNPKGS "Downloading Packages files"
+ for c in $COMPONENTS; do
+ subpath="$c/binary-$ARCH/Packages"
+ path="dists/$s/$subpath"
+ xzi="$(get_release_checksum "$reldest" "$subpath.xz")"
+ bz2i="$(get_release_checksum "$reldest" "$subpath.bz2")"
+ gzi="$(get_release_checksum "$reldest" "$subpath.gz")"
+ normi="$(get_release_checksum "$reldest" "$subpath")"
+ ext=""
+ if [ "$acquirebyhash" != "" ]; then
+ ext="$ext byhash"
+ fi
+ if [ "$normi" != "" ]; then
+ ext="$ext $normi ."
+ i="$normi"
+ fi
+ if in_path unxz && [ "$xzi" != "" ]; then
+ ext="$ext $xzi xz"
+ i="${i:-$xzi}"
+ fi
+ if in_path bunzip2 && [ "$bz2i" != "" ]; then
+ ext="$ext $bz2i bz2"
+ i="${i:-$bz2i}"
+ fi
+ if in_path gunzip && [ "$gzi" != "" ]; then
+ ext="$ext $gzi gz"
+ i="${i:-$gzi}"
+ fi
+ progress_next $(($donepkgs + ${i#* }))
+ for m in $MIRRORS; do
+ pkgdest="$TARGET/$($DLDEST pkg "$s" "$c" "$ARCH" "$m" "$path")"
+ if get "$m/$path" "$pkgdest" $ext; then break; fi
+ done
+ if [ ! -f "$pkgdest" ]; then
+ error 1 COULDNTDL "Couldn't download %s" "$m/$path"
+ fi
+ donepkgs=$(($donepkgs + ${i#* }))
+ progress $donepkgs $totalpkgs DOWNPKGS "Downloading Packages files"
+ done
+ done
+}
+
+get_package_sizes () {
+ # mirror pkgdest debs..
+ local m pkgdest
+ m="$1"; shift
+ pkgdest="$1"; shift
+ $PKGDETAILS PKGS "$m" "$pkgdest" "$@" | (
+ newleft=""
+ totaldebs=0
+ countdebs=0
+ while read p details; do
+ if [ "$details" = "-" ]; then
+ newleft="$newleft $p"
+ else
+ size="${details##* }";
+ totaldebs=$(($totaldebs + $size))
+ countdebs=$(($countdebs + 1))
+ fi
+ done
+ echo "$countdebs $totaldebs$newleft"
+ )
+}
+
+# note, leftovers come back on fd5 !!
+download_debs () {
+ local m pkgdest debdest debcache
+ m="$1"
+ pkgdest="$2"
+ shift; shift
+
+ "$PKGDETAILS" PKGS "$m" "$pkgdest" "$@" | (
+ leftover=""
+ while read p ver arc mdup fil checksum size; do
+ if [ "$ver" = "-" ]; then
+ leftover="$leftover $p"
+ else
+ progress_next $(($dloaddebs + $size))
+ debdest="$($DLDEST deb "$p" "$ver" "$arc" "$m" "$fil")"
+ debcache="$(echo "$p"_"$ver"_"$arc".deb | sed 's/:/%3a/')"
+ if [ -z "$CACHE_DIR" ] && get "$m/$fil" "$TARGET/$debdest" "$checksum" "$size"; then
+ dloaddebs=$(($dloaddebs + $size))
+ echo >>"$TARGET/debootstrap/deburis" "$p $ver $m/$fil"
+ echo >>"$TARGET/debootstrap/debpaths" "$p $debdest"
+ elif [ -d "$CACHE_DIR" ] && get "$m/$fil" "$CACHE_DIR/$debcache" "$checksum" "$size"; then
+ dloaddebs=$(($dloaddebs + $size))
+ echo >>"$TARGET/debootstrap/deburis" "$p $ver $m/$fil"
+ echo >>"$TARGET/debootstrap/debpaths" "$p $debdest"
+ cp "$CACHE_DIR/$debcache" "$TARGET/$debdest"
+ else
+ warning COULDNTDL "Couldn't download package %s (ver %s arch %s) at %s" "$p" "$ver" "$arc" "$m/$fil"
+ leftover="$leftover $p"
+ fi
+ fi
+ done
+ echo >&5 ${leftover# }
+ )
+}
+
+download_release () {
+ local m1 numdebs countdebs totaldebs leftoverdebs path pkgdest \
+ dloaddebs s c m
+ m1="${MIRRORS%% *}"
+
+ numdebs="$#"
+
+ countdebs=0
+ progress "$countdebs" "$numdebs" SIZEDEBS "Finding package sizes"
+
+ totaldebs=0
+ leftoverdebs="$*"
+
+ # Fix possible duplicate package names, which would screw up counts:
+ leftoverdebs=$(printf "$leftoverdebs"|tr ' ' '\n'|sort -u|tr '\n' ' ')
+ numdebs=$(printf "$leftoverdebs"|wc -w)
+
+ for s in $SUITE $EXTRA_SUITES; do
+ for c in $COMPONENTS; do
+ if [ "$countdebs" -ge "$numdebs" ]; then break; fi
+
+ path="dists/$s/$c/binary-$ARCH/Packages"
+ pkgdest="$TARGET/$($DLDEST pkg "$s" "$c" "$ARCH" "$m1" "$path")"
+ if [ ! -e "$pkgdest" ]; then continue; fi
+
+ info CHECKINGSIZES "Checking component %s on %s..." "$c" "$m1"
+
+ leftoverdebs="$(get_package_sizes "$m1" "$pkgdest" $leftoverdebs)"
+
+ countdebs=$(($countdebs + ${leftoverdebs%% *}))
+ leftoverdebs=${leftoverdebs#* }
+
+ totaldebs=${leftoverdebs%% *}
+ leftoverdebs=${leftoverdebs#* }
+
+ progress "$countdebs" "$numdebs" SIZEDEBS "Finding package sizes"
+ done
+ done
+
+ if [ "$countdebs" -ne "$numdebs" ]; then
+ error 1 LEFTOVERDEBS "Couldn't find these debs: %s" "$leftoverdebs"
+ fi
+
+ dloaddebs=0
+
+ progress "$dloaddebs" "$totaldebs" DOWNDEBS "Downloading packages"
+ :>"$TARGET/debootstrap/debpaths"
+
+ pkgs_to_get="$*"
+ for s in $SUITE $EXTRA_SUITES; do
+ for c in $COMPONENTS; do
+ path="dists/$s/$c/binary-$ARCH/Packages"
+ for m in $MIRRORS; do
+ pkgdest="$TARGET/$($DLDEST pkg "$s" "$c" "$ARCH" "$m" "$path")"
+ if [ ! -e "$pkgdest" ]; then continue; fi
+ pkgs_to_get="$(download_debs "$m" "$pkgdest" $pkgs_to_get 5>&1 1>&6)"
+ if [ -z "$pkgs_to_get" ]; then break; fi
+ done 6>&1
+ if [ -z "$pkgs_to_get" ]; then break; fi
+ done
+ if [ -z "$pkgs_to_get" ]; then break; fi
+ done
+ progress "$dloaddebs" "$totaldebs" DOWNDEBS "Downloading packages"
+ if [ "$pkgs_to_get" != "" ]; then
+ error 1 COULDNTDLPKGS "Couldn't download packages: %s" "$pkgs_to_get"
+ fi
+}
+
+download_main_indices () {
+ local m1 comp path pkgdest m s c
+ m1="${MIRRORS%% *}"
+ comp="${USE_COMPONENTS}"
+ progress 0 100 DOWNMAINPKGS "Downloading Packages file"
+ progress_next 100
+
+ if [ -z "$comp" ]; then comp=main; fi
+ COMPONENTS="$(echo $comp | tr '|' ' ')"
+
+ export COMPONENTS
+ for m in $MIRRORS; do
+ for s in $SUITE $EXTRA_SUITES; do
+ for c in $COMPONENTS; do
+ path="dists/$s/$c/binary-$ARCH/Packages"
+ pkgdest="$TARGET/$($DLDEST pkg "$s" "$c" "$ARCH" "$m" "$path")"
+ if in_path gunzip && get "$m/${path}.gz" "${pkgdest}.gz"; then
+ rm -f "$pkgdest"
+ gunzip "$pkgdest.gz"
+ elif get "$m/$path" "$pkgdest"; then
+ true
+ fi
+ done
+ done
+ done
+ progress 100 100 DOWNMAINPKGS "Downloading Packages file"
+}
+
+download_main () {
+ local m1 path pkgdest debdest p s c m
+ m1="${MIRRORS%% *}"
+
+ :>"$TARGET/debootstrap/debpaths"
+ for p in "$@"; do
+ for s in $SUITE $EXTRA_SUITES; do
+ for c in $COMPONENTS; do
+ local details=""
+ for m in $MIRRORS; do
+ path="dists/$s/$c/binary-$ARCH/Packages"
+ pkgdest="$TARGET/$($DLDEST pkg "$s" "$c" "$ARCH" "$m" "$path")"
+ if [ ! -e "$pkgdest" ]; then continue; fi
+ details="$($PKGDETAILS PKGS "$m" "$pkgdest" "$p")"
+ if [ "$details" = "$p -" ]; then
+ details=""
+ continue
+ fi
+ size="${details##* }"; details="${details% *}"
+ checksum="${details##* }"; details="${details% *}"
+ debdest="$($DLDEST deb $details)"
+ if get "$m/${details##* }" "$TARGET/$debdest" "$checksum" "$size"; then
+ echo >>"$TARGET/debootstrap/debpaths" "$p $debdest"
+ details="done"
+ break
+ else
+ details=""
+ fi
+ done
+ if [ "$details" != "" ]; then
+ break
+ fi
+ done
+ if [ "$details" != "" ]; then
+ break
+ fi
+ done
+ if [ "$details" != "done" ]; then
+ error 1 COULDNTDL "Couldn't download %s" "$p"
+ fi
+ done
+}
+
+###################################################### deb choosing support
+
+get_debs () {
+ local field m1 s c path pkgdest
+ field="$1"
+ shift
+ for m1 in $MIRRORS; do
+ for s in $SUITE $EXTRA_SUITES; do
+ for c in $COMPONENTS; do
+ path="dists/$s/$c/binary-$ARCH/Packages"
+ pkgdest="$TARGET/$($DLDEST pkg "$s" "$c" "$ARCH" "$m1" "$path")"
+ echo "$("$PKGDETAILS" FIELD "$field" "$m1" "$pkgdest" "$@" | sed 's/ .*//')"
+ done
+ done
+ done
+}
+
+################################################################ extraction
+
+EXTRACTORS_SUPPORTED="dpkg-deb ar"
+EXTRACT_DEB_TAR_OPTIONS=
+
+# Native dpkg-deb based extractors
+extract_dpkg_deb_field () {
+ local pkg field
+ pkg="$1"
+ field="$2"
+
+ dpkg-deb -f "$pkg" "$field"
+}
+
+extract_dpkg_deb_data () {
+ local pkg="$1"
+
+ dpkg-deb --fsys-tarfile "$pkg" | tar $EXTRACT_DEB_TAR_OPTIONS -xf - || error 1 FILEEXIST "Tried to extract package, but file already exists. Exit..."
+}
+
+# Raw .deb extractors
+extract_ar_deb_field () {
+ local pkg field tarball
+ pkg="$1"
+ field="$2"
+ tarball=$(ar -t "$pkg" | grep "^control\.tar")
+
+ case "$tarball" in
+ control.tar.gz) cat_cmd=zcat ;;
+ control.tar.xz) cat_cmd=xzcat ;;
+ control.tar.zst) cat_cmd=zstdcat ;;
+ control.tar) cat_cmd=cat ;;
+ *) error 1 UNKNOWNCONTROLCOMP "Unknown compression type for %s in %s" "$tarball" "$pkg" ;;
+ esac
+
+ if in_path $cat_cmd; then
+ ar -p "$pkg" "$tarball" | $cat_cmd |
+ tar -O -xf - control ./control 2>/dev/null |
+ grep -i "^$field:" | sed -e 's/[^:]*: *//' | head -n 1
+ else
+ error 1 UNPACKCMDUNVL "Extracting %s requires the %s command, which is not available" "$pkg" "$cat_cmd"
+ fi
+}
+
+extract_ar_deb_data () {
+ local pkg tarball
+ pkg="$1"
+ tarball="$(ar -t "$pkg" | grep "^data.tar")"
+
+ case "$tarball" in
+ data.tar.gz) cat_cmd=zcat ;;
+ data.tar.bz2) cat_cmd=bzcat ;;
+ data.tar.xz) cat_cmd=xzcat ;;
+ data.tar.zst) cat_cmd=zstdcat ;;
+ data.tar) cat_cmd=cat ;;
+ *) error 1 UNKNOWNDATACOMP "Unknown compression type for %s in %s" "$tarball" "$pkg" ;;
+ esac
+
+ if in_path "$cat_cmd"; then
+ ar -p "$pkg" "$tarball" | "$cat_cmd" | tar $EXTRACT_DEB_TAR_OPTIONS -xf -
+ else
+ error 1 UNPACKCMDUNVL "Extracting %s requires the %s command, which is not available" "$pkg" "$cat_cmd"
+ fi
+}
+
+valid_extractor () {
+ local extractor="$1"
+ local E
+
+ for E in $EXTRACTORS_SUPPORTED; do
+ if [ "$extractor" = "$E" ]; then
+ return 0
+ fi
+ done
+
+ return 1
+}
+
+choose_extractor () {
+ local extractor
+
+ if [ -n "$EXTRACTOR_OVERRIDE" ]; then
+ extractor="$EXTRACTOR_OVERRIDE"
+ elif in_path dpkg-deb; then
+ extractor="dpkg-deb"
+ else
+ extractor="ar"
+ fi
+
+ info CHOSENEXTRACTOR "Chosen extractor for .deb packages: %s" "$extractor"
+ case "$extractor" in
+ dpkg-deb)
+ extract_deb_field () { extract_dpkg_deb_field "$@"; }
+ extract_deb_data () { extract_dpkg_deb_data "$@"; }
+ ;;
+ ar)
+ extract_deb_field () { extract_ar_deb_field "$@"; }
+ extract_deb_data () { extract_ar_deb_data "$@"; }
+ ;;
+ esac
+}
+
+extract () { (
+ cd "$TARGET" || exit 1
+ local p cat_cmd pkg
+ p=0
+ for pkg in $(debfor "$@"); do
+ p=$(($p + 1))
+ progress "$p" "$#" EXTRACTPKGS "Extracting packages"
+ packagename="$(echo "$pkg" | sed 's,^.*/,,;s,_.*$,,')"
+ info EXTRACTING "Extracting %s..." "$packagename"
+ extract_deb_data "./$pkg"
+ done
+); }
+
+in_target_nofail () {
+ if ! PATH=/sbin:/usr/sbin:/bin:/usr/bin eval "$CHROOT_CMD \"\$@\"" 2>/dev/null; then
+ true
+ fi
+ return 0
+}
+
+in_target_failmsg () {
+ local code msg arg
+ code="$1"
+ msg="$2"
+ arg="$3"
+ shift; shift; shift
+ if ! PATH=/sbin:/usr/sbin:/bin:/usr/bin eval "$CHROOT_CMD \"\$@\""; then
+ warning "$code" "$msg" "$arg"
+ # Try to point user at actual failing package.
+ msg="See %s for details"
+ if [ -e "$TARGET/debootstrap/debootstrap.log" ]; then
+ arg="$TARGET/debootstrap/debootstrap.log"
+ local pkg="$(grep '^dpkg: error processing ' "$TARGET/debootstrap/debootstrap.log" | head -n 1 | sed 's/\(error processing \)\(package \|archive \)/\1/' | cut -d ' ' -f 4)"
+ if [ -n "$pkg" ]; then
+ msg="$msg (possibly the package $pkg is at fault)"
+ fi
+ else
+ arg="the log"
+ fi
+ warning "$code" "$msg" "$arg"
+ return 1
+ fi
+ return 0
+}
+
+in_target () {
+ in_target_failmsg IN_TARGET_FAIL "Failure trying to run: %s" "$CHROOT_CMD $*" "$@"
+}
+
+###################################################### standard setup stuff
+
+conditional_cp () {
+ if [ ! -e "$2/$1" ]; then
+ if [ -L "$1" ] && [ -e "$1" ]; then
+ cat "$1" >"$2/$1"
+ elif [ -e "$1" ]; then
+ cp "$1" "$2/$1"
+ fi
+ fi
+}
+
+
+setup_apt_sources () {
+ local m s c
+ mkdir -p "$TARGET/etc/apt"
+ for m in "$@"; do
+ for s in $SUITE $EXTRA_SUITES; do
+ local cs c path pkgdest
+ cs=""
+ for c in ${COMPONENTS:-$USE_COMPONENTS}; do
+ path="dists/$s/$c/binary-$ARCH/Packages"
+ pkgdest="$TARGET/$($DLDEST pkg "$s" "$c" "$ARCH" "$m" "$path")"
+ if [ -e "$pkgdest" ]; then cs="$cs $c"; fi
+ done
+ if [ "$cs" != "" ]; then echo "deb $m $s$cs"; fi
+ done
+ done > "$TARGET/etc/apt/sources.list"
+}
+
+setup_etc () {
+ mkdir -p "$TARGET/etc"
+
+ conditional_cp /etc/resolv.conf "$TARGET"
+ conditional_cp /etc/hostname "$TARGET"
+}
+
+UMOUNT_DIRS=
+
+umount_exit_function () {
+ local realdir dir
+ for dir in $UMOUNT_DIRS; do
+ realdir="$(in_target_nofail readlink -f "$dir")"
+ [ "$realdir" ] || continue
+ ( cd / ; umount "$TARGET/${realdir#/}" ) || true
+ done
+}
+
+umount_on_exit () {
+ if [ "$UMOUNT_DIRS" ]; then
+ UMOUNT_DIRS="$1 $UMOUNT_DIRS"
+ else
+ UMOUNT_DIRS="$1"
+ on_exit umount_exit_function
+ fi
+}
+
+clear_mtab () {
+ if [ -f "$TARGET/etc/mtab" ] && [ ! -h "$TARGET/etc/mtab" ]; then
+ rm -f "$TARGET/etc/mtab"
+ fi
+}
+
+setup_proc () {
+ case "$HOST_OS" in
+ *freebsd*)
+ umount_on_exit /dev
+ umount_on_exit /dev/fd
+ umount_on_exit /proc
+ umount "$TARGET/proc" 2>/dev/null || true
+ if [ "$HOST_OS" = kfreebsd ]; then
+ in_target mount -t linprocfs proc /proc
+ else
+ mount -t linprocfs proc "$TARGET/proc"
+ fi
+ ;;
+ hurd*)
+ # firmlink $TARGET/{dev,servers,proc} to the system ones.
+ settrans -a "$TARGET/dev" /hurd/firmlink /dev
+ settrans -a "$TARGET/servers" /hurd/firmlink /servers
+ settrans -a "$TARGET/proc" /hurd/firmlink /proc
+ ;;
+ *)
+ umount_on_exit /dev/pts
+ umount_on_exit /dev/shm
+ umount_on_exit /proc
+ umount_on_exit /proc/bus/usb
+ if [ -L "$TARGET/proc" ];then
+ rm -f $TARGET/proc
+ mkdir $TARGET/proc
+ else
+ umount "$TARGET/proc" 2>/dev/null || true
+ fi
+
+ # some container environment are used at second-stage, it already treats /proc and so on
+ if [ -z "$(ls -A "$TARGET/proc")" ]; then
+ # second-stage in docker, we cannot detect it is inside docker... just ignore warning
+ in_target mount -t proc proc /proc || true
+ umount_on_exit /proc
+ fi
+ if [ -n "$(ls -A "$TARGET/sys")" ] && \
+ grep -qs '[[:space:]]sysfs' "$TARGET/proc/filesystems" || \
+ [ "$CONTAINER" = "docker" ]; then
+ umount_on_exit /sys
+ umount "$TARGET/sys" 2>/dev/null || true
+ else
+ # second-stage in docker, we cannot detect it is inside docker... just ignore warning
+ in_target mount -t sysfs sysfs /sys || true
+ umount_on_exit /sys
+ fi
+ on_exit clear_mtab
+ ;;
+ esac
+ umount_on_exit /lib/init/rw
+}
+
+setup_proc_symlink () {
+ rm -rf "$TARGET/proc"
+ ln -s /proc "$TARGET"
+}
+
+# create the static device nodes
+setup_devices () {
+ if doing_variant fakechroot; then
+ setup_devices_fakechroot
+ return 0
+ fi
+
+ case "$HOST_OS" in
+ kfreebsd*)
+ ;;
+ freebsd)
+ ;;
+ hurd*)
+ ;;
+ *)
+ if [ "$CONTAINER" = "lxc" ] || [ "$CONTAINER" = "lxc-libvirt" ]; then
+ if ! setup_devices_simple; then
+ setup_devices_bind
+ fi
+ return 0
+ fi
+
+ setup_devices_simple
+ ;;
+ esac
+}
+
+# enable the dynamic device nodes
+setup_dynamic_devices () {
+ if doing_variant fakechroot; then
+ return 0
+ fi
+
+ case "$HOST_OS" in
+ kfreebsd*)
+ in_target mount -t devfs devfs /dev ;;
+ freebsd)
+ mount -t devfs devfs "$TARGET/dev"
+ mount -t fdescfs -o linrdlnk fdescfs "$TARGET/dev/fd" ;;
+ hurd*)
+ # Use the setup-translators of the hurd package
+ in_target /usr/lib/hurd/setup-translators -k ;;
+ esac
+}
+
+# Create a device node if it does not exist. By default, the mode is 666.
+mknod_if_needed () {
+ local device type major minor mode
+ device="$1"
+ type="$2"
+ major="$3"
+ minor="$4"
+ mode="${5:-666}"
+
+ if [ ! -e "$device" ]; then
+ mknod -m "$mode" "$device" "$type" "$major" "$minor"
+ fi
+}
+
+
+setup_devices_simple () {
+ # The list of devices that can be created in a container comes from
+ # src/core/cgroup.c in the systemd source tree.
+ mknod_if_needed "$TARGET/dev/null" c 1 3
+ mknod_if_needed "$TARGET/dev/zero" c 1 5
+ mknod_if_needed "$TARGET/dev/full" c 1 7
+ mknod_if_needed "$TARGET/dev/random" c 1 8
+ mknod_if_needed "$TARGET/dev/urandom" c 1 9
+ mknod_if_needed "$TARGET/dev/tty" c 5 0
+ if [ ! "$CONTAINER" = "systemd-nspawn" ]; then
+ mknod_if_needed "$TARGET/dev/console" c 5 1
+ fi
+ # To avoid pre-exist directory causes error, specify "-p" option
+ mkdir -p "$TARGET/dev/pts/" "$TARGET/dev/shm/"
+ # Inside a container, we might not be allowed to create /dev/ptmx.
+ # If not, do the next best thing.
+ if ! mknod_if_needed "$TARGET/dev/ptmx" c 5 2; then
+ warning MKNOD "Could not create /dev/ptmx, falling back to symlink. This chroot will require /dev/pts mounted with ptmxmode=666"
+ ln -sf pts/ptmx "$TARGET/dev/ptmx"
+ fi
+ ln -sf /proc/self/fd "$TARGET/dev/fd"
+ ln -sf /proc/self/fd/0 "$TARGET/dev/stdin"
+ ln -sf /proc/self/fd/1 "$TARGET/dev/stdout"
+ ln -sf /proc/self/fd/2 "$TARGET/dev/stderr"
+}
+
+setup_devices_fakechroot () {
+ rm -rf "$TARGET/dev"
+ ln -s /dev "$TARGET"
+}
+
+setup_devices_bind () {
+ local device
+ mount -t tmpfs nodev "$TARGET/dev"
+ umount_on_exit /dev
+ for device in null zero full random urandom tty pts shm ptmx; do
+ if [ -d "/dev/$device" ]; then
+ mkdir "$TARGET/dev/$device"
+ elif [ -c "/dev/$device" ]; then
+ touch "$TARGET/dev/$device"
+ else
+ continue
+ fi
+ mount -o bind "/dev/$device" "$TARGET/dev/$device"
+ umount_on_exit "/dev/$device"
+ done
+ ln -s /proc/self/fd "$TARGET/dev/fd"
+ ln -s /proc/self/fd/0 "$TARGET/dev/stdin"
+ ln -s /proc/self/fd/1 "$TARGET/dev/stdout"
+ ln -s /proc/self/fd/2 "$TARGET/dev/stderr"
+}
+
+setup_dselect_method () {
+ case "$1" in
+ apt)
+ mkdir -p "$TARGET/var/lib/dpkg"
+ echo "apt apt" > "$TARGET/var/lib/dpkg/cmethopt"
+ chmod 644 "$TARGET/var/lib/dpkg/cmethopt"
+ ;;
+ *)
+ error 1 UNKNOWNDSELECT "unknown dselect method"
+ ;;
+ esac
+}
+
+can_usrmerge_symlink() {
+ # Absolute symlinks can be relocated without problems.
+ test "${2#/}" = "$2" || return 0
+ while :; do
+ if test "${2#/}" != "$2"; then
+ # Handle double-slashes.
+ set -- "$1" "${2#/}"
+ elif test "${2#./}" != "$2"; then
+ # Handle ./ inside a link target.
+ set -- "$1" "${2#./}"
+ elif test "$2" = ..; then
+ # A parent directory symlink is ok if it does not
+ # cross the top level directory.
+ test "${1%/*/*}" != "$1" -a -n "${1%/*/*}"
+ return $?
+ elif test "${2#../}" != "$2"; then
+ # Symbolic link crossing / cannot be moved safely.
+ # This is prohibited by Debian Policy 10.5.
+ test "${1%/*/*}" = "$1" -o -z "${1%/*/*}" && return 1
+ set -- "${1%/*}" "${2#../}"
+ else
+ # Consider the symlink ok if its target does not
+ # contain a parent directory. When we fail here,
+ # the link target is non-minimal and doesn't happen
+ # in the archive.
+ test "${2#*/../}" = "$2"
+ return $?
+ fi
+ done
+}
+
+merge_usr_entry() {
+ local entry canon
+ canon="$TARGET/usr/${1#"$TARGET/"}"
+ test -h "$canon" &&
+ error 1 USRMERGEFAIL "cannot move %s as its destination exists as a symlink" "${1#"$TARGET"}"
+ if ! test -e "$canon"; then
+ mv "$1" "$canon"
+ return 0
+ fi
+ test -d "$1" ||
+ error 1 USRMERGEFAIL "cannot move non-directory %s as its destination exists" "${1#"$TARGET"}"
+ test -d "$canon" ||
+ error 1 USRMERGEFAIL "cannot move directory %s as its destination is not a directory" "${1#"$TARGET"}"
+ for entry in "$1/"* "$1/."*; do
+ # Some shells return . and .. on dot globs.
+ test "${entry%/.}" != "${entry%/..}" && continue
+ if test -h "$entry" && ! can_usrmerge_symlink "${entry#"$TARGET"}" "$(readlink "$entry")"; then
+ error 1 USRMERGEFAIL "cannot move relative symlink crossing top-level directory" "${entry#"$TARGET"}"
+ fi
+ # Ignore glob match failures
+ if test "${entry%'/*'}" != "${entry%'/.*'}" && ! test -e "$entry"; then
+ continue
+ fi
+ merge_usr_entry "$entry"
+ done
+ rmdir "$1"
+}
+
+merge_usr() {
+ if doing_variant buildd && [ -z "$MERGED_USR" ]; then
+ case "$CODENAME" in
+ etch*|lenny|squeeze|wheezy|jessie*|stretch|buster|bullseye|bookworm)
+ MERGED_USR="no"
+ ;;
+ esac
+ fi
+
+ if [ "$MERGED_USR" = "no" ]; then
+ # With the usrmerge becoming pseudo-essential we need to use this flag
+ # to ensure that even if it gets installed the buildd is not converted
+ # when debootstrap needs to create an unmerged-usr installation.
+ case "$CODENAME" in
+ etch*|lenny|squeeze|wheezy|jessie*|stretch|buster|bullseye)
+ ;;
+ *)
+ mkdir -p "$TARGET/etc"
+ echo "this system will not be supported in the future" > "$TARGET/etc/unsupported-skip-usrmerge-conversion"
+ if ! doing_variant buildd; then
+ warning SANITYCHECK "Upgrading non-merged-/usr environments post-bookworm is unsupported. Only do this for CI/QA infrastructure that will be re-bootstrapped rather than upgraded."
+ fi
+ ;;
+ esac
+ return 0;
+ fi
+
+ local dir
+ # This is list includes all possible multilib directories. It must be
+ # updated when new multilib directories are being added. Hopefully,
+ # all new architectures use multiarch instead, so we never get to
+ # update this.
+ for dir in bin lib lib32 lib64 libo32 libx32 sbin; do
+ test -h "$TARGET/$dir" && continue
+ test -e "$TARGET/$dir" || continue
+ merge_usr_entry "$TARGET/$dir"
+ ln -s "usr/$dir" "$TARGET/$dir"
+ done
+}
+
+# Previous implementation of merged /usr: not used within debootstrap,
+# but used by mmdebstrap's hooks/merged-usr/setup00.sh, mainly to get
+# the correct per-architecture $link_dir list of non-default multilib
+# directories.
+setup_merged_usr() {
+ if doing_variant buildd && [ -z "$MERGED_USR" ]; then
+ case "$CODENAME" in
+ etch*|lenny|squeeze|wheezy|jessie*|stretch|buster|bullseye|bookworm)
+ MERGED_USR="no"
+ ;;
+ esac
+ fi
+
+ if [ "$MERGED_USR" = "no" ]; then
+ # With the usrmerge becoming pseudo-essential we need to use this flag
+ # to ensure that even if it gets installed the buildd is not converted
+ # when debootstrap needs to create an unmerged-usr installation.
+ case "$CODENAME" in
+ etch*|lenny|squeeze|wheezy|jessie*|stretch|buster|bullseye)
+ ;;
+ *)
+ mkdir -p "$TARGET/etc"
+ echo "this system will not be supported in the future" > "$TARGET/etc/unsupported-skip-usrmerge-conversion"
+ if ! doing_variant buildd; then
+ warning SANITYCHECK "Upgrading non-merged-/usr environments post-bookworm is unsupported. Only do this for CI/QA infrastructure that will be re-bootstrapped rather than upgraded."
+ fi
+ ;;
+ esac
+ return 0;
+ fi
+
+ local link_dir=""
+ case $ARCH in
+ amd64) link_dir="lib32 lib64 libx32" ;;
+ i386) link_dir="lib64 libx32" ;;
+ mips|mipsel)
+ link_dir="lib32 lib64" ;;
+ mips64*|mipsn32*)
+ link_dir="lib32 lib64 libo32" ;;
+ loongarch64*)
+ link_dir="lib32 lib64" ;;
+ powerpc) link_dir="lib64" ;;
+ ppc64) link_dir="lib32 lib64" ;;
+ ppc64el) link_dir="lib64" ;;
+ s390x) link_dir="lib32" ;;
+ sparc) link_dir="lib64" ;;
+ sparc64) link_dir="lib32 lib64" ;;
+ x32) link_dir="lib32 lib64 libx32" ;;
+ esac
+ link_dir="bin sbin lib $link_dir"
+
+ local dir
+ for dir in $link_dir; do
+ ln -s usr/"$dir" "$TARGET/$dir"
+ mkdir -p "$TARGET/usr/$dir"
+ done
+}
+
+################################################################ pkgdetails
+
+# NOTE
+# For the debootstrap udeb, pkgdetails is provided by the bootstrap-base
+# udeb, so the pkgdetails API needs to be kept in sync with that.
+
+if in_path perl; then
+ PKGDETAILS=pkgdetails_perl
+
+ # test if grep supports --perl-regexp
+ set +e
+ echo x | grep --perl-regexp . >/dev/null 2>&1
+ if [ $? -eq 2 ]; then
+ gropt=-E
+ else
+ gropt=--perl-regexp
+ fi
+ set -e
+
+ pkgdetails_field () {
+ # uniq field mirror Packages values...
+ perl -le '
+$unique = shift @ARGV; $field = lc(shift @ARGV); $mirror = shift @ARGV;
+%expected = map { $_, 0 } @ARGV;
+%outputs;
+$prevpkg = "";
+$chksumfield = lc($ENV{DEBOOTSTRAP_CHECKSUM_FIELD}).":";
+
+sub emit_or_store_pkg {
+ if ($unique && defined $output_val) {
+ # Store the output for deduplicated emission later
+ $outputs{$output_val} = $output;
+ } else {
+ print $output if defined $output;
+ }
+}
+
+while (<STDIN>) {
+ if (/^([^:]*:)\s*(.*)$/) {
+ $f = lc($1); $v = $2;
+ if ($f eq "package:") {
+ $pkg = $v;
+ if ($pkg ne $prevpkg) {
+ emit_or_store_pkg;
+ $prevpkg = $pkg;
+ }
+ undef $output;
+ undef $output_val;
+ }
+ $ver = $v if ($f eq "version:");
+ $arc = $v if ($f eq "architecture:");
+ $fil = $v if ($f eq "filename:");
+ $chk = $v if ($f eq $chksumfield);
+ $siz = $v if ($f eq "size:");
+ $val = $v if ($f eq $field);
+ } elsif (/^$/) {
+ if (defined $val && defined $expected{$val}) {
+ $output = sprintf "%s %s %s %s %s %s %s",
+ $pkg, $ver, $arc, $mirror, $fil, $chk, $siz;
+ $output_val = $val;
+ }
+ undef $val;
+ }
+}
+emit_or_store_pkg;
+
+if ($unique) {
+ # Emit all of our deduplicated values
+ map { print } sort values %outputs;
+ # And emit any expected packages that were not found
+ foreach my $v (keys %expected) {
+ printf ("%s -\n", $v) if !defined $outputs{$v};
+ }
+}
+' "$@"
+ }
+
+ pkgdetails_perl () {
+ if [ "$1" = "WGET%" ]; then
+ shift;
+ perl -e '
+$v = 0;
+$allow_percentage = 0;
+while (read STDIN, $x, 1) {
+ if ($x =~ m/\s/) {
+ $allow_percentage = 1;
+ } elsif ($allow_percentage and $x =~ m/\d/) {
+ $v *= 10;
+ $v += $x;
+ } elsif ($allow_percentage and $x eq "%") {
+ printf "P: %d %d%s\n", int($v / 100.0 * ($ARGV[1] - $ARGV[0]) + $ARGV[0]), $ARGV[2], ($#ARGV == 3 ? " $ARGV[3]" : "");
+ $v = 0;
+ } else {
+ $v = 0;
+ $allow_percentage = 0;
+ }
+}' "$@"
+ elif [ "$1" = "GETDEPS" ]; then
+ local pkgdest="$2"; shift; shift
+LC_ALL=C grep "$gropt" '^$|^Package:|^Depends:|^Pre-Depends:' $pkgdest | perl -e '
+%seen = map { $_ => 1 } @ARGV;
+while (<STDIN>) {
+ if (/^Package: (.*)$/) {
+ $pkg = $1;
+ next;
+ } elsif (/^$/) {
+ $in = 0;
+ next;
+ }
+ $in = 1 if $seen{$pkg};
+ if ($in and (/^Depends: (.*)$/ or /^Pre-Depends: (.*)$/)) {
+ for $d (split /\s*,\s*/, $1) {
+ $d =~ s/\s*[|].*$//;
+ $d =~ s/\s*[(].*[)]\s*//;
+ $d =~ s/:.*//;
+ $depends{$d} = 1;
+ }
+ }
+}
+ foreach (sort keys %depends) {
+ print "$_\n";
+ }
+' "$@"
+ elif [ "$1" = "PKGS" ]; then
+ local m="$2"
+ local p="$3"
+ shift; shift; shift
+ LC_ALL=C grep "$gropt" '^$|^Architecture:|^Filename:|^MD5sum:|^Package:|^Priority:|^SHA256:|^Size:|^Version:|^Depends:|^Pre-Depends:' "$p" | pkgdetails_field 1 Package: "$m" "$@"
+ elif [ "$1" = "FIELD" ]; then
+ local f="$2"
+ local m="$3"
+ local p="$4"
+ shift; shift; shift; shift
+ LC_ALL=C grep "$gropt" '^$|^Package:|^Priority:' "$p" | pkgdetails_field 0 "$f" "$m" "$@"
+ elif [ "$1" = "STANZAS" ]; then
+ local pkgdest="$2"; shift; shift
+ perl -e '
+my $accum = "";
+%seen = map { $_ => 1 } @ARGV;
+while (<STDIN>) {
+ $accum .= $_;
+ $in = 1 if (/^Package: (.*)$/ && $seen{$1});
+ if ($in and /^$/) {
+ print $accum;
+ if (substr($accum, -1) != "\n") {
+ print "\n\n";
+ } elsif (substr($accum, -2, 1) != "\n") {
+ print "\n";
+ }
+ $in = 0;
+ }
+ $accum = "" if /^$/;
+}' <"$pkgdest" "$@"
+ fi
+ }
+elif [ -e "/usr/lib/debootstrap/pkgdetails" ]; then
+ PKGDETAILS="/usr/lib/debootstrap/pkgdetails"
+elif [ -e "$DEBOOTSTRAP_DIR/pkgdetails" ]; then
+ PKGDETAILS="$DEBOOTSTRAP_DIR/pkgdetails"
+else
+ PKGDETAILS=""
+fi
+
+##################################################### dependency resolution
+
+resolve_deps () {
+ local m1="${MIRRORS%% *}"
+
+ local PKGS="$*"
+ local ALLPKGS="$PKGS";
+ local ALLPKGS2="";
+ local s c
+ while [ "$PKGS" != "" ]; do
+ local NEWPKGS=""
+ for s in $SUITE $EXTRA_SUITES; do
+ for c in ${COMPONENTS:-$(echo ${USE_COMPONENTS} | tr '|' ' ')}; do
+ local path="dists/$s/$c/binary-$ARCH/Packages"
+ local pkgdest="$TARGET/$($DLDEST pkg "$s" "$c" "$ARCH" "$m1" "$path")"
+ NEWPKGS="$NEWPKGS $("$PKGDETAILS" GETDEPS "$pkgdest" $PKGS)"
+ done
+ done
+ if [ -n "${EXCLUDE_DEPENDENCY:-}" ]; then
+ NEWPKGS="$(without "$NEWPKGS" "$EXCLUDE_DEPENDENCY")"
+ fi
+ PKGS=$(echo "$PKGS $NEWPKGS" | tr ' ' '\n' | sort | uniq)
+ local REALPKGS=""
+ for s in $SUITE $EXTRA_SUITES; do
+ for c in ${COMPONENTS:-$(echo ${USE_COMPONENTS} | tr '|' ' ')}; do
+ local path="dists/$s/$c/binary-$ARCH/Packages"
+ local pkgdest="$TARGET/$($DLDEST pkg "$s" "$c" "$ARCH" "$m1" "$path")"
+ REALPKGS="$REALPKGS $("$PKGDETAILS" PKGS REAL "$pkgdest" $PKGS | sed -n 's/ .*REAL.*$//p')"
+ done
+ done
+ PKGS="$REALPKGS"
+ ALLPKGS2=$(echo "$PKGS $ALLPKGS" | tr ' ' '\n' | sort | uniq)
+ PKGS=$(without "$ALLPKGS2" "$ALLPKGS")
+ ALLPKGS="$ALLPKGS2"
+ done
+ echo "$ALLPKGS"
+}
+
+setup_available () {
+ local m1 c path pkgdest pkg
+ m1="${MIRRORS%% *}"
+
+ for s in $SUITE $EXTRA_SUITES; do
+ for c in ${COMPONENTS:-$(echo ${USE_COMPONENTS} | tr '|' ' ')}; do
+ path="dists/$s/$c/binary-$ARCH/Packages"
+ pkgdest="$TARGET/$($DLDEST pkg "$s" "$c" "$ARCH" "$m1" "$path")"
+ # XXX: What if a package is in more than one component?
+ # -- cjwatson 2009-07-29
+ # XXX: ...or suite?
+ # -- jrtc27 2019-06-11
+ "$PKGDETAILS" STANZAS "$pkgdest" "$@"
+ done
+ done >"$TARGET/var/lib/dpkg/available"
+
+ for pkg; do
+ echo "$pkg install"
+ done | in_target dpkg --set-selections
+}
+
+get_next_predep () {
+ local stanza="$(in_target_nofail dpkg --predep-package)"
+ [ "$stanza" ] || return 1
+ echo "$stanza" | grep '^Package:' | sed 's/^Package://; s/^ *//'
+}
+
+################################################################### helpers
+
+# Return zero if it is possible to create devices and execute programs in
+# this directory. (Both may be forbidden by mount options, e.g. nodev and
+# noexec respectively.)
+check_sane_mount () {
+ mkdir -p "$1"
+
+ case "$HOST_OS" in
+ *freebsd*|hurd*)
+ ;;
+ *)
+ if ! doing_variant fakechroot; then
+ case "$CONTAINER" in
+ lxc|lxc-libvirt)
+ ;;
+ *)
+ mknod "$1/test-dev-null" c 1 3 || return 1
+ if ! echo test > "$1/test-dev-null"; then
+ rm -f "$1/test-dev-null"
+ return 1
+ fi
+ rm -f "$1/test-dev-null"
+ ;;
+ esac
+ fi
+ esac
+
+ SH="/bin/sh"
+ [ -x "$SH" ] || SH="$(which sh)"
+
+ cat > "$1/test-exec" <<EOF
+#! $SH
+:
+EOF
+ chmod +x "$1/test-exec"
+ if ! "$1/test-exec"; then
+ rm -f "$1/test-exec"
+ return 1
+ fi
+ rm -f "$1/test-exec"
+
+ return 0
+}
+
+read_gpg_status () {
+ local badsig unkkey validsig
+ while read prefix keyword keyid rest; do
+ [ "$prefix" = '[GNUPG:]' ] || continue
+ case $keyword in
+ BADSIG) badsig="$keyid" ;;
+ NO_PUBKEY) unkkey="$keyid" ;;
+ VALIDSIG) validsig="$keyid" ;;
+ esac
+ done
+ if [ "$validsig" ]; then
+ info VALIDRELSIG "Valid Release signature (key id %s)" "$validsig"
+ elif [ "$badsig" ]; then
+ error 1 BADRELSIG "Invalid Release signature (key id %s)" "$badsig"
+ elif [ "$unkkey" ]; then
+ error 1 UNKNOWNRELSIG "Release signed by unknown key (key id %s)\n The specified keyring $KEYRING may be incorrect or out of date.\n You can find the latest Debian release key at https://ftp-master.debian.org/keys.html" "$unkkey"
+ else
+ error 1 SIGCHECK "Error executing gpgv to check Release signature"
+ fi
+}
+
+without () {
+ # usage: without "a b c" "a d" -> "b" "c"
+ (echo "$1" | tr ' ' '\n' | sort | uniq;
+ echo "$2" "$2" | tr ' ' '\n') | sort | uniq -u | tr '\n' ' '
+ echo
+}
+
+# Formerly called 'repeat', but that's a reserved word in zsh.
+repeatn () {
+ local n="$1"
+ shift
+ while [ "$n" -gt 0 ]; do
+ if "$@"; then
+ break
+ else
+ n=$(( $n - 1 ))
+ sleep 1
+ fi
+ done
+ if [ "$n" -eq 0 ]; then return 1; fi
+ return 0
+}
+
+N_EXIT_THINGS=0
+exit_function () {
+ local n=0
+ while [ "$n" -lt "$N_EXIT_THINGS" ]; do
+ (eval $(eval echo \${EXIT_THING_$n}) 2>/dev/null || true)
+ n=$(( $n + 1 ))
+ done
+ N_EXIT_THINGS=0
+}
+
+trap "exit_function" 0
+trap "exit 129" 1
+trap "error 130 INTERRUPTED \"Interrupt caught ... exiting\"" 2
+trap "exit 131" 3
+trap "exit 143" 15
+
+on_exit () {
+ eval "$(echo EXIT_THING_${N_EXIT_THINGS}=\"$1\")"
+ N_EXIT_THINGS=$(( $N_EXIT_THINGS + 1 ))
+}
+
+############################################################## fakechroot tools
+
+install_fakechroot_tools () {
+ if [ "$VARIANT" = "fakechroot" ]; then
+ export PATH=/usr/sbin:/sbin:$PATH
+ fi
+
+ mv "$TARGET/sbin/ldconfig" "$TARGET/sbin/ldconfig.REAL"
+ echo \
+"#!/bin/sh
+echo
+echo \"Warning: Fake ldconfig called, doing nothing\"" > "$TARGET/sbin/ldconfig"
+ chmod 755 "$TARGET/sbin/ldconfig"
+
+ echo \
+"/sbin/ldconfig
+/sbin/ldconfig.REAL
+fakechroot" >> "$TARGET/var/lib/dpkg/diversions"
+
+ mv "$TARGET/usr/bin/ldd" "$TARGET/usr/bin/ldd.REAL"
+ cat << 'END' > "$TARGET/usr/bin/ldd"
+#!/usr/bin/perl
+
+# fakeldd
+#
+# Replacement for ldd with usage of objdump
+#
+# (c) 2003-2005 Piotr Roszatycki <dexter@debian.org>, BSD
+
+
+my %libs = ();
+
+my $status = 0;
+my $dynamic = 0;
+my $biarch = 0;
+
+my $ldlinuxsodir = "/lib";
+my @ld_library_path = qw(/usr/lib /lib);
+
+
+sub ldso($) {
+ my ($lib) = @_;
+ my @files = ();
+
+ if ($lib =~ /^\//) {
+ $libs{$lib} = $lib;
+ push @files, $lib;
+ } else {
+ foreach my $ld_path (@ld_library_path) {
+ next unless -f "$ld_path/$lib";
+ my $badformat = 0;
+ open OBJDUMP, "objdump -p $ld_path/$lib 2>/dev/null |";
+ while (my $line = <OBJDUMP>) {
+ if ($line =~ /file format (\S*)$/) {
+ $badformat = 1 unless $format eq $1;
+ last;
+ }
+ }
+ close OBJDUMP;
+ next if $badformat;
+ $libs{$lib} = "$ld_path/$lib";
+ push @files, "$ld_path/$lib";
+ }
+ objdump(@files);
+ }
+}
+
+
+sub objdump(@) {
+ my (@files) = @_;
+ my @libs = ();
+
+ foreach my $file (@files) {
+ open OBJDUMP, "objdump -p $file 2>/dev/null |";
+ while (my $line = <OBJDUMP>) {
+ $line =~ s/^\s+//;
+ my @f = split (/\s+/, $line);
+ if ($line =~ /file format (\S*)$/) {
+ if (not $format) {
+ $format = $1;
+ if ($unamearch eq "x86_64" and $format eq "elf32-i386") {
+ my $link = readlink "/lib/ld-linux.so.2";
+ if ($link =~ /^\/emul\/ia32-linux\//) {
+ $ld_library_path[-2] = "/emul/ia32-linux/usr/lib";
+ $ld_library_path[-1] = "/emul/ia32-linux/lib";
+ }
+ } elsif ($unamearch =~ /^(sparc|sparc64)$/ and $format eq "elf64-sparc") {
+ $ldlinuxsodir = "/lib64";
+ $ld_library_path[-2] = "/usr/lib64";
+ $ld_library_path[-1] = "/lib64";
+ }
+ } else {
+ next unless $format eq $1;
+ }
+ }
+ if (not $dynamic and $f[0] eq "Dynamic") {
+ $dynamic = 1;
+ }
+ next unless $f[0] eq "NEEDED";
+ if ($f[1] =~ /^ld-linux(\.|-)/) {
+ $f[1] = "$ldlinuxsodir/" . $f[1];
+ }
+ if (not defined $libs{$f[1]}) {
+ $libs{$f[1]} = undef;
+ push @libs, $f[1];
+ }
+ }
+ close OBJDUMP;
+ }
+
+ foreach my $lib (@libs) {
+ ldso($lib);
+ }
+}
+
+
+if ($#ARGV < 0) {
+ print STDERR "fakeldd: missing file arguments\n";
+ exit 1;
+}
+
+while ($ARGV[0] =~ /^-/) {
+ my $arg = $ARGV[0];
+ shift @ARGV;
+ last if $arg eq "--";
+}
+
+open LD_SO_CONF, "/etc/ld.so.conf";
+while ($line = <LD_SO_CONF>) {
+ chomp $line;
+ unshift @ld_library_path, $line;
+}
+close LD_SO_CONF;
+
+unshift @ld_library_path, split(/:/, $ENV{LD_LIBRARY_PATH});
+
+$unamearch = "$(/bin/uname -m)";
+chomp $unamearch;
+
+foreach my $file (@ARGV) {
+ my $address;
+ %libs = ();
+ $dynamic = 0;
+
+ if ($#ARGV > 0) {
+ print "$file:\n";
+ }
+
+ if (not -f $file) {
+ print STDERR "ldd: $file: No such file or directory\n";
+ $status = 1;
+ next;
+ }
+
+ objdump($file);
+
+ if ($dynamic == 0) {
+ print "\tnot a dynamic executable\n";
+ $status = 1;
+ } elsif (scalar %libs eq "0") {
+ print "\tstatically linked\n";
+ }
+
+ if ($format =~ /^elf64-/) {
+ $address = "0x0000000000000000";
+ } else {
+ $address = "0x00000000";
+ }
+
+ foreach $lib (keys %libs) {
+ if ($libs{$lib}) {
+ printf "\t%s => %s (%s)\n", $lib, $libs{$lib}, $address;
+ } else {
+ printf "\t%s => not found\n", $lib;
+ }
+ }
+}
+
+exit $status;
+END
+ chmod 755 "$TARGET/usr/bin/ldd"
+
+ echo \
+"/usr/bin/ldd
+/usr/bin/ldd.REAL
+fakechroot" >> "$TARGET/var/lib/dpkg/diversions"
+
+}
diff --git a/scripts/aequorea b/scripts/aequorea
new file mode 100644
index 0000000..8c68983
--- /dev/null
+++ b/scripts/aequorea
@@ -0,0 +1,202 @@
+mirror_style release
+download_style apt
+finddebs_style from-indices
+variants - buildd fakechroot minbase
+keyring /usr/share/keyrings/tanglu-archive-keyring.gpg
+default_mirror http://archive.tanglu.org/tanglu
+
+if doing_variant fakechroot; then
+ test "$FAKECHROOT" = "true" || error 1 FAKECHROOTREQ "This variant requires fakechroot environment to be started"
+fi
+
+case $ARCH in
+ alpha|ia64) LIBC="libc6.1" ;;
+ kfreebsd-*) LIBC="libc0.1" ;;
+ hurd-*) LIBC="libc0.3" ;;
+ *) LIBC="libc6" ;;
+esac
+
+work_out_debs () {
+ required="$(get_debs Priority: required)"
+
+ if doing_variant - || doing_variant fakechroot; then
+ #required="$required $(get_debs Priority: important)"
+ # ^^ should be getting debconf here somehow maybe
+ base="$(get_debs Priority: important)"
+
+ # we want the Tanglu minimal dependency set to be installed
+ base="$base tanglu-minimal"
+ elif doing_variant buildd; then
+ base="apt build-essential"
+ elif doing_variant minbase; then
+ base="apt"
+ fi
+
+ if doing_variant fakechroot; then
+ # ldd.fake needs binutils
+ required="$required binutils"
+ fi
+
+ case $MIRRORS in
+ https://*)
+ base="$base apt-transport-https ca-certificates"
+ ;;
+ esac
+}
+
+first_stage_install () {
+ extract $required
+
+ mkdir -p "$TARGET/var/lib/dpkg"
+ : >"$TARGET/var/lib/dpkg/status"
+ : >"$TARGET/var/lib/dpkg/available"
+
+ setup_etc
+ if [ ! -e "$TARGET/etc/fstab" ]; then
+ echo '# UNCONFIGURED FSTAB FOR BASE SYSTEM' > "$TARGET/etc/fstab"
+ chown 0:0 "$TARGET/etc/fstab"; chmod 644 "$TARGET/etc/fstab"
+ fi
+
+ setup_devices
+
+ x_feign_install () {
+ local pkg="$1"
+ local deb="$(debfor $pkg)"
+ local ver="$(extract_deb_field "$TARGET/$deb" Version)"
+
+ mkdir -p "$TARGET/var/lib/dpkg/info"
+
+ echo \
+"Package: $pkg
+Version: $ver
+Maintainer: unknown
+Status: install ok installed" >> "$TARGET/var/lib/dpkg/status"
+
+ touch "$TARGET/var/lib/dpkg/info/${pkg}.list"
+ }
+
+ x_feign_install dpkg
+}
+
+second_stage_install () {
+ setup_dynamic_devices
+
+ x_core_install () {
+ smallyes '' | in_target dpkg --force-depends --install $(debfor "$@")
+ }
+
+ p () {
+ baseprog="$(($baseprog + ${1:-1}))"
+ }
+
+ if doing_variant fakechroot || [ "$CONTAINER" = "docker" ]; then
+ setup_proc_symlink
+ else
+ setup_proc
+ in_target /sbin/ldconfig
+ fi
+
+ DEBIAN_FRONTEND=noninteractive
+ DEBCONF_NONINTERACTIVE_SEEN=true
+ export DEBIAN_FRONTEND DEBCONF_NONINTERACTIVE_SEEN
+
+ baseprog=0
+ bases=7
+
+ p; progress $baseprog $bases INSTCORE "Installing core packages" #1
+ info INSTCORE "Installing core packages..."
+
+ p; progress $baseprog $bases INSTCORE "Installing core packages" #2
+ ln -sf mawk "$TARGET/usr/bin/awk"
+ x_core_install base-passwd
+ x_core_install base-files
+ p; progress $baseprog $bases INSTCORE "Installing core packages" #3
+ x_core_install dpkg
+
+ if [ ! -e "$TARGET/etc/localtime" ]; then
+ ln -sf /usr/share/zoneinfo/UTC "$TARGET/etc/localtime"
+ fi
+
+ if doing_variant fakechroot; then
+ install_fakechroot_tools
+ fi
+
+ p; progress $baseprog $bases INSTCORE "Installing core packages" #4
+ x_core_install $LIBC
+
+ p; progress $baseprog $bases INSTCORE "Installing core packages" #5
+ x_core_install perl-base
+
+ p; progress $baseprog $bases INSTCORE "Installing core packages" #6
+ rm "$TARGET/usr/bin/awk"
+ x_core_install mawk
+
+ p; progress $baseprog $bases INSTCORE "Installing core packages" #7
+ if doing_variant -; then
+ x_core_install debconf
+ fi
+
+ baseprog=0
+ bases=$(set -- $required; echo $#)
+
+ info UNPACKREQ "Unpacking required packages..."
+
+ exec 7>&1
+
+ smallyes '' |
+ (repeatn 5 in_target_failmsg UNPACK_REQ_FAIL_FIVE "Failure while unpacking required packages. This will be attempted up to five times." "" \
+ dpkg --status-fd 8 --force-depends --unpack $(debfor $required) 8>&1 1>&7 || echo EXITCODE $?) |
+ dpkg_progress $baseprog $bases UNPACKREQ "Unpacking required packages" UNPACKING
+
+ info CONFREQ "Configuring required packages..."
+
+ mv "$TARGET/sbin/start-stop-daemon" "$TARGET/sbin/start-stop-daemon.REAL"
+ echo \
+"#!/bin/sh
+echo
+echo \"Warning: Fake start-stop-daemon called, doing nothing\"" > "$TARGET/sbin/start-stop-daemon"
+ chmod 755 "$TARGET/sbin/start-stop-daemon"
+
+ setup_dselect_method apt
+
+ smallyes '' |
+ (in_target_failmsg CONF_REQ_FAIL "Failure while configuring required packages." "" \
+ dpkg --status-fd 8 --configure --pending --force-configure-any --force-depends 8>&1 1>&7 || echo EXITCODE $?) |
+ dpkg_progress $baseprog $bases CONFREQ "Configuring required packages" CONFIGURING
+
+ baseprog=0
+ bases="$(set -- $base; echo $#)"
+
+ info UNPACKBASE "Unpacking the base system..."
+
+ setup_available $required $base
+ done_predeps=
+ while predep=$(get_next_predep); do
+ # We have to resolve dependencies of pre-dependencies manually because
+ # dpkg --predep-package doesn't handle this.
+ predep=$(without "$(without "$(resolve_deps $predep)" "$required")" "$done_predeps")
+ # XXX: progress is tricky due to how dpkg_progress works
+ # -- cjwatson 2009-07-29
+ p; smallyes '' |
+ in_target dpkg --force-overwrite --force-confold --skip-same-version --install $(debfor $predep)
+ base=$(without "$base" "$predep")
+ done_predeps="$done_predeps $predep"
+ done
+
+ smallyes '' |
+ (repeatn 5 in_target_failmsg INST_BASE_FAIL_FIVE "Failure while installing base packages. This will be re-attempted up to five times." "" \
+ dpkg --status-fd 8 --force-overwrite --force-confold --skip-same-version --unpack $(debfor $base) 8>&1 1>&7 || echo EXITCODE $?) |
+ dpkg_progress $baseprog $bases UNPACKBASE "Unpacking base system" UNPACKING
+
+ info CONFBASE "Configuring the base system..."
+
+ smallyes '' |
+ (repeatn 5 in_target_failmsg CONF_BASE_FAIL_FIVE "Failure while configuring base packages. This will be re-attempted up to five times." "" \
+ dpkg --status-fd 8 --force-confold --skip-same-version --configure -a 8>&1 1>&7 || echo EXITCODE $?) |
+ dpkg_progress $baseprog $bases CONFBASE "Configuring base system" CONFIGURING
+
+ mv "$TARGET/sbin/start-stop-daemon.REAL" "$TARGET/sbin/start-stop-daemon"
+
+ progress $bases $bases CONFBASE "Configuring base system"
+ info BASESUCCESS "Base system installed successfully."
+}
diff --git a/scripts/amber b/scripts/amber
new file mode 100644
index 0000000..8cb68b5
--- /dev/null
+++ b/scripts/amber
@@ -0,0 +1,226 @@
+
+# For PureOS "amber"
+# PureOS: https://www.pureos.net/
+# Contact: https://tracker.pureos.net/
+
+mirror_style release
+download_style apt
+finddebs_style from-indices
+variants - buildd fakechroot minbase
+keyring /usr/share/keyrings/pureos-archive-keyring.gpg
+default_mirror https://repo.pureos.net/pureos/
+
+if doing_variant fakechroot; then
+ test "$FAKECHROOT" = "true" || error 1 FAKECHROOTREQ "This variant requires fakechroot environment to be started"
+fi
+
+case $ARCH in
+ alpha|ia64) LIBC="libc6.1" ;;
+ kfreebsd-*) LIBC="libc0.1" ;;
+ hurd-*) LIBC="libc0.3" ;;
+ *) LIBC="libc6" ;;
+esac
+
+work_out_debs () {
+ required="$(get_debs Priority: required)"
+
+ base="pureos-archive-keyring"
+ if doing_variant - || doing_variant fakechroot; then
+ #required="$required $(get_debs Priority: important)"
+ # ^^ should be getting debconf here somehow maybe
+ base="$base $(get_debs Priority: important)"
+
+ # we want the PureOS minimal dependency set to be installed
+ base="$base pureos-minimal"
+ elif doing_variant buildd; then
+ base="$base apt build-essential"
+ elif doing_variant minbase; then
+ base="$base apt"
+ fi
+
+ if doing_variant fakechroot; then
+ # ldd.fake needs binutils
+ required="$required binutils"
+ fi
+
+ case $MIRRORS in
+ https://*)
+ base="$base ca-certificates"
+ ;;
+ esac
+}
+
+first_stage_install () {
+ MERGED_USR="yes"
+ EXTRACT_DEB_TAR_OPTIONS="$EXTRACT_DEB_TAR_OPTIONS -k"
+
+ extract $required
+ merge_usr
+
+ mkdir -p "$TARGET/var/lib/dpkg"
+ : >"$TARGET/var/lib/dpkg/status"
+ : >"$TARGET/var/lib/dpkg/available"
+
+ setup_etc
+ if [ ! -e "$TARGET/etc/fstab" ]; then
+ echo '# UNCONFIGURED FSTAB FOR BASE SYSTEM' > "$TARGET/etc/fstab"
+ chown 0:0 "$TARGET/etc/fstab"; chmod 644 "$TARGET/etc/fstab"
+ fi
+
+ setup_devices
+}
+
+second_stage_install () {
+ setup_dynamic_devices
+
+ x_feign_install () {
+ local pkg="$1"
+ local deb="$(debfor $pkg)"
+ local ver="$(in_target dpkg-deb -f "$deb" Version)"
+
+ mkdir -p "$TARGET/var/lib/dpkg/info"
+
+ echo \
+"Package: $pkg
+Version: $ver
+Maintainer: unknown
+Status: install ok installed" >> "$TARGET/var/lib/dpkg/status"
+
+ touch "$TARGET/var/lib/dpkg/info/${pkg}.list"
+ }
+
+ x_feign_install dpkg
+
+ x_core_install () {
+ smallyes '' | in_target dpkg --force-depends --install $(debfor "$@")
+ }
+
+ p () {
+ baseprog="$(($baseprog + ${1:-1}))"
+ }
+
+ if doing_variant fakechroot; then
+ setup_proc_fakechroot
+ else
+ setup_proc
+ in_target /sbin/ldconfig
+ fi
+
+ DEBIAN_FRONTEND=noninteractive
+ DEBCONF_NONINTERACTIVE_SEEN=true
+ export DEBIAN_FRONTEND DEBCONF_NONINTERACTIVE_SEEN
+
+ baseprog=0
+ bases=7
+
+ p; progress $baseprog $bases INSTCORE "Installing core packages" #1
+ info INSTCORE "Installing core packages..."
+
+ p; progress $baseprog $bases INSTCORE "Installing core packages" #2
+ ln -sf mawk "$TARGET/usr/bin/awk"
+ x_core_install base-passwd
+ x_core_install base-files
+ p; progress $baseprog $bases INSTCORE "Installing core packages" #3
+ x_core_install dpkg
+
+ if [ ! -e "$TARGET/etc/localtime" ]; then
+ ln -sf /usr/share/zoneinfo/UTC "$TARGET/etc/localtime"
+ fi
+
+ if doing_variant fakechroot; then
+ install_fakechroot_tools
+ fi
+
+ p; progress $baseprog $bases INSTCORE "Installing core packages" #4
+ x_core_install $LIBC
+
+ p; progress $baseprog $bases INSTCORE "Installing core packages" #5
+ x_core_install perl-base
+
+ p; progress $baseprog $bases INSTCORE "Installing core packages" #6
+ rm "$TARGET/usr/bin/awk"
+ x_core_install mawk
+
+ p; progress $baseprog $bases INSTCORE "Installing core packages" #7
+ if doing_variant -; then
+ x_core_install debconf
+ fi
+
+ baseprog=0
+ bases=$(set -- $required; echo $#)
+
+ info UNPACKREQ "Unpacking required packages..."
+
+ exec 7>&1
+
+ smallyes '' |
+ (repeatn 5 in_target_failmsg UNPACK_REQ_FAIL_FIVE "Failure while unpacking required packages. This will be attempted up to five times." "" \
+ dpkg --status-fd 8 --force-depends --unpack $(debfor $required) 8>&1 1>&7 || echo EXITCODE $?) |
+ dpkg_progress $baseprog $bases UNPACKREQ "Unpacking required packages" UNPACKING
+
+ info CONFREQ "Configuring required packages..."
+
+ if doing_variant fakechroot && [ -e "$TARGET/var/lib/dpkg/info/initscripts.postinst" ]
+ then
+ # fix initscripts postinst (no mounting possible, and wrong if condition)
+ sed -i '/dpkg.*--compare-versions/ s/\<lt\>/lt-nl/' "$TARGET/var/lib/dpkg/info/initscripts.postinst"
+ fi
+
+ echo \
+"#!/bin/sh
+exit 101" > "$TARGET/usr/sbin/policy-rc.d"
+ chmod 755 "$TARGET/usr/sbin/policy-rc.d"
+
+ mv "$TARGET/sbin/start-stop-daemon" "$TARGET/sbin/start-stop-daemon.REAL"
+ echo \
+"#!/bin/sh
+echo
+echo \"Warning: Fake start-stop-daemon called, doing nothing\"" > "$TARGET/sbin/start-stop-daemon"
+ chmod 755 "$TARGET/sbin/start-stop-daemon"
+
+ setup_dselect_method apt
+
+ smallyes '' |
+ (in_target_failmsg CONF_REQ_FAIL "Failure while configuring required packages." "" \
+ dpkg --status-fd 8 --configure --pending --force-configure-any --force-depends 8>&1 1>&7 || echo EXITCODE $?) |
+ dpkg_progress $baseprog $bases CONFREQ "Configuring required packages" CONFIGURING
+
+ baseprog=0
+ bases="$(set -- $base; echo $#)"
+
+ info UNPACKBASE "Unpacking the base system..."
+
+ setup_available $required $base
+ done_predeps=
+ while predep=$(get_next_predep); do
+ # We have to resolve dependencies of pre-dependencies manually because
+ # dpkg --predep-package doesn't handle this.
+ predep=$(without "$(without "$(resolve_deps $predep)" "$required")" "$done_predeps")
+ # XXX: progress is tricky due to how dpkg_progress works
+ # -- cjwatson 2009-07-29
+ p; smallyes '' |
+ in_target dpkg --force-overwrite --force-confold --skip-same-version --install $(debfor $predep)
+ base=$(without "$base" "$predep")
+ done_predeps="$done_predeps $predep"
+ done
+
+ if [ -n "$base" ]; then
+ smallyes '' |
+ (repeatn 5 in_target_failmsg INST_BASE_FAIL_FIVE "Failure while installing base packages. This will be re-attempted up to five times." "" \
+ dpkg --status-fd 8 --force-overwrite --force-confold --skip-same-version --unpack $(debfor $base) 8>&1 1>&7 || echo EXITCODE $?) |
+ dpkg_progress $baseprog $bases UNPACKBASE "Unpacking base system" UNPACKING
+
+ info CONFBASE "Configuring the base system..."
+
+ smallyes '' |
+ (repeatn 5 in_target_failmsg CONF_BASE_FAIL_FIVE "Failure while configuring base packages. This will be re-attempted up to five times." "" \
+ dpkg --status-fd 8 --force-confold --skip-same-version --configure -a 8>&1 1>&7 || echo EXITCODE $?) |
+ dpkg_progress $baseprog $bases CONFBASE "Configuring base system" CONFIGURING
+ fi
+
+ mv "$TARGET/sbin/start-stop-daemon.REAL" "$TARGET/sbin/start-stop-daemon"
+ rm -f "$TARGET/usr/sbin/policy-rc.d"
+
+ progress $bases $bases CONFBASE "Configuring base system"
+ info BASESUCCESS "Base system installed successfully."
+}
diff --git a/scripts/artful b/scripts/artful
new file mode 120000
index 0000000..3840936
--- /dev/null
+++ b/scripts/artful
@@ -0,0 +1 @@
+gutsy \ No newline at end of file
diff --git a/scripts/ascii b/scripts/ascii
new file mode 120000
index 0000000..9a63c96
--- /dev/null
+++ b/scripts/ascii
@@ -0,0 +1 @@
+sid \ No newline at end of file
diff --git a/scripts/bartholomea b/scripts/bartholomea
new file mode 120000
index 0000000..aa62feb
--- /dev/null
+++ b/scripts/bartholomea
@@ -0,0 +1 @@
+aequorea \ No newline at end of file
diff --git a/scripts/beowulf b/scripts/beowulf
new file mode 120000
index 0000000..9a63c96
--- /dev/null
+++ b/scripts/beowulf
@@ -0,0 +1 @@
+sid \ No newline at end of file
diff --git a/scripts/bionic b/scripts/bionic
new file mode 120000
index 0000000..3840936
--- /dev/null
+++ b/scripts/bionic
@@ -0,0 +1 @@
+gutsy \ No newline at end of file
diff --git a/scripts/bookworm b/scripts/bookworm
new file mode 120000
index 0000000..9a63c96
--- /dev/null
+++ b/scripts/bookworm
@@ -0,0 +1 @@
+sid \ No newline at end of file
diff --git a/scripts/breezy b/scripts/breezy
new file mode 100644
index 0000000..f15967a
--- /dev/null
+++ b/scripts/breezy
@@ -0,0 +1,164 @@
+default_mirror http://old-releases.ubuntu.com/ubuntu
+mirror_style release
+download_style apt
+finddebs_style from-indices
+variants - buildd
+force_md5
+
+case $ARCH in
+ alpha|ia64) LIBC="libc6.1" ;;
+ *) LIBC="libc6" ;;
+esac
+
+work_out_debs () {
+ required="$(get_debs Priority: required)"
+
+ if doing_variant -; then
+ #required="$required $(get_debs Priority: important)"
+ # ^^ should be getting debconf here somehow maybe
+ base="$(get_debs Priority: important)"
+ elif doing_variant buildd; then
+ # TODO: add Build-Essential: yes extraoverrides
+ #base="$(get_debs Build-Essential: yes)"
+
+ add () { if [ "$ARCH" = "$1" ]; then eval "$2=\"\$$2 $3\""; fi; }
+
+ base="apt binutils cpio cpp cpp-4.0 dpkg-dev g++ g++-4.0 gcc gcc-4.0 gcc-4.0-base ${LIBC}-dev libdb4.2 libgdbm3 libstdc++6 libstdc++6-4.0-dev linux-kernel-headers make patch perl perl-modules"
+
+ add ia64 base "libunwind7-dev"
+ add sparc base "lib64gcc1"
+ add sparc base "libc6-dev-sparc64"
+ add sparc base "libc6-sparc64"
+ fi
+}
+
+first_stage_install () {
+ extract $required
+
+ mkdir -p "$TARGET/var/lib/dpkg"
+ : >"$TARGET/var/lib/dpkg/status"
+ echo >"$TARGET/var/lib/dpkg/available"
+
+ setup_etc
+ if [ ! -e "$TARGET/etc/fstab" ]; then
+ echo '# UNCONFIGURED FSTAB FOR BASE SYSTEM' > "$TARGET/etc/fstab"
+ chown 0:0 "$TARGET/etc/fstab"; chmod 644 "$TARGET/etc/fstab"
+ fi
+
+ setup_devices
+
+ x_feign_install () {
+ local pkg="$1"
+ local deb="$(debfor $pkg)"
+ local ver="$(extract_deb_field "$TARGET/$deb" Version)"
+
+ mkdir -p "$TARGET/var/lib/dpkg/info"
+
+ echo \
+"Package: $pkg
+Version: $ver
+Status: install ok installed" >> "$TARGET/var/lib/dpkg/status"
+
+ touch "$TARGET/var/lib/dpkg/info/${pkg}.list"
+ }
+
+ x_feign_install dpkg
+}
+
+second_stage_install () {
+ x_core_install () {
+ smallyes '' | in_target dpkg --force-depends --install $(debfor "$@")
+ }
+
+ p () {
+ baseprog="$(($baseprog + ${1:-1}))"
+ }
+
+ setup_proc
+ umount_on_exit /dev/.static/dev
+ umount_on_exit /dev
+ in_target /sbin/ldconfig
+
+ DEBIAN_FRONTEND=noninteractive
+ DEBCONF_NONINTERACTIVE_SEEN=true
+ export DEBIAN_FRONTEND DEBCONF_NONINTERACTIVE_SEEN
+
+ baseprog=0
+ bases=7
+
+ p; progress $baseprog $bases INSTCORE "Installing core packages" #1
+ info INSTCORE "Installing core packages..."
+
+ p; progress $baseprog $bases INSTCORE "Installing core packages" #2
+ ln -sf mawk "$TARGET/usr/bin/awk"
+ x_core_install base-files base-passwd
+ p; progress $baseprog $bases INSTCORE "Installing core packages" #3
+ x_core_install dpkg
+
+ if [ ! -e "$TARGET/etc/localtime" ]; then
+ ln -sf /usr/share/zoneinfo/UTC "$TARGET/etc/localtime"
+ fi
+
+ p; progress $baseprog $bases INSTCORE "Installing core packages" #4
+ x_core_install $LIBC
+
+ p; progress $baseprog $bases INSTCORE "Installing core packages" #5
+ x_core_install perl-base
+
+ p; progress $baseprog $bases INSTCORE "Installing core packages" #6
+ rm "$TARGET/usr/bin/awk"
+ x_core_install mawk
+
+ p; progress $baseprog $bases INSTCORE "Installing core packages" #7
+ if doing_variant -; then
+ x_core_install debconf
+ fi
+
+ baseprog=0
+ bases=$(set -- $required; echo $#)
+
+ info UNPACKREQ "Unpacking required packages..."
+
+ smallyes '' |
+ (repeatn 5 in_target_failmsg UNPACK_REQ_FAIL_FIVE "Failure while unpacking required packages. This will be attempted up to five times." "" \
+ dpkg --status-fd 8 --force-depends --unpack $(debfor $required) 8>&1 1>&7 |
+ dpkg_progress $baseprog $bases UNPACKREQ "Unpacking required packages" UNPACKING) 7>&1
+
+ info CONFREQ "Configuring required packages..."
+
+ mv "$TARGET/sbin/start-stop-daemon" "$TARGET/sbin/start-stop-daemon.REAL"
+ echo \
+"#!/bin/sh
+echo
+echo \"Warning: Fake start-stop-daemon called, doing nothing\"" > "$TARGET/sbin/start-stop-daemon"
+ chmod 755 "$TARGET/sbin/start-stop-daemon"
+
+ setup_dselect_method apt
+
+ smallyes '' |
+ (in_target_failmsg CONF_REQ_FAIL "Failure while configuring required packages." "" \
+ dpkg --status-fd 8 --configure --pending --force-configure-any --force-depends 8>&1 1>&7 |
+ dpkg_progress $baseprog $bases CONFREQ "Configuring required packages" CONFIGURING) 7>&1
+
+ baseprog=0
+ bases="$(set -- $base; echo $#)"
+
+ info UNPACKBASE "Unpacking the base system..."
+
+ smallyes '' |
+ (repeatn 5 in_target_failmsg INST_BASE_FAIL_FIVE "Failure while installing base packages. This will be re-attempted up to five times." "" \
+ dpkg --status-fd 8 --force-auto-select --force-overwrite --force-confold --skip-same-version --unpack $(debfor $base) 8>&1 1>&7 |
+ dpkg_progress $baseprog $bases UNPACKBASE "Unpacking base system" UNPACKING) 7>&1
+
+ info CONFBASE "Configuring the base system..."
+
+ smallyes '' |
+ (repeatn 5 in_target_failmsg CONF_BASE_FAIL_FIVE "Failure while configuring base packages. This will be attempted 5 times." "" \
+ dpkg --status-fd 8 --force-confold --skip-same-version --configure -a 8>&1 1>&7 |
+ dpkg_progress $baseprog $bases CONFBASE "Configuring base system" CONFIGURING) 7>&1
+
+ mv "$TARGET/sbin/start-stop-daemon.REAL" "$TARGET/sbin/start-stop-daemon"
+
+ progress $bases $bases CONFBASE "Configuring base system"
+ info BASESUCCESS "Base system installed successfully."
+}
diff --git a/scripts/bullseye b/scripts/bullseye
new file mode 120000
index 0000000..9a63c96
--- /dev/null
+++ b/scripts/bullseye
@@ -0,0 +1 @@
+sid \ No newline at end of file
diff --git a/scripts/buster b/scripts/buster
new file mode 120000
index 0000000..9a63c96
--- /dev/null
+++ b/scripts/buster
@@ -0,0 +1 @@
+sid \ No newline at end of file
diff --git a/scripts/byzantium b/scripts/byzantium
new file mode 120000
index 0000000..d797ccf
--- /dev/null
+++ b/scripts/byzantium
@@ -0,0 +1 @@
+amber \ No newline at end of file
diff --git a/scripts/ceres b/scripts/ceres
new file mode 120000
index 0000000..9a63c96
--- /dev/null
+++ b/scripts/ceres
@@ -0,0 +1 @@
+sid \ No newline at end of file
diff --git a/scripts/chromodoris b/scripts/chromodoris
new file mode 120000
index 0000000..aa62feb
--- /dev/null
+++ b/scripts/chromodoris
@@ -0,0 +1 @@
+aequorea \ No newline at end of file
diff --git a/scripts/cosmic b/scripts/cosmic
new file mode 120000
index 0000000..3840936
--- /dev/null
+++ b/scripts/cosmic
@@ -0,0 +1 @@
+gutsy \ No newline at end of file
diff --git a/scripts/crimson b/scripts/crimson
new file mode 120000
index 0000000..d797ccf
--- /dev/null
+++ b/scripts/crimson
@@ -0,0 +1 @@
+amber \ No newline at end of file
diff --git a/scripts/dapper b/scripts/dapper
new file mode 100644
index 0000000..b1e44d0
--- /dev/null
+++ b/scripts/dapper
@@ -0,0 +1,169 @@
+case $ARCH in
+ amd64|i386|powerpc|sparc)
+ default_mirror http://archive.ubuntu.com/ubuntu
+ ;;
+ *)
+ default_mirror http://ports.ubuntu.com/ubuntu-ports
+ ;;
+esac
+mirror_style release
+download_style apt
+finddebs_style from-indices
+variants - buildd
+force_md5
+
+case $ARCH in
+ alpha|ia64) LIBC="libc6.1" ;;
+ *) LIBC="libc6" ;;
+esac
+
+work_out_debs () {
+ required="$(get_debs Priority: required)"
+
+ if doing_variant -; then
+ #required="$required $(get_debs Priority: important)"
+ # ^^ should be getting debconf here somehow maybe
+ base="$(get_debs Priority: important)"
+ elif doing_variant buildd; then
+ # TODO: add Build-Essential: yes extraoverrides
+ #base="$(get_debs Build-Essential: yes)"
+
+ add () { if [ "$ARCH" = "$1" ]; then eval "$2=\"\$$2 $3\""; fi; }
+
+ base="apt binutils cpio cpp cpp-4.0 dpkg-dev g++ g++-4.0 gcc gcc-4.0 ${LIBC}-dev libgdbm3 libstdc++6 libstdc++6-4.0-dev linux-kernel-headers make patch perl perl-modules"
+
+ add ia64 base "libunwind7-dev"
+ add sparc base "lib64gcc1"
+ add sparc base "libc6-dev-sparc64"
+ add sparc base "libc6-sparc64"
+ fi
+}
+
+first_stage_install () {
+ extract $required
+
+ mkdir -p "$TARGET/var/lib/dpkg"
+ : >"$TARGET/var/lib/dpkg/status"
+ : >"$TARGET/var/lib/dpkg/available"
+
+ setup_etc
+ if [ ! -e "$TARGET/etc/fstab" ]; then
+ echo '# UNCONFIGURED FSTAB FOR BASE SYSTEM' > "$TARGET/etc/fstab"
+ chown 0:0 "$TARGET/etc/fstab"; chmod 644 "$TARGET/etc/fstab"
+ fi
+
+ setup_devices
+
+ x_feign_install () {
+ local pkg="$1"
+ local deb="$(debfor $pkg)"
+ local ver="$(extract_deb_field "$TARGET/$deb" Version)"
+
+ mkdir -p "$TARGET/var/lib/dpkg/info"
+
+ echo \
+"Package: $pkg
+Version: $ver
+Status: install ok installed" >> "$TARGET/var/lib/dpkg/status"
+
+ touch "$TARGET/var/lib/dpkg/info/${pkg}.list"
+ }
+
+ x_feign_install dpkg
+}
+
+second_stage_install () {
+ x_core_install () {
+ smallyes '' | in_target dpkg --force-depends --install $(debfor "$@")
+ }
+
+ p () {
+ baseprog="$(($baseprog + ${1:-1}))"
+ }
+
+ setup_proc
+ in_target /sbin/ldconfig
+
+ DEBIAN_FRONTEND=noninteractive
+ DEBCONF_NONINTERACTIVE_SEEN=true
+ export DEBIAN_FRONTEND DEBCONF_NONINTERACTIVE_SEEN
+
+ baseprog=0
+ bases=7
+
+ p; progress $baseprog $bases INSTCORE "Installing core packages" #1
+ info INSTCORE "Installing core packages..."
+
+ p; progress $baseprog $bases INSTCORE "Installing core packages" #2
+ ln -sf mawk "$TARGET/usr/bin/awk"
+ x_core_install base-files base-passwd
+ p; progress $baseprog $bases INSTCORE "Installing core packages" #3
+ x_core_install dpkg
+
+ if [ ! -e "$TARGET/etc/localtime" ]; then
+ ln -sf /usr/share/zoneinfo/UTC "$TARGET/etc/localtime"
+ fi
+
+ p; progress $baseprog $bases INSTCORE "Installing core packages" #4
+ x_core_install $LIBC
+
+ p; progress $baseprog $bases INSTCORE "Installing core packages" #5
+ x_core_install perl-base
+
+ p; progress $baseprog $bases INSTCORE "Installing core packages" #6
+ rm "$TARGET/usr/bin/awk"
+ x_core_install mawk
+
+ p; progress $baseprog $bases INSTCORE "Installing core packages" #7
+ if doing_variant -; then
+ x_core_install debconf
+ fi
+
+ baseprog=0
+ bases=$(set -- $required; echo $#)
+
+ info UNPACKREQ "Unpacking required packages..."
+
+ smallyes '' |
+ (repeatn 5 in_target_failmsg UNPACK_REQ_FAIL_FIVE "Failure while unpacking required packages. This will be attempted up to five times." "" \
+ dpkg --status-fd 8 --force-depends --unpack $(debfor $required) 8>&1 1>&7 |
+ dpkg_progress $baseprog $bases UNPACKREQ "Unpacking required packages" UNPACKING) 7>&1
+
+ info CONFREQ "Configuring required packages..."
+
+ mv "$TARGET/sbin/start-stop-daemon" "$TARGET/sbin/start-stop-daemon.REAL"
+ echo \
+"#!/bin/sh
+echo
+echo \"Warning: Fake start-stop-daemon called, doing nothing\"" > "$TARGET/sbin/start-stop-daemon"
+ chmod 755 "$TARGET/sbin/start-stop-daemon"
+
+ setup_dselect_method apt
+
+ smallyes '' |
+ (in_target_failmsg CONF_REQ_FAIL "Failure while configuring required packages." "" \
+ dpkg --status-fd 8 --configure --pending --force-configure-any --force-depends 8>&1 1>&7 |
+ dpkg_progress $baseprog $bases CONFREQ "Configuring required packages" CONFIGURING) 7>&1
+
+ baseprog=0
+ bases="$(set -- $base; echo $#)"
+
+ info UNPACKBASE "Unpacking the base system..."
+
+ smallyes '' |
+ (repeatn 5 in_target_failmsg INST_BASE_FAIL_FIVE "Failure while installing base packages. This will be re-attempted up to five times." "" \
+ dpkg --status-fd 8 --force-auto-select --force-overwrite --force-confold --skip-same-version --unpack $(debfor $base) 8>&1 1>&7 |
+ dpkg_progress $baseprog $bases UNPACKBASE "Unpacking base system" UNPACKING) 7>&1
+
+ info CONFBASE "Configuring the base system..."
+
+ smallyes '' |
+ (repeatn 5 in_target_failmsg CONF_BASE_FAIL_FIVE "Failure while configuring base packages. This will be attempted 5 times." "" \
+ dpkg --status-fd 8 --force-confold --skip-same-version --configure -a 8>&1 1>&7 |
+ dpkg_progress $baseprog $bases CONFBASE "Configuring base system" CONFIGURING) 7>&1
+
+ mv "$TARGET/sbin/start-stop-daemon.REAL" "$TARGET/sbin/start-stop-daemon"
+
+ progress $bases $bases CONFBASE "Configuring base system"
+ info BASESUCCESS "Base system installed successfully."
+}
diff --git a/scripts/dasyatis b/scripts/dasyatis
new file mode 120000
index 0000000..aa62feb
--- /dev/null
+++ b/scripts/dasyatis
@@ -0,0 +1 @@
+aequorea \ No newline at end of file
diff --git a/scripts/debian-common b/scripts/debian-common
new file mode 100644
index 0000000..f3f3d17
--- /dev/null
+++ b/scripts/debian-common
@@ -0,0 +1,243 @@
+if doing_variant fakechroot; then
+ test "$FAKECHROOT" = "true" || error 1 FAKECHROOTREQ "This variant requires fakechroot environment to be started"
+fi
+
+case $ARCH in
+ alpha|ia64) LIBC="libc6.1" ;;
+ kfreebsd-*) LIBC="libc0.1" ;;
+ hurd-*) LIBC="libc0.3" ;;
+ *) LIBC="libc6" ;;
+esac
+
+work_out_debs () {
+ required="$(get_debs Priority: required)"
+
+ if doing_variant - || doing_variant fakechroot; then
+ #required="$required $(get_debs Priority: important)"
+ # ^^ should be getting debconf here somehow maybe
+ base="$(get_debs Priority: important)"
+ elif doing_variant buildd; then
+ base="apt build-essential"
+ elif doing_variant minbase; then
+ base="apt"
+ fi
+
+ if doing_variant fakechroot; then
+ # ldd.fake needs binutils
+ required="$required binutils"
+ fi
+
+ case $MIRRORS in
+ https://*)
+ case "$CODENAME" in
+ # apt-transport-https exists from lenny to stretch
+ lenny|squeeze|wheezy|jessie*|stretch)
+ base="$base apt-transport-https ca-certificates"
+ ;;
+ *)
+ base="$base ca-certificates"
+ ;;
+ esac
+ ;;
+ esac
+
+ # On suites >= bookworm, either we set up a merged-/usr system
+ # via merge_usr, or we deliberately avoid that migration by creating
+ # the flag file. This means there's no need for the live migration
+ # 'usrmerge' package and its extra dependencies:
+ # we can install the empty 'usr-is-merged' metapackage to indicate
+ # that the transition has been done.
+ case "$CODENAME" in
+ etch*|lenny|squeeze|wheezy|jessie*|stretch|buster|bullseye)
+ ;;
+ *)
+ required="$required usr-is-merged"
+ EXCLUDE_DEPENDENCY="$EXCLUDE_DEPENDENCY usrmerge"
+ ;;
+ esac
+}
+
+first_stage_install () {
+ case "$CODENAME" in
+ # "merged-usr" blacklist for past releases
+ etch*|lenny|squeeze|wheezy|jessie*)
+ [ -z "$MERGED_USR" ] && MERGED_USR="no"
+ ;;
+ *)
+ # see https://bugs.debian.org/838388
+ EXTRACT_DEB_TAR_OPTIONS="$EXTRACT_DEB_TAR_OPTIONS -k"
+ ;;
+ esac
+
+ if [ "$CODENAME" = "stretch" ] && [ -z "$MERGED_USR" ]; then
+ MERGED_USR="no"
+ fi
+
+ extract $required
+ merge_usr
+
+ mkdir -p "$TARGET/var/lib/dpkg"
+ : >"$TARGET/var/lib/dpkg/status"
+ : >"$TARGET/var/lib/dpkg/available"
+
+ setup_etc
+ if [ ! -e "$TARGET/etc/fstab" ]; then
+ echo '# UNCONFIGURED FSTAB FOR BASE SYSTEM' > "$TARGET/etc/fstab"
+ chown 0:0 "$TARGET/etc/fstab"; chmod 644 "$TARGET/etc/fstab"
+ fi
+
+ setup_devices
+
+ if doing_variant fakechroot || [ "$CONTAINER" = "docker" ]; then
+ setup_proc_symlink
+ fi
+}
+
+second_stage_install () {
+ in_target /bin/true
+
+ setup_dynamic_devices
+
+ x_feign_install () {
+ local pkg="$1"
+ local deb="$(debfor $pkg)"
+ local ver="$(in_target dpkg-deb -f "$deb" Version)"
+
+ mkdir -p "$TARGET/var/lib/dpkg/info"
+
+ echo \
+"Package: $pkg
+Version: $ver
+Maintainer: unknown
+Status: install ok installed" >> "$TARGET/var/lib/dpkg/status"
+
+ touch "$TARGET/var/lib/dpkg/info/${pkg}.list"
+ }
+
+ x_feign_install dpkg
+
+ x_core_install () {
+ smallyes '' | in_target dpkg --force-depends --install $(debfor "$@")
+ }
+
+ p () {
+ baseprog="$(($baseprog + ${1:-1}))"
+ }
+
+ if ! doing_variant fakechroot; then
+ setup_proc
+ in_target /sbin/ldconfig
+ fi
+
+ DEBIAN_FRONTEND=noninteractive
+ DEBCONF_NONINTERACTIVE_SEEN=true
+ export DEBIAN_FRONTEND DEBCONF_NONINTERACTIVE_SEEN
+
+ baseprog=0
+ bases=7
+
+ p; progress $baseprog $bases INSTCORE "Installing core packages" #1
+ info INSTCORE "Installing core packages..."
+
+ p; progress $baseprog $bases INSTCORE "Installing core packages" #2
+ ln -sf mawk "$TARGET/usr/bin/awk"
+ x_core_install base-passwd
+ x_core_install base-files
+ p; progress $baseprog $bases INSTCORE "Installing core packages" #3
+ x_core_install dpkg
+
+ if [ ! -e "$TARGET/etc/localtime" ]; then
+ ln -sf /usr/share/zoneinfo/UTC "$TARGET/etc/localtime"
+ fi
+
+ if doing_variant fakechroot; then
+ install_fakechroot_tools
+ fi
+
+ p; progress $baseprog $bases INSTCORE "Installing core packages" #4
+ x_core_install $LIBC
+
+ p; progress $baseprog $bases INSTCORE "Installing core packages" #5
+ x_core_install perl-base
+
+ p; progress $baseprog $bases INSTCORE "Installing core packages" #6
+ rm "$TARGET/usr/bin/awk"
+ x_core_install mawk
+
+ p; progress $baseprog $bases INSTCORE "Installing core packages" #7
+ if doing_variant -; then
+ x_core_install debconf
+ fi
+
+ baseprog=0
+ bases=$(set -- $required; echo $#)
+
+ info UNPACKREQ "Unpacking required packages..."
+
+ exec 7>&1
+
+ smallyes '' |
+ (repeatn 5 in_target_failmsg UNPACK_REQ_FAIL_FIVE "Failure while unpacking required packages. This will be attempted up to five times." "" \
+ dpkg --status-fd 8 --force-depends --unpack $(debfor $required) 8>&1 1>&7 || echo EXITCODE $?) |
+ dpkg_progress $baseprog $bases UNPACKREQ "Unpacking required packages" UNPACKING
+
+ info CONFREQ "Configuring required packages..."
+
+ echo \
+"#!/bin/sh
+exit 101" > "$TARGET/usr/sbin/policy-rc.d"
+ chmod 755 "$TARGET/usr/sbin/policy-rc.d"
+
+ mv "$TARGET/sbin/start-stop-daemon" "$TARGET/sbin/start-stop-daemon.REAL"
+ echo \
+"#!/bin/sh
+echo
+echo \"Warning: Fake start-stop-daemon called, doing nothing\"" > "$TARGET/sbin/start-stop-daemon"
+ chmod 755 "$TARGET/sbin/start-stop-daemon"
+
+ setup_dselect_method apt
+
+ smallyes '' |
+ (in_target_failmsg CONF_REQ_FAIL "Failure while configuring required packages." "" \
+ dpkg --status-fd 8 --configure --pending --force-configure-any --force-depends 8>&1 1>&7 || echo EXITCODE $?) |
+ dpkg_progress $baseprog $bases CONFREQ "Configuring required packages" CONFIGURING
+
+ baseprog=0
+ bases="$(set -- $base; echo $#)"
+
+ info UNPACKBASE "Unpacking the base system..."
+
+ setup_available $required $base
+ done_predeps=
+ while predep=$(get_next_predep); do
+ # We have to resolve dependencies of pre-dependencies manually because
+ # dpkg --predep-package doesn't handle this.
+ predep=$(without "$(without "$(resolve_deps $predep)" "$required")" "$done_predeps")
+ # XXX: progress is tricky due to how dpkg_progress works
+ # -- cjwatson 2009-07-29
+ p; smallyes '' |
+ in_target dpkg --force-overwrite --force-confold --skip-same-version --install $(debfor $predep)
+ base=$(without "$base" "$predep")
+ done_predeps="$done_predeps $predep"
+ done
+
+ if [ -n "$base" ]; then
+ smallyes '' |
+ (repeatn 5 in_target_failmsg INST_BASE_FAIL_FIVE "Failure while installing base packages. This will be re-attempted up to five times." "" \
+ dpkg --status-fd 8 --force-overwrite --force-confold --skip-same-version --unpack $(debfor $base) 8>&1 1>&7 || echo EXITCODE $?) |
+ dpkg_progress $baseprog $bases UNPACKBASE "Unpacking base system" UNPACKING
+
+ info CONFBASE "Configuring the base system..."
+
+ smallyes '' |
+ (repeatn 5 in_target_failmsg CONF_BASE_FAIL_FIVE "Failure while configuring base packages. This will be re-attempted up to five times." "" \
+ dpkg --status-fd 8 --force-confold --skip-same-version --configure -a 8>&1 1>&7 || echo EXITCODE $?) |
+ dpkg_progress $baseprog $bases CONFBASE "Configuring base system" CONFIGURING
+ fi
+
+ mv "$TARGET/sbin/start-stop-daemon.REAL" "$TARGET/sbin/start-stop-daemon"
+ rm -f "$TARGET/usr/sbin/policy-rc.d"
+
+ progress $bases $bases CONFBASE "Configuring base system"
+ info BASESUCCESS "Base system installed successfully."
+}
diff --git a/scripts/disco b/scripts/disco
new file mode 120000
index 0000000..3840936
--- /dev/null
+++ b/scripts/disco
@@ -0,0 +1 @@
+gutsy \ No newline at end of file
diff --git a/scripts/edgy b/scripts/edgy
new file mode 100644
index 0000000..d3b1ca1
--- /dev/null
+++ b/scripts/edgy
@@ -0,0 +1,188 @@
+case $ARCH in
+ amd64|i386|powerpc|sparc)
+ default_mirror http://old-releases.ubuntu.com/ubuntu
+ ;;
+ *)
+ default_mirror http://ports.ubuntu.com/ubuntu-ports
+ ;;
+esac
+mirror_style release
+download_style apt
+finddebs_style from-indices
+variants - buildd fakechroot
+force_md5
+
+if doing_variant fakechroot; then
+ test "$FAKECHROOT" = "true" || error 1 FAKECHROOTREQ "This variant requires fakechroot environment to be started"
+fi
+
+case $ARCH in
+ alpha|ia64) LIBC="libc6.1" ;;
+ *) LIBC="libc6" ;;
+esac
+
+work_out_debs () {
+ required="$(get_debs Priority: required)"
+
+ if doing_variant -; then
+ #required="$required $(get_debs Priority: important)"
+ # ^^ should be getting debconf here somehow maybe
+ base="$(get_debs Priority: important)"
+ elif doing_variant buildd; then
+ # TODO: add Build-Essential: yes extraoverrides
+ #base="$(get_debs Build-Essential: yes)"
+
+ add () { if [ "$ARCH" = "$1" ]; then eval "$2=\"\$$2 $3\""; fi; }
+
+ base="apt binutils cpio cpp cpp-4.1 dpkg-dev g++ g++-4.1 gcc gcc-4.1 ${LIBC}-dev libdb4.4 libgdbm3 libstdc++6 libstdc++6-4.1-dev linux-libc-dev make patch perl perl-modules"
+
+ add ia64 base "libunwind7-dev"
+ add sparc base "lib64gcc1"
+ add sparc base "libc6-dev-sparc64"
+ add sparc base "libc6-sparc64"
+ elif doing_variant fakechroot; then
+ base="apt"
+ fi
+}
+
+first_stage_install () {
+ extract $required
+
+ mkdir -p "$TARGET/var/lib/dpkg"
+ : >"$TARGET/var/lib/dpkg/status"
+ : >"$TARGET/var/lib/dpkg/available"
+
+ setup_etc
+ if [ ! -e "$TARGET/etc/fstab" ]; then
+ echo '# UNCONFIGURED FSTAB FOR BASE SYSTEM' > "$TARGET/etc/fstab"
+ chown 0:0 "$TARGET/etc/fstab"; chmod 644 "$TARGET/etc/fstab"
+ fi
+
+ setup_devices
+
+ x_feign_install () {
+ local pkg="$1"
+ local deb="$(debfor $pkg)"
+ local ver="$(extract_deb_field "$TARGET/$deb" Version)"
+
+ mkdir -p "$TARGET/var/lib/dpkg/info"
+
+ echo \
+"Package: $pkg
+Version: $ver
+Status: install ok installed" >> "$TARGET/var/lib/dpkg/status"
+
+ touch "$TARGET/var/lib/dpkg/info/${pkg}.list"
+ }
+
+ x_feign_install dpkg
+}
+
+second_stage_install () {
+ x_core_install () {
+ smallyes '' | in_target dpkg --force-depends --install $(debfor "$@")
+ }
+
+ p () {
+ baseprog="$(($baseprog + ${1:-1}))"
+ }
+
+ if doing_variant fakechroot || [ "$CONTAINER" = "docker" ]; then
+ setup_proc_symlink
+ else
+ setup_proc
+ in_target /sbin/ldconfig
+ fi
+
+ DEBIAN_FRONTEND=noninteractive
+ DEBCONF_NONINTERACTIVE_SEEN=true
+ export DEBIAN_FRONTEND DEBCONF_NONINTERACTIVE_SEEN
+
+ baseprog=0
+ bases=7
+
+ p; progress $baseprog $bases INSTCORE "Installing core packages" #1
+ info INSTCORE "Installing core packages..."
+
+ p; progress $baseprog $bases INSTCORE "Installing core packages" #2
+ ln -sf mawk "$TARGET/usr/bin/awk"
+ x_core_install base-files base-passwd
+ p; progress $baseprog $bases INSTCORE "Installing core packages" #3
+ x_core_install dpkg
+
+ if [ ! -e "$TARGET/etc/localtime" ]; then
+ ln -sf /usr/share/zoneinfo/UTC "$TARGET/etc/localtime"
+ fi
+
+ if doing_variant fakechroot; then
+ install_fakechroot_tools
+ fi
+
+ p; progress $baseprog $bases INSTCORE "Installing core packages" #4
+ x_core_install $LIBC
+
+ p; progress $baseprog $bases INSTCORE "Installing core packages" #5
+ x_core_install perl-base
+
+ p; progress $baseprog $bases INSTCORE "Installing core packages" #6
+ rm "$TARGET/usr/bin/awk"
+ x_core_install mawk
+
+ p; progress $baseprog $bases INSTCORE "Installing core packages" #7
+ if doing_variant -; then
+ x_core_install debconf
+ fi
+
+ baseprog=0
+ bases=$(set -- $required; echo $#)
+
+ info UNPACKREQ "Unpacking required packages..."
+
+ smallyes '' |
+ (repeatn 5 in_target_failmsg UNPACK_REQ_FAIL_FIVE "Failure while unpacking required packages. This will be attempted up to five times." "" \
+ dpkg --status-fd 8 --force-depends --unpack $(debfor $required) 8>&1 1>&7 |
+ dpkg_progress $baseprog $bases UNPACKREQ "Unpacking required packages" UNPACKING) 7>&1
+
+ info CONFREQ "Configuring required packages..."
+
+ if doing_variant fakechroot; then
+ # fix initscripts postinst (no mounting possible, and wrong if condition)
+ sed -i '/dpkg.*--compare-versions/ s/\<lt\>/lt-nl/' "$TARGET/var/lib/dpkg/info/initscripts.postinst"
+ fi
+
+ mv "$TARGET/sbin/start-stop-daemon" "$TARGET/sbin/start-stop-daemon.REAL"
+ echo \
+"#!/bin/sh
+echo
+echo \"Warning: Fake start-stop-daemon called, doing nothing\"" > "$TARGET/sbin/start-stop-daemon"
+ chmod 755 "$TARGET/sbin/start-stop-daemon"
+
+ setup_dselect_method apt
+
+ smallyes '' |
+ (in_target_failmsg CONF_REQ_FAIL "Failure while configuring required packages." "" \
+ dpkg --status-fd 8 --configure --pending --force-configure-any --force-depends 8>&1 1>&7 |
+ dpkg_progress $baseprog $bases CONFREQ "Configuring required packages" CONFIGURING) 7>&1
+
+ baseprog=0
+ bases="$(set -- $base; echo $#)"
+
+ info UNPACKBASE "Unpacking the base system..."
+
+ smallyes '' |
+ (repeatn 5 in_target_failmsg INST_BASE_FAIL_FIVE "Failure while installing base packages. This will be re-attempted up to five times." "" \
+ dpkg --status-fd 8 --force-overwrite --force-confold --skip-same-version --unpack $(debfor $base) 8>&1 1>&7 |
+ dpkg_progress $baseprog $bases UNPACKBASE "Unpacking base system" UNPACKING) 7>&1
+
+ info CONFBASE "Configuring the base system..."
+
+ smallyes '' |
+ (repeatn 5 in_target_failmsg CONF_BASE_FAIL_FIVE "Failure while configuring base packages. This will be attempted 5 times." "" \
+ dpkg --status-fd 8 --force-confold --skip-same-version --configure -a 8>&1 1>&7 |
+ dpkg_progress $baseprog $bases CONFBASE "Configuring base system" CONFIGURING) 7>&1
+
+ mv "$TARGET/sbin/start-stop-daemon.REAL" "$TARGET/sbin/start-stop-daemon"
+
+ progress $bases $bases CONFBASE "Configuring base system"
+ info BASESUCCESS "Base system installed successfully."
+}
diff --git a/scripts/eoan b/scripts/eoan
new file mode 120000
index 0000000..3840936
--- /dev/null
+++ b/scripts/eoan
@@ -0,0 +1 @@
+gutsy \ No newline at end of file
diff --git a/scripts/etch b/scripts/etch
new file mode 100644
index 0000000..4cdc4b4
--- /dev/null
+++ b/scripts/etch
@@ -0,0 +1,18 @@
+mirror_style release
+download_style apt
+finddebs_style from-indices
+variants - buildd fakechroot minbase
+default_mirror http://archive.debian.org/debian
+keyring /usr/share/keyrings/debian-archive-removed-keys.gpg
+force_md5
+
+# include common settings
+if [ -e "$DEBOOTSTRAP_DIR/scripts/debian-common" ]; then
+ . "$DEBOOTSTRAP_DIR/scripts/debian-common"
+elif [ -e /debootstrap/debian-common ]; then
+ . /debootstrap/debian-common
+elif [ -e "$DEBOOTSTRAP_DIR/debian-common" ]; then
+ . "$DEBOOTSTRAP_DIR/debian-common"
+else
+ error 1 NOCOMMON "File not found: debian-common"
+fi
diff --git a/scripts/etch-m68k b/scripts/etch-m68k
new file mode 120000
index 0000000..190cf35
--- /dev/null
+++ b/scripts/etch-m68k
@@ -0,0 +1 @@
+etch \ No newline at end of file
diff --git a/scripts/feisty b/scripts/feisty
new file mode 100644
index 0000000..f3b4031
--- /dev/null
+++ b/scripts/feisty
@@ -0,0 +1,190 @@
+case $ARCH in
+ amd64|i386|powerpc|sparc)
+ default_mirror http://old-releases.ubuntu.com/ubuntu
+ ;;
+ *)
+ default_mirror http://ports.ubuntu.com/ubuntu-ports
+ ;;
+esac
+mirror_style release
+download_style apt
+finddebs_style from-indices
+variants - buildd fakechroot
+
+if doing_variant fakechroot; then
+ test "$FAKECHROOT" = "true" || error 1 FAKECHROOTREQ "This variant requires fakechroot environment to be started"
+fi
+
+case $ARCH in
+ alpha|ia64) LIBC="libc6.1" ;;
+ *) LIBC="libc6" ;;
+esac
+
+work_out_debs () {
+ required="$(get_debs Priority: required)"
+
+ if doing_variant -; then
+ #required="$required $(get_debs Priority: important)"
+ # ^^ should be getting debconf here somehow maybe
+ base="$(get_debs Priority: important)"
+ elif doing_variant buildd; then
+ # TODO: add Build-Essential: yes extraoverrides
+ #base="$(get_debs Build-Essential: yes)"
+
+ add () { if [ "$ARCH" = "$1" ]; then eval "$2=\"\$$2 $3\""; fi; }
+
+ base="apt binutils cpio cpp cpp-4.1 dpkg-dev g++ g++-4.1 gcc gcc-4.1 ${LIBC}-dev libdb4.4 libgdbm3 libstdc++6 libstdc++6-4.1-dev linux-libc-dev make patch perl perl-modules"
+
+ add ia64 base "libunwind7-dev"
+ add sparc base "lib64gcc1"
+ add sparc base "libc6-dev-sparc64"
+ add sparc base "libc6-sparc64"
+ elif doing_variant fakechroot; then
+ base="apt"
+ fi
+}
+
+first_stage_install () {
+ extract $required
+
+ mkdir -p "$TARGET/var/lib/dpkg"
+ : >"$TARGET/var/lib/dpkg/status"
+ : >"$TARGET/var/lib/dpkg/available"
+
+ setup_etc
+ if [ ! -e "$TARGET/etc/fstab" ]; then
+ echo '# UNCONFIGURED FSTAB FOR BASE SYSTEM' > "$TARGET/etc/fstab"
+ chown 0:0 "$TARGET/etc/fstab"; chmod 644 "$TARGET/etc/fstab"
+ fi
+
+ setup_devices
+
+ x_feign_install () {
+ local pkg="$1"
+ local deb="$(debfor $pkg)"
+ local ver="$(extract_deb_field "$TARGET/$deb" Version)"
+
+ mkdir -p "$TARGET/var/lib/dpkg/info"
+
+ echo \
+"Package: $pkg
+Version: $ver
+Status: install ok installed" >> "$TARGET/var/lib/dpkg/status"
+
+ touch "$TARGET/var/lib/dpkg/info/${pkg}.list"
+ }
+
+ x_feign_install dpkg
+}
+
+second_stage_install () {
+ x_core_install () {
+ smallyes '' | in_target dpkg --force-depends --install $(debfor "$@")
+ }
+
+ p () {
+ baseprog="$(($baseprog + ${1:-1}))"
+ }
+
+ if doing_variant fakechroot || [ "$CONTAINER" = "docker" ]; then
+ setup_proc_symlink
+ else
+ setup_proc
+ in_target /sbin/ldconfig
+ fi
+
+ DEBIAN_FRONTEND=noninteractive
+ DEBCONF_NONINTERACTIVE_SEEN=true
+ export DEBIAN_FRONTEND DEBCONF_NONINTERACTIVE_SEEN
+
+ baseprog=0
+ bases=7
+
+ p; progress $baseprog $bases INSTCORE "Installing core packages" #1
+ info INSTCORE "Installing core packages..."
+
+ p; progress $baseprog $bases INSTCORE "Installing core packages" #2
+ ln -sf mawk "$TARGET/usr/bin/awk"
+ x_core_install base-files base-passwd
+ p; progress $baseprog $bases INSTCORE "Installing core packages" #3
+ x_core_install dpkg
+
+ if [ ! -e "$TARGET/etc/localtime" ]; then
+ ln -sf /usr/share/zoneinfo/UTC "$TARGET/etc/localtime"
+ fi
+
+ if doing_variant fakechroot; then
+ install_fakechroot_tools
+ fi
+
+ p; progress $baseprog $bases INSTCORE "Installing core packages" #4
+ x_core_install $LIBC
+
+ p; progress $baseprog $bases INSTCORE "Installing core packages" #5
+ x_core_install perl-base
+
+ p; progress $baseprog $bases INSTCORE "Installing core packages" #6
+ rm "$TARGET/usr/bin/awk"
+ x_core_install mawk
+
+ p; progress $baseprog $bases INSTCORE "Installing core packages" #7
+ if doing_variant -; then
+ x_core_install debconf
+ fi
+
+ baseprog=0
+ bases=$(set -- $required; echo $#)
+
+ info UNPACKREQ "Unpacking required packages..."
+
+ smallyes '' |
+ (repeatn 5 in_target_failmsg UNPACK_REQ_FAIL_FIVE "Failure while unpacking required packages. This will be attempted up to five times." "" \
+ dpkg --status-fd 8 --force-depends --unpack $(debfor $required) 8>&1 1>&7 |
+ dpkg_progress $baseprog $bases UNPACKREQ "Unpacking required packages" UNPACKING) 7>&1
+
+ info CONFREQ "Configuring required packages..."
+
+ if doing_variant fakechroot; then
+ # fix initscripts postinst (no mounting possible, and wrong if condition)
+ sed -i '/dpkg.*--compare-versions/ s/\<lt\>/lt-nl/' "$TARGET/var/lib/dpkg/info/initscripts.postinst"
+
+ # kill libdevmapper postinst; it tries to create /dev/mapper/
+ rm "$TARGET/var/lib/dpkg/info/libdevmapper1"*.postinst
+ fi
+
+ mv "$TARGET/sbin/start-stop-daemon" "$TARGET/sbin/start-stop-daemon.REAL"
+ echo \
+"#!/bin/sh
+echo
+echo \"Warning: Fake start-stop-daemon called, doing nothing\"" > "$TARGET/sbin/start-stop-daemon"
+ chmod 755 "$TARGET/sbin/start-stop-daemon"
+
+ setup_dselect_method apt
+
+ smallyes '' |
+ (in_target_failmsg CONF_REQ_FAIL "Failure while configuring required packages." "" \
+ dpkg --status-fd 8 --configure --pending --force-configure-any --force-depends 8>&1 1>&7 |
+ dpkg_progress $baseprog $bases CONFREQ "Configuring required packages" CONFIGURING) 7>&1
+
+ baseprog=0
+ bases="$(set -- $base; echo $#)"
+
+ info UNPACKBASE "Unpacking the base system..."
+
+ smallyes '' |
+ (repeatn 5 in_target_failmsg INST_BASE_FAIL_FIVE "Failure while installing base packages. This will be re-attempted up to five times." "" \
+ dpkg --status-fd 8 --force-overwrite --force-confold --skip-same-version --unpack $(debfor $base) 8>&1 1>&7 |
+ dpkg_progress $baseprog $bases UNPACKBASE "Unpacking base system" UNPACKING) 7>&1
+
+ info CONFBASE "Configuring the base system..."
+
+ smallyes '' |
+ (repeatn 5 in_target_failmsg CONF_BASE_FAIL_FIVE "Failure while configuring base packages. This will be attempted 5 times." "" \
+ dpkg --status-fd 8 --force-confold --skip-same-version --configure -a 8>&1 1>&7 |
+ dpkg_progress $baseprog $bases CONFBASE "Configuring base system" CONFIGURING) 7>&1
+
+ mv "$TARGET/sbin/start-stop-daemon.REAL" "$TARGET/sbin/start-stop-daemon"
+
+ progress $bases $bases CONFBASE "Configuring base system"
+ info BASESUCCESS "Base system installed successfully."
+}
diff --git a/scripts/focal b/scripts/focal
new file mode 120000
index 0000000..3840936
--- /dev/null
+++ b/scripts/focal
@@ -0,0 +1 @@
+gutsy \ No newline at end of file
diff --git a/scripts/groovy b/scripts/groovy
new file mode 120000
index 0000000..3840936
--- /dev/null
+++ b/scripts/groovy
@@ -0,0 +1 @@
+gutsy \ No newline at end of file
diff --git a/scripts/gutsy b/scripts/gutsy
new file mode 100644
index 0000000..10750a8
--- /dev/null
+++ b/scripts/gutsy
@@ -0,0 +1,327 @@
+case $ARCH in
+ amd64|i386)
+ case $SUITE in
+ gutsy|hardy|intrepid|jaunty|karmic|lucid|maverick|natty|oneiric|precise|quantal|raring|saucy|utopic|vivid|wily|yakkety|zesty)
+ default_mirror http://old-releases.ubuntu.com/ubuntu
+ ;;
+ *)
+ default_mirror http://archive.ubuntu.com/ubuntu
+ ;;
+ esac
+ ;;
+ sparc)
+ case $SUITE in
+ gutsy)
+ default_mirror http://old-releases.ubuntu.com/ubuntu
+ ;;
+ *)
+ default_mirror http://ports.ubuntu.com/ubuntu-ports
+ ;;
+ esac
+ ;;
+ *)
+ default_mirror http://ports.ubuntu.com/ubuntu-ports
+ ;;
+esac
+mirror_style release
+download_style apt
+finddebs_style from-indices
+variants - buildd fakechroot minbase
+keyring /usr/share/keyrings/ubuntu-archive-keyring.gpg
+
+if doing_variant fakechroot; then
+ test "$FAKECHROOT" = "true" || error 1 FAKECHROOTREQ "This variant requires fakechroot environment to be started"
+fi
+
+case $ARCH in
+ alpha|ia64) LIBC="libc6.1" ;;
+ kfreebsd-*) LIBC="libc0.1" ;;
+ hurd-*) LIBC="libc0.3" ;;
+ *) LIBC="libc6" ;;
+esac
+
+case $SUITE in
+ gutsy|hardy|intrepid|jaunty|karmic|lucid|maverick|natty|oneiric|precise|quantal|raring|saucy|trusty|utopic|vivid|wily|xenial|yakkety|zesty|artful|bionic|cosmic|disco|eoan|focal|groovy|hirsute) ;;
+ *)
+ # impish+ will use zstd compression, check if supported
+ dpkg_zstd="$(dpkg-deb --help 2>/dev/null | grep ' zstd,' || :)"
+ if [ -z "$EXTRACTOR_OVERRIDE" ] && [ -z "$dpkg_zstd" ]; then
+ info CHOSENEXTRACTOR "%s uses zstd compression, setting --extractor=ar option" "$SUITE"
+ export EXTRACTOR_OVERRIDE=ar
+ fi
+ ;;
+esac
+
+work_out_debs () {
+ required="$(get_debs Priority: required)"
+
+ if doing_variant - || doing_variant fakechroot; then
+ #required="$required $(get_debs Priority: important)"
+ # ^^ should be getting debconf here somehow maybe
+ base="$(get_debs Priority: important)"
+ elif doing_variant buildd; then
+ base="apt build-essential"
+ elif doing_variant minbase; then
+ base="apt"
+ fi
+
+ if doing_variant fakechroot; then
+ # ldd.fake needs binutils
+ required="$required binutils"
+ fi
+
+ case $MIRRORS in
+ https://*)
+ case "$CODENAME" in
+ gutsy|hardy|intrepid|jaunty|karmic|lucid|maverick|natty|oneiric|precise|quantal|raring|saucy|trusty|utopic|vivid|wily|xenial|yakkety|zesty)
+ base="$base apt-transport-https ca-certificates"
+ ;;
+ *)
+ base="$base ca-certificates"
+ ;;
+ esac
+ ;;
+ esac
+
+ # do not install usrmerge in fresh bootstraps
+ # but do print it for germinate to accept it into minimal
+ if [ "$WHAT_TO_DO" = "finddebs printdebs kill_target" ]; then
+ case "$CODENAME" in
+ # "merged-usr" blacklist for past releases
+ gutsy|hardy|intrepid|jaunty|karmic|lucid|maverick|natty|oneiric|precise|quantal|raring|saucy|trusty|utopic|vivid|wily|xenial|yakkety|zesty|artful|bionic|cosmic|disco|eoan|focal|groovy)
+ ;;
+ hirsute)
+ # keep hirsute buildd chroots split-usr to allow for escape hatch
+ if ! doing_variant buildd; then
+ if [ -z "$MERGED_USR" ] || [ "$MERGED_USR" = "yes" ]; then
+ base="$base usrmerge"
+ fi
+ fi
+ ;;
+ *)
+ # all future series post hirsute use merged-usr in buildd chroots too
+ if [ -z "$MERGED_USR" ] || [ "$MERGED_USR" = "yes" ]; then
+ base="$base usrmerge"
+ fi
+ ;;
+ esac
+ fi
+}
+
+first_stage_install () {
+ case "$CODENAME" in
+ # "merged-usr" blacklist for past releases
+ gutsy|hardy|intrepid|jaunty|karmic|lucid|maverick|natty|oneiric|precise|quantal|raring|saucy|trusty|utopic|vivid|wily|xenial|yakkety|zesty|artful|bionic|cosmic)
+ [ -z "$MERGED_USR" ] && MERGED_USR="no"
+ ;;
+ disco|eoan|focal|groovy)
+ # see https://bugs.debian.org/838388
+ EXTRACT_DEB_TAR_OPTIONS="$EXTRACT_DEB_TAR_OPTIONS -k"
+ ;;
+ hirsute)
+ # keep hirsute buildd chroots split-usr to allow for escape hatch
+ if [ -z "$MERGED_USR" ]; then
+ if doing_variant buildd; then
+ MERGED_USR="no"
+ else
+ MERGED_USR="yes"
+ fi
+ fi
+ # see https://bugs.debian.org/838388
+ EXTRACT_DEB_TAR_OPTIONS="$EXTRACT_DEB_TAR_OPTIONS -k"
+ ;;
+ *)
+ # all future series post hirsute use merged-usr in buildd chroots too
+ [ -z "$MERGED_USR" ] && MERGED_USR="yes"
+ # see https://bugs.debian.org/838388
+ EXTRACT_DEB_TAR_OPTIONS="$EXTRACT_DEB_TAR_OPTIONS -k"
+ ;;
+ esac
+
+ extract $required
+ merge_usr
+
+ mkdir -p "$TARGET/var/lib/dpkg"
+ : >"$TARGET/var/lib/dpkg/status"
+ : >"$TARGET/var/lib/dpkg/available"
+
+ setup_etc
+ if [ ! -e "$TARGET/etc/fstab" ]; then
+ echo '# UNCONFIGURED FSTAB FOR BASE SYSTEM' > "$TARGET/etc/fstab"
+ chown 0:0 "$TARGET/etc/fstab"; chmod 644 "$TARGET/etc/fstab"
+ fi
+
+ setup_devices
+
+ if doing_variant fakechroot || [ "$CONTAINER" = "docker" ]; then
+ setup_proc_symlink
+ fi
+}
+
+second_stage_install () {
+ in_target /bin/true
+
+ setup_dynamic_devices
+
+ x_feign_install () {
+ local pkg="$1"
+ local deb="$(debfor $pkg)"
+ local ver="$(in_target dpkg-deb -f "$deb" Version)"
+
+ mkdir -p "$TARGET/var/lib/dpkg/info"
+
+ echo \
+"Package: $pkg
+Version: $ver
+Maintainer: unknown
+Status: install ok installed" >> "$TARGET/var/lib/dpkg/status"
+
+ touch "$TARGET/var/lib/dpkg/info/${pkg}.list"
+ }
+
+ x_feign_install dpkg
+
+ x_core_install () {
+ smallyes '' | in_target dpkg --force-depends --install $(debfor "$@")
+ }
+
+ p () {
+ baseprog="$(($baseprog + ${1:-1}))"
+ }
+
+ if ! doing_variant fakechroot; then
+ setup_proc
+ in_target /sbin/ldconfig
+ fi
+
+ DEBIAN_FRONTEND=noninteractive
+ DEBCONF_NONINTERACTIVE_SEEN=true
+ export DEBIAN_FRONTEND DEBCONF_NONINTERACTIVE_SEEN
+
+ baseprog=0
+ bases=7
+
+ p; progress $baseprog $bases INSTCORE "Installing core packages" #1
+ info INSTCORE "Installing core packages..."
+
+ p; progress $baseprog $bases INSTCORE "Installing core packages" #2
+ ln -sf mawk "$TARGET/usr/bin/awk"
+ x_core_install base-passwd
+ x_core_install base-files
+ p; progress $baseprog $bases INSTCORE "Installing core packages" #3
+ x_core_install dpkg
+
+ if [ ! -e "$TARGET/etc/localtime" ]; then
+ ln -sf /usr/share/zoneinfo/UTC "$TARGET/etc/localtime"
+ fi
+
+ if doing_variant fakechroot; then
+ install_fakechroot_tools
+ fi
+
+ p; progress $baseprog $bases INSTCORE "Installing core packages" #4
+ x_core_install $LIBC
+
+ p; progress $baseprog $bases INSTCORE "Installing core packages" #5
+ x_core_install perl-base
+
+ p; progress $baseprog $bases INSTCORE "Installing core packages" #6
+ rm "$TARGET/usr/bin/awk"
+ x_core_install mawk
+
+ p; progress $baseprog $bases INSTCORE "Installing core packages" #7
+ if doing_variant -; then
+ x_core_install debconf
+ fi
+
+ baseprog=0
+ bases=$(set -- $required; echo $#)
+
+ info UNPACKREQ "Unpacking required packages..."
+
+ exec 7>&1
+
+ smallyes '' |
+ (repeatn 5 in_target_failmsg UNPACK_REQ_FAIL_FIVE "Failure while unpacking required packages. This will be attempted up to five times." "" \
+ dpkg --status-fd 8 --force-depends --unpack $(debfor $required) 8>&1 1>&7 || echo EXITCODE $?) |
+ dpkg_progress $baseprog $bases UNPACKREQ "Unpacking required packages" UNPACKING
+
+ info CONFREQ "Configuring required packages..."
+
+ if doing_variant fakechroot && [ -e "$TARGET/var/lib/dpkg/info/initscripts.postinst" ]
+ then
+ # fix initscripts postinst (no mounting possible, and wrong if condition)
+ sed -i '/dpkg.*--compare-versions/ s/\<lt\>/lt-nl/' "$TARGET/var/lib/dpkg/info/initscripts.postinst"
+ fi
+
+ echo \
+"#!/bin/sh
+exit 101" > "$TARGET/usr/sbin/policy-rc.d"
+ chmod 755 "$TARGET/usr/sbin/policy-rc.d"
+
+ mv "$TARGET/sbin/start-stop-daemon" "$TARGET/sbin/start-stop-daemon.REAL"
+ echo \
+"#!/bin/sh
+echo
+echo \"Warning: Fake start-stop-daemon called, doing nothing\"" > "$TARGET/sbin/start-stop-daemon"
+ chmod 755 "$TARGET/sbin/start-stop-daemon"
+
+ if [ -x "$TARGET/sbin/initctl" ]; then
+ mv "$TARGET/sbin/initctl" "$TARGET/sbin/initctl.REAL"
+ echo \
+"#!/bin/sh
+if [ \"\$1\" = version ]; then exec /sbin/initctl.REAL \"\$@\"; fi
+echo
+echo \"Warning: Fake initctl called, doing nothing\"" > "$TARGET/sbin/initctl"
+ chmod 755 "$TARGET/sbin/initctl"
+ fi
+
+ setup_dselect_method apt
+
+ smallyes '' |
+ (in_target_failmsg CONF_REQ_FAIL "Failure while configuring required packages." "" \
+ dpkg --status-fd 8 --configure --pending --force-configure-any --force-depends 8>&1 1>&7 || echo EXITCODE $?) |
+ dpkg_progress $baseprog $bases CONFREQ "Configuring required packages" CONFIGURING
+
+ baseprog=0
+ bases="$(set -- $base; echo $#)"
+
+ info UNPACKBASE "Unpacking the base system..."
+
+ setup_available $required $base
+ done_predeps=
+ while predep=$(get_next_predep); do
+ # We have to resolve dependencies of pre-dependencies manually because
+ # dpkg --predep-package doesn't handle this.
+ predep=$(without "$(without "$(resolve_deps $predep)" "$required")" "$done_predeps")
+ # XXX: progress is tricky due to how dpkg_progress works
+ # -- cjwatson 2009-07-29
+ p; smallyes '' |
+ in_target dpkg --force-overwrite --force-confold --skip-same-version --install $(debfor $predep)
+ base=$(without "$base" "$predep")
+ done_predeps="$done_predeps $predep"
+ done
+
+ if [ -n "$base" ]; then
+ smallyes '' |
+ (repeatn 5 in_target_failmsg INST_BASE_FAIL_FIVE "Failure while installing base packages. This will be re-attempted up to five times." "" \
+ dpkg --status-fd 8 --force-overwrite --force-confold --skip-same-version --unpack $(debfor $base) 8>&1 1>&7 || echo EXITCODE $?) |
+ dpkg_progress $baseprog $bases UNPACKBASE "Unpacking base system" UNPACKING
+
+ info CONFBASE "Configuring the base system..."
+
+ smallyes '' |
+ (repeatn 5 in_target_failmsg CONF_BASE_FAIL_FIVE "Failure while configuring base packages. This will be re-attempted up to five times." "" \
+ dpkg --status-fd 8 --force-confold --skip-same-version --configure -a 8>&1 1>&7 || echo EXITCODE $?) |
+ dpkg_progress $baseprog $bases CONFBASE "Configuring base system" CONFIGURING
+ fi
+
+ if [ -x "$TARGET/sbin/initctl.REAL" ]; then
+ mv "$TARGET/sbin/initctl.REAL" "$TARGET/sbin/initctl"
+ fi
+ mv "$TARGET/sbin/start-stop-daemon.REAL" "$TARGET/sbin/start-stop-daemon"
+ rm -f "$TARGET/usr/sbin/policy-rc.d"
+
+ progress $bases $bases CONFBASE "Configuring base system"
+ info BASESUCCESS "Base system installed successfully."
+}
diff --git a/scripts/hardy b/scripts/hardy
new file mode 120000
index 0000000..3840936
--- /dev/null
+++ b/scripts/hardy
@@ -0,0 +1 @@
+gutsy \ No newline at end of file
diff --git a/scripts/hirsute b/scripts/hirsute
new file mode 120000
index 0000000..4c4810d
--- /dev/null
+++ b/scripts/hirsute
@@ -0,0 +1 @@
+groovy \ No newline at end of file
diff --git a/scripts/hoary b/scripts/hoary
new file mode 100644
index 0000000..e5fe9fc
--- /dev/null
+++ b/scripts/hoary
@@ -0,0 +1,179 @@
+default_mirror http://old-releases.ubuntu.com/ubuntu
+mirror_style release
+download_style apt
+
+case $ARCH in
+ ia64) LIBC="libc6.1" ;;
+ *) LIBC="libc6" ;;
+esac
+
+work_out_debs () {
+
+ required="base-files base-passwd bash bsdutils coreutils libacl1 libattr1 debconf debconf-i18n liblocale-gettext-perl libtext-iconv-perl libtext-wrapi18n-perl libtext-charwidth-perl debianutils diff dpkg dselect libblkid1 e2fsprogs e2fslibs libcomerr2 libss2 libuuid1 findutils grep gzip hostname libcap1 libdb1-compat libdb3 libncurses5 libnewt0.51 libpam-modules libpam-runtime libpam0g libpopt0 login makedev mawk mount ncurses-base ncurses-bin passwd perl-base procps python-minimal python2.4-minimal sed slang1a-utf8 lsb-base initscripts sysvinit sysv-rc tar util-linux zlib1g whiptail libgcc1 gcc-3.3-base libstdc++5"
+
+ base="adduser alsa-base alsa-utils apt apt-utils aptitude at base-config bind9-host bsdmainutils bzip2 console-common console-data console-tools cpio cramfsprogs cron dash dhcp3-client dhcp3-common discover1 discover1-data dmsetup dnsutils dosfstools ed eject ethtool evms evms-ncurses fdutils file ftp gettext-base gnupg grepmap groff-base hdparm hotplug ifrename ifupdown info initrd-tools iproute iptables iputils-arping iputils-ping iputils-tracepath jfsutils klogd less libasound2 libbz2-1.0 libconsole libdb4.2 libdevmapper1.00 libdiscover1 libdns16 libevms-2.5 libfribidi0 libgc1 libgcrypt11 libgdbm3 libgnutls11 libgpg-error0 libgpmg1 libidn11 libisc7 libiw27 libldap2 liblockfile1 liblwres1 liblzo1 libmagic1 libncursesw5 libopencdk8 libparted1.6-12 libpcap0.8 libreiserfs0.3-0 libsasl2 libsasl2-modules libsigc++-1.2-5c102 libssl0.9.7 libtasn1-2 libusb-0.1-4 libwrap0 locales logrotate lsb-release lshw lsof lvm-common lvm10 lvm2 mailx man-db manpages mdadm mii-diag mime-support module-init-tools mtr-tiny mutt nano net-tools netbase netcat netkit-inetd ntp ntpdate openssh-client parted pciutils popularity-contest postfix postfix-tls ppp pppconfig pppoeconf psmisc python python2.4 reiser4progs reiserfsprogs reportbug rsync strace sudo sysklogd tcpd tcpdump telnet time ubuntu-base ubuntu-keyring udev usbutils vim vim-common w3m wget wireless-tools xfsprogs"
+
+ without_package () {
+ echo "$2" | tr ' ' '\n' | grep -v "^$1$" | tr '\n' ' '
+ }
+ subst_package () {
+ echo "$3" | tr ' ' '\n' | sed "s/^$1$/$2/" | tr '\n' ' '
+ }
+
+ case $ARCH in
+ "i386")
+ required="$required libc6 libc6-i686"
+ base="$base dmidecode libelfg0 ltrace memtest86+ libreadline4"
+ ;;
+ "powerpc")
+ required="$required libc6 libreadline4"
+ base="$base hfsplus hfsutils libelfg0 libhfsp0 ltrace mac-fdisk pmac-fdisk powerpc-utils"
+ ;;
+ "amd64")
+ required="$required libc6"
+ base="$base dmidecode libelfg0 ltrace memtest86+ libreadline4"
+ ;;
+ "ia64")
+ required="$required libc6.1 libunwind7"
+ base="$base dmidecode libreadline4"
+ ;;
+ "sparc")
+ required="$required libc6"
+ base="$base lib64gcc1 libc6-sparc64 libreadline4"
+ ;;
+ *)
+ # who knows?
+ ;;
+ esac
+}
+
+install_debs () {
+ first_stage_install
+ second_stage_install
+}
+
+first_stage_install () {
+ extract $required
+
+ mkdir -p "$TARGET/var/lib/dpkg"
+ : >"$TARGET/var/lib/dpkg/status"
+ echo >"$TARGET/var/lib/dpkg/available"
+
+ setup_etc
+ if [ ! -e "$TARGET/etc/fstab" ]; then
+ echo '# UNCONFIGURED FSTAB FOR BASE SYSTEM' > "$TARGET/etc/fstab"
+ chown 0:0 "$TARGET/etc/fstab"; chmod 644 "$TARGET/etc/fstab"
+ fi
+
+ setup_devices
+
+ x_feign_install () {
+ local pkg="$1"
+ local deb="$(debfor $pkg)"
+ local ver="$(extract_deb_field "$TARGET/$deb" Version)"
+
+ mkdir -p "$TARGET/var/lib/dpkg/info"
+
+ echo \
+"Package: $pkg
+Version: $ver
+Status: install ok installed" >> "$TARGET/var/lib/dpkg/status"
+
+ touch "$TARGET/var/lib/dpkg/info/${pkg}.list"
+ }
+
+ x_feign_install dpkg
+}
+
+second_stage_install () {
+ x_core_install () {
+ smallyes '' | in_target dpkg --force-depends --install $(debfor "$@")
+ }
+ p () {
+ baseprog="$(($baseprog + ${1:-1}))"
+ }
+
+ DEBIAN_FRONTEND=noninteractive
+ DEBCONF_NONINTERACTIVE_SEEN=true
+ export DEBIAN_FRONTEND DEBCONF_NONINTERACTIVE_SEEN
+
+ baseprog=0
+ bases=7
+
+ setup_proc
+ umount_on_exit /.dev
+ umount_on_exit /dev
+ in_target /sbin/ldconfig
+
+ p; progress $baseprog $bases INSTCORE "Installing core packages" #1
+ info INSTCORE "Installing core packages..."
+
+ p; progress $baseprog $bases INSTCORE "Installing core packages" #2
+ ln -sf mawk "$TARGET/usr/bin/awk"
+ x_core_install base-files base-passwd
+ p; progress $baseprog $bases INSTCORE "Installing core packages" #3
+ x_core_install dpkg
+
+ if [ ! -e "$TARGET/etc/localtime" ]; then
+ ln -sf /usr/share/zoneinfo/UTC "$TARGET/etc/localtime"
+ fi
+
+ p; progress $baseprog $bases INSTCORE "Installing core packages" #4
+ x_core_install $LIBC
+
+ p; progress $baseprog $bases INSTCORE "Installing core packages" #5
+ x_core_install perl-base
+ p; progress $baseprog $bases INSTCORE "Installing core packages" #6
+ rm "$TARGET/usr/bin/awk"
+ x_core_install mawk
+ p; progress $baseprog $bases INSTCORE "Installing core packages" #7
+ x_core_install debconf
+
+ baseprog=0
+ bases="$(set -- $required; echo $#)"
+
+ info UNPACKREQ "Unpacking required packages..."
+
+ smallyes '' | (repeatn 5 in_target_failmsg UNPACK_REQ_FAIL_FIVE "Failure while unpacking required packages. This will be attempted up to five times." "" dpkg --status-fd 8 --force-depends --unpack $(debfor $required) 8>&1 1>&7 | dpkg_progress $baseprog $bases UNPACKREQ "Unpacking required packages" UNPACKING) 7>&1
+
+ baseprog=0
+
+ info CONFREQ "Configuring required packages..."
+
+ mv "$TARGET/sbin/start-stop-daemon" "$TARGET/sbin/start-stop-daemon.REAL"
+ echo \
+"#!/bin/sh
+echo
+echo \"Warning: Fake start-stop-daemon called, doing nothing\"" > "$TARGET/sbin/start-stop-daemon"
+ chmod 755 "$TARGET/sbin/start-stop-daemon"
+
+ setup_dselect_method apt
+ #on_exit "(in_target_nofail umount /dev/pts) || true"
+
+ smallyes '' | (in_target_failmsg CONF_REQ_FAIL "Failure while configuring required packages." "" dpkg --status-fd 8 --configure --pending --force-configure-any --force-depends 8>&1 1>&7 | dpkg_progress $baseprog $bases CONFREQ "Configuring required packages" CONFIGURING) 7>&1
+
+ baseprog=0
+ bases="$(set -- $base; echo $#)"
+
+ info UNPACKBASE "Unpacking the base system..."
+
+ smallyes '' | (repeatn 5 in_target_failmsg INST_BASE_FAIL_FIVE "Failure while installing base packages. This will be re-attempted up to five times." "" dpkg --status-fd 8 --force-auto-select --force-overwrite --force-confold --skip-same-version --unpack $(debfor $base) 8>&1 1>&7 | dpkg_progress $baseprog $bases UNPACKBASE "Unpacking base system" UNPACKING) 7>&1
+
+ baseprog=0
+
+ info CONFBASE "Configuring the base system..."
+
+ mv "$TARGET/usr/sbin/sendmail" "$TARGET/usr/sbin/sendmail.REAL"
+ ln -s /bin/true "$TARGET/usr/sbin/sendmail"
+
+ smallyes '' | (repeatn 5 in_target_failmsg CONF_BASE_FAIL_FIVE "Failure while configuring base packages. This will be attempted 5 times." "" dpkg --status-fd 8 --force-confold --skip-same-version --configure -a 8>&1 1>&7 | dpkg_progress $baseprog $bases CONFBASE "Configuring base system" CONFIGURING) 7>&1
+
+ rm -f "$TARGET/usr/sbin/sendmail"
+ mv "$TARGET/usr/sbin/sendmail.REAL" "$TARGET/usr/sbin/sendmail"
+
+ mv "$TARGET/sbin/start-stop-daemon.REAL" "$TARGET/sbin/start-stop-daemon"
+
+ progress $bases $bases CONFBASE "Configuring base system"
+ info BASESUCCESS "Base system installed successfully."
+}
+
diff --git a/scripts/hoary.buildd b/scripts/hoary.buildd
new file mode 100644
index 0000000..8d10d80
--- /dev/null
+++ b/scripts/hoary.buildd
@@ -0,0 +1,159 @@
+default_mirror http://old-releases.ubuntu.com/ubuntu
+mirror_style release
+download_style apt
+
+LIBC=libc6
+if [ "$ARCH" = "alpha" ] || [ "$ARCH" = "ia64" ]; then
+ LIBC="libc6.1"
+fi
+
+work_out_debs () {
+ required="base-files base-passwd bash bsdutils build-essential coreutils debianutils diff dpkg dselect e2fslibs e2fsprogs fakeroot findutils gcc-3.3-base grep gzip hostname initscripts libacl1 libattr1 libblkid1 libc6 libcap1 libcomerr2 libdb1-compat libdb3 libgcc1 libncurses5 libpam-modules libpam-runtime libpam0g libss2 libstdc++5 libuuid1 login lsb-base mawk mount ncurses-base ncurses-bin passwd perl-base pkgstriptranslations python-minimal python2.4-minimal sed slang1a-utf8 sysv-rc sysvinit tar util-linux zlib1g"
+
+ base="apt binutils cpio cpp cpp-3.3 dpkg-dev g++ g++-3.3 gcc gcc-3.3 libc6-dev libdb4.2 libgdbm3 libstdc++5-3.3-dev linux-kernel-headers make patch perl perl-modules"
+
+ without_package () {
+ echo "$2" | tr ' ' '\n' | grep -v "^$1$" | tr '\n' ' '
+ }
+ subst_package () {
+ echo "$3" | tr ' ' '\n' | sed "s/^$1$/$2/" | tr '\n' ' '
+ }
+
+ case $ARCH in
+ "amd64")
+ ;;
+ "i386")
+ ;;
+ "powerpc")
+ ;;
+ "ia64")
+ required="$(subst_package "libc6" "libc6.1" "$required")"
+ base="$(subst_package "libc6-dev" "libc6.1-dev" "$base")"
+ base="$base libunwind7 libunwind7-dev"
+ ;;
+
+ # Unsupported architectures:
+ "alpha")
+ required="$(subst_package "libc6" "libc6.1" "$required")"
+ base="$(subst_package "libc6-dev" "libc6.1-dev" "$base")"
+ ;;
+ *)
+ # who knows?
+ ;;
+ esac
+}
+
+install_debs () {
+ first_stage_install
+ second_stage_install
+}
+
+first_stage_install () {
+ extract $required
+
+ mkdir -p "$TARGET/var/lib/dpkg"
+ : >"$TARGET/var/lib/dpkg/status"
+ echo >"$TARGET/var/lib/dpkg/available"
+
+ setup_etc
+ if [ ! -e "$TARGET/etc/fstab" ]; then
+ echo '# UNCONFIGURED FSTAB FOR BASE SYSTEM' > "$TARGET/etc/fstab"
+ chown 0:0 "$TARGET/etc/fstab"; chmod 644 "$TARGET/etc/fstab"
+ fi
+
+ setup_devices
+
+ x_feign_install () {
+ local pkg="$1"
+ local deb="$(debfor $pkg)"
+ local ver="$(extract_deb_field "$TARGET/$deb" Version)"
+
+ mkdir -p "$TARGET/var/lib/dpkg/info"
+
+ echo \
+"Package: $pkg
+Version: $ver
+Status: install ok installed" >> "$TARGET/var/lib/dpkg/status"
+
+ touch "$TARGET/var/lib/dpkg/info/${pkg}.list"
+ }
+
+ x_feign_install dpkg
+}
+
+second_stage_install () {
+ x_core_install () {
+ smallyes '' | in_target dpkg --force-depends --install $(debfor "$@")
+ }
+ p () {
+ baseprog="$(($baseprog + ${1:-1}))"
+ }
+
+ DEBIAN_FRONTEND=noninteractive
+ export DEBIAN_FRONTEND
+
+ baseprog=0
+ bases=40
+
+ setup_proc
+ in_target /sbin/ldconfig
+
+ p; progress $baseprog $bases INSTCORE "Installing core packages" #1
+ info INSTCORE "Installing core packages..."
+
+ p; progress $baseprog $bases INSTCORE "Installing core packages" #2
+ ln -sf mawk "$TARGET/usr/bin/awk"
+ x_core_install base-files base-passwd
+ p; progress $baseprog $bases INSTCORE "Installing core packages" #3
+ x_core_install dpkg
+
+ if [ ! -e "$TARGET/etc/localtime" ]; then
+ ln -sf /usr/share/zoneinfo/UTC "$TARGET/etc/localtime"
+ fi
+
+ p; progress $baseprog $bases INSTCORE "Installing core packages" #4
+ x_core_install $LIBC
+
+ p; progress $baseprog $bases INSTCORE "Installing core packages" #5
+ x_core_install perl-base
+ p; progress $baseprog $bases INSTCORE "Installing core packages" #6
+ rm "$TARGET/usr/bin/awk"
+ x_core_install mawk
+ p; progress $baseprog $bases INSTCORE "Installing core packages" #7
+
+ info UNPACKREQ "Unpacking required packages..."
+
+ p; progress $baseprog $bases INSTCORE "Installing core packages" #8
+ smallyes '' | repeatn 5 in_target_failmsg UNPACK_REQ_FAIL_FIVE "Failure while unpacking required packages. This will be attempted up to five times." "" dpkg --force-depends --unpack $(debfor $required)
+ p 10; progress $baseprog $bases INSTCORE "Installing core packages" #18
+
+ info CONFREQ "Configuring required packages..."
+
+ mv "$TARGET/sbin/start-stop-daemon" "$TARGET/sbin/start-stop-daemon.REAL"
+ echo \
+"#!/bin/sh
+echo
+echo \"Warning: Fake start-stop-daemon called, doing nothing\"" > "$TARGET/sbin/start-stop-daemon"
+ chmod 755 "$TARGET/sbin/start-stop-daemon"
+
+ setup_dselect_method apt
+ #on_exit "in_target_nofail umount /dev/pts"
+
+ p; progress $baseprog $bases INSTCORE "Installing core packages" #19
+ smallyes '' | in_target_failmsg CONF_REQ_FAIL "Failure while configuring required packages." "" dpkg --configure --pending --force-configure-any --force-depends
+ p 10; progress $baseprog $bases INSTCORE "Installing core packages" #29
+
+ info INSTCORE "Installing base packages..."
+
+ p; progress $baseprog $bases INSTCORE "Installing core packages" #30
+ smallyes '' | repeatn 5 in_target_failmsg INST_BASE_FAIL_FIVE "Failure while installing base packages. This will be re-attempted up to five times." "" dpkg --force-auto-select --force-overwrite --force-confold --skip-same-version --unpack $(debfor $base)
+
+ smallyes '' | repeatn 5 in_target_failmsg CONF_BASE_FAIL_FIVE "Failure while configuring base packages. This will be attempted 5 times." "" dpkg --force-confold --skip-same-version --configure -a
+
+ p 9; progress $baseprog $bases INSTCORE "Installing core packages" #39
+
+ mv "$TARGET/sbin/start-stop-daemon.REAL" "$TARGET/sbin/start-stop-daemon"
+
+ progress $bases $bases INSTCORE "Installing core packages" #40
+ info BASESUCCESS "Base system installed successfully."
+}
diff --git a/scripts/impish b/scripts/impish
new file mode 120000
index 0000000..3840936
--- /dev/null
+++ b/scripts/impish
@@ -0,0 +1 @@
+gutsy \ No newline at end of file
diff --git a/scripts/intrepid b/scripts/intrepid
new file mode 120000
index 0000000..3840936
--- /dev/null
+++ b/scripts/intrepid
@@ -0,0 +1 @@
+gutsy \ No newline at end of file
diff --git a/scripts/jammy b/scripts/jammy
new file mode 120000
index 0000000..3840936
--- /dev/null
+++ b/scripts/jammy
@@ -0,0 +1 @@
+gutsy \ No newline at end of file
diff --git a/scripts/jaunty b/scripts/jaunty
new file mode 120000
index 0000000..3840936
--- /dev/null
+++ b/scripts/jaunty
@@ -0,0 +1 @@
+gutsy \ No newline at end of file
diff --git a/scripts/jessie b/scripts/jessie
new file mode 120000
index 0000000..9a63c96
--- /dev/null
+++ b/scripts/jessie
@@ -0,0 +1 @@
+sid \ No newline at end of file
diff --git a/scripts/jessie-kfreebsd b/scripts/jessie-kfreebsd
new file mode 120000
index 0000000..9a63c96
--- /dev/null
+++ b/scripts/jessie-kfreebsd
@@ -0,0 +1 @@
+sid \ No newline at end of file
diff --git a/scripts/kali b/scripts/kali
new file mode 100644
index 0000000..0da3249
--- /dev/null
+++ b/scripts/kali
@@ -0,0 +1,17 @@
+mirror_style release
+download_style apt
+finddebs_style from-indices
+variants - buildd fakechroot minbase
+keyring /usr/share/keyrings/kali-archive-keyring.gpg
+default_mirror http://http.kali.org/kali
+
+# include common settings
+if [ -e "$DEBOOTSTRAP_DIR/scripts/debian-common" ]; then
+ . "$DEBOOTSTRAP_DIR/scripts/debian-common"
+elif [ -e /debootstrap/debian-common ]; then
+ . /debootstrap/debian-common
+elif [ -e "$DEBOOTSTRAP_DIR/debian-common" ]; then
+ . "$DEBOOTSTRAP_DIR/debian-common"
+else
+ error 1 NOCOMMON "File not found: debian-common"
+fi
diff --git a/scripts/kali-dev b/scripts/kali-dev
new file mode 120000
index 0000000..e0bd9f8
--- /dev/null
+++ b/scripts/kali-dev
@@ -0,0 +1 @@
+kali \ No newline at end of file
diff --git a/scripts/kali-last-snapshot b/scripts/kali-last-snapshot
new file mode 120000
index 0000000..e0bd9f8
--- /dev/null
+++ b/scripts/kali-last-snapshot
@@ -0,0 +1 @@
+kali \ No newline at end of file
diff --git a/scripts/kali-rolling b/scripts/kali-rolling
new file mode 120000
index 0000000..e0bd9f8
--- /dev/null
+++ b/scripts/kali-rolling
@@ -0,0 +1 @@
+kali \ No newline at end of file
diff --git a/scripts/karmic b/scripts/karmic
new file mode 120000
index 0000000..3840936
--- /dev/null
+++ b/scripts/karmic
@@ -0,0 +1 @@
+gutsy \ No newline at end of file
diff --git a/scripts/kinetic b/scripts/kinetic
new file mode 120000
index 0000000..3840936
--- /dev/null
+++ b/scripts/kinetic
@@ -0,0 +1 @@
+gutsy \ No newline at end of file
diff --git a/scripts/lenny b/scripts/lenny
new file mode 120000
index 0000000..190cf35
--- /dev/null
+++ b/scripts/lenny
@@ -0,0 +1 @@
+etch \ No newline at end of file
diff --git a/scripts/lucid b/scripts/lucid
new file mode 120000
index 0000000..3840936
--- /dev/null
+++ b/scripts/lucid
@@ -0,0 +1 @@
+gutsy \ No newline at end of file
diff --git a/scripts/maverick b/scripts/maverick
new file mode 120000
index 0000000..3840936
--- /dev/null
+++ b/scripts/maverick
@@ -0,0 +1 @@
+gutsy \ No newline at end of file
diff --git a/scripts/natty b/scripts/natty
new file mode 120000
index 0000000..3840936
--- /dev/null
+++ b/scripts/natty
@@ -0,0 +1 @@
+gutsy \ No newline at end of file
diff --git a/scripts/oldoldstable b/scripts/oldoldstable
new file mode 120000
index 0000000..9a63c96
--- /dev/null
+++ b/scripts/oldoldstable
@@ -0,0 +1 @@
+sid \ No newline at end of file
diff --git a/scripts/oldstable b/scripts/oldstable
new file mode 120000
index 0000000..9a63c96
--- /dev/null
+++ b/scripts/oldstable
@@ -0,0 +1 @@
+sid \ No newline at end of file
diff --git a/scripts/oneiric b/scripts/oneiric
new file mode 120000
index 0000000..3840936
--- /dev/null
+++ b/scripts/oneiric
@@ -0,0 +1 @@
+gutsy \ No newline at end of file
diff --git a/scripts/potato b/scripts/potato
new file mode 100644
index 0000000..4867c61
--- /dev/null
+++ b/scripts/potato
@@ -0,0 +1,106 @@
+mirror_style release
+download_style apt var-state
+default_mirror http://archive.debian.org/debian
+keyring /usr/share/keyrings/debian-archive-removed-keys.gpg
+force_md5
+
+LIBC=libc6
+if [ "$ARCH" = alpha ]; then
+ LIBC="libc6.1"
+fi
+
+work_out_debs () {
+ required="base-files base-passwd bash bsdutils debconf-tiny debianutils diff dpkg e2fsprogs fileutils findutils grep gzip hostname ldso libc6 libdb2 libgdbmg1 libncurses5 libnewt0 libpam-modules libpam-runtime libpam0g libpopt0 libreadline4 libstdc++2.10 login makedev mawk modutils mount ncurses-base ncurses-bin passwd perl-5.005-base perl-base procps sed shellutils slang1 sysklogd sysvinit tar textutils update util-linux whiptail"
+
+ base="adduser ae apt base-config elvis-tiny fbset fdutils gettext-base console-data console-tools console-tools-libs libdb2 libwrap0 locales modconf netbase ftp ppp pppconfig pump tasksel tcpd textutils telnet xviddetect"
+
+ without_package () {
+ echo "$2" | tr ' ' '\n' | grep -v "^$1$" | tr '\n' ' '
+ }
+
+ case $ARCH in
+ "alpha")
+ required="$(without_package "libc6" "$required") libc6.1"
+ ;;
+ "i386")
+ base="$base fdflush isapnptools lilo mbr pciutils pcmcia-cs psmisc setserial syslinux"
+ ;;
+ *)
+ # other arches may have special needs not yet represented here
+ # oh well, Potato is old
+ esac
+}
+
+first_stage_install () {
+ extract $required
+
+ :> "$TARGET/var/lib/dpkg/status"
+ echo > "$TARGET/var/lib/dpkg/available"
+
+ setup_etc
+ echo '# UNCONFIGURED FSTAB FOR BASE SYSTEM' > "$TARGET/etc/fstab"
+ chown 0:0 "$TARGET/etc/fstab"; chmod 644 "$TARGET/etc/fstab"
+
+ x_feign_install () {
+ local pkg=$1
+ local deb="$(debfor $pkg)"
+ local ver="$(extract_deb_field "$TARGET/$deb" Version)"
+
+ mkdir -p "$TARGET/var/lib/dpkg/info"
+
+echo \
+"Package: $pkg
+Version: $ver
+Status: install ok installed" >> "$TARGET/var/lib/dpkg/status"
+
+ touch "$TARGET/var/lib/dpkg/info/${pkg}.list"
+ }
+
+ setup_devices
+
+ x_feign_install dpkg
+
+ if [ -e "$TARGET/usr/bin/perl-5.005.dist" ]; then
+ mv "$TARGET/usr/bin/perl-5.005.dist" "$TARGET/usr/bin/perl-5.005"
+ fi
+ if [ ! -e "$TARGET/usr/bin/perl" ]; then
+ ln -sf perl-5.005 "$TARGET/usr/bin/perl"
+ fi
+}
+
+second_stage_install () {
+ x_core_install () {
+ in_target dpkg --force-depends --install $(debfor "$@")
+ }
+
+ export DEBIAN_FRONTEND=Noninteractive
+
+ setup_proc
+ ln "$TARGET/sbin/ldconfig.new" "$TARGET/sbin/ldconfig"
+ in_target /sbin/ldconfig
+
+ x_core_install base-files base-passwd ldso
+ x_core_install dpkg
+
+ ln -sf /usr/share/zoneinfo/UTC "$TARGET/etc/localtime"
+ x_core_install $LIBC
+
+ smallyes '' | x_core_install perl-5.005-base
+ x_core_install mawk
+ x_core_install debconf-tiny
+
+ in_target dpkg-preconfigure $(debfor $required $base)
+
+ repeatn 5 in_target dpkg --force-depends --unpack $(debfor $required)
+
+ mv "$TARGET/sbin/start-stop-daemon" "$TARGET/sbin/start-stop-daemon.REAL"
+ cp "$TARGET/bin/true" "$TARGET/sbin/start-stop-daemon"
+
+ setup_dselect_method apt
+
+ in_target dpkg --configure --pending --force-configure-any --force-depends
+
+ smallyes '' | repeatn 5 in_target dpkg --force-auto-select --force-overwrite --skip-same-version --install $(debfor $base)
+
+ mv "$TARGET/sbin/start-stop-daemon.REAL" "$TARGET/sbin/start-stop-daemon"
+}
diff --git a/scripts/precise b/scripts/precise
new file mode 120000
index 0000000..3840936
--- /dev/null
+++ b/scripts/precise
@@ -0,0 +1 @@
+gutsy \ No newline at end of file
diff --git a/scripts/quantal b/scripts/quantal
new file mode 120000
index 0000000..3840936
--- /dev/null
+++ b/scripts/quantal
@@ -0,0 +1 @@
+gutsy \ No newline at end of file
diff --git a/scripts/raring b/scripts/raring
new file mode 120000
index 0000000..3840936
--- /dev/null
+++ b/scripts/raring
@@ -0,0 +1 @@
+gutsy \ No newline at end of file
diff --git a/scripts/sarge b/scripts/sarge
new file mode 100644
index 0000000..051e5a4
--- /dev/null
+++ b/scripts/sarge
@@ -0,0 +1,220 @@
+mirror_style release
+download_style apt
+default_mirror http://archive.debian.org/debian
+keyring /usr/share/keyrings/debian-archive-removed-keys.gpg
+force_md5
+
+LIBC=libc6
+if [ "$ARCH" = "alpha" ] || [ "$ARCH" = "ia64" ]; then
+ LIBC="libc6.1"
+fi
+
+work_out_debs () {
+
+ required="base-files base-passwd bash bsdutils coreutils libacl1 libattr1 debconf debconf-i18n liblocale-gettext-perl libtext-wrapi18n-perl libtext-charwidth-perl debianutils diff dpkg dselect libblkid1 e2fsprogs e2fslibs libcomerr2 libss2 libuuid1 findutils grep gzip hostname libcap1 libc6 libdb1-compat libdb3 libncurses5 libnewt0.51 libpam-modules libpam-runtime libpam0g libperl5.8 libpopt0 login makedev mawk modutils mount ncurses-base ncurses-bin passwd perl-base procps sed slang1a-utf8 initscripts sysvinit sysv-rc tar util-linux whiptail libgcc1 gcc-3.3-base libstdc++5"
+
+ base="adduser apt apt-utils libdb4.2 at base-config aptitude libsigc++-1.2-5c102 bsdmainutils console-common console-tools libconsole console-data cpio cron dhcp-client ed exim4 exim4-base exim4-config exim4-daemon-light libgcrypt11 libgnutls11 libgpg-error0 libopencdk8 libtasn1-2 fdutils gettext-base groff-base ifupdown info klogd libssl0.9.7 liblzo1 zlib1g liblockfile1 libpcre3 libwrap0 logrotate mailx man-db libgdbm3 manpages nano net-tools netbase netkit-inetd iputils-ping nvi ppp pppconfig pppoe pppoeconf libpcap0.7 sysklogd tasksel libtextwrap1 tcpd telnet libtext-iconv-perl wget"
+
+ without_package () {
+ echo "$2" | tr ' ' '\n' | grep -v "^$1$" | tr '\n' ' '
+ }
+ subst_package () {
+ echo "$3" | tr ' ' '\n' | sed "s/^$1$/$2/" | tr '\n' ' '
+ }
+
+ IPFWTOOL=iptables
+
+ case $ARCH in
+ "alpha")
+ required="$(subst_package "libc6" "libc6.1" "$required")"
+ base="$base pciutils"
+ IPFWTOOL="ipchains"
+ ;;
+ "arm")
+ base="$base libgpmg1"
+ IPFWTOOL="ipchains iptables"
+ ;;
+ "i386")
+ required="$(without_package "libperl5.8" "$required")"
+ base="$base pciutils psmisc"
+ IPFWTOOL="ipchains iptables"
+ ;;
+ "ia64")
+ required="$(subst_package "libc6" "libc6.1" "$required") libreadline4"
+ base="$base elilo efibootmgr dosfstools libparted1.6-12 parted"
+ ;;
+ "m68k")
+ required="$required libreadline4"
+ base="$base atari-bootstrap atari-fdisk amiga-fdisk eject mac-fdisk pmac-fdisk-cross vmelilo"
+ IPFWTOOL="ipchains"
+ ;;
+ "powerpc")
+ required="$required libreadline4"
+ base="$base mac-fdisk amiga-fdisk psmisc powerpc-utils pciutils hfsutils"
+ IPFWTOOL="ipchains iptables"
+ ;;
+ "sparc")
+ base="$base silo eject pciutils sparc-utils"
+ IPFWTOOL="ipchains iptables"
+ ;;
+ "mips")
+ base="$base dvhtool pciutils"
+ ;;
+ "mipsel")
+ base="$base pciutils"
+ ;;
+ "hppa")
+ base="$base palo pciutils"
+ required="$(without_package "libstdc++2.10-glibc2.2" "$required")"
+ ;;
+ s390|s390x)
+ # base-config depends on console-tools and console-data
+ # so we can't exclude them although they are useless on s390
+ base="$base s390-tools telnetd devfsd"
+ base="$(without_package "console-tools-libs" "$base")"
+ base="$(without_package "fdutils" "$base")"
+ base="$(without_package "ppp" "$base")"
+ base="$(without_package "pppconfig" "$base")"
+ base="$(without_package "pppoe" "$base")"
+ base="$(without_package "pppoeconf" "$base")"
+ ;;
+ sh*)
+ base="$base libstdc++3 gcc-3.0-base"
+ base="$(without_package "fdutils" "$base")"
+ required="$required libgcc1"
+ required="$(without_package "libstdc++2.10-glibc2.2" "$required")"
+ ;;
+ "amd64")
+ base="$base pciutils psmisc"
+ IPFWTOOL="iptables"
+ ;;
+ *)
+ # who knows?
+ ;;
+ esac
+
+ base="$base $IPFWTOOL"
+}
+
+first_stage_install () {
+ extract $required
+
+ mkdir -p "$TARGET/var/lib/dpkg"
+ : >"$TARGET/var/lib/dpkg/status"
+ echo >"$TARGET/var/lib/dpkg/available"
+
+ setup_etc
+ if [ ! -e "$TARGET/etc/fstab" ]; then
+ echo '# UNCONFIGURED FSTAB FOR BASE SYSTEM' > "$TARGET/etc/fstab"
+ chown 0:0 "$TARGET/etc/fstab"; chmod 644 "$TARGET/etc/fstab"
+ fi
+
+ setup_devices
+
+ x_feign_install () {
+ local pkg="$1"
+ local deb="$(debfor $pkg)"
+ local ver="$(extract_deb_field "$TARGET/$deb" Version)"
+
+ mkdir -p "$TARGET/var/lib/dpkg/info"
+
+ echo \
+"Package: $pkg
+Version: $ver
+Status: install ok installed" >> "$TARGET/var/lib/dpkg/status"
+
+ touch "$TARGET/var/lib/dpkg/info/${pkg}.list"
+ }
+
+ x_feign_install dpkg
+}
+
+second_stage_install () {
+ x_core_install () {
+ smallyes '' | in_target dpkg --force-depends --install $(debfor "$@")
+ }
+
+ p () {
+ baseprog="$(($baseprog + ${1:-1}))"
+ }
+
+ setup_proc
+ in_target /sbin/ldconfig
+
+ DEBIAN_FRONTEND=noninteractive
+ DEBCONF_NONINTERACTIVE_SEEN=true
+ export DEBIAN_FRONTEND DEBCONF_NONINTERACTIVE_SEEN
+
+ baseprog=0
+ bases=40
+
+ p; progress $baseprog $bases INSTBASE "Installing base system" #1
+ info INSTCORE "Installing core packages..."
+
+ p; progress $baseprog $bases INSTBASE "Installing base system" #2
+ ln -sf mawk "$TARGET/usr/bin/awk"
+ x_core_install base-files base-passwd
+ p; progress $baseprog $bases INSTBASE "Installing base system" #3
+ x_core_install dpkg
+
+ if [ ! -e "$TARGET/etc/localtime" ]; then
+ ln -sf /usr/share/zoneinfo/UTC "$TARGET/etc/localtime"
+ fi
+
+ p; progress $baseprog $bases INSTBASE "Installing base system" #4
+ x_core_install $LIBC
+
+ p; progress $baseprog $bases INSTBASE "Installing base system" #5
+ x_core_install perl-base
+ p; progress $baseprog $bases INSTBASE "Installing base system" #6
+ rm "$TARGET/usr/bin/awk"
+ x_core_install mawk
+ p; progress $baseprog $bases INSTBASE "Installing base system" #7
+ x_core_install debconf
+
+ info UNPACKREQ "Unpacking required packages..."
+
+ p; progress $baseprog $bases INSTBASE "Installing base system" #8
+ smallyes '' | repeatn 5 in_target_failmsg UNPACK_REQ_FAIL_FIVE "Failure while unpacking required packages. This will be attempted up to five times." "" dpkg --force-depends --unpack $(debfor $required)
+ p 10; progress $baseprog $bases INSTBASE "Installing base system" #18
+
+ info CONFREQ "Configuring required packages..."
+
+ mv "$TARGET/sbin/start-stop-daemon" "$TARGET/sbin/start-stop-daemon.REAL"
+ echo \
+"#!/bin/sh
+echo
+echo \"Warning: Fake start-stop-daemon called, doing nothing\"" > "$TARGET/sbin/start-stop-daemon"
+ chmod 755 "$TARGET/sbin/start-stop-daemon"
+
+ setup_dselect_method apt
+
+ p; progress $baseprog $bases INSTBASE "Installing base system" #19
+ smallyes '' | in_target_failmsg CONF_REQ_FAIL "Failure while configuring required packages." "" dpkg --configure --pending --force-configure-any --force-depends
+ p 10; progress $baseprog $bases INSTBASE "Installing base system" #29
+
+# if [ ! -e "$TARGET/etc/exim/exim.conf" ]; then
+# mkdir -p "$TARGET/etc/exim"
+# touch "$TARGET/etc/exim/exim.conf"
+# fi
+
+ info INSTBASE "Installing base packages..."
+
+ p; progress $baseprog $bases INSTBASE "Installing base system" #30
+ smallyes '' | repeatn 5 in_target_failmsg INST_BASE_FAIL_FIVE "Failure while installing base packages. This will be re-attempted up to five times." "" dpkg --force-auto-select --force-overwrite --force-confold --skip-same-version --unpack $(debfor $base)
+
+ rm -f "$TARGET/usr/sbin/sendmail"
+ ln -sf /bin/true "$TARGET/usr/sbin/sendmail"
+
+ smallyes '' | repeatn 5 in_target_failmsg CONF_BASE_FAIL_FIVE "Failure while configuring base packages. This will be attempted 5 times." "" dpkg --force-confold --skip-same-version --configure -a
+
+ rm -f "$TARGET/usr/sbin/sendmail"
+ ln -sf exim4 "$TARGET/usr/sbin/sendmail"
+
+ p 9; progress $baseprog $bases INSTBASE "Installing base system" #39
+
+ mv "$TARGET/sbin/start-stop-daemon.REAL" "$TARGET/sbin/start-stop-daemon"
+
+ progress $bases $bases INSTBASE "Installing base system" #40
+ info BASESUCCESS "Base system installed successfully."
+}
diff --git a/scripts/sarge.buildd b/scripts/sarge.buildd
new file mode 100644
index 0000000..c674672
--- /dev/null
+++ b/scripts/sarge.buildd
@@ -0,0 +1,166 @@
+mirror_style release
+download_style apt
+force_md5
+
+LIBC=libc6
+if [ "$ARCH" = "alpha" ] || [ "$ARCH" = "ia64" ]; then
+ LIBC="libc6.1"
+fi
+
+work_out_debs () {
+
+ required="base-files base-passwd bash bsdutils coreutils debianutils diff dpkg dselect e2fslibs e2fsprogs findutils gcc-3.3-base grep gzip hostname initscripts libacl1 libattr1 libblkid1 libc6 libcap1 libcomerr2 libdb1-compat libdb3 libgcc1 libncurses5 libpam-modules libpam-runtime libpam0g libss2 libstdc++5 libuuid1 login mawk mount ncurses-base ncurses-bin passwd perl-base sed slang1a-utf8 sysv-rc sysvinit tar util-linux zlib1g"
+
+ base="apt binutils cpio cpp cpp-3.3 dpkg-dev g++ g++-3.3 gcc gcc-3.3 libc6-dev libdb4.2 libgdbm3 libstdc++5-3.3-dev linux-kernel-headers make patch perl perl-modules"
+
+ without_package () {
+ echo "$2" | tr ' ' '\n' | grep -v "^$1$" | tr '\n' ' '
+ }
+ subst_package () {
+ echo "$3" | tr ' ' '\n' | sed "s/^$1$/$2/" | tr '\n' ' '
+ }
+
+ case $ARCH in
+ "alpha")
+ required="$(subst_package "libc6" "libc6.1" "$required")"
+ base="$(subst_package "libc6-dev" "libc6.1-dev" "$base")"
+ ;;
+ "arm")
+ ;;
+ "i386")
+ ;;
+ "ia64")
+ required="$(subst_package "libc6" "libc6.1" "$required")"
+ base="$(subst_package "libc6-dev" "libc6.1-dev" "$base")"
+ ;;
+ "m68k")
+ ;;
+ "powerpc")
+ ;;
+ "sparc")
+ ;;
+ "mips")
+ ;;
+ "mipsel")
+ ;;
+ "hppa")
+ ;;
+ s390|s390x)
+ ;;
+ sh*)
+ ;;
+ *)
+ # who knows?
+ ;;
+ esac
+}
+
+first_stage_install () {
+ extract $required
+
+ mkdir -p "$TARGET/var/lib/dpkg"
+ : >"$TARGET/var/lib/dpkg/status"
+ echo >"$TARGET/var/lib/dpkg/available"
+
+ setup_etc
+ if [ ! -e "$TARGET/etc/fstab" ]; then
+ echo '# UNCONFIGURED FSTAB FOR BASE SYSTEM' > "$TARGET/etc/fstab"
+ chown 0:0 "$TARGET/etc/fstab"; chmod 644 "$TARGET/etc/fstab"
+ fi
+
+ setup_devices
+
+ x_feign_install () {
+ local pkg="$1"
+ local deb="$(debfor $pkg)"
+ local ver="$(extract_deb_field "$TARGET/$deb" Version)"
+
+ mkdir -p "$TARGET/var/lib/dpkg/info"
+
+ echo \
+"Package: $pkg
+Version: $ver
+Status: install ok installed" >> "$TARGET/var/lib/dpkg/status"
+
+ touch "$TARGET/var/lib/dpkg/info/${pkg}.list"
+ }
+
+ x_feign_install dpkg
+}
+
+second_stage_install () {
+ x_core_install () {
+ smallyes '' | in_target dpkg --force-depends --install $(debfor "$@")
+ }
+
+ p () {
+ baseprog="$(($baseprog + ${1:-1}))"
+ }
+
+ setup_proc
+ in_target /sbin/ldconfig
+
+ DEBIAN_FRONTEND=noninteractive
+ export DEBIAN_FRONTEND
+
+ baseprog=0
+ bases=40
+
+ p; progress $baseprog $bases INSTBASE "Installing base system" #1
+ info INSTCORE "Installing core packages..."
+
+ p; progress $baseprog $bases INSTBASE "Installing base system" #2
+ ln -sf mawk "$TARGET/usr/bin/awk"
+ x_core_install base-files base-passwd
+ p; progress $baseprog $bases INSTBASE "Installing base system" #3
+ x_core_install dpkg
+
+ if [ ! -e "$TARGET/etc/localtime" ]; then
+ ln -sf /usr/share/zoneinfo/UTC "$TARGET/etc/localtime"
+ fi
+
+ p; progress $baseprog $bases INSTBASE "Installing base system" #4
+ x_core_install $LIBC
+
+ p; progress $baseprog $bases INSTBASE "Installing base system" #5
+ x_core_install perl-base
+ p; progress $baseprog $bases INSTBASE "Installing base system" #6
+ rm "$TARGET/usr/bin/awk"
+ x_core_install mawk
+ p; progress $baseprog $bases INSTBASE "Installing base system" #7
+
+ info UNPACKREQ "Unpacking required packages..."
+
+ p; progress $baseprog $bases INSTBASE "Installing base system" #8
+ smallyes '' | repeatn 5 in_target_failmsg UNPACK_REQ_FAIL_FIVE "Failure while unpacking required packages. This will be attempted up to five times." "" dpkg --force-depends --unpack $(debfor $required)
+ p 10; progress $baseprog $bases INSTBASE "Installing base system" #18
+
+ info CONFREQ "Configuring required packages..."
+
+ mv "$TARGET/sbin/start-stop-daemon" "$TARGET/sbin/start-stop-daemon.REAL"
+ echo \
+"#!/bin/sh
+echo
+echo \"Warning: Fake start-stop-daemon called, doing nothing\"" > "$TARGET/sbin/start-stop-daemon"
+ chmod 755 "$TARGET/sbin/start-stop-daemon"
+
+ setup_dselect_method apt
+
+ p; progress $baseprog $bases INSTBASE "Installing base system" #19
+ smallyes '' | in_target_failmsg CONF_REQ_FAIL "Failure while configuring required packages." "" dpkg --configure --pending --force-configure-any --force-depends
+ p 10; progress $baseprog $bases INSTBASE "Installing base system" #29
+
+ info INSTBASE "Installing base packages..."
+
+ p; progress $baseprog $bases INSTBASE "Installing base system" #30
+ smallyes '' | repeatn 5 in_target_failmsg INST_BASE_FAIL_FIVE "Failure while installing base packages. This will be re-attempted up to five times." "" dpkg --force-auto-select --force-overwrite --force-confold --skip-same-version --unpack $(debfor $base)
+
+ smallyes '' | repeatn 5 in_target_failmsg CONF_BASE_FAIL_FIVE "Failure while configuring base packages. This will be attempted 5 times." "" dpkg --force-confold --skip-same-version --configure -a
+
+ p 9; progress $baseprog $bases INSTBASE "Installing base system" #39
+
+ mv "$TARGET/sbin/start-stop-daemon.REAL" "$TARGET/sbin/start-stop-daemon"
+
+ progress $bases $bases INSTBASE "Installing base system" #40
+ info BASESUCCESS "Base system installed successfully."
+}
diff --git a/scripts/sarge.fakechroot b/scripts/sarge.fakechroot
new file mode 100644
index 0000000..c2e8566
--- /dev/null
+++ b/scripts/sarge.fakechroot
@@ -0,0 +1,171 @@
+test "$FAKECHROOT" = "true" || error 1 FAKECHROOTREQ "This variant requires fakechroot environment to be started"
+
+mirror_style release
+download_style apt
+force_md5
+
+LIBC=libc6
+if [ "$ARCH" = "alpha" ] || [ "$ARCH" = "ia64" ]; then
+ LIBC="libc6.1"
+fi
+
+work_out_debs () {
+
+ required="base-files base-passwd bash bsdutils coreutils debianutils diff dpkg dselect e2fslibs e2fsprogs findutils gcc-3.3-base grep gzip hostname initscripts libacl1 libattr1 libblkid1 libc6 libcap1 libcomerr2 libdb1-compat libdb3 libgcc1 libncurses5 libpam-modules libpam-runtime libpam0g libss2 libstdc++5 libuuid1 login mawk mount ncurses-base ncurses-bin passwd perl-base sed slang1a-utf8 sysv-rc sysvinit tar util-linux zlib1g"
+
+ base="apt binutils cpio cpp cpp-3.3 dpkg-dev g++ g++-3.3 gcc gcc-3.3 libc6-dev libdb4.2 libgdbm3 libstdc++5-3.3-dev linux-kernel-headers make patch perl perl-modules"
+
+ without_package () {
+ echo "$2" | tr ' ' '\n' | grep -v "^$1$" | tr '\n' ' '
+ }
+ subst_package () {
+ echo "$3" | tr ' ' '\n' | sed "s/^$1$/$2/" | tr '\n' ' '
+ }
+
+ required="$required binutils fakechroot"
+ base="$(without_package "binutils" "$base")"
+
+ case $ARCH in
+ "alpha")
+ required="$(subst_package "libc6" "libc6.1" "$required")"
+ base="$(subst_package "libc6-dev" "libc6.1-dev" "$base")"
+ ;;
+ "arm")
+ ;;
+ "i386")
+ ;;
+ "ia64")
+ required="$(subst_package "libc6" "libc6.1" "$required")"
+ base="$(subst_package "libc6-dev" "libc6.1-dev" "$base")"
+ ;;
+ "m68k")
+ ;;
+ "powerpc")
+ ;;
+ "sparc")
+ ;;
+ "mips")
+ ;;
+ "mipsel")
+ ;;
+ "hppa")
+ ;;
+ s390|s390x)
+ ;;
+ sh*)
+ ;;
+ *)
+ # who knows?
+ ;;
+ esac
+}
+
+first_stage_install () {
+ extract $required
+
+ mkdir -p "$TARGET/var/lib/dpkg"
+ : >"$TARGET/var/lib/dpkg/status"
+ : >"$TARGET/var/lib/dpkg/available"
+
+ setup_etc
+ if [ ! -e "$TARGET/etc/fstab" ]; then
+ echo '# UNCONFIGURED FSTAB FOR BASE SYSTEM' > "$TARGET/etc/fstab"
+ chown 0:0 "$TARGET/etc/fstab"; chmod 644 "$TARGET/etc/fstab"
+ fi
+
+ x_feign_install () {
+ local pkg="$1"
+ local deb="$(debfor $pkg)"
+ local ver="$(extract_deb_field "$TARGET/$deb" Version)"
+
+ mkdir -p "$TARGET/var/lib/dpkg/info"
+
+ echo \
+"Package: $pkg
+Version: $ver
+Status: install ok installed" >> "$TARGET/var/lib/dpkg/status"
+
+ touch "$TARGET/var/lib/dpkg/info/${pkg}.list"
+ }
+
+ x_feign_install dpkg
+}
+
+second_stage_install () {
+ x_core_install () {
+ smallyes '' | in_target dpkg --force-depends --install $(debfor "$@")
+ }
+
+ p () {
+ baseprog="$(($baseprog + ${1:-1}))"
+ }
+
+ setup_devices_fakechroot
+ setup_proc_symlink
+
+ DEBIAN_FRONTEND=noninteractive
+ export DEBIAN_FRONTEND
+
+ baseprog=0
+ bases=40
+
+ p; progress $baseprog $bases INSTBASE "Installing base system" #1
+ info INSTCORE "Installing core packages..."
+
+ p; progress $baseprog $bases INSTBASE "Installing base system" #2
+ ln -sf mawk "$TARGET/usr/bin/awk"
+ x_core_install base-files base-passwd
+ p; progress $baseprog $bases INSTBASE "Installing base system" #3
+ x_core_install dpkg
+
+ if [ ! -e "$TARGET/etc/localtime" ]; then
+ ln -sf /usr/share/zoneinfo/UTC "$TARGET/etc/localtime"
+ fi
+
+ install_fakechroot_tools
+
+ p; progress $baseprog $bases INSTBASE "Installing base system" #4
+ x_core_install $LIBC
+
+ p; progress $baseprog $bases INSTBASE "Installing base system" #5
+ x_core_install perl-base
+ p; progress $baseprog $bases INSTBASE "Installing base system" #6
+ rm "$TARGET/usr/bin/awk"
+ x_core_install mawk
+ p; progress $baseprog $bases INSTBASE "Installing base system" #7
+
+ info UNPACKREQ "Unpacking required packages..."
+
+ p; progress $baseprog $bases INSTBASE "Installing base system" #8
+ smallyes '' | repeatn 5 in_target_failmsg UNPACK_REQ_FAIL_FIVE "Failure while unpacking required packages. This will be attempted up to five times." "" dpkg --force-depends --unpack $(debfor $required)
+ p 10; progress $baseprog $bases INSTBASE "Installing base system" #18
+
+ info CONFREQ "Configuring required packages..."
+
+ mv "$TARGET/sbin/start-stop-daemon" "$TARGET/sbin/start-stop-daemon.REAL"
+ echo \
+"#!/bin/sh
+echo
+echo \"Warning: Fake start-stop-daemon called, doing nothing\"" > "$TARGET/sbin/start-stop-daemon"
+ chmod 755 "$TARGET/sbin/start-stop-daemon"
+
+ setup_dselect_method apt
+
+ p; progress $baseprog $bases INSTBASE "Installing base system" #19
+ smallyes '' | in_target_failmsg CONF_REQ_FAIL "Failure while configuring required packages." "" dpkg --configure --pending --force-configure-any --force-depends
+ p 10; progress $baseprog $bases INSTBASE "Installing base system" #29
+
+ info INSTBASE "Installing base packages..."
+
+ p; progress $baseprog $bases INSTBASE "Installing base system" #30
+ smallyes '' | repeatn 5 in_target_failmsg INST_BASE_FAIL_FIVE "Failure while installing base packages. This will be re-attempted up to five times." "" dpkg --force-auto-select --force-overwrite --force-confold --skip-same-version --unpack $(debfor $base)
+
+ smallyes '' | repeatn 5 in_target_failmsg CONF_BASE_FAIL_FIVE "Failure while configuring base packages. This will be attempted 5 times." "" dpkg --force-confold --skip-same-version --configure -a
+
+ p 9; progress $baseprog $bases INSTBASE "Installing base system" #39
+
+ mv "$TARGET/sbin/start-stop-daemon.REAL" "$TARGET/sbin/start-stop-daemon"
+
+ progress $bases $bases INSTBASE "Installing base system" #40
+ info BASESUCCESS "Base system installed successfully."
+}
diff --git a/scripts/saucy b/scripts/saucy
new file mode 120000
index 0000000..3840936
--- /dev/null
+++ b/scripts/saucy
@@ -0,0 +1 @@
+gutsy \ No newline at end of file
diff --git a/scripts/sid b/scripts/sid
new file mode 100644
index 0000000..710b74d
--- /dev/null
+++ b/scripts/sid
@@ -0,0 +1,16 @@
+mirror_style release
+download_style apt
+finddebs_style from-indices
+variants - buildd fakechroot minbase
+keyring /usr/share/keyrings/debian-archive-keyring.gpg
+
+# include common settings
+if [ -e "$DEBOOTSTRAP_DIR/scripts/debian-common" ]; then
+ . "$DEBOOTSTRAP_DIR/scripts/debian-common"
+elif [ -e /debootstrap/debian-common ]; then
+ . /debootstrap/debian-common
+elif [ -e "$DEBOOTSTRAP_DIR/debian-common" ]; then
+ . "$DEBOOTSTRAP_DIR/debian-common"
+else
+ error 1 NOCOMMON "File not found: debian-common"
+fi
diff --git a/scripts/squeeze b/scripts/squeeze
new file mode 120000
index 0000000..190cf35
--- /dev/null
+++ b/scripts/squeeze
@@ -0,0 +1 @@
+etch \ No newline at end of file
diff --git a/scripts/stable b/scripts/stable
new file mode 120000
index 0000000..9a63c96
--- /dev/null
+++ b/scripts/stable
@@ -0,0 +1 @@
+sid \ No newline at end of file
diff --git a/scripts/stretch b/scripts/stretch
new file mode 120000
index 0000000..9a63c96
--- /dev/null
+++ b/scripts/stretch
@@ -0,0 +1 @@
+sid \ No newline at end of file
diff --git a/scripts/testing b/scripts/testing
new file mode 120000
index 0000000..9a63c96
--- /dev/null
+++ b/scripts/testing
@@ -0,0 +1 @@
+sid \ No newline at end of file
diff --git a/scripts/trixie b/scripts/trixie
new file mode 120000
index 0000000..9a63c96
--- /dev/null
+++ b/scripts/trixie
@@ -0,0 +1 @@
+sid \ No newline at end of file
diff --git a/scripts/trusty b/scripts/trusty
new file mode 120000
index 0000000..3840936
--- /dev/null
+++ b/scripts/trusty
@@ -0,0 +1 @@
+gutsy \ No newline at end of file
diff --git a/scripts/unstable b/scripts/unstable
new file mode 120000
index 0000000..9a63c96
--- /dev/null
+++ b/scripts/unstable
@@ -0,0 +1 @@
+sid \ No newline at end of file
diff --git a/scripts/utopic b/scripts/utopic
new file mode 120000
index 0000000..3840936
--- /dev/null
+++ b/scripts/utopic
@@ -0,0 +1 @@
+gutsy \ No newline at end of file
diff --git a/scripts/vivid b/scripts/vivid
new file mode 120000
index 0000000..3840936
--- /dev/null
+++ b/scripts/vivid
@@ -0,0 +1 @@
+gutsy \ No newline at end of file
diff --git a/scripts/warty b/scripts/warty
new file mode 100644
index 0000000..e21a6d8
--- /dev/null
+++ b/scripts/warty
@@ -0,0 +1,166 @@
+default_mirror http://old-releases.ubuntu.com/ubuntu
+mirror_style release
+download_style apt
+
+LIBC=libc6
+
+work_out_debs () {
+
+ required="base-files base-passwd bash bsdutils coreutils libacl1 libattr1 debconf debconf-i18n liblocale-gettext-perl libtext-iconv-perl libtext-wrapi18n-perl libtext-charwidth-perl debianutils diff dpkg dselect libblkid1 e2fsprogs e2fslibs libcomerr2 libss2 libuuid1 findutils grep gzip hostname libcap1 libc6 libdb1-compat libdb3 libncurses5 libnewt0.51 libpam-modules libpam-runtime libpam0g libpopt0 login makedev mawk modutils mount ncurses-base ncurses-bin passwd perl-base procps sed slang1a-utf8 lsb-base initscripts sysvinit sysv-rc tar util-linux zlib1g whiptail libgcc1 gcc-3.3-base libstdc++5"
+
+ base="adduser alsa-base alsa-utils apt apt-utils aptitude at base-config bind9-host bsdmainutils bzip2 console-common console-data console-tools cpio cramfsprogs cron dash dbus-1 dhcp3-client dhcp3-common discover1 discover1-data dmsetup dnsutils dosfstools ed eject evms evms-ncurses fdutils file ftp gettext-base gnupg groff-base hdparm hotplug ifrename ifupdown info initrd-tools iproute iptables iputils-arping iputils-ping iputils-tracepath jfsutils klogd less libasound2 libatm1 libbz2-1.0 libconsole libdb4.2 libdevmapper1.00 libdiscover1 libdns16 libevms-2.3 libexpat1 libfribidi0 libgc1 libgcrypt7 libgdbm3 libgnutls10 libgpg-error0 libgpmg1 libidn11 libisc7 libiw27 libldap2 liblockfile1 liblwres1 liblzo1 libmagic1 libncursesw5 libopencdk8 libparted1.6-0 libpcap0.7 libpcap0.8 libreiserfs0.3-0 libsasl2 libsigc++-1.2-5c102 libssl0.9.7 libtasn1-2 libusb-0.1-4 libwrap0 locales logrotate lshw lsof ltrace lvm-common lvm10 lvm2 mailx man-db manpages mdadm mii-diag mime-support module-init-tools mtr-tiny mutt nano net-tools netbase netcat netkit-inetd ntp ntpdate openssh-client parted pciutils popularity-contest postfix postfix-tls ppp pppconfig pppoeconf psmisc python python2.3 reiser4progs reiserfsprogs reportbug rsync strace sudo sysklogd tcpd tcpdump telnet time ubuntu-base udev usbutils vim vim-common w3m wget wireless-tools xfsprogs"
+
+ without_package () {
+ echo "$2" | tr ' ' '\n' | grep -v "^$1$" | tr '\n' ' '
+ }
+ subst_package () {
+ echo "$3" | tr ' ' '\n' | sed "s/^$1$/$2/" | tr '\n' ' '
+ }
+
+ case $ARCH in
+ "i386")
+ required="$required libc6-i686"
+ base="$base dmidecode memtest86+ libreadline4"
+ ;;
+ "powerpc")
+ required="$required libreadline4"
+ base="$base hfsplus hfsutils libhfsp0 mac-fdisk pmac-fdisk powerpc-utils"
+ ;;
+ "amd64")
+ base="$base dmidecode libreadline4"
+ ;;
+ *)
+ # who knows?
+ ;;
+ esac
+}
+
+install_debs () {
+ first_stage_install
+ second_stage_install
+}
+
+first_stage_install () {
+ extract $required
+
+ mkdir -p "$TARGET/var/lib/dpkg"
+ : >"$TARGET/var/lib/dpkg/status"
+ echo >"$TARGET/var/lib/dpkg/available"
+
+ setup_etc
+ if [ ! -e "$TARGET/etc/fstab" ]; then
+ echo '# UNCONFIGURED FSTAB FOR BASE SYSTEM' > "$TARGET/etc/fstab"
+ chown 0:0 "$TARGET/etc/fstab"; chmod 644 "$TARGET/etc/fstab"
+ fi
+
+ setup_devices
+
+ x_feign_install () {
+ local pkg="$1"
+ local deb="$(debfor $pkg)"
+ local ver="$(extract_deb_field "$TARGET/$deb" Version)"
+
+ mkdir -p "$TARGET/var/lib/dpkg/info"
+
+ echo \
+"Package: $pkg
+Version: $ver
+Status: install ok installed" >> "$TARGET/var/lib/dpkg/status"
+
+ touch "$TARGET/var/lib/dpkg/info/${pkg}.list"
+ }
+
+ x_feign_install dpkg
+}
+
+second_stage_install () {
+ x_core_install () {
+ smallyes '' | in_target dpkg --force-depends --install $(debfor "$@")
+ }
+
+ p () {
+ baseprog="$(($baseprog + ${1:-1}))"
+ }
+
+ DEBIAN_FRONTEND=noninteractive
+ DEBCONF_NONINTERACTIVE_SEEN=true
+ export DEBIAN_FRONTEND DEBCONF_NONINTERACTIVE_SEEN
+
+ setup_proc
+ in_target /sbin/ldconfig
+
+ baseprog=0
+ bases=7
+
+ p; progress $baseprog $bases INSTCORE "Installing core packages" #1
+ info INSTCORE "Installing core packages..."
+
+ p; progress $baseprog $bases INSTCORE "Installing core packages" #2
+ ln -sf mawk "$TARGET/usr/bin/awk"
+ x_core_install base-files base-passwd
+ p; progress $baseprog $bases INSTCORE "Installing core packages" #3
+ x_core_install dpkg
+
+ if [ ! -e "$TARGET/etc/localtime" ]; then
+ ln -sf /usr/share/zoneinfo/UTC "$TARGET/etc/localtime"
+ fi
+
+ p; progress $baseprog $bases INSTCORE "Installing core packages" #4
+ x_core_install $LIBC
+
+ p; progress $baseprog $bases INSTCORE "Installing core packages" #5
+ x_core_install perl-base
+ p; progress $baseprog $bases INSTCORE "Installing core packages" #6
+ rm "$TARGET/usr/bin/awk"
+ x_core_install mawk
+ p; progress $baseprog $bases INSTCORE "Installing core packages" #7
+ x_core_install debconf
+
+ baseprog=0
+ bases="$(set -- $required; echo $#)"
+
+ info UNPACKREQ "Unpacking required packages..."
+
+ smallyes '' | (repeatn 5 in_target_failmsg UNPACK_REQ_FAIL_FIVE "Failure while unpacking required packages. This will be attempted up to five times." "" dpkg --status-fd 8 --force-depends --unpack $(debfor $required) 8>&1 1>&7 | dpkg_progress $baseprog $bases UNPACKREQ "Unpacking required packages" UNPACKING) 7>&1
+
+ baseprog=0
+
+ info CONFREQ "Configuring required packages..."
+
+ mv "$TARGET/sbin/start-stop-daemon" "$TARGET/sbin/start-stop-daemon.REAL"
+ echo \
+"#!/bin/sh
+echo
+echo \"Warning: Fake start-stop-daemon called, doing nothing\"" > "$TARGET/sbin/start-stop-daemon"
+ chmod 755 "$TARGET/sbin/start-stop-daemon"
+
+ setup_dselect_method apt
+ #on_exit "(in_target_nofail umount /dev/pts) || true"
+
+ smallyes '' | (in_target_failmsg CONF_REQ_FAIL "Failure while configuring required packages." "" dpkg --status-fd 8 --configure --pending --force-configure-any --force-depends 8>&1 1>&7 | dpkg_progress $baseprog $bases CONFREQ "Configuring required packages" CONFIGURING) 7>&1
+
+ baseprog=0
+ bases="$(set -- $base; echo $#)"
+
+ info UNPACKBASE "Unpacking the base system..."
+
+ smallyes '' | (repeatn 5 in_target_failmsg INST_BASE_FAIL_FIVE "Failure while installing base packages. This will be re-attempted up to five times." "" dpkg --status-fd 8 --force-auto-select --force-overwrite --force-confold --skip-same-version --unpack $(debfor $base) 8>&1 1>&7 | dpkg_progress $baseprog $bases UNPACKBASE "Unpacking base system" UNPACKING) 7>&1
+
+ baseprog=0
+
+ info CONFBASE "Configuring the base system..."
+
+ mv "$TARGET/usr/sbin/sendmail" "$TARGET/usr/sbin/sendmail.REAL"
+ ln -s /bin/true "$TARGET/usr/sbin/sendmail"
+
+ smallyes '' | (repeatn 5 in_target_failmsg CONF_BASE_FAIL_FIVE "Failure while configuring base packages. This will be attempted 5 times." "" dpkg --status-fd 8 --force-confold --skip-same-version --configure -a 8>&1 1>&7 | dpkg_progress $baseprog $bases CONFBASE "Configuring base system" CONFIGURING) 7>&1
+
+ rm -f "$TARGET/usr/sbin/sendmail"
+ mv "$TARGET/usr/sbin/sendmail.REAL" "$TARGET/usr/sbin/sendmail"
+
+ mv "$TARGET/sbin/start-stop-daemon.REAL" "$TARGET/sbin/start-stop-daemon"
+
+ progress $bases $bases CONFBASE "Configuring base system"
+ info BASESUCCESS "Base system installed successfully."
+}
+
diff --git a/scripts/warty.buildd b/scripts/warty.buildd
new file mode 100644
index 0000000..09c5467
--- /dev/null
+++ b/scripts/warty.buildd
@@ -0,0 +1,159 @@
+default_mirror http://old-releases.ubuntu.com/ubuntu
+mirror_style release
+download_style apt
+
+LIBC=libc6
+if [ "$ARCH" = "alpha" ] || [ "$ARCH" = "ia64" ]; then
+ LIBC="libc6.1"
+fi
+
+work_out_debs () {
+
+ required="base-files base-passwd bash bsdutils build-essential coreutils debianutils diff dpkg dselect e2fslibs e2fsprogs fakeroot findutils gcc-3.3-base grep gzip hostname initscripts libacl1 libattr1 libblkid1 libc6 libcap1 libcomerr2 libdb1-compat libdb3 libgcc1 libncurses5 libpam-modules libpam-runtime libpam0g libss2 libstdc++5 libuuid1 login lsb-base mawk mount ncurses-base ncurses-bin perl-base sed slang1a-utf8 sysv-rc sysvinit tar util-linux zlib1g"
+
+ base="apt binutils cpio cpp cpp-3.3 dpkg-dev g++ g++-3.3 gcc gcc-3.3 libc6-dev libdb4.2 libgdbm3 libstdc++5-3.3-dev linux-kernel-headers make patch perl perl-modules"
+
+ without_package () {
+ echo "$2" | tr ' ' '\n' | grep -v "^$1$" | tr '\n' ' '
+ }
+ subst_package () {
+ echo "$3" | tr ' ' '\n' | sed "s/^$1$/$2/" | tr '\n' ' '
+ }
+
+ case $ARCH in
+ "amd64")
+ ;;
+ "i386")
+ ;;
+ "powerpc")
+ ;;
+
+ # Unsupported architectures:
+ "alpha")
+ required="$(subst_package "libc6" "libc6.1" "$required")"
+ base="$(subst_package "libc6-dev" "libc6.1-dev" "$base")"
+ ;;
+ "ia64")
+ required="$(subst_package "libc6" "libc6.1" "$required")"
+ base="$(subst_package "libc6-dev" "libc6.1-dev" "$base")"
+ ;;
+ *)
+ # who knows?
+ ;;
+ esac
+}
+
+install_debs () {
+ first_stage_install
+ second_stage_install
+}
+
+first_stage_install () {
+ extract $required
+
+ mkdir -p "$TARGET/var/lib/dpkg"
+ : >"$TARGET/var/lib/dpkg/status"
+ echo >"$TARGET/var/lib/dpkg/available"
+
+ setup_etc
+ if [ ! -e "$TARGET/etc/fstab" ]; then
+ echo '# UNCONFIGURED FSTAB FOR BASE SYSTEM' > "$TARGET/etc/fstab"
+ chown 0:0 "$TARGET/etc/fstab"; chmod 644 "$TARGET/etc/fstab"
+ fi
+
+ setup_devices
+
+ x_feign_install () {
+ local pkg="$1"
+ local deb="$(debfor $pkg)"
+ local ver="$(extract_deb_field "$TARGET/$deb" Version)"
+
+ mkdir -p "$TARGET/var/lib/dpkg/info"
+
+ echo \
+"Package: $pkg
+Version: $ver
+Status: install ok installed" >> "$TARGET/var/lib/dpkg/status"
+
+ touch "$TARGET/var/lib/dpkg/info/${pkg}.list"
+ }
+
+ x_feign_install dpkg
+}
+
+second_stage_install () {
+ x_core_install () {
+ smallyes '' | in_target dpkg --force-depends --install $(debfor "$@")
+ }
+ p () {
+ baseprog="$(($baseprog + ${1:-1}))"
+ }
+
+ DEBIAN_FRONTEND=noninteractive
+ export DEBIAN_FRONTEND
+
+ baseprog=0
+ bases=40
+
+ setup_proc
+ in_target /sbin/ldconfig
+
+ p; progress $baseprog $bases INSTCORE "Installing core packages" #1
+ info INSTCORE "Installing core packages..."
+
+ p; progress $baseprog $bases INSTCORE "Installing core packages" #2
+ ln -sf mawk "$TARGET/usr/bin/awk"
+ x_core_install base-files base-passwd
+ p; progress $baseprog $bases INSTCORE "Installing core packages" #3
+ x_core_install dpkg
+
+ if [ ! -e "$TARGET/etc/localtime" ]; then
+ ln -sf /usr/share/zoneinfo/UTC "$TARGET/etc/localtime"
+ fi
+
+ p; progress $baseprog $bases INSTCORE "Installing core packages" #4
+ x_core_install $LIBC
+
+ p; progress $baseprog $bases INSTCORE "Installing core packages" #5
+ x_core_install perl-base
+ p; progress $baseprog $bases INSTCORE "Installing core packages" #6
+ rm "$TARGET/usr/bin/awk"
+ x_core_install mawk
+ p; progress $baseprog $bases INSTCORE "Installing core packages" #7
+
+ info UNPACKREQ "Unpacking required packages..."
+
+ p; progress $baseprog $bases INSTCORE "Installing core packages" #8
+ smallyes '' | repeatn 5 in_target_failmsg UNPACK_REQ_FAIL_FIVE "Failure while unpacking required packages. This will be attempted up to five times." "" dpkg --force-depends --unpack $(debfor $required)
+ p 10; progress $baseprog $bases INSTCORE "Installing core packages" #18
+
+ info CONFREQ "Configuring required packages..."
+
+ mv "$TARGET/sbin/start-stop-daemon" "$TARGET/sbin/start-stop-daemon.REAL"
+ echo \
+"#!/bin/sh
+echo
+echo \"Warning: Fake start-stop-daemon called, doing nothing\"" > "$TARGET/sbin/start-stop-daemon"
+ chmod 755 "$TARGET/sbin/start-stop-daemon"
+
+ setup_dselect_method apt
+ #on_exit "in_target_nofail umount /dev/pts"
+
+ p; progress $baseprog $bases INSTCORE "Installing core packages" #19
+ smallyes '' | in_target_failmsg CONF_REQ_FAIL "Failure while configuring required packages." "" dpkg --configure --pending --force-configure-any --force-depends
+ p 10; progress $baseprog $bases INSTCORE "Installing core packages" #29
+
+ info INSTCORE "Installing base packages..."
+
+ p; progress $baseprog $bases INSTCORE "Installing core packages" #30
+ smallyes '' | repeatn 5 in_target_failmsg INST_BASE_FAIL_FIVE "Failure while installing base packages. This will be re-attempted up to five times." "" dpkg --force-auto-select --force-overwrite --force-confold --skip-same-version --unpack $(debfor $base)
+
+ smallyes '' | repeatn 5 in_target_failmsg CONF_BASE_FAIL_FIVE "Failure while configuring base packages. This will be attempted 5 times." "" dpkg --force-confold --skip-same-version --configure -a
+
+ p 9; progress $baseprog $bases INSTCORE "Installing core packages" #39
+
+ mv "$TARGET/sbin/start-stop-daemon.REAL" "$TARGET/sbin/start-stop-daemon"
+
+ progress $bases $bases INSTCORE "Installing core packages" #40
+ info BASESUCCESS "Base system installed successfully."
+}
diff --git a/scripts/wheezy b/scripts/wheezy
new file mode 120000
index 0000000..9a63c96
--- /dev/null
+++ b/scripts/wheezy
@@ -0,0 +1 @@
+sid \ No newline at end of file
diff --git a/scripts/wily b/scripts/wily
new file mode 120000
index 0000000..3840936
--- /dev/null
+++ b/scripts/wily
@@ -0,0 +1 @@
+gutsy \ No newline at end of file
diff --git a/scripts/woody b/scripts/woody
new file mode 100644
index 0000000..a72f290
--- /dev/null
+++ b/scripts/woody
@@ -0,0 +1,205 @@
+mirror_style release
+download_style apt
+default_mirror http://archive.debian.org/debian
+keyring /usr/share/keyrings/debian-archive-removed-keys.gpg
+force_md5
+
+LIBC=libc6
+if [ "$ARCH" = "alpha" ] || [ "$ARCH" = "ia64" ]; then
+ LIBC="libc6.1"
+fi
+
+work_out_debs () {
+
+ required="base-files base-passwd bash bsdutils debconf debianutils diff dpkg e2fsprogs fileutils findutils grep gzip hostname libcap1 libc6 libdb2 libdb3 libncurses5 libnewt0 libpam-modules libpam-runtime libpam0g libperl5.6 libpopt0 libreadline4 libstdc++2.10-glibc2.2 login makedev mawk modutils mount ncurses-base ncurses-bin passwd perl-base procps sed shellutils slang1 sysvinit tar textutils util-linux whiptail"
+
+ base="adduser apt apt-utils at base-config bsdmainutils console-common console-tools console-tools-libs console-data cpio cron dhcp-client ed exim fdutils gettext-base groff-base ifupdown info klogd libident libldap2 liblockfile1 libpcre3 libsasl7 libwrap0 logrotate mailx man-db manpages modconf nano net-tools netbase netkit-inetd netkit-ping nvi ppp pppconfig pppoe pppoeconf libpcap0 sysklogd tasksel tcpd telnet"
+
+ without_package () {
+ echo "$2" | tr ' ' '\n' | grep -v "^$1$" | tr '\n' ' '
+ }
+
+ IPFWTOOL=iptables
+
+ case $ARCH in
+ "alpha")
+ required="$(without_package "libc6" "$required") libc6.1"
+ base="$base setserial aboot pciutils"
+ IPFWTOOL="ipchains"
+ ;;
+ "arm")
+ base="$base setserial libgpmg1"
+ IPFWTOOL="ipchains iptables"
+ ;;
+ "i386")
+ required="$(without_package "libperl5.6" "$required") mbr"
+ base="$base lilo pciutils setserial syslinux psmisc pcmcia-cs"
+ IPFWTOOL="ipchains iptables"
+ ;;
+ "ia64")
+ required="$(without_package "libc6" "$required") libc6.1 gcc-2.96-base"
+ base="$base elilo efibootmgr dosfstools libparted1.4 parted"
+ ;;
+ "m68k")
+ base="$base atari-bootstrap atari-fdisk amiga-fdisk eject mac-fdisk pmac-fdisk-cross setserial vmelilo"
+ IPFWTOOL="ipchains"
+ ;;
+ "powerpc")
+ base="$base quik mac-fdisk amiga-fdisk psmisc powerpc-utils setserial pciutils hfsutils yaboot pcmcia-cs"
+ IPFWTOOL="ipchains iptables"
+ ;;
+ "sparc")
+ base="$base silo eject pciutils sparc-utils"
+ IPFWTOOL="ipchains iptables"
+ ;;
+ "mips")
+ base="$base dvhtool pciutils setserial" # pcmcia-cs
+ ;;
+ "mipsel")
+ base="$base delo pciutils setserial" # pcmcia-cs
+ ;;
+ "hppa")
+ base="$base palo libstdc++3 gcc-3.0-base"
+ required="$(without_package "libstdc++2.10-glibc2.2" "$required")"
+ ;;
+ s390|s390x)
+ # base-config depends on console-data and console-common
+ # so we can't exclude them although they are useless on s390
+ base="$base s390-tools telnetd devfsd"
+ base="$(without_package "console-tools" "$base")"
+ base="$(without_package "console-tools-libs" "$base")"
+ base="$(without_package "fdutils" "$base")"
+ base="$(without_package "ppp" "$base")"
+ base="$(without_package "pppconfig" "$base")"
+ base="$(without_package "pppoe" "$base")"
+ base="$(without_package "pppoeconf" "$base")"
+ ;;
+ *)
+ # who knows?
+ ;;
+ esac
+
+ base="$base $IPFWTOOL"
+}
+
+first_stage_install () {
+ extract $required
+
+ mkdir -p "$TARGET/var/lib/dpkg"
+ : >"$TARGET/var/lib/dpkg/status"
+ echo >"$TARGET/var/lib/dpkg/available"
+
+ setup_etc
+ if [ ! -e "$TARGET/etc/fstab" ]; then
+ echo '# UNCONFIGURED FSTAB FOR BASE SYSTEM' > "$TARGET/etc/fstab"
+ chown 0:0 "$TARGET/etc/fstab"; chmod 644 "$TARGET/etc/fstab"
+ fi
+
+ setup_devices
+
+ x_feign_install () {
+ local pkg="$1"
+ local deb="$(debfor $pkg)"
+ local ver="$(extract_deb_field "$TARGET/$deb" Version)"
+
+ mkdir -p "$TARGET/var/lib/dpkg/info"
+
+ echo \
+"Package: $pkg
+Version: $ver
+Status: install ok installed" >> "$TARGET/var/lib/dpkg/status"
+
+ touch "$TARGET/var/lib/dpkg/info/${pkg}.list"
+ }
+
+ x_feign_install dpkg
+}
+
+second_stage_install () {
+ x_core_install () {
+ smallyes '' | in_target dpkg --force-depends --install $(debfor "$@")
+ }
+
+ p () {
+ baseprog="$(($baseprog + ${1:-1}))"
+ }
+
+ setup_proc
+ in_target /sbin/ldconfig
+
+ DEBIAN_FRONTEND=Noninteractive
+ export DEBIAN_FRONTEND
+
+ baseprog=0
+ bases=40
+
+ p; progress $baseprog $bases INSTBASE "Installing base system" #1
+ info INSTCORE "Installing core packages..."
+
+ p; progress $baseprog $bases INSTBASE "Installing base system" #2
+ ln -sf mawk "$TARGET/usr/bin/awk"
+ x_core_install base-files base-passwd
+ p; progress $baseprog $bases INSTBASE "Installing base system" #3
+ x_core_install dpkg
+
+ if [ ! -e "$TARGET/etc/localtime" ]; then
+ ln -sf /usr/share/zoneinfo/UTC "$TARGET/etc/localtime"
+ fi
+
+ p; progress $baseprog $bases INSTBASE "Installing base system" #4
+ x_core_install $LIBC
+
+ p; progress $baseprog $bases INSTBASE "Installing base system" #5
+ x_core_install perl-base
+ p; progress $baseprog $bases INSTBASE "Installing base system" #6
+ rm "$TARGET/usr/bin/awk"
+ x_core_install mawk
+ p; progress $baseprog $bases INSTBASE "Installing base system" #7
+ x_core_install debconf
+
+ info UNPACKREQ "Unpacking required packages..."
+
+ p; progress $baseprog $bases INSTBASE "Installing base system" #8
+ smallyes '' | repeatn 5 in_target_failmsg UNPACK_REQ_FAIL_FIVE "Failure while unpacking required packages. This will be attempted up to five times." "" dpkg --force-depends --unpack $(debfor $required)
+ p 10; progress $baseprog $bases INSTBASE "Installing base system" #18
+
+ info CONFREQ "Configuring required packages..."
+
+ mv "$TARGET/sbin/start-stop-daemon" "$TARGET/sbin/start-stop-daemon.REAL"
+ echo \
+"#!/bin/sh
+echo
+echo \"Warning: Fake start-stop-daemon called, doing nothing\"" > "$TARGET/sbin/start-stop-daemon"
+ chmod 755 "$TARGET/sbin/start-stop-daemon"
+
+ setup_dselect_method apt
+
+ p; progress $baseprog $bases INSTBASE "Installing base system" #19
+ smallyes '' | in_target_failmsg CONF_REQ_FAIL "Failure while configuring required packages." "" dpkg --configure --pending --force-configure-any --force-depends
+ p 10; progress $baseprog $bases INSTBASE "Installing base system" #29
+
+ if [ ! -e "$TARGET/etc/exim/exim.conf" ]; then
+ mkdir -p "$TARGET/etc/exim"
+ touch "$TARGET/etc/exim/exim.conf"
+ fi
+
+ info INSTBASE "Installing base packages..."
+
+ p; progress $baseprog $bases INSTBASE "Installing base system" #30
+ smallyes '' | repeatn 5 in_target_failmsg INST_BASE_FAIL_FIVE "Failure while installing base packages. This will be re-attempted up to five times." "" dpkg --force-auto-select --force-overwrite --force-confold --skip-same-version --unpack $(debfor $base)
+
+ rm -f "$TARGET/usr/sbin/sendmail"
+ ln -sf /bin/true "$TARGET/usr/sbin/sendmail"
+
+ smallyes '' | repeatn 5 in_target_failmsg CONF_BASE_FAIL_FIVE "Failure while configuring base packages. This will be attempted 5 times." "" dpkg --force-confold --skip-same-version --configure -a
+
+ rm -f "$TARGET/usr/sbin/sendmail"
+ ln -sf exim "$TARGET/usr/sbin/sendmail"
+
+ p 9; progress $baseprog $bases INSTBASE "Installing base system" #39
+
+ mv "$TARGET/sbin/start-stop-daemon.REAL" "$TARGET/sbin/start-stop-daemon"
+
+ progress $bases $bases INSTBASE "Installing base system" #40
+ info BASESUCCESS "Base system installed successfully."
+}
diff --git a/scripts/woody.buildd b/scripts/woody.buildd
new file mode 100644
index 0000000..9d61384
--- /dev/null
+++ b/scripts/woody.buildd
@@ -0,0 +1,168 @@
+mirror_style release
+download_style apt
+default_mirror http://archive.debian.org/debian
+keyring /usr/share/keyrings/debian-archive-removed-keys.gpg
+force_md5
+
+LIBC=libc6
+if [ "$ARCH" = "alpha" ] || [ "$ARCH" = "ia64" ]; then
+ LIBC="libc6.1"
+fi
+
+work_out_debs () {
+
+ required="base-files base-passwd bash bsdutils debianutils diff dpkg e2fsprogs fileutils findutils grep gzip hostname libc6 libcap1 libdb3 libgdbmg1 libncurses5 libpam-modules libpam-runtime libpam0g libperl5.6 libstdc++2.10-glibc2.2 login mawk mount ncurses-base ncurses-bin perl-base sed shellutils slang1 sysvinit tar textutils util-linux"
+
+ base="apt binutils cpio cpp cpp-2.95 debconf dpkg-dev g++ g++-2.95 gcc gcc-2.95 libc6-dev libdb2 libstdc++2.10-dev make patch perl perl-modules"
+
+ without_package () {
+ echo "$2" | tr ' ' '\n' | grep -v "^$1$" | tr '\n' ' '
+ }
+
+ case $ARCH in
+ "alpha")
+ required="$(without_package "libc6" "$required") libc6.1"
+ base="$(without_package "libc6-dev" "$base") libc6.1-dev"
+ ;;
+ "arm")
+ ;;
+ "i386")
+ ;;
+ "ia64")
+ required="$(without_package "libc6" "$required") libc6.1 gcc-2.96-base libreadline4"
+ base="$(without_package "cpp-2.95" "$base") cpp-2.96"
+ base="$(without_package "gcc-2.95" "$base") gcc-2.96"
+ base="$(without_package "g++-2.95" "$base") g++-2.96"
+ base="$(without_package "libc6-dev" "$base") libc6.1-dev elilo efibootmgr dosfstools libparted1.4 parted"
+ ;;
+ "m68k")
+ ;;
+ "powerpc")
+ ;;
+ "sparc")
+ ;;
+ "mips")
+ ;;
+ "mipsel")
+ ;;
+ "hppa")
+ ;;
+ s390|s390x)
+ ;;
+ sh*)
+ ;;
+ *)
+ # who knows?
+ ;;
+ esac
+}
+
+first_stage_install () {
+ extract $required
+
+ mkdir -p "$TARGET/var/lib/dpkg"
+ : >"$TARGET/var/lib/dpkg/status"
+ echo >"$TARGET/var/lib/dpkg/available"
+
+ setup_etc
+ if [ ! -e "$TARGET/etc/fstab" ]; then
+ echo '# UNCONFIGURED FSTAB FOR BASE SYSTEM' > "$TARGET/etc/fstab"
+ chown 0:0 "$TARGET/etc/fstab"; chmod 644 "$TARGET/etc/fstab"
+ fi
+
+ setup_devices
+
+ x_feign_install () {
+ local pkg="$1"
+ local deb="$(debfor $pkg)"
+ local ver="$(extract_deb_field "$TARGET/$deb" Version)"
+
+ mkdir -p "$TARGET/var/lib/dpkg/info"
+
+ echo \
+"Package: $pkg
+Version: $ver
+Status: install ok installed" >> "$TARGET/var/lib/dpkg/status"
+
+ touch "$TARGET/var/lib/dpkg/info/${pkg}.list"
+ }
+
+ x_feign_install dpkg
+}
+
+second_stage_install () {
+ x_core_install () {
+ smallyes '' | in_target dpkg --force-depends --install $(debfor "$@")
+ }
+
+ p () {
+ baseprog="$(($baseprog + ${1:-1}))"
+ }
+
+ setup_proc
+ in_target /sbin/ldconfig
+
+ DEBIAN_FRONTEND=noninteractive
+ export DEBIAN_FRONTEND
+
+ baseprog=0
+ bases=40
+
+ p; progress $baseprog $bases INSTBASE "Installing base system" #1
+ info INSTCORE "Installing core packages..."
+
+ p; progress $baseprog $bases INSTBASE "Installing base system" #2
+ ln -sf mawk "$TARGET/usr/bin/awk"
+ x_core_install base-files base-passwd
+ p; progress $baseprog $bases INSTBASE "Installing base system" #3
+ x_core_install dpkg
+
+ if [ ! -e "$TARGET/etc/localtime" ]; then
+ ln -sf /usr/share/zoneinfo/UTC "$TARGET/etc/localtime"
+ fi
+
+ p; progress $baseprog $bases INSTBASE "Installing base system" #4
+ x_core_install $LIBC
+
+ p; progress $baseprog $bases INSTBASE "Installing base system" #5
+ x_core_install perl-base
+ p; progress $baseprog $bases INSTBASE "Installing base system" #6
+ rm "$TARGET/usr/bin/awk"
+ x_core_install mawk
+ p; progress $baseprog $bases INSTBASE "Installing base system" #7
+
+ info UNPACKREQ "Unpacking required packages..."
+
+ p; progress $baseprog $bases INSTBASE "Installing base system" #8
+ smallyes '' | repeatn 5 in_target_failmsg UNPACK_REQ_FAIL_FIVE "Failure while unpacking required packages. This will be attempted up to five times." "" dpkg --force-depends --unpack $(debfor $required)
+ p 10; progress $baseprog $bases INSTBASE "Installing base system" #18
+
+ info CONFREQ "Configuring required packages..."
+
+ mv "$TARGET/sbin/start-stop-daemon" "$TARGET/sbin/start-stop-daemon.REAL"
+ echo \
+"#!/bin/sh
+echo
+echo \"Warning: Fake start-stop-daemon called, doing nothing\"" > "$TARGET/sbin/start-stop-daemon"
+ chmod 755 "$TARGET/sbin/start-stop-daemon"
+
+ setup_dselect_method apt
+
+ p; progress $baseprog $bases INSTBASE "Installing base system" #19
+ smallyes '' | in_target_failmsg CONF_REQ_FAIL "Failure while configuring required packages." "" dpkg --configure --pending --force-configure-any --force-depends
+ p 10; progress $baseprog $bases INSTBASE "Installing base system" #29
+
+ info INSTBASE "Installing base packages..."
+
+ p; progress $baseprog $bases INSTBASE "Installing base system" #30
+ smallyes '' | repeatn 5 in_target_failmsg INST_BASE_FAIL_FIVE "Failure while installing base packages. This will be re-attempted up to five times." "" dpkg --force-auto-select --force-overwrite --force-confold --skip-same-version --unpack $(debfor $base)
+
+ smallyes '' | repeatn 5 in_target_failmsg CONF_BASE_FAIL_FIVE "Failure while configuring base packages. This will be attempted 5 times." "" dpkg --force-confold --skip-same-version --configure -a
+
+ p 9; progress $baseprog $bases INSTBASE "Installing base system" #39
+
+ mv "$TARGET/sbin/start-stop-daemon.REAL" "$TARGET/sbin/start-stop-daemon"
+
+ progress $bases $bases INSTBASE "Installing base system" #40
+ info BASESUCCESS "Base system installed successfully."
+}
diff --git a/scripts/xenial b/scripts/xenial
new file mode 120000
index 0000000..3840936
--- /dev/null
+++ b/scripts/xenial
@@ -0,0 +1 @@
+gutsy \ No newline at end of file
diff --git a/scripts/yakkety b/scripts/yakkety
new file mode 120000
index 0000000..3840936
--- /dev/null
+++ b/scripts/yakkety
@@ -0,0 +1 @@
+gutsy \ No newline at end of file
diff --git a/scripts/zesty b/scripts/zesty
new file mode 120000
index 0000000..3840936
--- /dev/null
+++ b/scripts/zesty
@@ -0,0 +1 @@
+gutsy \ No newline at end of file