Alright folks, I finally got off my butt last night and put together a
roadmap for the migration to the new rc.d init scripts that were imported
from NetBSD a long time ago and just sat in the tree.

M1 (Patch included)
Setup infrastructure
 Make rcorder compile
 Hook rc.subr into the distribution (and mergemaster)
 Hook rcorder into the world
 Add toggle in rc.conf to switch between rc_ng and current boot scripts

M2
Get FreeBSD to boot with the new boot scripts
 Rewrite the /etc/rc.d scripts to work with FreeBSD

M3
Add some FreeBSD specific support into rc.subr

M4
Add true dependency checking to the infrastructure so that starting nfsd
will start mountd and rpcbind
 Add support into rc.subr
 Add dependencies into rc.d scripts

I'd like a couple of people to take a look at this and then I'll submit a
pr for it if there aren't too many objections. I'm expecting M2 to run
into quite a bikeshed, but hey, I got my nice shiny asbestos back from the
cleaners.

-gordon
--- etc/Makefile.orig   Wed Oct 17 20:04:07 2001
+++ etc/Makefile        Wed Oct 17 22:29:38 2001
@@ -13,7 +13,7 @@
        motd modems netconfig networks newsyslog.conf \
        pam.conf phones printcap profile protocols \
        rc rc.atm rc.devfs rc.diskless1 rc.diskless2 rc.firewall rc.firewall6 \
-       rc.network rc.network6 rc.pccard rc.serial rc.shutdown \
+       rc.network rc.network6 rc.pccard rc.serial rc.shutdown rc.subr \
        rc.syscons rc.sysctl remote rpc security services shells sysctl.conf \
        syslog.conf usbd.conf \
        etc.${MACHINE_ARCH}/disktab \
--- etc/rc.d/Makefile.orig      Wed Oct 17 20:04:00 2001
+++ etc/rc.d/Makefile   Wed Oct 17 22:25:26 2001
@@ -1,8 +1,6 @@
 # $NetBSD: Makefile,v 1.16 2001/01/14 15:37:22 minoura Exp $
 
-.include <bsd.own.mk>
-
-FILES= DAEMON LOGIN NETWORK SERVERS accounting amd apmd bootparams \
+BIN=   DAEMON LOGIN NETWORK SERVERS accounting amd apmd bootparams \
        bootconf.sh ccd cleartmp cron dhclient dhcpd dhcrelay dmesg \
        fsck gated inetd ipfilter ipmon ipnat ipsec isdnd kdc ldconfig \
        lkm1 lkm2 lkm3 local lpd mopd motd mountall mountcritlocal \
@@ -12,9 +10,12 @@
        savecore screenblank sendmail securelevel sshd swap1 swap2 sysdb \
        sysctl syslogd timed ttys virecover wscons xdm xfs ypbind \
        yppasswdd ypserv
-FILESDIR=      /etc/rc.d
-FILESMODE=     ${BINMODE}
 
-NOPROG= noprog
+BINDIR=        /etc/rc.d
+NOOBJ=
+
+beforeinstall:
+       ${INSTALL} -c -o ${BINOWN} -g ${BINGRP} -m 755 ${BIN} \
+           ${DESTDIR}${BINDIR}
 
 .include <bsd.prog.mk>
--- etc/defaults/rc.conf.orig   Wed Oct 17 20:03:57 2001
+++ etc/defaults/rc.conf        Wed Oct 17 22:40:54 2001
@@ -19,6 +19,7 @@
 ###  Important initial Boot-time options  ####################
 ##############################################################
 
+rc_ng="NO"             # Set to YES to enable new-style rc. Experimental.
 swapfile="NO"          # Set to name of swapfile if aux swapfile desired.
 apm_enable="NO"                # Set to YES to enable APM BIOS functions (or NO).
 apmd_enable="NO"       # Run apmd to handle APM event from userland.
--- etc/rc.orig Wed Oct 17 20:04:06 2001
+++ etc/rc      Wed Oct 17 22:40:54 2001
@@ -71,6 +71,30 @@
        . /etc/rc.conf
 fi
 
+case ${rc_ng} in
+[Yy][Ee][Ss])
+       . /etc/rc.subr
+
+       _rc_conf_loaded=YES
+
+       if [ "$1" = autoboot ]; then
+               autoboot=yes
+               _rc_fast_run=yes        # run_rc_command(): do fast booting
+       fi
+
+       files=`rcorder -s nostart /etc/rc.d/*`
+
+       for _rc_elem in $files; do
+               run_rc_script $_rc_elem start
+       done
+
+       exit 0
+       ;;
+*)
+       # fall-through to the old rc scripts
+       ;;
+esac
+
 feed_dev_random() {
        if [ -f "${1}" -a -r "${1}" -a -s "${1}" ]; then
 #              echo "Using ${1} as an entropy file"
--- etc/rc.shutdown.orig        Wed Oct 17 20:04:07 2001
+++ etc/rc.shutdown     Wed Oct 17 22:40:54 2001
@@ -52,6 +52,26 @@
        . /etc/rc.conf
 fi
 
+case ${rc_ng} in
+[Yy][Ee][Ss])
+       . /etc/rc.subr
+
+       files=`rcorder -k shutdown /etc/rc.d/*`
+       for i in $files; do                     # reverse order of files
+               nfiles="$i $nfiles"
+       done
+       files=$nfiles
+
+       for i in $files; do
+               run_rc_script $i stop
+       done
+
+       exit 0
+       ;;
+*)
+       ;;
+esac
+
 # Write some entropy so the rebooting /dev/random can reseed
 #
 case ${entropy_file} in
--- sbin/rcorder/Makefile.orig  Sat Jun 16 00:16:14 2001
+++ sbin/rcorder/Makefile       Wed Oct 17 21:58:35 2001
@@ -1,4 +1,5 @@
 #       $NetBSD: Makefile,v 1.1 1999/11/23 05:28:20 mrg Exp $
+SYS!=  uname -s
 
 PROG=   rcorder
 SRCS=   ealloc.c hash.c rcorder.c
@@ -8,6 +9,12 @@
 DPADD+=        ${LIBUTIL}
 
 # XXX hack for make's hash.[ch]
+.if ${SYS} == NetBSD
 CPPFLAGS+= -DORDER
+.elif ${SYS} == FreeBSD
+CFLAGS+= -DORDER
+.else
+.error "This is an unsupported system"
+.endif
 
 .include <bsd.prog.mk>
--- sbin/rcorder/rcorder.c.orig Sat Jun 16 00:16:14 2001
+++ sbin/rcorder/rcorder.c      Wed Oct 17 22:07:51 2001
@@ -41,7 +41,9 @@
 #include <stdlib.h>
 #include <string.h>
 #include <unistd.h>
+#if defined(__NetBSD__)
 #include <util.h>
+#endif
 
 #include "ealloc.h"
 #include "sprite.h"
--- sbin/Makefile.orig  Fri Sep 21 10:55:47 2001
+++ sbin/Makefile       Wed Oct 17 22:09:42 2001
@@ -64,6 +64,7 @@
        ping \
        ping6 \
        quotacheck \
+       rcorder \
        reboot \
        restore \
        route \

Reply via email to