Subject: Re: MI MAKEDEV code
To: Christos Zoulas <christos@zoulas.com>
From: Luke Mewburn <lukem@netbsd.org>
List: tech-kern
Date: 05/25/2003 21:22:36
--EXKGNeO8l0xGFBjy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline

On Sat, May 24, 2003 at 10:07:07PM -0400, Christos Zoulas wrote:
  | Hello,
  | 
  | The following code contains changes to the classic MAKEDEV script, to
  | include a MAKEDEV.majors thus making it largely machine independent.
  | The following shar contains a copy of the new MAKEDEV script, a simple
  | shell script (mkdev) to generate MAKEDEV.majors, and a patch to the
  | Makefile. To use extract in in /usr/src/etc, then apply the patch and
  | remove etc.i386/MAKEDEV. Please note that the new script is a lot smaller
  | and somewhat slower than the old one, because it does individual rm's
  | chmod's and chown's. This can be easily fixed by adding the necessary
  | options to mknod(1). Now there is only one mknod invocation in the file.
  | 
  | Please let me know what you think. It is pretty easy to convert the new
  | archs to use it, but it might break the script that generates the man
  | pages.

I've actually done a similar thing in the past, but I can't find where
I stuffed the "Work in Progress".

Another change I tried was to use David Laight's new mknod -r/-u/-g/-m
options to:
    a)	improve the performance of MAKEDEV (by replacing the
	"rm, mknod, chown, chmod"  with  "mknod"
    b)	not recreate nodes that exist with the correct settings

I was going to commit this to the i386 a little while ago, but I got
some pushback from some people as they were concerned that this would
prevent the script from being run on non-NetBSD-current servers of
diskless clients.  I think that this is already a problem because
we can't rely upon said servers actually having the same major/minor
layout of dev_t anyway, and extracting a tar file won't work because
that encodes major/minor rather than dev_t, and the host's makedev()
macro will do the wrong thing there as well.

In order to ensure consistent and correct devices being created in the
"non-native" execution of MAKEDEV, I propose the following:

    a)	convert the "create node" operations to using ${MKNOD}
	with the new syntax.  E.g, replace
		rm -f lkm
		mknod lkm c 28 0
		chgrp kmem lkm
		chmod 640 lkm
	with
		${MKNOD} -r -m 640 -g kmem lkm c 28 0

    b)	set MKNOD as:
		: ${MKNOD:=/sbin/mknod}
	so that MKNOD can be overridden in MAKEDEVs environment to get
	a "host" version

    c)	compile a "host tool" version of mknod (e.g, $TOOLDIR/bin/nbmknod)
	for use by b) above.


Here's my modified i386 MAKEDEV script, and a diff -u against the
-current version.  There's still a couple of consistency tweaks that
could be performed (e.g, sometimes $major is set to the major number
and then $major is used in the ${MKNOD} line, other times the major
number is referenced directly), but you get the general idea.

Hope that helps,
Luke.

--EXKGNeO8l0xGFBjy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment; filename="MAKEDEV.quick"

#!/bin/sh -
#
#	$NetBSD: MAKEDEV,v 1.202 2003/05/15 13:18:09 wiz Exp $
#
# Copyright (c) 1990 The Regents of the University of California.
# All rights reserved.
#
# Written and contributed by W. Jolitz 12/90
#
# Redistribution and use in source and binary forms are permitted provided
# that: (1) source distributions retain this entire copyright notice and
# comment, and (2) distributions including binaries display the following
# acknowledgement:  ``This product includes software developed by the
# University of California, Berkeley and its contributors'' in the
# documentation or other materials provided with the distribution and in
# all advertising materials mentioning features or use of this software.
# Neither the name of the University nor the names of its contributors may
# be used to endorse or promote products derived from this software without
# specific prior written permission.
# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
# WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
#
#	@(#)MAKEDEV	5.2 (Berkeley) 6/22/90
#
###########################################################################
#
#   PLEASE RUN "cd ../share/man/man8 ; make makedevs"
#   AFTER CHANGING THIS FILE, AND COMMIT THE UPDATED MANPAGE!
#
###########################################################################
#
# Device "make" file.  Valid arguments:
#	all	makes all known devices, including local devices.
#		Tries to make the 'standard' number of each type.
#	init	A set of devices that is used for MFS /dev by init.
#		May be equal to "all".
#	floppy	devices to be put on install floppies
#	ramdisk	devices to be put into INSTALL kernel ramdisks.
#	std	standard devices
#	local	configuration specific devices
#	usbs	make USB devices
#	isdns	make ISDN devices
#
# Tapes:
#	wt*	QIC-interfaced (e.g. not SCSI) 3M cartridge tape
#	st*	SCSI tapes
#
# Disks:
#	wd*	"winchester" disk drives (ST506,IDE,ESDI,RLL,...)
#	fd*	"floppy" disk drives (3 1/2", 5 1/4")
#	sd*	SCSI disks
#	cd*	SCSI or ATAPI CD-ROM
#	mcd*	Mitsumi CD-ROM
#	vnd*	"file" pseudo-disks
#	md*	memory pseudo-disk devices
#	ccd*	concatenated disk devices
#	cgd*	cryptographic disk devices
#	raid*	RAIDframe disk devices
#	ld*	Logical disk devices (e.g., hardware RAID)
#	ed*	PS/2 ESDI disk devices
#
# Console ports:
#	ttyv0	pccons
#	ttyE*	wscons
#
# Pointing devices:
#	wsmouse* wscons mouse events
#
# Keyboard devices:
#	wskbd*	wscons keyboard events
#
# Terminal ports:
#	com*	standard PC COM ports			(XXX)
#	tty*	alias for PC COM ports, this is what the system really wants
#	ttyCZ*	Cyclades-Z multiport serial boards.  Each "unit"
#		makes 64 ports.
#	ttyCY*	Cyclom-Y multiport serial boards. Each "unit" makes
#		32 ports.
#
# Pseudo terminals:
#	pty*	set of 62 master and slave pseudo terminals
#	opty	first 16 ptys, to save inodes on install media
#
# Printers:
#	lpt*	stock lp
#	lpa*	interruptless lp
#
# USB devices:
#	usb*	USB control devices
#	uhid*	USB generic HID devices
#	ulpt*	USB printer devices
#	ugen*	USB generic devices
#	urio*	USB Diamond Rio 500 devices
#	uscanner*	USB scanners
#	ttyU*	USB modems
#
# ISDN devices:
#	isdn	communication between userland isdnd and kernel
#	isdnctl	control device
#	isdnbchan* raw b-channel access
#	isdntel*	telephony device
#	isdntrc*	trace device
#
# Special purpose devices:
#	clockctl clock control for non root users
#	fd	file descriptors
#	bpf*	packet filter
#	cir*	Consumer IR
#	ipl	IP Filter
#	irframe* IrDA physical frame
#	random	Random number generator, see rnd(4)
#	speaker	PC speaker		(XXX - installed)
#	lkm	loadable kernel modules interface
#	audio*	audio devices
#	apm	power management device
#	tun*	network tunnel driver
#	joy*	joystick device
#	satlink* PlanetConnect satellite receiver driver
#	scsibus* SCSI busses, see scsi(4), scsictl(8)
#	ses*	SES/SAF-TE SCSI Devices
#	ss*	SCSI scanner
#	uk*	unknown SCSI device
#	ch*	SCSI media changer
#	cfs*	Coda file system device
#	sysmon	System Monitoring hardware
#	bktr	Brooktree 848/849/878/879 based TV cards
#	iop*	I2O IOP control interface
#	mlx*	Mylex DAC960 control interface
#	mly*	Mylex AcceleRAID/eXtremeRAID control interface
#	altq	ALTQ control interface
#	vmegen*	generic VME access
#	wsfont*	console font control
#	wsmux*	wscons event multiplexor
#	agp*	AGP GART devices
#	pci*	PCI bus access devices
#	dpt*	DPT/Adaptec EATA RAID management interface
#	dpti*	DPT/Adaptec I2O RAID management interface
#	radio*	radio devices
#	nsmb*	SMB requester
#	systrace syscall tracer
#	kttcp	kernel ttcp helper device
#	dmoverio hardware-assisted data movers
#	veriexec verified executable fingerprint loader
#	twe	3ware Escalade control interface
#	icp	ICP-Vortex/Intel RAID control interface
#

: ${MKNOD:=/sbin/mknod}
u_uucp="-u #$(id -u uucp)"	# cache uucp user
g_op="-g #5"			# operator group: XXX determine in a better way?

dialin=0
dialout=524288		# high bit of the minor number
callunit=262144

highpartoffset=524280	# offset for partition 9 to 16

PATH=/sbin:/usr/sbin:/bin:/usr/bin
umask 77

# Check if we have fdesc mounted
if [ -d fd ]; then
	case "$(df fd)" in
	*fdesc*)	nofdesc=false;;
	*)		nofdesc=true;;
	esac
else
	nofdesc=true
fi

makedev()
{

for i
do

case $i in

# As of 2003-04-17, the "init" case must not create more than 890 entries.
init)
	makedev std wscons wt0 fd0 fd1 wd0 wd1 wd2 wd3 sd0 sd1 sd2 sd3 sd4
	makedev tty0 tty1
	makedev st0 st1 ch0 cd0 cd1 mcd0 vnd0
	makedev bpf0
	makedev ccd0 md0 ch0 random
	makedev cgd0 cgd1
	makedev iop0 mlx0 mly0 dpti0 dpt0 twe0 icp0
	makedev ed0 ed1
	makedev raid0
	makedev ld0 ld1 ld2 ld3
	makedev usbs
	makedev ipty
	makedev local
	;;

