conf/142972: Support JAILv2 and vnet in rc.d/jail
BERARD David
david at nfrance.com
Tue Jan 19 16:00:20 UTC 2010
>Number: 142972
>Category: conf
>Synopsis: Support JAILv2 and vnet in rc.d/jail
>Confidential: no
>Severity: non-critical
>Priority: low
>Responsible: freebsd-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: change-request
>Submitter-Id: current-users
>Arrival-Date: Tue Jan 19 16:00:18 UTC 2010
>Closed-Date:
>Last-Modified:
>Originator: BERARD David
>Release: FreeBSD 8.0-RELEASE
>Organization:
NFrance Conseil
>Environment:
System: FreeBSD releaser.nfrance.com 8.0-RELEASE-p2 FreeBSD 8.0-RELEASE-p2 #0: Mon Jan 18 17:32:06 CET 2010 root at releaser.nfrance.com:/usr/obj/usr/src/sys/LAB i386
>Description:
The current /etc/rc.d/jail doesn't support the new jail parameter
style. It doesn't support vnet (VIMAGE) and jail name.
>How-To-Repeat:
Try to run a vnet compliant jail with rc.conf
>Fix:
See the attached patch
--- jailv2rc.patch begins here ---
--- /usr/src/etc/rc.d/jail 2009-10-25 02:10:29.000000000 +0100
+++ /usr/src/etc/rc.d/jail 2010-01-19 16:14:43.000000000 +0100
@@ -38,6 +38,7 @@
_fdescdir="${_devdir}/fd"
_procdir="${_rootdir}/proc"
eval _hostname=\"\$jail_${_j}_hostname\"
+ eval _name=\"\$jail_${_j}_name\"
eval _ip=\"\$jail_${_j}_ip\"
eval _interface=\"\${jail_${_j}_interface:-${jail_interface}}\"
eval _exec=\"\$jail_${_j}_exec\"
@@ -95,6 +96,9 @@
fi
fi
+ # JAIL new style
+ eval _v2=\"\${jail_v2_enable:-"NO"}\"
+
# The default jail ruleset will be used by rc.subr if none is specified.
eval _ruleset=\"\${jail_${_j}_devfs_ruleset:-${jail_devfs_ruleset}}\"
eval _devfs=\"\${jail_${_j}_devfs_enable:-${jail_devfs_enable}}\"
@@ -110,18 +114,26 @@
eval _fstab=\"\${jail_${_j}_fstab:-${jail_fstab}}\"
[ -z "${_fstab}" ] && _fstab="/etc/fstab.${_j}"
eval _flags=\"\${jail_${_j}_flags:-${jail_flags}}\"
- [ -z "${_flags}" ] && _flags="-l -U root"
+ if checkyesno _v2; then
+ [ -z "${_flags}" ] && _flags="-l -U root -c"
+ else
+ [ -z "${_flags}" ] && _flags="-l -U root"
+ fi
eval _consolelog=\"\${jail_${_j}_consolelog:-${jail_consolelog}}\"
[ -z "${_consolelog}" ] && _consolelog="/var/log/jail_${_j}_console.log"
eval _fib=\"\${jail_${_j}_fib:-${jail_fib}}\"
+ eval _vnet=\"\${jail_${_j}_vnet_enable:-"NO"}\"
# Debugging aid
#
+ debug "$_j v2 enable: $_v2"
debug "$_j devfs enable: $_devfs"
debug "$_j fdescfs enable: $_fdescfs"
debug "$_j procfs enable: $_procfs"
debug "$_j mount enable: $_mount"
+ debug "$_j vnet enable: $_vnet"
debug "$_j hostname: $_hostname"
+ debug "$_j name: $_name"
debug "$_j ip: $_ip"
jail_show_addresses ${_j}
debug "$_j interface: $_interface"
@@ -635,11 +647,26 @@
i=$((i + 1))
done
- eval ${_setfib} jail ${_flags} -i ${_rootdir} ${_hostname} \
- \"${_addrl}\" ${_exec_start} > ${_tmp_jail} 2>&1
-
+ if checkyesno _v2; then
+ _start_cmd="${_setfib} jail -J ${_tmp_jail} ${_flags} path=${_rootdir} host.hostname=${_hostname} \
+ name=\"${_name}\""
+ if checkyesno _vnet; then
+ _start_cmd="${_start_cmd} vnet"
+ else
+ _start_cmd="${_start_cmd} ip4.addr=\"${_addrl}\""
+ fi
+ _start_cmd="${_start_cmd} command=${_exec_start}"
+ eval ${_start_cmd} > /dev/null 2>&1
+ else
+ eval ${_setfib} jail ${_flags} -i ${_rootdir} ${_hostname} \
+ \"${_addrl}\" ${_exec_start} > ${_tmp_jail} 2>&1
+ fi
if [ "$?" -eq 0 ] ; then
- _jail_id=$(head -1 ${_tmp_jail})
+ if checkyesno _v2; then
+ _jail_id=$(awk -F '=| ' '{print $2}' ${_tmp_jail})
+ else
+ _jail_id=$(head -1 ${_tmp_jail})
+ fi
i=1
while : ; do
eval out=\"\${_exec_afterstart${i}:-''}\"
--- jailv2rc.patch ends here ---
>Release-Note:
>Audit-Trail:
>Unformatted:
More information about the freebsd-bugs
mailing list