xref: /dflybsd-src/initrd/etc/rc (revision e79a303f7db7331d570bb6c6abdd555eeefdcdc2)
1*e79a303fSAaron LI#!/bin/sh
2*e79a303fSAaron LI
3*e79a303fSAaron LIexport PATH=/bin:/sbin
4*e79a303fSAaron LIexport HOME=/var/home
5*e79a303fSAaron LI
6*e79a303fSAaron LI# Where to mount the real root partition
7*e79a303fSAaron LIexport NEW_ROOT=/new_root
8*e79a303fSAaron LI
9*e79a303fSAaron LIrescue_shell() {
10*e79a303fSAaron LI	echo "Starting the recovery shell ..."
11*e79a303fSAaron LI	cat /etc/motd
12*e79a303fSAaron LI	exec sh
13*e79a303fSAaron LI	exit 0
14*e79a303fSAaron LI}
15*e79a303fSAaron LI
16*e79a303fSAaron LIif [ ! -d "$NEW_ROOT" ]; then
17*e79a303fSAaron LI	echo "WARNING: trying to remount / RW and create $NEW_ROOT ..."
18*e79a303fSAaron LI	mount -u -w / &&
19*e79a303fSAaron LI	    mkdir $NEW_ROOT ||
20*e79a303fSAaron LI	    rescue_shell
21*e79a303fSAaron LIfi
22*e79a303fSAaron LI
23*e79a303fSAaron LIecho "Setting up /var directories ..."
24*e79a303fSAaron LImount_tmpfs tmpfs /var
25*e79a303fSAaron LImkdir /var/db /var/empty /var/home /var/run /var/tmp
26*e79a303fSAaron LI
27*e79a303fSAaron LIecho "Starting udevd for LVM ..."
28*e79a303fSAaron LIudevd
29*e79a303fSAaron LI
30*e79a303fSAaron LIecho "Executing additional rc scripts ..."
31*e79a303fSAaron LIfor rcs in /etc/rc.*; do
32*e79a303fSAaron LI	if [ -x "$rcs" ]; then
33*e79a303fSAaron LI		. $rcs
34*e79a303fSAaron LI	fi
35*e79a303fSAaron LIdone
36*e79a303fSAaron LI
37*e79a303fSAaron LIecho "Mounting real root partition at $NEW_ROOT ..."
38*e79a303fSAaron LI
39*e79a303fSAaron LIIFS=':'
40*e79a303fSAaron LIREAL_ROOT=$(sysctl -n vfs.real_root)
41*e79a303fSAaron LIif [ $? -ne 0 ]; then
42*e79a303fSAaron LI	echo "ERROR: vfs.real_root sysctl no exist. The kernel is too old."
43*e79a303fSAaron LI	rescue_shell
44*e79a303fSAaron LIfi
45*e79a303fSAaron LIif [ -z "${REAL_ROOT}" ]; then
46*e79a303fSAaron LI	echo "ERROR: vfs.real_root sysctl not set."
47*e79a303fSAaron LI	rescue_shell
48*e79a303fSAaron LIfi
49*e79a303fSAaron LIset -- $REAL_ROOT
50*e79a303fSAaron LIunset IFS
51*e79a303fSAaron LI
52*e79a303fSAaron LITYPE=$1
53*e79a303fSAaron LIif [ "$TYPE" = "local" ]; then
54*e79a303fSAaron LI	FSTYPE=$2
55*e79a303fSAaron LI	MOUNTFROM="/dev/${3#/dev/}"
56*e79a303fSAaron LI	echo "Executing: mount -t $FSTYPE $4 $MOUNTFROM $NEW_ROOT"
57*e79a303fSAaron LI	mount -o ro -t $FSTYPE $4 $MOUNTFROM $NEW_ROOT ||
58*e79a303fSAaron LI	    rescue_shell
59*e79a303fSAaron LIelif [ -x "/etc/rcmount_${TYPE}" ]; then
60*e79a303fSAaron LI	. /etc/rcmount_${TYPE} "$@" ||
61*e79a303fSAaron LI	    rescue_shell
62*e79a303fSAaron LIelse
63*e79a303fSAaron LI	echo "ERROR: Unsupported root filesystem type: $TYPE."
64*e79a303fSAaron LI	rescue_shell
65*e79a303fSAaron LIfi
66*e79a303fSAaron LI
67*e79a303fSAaron LIecho "Stopping udevd ..."
68*e79a303fSAaron LIkill $(cat /var/run/udevd.pid)
69*e79a303fSAaron LI
70*e79a303fSAaron LIecho "Cleaning up and umounting /var ..."
71*e79a303fSAaron LIrm -rf /var/*
72*e79a303fSAaron LIumount /var
73*e79a303fSAaron LI
74*e79a303fSAaron LIecho "Mounting devfs on real root ..."
75*e79a303fSAaron LI#mount_devfs $NEW_ROOT/dev
76*e79a303fSAaron LImount_null /dev $NEW_ROOT/dev
77