exit
fi
if [ -z "$1" ]
- then echo "need arg $1 for chroot to make"
+ then echo "Need arg $1 for chroot to make"
exit
fi
chrootdir="$1"
-echo "creating chroot '$chrootdir'"
+
+if [ -e /opt/chroot/$chrootdir ]; then
+ echo "/opt/chroot/$chrootdir already exists"
+ exit
+fi
+
+
+echo "Creating chroot dir '$chrootdir'"
# Create coriolis chroot dir in /opt
-mkdir -p /opt/chroot/$chrootdir
-# Install debootstrap and schroot via apt
-apt install -y debootstrap schroot
+mkdir /opt/chroot/$chrootdir
+
+# argh apt with broken proxies and unreliable ISPs, getting fed up with it
+if [ -e /tmp/brokenproxy ]; then
+ echo "Temp file containing apt proxy fix configuration already exists, skipping!"
+else
+ cat <<EOF >/tmp/brokenproxy
+APT::Acquire::Retries "20";
+APT::Get::Fix-Broken "true";
+Acquire::http::Pipeline-Depth "0";
+Acquire::http::No-Cache=True;
+Acquire::BrokenProxy=true;
+EOF
+fi
+
+if [ -e /etc/apt/apt.conf.d/80-retries ]; then
+ echo "Host system apt.conf.d already has 80-retries, skipping!"
+else
+ 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
+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
echo "$chrootdir" > /opt/chroot/$chrootdir/etc/debian_chroot
-# Add chroot config to schroot.conf
-cat <<EOF >>/etc/schroot/schroot.conf
-[$chrootdir]
-description=Debian Buster for $chrootdir
-directory=/opt/chroot/$chrootdir
-groups=sbuild-security,$SUDO_USER,users
-type=directory
+# make chroot profile
+mkdir -p /etc/schroot/$chrootdir
+cp /etc/schroot/default/copyfiles /etc/schroot/$chrootdir
+touch /etc/schroot/$chrootdir/nssdatabases
+
+# create special fstab not bind-mounting /home
+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
-echo "Adding the following $chrootdir section to /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:
+
+$schroot_profile
This enables you to chroot into $chrootdir as an unprivileged user by running
'schroot -c $chrootdir /bin/bash'
"
+fi
# Install apt dependencies in the chroot
-schroot -c $chrootdir /bin/bash << EOF
+cd /tmp
+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
# yeah systemd in a chroot? not very funny joke.
apt-get remove -y systemd
echo -e "Added 'export PATH=/usr/lib/ccache:\"\044PATH\"\nexport DISPLAY=:0.0' to /home/$SUDO_USER/.bash_profile to speed up rebuilds"
EOF
-