conf/82059: patch to /etc/rc.d/localpkg to partially sort scripts
using rcorder(8)
J.R. Oldroyd
fbsd at opal.com
Thu Jun 9 03:20:02 GMT 2005
>Number: 82059
>Category: conf
>Synopsis: patch to /etc/rc.d/localpkg to partially sort scripts using rcorder(8)
>Confidential: no
>Severity: serious
>Priority: medium
>Responsible: freebsd-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: sw-bug
>Submitter-Id: current-users
>Arrival-Date: Thu Jun 09 03:20:01 GMT 2005
>Closed-Date:
>Last-Modified:
>Originator: J.R. Oldroyd
>Release: FreeBSD 6.0-CURRENT i386
>Organization:
>Environment:
System: FreeBSD linwhf.opal.com 6.0-CURRENT FreeBSD 6.0-CURRENT #83: Thu Jun 2 09:20:18 EDT 2005 xxx:/usr/src-current/sys/i386/compile/LINWHF i386
>Description:
Certain local rc.d scripts do not currently start because scripts are
executed in alphabetic order, even though many ports provide rcorder(8)
tags. This patch modifies /etc/rc.d/localpkg to sort the local scripts
using rcorder tags, if present, while preserving existing semantics
for scripts named 000.foo.sh.
>How-To-Repeat:
Install www/apache2 and net/freenet6.
Configure apache to use a freenet6 IPv6 address.
Reboot and watch apache fail to start because apache2.sh is run before freenet6.sh.
>Fix:
--- /etc/rc.d/localpkg.orig Fri Oct 8 13:52:43 2004
+++ /etc/rc.d/localpkg Tue Jun 7 15:19:19 2005
@@ -14,6 +14,9 @@
start_cmd="pkg_start"
stop_cmd="pkg_stop"
+rcorder_opts=""
+[ `/sbin/sysctl -n security.jail.jailed` -eq 1 ] && rcorder_opts="-s nojail"
+
pkg_start()
{
# For each dir in $local_startup, search for init scripts matching *.sh
@@ -24,19 +27,14 @@
*)
echo -n 'Local package initialization:'
slist=""
- if [ -z "${script_name_sep}" ]; then
- script_name_sep=" "
- fi
+ zlist=""
for dir in ${local_startup}; do
if [ -d "${dir}" ]; then
- for script in ${dir}/*.sh; do
- slist="${slist}${script_name_sep}${script}"
- done
+ slist="${slist} ${dir}/[^0-9]*.sh"
+ zlist="${zlist} ${dir}/[0-9]*.sh"
fi
done
- script_save_sep="$IFS"
- IFS="${script_name_sep}"
- for script in ${slist}; do
+ for script in ${zlist} `rcorder -s nostart ${rcorder_opts} ${slist} 2>/dev/null`; do
if [ -x "${script}" ]; then
(set -T
trap 'exit 1' 2
@@ -45,7 +43,6 @@
echo -n " (skipping ${script##*/}, not executable)"
fi
done
- IFS="${script_save_sep}"
echo '.'
;;
esac
@@ -61,26 +58,20 @@
;;
*)
slist=""
- if [ -z "${script_name_sep}" ]; then
- script_name_sep=" "
- fi
+ zlist=""
for dir in ${local_startup}; do
if [ -d "${dir}" ]; then
- for script in ${dir}/*.sh; do
- slist="${slist}${script_name_sep}${script}"
- done
+ slist="${slist} ${dir}/[^0-9]*.sh"
+ zlist="${zlist} ${dir}/[0-9]*.sh"
fi
done
- script_save_sep="$IFS"
- IFS="${script_name_sep}"
- for script in `reverse_list ${slist}`; do
+ for script in `reverse_list ${zlist} \`rcorder -k shutdown ${rcorder_opts} ${slist} 2>/dev/null\``; do
if [ -x "${script}" ]; then
(set -T
trap 'exit 1' 2
${script} stop)
fi
done
- IFS="${script_save_sep}"
echo '.'
;;
esac
>Release-Note:
>Audit-Trail:
>Unformatted:
More information about the freebsd-bugs
mailing list