1# $NetBSD: cgdroot.rc,v 1.5 2019/11/22 00:27:30 alnsn Exp $ 2# 3# Copyright (c) 2013 Pierre Pronchery <khorben@defora.org> 4# All rights reserved. 5# 6# Redistribution and use in source and binary forms, with or without 7# modification, are permitted provided that the following conditions 8# are met: 9# 1. Redistributions of source code must retain the above copyright 10# notice, this list of conditions and the following disclaimer. 11# 2. Redistributions in binary form must reproduce the above copyright 12# notice, this list of conditions and the following disclaimer in the 13# documentation and/or other materials provided with the distribution. 14# 15# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 16# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 17# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 18# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 19# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 20# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 21# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 22# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 24# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25 26PATH=/sbin:/usr/sbin:/bin:/usr/bin 27export PATH 28TERM=wsvt25 29export TERM 30HOME=/ 31export HOME 32BLOCKSIZE=1k 33export BLOCKSIZE 34EDITOR=ed 35export EDITOR 36 37umask 022 38 39# Mount /etc/cgd. 40etc_cgd_mount= 41for dev in NAME=cgd.conf /dev/wd0a /dev/ld0a ; do 42 if mount -o ro $dev /etc/cgd 2>/dev/null ; then 43 etc_cgd_mount=$dev 44 break 45 fi 46done 47if [ -z "${etc_cgd_mount}" ]; then 48 echo "Could not mount the boot partition" 1>&2 49 exit 2 50fi 51 52# Configure cgd device(s). 53/sbin/wsconsctl -d -w splash.enable=0 > /dev/null 2>&1 54cgdconfig -C 55if [ $? -ne 0 ]; then 56 echo "Could not decrypt the encrypted volume" 1>&2 57 umount /etc/cgd 58 exit 2 59fi 60 61# Select candidates for a root mount. 62root_mounts= 63if [ -z "${etc_cgd_mount##NAME=*}" ]; then 64 root_mounts="NAME=cgdroot /dev/cgd0a" 65else 66 root_mounts=/dev/cgd0a 67fi 68 69# Mount the root filesystem. 70mounted= 71for dev in ${root_mounts} ; do 72 if mount -o ro $dev /altroot 2>/dev/null ; then 73 mounted=$dev 74 break 75 fi 76done 77 78if [ -z "$mounted" ]; then 79 echo "Could not mount the root partition" 1>&2 80 cgdconfig -U 81 umount /etc/cgd 82 exit 2 83fi 84 85# Boot into /altroot. 86umount /etc/cgd 87/sbin/wsconsctl -d -w splash.enable=1 > /dev/null 2>&1 88sysctl -w init.root=/altroot 89