--- /dev/null
+#!/bin/sh -e
+# Enter a chroot nicely. Stolen from KISS Linux, MIT license Dylan Araps 2020.
+# Some slight modifications to make life easier.
+
+log() {
+ printf '\033[32m->\033[m %s.\n' "$*"
+}
+
+die() {
+ log "$*" >&2
+ exit 1
+}
+
+clean() {
+ log Unmounting /dev, /proc and /sys from chroot; {
+ umount "$1/sys/firmware/efi/efivars" 2>/dev/null ||:
+ umount "$1/dev" ||:
+ umount "$1/proc" ||:
+ umount "$1/sys" ||:
+ }
+
+ log Cleaning leftover host files; {
+ rm -f "$1/root/.ash_history"
+ rm -f "$1/etc/resolv.conf"
+ }
+}
+
+mounted() {
+ # This is a pure shell mountpoint implementation. We're dealing
+ # with basic (and fixed/known) input so this doesn't need to
+ # handle more complex cases.
+ [ -e "$1" ] || return 1
+ [ -e /proc/mounts ] || return 1
+
+ while read -r _ target _; do
+ [ "$target" = "$1" ] && return 0
+ done < /proc/mounts
+
+ return 1
+}
+
+[ -z "$1" ] && die Need a path to the chroot
+[ -d "$1" ] || die Given path does not exist
+[ "$(id -u)" = 0 ] || die Script needs to be run as root
+
+trap 'clean "$1"' EXIT INT
+
+log Mounting /dev, /proc and /sys from host; {
+ mounted "$1/dev" || mount -o bind /dev "$1/dev" ||:
+ mounted "$1/proc" || mount -t proc proc "$1/proc" ||:
+ mounted "$1/sys" || mount -t sysfs sys "$1/sys" ||:
+
+ mounted "$1/sys/firmware/efi/efivars" ||
+ mount -t efivarfs efivarfs "$1/sys/firmware/efi/efivars" 2>/dev/null ||:
+}
+
+log Copying /etc/resolv.conf from host; {
+ cp -f /etc/resolv.conf "$1/etc" ||:
+}
+
+NEWSHELL=${2:-"/bin/sh"} \
+
+log Entering chroot; {
+ chroot "$1" /usr/bin/env -i \
+ HOME=/root \
+ TERM="$TERM" \
+ SHELL=${NEWSHELL} \
+ USER=root \
+ CFLAGS="${CFLAGS:--march=x86-64 -mtune=generic -pipe -Os}" \
+ CXXFLAGS="${CXXFLAGS:--march=x86-64 -mtune=generic -pipe -Os}" \
+ MAKEFLAGS="${MAKEFLAGS:--j$(nproc 2>/dev/null || echo 1)}" \
+ DISPLAY="$DISPLAY" \
+ "$NEWSHELL" -l
+}