echo "Creating chroot dir '$chrootdir'"
# Create coriolis chroot dir in /opt
-mkdir /opt/chroot/$chrootdir
+mkdir -p /opt/chroot/$chrootdir
# argh apt with broken proxies and unreliable ISPs, getting fed up with it
if [ -e /tmp/brokenproxy ]; then
cp /tmp/brokenproxy /etc/apt/apt.conf.d/80-retries
fi
-# No need to check if exists, this script always runs with new chroot
-cp /tmp/brokenproxy /opt/chroot/$chrootdir/etc/apt/apt.conf.d/80-retries
-
-
# Install debootstrap and schroot
if [ -e /etc/debian_version ]; then
# Debian detected: use apt
- apt install -y debootstrap schroot
+ REQUIRED_PKG="debootstrap"
+ PKG_OK=$(dpkg-query -W --showformat='${Status}\n'\
+ $REQUIRED_PKG|grep "install ok installed")
+ echo Checking for $REQUIRED_PKG: $PKG_OK
+ if [ "" = "$PKG_OK" ]; then
+ apt install -y debootstrap
+ fi
+
+ REQUIRED_PKG="schroot"
+ PKG_OK=$(dpkg-query -W --showformat='${Status}\n'\
+ $REQUIRED_PKG|grep "install ok installed")
+ echo Checking for $REQUIRED_PKG: $PKG_OK
+ if [ "" = "$PKG_OK" ]; then
+ apt install -y schroot
+ fi
elif [ -e /etc/arch-release ]; then
# Arch Linux detected: use pacman
pacman -S --needed debootstrap schroot
fi
-# Install debian/buster chroot using debootstrap
-/usr/sbin/debootstrap buster /opt/chroot/$chrootdir \
- http://ftp.uk.debian.org/debian
+# Debian mirror from where to download packages for the chroot
+CHROOT_DEBIAN_MIRROR=${CHROOT_DEBIAN_MIRROR:-http://ftp.uk.debian.org/debian}
+
+# Install debian/buster chroot using debootstrap,
+# any /etc/ config must be done after this point!
+/usr/sbin/debootstrap buster /opt/chroot/$chrootdir $CHROOT_DEBIAN_MIRROR
+
echo "$chrootdir" > /opt/chroot/$chrootdir/etc/debian_chroot
# make chroot profile
cp /etc/schroot/default/copyfiles /etc/schroot/$chrootdir
touch /etc/schroot/$chrootdir/nssdatabases
+# Copy over brokenproxy apt script to the new chroot environment
+cp /tmp/brokenproxy /opt/chroot/$chrootdir/etc/apt/apt.conf.d/80-retries
+
# create special fstab not bind-mounting /home
-cat <<EOF >/etc/schroot/$chrootdir/fstab
+schroot_fstab="
# <file system> <mount point> <type> <options> <dump> <pass>
/proc /proc none rw,bind 0 0
/sys /sys none rw,bind 0 0
/dev /dev none rw,bind 0 0
/dev/pts /dev/pts none rw,bind 0 0
/tmp /tmp none rw,bind 0 0
+"
+
+cat <<EOF >/etc/schroot/$chrootdir/fstab
+$schroot_fstab
EOF
-if grep -x "\[$chrootdir\]" /etc/schroot/schroot.conf; then
- echo "Found [$chrootdir] section in /etc/schroot/schroot.conf"
-else
- # Add chroot config to schroot.conf
- cat <<EOF >>/etc/schroot/schroot.conf
+echo "Adding the following fstab mounts to /etc/schroot/$chrootdir/fstab:
+
+$schroot_fstab
+
+These rules are for the virtual filesystems used by linux in the chroot env
+"
+
+schroot_profile="
[$chrootdir]
description=Debian Buster for $chrootdir
directory=/opt/chroot/$chrootdir
groups=sbuild-security,$SUDO_USER,users
type=directory
profile=$chrootdir
+"
+
+if grep -x "\[$chrootdir\]" /etc/schroot/schroot.conf; then
+ echo "Found [$chrootdir] section in /etc/schroot/schroot.conf"
+else
+ # Add chroot config to schroot.conf
+ cat <<EOF >>/etc/schroot/schroot.conf
+$schroot_profile
EOF
echo "Adding the following $chrootdir section to /etc/schroot/schroot.conf:
-[$chrootdir]
-description=Debian Buster for $chrootdir
-directory=/opt/chroot/$chrootdir
-groups=sbuild-security,$SUDO_USER,users
-type=directory
+$schroot_profile
This enables you to chroot into $chrootdir as an unprivileged user by running
'schroot -c $chrootdir /bin/bash'
"
fi
+#!!! buster backports is needed for a lot of things
+cat << EOF > /opt/chroot/$chrootdir/etc/apt/sources.list.d/buster_backports.list
+deb http://deb.debian.org/debian buster-backports main
+deb-src http://deb.debian.org/debian buster-backports main
+EOF
+
+# oooo annoying, pin preferences for buster-backports
+# make it low pririty for reproduceability
+cat << EOF > /opt/chroot/$chrootdir/etc/apt/preferences.d/99buster-backports
+Package: *
+Pin: release a=buster-backports
+Pin-Priority: 100
+
+Package: libcurl3-gnutls
+Pin: version 7.64*
+Pin-Priority: 1001
+EOF
+
# Install apt dependencies in the chroot
cd /tmp
-schroot -c $chrootdir /bin/bash << EOF
+schroot -c $chrootdir /bin/bash --directory=/tmp << EOF
echo Installing necessary apt dependencies in the chroot
apt-get update -y
apt-get upgrade -y
apt-get install -y automake binutils-dev build-essential \
-ccache cmake gcc git \
-libtool \
-sysvinit-core \
-sysvinit-utils \
-sudo \
-python2.7 \
-python3 python3-pip \
-python3-setuptools python3-dev
+ ccache cmake gcc git \
+ libtool \
+ sysvinit-core \
+ sysvinit-utils \
+ sudo \
+ python2.7 \
+ python3 python3-pip \
+ python3-setuptools python3-dev \
+ python3-setuptools-scm
# yeah systemd in a chroot? not very funny joke.
apt-get remove -y systemd