From e46d467c528001f9621758439e0e3ec17a11b490 Mon Sep 17 00:00:00 2001 From: erdgeist Date: Mon, 15 Jan 2007 14:03:46 +0000 Subject: HEADS UP: introduced fsck feature, untested. --- ezjail-admin | 70 +++++++++++++++++++++++++++++++++++++++--------------------- 1 file changed, 46 insertions(+), 24 deletions(-) diff --git a/ezjail-admin b/ezjail-admin index 0eec9e7..d0a79ec 100755 --- a/ezjail-admin +++ b/ezjail-admin @@ -48,6 +48,34 @@ ezjail_usage_list="Usage: ${ezjail_admin} list" # define our bail out shortcut exerr () { echo -e "$*" >&2 ; exit 1; } +# generic attach routine for image jails +attach_images () { + # Create a memory disc from jail image + ezjail_imagedevice=`mdconfig -a -t vnode -f ${ezjail_image}` || exerr "Error: Could not attach memory disc." + + # If this is a crypto jail, try to mount it, remind user, which jail + # this is. In this case, the device to mount is + case ${ezjail_imagetype} in + crypto|bde) + echo "Attaching bde device for image jail ${ezjail}..." + echo gbde attach /dev/${ezjail_imagedevice} ${ezjail_attachparams} | /bin/sh + [ $? -eq 0 ] || detach_images keep || exerr "Error: Attaching bde device failed." + # Device to mount is not md anymore + ezjail_device=${ezjail_imagedevice}.bde + ;; + eli) + echo "Attaching eli device for image jail ${ezjail}..." + echo geli attach ${ezjail_attachparams} /dev/${ezjail_imagedevice} | /bin/sh + [ $? -eq 0 ] || detach_images keep || exerr "Error: Attaching eli device failed." + # Device to mount is not md anymore + ezjail_device=${ezjail_imagedevice}.eli + ;; + simple) + ezjail_device=${ezjail_imagedevice} + ;; + esac +} + # define detach strategy for image jails detach_images () { # unmount and detach memory disc @@ -735,30 +763,8 @@ config) [ -n "${ezjail_attached}" ] && exerr "Error: Jail image file ${ezjail_image} already attached as ${ezjail_device}." rm -f ${ezjail_rootdir}.device - # Create a memory disc from jail image - ezjail_imagedevice=`mdconfig -a -t vnode -f ${ezjail_image}` || exerr "Error: Could not attach memory disc." - - # If this is a crypto jail, try to mount it, remind user, which jail - # this is. In this case, the device to mount is - case ${ezjail_imagetype} in - crypto|bde) - echo "Attaching bde device for image jail ${ezjail}..." - echo gbde attach /dev/${ezjail_imagedevice} ${ezjail_attachparams} | /bin/sh - [ $? -eq 0 ] || detach_images keep || exerr "Error: Attaching bde device failed." - # Device to mount is not md anymore - ezjail_device=${ezjail_imagedevice}.bde - ;; - eli) - echo "Attaching eli device for image jail ${ezjail}..." - echo geli attach ${ezjail_attachparams} /dev/${ezjail_imagedevice} | /bin/sh - [ $? -eq 0 ] || detach_images keep || exerr "Error: Attaching eli device failed." - # Device to mount is not md anymore - ezjail_device=${ezjail_imagedevice}.eli - ;; - simple) - ezjail_device=${ezjail_imagedevice} - ;; - esac + # Attach images by type + attach_images mount /dev/${ezjail_device} ${ezjail_rootdir} || detach_images keep || exerr "Error: Could not mount /dev/${ezjail_device} to ${ezjail_rootdir}." # relink image device @@ -781,6 +787,22 @@ config) # Unmount/detach everything detach_images keep + # Remove soft link (which acts as a lock) + [ -e /dev/${ezjail_imagedevice} ] || rm -f ${ezjail_rootdir}.device + ;; + fsck) + # Check, if image already attached + [ -n "${ezjail_attached}" ] && exerr "Error: Jail image file ${ezjail_image} already attached as ${ezjail_device}." + rm -f ${ezjail_rootdir}.device + + # Attach images by type + attach_images + + fsck_ufs /dev/${ezjail_device} + + # Detach images by type + detach_images keep + # Remove soft link (which acts as a lock) [ -e /dev/${ezjail_imagedevice} ] || rm -f ${ezjail_rootdir}.device ;; -- cgit v1.2.3