all)
	makedev init
	makedev fd
	makedev tty2 tty3 pty0
	makedev lpa0 lpa1 lpa2
	makedev lpt0 lpt1 lpt2
	makedev tun0 tun1 tun2 tun3 ipl
	makedev bpf1 bpf2 bpf3 bpf4 bpf5 bpf6 bpf7
	makedev vnd1
	makedev raid1 raid2 raid3 raid4 raid5 raid6 raid7
	makedev ccd1 ccd2 ccd3
	makedev cgd2 cgd3
	makedev ss0 uk0 uk1
	makedev speaker lkm joy0 joy1
	makedev apm satlink0
	makedev audio
	makedev radio
	makedev isdns
	makedev music rmidi0 rmidi1 rmidi2 rmidi3 rmidi4 rmidi5 rmidi6 rmidi7
	makedev scsibus0 scsibus1 scsibus2 scsibus3
	makedev sysmon
	makedev bktr
	makedev ttyCZ0 ttyCY0
	makedev agp0
	makedev pci0 pci1 pci2 pci3 pci4 pci5 pci6 pci7
	makedev altq
	makedev cir0 cir1 irframe0 irframe1
	makedev clockctl
	makedev systrace
	makedev kttcp
	makedev dmoverio
	makedev nsmb
	;;

audio)
	makedev audio0 audio1 audio2 audio3
	ln -fs sound0 sound
	ln -fs audio0 audio
	ln -fs mixer0 mixer
	ln -fs audioctl0 audioctl
	;;

radio)
	makedev radio0 radio1
	ln -fs radio0 radio
	;;

floppy)
	makedev std wt0 fd0 fd1 wd0 wd1 wd2 wd3 sd0 sd1 sd2 sd3 sd4 st0 st1
	makedev tty0 tty1 tty2 cd0 cd1 mcd0 ttyv0 opty ld0 ld1 ld2 ld3 ed0 ed1
	;;

ramdisk)
	makedev floppy md0
	;;

usbs)
	makedev usb usb0 usb1 usb2 usb3 usb4 usb5 usb6 usb7
	makedev uhid0 uhid1 uhid2 uhid3
	makedev ulpt0 ulpt1
	makedev ttyU0 ttyU1
	makedev urio0
	makedev uscanner0 uscanner1
	makedev ugen0
	;;

isdns)
	makedev isdn isdnctl isdnbchan0 isdnbchan1 isdntel0 isdntel1 isdntrc0 isdntrc1
	;;

std)
	${MKNOD} -r -m 600		console	c 0 0
	${MKNOD} -r -m 640 -g kmem	drum	c 4 0
	${MKNOD} -r -m 640 -g kmem	kmem	c 2 1
	${MKNOD} -r -m 640 -g kmem	mem	c 2 0
	${MKNOD} -r -m 666		null	c 2 2
	${MKNOD} -r -m 666		zero	c 2 12
	${MKNOD} -r -m 600		klog	c 7 0
	${MKNOD} -r -m 444		ksyms	c 101 0

	if $nofdesc; then
		${MKNOD} -r -m 666	tty	c 1 0
		${MKNOD} -r -m 666	stdin	c 22 0
		${MKNOD} -r -m 666	stdout	c 22 1
		${MKNOD} -r -m 666	stderr	c 22 2
	fi
	;;

usb*)
	unit=${i#usb}
	if [ "$unit" = "" ]; then
		unit=255
		usb=usb
	else
		usb=usb$unit
	fi
	major=55
	${MKNOD} -r -m 600 $usb c $major $unit
	;;

uhid*)
	unit=${i#uhid}
	major=56
	${MKNOD} -r -m 666 uhid$unit c $major $unit
	;;

ulpt*)
	unit=${i#ulpt}
	major=57
	${MKNOD} -r -m 600 ulpt$unit c $major $unit
	${MKNOD} -r -m 600 ulpn$unit c $major $(($unit + 64))
	;;

urio*)
	unit=${i#urio}
	major=70
	${MKNOD} -r -m 666 urio$unit c $major $unit
	;;

uscanner*)
	unit=${i#uscanner}
	major=75
	${MKNOD} -r -m 600 uscanner$unit c $major $unit
	;;

ttyU*)
	unit=${i#ttyU}
	major=66
	${MKNOD} -r -m 600 $u_uucp ttyU$unit c $major $(($unit + $dialin  ))
	${MKNOD} -r -m 600 $u_uucp dtyU$unit c $major $(($unit + $dialout ))
	${MKNOD} -r -m 600 $u_uucp ctyU$unit c $major $(($unit + $callunit))
	;;

ugen*)
	unit=${i#ugen}
	ugen=ugen$unit
	major=64
	for j in 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15
	do
		${MKNOD} -r -m 600 $ugen.$j c $major $(($unit * 16 + $j))
	done
	;;

ttyv0)
	${MKNOD} -r -m 600 ttyv0 c 12 0
	;;

wscons)
	makedev ttyE0 ttyE1 ttyE2 ttyE3 ttyE4 ttyE5 ttyE6 ttyE7
	makedev wsmouse0 wsmouse1 wsmouse2 wsmouse3
	makedev wskbd0 wskbd1 wskbd2 wskbd3
	makedev wsmux0 wsmux1 wsmux2 wsmux3
	makedev wsmouse wskbd
	makedev ttyEcfg ttyEstat
	makedev wsfont
	;;

wsmouse)
	${MKNOD} -r -m 600 wsmouse c 65 0
	;;

wskbd)
	${MKNOD} -r -m 600 wskbd c 65 1
	;;

wsmux*)
	unit=${i#wsmux}
	major=65
	${MKNOD} -r -m 600 wsmux$unit	c $major $unit
	${MKNOD} -r -m 200 wsmuxctl$unit	c $major $(($unit + 128))
	;;

ttyEstat)
	chr=47
	${MKNOD} -r -m 600 ttyEstat c $chr 254
	;;

ttyEcfg)
	chr=47
	${MKNOD} -r -m 600 ttyEcfg c $chr 255
	;;

ttyE*)
	unit=${i#ttyE}
	chr=47
	${MKNOD} -r -m 600 ttyE$unit c $chr $unit
	;;

wsmouse*)
	unit=${i#wsmouse}
	major=49
	${MKNOD} -r -m 600 wsmouse$unit c $major $unit
	;;

wskbd*)
	unit=${i#wskbd}
	major=48
	${MKNOD} -r -m 600 wskbd$unit c $major $unit
	;;

fd)
	if $nofdesc; then
		mkdir -m 755 fd 2>/dev/null
		n=0
		while [ $n -lt 64 ]; do
			${MKNOD} -r -m 666 fd/$n c 22 $n
			n=$(($n + 1))
		done
	fi
	;;

wt*)
	case $i in
	wt*) name=wt;  unit=${i#wt};	chr=10;	blk=3;;
	esac
	for sub in $unit $(($unit+8)) $(($unit+16))
	do
		${MKNOD} -r -m 660 $g_op $name$sub	b $blk $(($sub + 0))
		${MKNOD} -r -m 660 $g_op n$name$sub	b $blk $(($sub + 4))
		${MKNOD} -r -m 660 $g_op r$name$sub	c $chr $(($sub + 0))
		${MKNOD} -r -m 660 $g_op nr$name$sub	c $chr $(($sub + 4))
	done
	;;

md*)
	unit=${i#md}; blk=17; chr=24
	${MKNOD} -r -m 640 $g_op md${unit}a  b $blk $(($unit * 8 + 0))
	${MKNOD} -r -m 640 $g_op md${unit}d  b $blk $(($unit * 8 + 3))
#	${MKNOD} -r -m 640 $g_op rmd${unit}a c $chr $(($unit * 8 + 0))
#	${MKNOD} -r -m 640 $g_op rmd${unit}d c $chr $(($unit * 8 + 3))
	;;

ss*)
	case $i in
	ss*) name=ss;	unit=${i#ss};	chr=19;;
	esac
	${MKNOD} -r -m 640 $g_op $name$unit	c $chr $(($unit * 16 + 0))
	${MKNOD} -r -m 640 $g_op n$name$unit	c $chr $(($unit * 16 + 1))
	${MKNOD} -r -m 640 $g_op en$name$unit	c $chr $(($unit * 16 + 3))
	;;

ccd*|cgd*|fd*|ld*|raid*|sd*|vnd*|wd*|ed*)
	case $i in
	ccd*)	name=ccd;	unit=${i#ccd};	blk=16;	chr=18;;
	cgd*)	name=cgd;	unit=${i#cgd};	blk=21;	chr=93;;
	fd*)	name=fd;	unit=${i#fd};	blk=2;	chr=9;;
	raid*)	name=raid;	unit=${i#raid}; blk=18; chr=62;;
	ld*)	name=ld;	unit=${i#ld};	blk=19;	chr=69;;
	sd*)	name=sd;	unit=${i#sd};	blk=4;	chr=13;;
	vnd*)	name=vnd;	unit=${i#vnd};	blk=14;	chr=41;;
	wd*)	name=wd;	unit=${i#wd};	blk=0;	chr=3;;
	ed*)	name=ed;	unit=${i#ed};	blk=20;	chr=79;;
	esac
	${MKNOD} -r -m 640 $g_op ${name}${unit}a	b $blk $(($unit * 8 + 0))
	${MKNOD} -r -m 640 $g_op ${name}${unit}b	b $blk $(($unit * 8 + 1))
	${MKNOD} -r -m 640 $g_op ${name}${unit}c	b $blk $(($unit * 8 + 2))
	${MKNOD} -r -m 640 $g_op ${name}${unit}d	b $blk $(($unit * 8 + 3))
	${MKNOD} -r -m 640 $g_op  ${name}${unit}e	b $blk $(($unit * 8 + 4))
	${MKNOD} -r -m 640 $g_op  ${name}${unit}f	b $blk $(($unit * 8 + 5))
	${MKNOD} -r -m 640 $g_op  ${name}${unit}g	b $blk $(($unit * 8 + 6))
	${MKNOD} -r -m 640 $g_op  ${name}${unit}h	b $blk $(($unit * 8 + 7))
	${MKNOD} -r -m 640 $g_op  ${name}${unit}i	b $blk $(($unit * 8 + $highpartoffset + 8))
	${MKNOD} -r -m 640 $g_op  ${name}${unit}j	b $blk $(($unit * 8 + $highpartoffset + 9))
	${MKNOD} -r -m 640 $g_op  ${name}${unit}k	b $blk $(($unit * 8 + $highpartoffset + 10))
	${MKNOD} -r -m 640 $g_op  ${name}${unit}l	b $blk $(($unit * 8 + $highpartoffset + 11))
	${MKNOD} -r -m 640 $g_op  ${name}${unit}m	b $blk $(($unit * 8 + $highpartoffset + 12))
	${MKNOD} -r -m 640 $g_op  ${name}${unit}n	b $blk $(($unit * 8 + $highpartoffset + 13))
	${MKNOD} -r -m 640 $g_op  ${name}${unit}o	b $blk $(($unit * 8 + $highpartoffset + 14))
	${MKNOD} -r -m 640 $g_op  ${name}${unit}p	b $blk $(($unit * 8 + $highpartoffset + 15))
	${MKNOD} -r -m 640 $g_op  r${name}${unit}a	c $chr $(($unit * 8 + 0))
	${MKNOD} -r -m 640 $g_op  r${name}${unit}b	c $chr $(($unit * 8 + 1))
	${MKNOD} -r -m 640 $g_op  r${name}${unit}c	c $chr $(($unit * 8 + 2))
	${MKNOD} -r -m 640 $g_op  r${name}${unit}d	c $chr $(($unit * 8 + 3))
	${MKNOD} -r -m 640 $g_op  r${name}${unit}e	c $chr $(($unit * 8 + 4))
	${MKNOD} -r -m 640 $g_op  r${name}${unit}f	c $chr $(($unit * 8 + 5))
	${MKNOD} -r -m 640 $g_op  r${name}${unit}g	c $chr $(($unit * 8 + 6))
	${MKNOD} -r -m 640 $g_op  r${name}${unit}h	c $chr $(($unit * 8 + 7))
	${MKNOD} -r -m 640 $g_op  r${name}${unit}i	c $chr $(($unit * 8 + $highpartoffset + 8))
	${MKNOD} -r -m 640 $g_op  r${name}${unit}j	c $chr $(($unit * 8 + $highpartoffset + 9))
	${MKNOD} -r -m 640 $g_op  r${name}${unit}k	c $chr $(($unit * 8 + $highpartoffset + 10))
	${MKNOD} -r -m 640 $g_op  r${name}${unit}l	c $chr $(($unit * 8 + $highpartoffset + 11))
	${MKNOD} -r -m 640 $g_op  r${name}${unit}m	c $chr $(($unit * 8 + $highpartoffset + 12))
	${MKNOD} -r -m 640 $g_op  r${name}${unit}n	c $chr $(($unit * 8 + $highpartoffset + 13))
	${MKNOD} -r -m 640 $g_op  r${name}${unit}o	c $chr $(($unit * 8 + $highpartoffset + 14))
	${MKNOD} -r -m 640 $g_op  r${name}${unit}p	c $chr $(($unit * 8 + $highpartoffset + 15))
	;;

ttyCZ*)
	unit=${i#ttyCZ}
	major=73
	minor=$(($unit * 64))
	eminor=$(($minor + 64))
	while [ $minor -lt $eminor ]; do
		case "$minor" in
		?)
			nminor=000$minor ;;
		??)
			nminor=00$minor ;;
		???)
			nminor=0$minor ;;
		*)
			nminor=$minor ;;
		esac
		${MKNOD} -r -m 600 $u_uucp ttyCZ$nminor c $major $(($minor + $dialin ))
		${MKNOD} -r -m 600 $u_uucp dtyCZ$nminor c $major $(($minor + $dialout))
		minor=$(($minor + 1))
	done
	;;

