Module Name: src Committed By: alnsn Date: Fri Nov 22 00:27:30 UTC 2019
Modified Files: src/distrib/common: cgdroot.rc Log Message: If gpt label "cgd.conf" contains a valid /etc/cgd file system, try mounting gpt label "cgdroot" as a root filesystem first and only mount /dev/cgd0a if that gpt label doesn't exist or fails to mount. XXX pullup to 8 and 9. To generate a diff of this commit: cvs rdiff -u -r1.4 -r1.5 src/distrib/common/cgdroot.rc Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/distrib/common/cgdroot.rc diff -u src/distrib/common/cgdroot.rc:1.4 src/distrib/common/cgdroot.rc:1.5 --- src/distrib/common/cgdroot.rc:1.4 Sat Dec 29 13:09:35 2018 +++ src/distrib/common/cgdroot.rc Fri Nov 22 00:27:30 2019 @@ -1,4 +1,4 @@ -# $NetBSD: cgdroot.rc,v 1.4 2018/12/29 13:09:35 alnsn Exp $ +# $NetBSD: cgdroot.rc,v 1.5 2019/11/22 00:27:30 alnsn Exp $ # # Copyright (c) 2013 Pierre Pronchery <khor...@defora.org> # All rights reserved. @@ -36,17 +36,20 @@ export EDITOR umask 022 -mounted= +# Mount /etc/cgd. +etc_cgd_mount= for dev in NAME=cgd.conf /dev/wd0a /dev/ld0a ; do if mount -o ro $dev /etc/cgd 2>/dev/null ; then - mounted=$dev + etc_cgd_mount=$dev break fi done -if [ -z "$mounted" ]; then +if [ -z "${etc_cgd_mount}" ]; then echo "Could not mount the boot partition" 1>&2 exit 2 fi + +# Configure cgd device(s). /sbin/wsconsctl -d -w splash.enable=0 > /dev/null 2>&1 cgdconfig -C if [ $? -ne 0 ]; then @@ -54,13 +57,32 @@ if [ $? -ne 0 ]; then umount /etc/cgd exit 2 fi -mount -o ro /dev/cgd0a /altroot -if [ $? -ne 0 ]; then + +# Select candidates for a root mount. +root_mounts= +if [ -z "${etc_cgd_mount##NAME=*}" ]; then + root_mounts="NAME=cgdroot /dev/cgd0a" +else + root_mounts=/dev/cgd0a +fi + +# Mount the root filesystem. +mounted= +for dev in ${root_mounts} ; do + if mount -o ro $dev /altroot 2>/dev/null ; then + mounted=$dev + break + fi +done + +if [ -z "$mounted" ]; then echo "Could not mount the root partition" 1>&2 cgdconfig -U umount /etc/cgd exit 2 fi + +# Boot into /altroot. umount /etc/cgd /sbin/wsconsctl -d -w splash.enable=1 > /dev/null 2>&1 sysctl -w init.root=/altroot