misc/149831: [PATCH] add support to /etc/rc.d/jail for delegating ZFS-filesystems to jails

Kenneth Vestergaard kvs at binarysolutions.dk
Fri Aug 20 14:30:07 UTC 2010


The following reply was made to PR misc/149831; it has been noted by GNATS.

From: Kenneth Vestergaard <kvs at binarysolutions.dk>
To: bug-followup at FreeBSD.org,
 kvs at binarysolutions.dk
Cc:  
Subject: Re: misc/149831: [PATCH] add support to /etc/rc.d/jail for delegating ZFS-filesystems to jails
Date: Fri, 20 Aug 2010 16:03:16 +0200

 --Apple-Mail-4--936881281
 Content-Transfer-Encoding: 7bit
 Content-Type: text/plain;
 	charset=us-ascii
 
 Improved patch - it is necessary to get a stable jail-id before
 launching the jail, since the delegated filesystems need to be
 delegated before launching /etc/rc.
 
 
 
 --Apple-Mail-4--936881281
 Content-Disposition: attachment;
 	filename=zfs-fix-delegated-paths-in-jail.diff.txt
 Content-Type: text/plain;
 	name="zfs-fix-delegated-paths-in-jail.diff.txt"
 Content-Transfer-Encoding: 7bit
 
 --- src/etc/rc.d/jail.orig	2010-08-19 12:39:01.000000000 +0200
 +++ src/etc/rc.d/jail	2010-08-20 15:57:07.508674101 +0200
 @@ -41,6 +41,7 @@
  	eval _ip=\"\$jail_${_j}_ip\"
  	eval _interface=\"\${jail_${_j}_interface:-${jail_interface}}\"
  	eval _exec=\"\$jail_${_j}_exec\"
 +	eval _delegate_path=\"\$jail_${_j}_delegate_path\"
  
  	i=0
  	while : ; do
 @@ -132,6 +133,7 @@
  	debug "$_j procdir: $_procdir"
  	debug "$_j ruleset: $_ruleset"
  	debug "$_j fstab: $_fstab"
 +	debug "$_j delegate_path: $_delegate_path"
  
  	i=0
  	while : ; do
 @@ -635,8 +637,23 @@
  			i=$((i + 1))
  		done
  
 -		eval ${_setfib} jail ${_flags} -i ${_rootdir} ${_hostname} \
 -			\"${_addrl}\" ${_exec_start} > ${_tmp_jail} 2>&1
 +		# create jail with 'persist', so we can get a jid before starting it,
 +		# which is needed if we need to delegate any zfs-filesystems to it.
 +		jail -i -c name=${_jail} path=${_rootdir} persist > ${_tmp_jail} 2>&1
 +		_jail_id=$(head -1 ${_tmp_jail})
 +		echo started jail ${_jail} with id ${_jail_id}
 +
 +		if [ ! -z "${_delegate_path}" ] ; then
 +			jail -m jid=${_jail_id} allow.mount=1
 +			/sbin/zfs get -s local -rH -o name,value jailed ${_delegate_path} | \
 +			    /usr/bin/awk '$2 == "on" { print $1 }' | \
 +			    /usr/bin/xargs -I % /sbin/zfs jail ${_jail_id} %
 +		fi
 +
 +		eval ${_setfib} jail ${_flags} -m \
 +			jid=${_jail_id} \
 +			host.hostname=${_hostname} \
 +			ip4.addr=\"${_addrl}\" command=${_exec_start} 2>&1
  
  		if [ "$?" -eq 0 ] ; then
  			_jail_id=$(head -1 ${_tmp_jail})
 @@ -669,6 +686,7 @@
  			echo " cannot start jail \"${_jail}\": "
  			tail +2 ${_tmp_jail}
  		fi
 +		jail -m jid=${_jail_id} nopersist # remove 'persist' set at create-time
  		rm -f ${_tmp_jail}
  	done
  	rmdir ${_tmp_dir}
 
 --Apple-Mail-4--936881281--


More information about the freebsd-bugs mailing list