X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=mk-deb-chroot;h=1c67729b66736ed8105f688c9894aa096a2ee780;hb=32572e55f04ff96cf0d98fd566e93f048fa0afa8;hp=91b0a1e92c5b2abf464e8905362c8857ab323fdc;hpb=8c6ec6194e671554641423f2bc01d304e75f0aae;p=dev-env-setup.git diff --git a/mk-deb-chroot b/mk-deb-chroot index 91b0a1e..1c67729 100755 --- a/mk-deb-chroot +++ b/mk-deb-chroot @@ -4,47 +4,126 @@ if [ "$EUID" -ne 0 ] 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'" -# Setup fstab mount points -cat <> /etc/fstab -/dev /opt/chroot/$chrootdir/dev none bind 0 0 -/dev/pts /opt/chroot/$chrootdir/dev/pts none bind 0 0 -/proc /opt/chroot/$chrootdir/proc none bind 0 0 -/sys /opt/chroot/$chrootdir/sys none bind 0 0 -/tmp /opt/chroot/$chrootdir/tmp none bind 0 0 -EOF + +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 </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.debian.org/debian -# Mount all chroot mount points from fstab -mount /opt/chroot/$chrootdir/dev -mount /opt/chroot/$chrootdir/dev/pts -mount /opt/chroot/$chrootdir/proc -mount /opt/chroot/$chrootdir/sys -mount /opt/chroot/$chrootdir/tmp +/usr/sbin/debootstrap buster /opt/chroot/$chrootdir \ + http://ftp.uk.debian.org/debian echo "$chrootdir" > /opt/chroot/$chrootdir/etc/debian_chroot +# 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=" +# +/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 </etc/schroot/$chrootdir/fstab +$schroot_fstab +EOF + +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 <>/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 -chroot /opt/chroot/$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 \ -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 @@ -53,10 +132,15 @@ apt-get remove -y systemd echo '$SUDO_USER ALL=NOPASSWD: ALL' >> /etc/sudoers.d/$chrootdir # Create user with same UID in the chroot -useradd -m -p `python -c 'import crypt; print crypt.crypt("1234","Fx")'` -s /bin/bash $SUDO_USER -k /etc/skel +useradd -m -p `python3 -c 'import crypt; print (crypt.crypt("1234","Fx"))'` \ + -s /bin/bash $SUDO_USER -k /etc/skel echo -e " Added user ${SUDO_USER} with \e[1;91mpassword: 1234\e[0m" +# add deb-src to sources +echo deb-src http://ftp.debian.org/debian buster main > \ + /etc/apt/sources.list.d/bustersrc.list + echo -e " \e[1;91mPlease use command 'passwd ${SUDO_USER}' to change this immediately after this script is run for security purposes.\e[0m " @@ -68,23 +152,3 @@ chgrp $SUDO_USER /home/$SUDO_USER/.bash_profile echo -e "Added 'export PATH=/usr/lib/ccache:\"\044PATH\"\nexport DISPLAY=:0.0' to /home/$SUDO_USER/.bash_profile to speed up rebuilds" EOF - -# Add chroot config to schroot.conf -cat <>/etc/schroot/schroot.conf -[$chrootdir] -description=Debian Buster for $chrootdir -directory=/opt/chroot/$chrootdir -groups=sbuild-security,$SUDO_USER,users -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 - -This enables you to chroot into $chrootdir as an unprivileged user by running -'schroot -c $chrootdir /bin/bash' -" -