chiark / gitweb /
add chroot-setup, chroot-teardown, and chroot-enter suite of tools
authorColin Watson <cjwatson@chiark.greenend.org.uk>
Tue, 15 Apr 2008 16:10:36 +0000 (16:10 +0000)
committerColin Watson <cjwatson@chiark.greenend.org.uk>
Tue, 15 Apr 2008 16:10:36 +0000 (16:10 +0000)
chroot-enter [new file with mode: 0755]
chroot-setup [new file with mode: 0755]
chroot-teardown [new file with mode: 0755]

diff --git a/chroot-enter b/chroot-enter
new file mode 100755 (executable)
index 0000000..b260b3a
--- /dev/null
@@ -0,0 +1,4 @@
+#! /bin/sh
+ROOT="${1:-/chroot/sid}"
+chroot-setup "$ROOT"
+sudo chroot "$ROOT" su cjwatson
diff --git a/chroot-setup b/chroot-setup
new file mode 100755 (executable)
index 0000000..015acda
--- /dev/null
@@ -0,0 +1,27 @@
+#! /bin/sh -e
+if [ -e "$1/proc/cmdline" ]; then exit; fi
+sudo mount --bind /proc "$1/proc"
+sudo mount --bind /sys "$1/sys"
+sudo mount --bind /dev "$1/dev"
+sudo mount --bind /dev/pts "$1/dev/pts"
+mkdir -p "$1/tmp/.X11-unix" "$1/tmp/.ICE-unix"
+sudo mount --bind /tmp/.X11-unix "$1/tmp/.X11-unix"
+sudo mount --bind /tmp/.ICE-unix "$1/tmp/.ICE-unix"
+if [ "$SSH_AUTH_SOCK" ]; then
+       sudo mkdir -p "$1$(dirname "$SSH_AUTH_SOCK")"
+       sudo mount --bind "$(dirname "$SSH_AUTH_SOCK")" "$1$(dirname "$SSH_AUTH_SOCK")"
+fi
+if [ "$GPG_AGENT_INFO" ]; then
+       sudo mkdir -p "$1$(dirname "$GPG_AGENT_INFO")"
+       sudo mount --bind "$(dirname "$GPG_AGENT_INFO")" "$1$(dirname "$GPG_AGENT_INFO")"
+fi
+if [ -d /home/cjwatson/.keychain ]; then
+       sudo mount --bind /home/cjwatson/.keychain "$1/home/cjwatson/.keychain"
+fi
+xauth list | sudo chroot "$1" su cjwatson -c 'xargs -l1 xauth add'
+rm -f "$1/home/cjwatson/.ICEauthority"
+iceauth list | sudo chroot "$1" su cjwatson -c 'xargs -l1 iceauth add'
+sudo cp -a /etc/resolv.conf "$1/etc/"
+if [ -d /home/cjwatson/src ] && [ -d "$1/home/cjwatson/src" ]; then
+       sudo mount --bind /home/cjwatson/src "$1/home/cjwatson/src"
+fi
diff --git a/chroot-teardown b/chroot-teardown
new file mode 100755 (executable)
index 0000000..f7ceed9
--- /dev/null
@@ -0,0 +1,29 @@
+#! /bin/sh
+set +e # intentional
+
+ROOT="${1:-/chroot/sid}"
+
+is_mountpoint () {
+       grep -q "^[^ ]* $1 " /proc/mounts
+}
+
+maybe_umount () {
+       if is_mountpoint "$ROOT/${1#/}"; then
+               sudo umount "$ROOT/${1#/}"
+       fi
+}
+
+maybe_umount /home/cjwatson/src
+maybe_umount /home/cjwatson/.keychain
+if [ "$GPG_AGENT_INFO" ]; then
+       maybe_umount "$(dirname "$GPG_AGENT_INFO")"
+fi
+if [ "$SSH_AUTH_SOCK" ]; then
+       maybe_umount "$(dirname "$SSH_AUTH_SOCK")"
+fi
+maybe_umount /tmp/.ICE-unix
+maybe_umount /tmp/.X11-unix
+maybe_umount /dev/pts
+maybe_umount /dev
+maybe_umount /sys
+maybe_umount /proc