ttyCY*)
	unit=${i#ttyCY}
	major=38
	minor=$(($unit * 32))
	eminor=$(($minor + 32))
	while [ $minor -lt $eminor ]; do
		case "$minor" in
		?)
			nminor=00$minor ;;
		??)
			nminor=0$minor ;;
		*)
			nminor=$minor ;;
		esac
		${MKNOD} -r -m 600 $u_uucp ttyCY$nminor c $major $(($minor + $dialin ))
		${MKNOD} -r -m 600 $u_uucp dtyCY$nminor c $major $(($minor + $dialout))
		minor=$(($minor + 1))
	done
	;;

com*|tty*)					# (XXX -- com should die)
	ounit=${i#???}
	ounit=$(($ounit + 0))
	if [ $ounit -lt 10 ]; then
		unit=0$ounit
		rm -f com$ounit
	else
		unit=$ounit
	fi
	${MKNOD} -r -m 600 $u_uucp tty$unit c 8 $(($ounit + $dialin ))
	${MKNOD} -r -m 600 $u_uucp dty$unit c 8 $(($ounit + $dialout))
	;;

opty)
	for j in 0 1 2 3 4 5 6 7 8 9 a b c d e f
	do
		case $j in
		[0-9])	jn=$j ;;
		a)	jn=10 ;;
		b)	jn=11 ;;
		c)	jn=12 ;;
		d)	jn=13 ;;
		e)	jn=14 ;;
		f)	jn=15 ;;
		esac
		${MKNOD} -r -m 666 ttyp$j c 5 $jn
		${MKNOD} -r -m 666 ptyp$j c 6 $jn
	done
	;;

ipty)   
	${MKNOD} -r -m 666 ttyp0 c 5 0
	${MKNOD} -r -m 666 ttyp1 c 5 1
	${MKNOD} -r -m 666 ptyp0 c 6 0
	${MKNOD} -r -m 666 ptyp1 c 6 1
	;;

pty*)
	class=${i#pty}
	name=$(echo pqrstuvwxyzPQRST | dd bs=1 count=1 skip=$class 2>/dev/null)
	case $name in
	v)	echo "$0: $i: pty unit conflicts with console ttyv0 device."
		continue ;;
	?)	;;
	*)	echo "$0: $i: pty unit must be between 0 and 15"
		continue ;;
	esac
	jn=0
	while [ $jn -lt 62 ]
	do
		j=$(echo 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ | dd bs=1 count=1 skip=$jn 2>/dev/null)
		skip=0
		if [ $jn -ge 16 ]; then
			skip=$(($class * 30 + 256 - 16))
		fi
		unit=$(($class * 16 + $jn + $skip))
		${MKNOD} -r -m 666 tty$name$j c 5 $unit
		${MKNOD} -r -m 666 pty$name$j c 6 $unit
		jn=$(($jn + 1))
	done
	;;

st*)
	case $i in
	st*) name=st;	unit=${i#st};	chr=14;	blk=5;;
	esac
	${MKNOD} -r -m 660 $g_op $name$unit	b $blk $(($unit * 16 + 0))
	${MKNOD} -r -m 660 $g_op n$name$unit	b $blk $(($unit * 16 + 1))
	${MKNOD} -r -m 660 $g_op e$name$unit	b $blk $(($unit * 16 + 2))
	${MKNOD} -r -m 660 $g_op en$name$unit	b $blk $(($unit * 16 + 3))
	${MKNOD} -r -m 660 $g_op r$name$unit	c $chr $(($unit * 16 + 0))
	${MKNOD} -r -m 660 $g_op nr$name$unit	c $chr $(($unit * 16 + 1))
	${MKNOD} -r -m 660 $g_op er$name$unit	c $chr $(($unit * 16 + 2))
	${MKNOD} -r -m 660 $g_op enr$name$unit	c $chr $(($unit * 16 + 3))
	;;

ses*|ch*|uk*)
	case $i in
	ch*)	name=ch;	unit=${i#ch};	chr=17;;
	uk*)	name=uk;	unit=${i#uk};	chr=20;;
	ses*)	name=ses;	unit=${i#ses};	chr=74;;
	esac
	${MKNOD} -r -m 640 $g_op $name$unit	c $chr $unit
	;;

cd*|mcd*)
	case $i in
	cd*)	name=cd;	unit=${i#cd};	chr=15;	blk=6;;
	mcd*)	name=mcd;	unit=${i#mcd};	chr=39;	blk=7;;
	esac
	${MKNOD} -r -m 640 $g_op ${name}${unit}a	b $blk $(($unit * 8 + 0))
	${MKNOD} -r -m 640 $g_op ${name}${unit}d	b $blk $(($unit * 8 + 3))
	${MKNOD} -r -m 640 $g_op r${name}${unit}a	c $chr $(($unit * 8 + 0))
	${MKNOD} -r -m 640 $g_op r${name}${unit}d	c $chr $(($unit * 8 + 3))
	;;

lpt*|lpa*)
	case $i in
	lpt*) name=lpt;	unit=${i#lpt};	chr=16;	flags=0;;
	lpa*) name=lpa;	unit=${i#lpa};	chr=16;	flags=128;;
	esac
	${MKNOD} -r -m 600 $name$unit	c $chr $(($unit + $flags))
	;;

bpf*|tun*|joy*)
	case $i in
	bpf*) name=bpf;	unit=${i#bpf};	chr=23;;
	tun*) name=tun;	unit=${i#tun};	chr=40;;
	joy*) name=joy;	unit=${i#joy};	chr=26;;
	esac
	${MKNOD} -r -m 600 $name$unit	c $chr $unit
	;;

ipl)
	${MKNOD} -r -m 600 ipl	c 44 0
	${MKNOD} -r -m 600 ipnat	c 44 1
	${MKNOD} -r -m 600 ipstate	c 44 2
	${MKNOD} -r -m 600 ipauth	c 44 3
	;;

speaker)					# (XXX - installed)
	${MKNOD} -r -m 600 speaker c 27 0
	;;

lkm)
	${MKNOD} -r -m 640 -g kmem lkm c 28 0
	;;

