From 11143a2e357d2ba633ef8943eeaf647ef498436a Mon Sep 17 00:00:00 2001 From: CyberLeo Date: Thu, 28 Apr 2011 13:25:53 -0500 Subject: [PATCH] j: refactor param population to work per-function instead of globally --- j | 89 ++++++++++++++++++++++++++++++++++++++++++++------------------- 1 file changed, 62 insertions(+), 27 deletions(-) diff --git a/j b/j index c9e30fc..3ced9a5 100755 --- a/j +++ b/j @@ -3,7 +3,7 @@ # http://wiki.cyberleo.net/wiki/CyberLeo/COPYRIGHT # Need root beyond here -[ "$(id -u)" -eq 0 ] || exec sudo env J_BASE=${J_BASE} J_NAME=${J_NAME} J_USER=${J_USER} "${0}" "${@}" +[ "$(id -u)" -eq 0 ] || exec sudo env J_BASE=${J_BASE} J_NAME=${J_NAME} J_USER=${J_USER:-${USER}} "${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}: }" "${*}"; } @@ -46,6 +46,14 @@ jenv=" USER=${USER} " +# List available jails +j_ls() { + ( cd "${jbase}"; ls -1 ) | while read jname + do + something + done +} + # Create a new chroot, somehow j_init() { # Either a debian jail with debootstrap or a gentoo jail with stage3 + portage tarballs @@ -54,37 +62,61 @@ j_init() { # 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" + ( jname="${1:-jname}" - # Where is the shell? - for shell in /bin/bash /usr/bin/bash /usr/local/bin/bash /bin/sh - do - if [ -f "${jdir}/${shell}" ] + # Make sure jname is not empty + if [ -z "${jname}" ] then - jshell=${shell} - break + printf "jerror='%s'\n" "jname empty" + return 1 fi - wtf "cannot locate usable shell; is this a real jail?" - done + + # Given a jail name, find and set up the jail dir + jdir="${jbase}/${jname}" + if [ ! -d "${jdir}" ] + then + printf "jerror='%s'\n" "not a directory" + return 1 + fi + + # Where is the shell? + for shell in /bin/bash /usr/bin/bash /usr/local/bin/bash /bin/sh + do + if [ -f "${jdir}/${shell}" ] + then + jshell=${shell} + break + fi + done + if [ -z "${jshell}" ] + then + printf "jerror='%s'\n", "unable to locate usable shell; is this a jail?" + return 1 + fi + + printf "jname='%s' jdir='%s' jshell='%s'\n" "${jname}" "${jdir}" "${jshell}" + ) } # Jail is 'up' if /dev/pts and /proc are mounted j_up() { + jname="${1:-${jname}}" + eval "$(j_params "${jname}")" + [ "${jerror}" ] && wtf "${jerror}" grep -q "^devpts ${jdir}/dev/pts devpts" /proc/mounts || return 1 grep -q "^proc ${jdir}/proc proc" /proc/mounts || return 1 return 0 } j_status() { - j_up && meh "$(printf '\033[1;32mup\033[0m')" || meh "$(printf '\033[1;31mdown\033[0m')" + j_up "${1}" && meh "$(printf '\033[1;32mup\033[0m')" || meh "$(printf '\033[1;31mdown\033[0m')" } # Mount /dev/pts and /proc in the chroot j_start() { - j_up && return 0 + jname="${1:-${jname}}" + j_up "${jname}" && return 0 + eval "$(j_params "${jname}")" meh "starting ${jail} ..." mount -t devpts devpts "${jdir}/dev/pts" mount -t proc proc "${jdir}/proc" @@ -92,31 +124,34 @@ j_start() { # Execute command in chroot j_eval() { - j_up || wtf "jail not up" - meh "entering ${jail} ..." + jname="${1:-${jname}}" + j_up "${jname}" || wtf "jail not up" + eval "$(j_params "${jname}")" + shift env -i ${jenv} /usr/bin/chroot "${jdir}" /bin/su "${juser:-${USER}}" -c "${*}" } j_shell() { - j_eval "${jshell} -l" + jname="${1:-${jname}}" + eval "$(j_params "${jname}")" + j_eval "${jname}" "${jshell} -l" } # Unmount /dev/pts and /proc in the chroot j_stop() { - j_up || return 0 + jname="${1:-${jname}}" + eval "$(j_params "${jname}")" + j_up "${jname}" || return 0 meh "stopping ${jail} ..." umount "${jdir}/proc" umount "${jdir}/dev/pts" } -# Populate jvars -j_params "${jname}" - case "${cmd}" in -status) j_status ;; -start) j_start ;; -shell|enter) j_shell ;; -eval) j_eval "${*}" ;; -stop) j_stop ;; +status) j_status "${jname}" ;; +start) j_start "${jname}" ;; +shell|enter) j_shell "${jname}" ;; +eval) j_eval "${jname}" "${*}" ;; +stop) j_stop "${jname}" ;; *) pebkac ;; esac -- 2.45.0