MFC 256716,256835:
- Fix jail_parallel_start="YES". - Fix ip[46].addr when interface parameter is not defined. - Fix a bug which prevented jails from starting when $jail_conf was used and no jail name was specified. - Display error messages when start/stop fails. Approved by: re (glebius)
This commit is contained in:
parent
b31f0060b5
commit
bb4ca793bf
121
etc/rc.d/jail
121
etc/rc.d/jail
@ -132,7 +132,9 @@ parse_options()
|
|||||||
#
|
#
|
||||||
_confwarn=1
|
_confwarn=1
|
||||||
if [ -r "$jail_conf" -o -r "$_jconf" ]; then
|
if [ -r "$jail_conf" -o -r "$_jconf" ]; then
|
||||||
warn "$_conf is created and used for jail $_j."
|
if ! checkyesno jail_parallel_start; then
|
||||||
|
warn "$_conf is created and used for jail $_j."
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
/usr/bin/install -m 0644 -o root -g wheel /dev/null $_conf || return 1
|
/usr/bin/install -m 0644 -o root -g wheel /dev/null $_conf || return 1
|
||||||
|
|
||||||
@ -367,10 +369,10 @@ jail_handle_ips_option()
|
|||||||
# Append address to list of addresses for the jail command.
|
# Append address to list of addresses for the jail command.
|
||||||
case $_type in
|
case $_type in
|
||||||
inet)
|
inet)
|
||||||
echo " ip4.addr += \"${_iface}|${_addr}${_mask}\";"
|
echo " ip4.addr += \"${_iface:+${_iface}|}${_addr}${_mask}\";"
|
||||||
;;
|
;;
|
||||||
inet6)
|
inet6)
|
||||||
echo " ip6.addr += \"${_iface}|${_addr}${_mask}\";"
|
echo " ip6.addr += \"${_iface:+${_iface}|}${_addr}${_mask}\";"
|
||||||
need_dad_wait=1
|
need_dad_wait=1
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
@ -418,7 +420,7 @@ jail_status()
|
|||||||
|
|
||||||
jail_start()
|
jail_start()
|
||||||
{
|
{
|
||||||
local _j _jid _jn
|
local _j _jid _jn _jl
|
||||||
|
|
||||||
if [ $# = 0 ]; then
|
if [ $# = 0 ]; then
|
||||||
return
|
return
|
||||||
@ -426,47 +428,82 @@ jail_start()
|
|||||||
echo -n 'Starting jails:'
|
echo -n 'Starting jails:'
|
||||||
case $1 in
|
case $1 in
|
||||||
_ALL)
|
_ALL)
|
||||||
echo -n ' '
|
|
||||||
command=$jail_program
|
command=$jail_program
|
||||||
rc_flags=$jail_flags
|
rc_flags=$jail_flags
|
||||||
command_args="-f $jail_conf -c"
|
command_args="-f $jail_conf -c"
|
||||||
$jail_jls -nq | while read IN; do
|
_tmp=`mktemp -t jail` || exit 3
|
||||||
_jn=$(echo $IN | tr " " "\n" | grep name=)
|
if $command $rc_flags $command_args >> $_tmp 2>&1; then
|
||||||
_jid=$(echo $IN | tr " " "\n" | grep jid=)
|
$jail_jls -nq | while read IN; do
|
||||||
if $command $rc_flags $command_args ${_jn#name=}; then
|
_jn=$(echo $IN | tr " " "\n" | grep ^name=)
|
||||||
|
_jid=$(echo $IN | tr " " "\n" | grep ^jid=)
|
||||||
echo -n " ${_jn#name=}"
|
echo -n " ${_jn#name=}"
|
||||||
echo "${_jid#jid=}" \
|
echo "${_jid#jid=}" \
|
||||||
> /var/run/jail_${_jn#name=}.id
|
> /var/run/jail_${_jn#name=}.id
|
||||||
fi
|
done
|
||||||
done
|
else
|
||||||
|
tail -1 $_tmp
|
||||||
|
fi
|
||||||
|
rm -f $_tmp
|
||||||
echo '.'
|
echo '.'
|
||||||
return
|
return
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
_tmp=`mktemp -t jail` || exit 3
|
if checkyesno jail_parallel_start; then
|
||||||
for _j in $@; do
|
#
|
||||||
_j=$(echo $_j | tr /. _)
|
# Start jails in parallel and then check jail id when
|
||||||
parse_options $_j || continue
|
# jail_parallel_start is YES.
|
||||||
|
#
|
||||||
|
_jl=
|
||||||
|
for _j in $@; do
|
||||||
|
_j=$(echo $_j | tr /. _)
|
||||||
|
parse_options $_j || continue
|
||||||
|
|
||||||
eval rc_flags=\${jail_${_j}_flags:-$jail_flags}
|
_jl="$_jl $_j"
|
||||||
eval command=\${jail_${_j}_program:-$jail_program}
|
eval rc_flags=\${jail_${_j}_flags:-$jail_flags}
|
||||||
if checkyesno jail_parallel_start; then
|
eval command=\${jail_${_j}_program:-$jail_program}
|
||||||
command_args="-i -f $_conf -c $_j &"
|
|
||||||
else
|
|
||||||
command_args="-i -f $_conf -c $_j"
|
command_args="-i -f $_conf -c $_j"
|
||||||
fi
|
$command $rc_flags $command_args \
|
||||||
if $command $rc_flags $command_args \
|
>/dev/null 2>&1 </dev/null &
|
||||||
>> $_tmp 2>&1 </dev/null; then
|
done
|
||||||
|
sleep 1
|
||||||
|
for _j in $_jl; do
|
||||||
echo -n " ${_hostname:-${_j}}"
|
echo -n " ${_hostname:-${_j}}"
|
||||||
_jid=$($jail_jls -n -j $_j | tr " " "\n" | grep jid=)
|
if _jid=$($jail_jls -n -j $_j | tr " " "\n" | \
|
||||||
echo "${_jid#jid=}" > /var/run/jail_${_j}.id
|
grep ^jid=); then
|
||||||
else
|
echo "${_jid#jid=}" > /var/run/jail_${_j}.id
|
||||||
rm -f /var/run/jail_${_j}.id
|
else
|
||||||
echo " cannot start jail \"${_hostname:-${_j}}\": "
|
rm -f /var/run/jail_${_j}.id
|
||||||
cat $_tmp
|
echo " cannot start jail " \
|
||||||
fi
|
"\"${_hostname:-${_j}}\": "
|
||||||
rm -f $_tmp
|
fi
|
||||||
done
|
done
|
||||||
|
else
|
||||||
|
#
|
||||||
|
# Start jails one-by-one when jail_parallel_start is NO.
|
||||||
|
#
|
||||||
|
for _j in $@; do
|
||||||
|
_j=$(echo $_j | tr /. _)
|
||||||
|
parse_options $_j || continue
|
||||||
|
|
||||||
|
eval rc_flags=\${jail_${_j}_flags:-$jail_flags}
|
||||||
|
eval command=\${jail_${_j}_program:-$jail_program}
|
||||||
|
command_args="-i -f $_conf -c $_j"
|
||||||
|
_tmp=`mktemp -t jail` || exit 3
|
||||||
|
if $command $rc_flags $command_args \
|
||||||
|
>> $_tmp 2>&1 </dev/null; then
|
||||||
|
echo -n " ${_hostname:-${_j}}"
|
||||||
|
_jid=$($jail_jls -n -j $_j | \
|
||||||
|
tr " " "\n" | grep ^jid=)
|
||||||
|
echo "${_jid#jid=}" > /var/run/jail_${_j}.id
|
||||||
|
else
|
||||||
|
rm -f /var/run/jail_${_j}.id
|
||||||
|
echo " cannot start jail " \
|
||||||
|
"\"${_hostname:-${_j}}\": "
|
||||||
|
cat $_tmp
|
||||||
|
fi
|
||||||
|
rm -f $_tmp
|
||||||
|
done
|
||||||
|
fi
|
||||||
echo '.'
|
echo '.'
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -480,17 +517,21 @@ jail_stop()
|
|||||||
echo -n 'Stopping jails:'
|
echo -n 'Stopping jails:'
|
||||||
case $1 in
|
case $1 in
|
||||||
_ALL)
|
_ALL)
|
||||||
echo -n ' '
|
|
||||||
command=$jail_program
|
command=$jail_program
|
||||||
rc_flags=$jail_flags
|
rc_flags=$jail_flags
|
||||||
command_args="-f $jail_conf -r"
|
command_args="-f $jail_conf -r"
|
||||||
$jail_jls -nq | while read IN; do
|
$jail_jls -nq | while read IN; do
|
||||||
_jn=$(echo $IN | tr " " "\n" | grep name=)
|
_jn=$(echo $IN | tr " " "\n" | grep ^name=)
|
||||||
echo -n " ${_jn#name=}"
|
echo -n " ${_jn#name=}"
|
||||||
$command $rc_flags $command_args ${_jn#name=}
|
_tmp=`mktemp -t jail` || exit 3
|
||||||
if ! $jail_jls -j ${_jn#name=} > /dev/null 2>&1; then
|
$command $rc_flags $command_args ${_jn#name=} \
|
||||||
|
>> $_tmp 2>&1
|
||||||
|
if $jail_jls -j ${_jn#name=} > /dev/null 2>&1; then
|
||||||
|
tail -1 $_tmp
|
||||||
|
else
|
||||||
rm -f /var/run/jail_${_jn#name=}.id
|
rm -f /var/run/jail_${_jn#name=}.id
|
||||||
fi
|
fi
|
||||||
|
rm -f $_tmp
|
||||||
done
|
done
|
||||||
echo '.'
|
echo '.'
|
||||||
return
|
return
|
||||||
@ -504,10 +545,14 @@ jail_stop()
|
|||||||
fi
|
fi
|
||||||
eval command=\${jail_${_j}_program:-$jail_program}
|
eval command=\${jail_${_j}_program:-$jail_program}
|
||||||
echo -n " ${_hostname:-${_j}}"
|
echo -n " ${_hostname:-${_j}}"
|
||||||
$command -q -f $_conf -r $_j
|
_tmp=`mktemp -t jail` || exit 3
|
||||||
if ! $jail_jls -j $_j > /dev/null 2>&1; then
|
$command -q -f $_conf -r $_j >> $_tmp 2>&1
|
||||||
|
if $jail_jls -j $_j > /dev/null 2>&1; then
|
||||||
|
tail -1 $_tmp
|
||||||
|
else
|
||||||
rm -f /var/run/jail_${_j}.id
|
rm -f /var/run/jail_${_j}.id
|
||||||
fi
|
fi
|
||||||
|
rm -f $_tmp
|
||||||
done
|
done
|
||||||
echo '.'
|
echo '.'
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user