Index | Thread | Search

From:
Andrew Hewus Fresh <afresh1@openbsd.org>
Subject:
Re: rc: skip rootdisk_nodes if we are running diskless
To:
tech@openbsd.org
Cc:
chara <chara@cloud9p.org>
Date:
Wed, 9 Sep 2026 11:03:32 -0700

Download raw body.

Thread
On Tue, Sep 08, 2026 at 09:15:08PM +0330, chara wrote:
> ping.
> 
> On Wed, 02 Sep 2026 14:37:00 -0600
> "Theo de Raadt" <deraadt@openbsd.org> wrote:
> 
> > That looks good to me.

It looked OK to me, this is the same, but with some consistency fixes to
use [[ ]] as is done elsewhere in /etc/rc and not use `if` for early
returns and local variables in use.

I can split the commits if desired.

Comments, OK?


Index: rc
===================================================================
RCS file: /cvs/src/etc/rc,v
diff -u -p -r1.593 rc
--- rc	3 Sep 2026 18:56:40 -0000	1.593
+++ rc	9 Sep 2026 18:02:19 -0000
@@ -308,22 +308,26 @@ run_upgrade_script() {
 #   mount -uw /dev/rootdisk /
 #   cd /dev && ./MAKEDEV redodisks
 rootdisk_nodes() {
-	if [ $(sysctl -n kern.maxpartitions) = 16 ]; then
-		_rootdev=$(mount | grep ' / ' | cut -d' ' -f1)
-		_maj=$(stat -f "%Hr" $_rootdev)
-		_omin=$(stat -f "%Lr" $_rootdev)
-		_min=$((_omin / 16 * 64))
-		if [ -b /dev/rootdisk -a \
-		    "$(stat -qf %Hr,%Lr /dev/rootdisk)" = "$_maj,$_min" ]; then
-			return
-		fi
-		# does not exist or device changed, redo
-		_rrootdev=$(echo $_rootdev | sed -e 's,dev/,dev/r,')
-		_rmaj=$(stat -f "%Hr" $_rrootdev)
-		rm -f /dev/rrootdisk /dev/rootdisk
-		mknod -m 600 /dev/rrootdisk c $_rmaj $_min
-		mknod -m 600 /dev/rootdisk b $_maj $_min
-	fi
+	local _rootdev _rrootdev _maj _rmaj _omin _min
+	[[ $(sysctl -n kern.maxpartitions) = 16 ]] || return
+
+	# Find and use root device if we are not booting from NFS
+	_rootdev=$(mount | grep ' / ' | grep -v ':' | cut -d' ' -f1)
+	[[ -n $_rootdev ]] || return
+
+	_maj=$(stat -f "%Hr" $_rootdev)
+	_omin=$(stat -f "%Lr" $_rootdev)
+	_min=$((_omin / 16 * 64))
+	[[ -b /dev/rootdisk ]] &&
+	    [[ "$(stat -qf %Hr,%Lr /dev/rootdisk)" = "$_maj,$_min" ]] &&
+	    return
+
+	# does not exist or device changed, redo
+	_rrootdev=$(echo $_rootdev | sed -e 's,dev/,dev/r,')
+	_rmaj=$(stat -f "%Hr" $_rrootdev)
+	rm -f /dev/rrootdisk /dev/rootdisk
+	mknod -m 600 /dev/rrootdisk c $_rmaj $_min
+	mknod -m 600 /dev/rootdisk b $_maj $_min
 }
 
 # Check filesystems, optionally by using a fsck(8) flag.