Merge branch 'vendor/GCC47'
[dragonfly.git] / share / initrd / rc
1 #!/bin/sh
2
3 # echo "Starting shell from md boot"
4 # exec sh
5
6 /sbin/mount_tmpfs tmpfs /tmp
7 /sbin/mount_tmpfs tmpfs /var
8 mkdir /var/tmp
9 mkdir /var/run
10
11 rescue_shell() {
12         echo "Starting recovery shell!"
13         exec sh
14         exit 0
15 }
16
17 # Start udevd
18 /sbin/udevd
19
20 for rcs in /etc/rc.*; do
21         if [ -x $rcs ]; then
22                 . $rcs
23         fi
24 done
25
26 echo "Mounting new root"
27
28 IFS=':'
29 REAL_ROOT=`sysctl -n vfs.real_root`
30 if [ "$?" -ne "0" ]; then
31         echo "Kernel does not have vfs.real_root sysctl. Please update your" \
32                 "kernel if you intend to use initrd"
33         rescue_shell
34 fi
35 set -- $REAL_ROOT
36 TYPE=$1
37 unset IFS
38
39 if [ "$TYPE" = "local" ]; then
40         FSTYPE=$2
41         MOUNTFROM=$3
42
43         # Make sure MOUNTFROM begins with /dev/
44         substr="${MOUNTFROM##/dev/}"
45         if [ "$substr" = "$MOUNTFROM" ]; then
46                 MOUNTFROM="/dev/$MOUNTFROM"
47         fi
48
49         echo "executing /sbin/mount -t $FSTYPE $4 $MOUNTFROM /new_root"
50         /sbin/mount -o ro -t $FSTYPE $4 $MOUNTFROM /new_root
51         if [ "$?" -ne "0" ]; then
52                 rescue_shell
53         fi
54 else
55         if [ -x "/etc/rcmount_${TYPE}" ]; then
56                 . /etc/rcmount_${TYPE} $@
57                 if [ "$?" -ne "0" ]; then
58                         rescue_shell
59                 fi
60         else
61                 rescue_shell
62         fi
63 fi
64
65 # Stop udevd
66 read UDEVD_PID < /var/run/udevd.pid
67 kill $UDEVD_PID
68
69 # Clean up
70 rm -rf /var/*
71 rm -rf /tmp/*
72 /sbin/umount /var
73 /sbin/umount /tmp
74
75 echo "Mounting devfs on new root"
76 #/sbin/mount_devfs /new_root/dev
77 /sbin/mount_null /dev /new_root/dev