initrd - minor fixes
[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         echo "executing /sbin/mount -t $FSTYPE $4 $MOUNTFROM /new_root"
43         /sbin/mount -o ro -t $FSTYPE $4 $MOUNTFROM /new_root
44         if [ "$?" -ne "0" ]; then
45                 rescue_shell
46         fi
47 else
48         if [ -x "/etc/rcmount_${TYPE}" ]; then
49                 . /etc/rcmount_${TYPE} $@
50                 if [ "$?" -ne "0" ]; then
51                         rescue_shell
52                 fi
53         else
54                 rescue_shell
55         fi
56 fi
57
58 # Stop udevd
59 read UDEVD_PID < /var/run/udevd.pid
60 kill $UDEVD_PID
61
62 # Clean up
63 rm -rf /var/*
64 rm -rf /tmp/*
65 /sbin/umount /var
66 /sbin/umount /tmp
67
68 echo "Mounting devfs on new root"
69 #/sbin/mount_devfs /new_root/dev
70 /sbin/mount_null /dev /new_root/dev