audio*)
	unit=${i#audio}
	major=42
	${MKNOD} -r -m 666 sound$unit	c $major $((${unit:-0} + 0))
	${MKNOD} -r -m 666 audio$unit	c $major $((${unit:-0} + 128))
	${MKNOD} -r -m 666 mixer$unit	c $major $((${unit:-0} + 16))
	${MKNOD} -r -m 666 audioctl$unit	c $major $((${unit:-0} + 192))
	;;

rmidi*)
	unit=${i#rmidi}
	major=58
	${MKNOD} -r -m 666 rmidi$unit c $major $unit
	;;

music*)
	unit=${i#music}
	major=59
	${MKNOD} -r -m 666 music$unit	c $major $((${unit:-0} + 0))
	${MKNOD} -r -m 666 sequencer$unit	c $major $((${unit:-0} + 128))
	;;

radio*)
	unit=${i#radio}
	major=87
	${MKNOD} -r -m 666 radio$unit c $major ${unit:-0}
	;;

apm*)
	${MKNOD} -r -m 644 apm	c 21 0
	${MKNOD} -r -m 644 apmctl	c 21 8
	;;

satlink*)
	unit=${i#satlink}
	${MKNOD} -r -m 444 satlink$unit c 45 $unit
	;;

random)
	${MKNOD} -r -m 444 random	c 46 0
	${MKNOD} -r -m 644 urandom	c 46 1
	;;

cfs*)
	unit=${i#cfs}
	major=60
	${MKNOD} -r -m 600 cfs$unit c $major $unit
	;;

sysmon)
	major=67
	${MKNOD} -r -m 644 sysmon		c $major 0
	${MKNOD} -r -m 644 watchdog	c $major 1
	${MKNOD} -r -m 640 power		c $major 2
	;;

scsibus*)
	unit=${i#scsibus}
	${MKNOD} -r -m 644 scsibus$unit c 61 $unit
	;;

bktr)
	makedev bktr0 bktr1
	ln -fs bktr0 bktr
	ln -fs tuner0 tuner
	ln -fs vbi0 vbi
	;;

bktr*)
	unit=${i#bktr}
	${MKNOD} -r -m 444 bktr$unit	c 71 $(($unit + 0))
	${MKNOD} -r -m 444 tuner$unit	c 71 $(($unit + 16))
	${MKNOD} -r -m 444 vbi$unit	c 71 $(($unit + 32))
	;;

iop*)
	unit=${i#iop}
	${MKNOD} -r -m 600 iop$unit c 76 $unit
	;;

mlx*)
	unit=${i#mlx}
	${MKNOD} -r -m 600 mlx$unit c 78 $unit
	;;

mly*)
	unit=${i#mly}
	${MKNOD} -r -m 600 mly$unit c 80 $unit
	;;

twe*)
	unit=${i#twe}
	${MKNOD} -r -m 600 twe$unit c 97 $unit
	;;

icp*)
	unit=${i#icp}
	${MKNOD} -r -m 600 icp$unit c 102 $unit
	;;

agp*)
	unit=${i#agp}
	${MKNOD} -r -m 644 agp$unit c 82 $unit
	[ "$unit" = "0" ] && ln -fs agp$unit agpgart
	;;

pci*)
	unit=${i#pci}
	${MKNOD} -r -m 644 pci$unit c 83 $unit
	;;

dpti*)
	unit=${i#dpti}
	${MKNOD} -r -m 600 dpti$unit c 84 $unit
	;;

dpt*)
	unit=${i#dpt}
	${MKNOD} -r -m 600 dpt$unit c 96 $unit
	;;

altq)
	mkdir -m 755 altq 2>/dev/null
	unit=0
	for dev in altq cbq wfq afm fifoq red rio localq hfsc cdnr blue priq; do
		${MKNOD} -r -m 644 altq/$dev c 77 $unit
		unit=$(($unit + 1))
	done
	;;

isdn)
	${MKNOD} -r -m 600 isdn c 50 0
	;;

isdnctl)
	${MKNOD} -r -m 600 isdnctl c 51 0
	;;

isdnbchan*)
	unit=${i#isdnbchan}
	${MKNOD} -r -m 600 isdnbchan$unit c 52 $unit
	;;

isdntel*)
	unit=${i#isdntel}
	${MKNOD} -r -m 600 isdntel$unit c 54 $unit
	;;

isdntrc*)
	unit=${i#isdntrc}
	${MKNOD} -r -m 600 isdntrc$unit c 53 $unit
	;;

vmegen)
	makedev vmegen0 vmegen1 vmegen2 vmegen3
	;;

vmegen*)
	unit=${i#vmegen}
	${MKNOD} -r -m 600 vmegen$unit c 68 $(($unit * 16 + 0))
	;;

wsfont)
	${MKNOD} -r -m 600 wsfont c 81 0
	;;

cir*)
	unit=${i#cir}
	major=86
	${MKNOD} -r -m 666 cir$unit c $major $unit
	;;

irframe*)
	unit=${i#irframe}
	major=85
	${MKNOD} -r -m 600 irframe$unit c $major $unit
	;;

clockctl)
	${MKNOD} -r -m 660 -g ntpd clockctl c 89 0
	;;

nsmb)
	makedev nsmb0 nsmb1 nsmb2 nsmb3
	;;

nsmb*)
	unit=${i#nsmb}
	major=98
	${MKNOD} -r -m 644 nsmb$unit c $major $unit
	;;

systrace)
	${MKNOD} -r -m 644 systrace c 90 0
	;;

kttcp)
	${MKNOD} -r -m 600 kttcp c 91 0
	;;

dmoverio)
	${MKNOD} -r -m 644 dmoverio c 92 0
	;;

veriexec)
	${MKNOD} -r -m 644 veriexec c 94 0
	;;

local)
	if [ -f "$0.local" ]; then
		umask 0
		sh $0.local all
		umask 77
	fi
	;;

*)
	echo $i: unknown device
	;;

esac
done

}

makedev $*

--EXKGNeO8l0xGFBjy
Content-Type: text/plain; charset=us-ascii
Content-Description: makedev.diff
Content-Disposition: attachment; filename=makedif

--- etc/etc.i386/MAKEDEV	2003-05-18 18:13:20.000000000 +1000
+++ /dev/MAKEDEV.quick	2003-05-25 21:20:25.000000000 +1000
@@ -146,6 +146,10 @@
 #	icp	ICP-Vortex/Intel RAID control interface
 #
 
+: ${MKNOD:=/sbin/mknod}
+u_uucp="-u #$(id -u uucp)"	# cache uucp user
+g_op="-g #5"			# operator group: XXX determine in a better way?
+
 dialin=0
 dialout=524288		# high bit of the minor number
 callunit=262144
@@ -157,9 +161,9 @@
 
 # Check if we have fdesc mounted
 if [ -d fd ]; then
-	case "`df fd`" in
-	*fdesc*) nofdesc=false;;
-	*) nofdesc=true;;
+	case "$(df fd)" in
+	*fdesc*)	nofdesc=false;;
+	*)		nofdesc=true;;
 	esac
 else
 	nofdesc=true
@@ -261,88 +265,66 @@
 	;;
 
 std)
-	rm -f console drum mem kmem null zero io klog ksyms
-	mknod console		c 0 0
-	mknod drum		c 4 0	; chmod 640 drum ; chgrp kmem drum
-	mknod kmem		c 2 1	; chmod 640 kmem ; chgrp kmem kmem
-	mknod mem		c 2 0	; chmod 640 mem	; chgrp kmem mem
-	mknod null		c 2 2	; chmod 666 null
-	mknod zero		c 2 12	; chmod 666 zero
-	mknod klog		c 7 0	; chmod 600 klog
-	mknod ksyms		c 101 0	; chmod 444 ksyms
+	${MKNOD} -r -m 600		console	c 0 0
+	${MKNOD} -r -m 640 -g kmem	drum	c 4 0
+	${MKNOD} -r -m 640 -g kmem	kmem	c 2 1
+	${MKNOD} -r -m 640 -g kmem	mem	c 2 0
+	${MKNOD} -r -m 666		null	c 2 2
+	${MKNOD} -r -m 666		zero	c 2 12
+	${MKNOD} -r -m 600		klog	c 7 0
+	${MKNOD} -r -m 444		ksyms	c 101 0
+
 	if $nofdesc; then
-		rm -f tty stdin stdout stderr
-		mknod tty	c 1 0	; chmod 666 tty
-		mknod stdin	c 22 0	; chmod 666 stdin
-		mknod stdout	c 22 1	; chmod 666 stdout
-		mknod stderr	c 22 2	; chmod 666 stderr
+		${MKNOD} -r -m 666	tty	c 1 0
+		${MKNOD} -r -m 666	stdin	c 22 0
+		${MKNOD} -r -m 666	stdout	c 22 1
+		${MKNOD} -r -m 666	stderr	c 22 2
 	fi
 	;;
 
 usb*)
 	unit=${i#usb}
 	if [ "$unit" = "" ]; then
-	    unit=255
-	    usb=usb
+		unit=255
+		usb=usb
 	else
-	    usb=usb$unit
+		usb=usb$unit
 	fi
 	major=55
-	rm -f $usb
-	mknod $usb c $major $unit
-	chmod 600 $usb
+	${MKNOD} -r -m 600 $usb c $major $unit
 	;;
 
 uhid*)
 	unit=${i#uhid}
-	uhid=uhid$unit
 	major=56
-	rm -f $uhid
-	mknod $uhid c $major $unit
-	chmod 666 $uhid
+	${MKNOD} -r -m 666 uhid$unit c $major $unit
 	;;
 
 ulpt*)
 	unit=${i#ulpt}
-	ulpt=ulpt$unit
-	ulpn=ulpn$unit
 	major=57
-	rm -f $ulpt $ulpn
-	mknod $ulpt c $major $unit
-	mknod $ulpn c $major $(($unit + 64))
-	chmod 600 $ulpt $ulpn
+	${MKNOD} -r -m 600 ulpt$unit c $major $unit
+	${MKNOD} -r -m 600 ulpn$unit c $major $(($unit + 64))
 	;;
 
 urio*)
 	unit=${i#urio}
-	urio=urio$unit
 	major=70
-	rm -f $urio
-	mknod $urio c $major $unit
-	chmod 666 $urio
+	${MKNOD} -r -m 666 urio$unit c $major $unit
 	;;
 
 uscanner*)
 	unit=${i#uscanner}
-	uscanner=uscanner$unit
 	major=75
-	rm -f $uscanner
-	mknod $uscanner c $major $unit
-	chmod 600 $uscanner
+	${MKNOD} -r -m 600 uscanner$unit c $major $unit
 	;;
 
 ttyU*)
 	unit=${i#ttyU}
-	ttyU=ttyU$unit
-	dtyU=dtyU$unit
-	ctyU=ctyU$unit
 	major=66
-	rm -f $ttyU $dtyU $ctyU
-	mknod $ttyU c $major $(($unit + $dialin  ))
-	mknod $dtyU c $major $(($unit + $dialout ))
-	mknod $ctyU c $major $(($unit + $callunit))
-	chown uucp $ttyU $dtyU $ctyU
-	chmod 600 $ttyU $dtyU $ctyU
+	${MKNOD} -r -m 600 $u_uucp ttyU$unit c $major $(($unit + $dialin  ))
+	${MKNOD} -r -m 600 $u_uucp dtyU$unit c $major $(($unit + $dialout ))
+	${MKNOD} -r -m 600 $u_uucp ctyU$unit c $major $(($unit + $callunit))
 	;;
 
 ugen*)
