Author: netchild
Date: Fri Mar  5 14:34:33 2010
New Revision: 204759
URL: http://svn.freebsd.org/changeset/base/204759

Log:
  Redirect stdin from /dev/null when starting a jail:
    At least in RELENG_7 this fixes some start problems for some programs
    from the ports. It is also more correct, as a jail shall not expect
    input (interactivity) from the jail-host.
  
  Revert the current behavior of starting jails in the background and
  make it optional only for the start of jails (jail_parallell_start=YES
  in rc.conf):
   - The stop can not be done in the background, the system needs to wait
     until everything is stopped correctly before it can reboot or power
     down.
   - The start should not be done in parallel by default, this not only
     breaks POLA for people comming from RELENG_x, it may also break a
     dependency chain with other scripts in the jail-host, which need to
     do some stuff after the jails are up and running (e.g. hardlinking
     a mysql socket from one jail into another one).
  
  Discussed on: freebsd-jails@

Modified:
  head/etc/defaults/rc.conf
  head/etc/rc.d/jail
  head/share/man/man5/rc.conf.5

Modified: head/etc/defaults/rc.conf
==============================================================================
--- head/etc/defaults/rc.conf   Fri Mar  5 14:13:58 2010        (r204758)
+++ head/etc/defaults/rc.conf   Fri Mar  5 14:34:33 2010        (r204759)
@@ -637,6 +637,7 @@ mixer_enable="YES"  # Run the sound mixer
 ### Jail Configuration #######################################
 ##############################################################
 jail_enable="NO"       # Set to NO to disable starting of any jails
+jail_parallel_start="NO"       # Start jails in the background
 jail_list=""           # Space separated list of names of jails
 jail_set_hostname_allow="YES" # Allow root user in a jail to change its 
hostname
 jail_socket_unixiproute_only="YES" # Route only TCP/IP within a jail

Modified: head/etc/rc.d/jail
==============================================================================
--- head/etc/rc.d/jail  Fri Mar  5 14:13:58 2010        (r204758)
+++ head/etc/rc.d/jail  Fri Mar  5 14:34:33 2010        (r204759)
@@ -636,7 +636,8 @@ jail_start()
                done
 
                eval ${_setfib} jail ${_flags} -i ${_rootdir} ${_hostname} \
-                       \"${_addrl}\" ${_exec_start} > ${_tmp_jail} 2>&1
+                       \"${_addrl}\" ${_exec_start} > ${_tmp_jail} 2>&1 \
+                       </dev/null
 
                if [ "$?" -eq 0 ] ; then
                        _jail_id=$(head -1 ${_tmp_jail})
@@ -728,4 +729,19 @@ fi
 if [ -n "$*" ]; then
        jail_list="$*"
 fi
-run_rc_command "${cmd}" &
+
+# Only allow the parallel start of jails, other commands are not
+# safe to execute in parallel.
+case "${cmd}" in
+*start)
+       ;;
+*)
+       jail_parallel_start=NO
+esac
+
+if checkyesno jail_parallel_start; then
+       run_rc_command "${cmd}" &
+else
+       run_rc_command "${cmd}"
+fi
+

Modified: head/share/man/man5/rc.conf.5
==============================================================================
--- head/share/man/man5/rc.conf.5       Fri Mar  5 14:13:58 2010        
(r204758)
+++ head/share/man/man5/rc.conf.5       Fri Mar  5 14:34:33 2010        
(r204759)
@@ -24,7 +24,7 @@
 .\"
 .\" $FreeBSD$
 .\"
-.Dd February 12, 2010
+.Dd March 05, 2010
 .Dt RC.CONF 5
 .Os
 .Sh NAME
@@ -3497,6 +3497,11 @@ indicates that the highest frequency (le
 If set to
 .Dq Li NO ,
 any configured jails will not be started.
+.It jail_parallel_start
+.Pq Vt bool
+If set to
+.Dq Li YES
+all configured jails will be started in the background (= in parallel).
 .It Va jail_list
 .Pq Vt str
 A space separated list of names for jails.
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "[email protected]"

Reply via email to