#!/bin/sh set -e COMMAND="${1:-enter}" if [ -n "${2}" ] then DISTRIBUTION="$(echo ${2} | awk -F- '{ print $1 }')" else DISTRIBUTION="${2:-sid}" fi if [ -n "${3}" ] then ARCHITECTURE="${3:-$(dpkg --print-architecture)}" else ARCHITECTURE="$(echo ${2} | awk -F- '{ print $2 }')" ARCHITECTURE="${ARCHITECTURE:-amd64}" fi case "${DISTRIBUTION}" in buster*) DERIVATIVE_DISTRIBUTION="engywuck" ;; bullseye*) DERIVATIVE_DISTRIBUTION="fuchur" ;; bookworm*) DERIVATIVE_DISTRIBUTION="graograman" ;; trixie*) DERIVATIVE_DISTRIBUTION="horok" ;; esac MIRROR="debian.ethz.ch" CHROOT="/srv/chroot/${DISTRIBUTION}-${ARCHITECTURE}" Chroot () { if [ "${ARCHITECTURE}" = "$(dpkg --print-architecture)" ] then chroot "${CHROOT}" /usr/bin/env -i HOME="/root" PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" TERM="${TERM}" ${@} else linux32 chroot "${CHROOT}" /usr/bin/env -i HOME="/root" PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" TERM="${TERM}" ${@} fi } case "${COMMAND}" in create) if [ ! -d "${CHROOT}" ] then debootstrap --arch=${ARCHITECTURE} --include=progress-linux ${DISTRIBUTION} "${CHROOT}" http://${MIRROR}/debian else echo "${CHROOT}: file or directory already exists." exit 1 fi # Configure apt cat > "${CHROOT}/etc/apt/apt.conf.d/chroot.conf" << EOF Acquire::PDiffs "false"; APT::Clean-Installed "true"; APT::Install-Recommends "false"; APT::Install-Suggests "false"; EOF cat > "${CHROOT}/etc/apt/sources.list" << EOF deb http://${MIRROR}/debian ${DISTRIBUTION} main contrib non-free EOF case "${DISTRIBUTION}" in sid*) cat >> "${CHROOT}/etc/apt/sources.list" << EOF deb http://${MIRROR}/debian experimental main contrib non-free EOF ;; buster*) cat > "${CHROOT}/etc/apt/sources.list.d/progress-linux.sources" << EOF Types: deb URIs: https://deb.progress-linux.org/packages Suites: ${DERIVATIVE_DISTRIBUTION}-backports Components: main contrib non-free restricted PDiffs: no Signed-By: /usr/share/progress-linux/pgp-keys/apt.progress-linux.org.gpg EOF ;; bullseye*|bookworm*) cat > "${CHROOT}/etc/apt/sources.list.d/progress-linux.sources" << EOF Types: deb URIs: https://deb.progress-linux.org/packages Suites: ${DERIVATIVE_DISTRIBUTION}-backports Components: main contrib non-free restricted PDiffs: no Signed-By: /usr/share/progress-linux/pgp-keys/apt.progress-linux.org.gpg EOF ;; esac # Configure bash cat > "${CHROOT}/etc/profile.d/chroot.sh" << EOF #!/bin/sh alias ls="ls --color=auto" export DEBEMAIL="maintainers@lists.progress-linux.org" export DEBFULLNAME="Progress Linux Maintainers" export LANG="en_US.UTF-8" export LANGUAGE="en_US:en" export LC_ALL="C.UTF-8" EOF # Configure dpkg if [ -e "${CHROOT}/etc/dpkg" ] then cat > "${CHROOT}/etc/dpkg/dpkg.cfg.d/chroot" << EOF force-unsafe-io EOF fi if [ -e "${CHROOT}/sbin/start-stop-daemon" ] then mv "${CHROOT}/sbin/start-stop-daemon" "${CHROOT}/sbin/start-stop-daemon.orig" fi cat > "${CHROOT}/sbin/start-stop-daemon" << EOF #!/bin/sh exit 0 EOF chmod 0755 "${CHROOT}/sbin/start-stop-daemon" # Configure sysv-rc if [ -e "${CHROOT}/usr/sbin/policy-rc.d" ] then mv "${CHROOT}/usr/sbin/policy-rc.d" "${CHROOT}/usr/sbin/policy-rc.d.orig" fi cat > "${CHROOT}/usr/sbin/policy-rc.d" << EOF #!/bin/sh echo "All runlevel operations denied by policy" >&2 exit 101 EOF chmod 0755 "${CHROOT}/usr/sbin/policy-rc.d" # Configure debian echo "${DISTRIBUTION}_${ARCHITECTURE}" > "${CHROOT}/etc/debian_chroot" Chroot apt update Chroot apt upgrade --yes Chroot apt dist-upgrade --yes Chroot apt install --yes \ build-essential debhelper fakeroot eatmydata Chroot apt install --yes \ gnupg sudo wget Chroot apt install --yes \ git rsync ca-certificates wget Chroot apt clean echo "Root password" Chroot "passwd" Chroot "adduser --home /build --ingroup sudo build" echo ". /etc/profile" >> "${CHROOT}/build/.bashrc" case $(cat /etc/hostname) in all*) BASH_HISTORY="indep" ;; source*) BASH_HISTORY="source" ;; *) BASH_HISTORY="arch" ;; esac case "${BASH_HISTORY}" in arch) case "${DERIVATIVE_DISTRIBUTION}" in horok) cat > "${CHROOT}/build/.bash_history" << EOF cd */ && sudo apt-get build-dep -y . && dpkg-buildpackage -B && cd .. && rm -rf */ sudo apt-get install -y -t ${DERIVATIVE_DISTRIBUTION}-backports debhelper clear && pbuild.sh -a -o -n -u -b binary-arch -d ${DERIVATIVE_DISTRIBUTION} -p rsync -aPv --progress --stats * apt.progress-linux.org::upload && rm -rf * EOF ;; *) cat > "${CHROOT}/build/.bash_history" << EOF cd */ && sudo apt-get build-dep -y . && dpkg-buildpackage -B && cd .. && rm -rf */ sudo apt-get install -y -t ${DERIVATIVE_DISTRIBUTION}-backports debhelper clear && pbuild.sh -a -o -n -u -b binary-arch -d ${DERIVATIVE_DISTRIBUTION}-backports -p rsync -aPv --progress --stats * apt.progress-linux.org::upload && rm -rf * EOF ;; esac ;; indep) case "${DERIVATIVE_DISTRIBUTION}" in horok) cat > "${CHROOT}/build/.bash_history" << EOF cd */ && sudo apt-get build-dep -y . && dpkg-buildpackage -A && cd .. && rm -rf */ sudo apt-get install -y -t ${DERIVATIVE_DISTRIBUTION}-backports debhelper clear && pbuild.sh -a -o -n -u -b binary-indep -d ${DERIVATIVE_DISTRIBUTION} -p rsync -aPv --progress --stats * apt.progress-linux.org::upload && rm -rf * EOF ;; *) cat > "${CHROOT}/build/.bash_history" << EOF cd */ && sudo apt-get build-dep -y . && dpkg-buildpackage -A && cd .. && rm -rf */ sudo apt-get install -y -t ${DERIVATIVE_DISTRIBUTION}-backports debhelper clear && pbuild.sh -a -o -n -u -b binary-indep -d ${DERIVATIVE_DISTRIBUTION}-backports -p rsync -aPv --progress --stats * apt.progress-linux.org::upload && rm -rf * EOF ;; esac ;; source) case "${DERIVATIVE_DISTRIBUTION}" in horok) cat > "${CHROOT}/build/.bash_history" << EOF cd */ && sudo apt-get build-dep -y . && dpkg-buildpackage -A && cd .. && rm -rf */ sudo apt-get install -y -t ${DERIVATIVE_DISTRIBUTION}-backports debhelper clear && pbuild.sh -o -u -b source -d ${DERIVATIVE_DISTRIBUTION} -p rsync -aPv --progress --stats * apt.progress-linux.org::upload && rm -rf * EOF ;; *) cat > "${CHROOT}/build/.bash_history" << EOF cd */ && sudo apt-get build-dep -y . && dpkg-buildpackage -A && cd .. && rm -rf */ sudo apt-get install -y -t ${DERIVATIVE_DISTRIBUTION}-backports debhelper clear && pbuild.sh -o -u -b source -d ${DERIVATIVE_DISTRIBUTION}-backports -p rsync -aPv --progress --stats * apt.progress-linux.org::upload && rm -rf * EOF ;; esac ;; esac case "${DISTRIBUTION}" in sid) cat >> "${CHROOT}/build/.bash_history" << EOF sudo apt build-dep -y . dpkg-buildpackage --changes-option=-S rm */ *.buildinfo *.changes *.deb *.debian.tar.xz *.dsc */ -rf EOF ;; esac chown 1000:1000 "${CHROOT}/build/.bash_history"* echo "build ALL=NOPASSWD: ALL" >> "${CHROOT}/etc/sudoers" ;; chroot) Chroot "su - build" ;; update) Chroot chmod 777 /dev/ptmx Chroot apt-get --force-yes --yes update Chroot apt-get --force-yes --yes upgrade Chroot apt-get --force-yes --yes dist-upgrade Chroot apt-get --force-yes --yes clean ;; save) killall -9 syslogd > /dev/null 2>&1 || true killall -9 klogd > /dev/null 2>&1 || true for FILESYSTEM in /sys /proc /lib/init/rw /dev/shm /dev/pts /dev do umount -f "${CHROOT}/${FILESYSTEM}" > /dev/null 2>&1 || true done rm -f "${CHROOT}/root/.bash_history" rm -f "${CHROOT}/root/.viminfo" rm -f "${CHROOT}/build/.viminfo" rm -rf "${CHROOT}/var/tmp/vi.recover" rm -f "${CHROOT}/etc/machine-id" case $(cat /etc/hostname) in all*) BASH_HISTORY="indep" ;; source*) BASH_HISTORY="source" ;; *) BASH_HISTORY="arch" ;; esac case "${BASH_HISTORY}" in arch) case "${DERIVATIVE_DISTRIBUTION}" in horok) cat > "${CHROOT}/build/.bash_history" << EOF cd */ && sudo apt-get build-dep -y . && dpkg-buildpackage -B && cd .. && rm -rf */ sudo apt-get install -y -t ${DERIVATIVE_DISTRIBUTION}-backports debhelper clear && pbuild.sh -a -o -n -u -b binary-arch -d ${DERIVATIVE_DISTRIBUTION} -p rsync -aPv --progress --stats * apt.progress-linux.org::upload && rm -rf * EOF ;; *) cat > "${CHROOT}/build/.bash_history" << EOF cd */ && sudo apt-get build-dep -y . && dpkg-buildpackage -B && cd .. && rm -rf */ sudo apt-get install -y -t ${DERIVATIVE_DISTRIBUTION}-backports debhelper clear && pbuild.sh -a -o -n -u -b binary-arch -d ${DERIVATIVE_DISTRIBUTION}-backports -p rsync -aPv --progress --stats * apt.progress-linux.org::upload && rm -rf * EOF ;; esac ;; indep) case "${DERIVATIVE_DISTRIBUTION}" in horok) cat > "${CHROOT}/build/.bash_history" << EOF cd */ && sudo apt-get build-dep -y . && dpkg-buildpackage -A && cd .. && rm -rf */ sudo apt-get install -y -t ${DERIVATIVE_DISTRIBUTION}-backports debhelper clear && pbuild.sh -a -o -n -u -b binary-indep -d ${DERIVATIVE_DISTRIBUTION} -p rsync -aPv --progress --stats * apt.progress-linux.org::upload && rm -rf * EOF ;; *) cat > "${CHROOT}/build/.bash_history" << EOF cd */ && sudo apt-get build-dep -y . && dpkg-buildpackage -A && cd .. && rm -rf */ sudo apt-get install -y -t ${DERIVATIVE_DISTRIBUTION}-backports debhelper clear && pbuild.sh -a -o -n -u -b binary-indep -d ${DERIVATIVE_DISTRIBUTION}-backports -p rsync -aPv --progress --stats * apt.progress-linux.org::upload && rm -rf * EOF ;; esac ;; source) case "${DERIVATIVE_DISTRIBUTION}" in horok) cat > "${CHROOT}/build/.bash_history" << EOF cd */ && sudo apt-get build-dep -y . && dpkg-buildpackage -A && cd .. && rm -rf */ sudo apt-get install -y -t ${DERIVATIVE_DISTRIBUTION}-backports debhelper clear && pbuild.sh -o -u -b source -d ${DERIVATIVE_DISTRIBUTION} -p rsync -aPv --progress --stats * apt.progress-linux.org::upload && rm -rf * EOF ;; *) cat > "${CHROOT}/build/.bash_history" << EOF cd */ && sudo apt-get build-dep -y . && dpkg-buildpackage -A && cd .. && rm -rf */ sudo apt-get install -y -t ${DERIVATIVE_DISTRIBUTION}-backports debhelper clear && pbuild.sh -o -u -b source -d ${DERIVATIVE_DISTRIBUTION}-backports -p rsync -aPv --progress --stats * apt.progress-linux.org::upload && rm -rf * EOF ;; esac ;; esac case "${DISTRIBUTION}" in sid) cat >> "${CHROOT}/build/.bash_history" << EOF sudo apt build-dep -y . dpkg-buildpackage --changes-option=-S rm */ *.buildinfo *.changes *.deb *.debian.tar.xz *.dsc */ -rf EOF ;; esac if [ -e "${CHROOT}/build/.bash_history.orig" ] then rm -f "${CHROOT}/build/.bash_history" cp -a "${CHROOT}/build/.bash_history.orig" "${CHROOT}/build/.bash_history" fi rsync -av --delete "${CHROOT}"/ "${CHROOT}".orig mount proc-$(basename ${CHROOT}) "${CHROOT}/proc" -t proc mount devpts-$(basename ${CHROOT}) "${CHROOT}/dev/pts" -t devpts mount sysfs-$(basename ${CHROOT}) "${CHROOT}/sys" -t sysfs mount /dev/shm -o bind "${CHROOT}/dev/shm" ;; restore) killall -9 syslogd > /dev/null 2>&1 || true killall -9 klogd > /dev/null 2>&1 || true for FILESYSTEM in /sys /proc /lib/init/rw /dev/shm /dev/pts /dev do umount -f "${CHROOT}/${FILESYSTEM}" > /dev/null 2>&1 || true done rsync -av --delete "${CHROOT}".orig/ "${CHROOT}" mount proc-$(basename ${CHROOT}) "${CHROOT}/proc" -t proc mount devpts-$(basename ${CHROOT}) "${CHROOT}/dev/pts" -t devpts mount sysfs-$(basename ${CHROOT}) "${CHROOT}/sys" -t sysfs mount /dev/shm -o bind "${CHROOT}/dev/shm" ;; reset) "${0}" restore ${DISTRIBUTION} ${ARCHITECTURE} "${0}" update ${DISTRIBUTION} ${ARCHITECTURE} "${0}" save ${DISTRIBUTION} ${ARCHITECTURE} ;; *) echo "Wrong option." exit 1 esac