aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPreston Brown <pbrown@redhat.com>2002-10-23 18:53:29 +0000
committerPreston Brown <pbrown@redhat.com>2002-10-23 18:53:29 +0000
commitd8aba911052ae17783cfde7948b69ee0d7e1a6b0 (patch)
tree493e02e3d4157eae4cf75f7c7129a8d9f9d6405e
parentf11675a37c178f4e7e05b5d107f3a10ba4716864 (diff)
downloadinitscripts-d8aba911052ae17783cfde7948b69ee0d7e1a6b0.tar
initscripts-d8aba911052ae17783cfde7948b69ee0d7e1a6b0.tar.gz
initscripts-d8aba911052ae17783cfde7948b69ee0d7e1a6b0.tar.bz2
initscripts-d8aba911052ae17783cfde7948b69ee0d7e1a6b0.tar.xz
initscripts-d8aba911052ae17783cfde7948b69ee0d7e1a6b0.zip
initial serel (parallel boot) support.
-rw-r--r--initscripts.spec8
-rwxr-xr-xrc.d/init.d/functions181
-rwxr-xr-xrc.d/rc26
-rw-r--r--serel/default.rdf1033
-rw-r--r--serel/local.rdf13
-rw-r--r--serel/serel.conf36
-rw-r--r--sysconfig/init21
7 files changed, 1290 insertions, 28 deletions
diff --git a/initscripts.spec b/initscripts.spec
index 6adfc381..efb37b3e 100644
--- a/initscripts.spec
+++ b/initscripts.spec
@@ -1,9 +1,9 @@
Summary: The inittab file and the /etc/init.d scripts.
Name: initscripts
-Version: 6.95
+Version: 6.96
License: GPL
Group: System Environment/Base
-Release: 1
+Release: 1serel
Source: initscripts-%{version}.tar.bz2
URL: http://rhlinux.redhat.com/initscripts/
Patch0: initscripts-s390.patch
@@ -16,6 +16,7 @@ Requires: util-linux >= 2.10s-11, mount >= 2.11g-5
Requires: bash >= 2.0, SysVinit
Requires: /sbin/ip, /sbin/arping, net-tools
Requires: /sbin/update, /etc/redhat-release
+Requires: serel
Conflicts: kernel <= 2.2, timeconfig < 3.0, pppd < 2.3.9, wvdial < 1.40-3
Conflicts: ypbind < 1.6-12, psacct < 6.3.2-12, kbd < 1.06-19, lokkit < 0.50-14
Obsoletes: rhsound sapinit
@@ -245,6 +246,9 @@ rm -rf $RPM_BUILD_ROOT
%dir /etc/locale/*/LC_MESSAGES
%changelog
+* Wed Oct 23 2002 Preston Brown <pbrown@redhat.com> 6.96-1serel
+- Add serel (parallel boot) support
+
* Mon Sep 16 2002 Than Ngo <than@redhat.com> 6.96-1
- owns directory /etc/ppp/peers (bug #74037)
diff --git a/rc.d/init.d/functions b/rc.d/init.d/functions
index 15a7fad1..cf5cbc27 100755
--- a/rc.d/init.d/functions
+++ b/rc.d/init.d/functions
@@ -3,11 +3,6 @@
# functions This file contains functions to be used by most or all
# shell scripts in the /etc/init.d directory.
#
-# Author: Miquel van Smoorenburg, <miquels@drinkel.nl.mugnet.org>
-# Hacked by: Greg Galloway and Marc Ewing
-#
-# i18n originally by: Arnaldo Carvalho de Melo <acme@conectiva.com.br>,
-# Wanderlei Antonio Cavassin
TEXTDOMAIN=initscripts
TEXTDOMAINDIR=/etc/locale
@@ -422,6 +417,32 @@ action() {
return $rc
}
+
+# bgaction()
+# A replacement for action() that runs the script arguments in
+# the background.
+#
+# I have a vague worry about a subtle race condition lurking
+# both here and in the regular non-serel boot. initlog's
+# behaviour apepars undefined unless syslog has started, so what
+# about when this routine gets called prior to syslog starting?
+# Must investigate further!
+#
+bgaction() {
+ STRING=$1
+ echo -n "$STRING "
+ shift
+ /bin/bash -s << END &
+. /etc/init.d/functions
+initlog $INITLOG_ARGS -c "serel-wrap $*" && \
+ success $"$STRING" || failure $"$STRING"
+rc=$?
+echo
+exit $rc
+END
+}
+
+
# returns OK if $1 contains $2
strstr() {
#case "$1" in
@@ -452,3 +473,153 @@ confirm() {
fi
done
}
+
+# check a file to be a correct runlevel script
+check_runlevel ()
+{
+ # Check if the file exists at all.
+ [ -x "$1" ] || return 1
+
+ # Reject backup files and files generated by rpm.
+ case "$1" in
+ *.rpmsave|*.rpmorig|*.rpmnew|*~|*.orig)
+ return 1
+ ;;
+ esac
+ return 0
+}
+
+
+
+# toggle if 'serel' was passed on the boot line
+#
+serel_boot_toggle() {
+ if grep -i serel /proc/cmdline >/dev/null; then
+
+ if [ $SEREL_BOOT = "yes" ]; then
+ SEREL_BOOT="no"
+ else
+ SEREL_BOOT="yes"
+ fi
+ fi
+}
+
+serel_start_populate_validate() {
+ [ "$SEREL_BOOT" = "yes" ] && sereld -b $SERELD_OPTIONS
+
+ [ "$SEREL_BOOT" = "yes" -a $? != "0" ] && SEREL_BOOT="no"
+
+ # tell the daemon what's started and what's about to start
+ if [ "$SEREL_BOOT" = "yes" ]; then
+ serelhistory --populate <<EOF
+--started
+$SEREL_STARTED
+--pairs
+$SEREL_PAIRS
+EOF
+ fi
+
+ [ "$SEREL_BOOT" = "yes" -a $? != "0" ] && \
+ SEREL_BOOT="no" && serelc --control stop
+
+ [ "$SEREL_BOOT" = "yes" ] && \
+ serelhistory --query verify | grep "success" 2>&1 > /dev/null
+
+ [ "$SEREL_BOOT" = "yes" -a $? != "0" ] && \
+ SEREL_BOOT="no" && serelc --control stop
+}
+
+# Use serel to start in parallel?
+#
+redhat_sysvinit_start () {
+SEREL_BOOT=no
+
+# 0, 1 and 6 don't need serel
+#
+if [ "$CONFIRM" != "yes" ] && [ $runlevel = "2" -o $runlevel = "3" -o $runlevel = "4" -o $runlevel = "5" ]; then
+ # also check the kernel command line
+ serel_boot_toggle
+
+ [ -f /usr/bin/sereld ] || SEREL_BOOT="no"
+fi
+
+if [ "$SEREL_BOOT" = "yes" ]; then
+ # Work out what's already started, and what's about to start
+ #
+ SEREL_STARTED=
+ SEREL_PAIRS=
+
+ for i in /etc/rc$runlevel.d/S*; do
+ check_runlevel "$i" || continue
+
+ # build the arguments to --populate
+
+ # Check if the subsystem is already up.
+ subsys=${i#/etc/rc$runlevel.d/S??}
+
+ # fall back to non-serel boot in these cases
+ if [ "$subsys" = "halt" -o "$subsys" = "reboot" -o "$subsys" = "single" ]; then
+ SEREL_BOOT=
+ break;
+ fi
+
+ if [ -f /var/lock/subsys/$subsys -o \
+ -f /var/lock/subsys/${subsys}.init ]; then
+ # Add subsystem to already started list
+ SEREL_STARTED="$SEREL_STARTED $subsys"
+ continue;
+ fi
+
+ # If we're in confirmation mode, get user confirmation
+ if [ -n "$CONFIRM" ]; then
+ confirm $subsys
+ case $? in
+ 0) :;;
+ 2) CONFIRM=;;
+ *) continue;;
+ esac
+ fi
+
+ SEREL_PAIRS="$SEREL_PAIRS $subsys $i"
+ done
+fi
+
+serel_start_populate_validate
+
+if [ "$SEREL_BOOT" = "yes" ]; then
+ # can't fall back to normal-boot now, we're going with serel
+ #
+ serelhistory --apply-started
+
+ toggle="service"
+
+ for i in $SEREL_PAIRS; do
+ if [ "$toggle" = "service" ]; then
+ toggle="path"
+ subsys=$i
+ continue
+ else
+ toggle="service"
+ path=$i
+ fi
+
+ egrep -q "(daemon |action )" $path
+
+ if [ $? = "0" -o "$subsys" = "local" ]; then
+ serel-wrap $path start &
+ else
+
+ bgaction $"Starting $subsys: " $path start
+ fi
+ done
+
+ wait
+
+ # No need to generate a new graph if --populate reused an old history.
+ #
+ serelhistory --query prior-history | grep -v "success" 2>&1 > /dev/null
+ [ -n "$SEREL_GENERATE_RDF" -a $? = "0" ] && serel-rdfgen > $SEREL_GENERATE_RDF
+
+ serelc --control stop
+fi
+}
diff --git a/rc.d/rc b/rc.d/rc
index 7785e8f3..4ef7d209 100755
--- a/rc.d/rc
+++ b/rc.d/rc
@@ -3,24 +3,6 @@
# rc This file is responsible for starting/stopping
# services when the runlevel changes.
#
-# Original Author:
-# Miquel van Smoorenburg, <miquels@drinkel.nl.mugnet.org>
-#
-
-# check a file to be a correct runlevel script
-check_runlevel ()
-{
- # Check if the file exists at all.
- [ -x "$1" ] || return 1
-
- # Reject backup files and files generated by rpm.
- case "$1" in
- *.rpmsave|*.rpmorig|*.rpmnew|*~|*.orig)
- return 1
- ;;
- esac
- return 0
-}
# Now find out what the current and what the previous runlevel are.
argv1="$1"
@@ -67,7 +49,13 @@ for i in /etc/rc$runlevel.d/K* ; do
fi
done
-# Now run the START scripts.
+# Now run the START scripts in parallel with serel, if available.
+if [ -x /sbin/sereld ]; then
+ redhat_sysvinit_start
+fi
+
+# Othwerwise, run the START scripts as specified by legacy ordering.
+[ "$SEREL_BOOT" != "yes" ] && \
for i in /etc/rc$runlevel.d/S* ; do
check_runlevel "$i" || continue
diff --git a/serel/default.rdf b/serel/default.rdf
new file mode 100644
index 00000000..ea7a7252
--- /dev/null
+++ b/serel/default.rdf
@@ -0,0 +1,1033 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!--
+/*
+ * Copyright (C) 2002 Leni Mayo.
+ * Copyright (C) 2002 Red Hat, Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License, version 2, as
+ * published by the Free Software Foundation.
+ *
+ * This software is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
+ * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+Default service definitions for services used with Redhat Linux.
+
+To change the dependencies or add a new entry - don't change
+this file - modify /etc/serel/local.rdf instead.
+Service definitions in that file will take precedence over this file
+as per the default value of rdfpath set in /etc/serel/serel.conf.
+
+-->
+
+<rdf:RDF
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:serel="http://www.fastboot.org/2002/03/serel-schema#"
+ xmlns:graph="http://www.fastboot.org/2002/03/graph-schema#"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns="http://www.fastboot.org/2002/03/graph-schema#"
+>
+
+<!-- anacron BEGINS -->
+<service rdf:ID="anacron" >
+ <edges>
+ <rdf:Bag>
+ <rdf:li rdf:resource="#edge-syslog-anacron" />
+ </rdf:Bag>
+ </edges>
+</service>
+
+<edge rdf:ID="edge-syslog-anacron" >
+ <source rdf:resource="#syslog"/>
+ <target rdf:resource="#anacron"/>
+</edge>
+<!-- anacron ENDS -->
+
+<!-- apmd BEGINS -->
+<service rdf:ID="apmd" >
+ <edges>
+ <rdf:Bag>
+ <rdf:li rdf:resource="#edge-syslog-apmd" />
+ </rdf:Bag>
+ </edges>
+</service>
+
+<edge rdf:ID="edge-syslog-apmd" >
+ <source rdf:resource="#syslog"/>
+ <target rdf:resource="#apmd"/>
+</edge>
+<!-- apmd ENDS -->
+
+<!-- arpwatch BEGINS -->
+<service rdf:ID="arpwatch" >
+ <edges>
+ <rdf:Bag>
+ <rdf:li rdf:resource="#edge-network-arpwatch" />
+ </rdf:Bag>
+ </edges>
+</service>
+
+<edge rdf:ID="edge-network-arpwatch" >
+ <source rdf:resource="#network"/>
+ <target rdf:resource="#arpwatch"/>
+</edge>
+<!-- arpwatch ENDS -->
+
+<!-- atd BEGINS -->
+<service rdf:ID="atd" >
+ <edges>
+ <rdf:Bag>
+ <rdf:li rdf:resource="#edge-kudzu-atd" />
+ <rdf:li rdf:resource="#edge-syslog-atd" />
+ </rdf:Bag>
+ </edges>
+</service>
+
+<edge rdf:ID="edge-kudzu-atd" >
+ <source rdf:resource="#kudzu"/>
+ <target rdf:resource="#atd"/>
+</edge>
+
+<edge rdf:ID="edge-syslog-atd" >
+ <source rdf:resource="#syslog"/>
+ <target rdf:resource="#atd"/>
+</edge>
+<!-- atd ENDS -->
+
+<!-- autofs BEGINS -->
+<service rdf:ID="autofs" >
+ <edges>
+ <rdf:Bag>
+ <rdf:li rdf:resource="#edge-network-autofs" />
+ <rdf:li rdf:resource="#edge-syslog-autofs" />
+ <rdf:li rdf:resource="#edge-netfs-autofs" />
+ </rdf:Bag>
+ </edges>
+</service>
+
+<edge rdf:ID="edge-network-autofs" >
+ <source rdf:resource="#network"/>
+ <target rdf:resource="#autofs"/>
+</edge>
+
+<edge rdf:ID="edge-syslog-autofs" >
+ <source rdf:resource="#syslog"/>
+ <target rdf:resource="#autofs"/>
+</edge>
+
+<edge rdf:ID="edge-netfs-autofs" >
+ <source rdf:resource="#netfs"/>
+ <target rdf:resource="#autofs"/>
+</edge>
+<!-- autofs ENDS -->
+
+<!-- bcm5820 BEGINS -->
+<service rdf:ID="bcm5820" >
+ <edges>
+ <rdf:Bag>
+ <rdf:li rdf:resource="#edge-network-bcm5820" />
+ </rdf:Bag>
+ </edges>
+</service>
+
+<edge rdf:ID="edge-network-bcm5820" >
+ <source rdf:resource="#network"/>
+ <target rdf:resource="#bcm5820"/>
+</edge>
+<!-- bcm5820 ENDS -->
+
+<!-- crond BEGINS -->
+<service rdf:ID="crond" >
+ <edges>
+ <rdf:Bag>
+ <rdf:li rdf:resource="#edge-kudzu-crond" />
+ <rdf:li rdf:resource="#edge-syslog-crond" />
+ </rdf:Bag>
+ </edges>
+</service>
+
+<edge rdf:ID="edge-kudzu-crond" >
+ <source rdf:resource="#kudzu"/>
+ <target rdf:resource="#crond"/>
+</edge>
+
+<edge rdf:ID="edge-syslog-crond" >
+ <source rdf:resource="#syslog"/>
+ <target rdf:resource="#crond"/>
+</edge>
+<!-- crond ENDS -->
+
+<!-- cups BEGINS -->
+<service rdf:ID="cups" >
+ <edges>
+ <rdf:Bag>
+ <rdf:li rdf:resource="#edge-syslog-cups" />
+ <rdf:li rdf:resource="#edge-lpd-cups" />
+ <rdf:li rdf:resource="#edge-smb-cups" />
+ </rdf:Bag>
+ </edges>
+</service>
+
+<edge rdf:ID="edge-syslog-cups" >
+ <source rdf:resource="#syslog"/>
+ <target rdf:resource="#cups"/>
+</edge>
+
+<edge rdf:ID="edge-lpd-cups" >
+ <source rdf:resource="#lpd"/>
+ <target rdf:resource="#cups"/>
+</edge>
+
+<edge rdf:ID="edge-smb-cups" >
+ <source rdf:resource="#smb"/>
+ <target rdf:resource="#cups"/>
+</edge>
+<!-- cups ENDS -->
+
+<!-- dhcpd BEGINS -->
+<service rdf:ID="dhcpd" >
+ <edges>
+ <rdf:Bag>
+ <rdf:li rdf:resource="#edge-network-dhcpd" />
+ <rdf:li rdf:resource="#edge-syslog-dhcpd" />
+ </rdf:Bag>
+ </edges>
+</service>
+
+<edge rdf:ID="edge-network-dhcpd" >
+ <source rdf:resource="#network"/>
+ <target rdf:resource="#dhcpd"/>
+</edge>
+
+<edge rdf:ID="edge-syslog-dhcpd" >
+ <source rdf:resource="#syslog"/>
+ <target rdf:resource="#dhcpd"/>
+</edge>
+<!-- dhcpd ENDS -->
+
+<!-- gpm BEGINS -->
+<service rdf:ID="gpm" >
+ <edges>
+ <rdf:Bag>
+ <rdf:li rdf:resource="#edge-kudzu-gpm" />
+ <rdf:li rdf:resource="#edge-syslog-gpm" />
+ </rdf:Bag>
+ </edges>
+</service>
+
+<edge rdf:ID="edge-kudzu-gpm" >
+ <source rdf:resource="#kudzu"/>
+ <target rdf:resource="#gpm"/>
+</edge>
+
+<edge rdf:ID="edge-syslog-gpm" >
+ <source rdf:resource="#syslog"/>
+ <target rdf:resource="#gpm"/>
+</edge>
+<!-- gpm ENDS -->
+
+<!-- httpd BEGINS -->
+<service rdf:ID="httpd" >
+ <edges>
+ <rdf:Bag>
+ <rdf:li rdf:resource="#edge-network-httpd" />
+ <rdf:li rdf:resource="#edge-syslog-httpd" />
+ </rdf:Bag>
+ </edges>
+</service>
+
+<edge rdf:ID="edge-network-httpd" >
+ <source rdf:resource="#network"/>
+ <target rdf:resource="#httpd"/>
+</edge>
+
+<edge rdf:ID="edge-syslog-httpd" >
+ <source rdf:resource="#syslog"/>
+ <target rdf:resource="#httpd"/>
+</edge>
+<!-- httpd ENDS -->
+
+<!-- identd BEGINS -->
+<service rdf:ID="identd" >
+ <edges>
+ <rdf:Bag>
+ <rdf:li rdf:resource="#edge-network-identd" />
+ <rdf:li rdf:resource="#edge-syslog-identd" />
+ </rdf:Bag>
+ </edges>
+</service>
+
+<edge rdf:ID="edge-network-identd" >
+ <source rdf:resource="#network"/>
+ <target rdf:resource="#identd"/>
+</edge>
+
+<edge rdf:ID="edge-syslog-identd" >
+ <source rdf:resource="#syslog"/>
+ <target rdf:resource="#identd"/>
+</edge>
+<!-- identd ENDS -->
+
+<!-- ipchains BEGINS -->
+<service rdf:ID="ipchains" >
+</service>
+<!-- ipchains ENDS -->
+
+<!-- iptables BEGINS -->
+<service rdf:ID="iptables" >
+</service>
+<!-- iptables ENDS -->
+
+<!-- isdn BEGINS -->
+<service rdf:ID="isdn" >
+ <edges>
+ <rdf:Bag>
+ <rdf:li rdf:resource="#edge-network-isdn" />
+ <rdf:li rdf:resource="#edge-syslog-isdn" />
+ </rdf:Bag>
+ </edges>
+</service>
+
+<edge rdf:ID="edge-network-isdn" >
+ <source rdf:resource="#network"/>
+ <target rdf:resource="#isdn"/>
+</edge>
+
+<edge rdf:ID="edge-syslog-isdn" >
+ <source rdf:resource="#syslog"/>
+ <target rdf:resource="#isdn"/>
+</edge>
+<!-- isdn ENDS -->
+
+<!-- kdcrotate BEGINS -->
+<service rdf:ID="kdcrotate" >
+ <edges>
+ <rdf:Bag>
+ <rdf:li rdf:resource="#edge-syslog-kdcrotate" />
+ </rdf:Bag>
+ </edges>
+</service>
+
+<edge rdf:ID="edge-syslog-kdcrotate" >
+ <source rdf:resource="#syslog"/>
+ <target rdf:resource="#kdcrotate"/>
+</edge>
+<!-- kdcrotate ENDS -->
+
+<!-- keytable BEGINS -->
+<service rdf:ID="keytable" >
+ <edges>
+ <rdf:Bag>
+ <rdf:li rdf:resource="#edge-kudzu-keytable" />
+ </rdf:Bag>
+ </edges>
+</service>
+
+<edge rdf:ID="edge-kudzu-keytable" >
+ <source rdf:resource="#kudzu"/>
+ <target rdf:resource="#keytable"/>
+</edge>
+<!-- keytable ENDS -->
+
+<!-- killall BEGINS -->
+<service rdf:ID="killall" >
+</service>
+<!-- killall ENDS -->
+
+<!-- kudzu BEGINS -->
+<service rdf:ID="kudzu" >
+</service>
+<!-- kudzu ENDS -->
+
+<!-- lpd BEGINS -->
+<service rdf:ID="lpd" >
+ <edges>
+ <rdf:Bag>
+ <rdf:li rdf:resource="#edge-syslog-lpd" />
+ </rdf:Bag>
+ </edges>
+</service>
+
+<edge rdf:ID="edge-syslog-lpd" >
+ <source rdf:resource="#syslog"/>
+ <target rdf:resource="#lpd"/>
+</edge>
+<!-- lpd ENDS -->
+
+<!-- named BEGINS -->
+<service rdf:ID="named" >
+ <edges>
+ <rdf:Bag>
+ <rdf:li rdf:resource="#edge-network-named" />
+ <rdf:li rdf:resource="#edge-syslog-named" />
+ </rdf:Bag>
+ </edges>
+</service>
+
+<edge rdf:ID="edge-network-named" >
+ <source rdf:resource="#network"/>
+ <target rdf:resource="#named"/>
+</edge>
+
+<edge rdf:ID="edge-syslog-named" >
+ <source rdf:resource="#syslog"/>
+ <target rdf:resource="#named"/>
+</edge>
+<!-- named ENDS -->
+
+<!-- netfs BEGINS -->
+<service rdf:ID="netfs" >
+ <edges>
+ <rdf:Bag>
+ <rdf:li rdf:resource="#edge-network-netfs" />
+ <rdf:li rdf:resource="#edge-syslog-netfs" />
+ <rdf:li rdf:resource="#edge-portmap-netfs" />
+ <rdf:li rdf:resource="#edge-nfslock-netfs" />
+ </rdf:Bag>
+ </edges>
+</service>
+
+<edge rdf:ID="edge-network-netfs" >
+ <source rdf:resource="#network"/>
+ <target rdf:resource="#netfs"/>
+</edge>
+
+<edge rdf:ID="edge-syslog-netfs" >
+ <source rdf:resource="#syslog"/>
+ <target rdf:resource="#netfs"/>
+</edge>
+
+<edge rdf:ID="edge-portmap-netfs" >
+ <source rdf:resource="#portmap"/>
+ <target rdf:resource="#netfs"/>
+</edge>
+
+<edge rdf:ID="edge-nfslock-netfs" >
+ <source rdf:resource="#nfslock"/>
+ <target rdf:resource="#netfs"/>
+</edge>
+<!-- netfs ENDS -->
+
+<!-- network BEGINS -->
+<service rdf:ID="network" >
+ <edges>
+ <rdf:Bag>
+ <rdf:li rdf:resource="#edge-ipchains-network" />
+ <rdf:li rdf:resource="#edge-iptables-network" />
+ </rdf:Bag>
+ </edges>
+</service>
+
+<edge rdf:ID="edge-ipchains-network" >
+ <source rdf:resource="#ipchains"/>
+ <target rdf:resource="#network"/>
+</edge>
+
+<edge rdf:ID="edge-iptables-network" >
+ <source rdf:resource="#iptables"/>
+ <target rdf:resource="#network"/>
+</edge>
+<!-- network ENDS -->
+
+<!-- nfs BEGINS -->
+<service rdf:ID="nfs" >
+ <edges>
+ <rdf:Bag>
+ <rdf:li rdf:resource="#edge-network-nfs" />
+ <rdf:li rdf:resource="#edge-syslog-nfs" />
+ <rdf:li rdf:resource="#edge-portmap-nfs" />
+ <rdf:li rdf:resource="#edge-nfslock-nfs" />
+ </rdf:Bag>
+ </edges>
+</service>
+
+<edge rdf:ID="edge-network-nfs" >
+ <source rdf:resource="#network"/>
+ <target rdf:resource="#nfs"/>
+</edge>
+
+<edge rdf:ID="edge-syslog-nfs" >
+ <source rdf:resource="#syslog"/>
+ <target rdf:resource="#nfs"/>
+</edge>
+
+<edge rdf:ID="edge-portmap-nfs" >
+ <source rdf:resource="#portmap"/>
+ <target rdf:resource="#nfs"/>
+</edge>
+
+<edge rdf:ID="edge-nfslock-nfs" >
+ <source rdf:resource="#nfslock"/>
+ <target rdf:resource="#nfs"/>
+</edge>
+<!-- nfs ENDS -->
+
+<!-- nfslock BEGINS -->
+<service rdf:ID="nfslock" >
+ <edges>
+ <rdf:Bag>
+ <rdf:li rdf:resource="#edge-network-nfslock" />
+ <rdf:li rdf:resource="#edge-syslog-nfslock" />
+ <rdf:li rdf:resource="#edge-portmap-nfslock" />
+ </rdf:Bag>
+ </edges>
+</service>
+
+<edge rdf:ID="edge-network-nfslock" >
+ <source rdf:resource="#network"/>
+ <target rdf:resource="#nfslock"/>
+</edge>
+
+<edge rdf:ID="edge-syslog-nfslock" >
+ <source rdf:resource="#syslog"/>
+ <target rdf:resource="#nfslock"/>
+</edge>
+
+<edge rdf:ID="edge-portmap-nfslock" >
+ <source rdf:resource="#portmap"/>
+ <target rdf:resource="#nfslock"/>
+</edge>
+<!-- nfslock ENDS -->
+
+<!-- nscd BEGINS -->
+<service rdf:ID="nscd" >
+ <edges>
+ <rdf:Bag>
+ <rdf:li rdf:resource="#edge-network-nscd" />
+ <rdf:li rdf:resource="#edge-syslog-nscd" />
+ </rdf:Bag>
+ </edges>
+</service>
+
+<edge rdf:ID="edge-network-nscd" >
+ <source rdf:resource="#network"/>
+ <target rdf:resource="#nscd"/>
+</edge>
+
+<edge rdf:ID="edge-syslog-nscd" >
+ <source rdf:resource="#syslog"/>
+ <target rdf:resource="#nscd"/>
+</edge>
+<!-- nscd ENDS -->
+
+<!-- ntpd BEGINS -->
+<service rdf:ID="ntpd" >
+ <edges>
+ <rdf:Bag>
+ <rdf:li rdf:resource="#edge-network-ntpd" />
+ <rdf:li rdf:resource="#edge-syslog-ntpd" />
+ </rdf:Bag>
+ </edges>
+</service>
+
+<edge rdf:ID="edge-network-ntpd" >
+ <source rdf:resource="#network"/>
+ <target rdf:resource="#ntpd"/>
+</edge>
+
+<edge rdf:ID="edge-syslog-ntpd" >
+ <source rdf:resource="#syslog"/>
+ <target rdf:resource="#ntpd"/>
+</edge>
+<!-- ntpd ENDS -->
+
+<!-- portmap BEGINS -->
+<service rdf:ID="portmap" >
+ <edges>
+ <rdf:Bag>
+ <rdf:li rdf:resource="#edge-network-portmap" />
+ <rdf:li rdf:resource="#edge-syslog-portmap" />
+ </rdf:Bag>
+ </edges>
+</service>
+
+<edge rdf:ID="edge-network-portmap" >
+ <source rdf:resource="#network"/>
+ <target rdf:resource="#portmap"/>
+</edge>
+
+<edge rdf:ID="edge-syslog-portmap" >
+ <source rdf:resource="#syslog"/>
+ <target rdf:resource="#portmap"/>
+</edge>
+<!-- portmap ENDS -->
+
+<!-- postgresql BEGINS -->
+<service rdf:ID="postgresql" >
+ <edges>
+ <rdf:Bag>
+ <rdf:li rdf:resource="#edge-network-postgresql" />
+ <rdf:li rdf:resource="#edge-syslog-postgresql" />
+ </rdf:Bag>
+ </edges>
+</service>
+
+<edge rdf:ID="edge-network-postgresql" >
+ <source rdf:resource="#network"/>
+ <target rdf:resource="#postgresql"/>
+</edge>
+
+<edge rdf:ID="edge-syslog-postgresql" >
+ <source rdf:resource="#syslog"/>
+ <target rdf:resource="#postgresql"/>
+</edge>
+<!-- postgresql ENDS -->
+
+<!-- pppoe BEGINS -->
+<service rdf:ID="pppoe" >
+ <edges>
+ <rdf:Bag>
+ <rdf:li rdf:resource="#edge-network-pppoe" />
+ <rdf:li rdf:resource="#edge-syslog-pppoe" />
+ </rdf:Bag>
+ </edges>
+</service>
+
+<edge rdf:ID="edge-network-pppoe" >
+ <source rdf:resource="#network"/>
+ <target rdf:resource="#pppoe"/>
+</edge>
+
+<edge rdf:ID="edge-syslog-pppoe" >
+ <source rdf:resource="#syslog"/>
+ <target rdf:resource="#pppoe"/>
+</edge>
+<!-- pppoe ENDS -->
+
+<!-- radvd BEGINS -->
+<service rdf:ID="radvd" >
+ <edges>
+ <rdf:Bag>
+ <rdf:li rdf:resource="#edge-network-radvd" />
+ </rdf:Bag>
+ </edges>
+</service>
+
+<edge rdf:ID="edge-network-radvd" >
+ <source rdf:resource="#network"/>
+ <target rdf:resource="#radvd"/>
+</edge>
+<!-- radvd ENDS -->
+
+<!-- random BEGINS -->
+<service rdf:ID="random" >
+</service>
+<!-- random ENDS -->
+
+<!-- rawdevices BEGINS -->
+<service rdf:ID="rawdevices" >
+ <edges>
+ <rdf:Bag>
+ <rdf:li rdf:resource="#edge-kudzu-rawdevices" />
+ </rdf:Bag>
+ </edges>
+</service>
+
+<edge rdf:ID="edge-kudzu-rawdevices" >
+ <source rdf:resource="#kudzu"/>
+ <target rdf:resource="#rawdevices"/>
+</edge>
+<!-- rawdevices ENDS -->
+
+<!-- rhnsd BEGINS -->
+<service rdf:ID="rhnsd" >
+ <edges>
+ <rdf:Bag>
+ <rdf:li rdf:resource="#edge-network-rhnsd" />
+ <rdf:li rdf:resource="#edge-syslog-rhnsd" />
+ </rdf:Bag>
+ </edges>
+</service>
+
+<edge rdf:ID="edge-network-rhnsd" >
+ <source rdf:resource="#network"/>
+ <target rdf:resource="#rhnsd"/>
+</edge>
+
+<edge rdf:ID="edge-syslog-rhnsd" >
+ <source rdf:resource="#syslog"/>
+ <target rdf:resource="#rhnsd"/>
+</edge>
+<!-- rhnsd ENDS -->
+
+<!-- rstatd BEGINS -->
+<service rdf:ID="rstatd" >
+ <edges>
+ <rdf:Bag>
+ <rdf:li rdf:resource="#edge-network-rstatd" />
+ <rdf:li rdf:resource="#edge-syslog-rstatd" />
+ </rdf:Bag>
+ </edges>
+</service>
+
+<edge rdf:ID="edge-network-rstatd" >
+ <source rdf:resource="#network"/>
+ <target rdf:resource="#rstatd"/>
+</edge>
+
+<edge rdf:ID="edge-syslog-rstatd" >
+ <source rdf:resource="#syslog"/>
+ <target rdf:resource="#rstatd"/>
+</edge>
+<!-- rstatd ENDS -->
+
+<!-- rusersd BEGINS -->
+<service rdf:ID="rusersd" >
+ <edges>
+ <rdf:Bag>
+ <rdf:li rdf:resource="#edge-network-rusersd" />
+ <rdf:li rdf:resource="#edge-syslog-rusersd" />
+ </rdf:Bag>
+ </edges>
+</service>
+
+<edge rdf:ID="edge-network-rusersd" >
+ <source rdf:resource="#network"/>
+ <target rdf:resource="#rusersd"/>
+</edge>
+
+<edge rdf:ID="edge-syslog-rusersd" >
+ <source rdf:resource="#syslog"/>
+ <target rdf:resource="#rusersd"/>
+</edge>
+<!-- rusersd ENDS -->
+
+<!-- rwall BEGINS -->
+<service rdf:ID="rwall" >
+ <edges>
+ <rdf:Bag>
+ <rdf:li rdf:resource="#edge-network-rwall" />
+ <rdf:li rdf:resource="#edge-syslog-rwall" />
+ </rdf:Bag>
+ </edges>
+</service>
+
+<edge rdf:ID="edge-network-rwall" >
+ <source rdf:resource="#network"/>
+ <target rdf:resource="#rwall"/>
+</edge>
+
+<edge rdf:ID="edge-syslog-rwall" >
+ <source rdf:resource="#syslog"/>
+ <target rdf:resource="#rwall"/>
+</edge>
+<!-- rwall ENDS -->
+
+<!-- rwhod BEGINS -->
+<service rdf:ID="rwhod" >
+ <edges>
+ <rdf:Bag>
+ <rdf:li rdf:resource="#edge-network-rwhod" />
+ <rdf:li rdf:resource="#edge-syslog-rwhod" />
+ </rdf:Bag>
+ </edges>
+</service>
+
+<edge rdf:ID="edge-network-rwhod" >
+ <source rdf:resource="#network"/>
+ <target rdf:resource="#rwhod"/>
+</edge>
+
+<edge rdf:ID="edge-syslog-rwhod" >
+ <source rdf:resource="#syslog"/>
+ <target rdf:resource="#rwhod"/>
+</edge>
+<!-- rwhod ENDS -->
+
+<!-- sendmail BEGINS -->
+<service rdf:ID="sendmail" >
+ <edges>
+ <rdf:Bag>
+ <rdf:li rdf:resource="#edge-network-sendmail" />
+ <rdf:li rdf:resource="#edge-syslog-sendmail" />
+ </rdf:Bag>
+ </edges>
+</service>
+
+<edge rdf:ID="edge-network-sendmail" >
+ <source rdf:resource="#network"/>
+ <target rdf:resource="#sendmail"/>
+</edge>
+
+<edge rdf:ID="edge-syslog-sendmail" >
+ <source rdf:resource="#syslog"/>
+ <target rdf:resource="#sendmail"/>
+</edge>
+<!-- sendmail ENDS -->
+
+<!-- smb BEGINS -->
+<service rdf:ID="smb" >
+ <edges>
+ <rdf:Bag>
+ <rdf:li rdf:resource="#edge-network-smb" />
+ <rdf:li rdf:resource="#edge-syslog-smb" />
+ </rdf:Bag>
+ </edges>
+</service>
+
+<edge rdf:ID="edge-network-smb" >
+ <source rdf:resource="#network"/>
+ <target rdf:resource="#smb"/>
+</edge>
+
+<edge rdf:ID="edge-syslog-smb" >
+ <source rdf:resource="#syslog"/>
+ <target rdf:resource="#smb"/>
+</edge>
+<!-- smb ENDS -->
+
+<!-- snmpd BEGINS -->
+<service rdf:ID="snmpd" >
+ <edges>
+ <rdf:Bag>
+ <rdf:li rdf:resource="#edge-network-snmpd" />
+ <rdf:li rdf:resource="#edge-syslog-snmpd" />
+ </rdf:Bag>
+ </edges>
+</service>
+
+<edge rdf:ID="edge-network-snmpd" >
+ <source rdf:resource="#network"/>
+ <target rdf:resource="#snmpd"/>
+</edge>
+
+<edge rdf:ID="edge-syslog-snmpd" >
+ <source rdf:resource="#syslog"/>
+ <target rdf:resource="#snmpd"/>
+</edge>
+<!-- snmpd ENDS -->
+
+<!-- squid BEGINS -->
+<service rdf:ID="squid" >
+ <edges>
+ <rdf:Bag>
+ <rdf:li rdf:resource="#edge-network-squid" />
+ <rdf:li rdf:resource="#edge-syslog-squid" />
+ </rdf:Bag>
+ </edges>
+</service>
+
+<edge rdf:ID="edge-network-squid" >
+ <source rdf:resource="#network"/>
+ <target rdf:resource="#squid"/>
+</edge>
+
+<edge rdf:ID="edge-syslog-squid" >
+ <source rdf:resource="#syslog"/>
+ <target rdf:resource="#squid"/>
+</edge>
+<!-- squid ENDS -->
+
+<!-- sshd BEGINS -->
+<service rdf:ID="sshd" >
+ <edges>
+ <rdf:Bag>
+ <rdf:li rdf:resource="#edge-network-sshd" />
+ <rdf:li rdf:resource="#edge-syslog-sshd" />
+ <rdf:li rdf:resource="#edge-random-sshd" />
+ </rdf:Bag>
+ </edges>
+</service>
+
+<edge rdf:ID="edge-network-sshd" >
+ <source rdf:resource="#network"/>
+ <target rdf:resource="#sshd"/>
+</edge>
+
+<edge rdf:ID="edge-syslog-sshd" >
+ <source rdf:resource="#syslog"/>
+ <target rdf:resource="#sshd"/>
+</edge>
+
+<edge rdf:ID="edge-random-sshd" >
+ <source rdf:resource="#random"/>
+ <target rdf:resource="#sshd"/>
+</edge>
+<!-- sshd ENDS -->
+
+<!-- syslog BEGINS -->
+<service rdf:ID="syslog" >
+</service>
+<!-- syslog ENDS -->
+
+<!-- tux BEGINS -->
+<service rdf:ID="tux" >
+ <edges>
+ <rdf:Bag>
+ <rdf:li rdf:resource="#edge-network-tux" />
+ <rdf:li rdf:resource="#edge-syslog-tux" />
+ </rdf:Bag>
+ </edges>
+</service>
+
+<edge rdf:ID="edge-network-tux" >
+ <source rdf:resource="#network"/>
+ <target rdf:resource="#tux"/>
+</edge>
+
+<edge rdf:ID="edge-syslog-tux" >
+ <source rdf:resource="#syslog"/>
+ <target rdf:resource="#tux"/>
+</edge>
+<!-- tux ENDS -->
+
+<!-- vncserver BEGINS -->
+<service rdf:ID="vncserver" >
+ <edges>
+ <rdf:Bag>
+ <rdf:li rdf:resource="#edge-network-vncserver" />
+ <rdf:li rdf:resource="#edge-syslog-vncserver" />
+ </rdf:Bag>
+ </edges>
+</service>
+
+<edge rdf:ID="edge-network-vncserver" >
+ <source rdf:resource="#network"/>
+ <target rdf:resource="#vncserver"/>
+</edge>
+
+<edge rdf:ID="edge-syslog-vncserver" >
+ <source rdf:resource="#syslog"/>
+ <target rdf:resource="#vncserver"/>
+</edge>
+<!-- vncserver ENDS -->
+
+<!-- xfs BEGINS -->
+<service rdf:ID="xfs" >
+ <edges>
+ <rdf:Bag>
+ <rdf:li rdf:resource="#edge-syslog-xfs" />
+ </rdf:Bag>
+ </edges>
+</service>
+
+<edge rdf:ID="edge-syslog-xfs" >
+ <source rdf:resource="#syslog"/>
+ <target rdf:resource="#xfs"/>
+</edge>
+<!-- xfs ENDS -->
+
+<!-- xfstt BEGINS -->
+<service rdf:ID="xfstt" >
+ <edges>
+ <rdf:Bag>
+ <rdf:li rdf:resource="#edge-syslog-xfstt" />
+ </rdf:Bag>
+ </edges>
+</service>
+
+<edge rdf:ID="edge-syslog-xfstt" >
+ <source rdf:resource="#syslog"/>
+ <target rdf:resource="#xfstt"/>
+</edge>
+<!-- xfstt ENDS -->
+
+<!-- xinetd BEGINS -->
+<service rdf:ID="xinetd" >
+ <edges>
+ <rdf:Bag>
+ <rdf:li rdf:resource="#edge-network-xinetd" />
+ <rdf:li rdf:resource="#edge-syslog-xinetd" />
+ </rdf:Bag>
+ </edges>
+</service>
+
+<edge rdf:ID="edge-network-xinetd" >
+ <source rdf:resource="#network"/>
+ <target rdf:resource="#xinetd"/>
+</edge>
+
+<edge rdf:ID="edge-syslog-xinetd" >
+ <source rdf:resource="#syslog"/>
+ <target rdf:resource="#xinetd"/>
+</edge>
+<!-- xinetd ENDS -->
+
+<!-- ypbind BEGINS -->
+<service rdf:ID="ypbind" >
+ <edges>
+ <rdf:Bag>
+ <rdf:li rdf:resource="#edge-network-ypbind" />
+ <rdf:li rdf:resource="#edge-syslog-ypbind" />
+ </rdf:Bag>
+ </edges>
+</service>
+
+<edge rdf:ID="edge-network-ypbind" >
+ <source rdf:resource="#network"/>
+ <target rdf:resource="#ypbind"/>
+</edge>
+
+<edge rdf:ID="edge-syslog-ypbind" >
+ <source rdf:resource="#syslog"/>
+ <target rdf:resource="#ypbind"/>
+</edge>
+<!-- ypbind ENDS -->
+
+<!-- yppasswdd BEGINS -->
+<service rdf:ID="yppasswdd" >
+ <edges>
+ <rdf:Bag>
+ <rdf:li rdf:resource="#edge-network-yppasswdd" />
+ <rdf:li rdf:resource="#edge-syslog-yppasswdd" />
+ <rdf:li rdf:resource="#edge-ypbind-yppasswdd" />
+ </rdf:Bag>
+ </edges>
+</service>
+
+<edge rdf:ID="edge-network-yppasswdd" >
+ <source rdf:resource="#network"/>
+ <target rdf:resource="#yppasswdd"/>
+</edge>
+
+<edge rdf:ID="edge-syslog-yppasswdd" >
+ <source rdf:resource="#syslog"/>
+ <target rdf:resource="#yppasswdd"/>
+</edge>
+
+<edge rdf:ID="edge-ypbind-yppasswdd" >
+ <source rdf:resource="#ypbind"/>
+ <target rdf:resource="#yppasswdd"/>
+</edge>
+<!-- yppasswdd ENDS -->
+
+<!-- ypserv BEGINS -->
+<service rdf:ID="ypserv" >
+ <edges>
+ <rdf:Bag>
+ <rdf:li rdf:resource="#edge-yppasswdd-ypserv" />
+ </rdf:Bag>
+ </edges>
+</service>
+
+<edge rdf:ID="edge-yppasswdd-ypserv" >
+ <source rdf:resource="#yppasswdd"/>
+ <target rdf:resource="#ypserv"/>
+</edge>
+<!-- ypserv ENDS -->
+
+<!-- ypxfrd BEGINS -->
+<service rdf:ID="ypxfrd" >
+ <edges>
+ <rdf:Bag>
+ <rdf:li rdf:resource="#edge-yppasswdd-ypxfrd" />
+ </rdf:Bag>
+ </edges>
+</service>
+
+<edge rdf:ID="edge-yppasswdd-ypxfrd" >
+ <source rdf:resource="#yppasswdd"/>
+ <target rdf:resource="#ypxfrd"/>
+</edge>
+<!-- ypxfrd ENDS -->
+
+<service rdf:ID="local" serel:last="true" />
+<service rdf:ID="wine" serel:late="true" />
+
+<rdf:Description about="file:/etc/rc.d/init.d/network" serel:parse="false" />
+<rdf:Description about="file:/etc/rc.d/init.d/netfs" serel:parse="false" />
+
+</rdf:RDF>
diff --git a/serel/local.rdf b/serel/local.rdf
new file mode 100644
index 00000000..99984339
--- /dev/null
+++ b/serel/local.rdf
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<rdf:RDF
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:serel="http://www.fastboot.org/2002/03/serel-schema#"
+ xmlns:graph="http://www.fastboot.org/2002/03/graph-schema#"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns="http://www.fastboot.org/2002/03/graph-schema#"
+>
+
+<!-- local customisations to services and dependencies go here -->
+
+</rdf:RDF>
diff --git a/serel/serel.conf b/serel/serel.conf
new file mode 100644
index 00000000..a4c10c36
--- /dev/null
+++ b/serel/serel.conf
@@ -0,0 +1,36 @@
+#
+# serel configuration file
+#
+# This configuration file controls aspects of the serel
+# daemon's behaviour. It is read once, at startup.
+#
+# Brief explanations and compile-time default values are
+# shown in the comments below.
+
+# rdfpath:
+# A semi-colon-delimited sequence of pathnames containing well-formed RDF.
+# The daemon searches this sequence for service-definitions.
+# rdfpath = /etc/serel/local.rdf;/etc/serel/default.rdf
+
+# dbdirectory:
+# Location of the serel history database
+# dbdirectory = /var/lib/serel/
+
+# dbignore:
+# If this keyword is set to "yes" the daemon ignores the serel history
+# database. The database caches dependency information, which can be
+# time-consuming to calcuate.
+# dbignore = no
+
+# mangledollar:
+# The Linux Standards Base Specification 1.2 introduced
+# dollar symbols into facility names (eg $syslog)
+# http://www.linuxbase.org/spec/refspecs/LSB_1.2.0/gLSB.html#FACILNAME
+# The specification reserves symbols prefixed with '$' to itself.
+# However serel requires that service (facility) names be legal
+# XML name tokens: http://www.w3.org/TR/REC-xml#NT-Nmtoken
+# which does not support the dollar symbol '$' within identifiers.
+# This keyword tells serel how to mangle facility names prefixed with '$'
+# when they are found within boot script comments.
+#
+# mangledollar = lsb_prefix | strip (default: strip)
diff --git a/sysconfig/init b/sysconfig/init
index 93c2be9d..2472903c 100644
--- a/sysconfig/init
+++ b/sysconfig/init
@@ -1,5 +1,20 @@
-# color => new RH6.0 bootup
-# verbose => old-style bootup
+# enable/disable parallel initscript bootup support
+SEREL_BOOT=yes
+# no boot daemon logging
+# SERELD_OPTIONS="-d 0"
+# max boot daemon logging
+SERELD_OPTIONS="-d 5 -l /var/log/sereld.log --log-truncate"
+
+# uncomment the following two lines to turn on max client logging
+# export SEREL_DEBUG_LEVEL=3
+# export SEREL_LOG_NAME=/var/log/serelc.log
+
+# This generates an xml/rdf file that can be used to visualize
+# initscript dependencies. See http://www.fastboot.org/visual.html
+# SEREL_GENERATE_RDF=/var/log/serel.rdf
+
+# color => RH6.x/7.x style bootup
+# verbose => old style bootup
# anything else => new style bootup without ANSI colors or positioning
BOOTUP=color
# column to start "[ OK ]" label in
@@ -15,7 +30,9 @@ SETCOLOR_FAILURE="echo -en \\033[0;31m"
SETCOLOR_WARNING="echo -en \\033[0;33m"
# terminal sequence to reset to the default color.
SETCOLOR_NORMAL="echo -en \\033[0;39m"
+
# default kernel loglevel on boot (syslog will reset this)
LOGLEVEL=3
+
# Set to anything other than 'no' to allow hotkey interactive startup...
PROMPT=yes