diff --git a/jaildk b/jaildk index 52fe306..5c0d957 100755 --- a/jaildk +++ b/jaildk @@ -1,6 +1,6 @@ #!/bin/sh -version=1.16 +version=1.17 usage_jaildk() { beg=`tput -T ${TERM:-cons25} md` @@ -560,12 +560,17 @@ jaildk_install() { fi fi + type="jail" + if test -n "$rw"; then + type="build chroot" + fi + case $mode in start) - bold "Installing jail $jail" + bold "Installing $type $jail" ;; stop) - bold "Unstalling jail $jail" + bold "Unstalling $type $jail" ;; esac @@ -577,7 +582,8 @@ jaildk_install() { usage_uninstall() { fin "Usage: $0 uninstall [-w] Uninstall . Options: --w Uninstall writable build chroot." +-w Uninstall writable build chroot. +-a Uninstall jail and build chroot." } jaildk_uninstall() { @@ -585,10 +591,14 @@ jaildk_uninstall() { jail=$1 shift rw='' + all='' + base='' + version='' - while getopts "w" arg; do + while getopts "wa" arg; do case $arg in w) rw="-w";; + a) all=1; rw="-w";; *) usage_uninstall;; esac done @@ -603,7 +613,26 @@ jaildk_uninstall() { die "Jail $jail($version) is still running, stop it before removing!" fi - jaildk_install $jail stop -r all $rw + if test -n "$rw"; then + # we need to find out base and version of actually + # mounted jail, but cannot just use the jail config + # since the user might have mounted another version + base=$(mount | egrep "/base/.*/$jail " | cut -d' ' -f1 | sed 's|.*/||') + version=$(mount | egrep "/appl/.*/$jail/" | cut -d' ' -f1 | sed 's/.*\-//') + fi + + if test -z "$base"; then + # no base no umount! + rw='' + all='' + fi + + if test -n "$all"; then + jaildk_install $jail stop -r all + jaildk_install $jail stop -r all -b $base -v $version -w + else + jaildk_install $jail stop -r all -b $base -v $version $rw + fi }