@@ -351,16 +333,12 @@
 	major=64
 	for j in 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15
 	do
-		ugenj=$ugen.$j
-		rm -f $ugenj
-		mknod $ugenj c $major $(($unit * 16 + ${j#0}))
-		chmod 600 $ugenj
+		${MKNOD} -r -m 600 $ugen.$j c $major $(($unit * 16 + $j))
 	done
 	;;
 
 ttyv0)
-	rm -f ttyv0
-	mknod ttyv0 c 12 0
+	${MKNOD} -r -m 600 ttyv0 c 12 0
 	;;
 
 wscons)
@@ -374,79 +352,56 @@
 	;;
 
 wsmouse)
-	rm -f wsmouse
-	mknod wsmouse c 65 0
-	chmod 600 wsmouse
+	${MKNOD} -r -m 600 wsmouse c 65 0
 	;;
 
 wskbd)
-	rm -f wskbd
-	mknod wskbd c 65 1
-	chmod 600 wskbd
+	${MKNOD} -r -m 600 wskbd c 65 1
 	;;
 
 wsmux*)
 	unit=${i#wsmux}
-	unitctl=$(($unit + 128))
-	wsmux=wsmux$unit
-	wsmuxctl=wsmuxctl$unit
 	major=65
-	rm -f $wsmux $wsmuxctl
-	mknod $wsmux c $major $unit
-	chmod 600 $wsmux
-	mknod $wsmuxctl c $major $unitctl
-	chmod 200 $wsmuxctl
+	${MKNOD} -r -m 600 wsmux$unit	c $major $unit
+	${MKNOD} -r -m 200 wsmuxctl$unit	c $major $(($unit + 128))
 	;;
 
 ttyEstat)
 	chr=47
-	rm -f ttyEstat
-	mknod ttyEstat c $chr 254
-	chmod 600 ttyEstat
+	${MKNOD} -r -m 600 ttyEstat c $chr 254
 	;;
 
 ttyEcfg)
 	chr=47
-	rm -f ttyEcfg
-	mknod ttyEcfg c $chr 255
-	chmod 600 ttyEcfg
+	${MKNOD} -r -m 600 ttyEcfg c $chr 255
 	;;
 
 ttyE*)
