From 60b97759b78b2b8bd0b8d20804c1a0c76642fe75 Mon Sep 17 00:00:00 2001 From: CyberLeo Date: Thu, 28 Apr 2011 12:12:17 -0500 Subject: [PATCH] j: function and variable namespace cleanup --- exec | 1 + j | 86 +++++++++++++++++++++++++++++++++++++---------------------- shell | 1 + 3 files changed, 56 insertions(+), 32 deletions(-) create mode 120000 exec create mode 120000 shell diff --git a/exec b/exec new file mode 120000 index 0000000..0fe2fa5 --- /dev/null +++ b/exec @@ -0,0 +1 @@ +j \ No newline at end of file diff --git a/j b/j index a1ca67c..581973c 100755 --- a/j +++ b/j @@ -2,43 +2,68 @@ # Copyright 2011 CyberLeo, All Rights Reserved # http://wiki.cyberleo.net/wiki/CyberLeo/COPYRIGHT -meh() { printf " \033[1;32m*\033[0m %s%s\n" "${jail:+${jail}: }" "${*}"; } -omg() { printf " \033[1;33m*\033[0m %s%s\n" "${jail:+${jail}: }" "${*}"; } -wtf() { printf " \033[1;31m*\033[0m %s%s\n" "${jail:+${jail}: }" "${*}"; exit 1; } +# Need root beyond here +[ "$(id -u)" -eq 0 ] || exec sudo "${0}" "${@}" + +meh() { printf " \033[1;32m*\033[0m %s%s\n" "${jname:+${jname}: }" "${*}"; } +omg() { printf " \033[1;33m*\033[0m %s%s\n" "${jname:+${jname}: }" "${*}"; } +wtf() { printf " \033[1;31m*\033[0m %s%s\n" "${jname:+${jname}: }" "${*}"; exit 1; } pebkac() { [ "${*}" ] && printf "%s\n\n" "${*}" cat < +Usage: +Usage: + [arguments] + list + ls list available jails + + status show jail status + + start prepare an existing jail for use + + stop undo what 'start' did + + exec + enter + shell spawn a shell or command within the jail + EOF exit 1 } cmd="$(basename "${0}")" -base="${J_BASE:-$(realpath "$(dirname "${0}")/../")}" -jail="${J_NAME:-$(basename "${1:-DebianChroot}")}" #" -jdir="${base}/${jail}" -jail_shell="" +jbase="${J_BASE:-$(realpath "$(dirname "${0}")/../")}" +jname="${J_NAME:-$(basename "${1}")}" #" + +# Remove jail name from argument stack, if passed in +[ "${J_NAME}" ] || shift # Propagate certain environment variables; sterilize the rest of the environment -jail_env=" +jenv=" + LANG=${LANG} TERM=${TERM} USER=${USER} " -# Create a new jail, somehow -jail_init() { +# Create a new chroot, somehow +j_init() { # Either a debian jail with debootstrap or a gentoo jail with stage3 + portage tarballs DEBOOTSTRAP_DIR="$(base)/debootstrap" "${DEBOOTSTRAP_DIR}/debootstrap" --arch=amd64 squeeze "${jdir}" } -# Figure out jail parameters -jail_params() { +# Figure out and set jail parameters; needed for all functions that follow +j_params() { + jname="${1:-jname}" + # Given a jail name, find and set up the jail dir + jdir="${jbase}/${jname}" + [ -d "${jdir}" ] || wtf "not a directory" + # Where is the shell? for shell in /bin/bash /usr/bin/bash /usr/local/bin/bash /bin/sh do if [ -f "${jdir}/${shell}" ] then - jail_shell=${shell} + jshell=${shell} break fi wtf "cannot locate usable shell; is this a real jail?" @@ -46,48 +71,45 @@ jail_params() { } # Jail is 'up' if /dev/pts and /proc are mounted -jail_up() { +j_up() { grep -q "^devpts ${jdir}/dev/pts devpts" /proc/mounts || return 1 grep -q "^proc ${jdir}/proc proc" /proc/mounts || return 1 return 0 } -jail_status() { - jail_up && meh "$(printf '\033[1;32mup\033[0m')" || meh "$(printf '\033[1;31mdown\033[0m')" +j_status() { + j_up && meh "$(printf '\033[1;32mup\033[0m')" || meh "$(printf '\033[1;31mdown\033[0m')" } # Mount /dev/pts and /proc in the jail -jail_start() { - jail_up && return 0 +j_start() { + j_up && return 0 meh "starting ${jail} ..." mount -t devpts devpts "${jdir}/dev/pts" mount -t proc proc "${jdir}/proc" } # Enter jail -jail_enter() { - jail_up || wtf "jail not up" +j_exec() { + j_up || wtf "jail not up" meh "entering ${jail} ..." - env -i ${jail_env} /usr/bin/chroot "${jdir}" /bin/su "${USER}" -c "${jail_shell}" -l + exec env -i ${jenv} /usr/bin/chroot "${jdir}" /bin/su "${juser:-${USER}}" -c "${jshell}" -l } # Unmount /dev/pts and /proc in the jail -jail_stop() { - jail_up || return 0 +j_stop() { + j_up || return 0 meh "stopping ${jail} ..." umount "${jdir}/proc" umount "${jdir}/dev/pts" } -# Need root beyond here -[ "$(id -u)" -eq 0 ] || exec sudo env ${jail_env} "${0}" "${@}" - -jail_params +j_params "${jname}" case "${cmd}" in -status) jail_status ;; -start) jail_start ;; -enter) jail_enter ;; -stop) jail_stop ;; +status) j_status ;; +start) j_start ;; +enter|exec|shell) j_exec "${@}" ;; +stop) j_stop ;; *) pebkac ;; esac diff --git a/shell b/shell new file mode 120000 index 0000000..0fe2fa5 --- /dev/null +++ b/shell @@ -0,0 +1 @@ +j \ No newline at end of file -- 2.42.0