summaryrefslogtreecommitdiff
path: root/ezjail-admin
diff options
context:
space:
mode:
authorerdgeist <erdgeist@erdgeist.org>2013-04-10 21:42:56 +0000
committererdgeist <erdgeist@erdgeist.org>2013-04-10 21:42:56 +0000
commit31feb69b9c64a66433d1fd0e28283ceef05b8978 (patch)
treedc86308799901cb489cd2cd29fc3e7f3f913a37c /ezjail-admin
parent8313cd36ec7db8dcdb44c0dcca295a20d66c149b (diff)
Allow user to specify another parent zfs or zpool for a new jail. This also implies -c zfs. Thanks to Cryx.
Diffstat (limited to 'ezjail-admin')
-rwxr-xr-xezjail-admin15
1 files changed, 9 insertions, 6 deletions
diff --git a/ezjail-admin b/ezjail-admin
index 82eac3d..a5f719a 100755
--- a/ezjail-admin
+++ b/ezjail-admin
@@ -418,8 +418,8 @@ check_for_zpool () {
418check_for_zfs_exist () { 418check_for_zfs_exist () {
419 # check if the zfs we want to use already exists or not, return 0 if it does and 1 if not 419 # check if the zfs we want to use already exists or not, return 0 if it does and 1 if not
420 _exit=1 420 _exit=1
421 _zfs_status=`/sbin/zfs list -H -o name ${ezjail_jailzfs}/${ezjail_hostname} 2> /dev/null` 421 _zfs_status=`/sbin/zfs list -H -o name ${ezjail_parentfs}/${ezjail_hostname} 2> /dev/null`
422 [ "${_zfs_status}" = "${ezjail_jailzfs}/${ezjail_hostname}" ] && _exit=0 422 [ "${_zfs_status}" = "${ezjail_parentfs}/${ezjail_hostname}" ] && _exit=0
423 return ${_exit} 423 return ${_exit}
424} 424}
425 425
@@ -456,7 +456,7 @@ case "$1" in
456######################## ezjail-admin CREATE ######################## 456######################## ezjail-admin CREATE ########################
457create) 457create)
458 # Clean variables, prevent pollution 458 # Clean variables, prevent pollution
459 unset ezjail_rootdir ezjail_flavours ezjail_softlink ezjail_image ezjail_imagetype ezjail_imageparams ezjail_imagesize ezjail_device ezjail_devicelink ezjail_config ezjail_attachparams ezjail_exists ezjail_attachblocking ezjail_forceblocking ezjail_sourcedevice ezjail_rootdirempty ezjail_fromarchive ezjail_fromarchive_config 459 unset ezjail_rootdir ezjail_flavours ezjail_softlink ezjail_image ezjail_imagetype ezjail_imageparams ezjail_imagesize ezjail_parentfs ezjail_device ezjail_devicelink ezjail_config ezjail_attachparams ezjail_exists ezjail_attachblocking ezjail_forceblocking ezjail_sourcedevice ezjail_rootdirempty ezjail_fromarchive ezjail_fromarchive_config
460 shift; while getopts :f:r:s:xbic:C:a:A: arg; do case ${arg} in 460 shift; while getopts :f:r:s:xbic:C:a:A: arg; do case ${arg} in
461 x) ezjail_exists="YES";; 461 x) ezjail_exists="YES";;
462 r) ezjail_rootdir=${OPTARG};; 462 r) ezjail_rootdir=${OPTARG};;
@@ -468,6 +468,8 @@ create)
468 b) ezjail_forceblocking="YES";; 468 b) ezjail_forceblocking="YES";;
469 i) : ${ezjail_imagetype="simple"};; 469 i) : ${ezjail_imagetype="simple"};;
470 s) ezjail_imagesize=${OPTARG};; 470 s) ezjail_imagesize=${OPTARG};;
471 z) ezjail_imagetype="zfs";
472 ezjail_parentfs=${OPTARG};;
471 ?) exerr ${ezjail_usage_create};; 473 ?) exerr ${ezjail_usage_create};;
472 esac; done; shift $(( ${OPTIND} - 1 )) 474 esac; done; shift $(( ${OPTIND} - 1 ))
473 475
@@ -625,11 +627,12 @@ create)
625 ezjail_device=${ezjail_imagedevice} 627 ezjail_device=${ezjail_imagedevice}
626 ;; 628 ;;
627 zfs) 629 zfs)
630 ${ezjail_parentfs=${ezjail_jailzfs}}
628 if [ -z "${ezjail_exists}" ]; then 631 if [ -z "${ezjail_exists}" ]; then
629 [ "${ezjail_imagesize}" ] && ezjail_zfs_jail_properties="${ezjail_zfs_jail_properties} -o quota=${ezjail_imagesize}" 632 [ "${ezjail_imagesize}" ] && ezjail_zfs_jail_properties="${ezjail_zfs_jail_properties} -o quota=${ezjail_imagesize}"
630 [ -d "${ezjail_jaildir}/${ezjail_hostname}" ] && exerr "Error: Could not create jail root mount point ${ezjail_rootdir}" 633 [ -d "${ezjail_jaildir}/${ezjail_hostname}" ] && exerr "Error: Could not create jail root mount point ${ezjail_rootdir}"
631 634
632 /sbin/zfs create -o mountpoint=${ezjail_rootdir} ${ezjail_zfs_jail_properties} ${ezjail_jailzfs}/${ezjail_hostname} 635 /sbin/zfs create -o mountpoint=${ezjail_rootdir} ${ezjail_zfs_jail_properties} ${ezjail_parentfs}/${ezjail_hostname}
633 else 636 else
634 check_for_zfs_exist || exerr "Error: The existing destination is not a ZFS filesystem." 637 check_for_zfs_exist || exerr "Error: The existing destination is not a ZFS filesystem."
635 fi 638 fi
@@ -663,8 +666,8 @@ create)
663 if [ "${ezjail_imagetype}" = "zfs" -a "${ezjail_use_zfs}" = "YES" ]; then 666 if [ "${ezjail_imagetype}" = "zfs" -a "${ezjail_use_zfs}" = "YES" ]; then
664 # create ZFS filesystem first when using ZFS 667 # create ZFS filesystem first when using ZFS
665 /sbin/zfs snapshot ${ezjail_jailzfs}/newjail@_createnewjailtmp 668 /sbin/zfs snapshot ${ezjail_jailzfs}/newjail@_createnewjailtmp
666 /sbin/zfs send ${ezjail_jailzfs}/newjail@_createnewjailtmp | zfs receive -F ${ezjail_jailzfs}/${ezjail_hostname} 669 /sbin/zfs send ${ezjail_jailzfs}/newjail@_createnewjailtmp | zfs receive -F ${ezjail_parentfs}/${ezjail_hostname}
667 /sbin/zfs destroy ${ezjail_jailzfs}/${ezjail_hostname}@_createnewjailtmp 670 /sbin/zfs destroy ${ezjail_parentfs}/${ezjail_hostname}@_createnewjailtmp
668 /sbin/zfs destroy ${ezjail_jailzfs}/newjail@_createnewjailtmp 671 /sbin/zfs destroy ${ezjail_jailzfs}/newjail@_createnewjailtmp
669 else 672 else
670 mkdir -p "${ezjail_rootdir}" && cd "${ezjail_jailtemplate}" && find . | cpio -p -v "${ezjail_rootdir}" > /dev/null 673 mkdir -p "${ezjail_rootdir}" && cd "${ezjail_jailtemplate}" && find . | cpio -p -v "${ezjail_rootdir}" > /dev/null