-	chr=47; unit=${i#ttyE}
-	rm -f ttyE$unit
-	mknod ttyE$unit c $chr $unit
+	unit=${i#ttyE}
+	chr=47
+	${MKNOD} -r -m 600 ttyE$unit c $chr $unit
 	;;
 
 wsmouse*)
 	unit=${i#wsmouse}
-	wsmouse=wsmouse$unit
 	major=49
-	rm -f $wsmouse
-	mknod $wsmouse c $major $unit
-	chmod 600 $wsmouse
+	${MKNOD} -r -m 600 wsmouse$unit c $major $unit
 	;;
 
 wskbd*)
 	unit=${i#wskbd}
-	wskbd=wskbd$unit
 	major=48
-	rm -f $wskbd
-	mknod $wskbd c $major $unit
-	chmod 600 $wskbd
+	${MKNOD} -r -m 600 wskbd$unit c $major $unit
 	;;
 
 fd)
 	if $nofdesc; then
-		rm -f fd/*
-		mkdir fd 2>/dev/null
+		mkdir -m 755 fd 2>/dev/null
 		n=0
 		while [ $n -lt 64 ]; do
-			mknod fd/$n c 22 $n
+			${MKNOD} -r -m 666 fd/$n c 22 $n
 			n=$(($n + 1))
 		done
-		chmod 755 fd
-		chmod 666 fd/*
 	fi
 	;;
 
@@ -456,86 +411,74 @@
 	esac
 	for sub in $unit $(($unit+8)) $(($unit+16))
 	do
-	    rm -f $name$sub n$name$sub r$name$sub nr$name$sub
-	    mknod $name$sub	b $blk $(($sub + 0))
-	    mknod n$name$sub	b $blk $(($sub + 4))
-	    mknod r$name$sub	c $chr $(($sub + 0))
-	    mknod nr$name$sub	c $chr $(($sub + 4))
-	    chgrp operator $name$sub n$name$sub r$name$sub nr$name$sub
-	    chmod 660 $name$sub n$name$sub r$name$sub nr$name$sub
+		${MKNOD} -r -m 660 $g_op $name$sub	b $blk $(($sub + 0))
+		${MKNOD} -r -m 660 $g_op n$name$sub	b $blk $(($sub + 4))
+		${MKNOD} -r -m 660 $g_op r$name$sub	c $chr $(($sub + 0))
+		${MKNOD} -r -m 660 $g_op nr$name$sub	c $chr $(($sub + 4))
 	done
 	;;
 
 md*)
 	unit=${i#md}; blk=17; chr=24
-	rm -f md${unit}? rmd${unit}?
-	mknod md${unit}a  b $blk $(($unit * 8 + 0))
-	mknod md${unit}d  b $blk $(($unit * 8 + 3))
-#	mknod rmd${unit}a c $chr $(($unit * 8 + 0))
-#	mknod rmd${unit}d c $chr $(($unit * 8 + 3))
-	chgrp operator md${unit}? #rmd${unit}?
-	chmod 640 md${unit}? #rmd${unit}?
+	${MKNOD} -r -m 640 $g_op md${unit}a  b $blk $(($unit * 8 + 0))
+	${MKNOD} -r -m 640 $g_op md${unit}d  b $blk $(($unit * 8 + 3))
+#	${MKNOD} -r -m 640 $g_op rmd${unit}a c $chr $(($unit * 8 + 0))
+#	${MKNOD} -r -m 640 $g_op rmd${unit}d c $chr $(($unit * 8 + 3))
 	;;
 
 ss*)
 	case $i in
 	ss*) name=ss;	unit=${i#ss};	chr=19;;
 	esac
-	rm -f $name$unit n$name$unit en$name$unit
-	mknod $name$unit	c $chr $(($unit * 16 + 0))
-	mknod n$name$unit	c $chr $(($unit * 16 + 1))
-	mknod en$name$unit	c $chr $(($unit * 16 + 3))
-	chgrp operator $name$unit n$name$unit en$name$unit
-	chmod 640 $name$unit n$name$unit en$name$unit
+	${MKNOD} -r -m 640 $g_op $name$unit	c $chr $(($unit * 16 + 0))
+	${MKNOD} -r -m 640 $g_op n$name$unit	c $chr $(($unit * 16 + 1))
+	${MKNOD} -r -m 640 $g_op en$name$unit	c $chr $(($unit * 16 + 3))
 	;;
 
 ccd*|cgd*|fd*|ld*|raid*|sd*|vnd*|wd*|ed*)
 	case $i in
-	ccd*) name=ccd;	unit=${i#ccd};	blk=16;	chr=18;;
-	cgd*) name=cgd;	unit=${i#cgd};	blk=21;	chr=93;;
-	fd*) name=fd;	unit=${i#fd};	blk=2;	chr=9;;
-	raid*) name=raid; unit=${i#raid}; blk=18; chr=62;;
-	ld*) name=ld;	unit=${i#ld};	blk=19;	chr=69;;
-	sd*) name=sd;	unit=${i#sd};	blk=4;	chr=13;;
-	vnd*) name=vnd;	unit=${i#vnd};	blk=14;	chr=41;;
-	wd*) name=wd;	unit=${i#wd};	blk=0;	chr=3;;
-	ed*) name=ed;	unit=${i#ed};	blk=20;	chr=79;;
+	ccd*)	name=ccd;	unit=${i#ccd};	blk=16;	chr=18;;
+	cgd*)	name=cgd;	unit=${i#cgd};	blk=21;	chr=93;;
+	fd*)	name=fd;	unit=${i#fd};	blk=2;	chr=9;;
+	raid*)	name=raid;	unit=${i#raid}; blk=18; chr=62;;
+	ld*)	name=ld;	unit=${i#ld};	blk=19;	chr=69;;
+	sd*)	name=sd;	unit=${i#sd};	blk=4;	chr=13;;
+	vnd*)	name=vnd;	unit=${i#vnd};	blk=14;	chr=41;;
+	wd*)	name=wd;	unit=${i#wd};	blk=0;	chr=3;;
+	ed*)	name=ed;	unit=${i#ed};	blk=20;	chr=79;;
 	esac
-	rm -f $name$unit? r$name$unit?
-	mknod ${name}${unit}a	b $blk $(($unit * 8 + 0))
-	mknod ${name}${unit}b	b $blk $(($unit * 8 + 1))
-	mknod ${name}${unit}c	b $blk $(($unit * 8 + 2))
-	mknod ${name}${unit}d	b $blk $(($unit * 8 + 3))
-	mknod ${name}${unit}e	b $blk $(($unit * 8 + 4))
-	mknod ${name}${unit}f	b $blk $(($unit * 8 + 5))
-	mknod ${name}${unit}g	b $blk $(($unit * 8 + 6))
-	mknod ${name}${unit}h	b $blk $(($unit * 8 + 7))
-	mknod ${name}${unit}i	b $blk $(($unit * 8 + $highpartoffset + 8))
-	mknod ${name}${unit}j	b $blk $(($unit * 8 + $highpartoffset + 9))
-	mknod ${name}${unit}k	b $blk $(($unit * 8 + $highpartoffset + 10))
-	mknod ${name}${unit}l	b $blk $(($unit * 8 + $highpartoffset + 11))
-	mknod ${name}${unit}m	b $blk $(($unit * 8 + $highpartoffset + 12))
-	mknod ${name}${unit}n	b $blk $(($unit * 8 + $highpartoffset + 13))
-	mknod ${name}${unit}o	b $blk $(($unit * 8 + $highpartoffset + 14))
-	mknod ${name}${unit}p	b $blk $(($unit * 8 + $highpartoffset + 15))
-	mknod r${name}${unit}a	c $chr $(($unit * 8 + 0))
-	mknod r${name}${unit}b	c $chr $(($unit * 8 + 1))
-	mknod r${name}${unit}c	c $chr $(($unit * 8 + 2))
-	mknod r${name}${unit}d	c $chr $(($unit * 8 + 3))
-	mknod r${name}${unit}e	c $chr $(($unit * 8 + 4))
-	mknod r${name}${unit}f	c $chr $(($unit * 8 + 5))
-	mknod r${name}${unit}g	c $chr $(($unit * 8 + 6))
-	mknod r${name}${unit}h	c $chr $(($unit * 8 + 7))
-	mknod r${name}${unit}i	c $chr $(($unit * 8 + $highpartoffset + 8))
-	mknod r${name}${unit}j	c $chr $(($unit * 8 + $highpartoffset + 9))
-	mknod r${name}${unit}k	c $chr $(($unit * 8 + $highpartoffset + 10))
-	mknod r${name}${unit}l	c $chr $(($unit * 8 + $highpartoffset + 11))
-	mknod r${name}${unit}m	c $chr $(($unit * 8 + $highpartoffset + 12))
-	mknod r${name}${unit}n	c $chr $(($unit * 8 + $highpartoffset + 13))
-	mknod r${name}${unit}o	c $chr $(($unit * 8 + $highpartoffset + 14))
-	mknod r${name}${unit}p	c $chr $(($unit * 8 + $highpartoffset + 15))
-	chgrp operator $name$unit? r$name$unit?
-	chmod 640 $name$unit? r$name$unit?
+	${MKNOD} -r -m 640 $g_op ${name}${unit}a	b $blk $(($unit * 8 + 0))
+	${MKNOD} -r -m 640 $g_op ${name}${unit}b	b $blk $(($unit * 8 + 1))
+	${MKNOD} -r -m 640 $g_op ${name}${unit}c	b $blk $(($unit * 8 + 2))
+	${MKNOD} -r -m 640 $g_op ${name}${unit}d	b $blk $(($unit * 8 + 3))
+	${MKNOD} -r -m 640 $g_op  ${name}${unit}e	b $blk $(($unit * 8 + 4))
+	${MKNOD} -r -m 640 $g_op  ${name}${unit}f	b $blk $(($unit * 8 + 5))
+	${MKNOD} -r -m 640 $g_op  ${name}${unit}g	b $blk $(($unit * 8 + 6))
+	${MKNOD} -r -m 640 $g_op  ${name}${unit}h	b $blk $(($unit * 8 + 7))
+	${MKNOD} -r -m 640 $g_op  ${name}${unit}i	b $blk $(($unit * 8 + $highpartoffset + 8))
+	${MKNOD} -r -m 640 $g_op  ${name}${unit}j	b $blk $(($unit * 8 + $highpartoffset + 9))
+	${MKNOD} -r -m 640 $g_op  ${name}${unit}k	b $blk $(($unit * 8 + $highpartoffset + 10))
+	${MKNOD} -r -m 640 $g_op  ${name}${unit}l	b $blk $(($unit * 8 + $highpartoffset + 11))
+	${MKNOD} -r -m 640 $g_op  ${name}${unit}m	b $blk $(($unit * 8 + $highpartoffset + 12))
+	${MKNOD} -r -m 640 $g_op  ${name}${unit}n	b $blk $(($unit * 8 + $highpartoffset + 13))
+	${MKNOD} -r -m 640 $g_op  ${name}${unit}o	b $blk $(($unit * 8 + $highpartoffset + 14))
+	${MKNOD} -r -m 640 $g_op  ${name}${unit}p	b $blk $(($unit * 8 + $highpartoffset + 15))
+	${MKNOD} -r -m 640 $g_op  r${name}${unit}a	c $chr $(($unit * 8 + 0))
+	${MKNOD} -r -m 640 $g_op  r${name}${unit}b	c $chr $(($unit * 8 + 1))
+	${MKNOD} -r -m 640 $g_op  r${name}${unit}c	c $chr $(($unit * 8 + 2))
+	${MKNOD} -r -m 640 $g_op  r${name}${unit}d	c $chr $(($unit * 8 + 3))
+	${MKNOD} -r -m 640 $g_op  r${name}${unit}e	c $chr $(($unit * 8 + 4))
+	${MKNOD} -r -m 640 $g_op  r${name}${unit}f	c $chr $(($unit * 8 + 5))
+	${MKNOD} -r -m 640 $g_op  r${name}${unit}g	c $chr $(($unit * 8 + 6))
+	${MKNOD} -r -m 640 $g_op  r${name}${unit}h	c $chr $(($unit * 8 + 7))
+	${MKNOD} -r -m 640 $g_op  r${name}${unit}i	c $chr $(($unit * 8 + $highpartoffset + 8))
+	${MKNOD} -r -m 640 $g_op  r${name}${unit}j	c $chr $(($unit * 8 + $highpartoffset + 9))
+	${MKNOD} -r -m 640 $g_op  r${name}${unit}k	c $chr $(($unit * 8 + $highpartoffset + 10))
+	${MKNOD} -r -m 640 $g_op  r${name}${unit}l	c $chr $(($unit * 8 + $highpartoffset + 11))
+	${MKNOD} -r -m 640 $g_op  r${name}${unit}m	c $chr $(($unit * 8 + $highpartoffset + 12))
+	${MKNOD} -r -m 640 $g_op  r${name}${unit}n	c $chr $(($unit * 8 + $highpartoffset + 13))
+	${MKNOD} -r -m 640 $g_op  r${name}${unit}o	c $chr $(($unit * 8 + $highpartoffset + 14))
+	${MKNOD} -r -m 640 $g_op  r${name}${unit}p	c $chr $(($unit * 8 + $highpartoffset + 15))
 	;;
 
 ttyCZ*)
@@ -544,20 +487,18 @@
 	minor=$(($unit * 64))
 	eminor=$(($minor + 64))
 	while [ $minor -lt $eminor ]; do
-		if [ $minor -lt 10 ]; then
-			nminor=000$minor
-		elif [ $minor -lt 100 ]; then
-			nminor=00$minor
-		elif [ $minor -lt 1000 ]; then
-			nminor=0$minor
-		else
-			nminor=$minor
-		fi
-		rm -f ttyCZ$nminor dtyCZ$nminor
-		mknod ttyCZ$nminor c $major $(($minor + $dialin  ))
-		mknod dtyCZ$nminor c $major $(($minor + $dialout ))
-		chown uucp ttyCZ$nminor dtyCZ$nminor
-		chmod 600 ttyCZ$nminor dtyCZ$nminor
+		case "$minor" in
+		?)
+			nminor=000$minor ;;
+		??)
+			nminor=00$minor ;;
+		???)
+			nminor=0$minor ;;
+		*)
+			nminor=$minor ;;
+		esac
+		${MKNOD} -r -m 600 $u_uucp ttyCZ$nminor c $major $(($minor + $dialin ))
+		${MKNOD} -r -m 600 $u_uucp dtyCZ$nminor c $major $(($minor + $dialout))
 		minor=$(($minor + 1))
 	done
 	;;
@@ -568,18 +509,16 @@
 	minor=$(($unit * 32))
 	eminor=$(($minor + 32))
 	while [ $minor -lt $eminor ]; do
-		if [ $minor -lt 10 ]; then
-			nminor=00$minor
-		elif [ $minor -lt 100 ]; then
-			nminor=0$minor
-		else
-			nminor=$minor
-		fi
-		rm -f ttyCY$nminor dtyCY$nminor
-		mknod ttyCY$nminor c $major $(($minor + $dialin  ))
-		mknod dtyCY$nminor c $major $(($minor + $dialout ))
-		chown uucp ttyCY$nminor dtyCY$nminor
-		chmod 600 ttyCY$nminor dtyCY$nminor
+		case "$minor" in
+		?)
+			nminor=00$minor ;;
+		??)
+			nminor=0$minor ;;
+		*)
+			nminor=$minor ;;
+		esac
+		${MKNOD} -r -m 600 $u_uucp ttyCY$nminor c $major $(($minor + $dialin ))
+		${MKNOD} -r -m 600 $u_uucp dtyCY$nminor c $major $(($minor + $dialout))
 		minor=$(($minor + 1))
 	done
 	;;
@@ -593,14 +532,11 @@
 	else
 		unit=$ounit
 	fi
-	rm -f tty$unit dty$unit
-	mknod tty$unit c 8 $(($ounit + $dialin ))
-	mknod dty$unit c 8 $(($ounit + $dialout))
-	chown uucp tty$unit dty$unit
+	${MKNOD} -r -m 600 $u_uucp tty$unit c 8 $(($ounit + $dialin ))
+	${MKNOD} -r -m 600 $u_uucp dty$unit c 8 $(($ounit + $dialout))
 	;;
 
 opty)
-	rm -f ttyp[0-9a-f] ptyp[0-9a-f]
 	for j in 0 1 2 3 4 5 6 7 8 9 a b c d e f
 	do
 		case $j in
@@ -612,24 +548,21 @@
 		e)	jn=14 ;;
 		f)	jn=15 ;;
 		esac
-		mknod ttyp$j c 5 $jn
-		mknod ptyp$j c 6 $jn
+		${MKNOD} -r -m 666 ttyp$j c 5 $jn
+		${MKNOD} -r -m 666 ptyp$j c 6 $jn
 	done
-	chmod 666 ttyp[0-9a-f] ptyp[0-9a-f]
 	;;
 
 ipty)   
-	rm -f ttyp0 ttyp1 ptyp0 ptyp1
-	mknod ttyp0 c 5 0
-	mknod ttyp1 c 5 1
-	mknod ptyp0 c 6 0
-	mknod ptyp1 c 6 1
-	chmod 666 ttyp0 ttyp1 ptyp0 ptyp1
+	${MKNOD} -r -m 666 ttyp0 c 5 0
+	${MKNOD} -r -m 666 ttyp1 c 5 1
+	${MKNOD} -r -m 666 ptyp0 c 6 0
+	${MKNOD} -r -m 666 ptyp1 c 6 1
 	;;
 
 pty*)
 	class=${i#pty}
-	name=`echo pqrstuvwxyzPQRST | dd bs=1 count=1 skip=$class 2>/dev/null`
+	name=$(echo pqrstuvwxyzPQRST | dd bs=1 count=1 skip=$class 2>/dev/null)
 	case $name in
 	v)	echo "$0: $i: pty unit conflicts with console ttyv0 device."
 		continue ;;
@@ -637,67 +570,53 @@
 	*)	echo "$0: $i: pty unit must be between 0 and 15"
 		continue ;;
 	esac
-	rm -f tty$name[0-9a-zA-Z] pty$name[0-9a-zA-Z]
 	jn=0
 	while [ $jn -lt 62 ]
 	do
-		j=`echo 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ | dd bs=1 count=1 skip=$jn 2>/dev/null`
+		j=$(echo 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ | dd bs=1 count=1 skip=$jn 2>/dev/null)
 		skip=0
 		if [ $jn -ge 16 ]; then
 			skip=$(($class * 30 + 256 - 16))
 		fi
 		unit=$(($class * 16 + $jn + $skip))
-		mknod tty$name$j c 5 $unit
-		mknod pty$name$j c 6 $unit
+		${MKNOD} -r -m 666 tty$name$j c 5 $unit
+		${MKNOD} -r -m 666 pty$name$j c 6 $unit
 		jn=$(($jn + 1))
 	done
-	chmod 666 tty$name[0-9a-zA-Z] pty$name[0-9a-zA-Z]
 	;;
 
 st*)
 	case $i in
 	st*) name=st;	unit=${i#st};	chr=14;	blk=5;;
 	esac
-	rm -f $name$unit n$name$unit e$name$unit en$name$unit \
-		r$name$unit nr$name$unit er$name$unit enr$name$unit
-	mknod $name$unit	b $blk $(($unit * 16 + 0))
-	mknod n$name$unit	b $blk $(($unit * 16 + 1))
-	mknod e$name$unit	b $blk $(($unit * 16 + 2))
-	mknod en$name$unit	b $blk $(($unit * 16 + 3))
-	mknod r$name$unit	c $chr $(($unit * 16 + 0))
-	mknod nr$name$unit	c $chr $(($unit * 16 + 1))
-	mknod er$name$unit	c $chr $(($unit * 16 + 2))
-	mknod enr$name$unit	c $chr $(($unit * 16 + 3))
-	chgrp operator $name$unit n$name$unit e$name$unit en$name$unit \
-		r$name$unit nr$name$unit er$name$unit enr$name$unit
-	chmod 660 $name$unit n$name$unit e$name$unit en$name$unit \
-		r$name$unit nr$name$unit er$name$unit enr$name$unit
+	${MKNOD} -r -m 660 $g_op $name$unit	b $blk $(($unit * 16 + 0))
+	${MKNOD} -r -m 660 $g_op n$name$unit	b $blk $(($unit * 16 + 1))
+	${MKNOD} -r -m 660 $g_op e$name$unit	b $blk $(($unit * 16 + 2))
+	${MKNOD} -r -m 660 $g_op en$name$unit	b $blk $(($unit * 16 + 3))
+	${MKNOD} -r -m 660 $g_op r$name$unit	c $chr $(($unit * 16 + 0))
+	${MKNOD} -r -m 660 $g_op nr$name$unit	c $chr $(($unit * 16 + 1))
+	${MKNOD} -r -m 660 $g_op er$name$unit	c $chr $(($unit * 16 + 2))
+	${MKNOD} -r -m 660 $g_op enr$name$unit	c $chr $(($unit * 16 + 3))
 	;;
 
 ses*|ch*|uk*)
 	case $i in
-	ch*) name=ch;	unit=${i#ch};	chr=17;;
-	uk*) name=uk;	unit=${i#uk};	chr=20;;
-	ses*) name=ses;	unit=${i#ses};	chr=74;;
+	ch*)	name=ch;	unit=${i#ch};	chr=17;;
+	uk*)	name=uk;	unit=${i#uk};	chr=20;;
+	ses*)	name=ses;	unit=${i#ses};	chr=74;;
 	esac
-	rm -f $name$unit
-	mknod $name$unit	c $chr $unit
-	chgrp operator $name$unit
-	chmod 640 $name$unit
+	${MKNOD} -r -m 640 $g_op $name$unit	c $chr $unit
 	;;
 
 cd*|mcd*)
 	case $i in
-	cd*) name=cd;	unit=${i#cd};	chr=15;	blk=6;;
-	mcd*) name=mcd;	unit=${i#mcd};	chr=39;	blk=7;;
+	cd*)	name=cd;	unit=${i#cd};	chr=15;	blk=6;;
+	mcd*)	name=mcd;	unit=${i#mcd};	chr=39;	blk=7;;
 	esac
-	rm -f $name$unit? r$name$unit?
-	mknod ${name}${unit}a	b $blk $(($unit * 8 + 0))
-	mknod ${name}${unit}d	b $blk $(($unit * 8 + 3))
-	mknod r${name}${unit}a	c $chr $(($unit * 8 + 0))
-	mknod r${name}${unit}d	c $chr $(($unit * 8 + 3))
-	chgrp operator $name$unit? r$name$unit?
-	chmod 640 $name$unit? r$name$unit?
+	${MKNOD} -r -m 640 $g_op ${name}${unit}a	b $blk $(($unit * 8 + 0))
+	${MKNOD} -r -m 640 $g_op ${name}${unit}d	b $blk $(($unit * 8 + 3))
+	${MKNOD} -r -m 640 $g_op r${name}${unit}a	c $chr $(($unit * 8 + 0))
+	${MKNOD} -r -m 640 $g_op r${name}${unit}d	c $chr $(($unit * 8 + 3))
 	;;
 
 lpt*|lpa*)
@@ -705,8 +624,7 @@
 	lpt*) name=lpt;	unit=${i#lpt};	chr=16;	flags=0;;
 	lpa*) name=lpa;	unit=${i#lpa};	chr=16;	flags=128;;
 	esac
-	rm -f $name$unit
-	mknod $name$unit	c $chr $(($unit + $flags))
+	${MKNOD} -r -m 600 $name$unit	c $chr $(($unit + $flags))
 	;;
 
 bpf*|tun*|joy*)
@@ -715,129 +633,83 @@
 	tun*) name=tun;	unit=${i#tun};	chr=40;;
 	joy*) name=joy;	unit=${i#joy};	chr=26;;
 	esac
-	rm -f $name$unit
-	mknod $name$unit	c $chr $unit
+	${MKNOD} -r -m 600 $name$unit	c $chr $unit
 	;;
 
 ipl)
-	rm -f ipl ipnat ipstate ipauth
-	mknod ipl c 44 0
-	mknod ipnat c 44 1
-	mknod ipstate c 44 2
-	mknod ipauth c 44 3
-	chmod 600 ipl ipnat ipstate ipauth
+	${MKNOD} -r -m 600 ipl	c 44 0
+	${MKNOD} -r -m 600 ipnat	c 44 1
+	${MKNOD} -r -m 600 ipstate	c 44 2
+	${MKNOD} -r -m 600 ipauth	c 44 3
 	;;
 
 speaker)					# (XXX - installed)
-	rm -f speaker
-	mknod speaker c 27 0
+	${MKNOD} -r -m 600 speaker c 27 0
 	;;
 
 lkm)
-	rm -f lkm
-	mknod lkm c 28 0
-	chgrp kmem lkm
-	chmod 640 lkm
+	${MKNOD} -r -m 640 -g kmem lkm c 28 0
 	;;
 
 audio*)
 	unit=${i#audio}
-	audio=audio$unit
-	sound=sound$unit
-	mixer=mixer$unit
 	major=42
-	audioctl=audioctl$unit
-	if [ "$unit" = "" ]; then unit=0; fi
-	rm -f $audio $sound $mixer $audioctl
-	mknod $sound    c $major $(($unit + 0))
-	mknod $audio    c $major $(($unit + 128))
-	mknod $mixer    c $major $(($unit + 16))
-	mknod $audioctl c $major $(($unit + 192))
-	chmod 666 $audio $sound $mixer $audioctl
+	${MKNOD} -r -m 666 sound$unit	c $major $((${unit:-0} + 0))
+	${MKNOD} -r -m 666 audio$unit	c $major $((${unit:-0} + 128))
+	${MKNOD} -r -m 666 mixer$unit	c $major $((${unit:-0} + 16))
+	${MKNOD} -r -m 666 audioctl$unit	c $major $((${unit:-0} + 192))
 	;;
 
 rmidi*)
 	unit=${i#rmidi}
 	major=58
-	rmidi=rmidi$unit
-	rm -f $rmidi
-	mknod $rmidi c $major $unit
-	chmod 666 $rmidi
+	${MKNOD} -r -m 666 rmidi$unit c $major $unit
 	;;
 
 music*)
 	unit=${i#music}
-	music=music$unit
-	sequencer=sequencer$unit
 	major=59
-	if [ "$unit" = "" ]; then unit=0; fi
-	rm -f $sequencer $music
-	mknod $music     c $major $(($unit + 0))
-	mknod $sequencer c $major $(($unit + 128))
-	chmod 666 $music $sequencer
+	${MKNOD} -r -m 666 music$unit	c $major $((${unit:-0} + 0))
+	${MKNOD} -r -m 666 sequencer$unit	c $major $((${unit:-0} + 128))
 	;;
 
 radio*)
 	unit=${i#radio}
-	radio=radio$unit
 	major=87
-	if [ "$unit" = "" ]; then unit=0; fi
-	rm -f $radio
-	mknod $radio c $major $unit
-	chmod 666 $radio
+	${MKNOD} -r -m 666 radio$unit c $major ${unit:-0}
 	;;
 
 apm*)
-	rm -f apm apmctl
-	mknod apm c 21 0
-	mknod apmctl c 21 8
-	chmod 644 apm apmctl
+	${MKNOD} -r -m 644 apm	c 21 0
+	${MKNOD} -r -m 644 apmctl	c 21 8
 	;;
 
 satlink*)
 	unit=${i#satlink}
-	rm -f satlink$unit
-	mknod satlink$unit c 45 $unit
-	chmod 444 satlink$unit
+	${MKNOD} -r -m 444 satlink$unit c 45 $unit
 	;;
 
 random)
-	rm -f random urandom
-	mknod random c 46 0
-	mknod urandom c 46 1
-	chmod 444 random
-	chmod 644 urandom
+	${MKNOD} -r -m 444 random	c 46 0
+	${MKNOD} -r -m 644 urandom	c 46 1
 	;;
 
 cfs*)
 	unit=${i#cfs}
-	cfs=cfs$unit
 	major=60
-	rm -f $cfs
-	mknod $cfs c $major $unit
-	chmod 600 $cfs
+	${MKNOD} -r -m 600 cfs$unit c $major $unit
 	;;
 
 sysmon)
 	major=67
-	rm -f sysmon
-	mknod sysmon c $major 0
-	chmod 644 sysmon
-
-	rm -f watchdog
-	mknod watchdog c $major 1
-	chmod 644 watchdog
-
-	rm -f power
-	mknod power c $major 2
-	chmod 640 power
+	${MKNOD} -r -m 644 sysmon		c $major 0
+	${MKNOD} -r -m 644 watchdog	c $major 1
+	${MKNOD} -r -m 640 power		c $major 2
 	;;
 
 scsibus*)
 	unit=${i#scsibus}
-	rm -f scsibus$unit
-	mknod scsibus$unit c 61 $unit
-	chmod 644 scsibus$unit
+	${MKNOD} -r -m 644 scsibus$unit c 61 $unit
 	;;
 
 bktr)
@@ -849,121 +721,87 @@
 
 bktr*)
 	unit=${i#bktr}
-	rm -f bktr$unit tuner$unit vbi$unit
-	mknod bktr$unit c 71 $(($unit + 0))
-	mknod tuner$unit c 71 $(($unit + 16))
-	mknod vbi$unit c 71 $(($unit + 32))
-	chmod 444 bktr$unit tuner$unit vbi$unit
+	${MKNOD} -r -m 444 bktr$unit	c 71 $(($unit + 0))
+	${MKNOD} -r -m 444 tuner$unit	c 71 $(($unit + 16))
+	${MKNOD} -r -m 444 vbi$unit	c 71 $(($unit + 32))
 	;;
 
 iop*)
 	unit=${i#iop}
-	rm -f iop$unit
-	mknod iop$unit c 76 $unit
-	chmod 600 iop$unit
+	${MKNOD} -r -m 600 iop$unit c 76 $unit
 	;;
 
 mlx*)
 	unit=${i#mlx}
-	rm -f mlx$unit
-	mknod mlx$unit c 78 $unit
-	chmod 600 mlx$unit
+	${MKNOD} -r -m 600 mlx$unit c 78 $unit
 	;;
 
 mly*)
 	unit=${i#mly}
-	rm -f mly$unit
-	mknod mly$unit c 80 $unit
-	chmod 600 mly$unit
+	${MKNOD} -r -m 600 mly$unit c 80 $unit
 	;;
 
 twe*)
 	unit=${i#twe}
-	rm -f twe$unit
-	mknod twe$unit c 97 $unit
-	chmod 600 twe$unit
+	${MKNOD} -r -m 600 twe$unit c 97 $unit
 	;;
 
 icp*)
 	unit=${i#icp}
-	rm -f icp$unit
-	mknod icp$unit c 102 $unit
-	chmod 600 icp$unit
+	${MKNOD} -r -m 600 icp$unit c 102 $unit
 	;;
 
 agp*)
 	unit=${i#agp}
-	rm -f agp$unit
-	mknod agp$unit c 82 $unit
-	if [ "$unit" = "0" ]; then ln -fs agp$unit agpgart; fi
-	chmod 644 agp$unit
+	${MKNOD} -r -m 644 agp$unit c 82 $unit
+	[ "$unit" = "0" ] && ln -fs agp$unit agpgart
 	;;
 
 pci*)
 	unit=${i#pci}
-	rm -f pci$unit
-	mknod pci$unit c 83 $unit
-	chmod 644 pci$unit
+	${MKNOD} -r -m 644 pci$unit c 83 $unit
 	;;
 
 dpti*)
 	unit=${i#dpti}
-	rm -f dpti$unit
-	mknod dpti$unit c 84 $unit
-	chmod 600 dpti$unit
+	${MKNOD} -r -m 600 dpti$unit c 84 $unit
 	;;
 
 dpt*)
 	unit=${i#dpt}
-	rm -f dpt$unit
-	mknod dpt$unit c 96 $unit
-	chmod 600 dpt$unit
+	${MKNOD} -r -m 600 dpt$unit c 96 $unit
 	;;
 
 altq)
-	mkdir altq 2>/dev/null
-	chmod 755 altq
+	mkdir -m 755 altq 2>/dev/null
 	unit=0
-	for dev in altq cbq wfq afm fifoq red rio localq hfsc \
-	    cdnr blue priq; do
-		rm -f altq/$dev
-		mknod altq/$dev c 77 $unit
-		chmod 644 altq/$dev
+	for dev in altq cbq wfq afm fifoq red rio localq hfsc cdnr blue priq; do
+		${MKNOD} -r -m 644 altq/$dev c 77 $unit
 		unit=$(($unit + 1))
 	done
 	;;
 
 isdn)
-	rm -f isdn
-	mknod isdn c 50 0
-	chmod 600 isdn
+	${MKNOD} -r -m 600 isdn c 50 0
 	;;
 
 isdnctl)
-	rm -f isdnctl
-	mknod isdnctl c 51 0
-	chmod 600 isdnctl
+	${MKNOD} -r -m 600 isdnctl c 51 0
 	;;
 
 isdnbchan*)
 	unit=${i#isdnbchan}
-	rm -f isdnbchan$unit
-	mknod isdnbchan$unit c 52 $unit
-	chmod 600 isdnbchan$unit
+	${MKNOD} -r -m 600 isdnbchan$unit c 52 $unit
 	;;
 
 isdntel*)
 	unit=${i#isdntel}
-	rm -f isdntel$unit
-	mknod isdntel$unit c 54 $unit
-	chmod 600 isdntel$unit
+	${MKNOD} -r -m 600 isdntel$unit c 54 $unit
 	;;
 
 isdntrc*)
 	unit=${i#isdntrc}
-	rm -f isdntrc$unit
-	mknod isdntrc$unit c 53 $unit
-	chmod 600 isdntrc$unit
+	${MKNOD} -r -m 600 isdntrc$unit c 53 $unit
 	;;
 
 vmegen)
@@ -972,40 +810,27 @@
 
 vmegen*)
 	unit=${i#vmegen}
-	rm -f vmegen$unit
-	mknod vmegen$unit c 68 $(($unit * 16 + 0))
-	chmod 600 vmegen$unit
+	${MKNOD} -r -m 600 vmegen$unit c 68 $(($unit * 16 + 0))
 	;;
 
 wsfont)
-	rm -f wsfont
-	mknod wsfont c 81 0
-	chmod 600 wsfont
+	${MKNOD} -r -m 600 wsfont c 81 0
 	;;
 
 cir*)
 	unit=${i#cir}
-	cir=cir$unit
 	major=86
-	rm -f $cir
-	mknod $cir c $major $unit
-	chmod 666 $cir
+	${MKNOD} -r -m 666 cir$unit c $major $unit
 	;;
 
 irframe*)
 	unit=${i#irframe}
-	irframe=irframe$unit
 	major=85
-	rm -f $irframe
-	mknod $irframe c $major $unit
-	chmod 600 $irframe
+	${MKNOD} -r -m 600 irframe$unit c $major $unit
 	;;
 
 clockctl)
-	rm -f clockctl
-	mknod clockctl c 89 0
-	chgrp ntpd clockctl
-	chmod 660 clockctl
+	${MKNOD} -r -m 660 -g ntpd clockctl c 89 0
 	;;
 
 nsmb)
@@ -1014,35 +839,24 @@
 
 nsmb*)
 	unit=${i#nsmb}
-	nsmb=nsmb$unit
 	major=98
-	rm -f $nsmb
-	mknod $nsmb c $major $unit
-	chmod 644 $nsmb
+	${MKNOD} -r -m 644 nsmb$unit c $major $unit
 	;;
 
 systrace)
-	rm -f systrace
-	mknod systrace c 90 0
-	chmod 644 systrace
+	${MKNOD} -r -m 644 systrace c 90 0
 	;;
 
 kttcp)
-	rm -f kttcp
-	mknod kttcp c 91 0
-	chmod 600 kttcp
+	${MKNOD} -r -m 600 kttcp c 91 0
 	;;
 
 dmoverio)
-	rm -f dmoverio
-	mknod dmoverio c 92 0
-	chmod 644 dmoverio
+	${MKNOD} -r -m 644 dmoverio c 92 0
 	;;
 
 veriexec)
-	rm -f veriexec
-	mknod veriexec c 94 0
-	chmod 644 veriexec
+	${MKNOD} -r -m 644 veriexec c 94 0
 	;;
 
 local)

--EXKGNeO8l0xGFBjy--