aboutsummaryrefslogtreecommitdiff
path: root/contrib/cpt-chroot
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/cpt-chroot')
-rwxr-xr-xcontrib/cpt-chroot68
1 files changed, 68 insertions, 0 deletions
diff --git a/contrib/cpt-chroot b/contrib/cpt-chroot
new file mode 100755
index 0000000..7d0585c
--- /dev/null
+++ b/contrib/cpt-chroot
@@ -0,0 +1,68 @@
+#!/bin/sh -e
+# Enter a chroot
+
+log() {
+ printf '\033[32m->\033[m %s.\n' "$*"
+}
+
+usage() { printf '\033[1;33m-> \033[m%s\n' "usage: ${0##*/} [dir]" ; exit 0 ;}
+
+die() {
+ log "$*" >&2
+ exit 1
+}
+
+clean() {
+ log Unmounting /dev, /proc and /sys from chroot; {
+ umount "$1/dev" ||:
+ umount "$1/proc" ||:
+ umount "$1/sys" ||:
+ }
+
+ log Cleaning leftover host files; {
+ rm -f "$1/root/.ash_history"
+ }
+}
+
+main() {
+ case "$1" in ''|--help|-h) usage; esac
+ [ -d "$1" ] || die Given path does not exist
+ [ "$(id -u)" = 0 ] || die Script needs to be run as root
+
+ [ "$2" ] || {
+ march=$(uname -m 2>/dev/null) ||:
+ case "$march" in
+ '') march=native ;;
+ x86_64) march=x86-64 ;;
+ i*86) march=i686 ;;
+ esac
+ }
+
+ trap 'clean "$1"' EXIT INT
+
+ log Mounting /dev, /proc and /sys from host; {
+ mountpoint -q "$1/dev" || mount -o bind /dev "$1/dev"
+ mountpoint -q "$1/proc" || mount -t proc proc "$1/proc"
+ mountpoint -q "$1/sys" || mount -t sysfs sys "$1/sys"
+
+ }
+
+ log Copying /etc/resolv.conf from host; {
+ [ -f "$1/etc/resolv.conf" ] || cp /etc/resolv.conf "$1/etc"
+ }
+
+ log Entering chroot; {
+ chroot "$1" /usr/bin/env -i \
+ HOME=/root \
+ TERM="$TERM" \
+ SHELL=/bin/sh \
+ USER=root \
+ KISS_ASROOT=1 \
+ CFLAGS="${CFLAGS:--march=$march -mtune=generic -pipe -Os}" \
+ CXXFLAGS="${CXXFLAGS:--march=$march -mtune=generic -pipe -Os}" \
+ MAKEFLAGS="${MAKFLAGS:--j$(nproc 2>/dev/null || echo 1)}" \
+ /bin/sh -l
+ }
+}
+
+main "$@"