From e9c011077d578aeb0e1f2c85b566b2769ecee160 Mon Sep 17 00:00:00 2001 From: Leah Neukirchen Date: Thu, 1 Feb 2018 19:26:14 +0100 Subject: add xchroot --- xchroot | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100755 xchroot (limited to 'xchroot') diff --git a/xchroot b/xchroot new file mode 100755 index 0000000..2e76f42 --- /dev/null +++ b/xchroot @@ -0,0 +1,41 @@ +#!/bin/sh -e +# xchroot DIR [CMD...] - chroot into a Void (or other Linux) installation + +fail() { + printf '%s\n' "$1" 1>&2 + exit 1 +} + +if [ "$(id -u)" -ne 0 ]; then + fail 'xchroot needs to run as root' +fi + +case "$1" in + /*) CHROOT=$1; shift;; + *) fail 'no absolute chroot dir given';; +esac + +[ -d "$CHROOT" ] || fail 'not a directory' +[ -d "$CHROOT/dev" ] || fail 'no /dev in chroot' +[ -d "$CHROOT/proc" ] || fail 'no /proc in chroot' +[ -d "$CHROOT/sys" ] || fail 'no /sys in chroot' + +mount --rbind /dev "$CHROOT/dev" +mount --rbind /proc "$CHROOT/proc" +mount --rbind /sys "$CHROOT/sys" + +cleanup() { + umount -R "$CHROOT/dev" "$CHROOT/proc" "$CHROOT/sys" +} + +trap cleanup EXIT INT + +if [ -f "$CHROOT/$SHELL" ]; then + INNER_SHELL="$SHELL" +elif [ -f "$CHROOT/bin/bash" ]; then + INNER_SHELL="/bin/bash" +else + INNER_SHELL="/bin/sh" +fi + +chroot "$CHROOT" ${@:-$INNER_SHELL} -- cgit 1.4.1