summaryrefslogtreecommitdiff
path: root/recipes/nslu2-binary-only/unslung-rootfs/linuxrc
blob: 1500779280b614ff6104d8d0f054385b6b7317fd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
#!/bin/sh

NC_SLUGIP="192.168.1.77"
NC_TARGIP="192.168.1.100"

if ( [ -f "/.nc" ] ) ; then
  if ( [ -z "$RERUN" ] ) ; then
    /bin/echo " DEBUG: Starting network console from flash ..."
    . /.nc
    /bin/echo "Insmod ixp400"
    /sbin/insmod ixp400.o
    /bin/echo "Insmod ixp425"
    /sbin/insmod ixp425_eth.o
    /sbin/ifconfig ixp0 $NC_SLUGIP
    /bin/echo "Insmod netconsole"
    /sbin/insmod netconsole.o target_ipaddr=$NC_TARGIP
    /bin/echo "Redirecting output via nc and restarting /linuxrc ..."
    export RERUN=1
    exec /linuxrc 2>&1 | tee /dev/console | /usr/bin/nc $NC_TARGIP 6666
  fi
fi

# ****  DO NOT EVEN THINK OF EDITING OR REMOVING THIS FILE  ****
# **** UNLESS YOU REALLY KNOW *EXACTLY* WHAT YOU ARE DOING. ****


# Perform prepatory tasks, and determine whether an alternate rootfs is viable.

/bin/mount -t proc proc /proc

/bin/echo "1" > /proc/sys/kernel/panic

if ( ! [ -f /.nodisk ] ) ; then

  /bin/echo "Sleeping while waiting for disk..."
  cnt=20
  while [ $cnt -gt 0 ] ; do
    /bin/echo -ne "\r$cnt "
    /bin/sleep 1
    [ -e /.sda1root -a -f /proc/hdd_sda ] && cnt=0
    [ -e /.sdb1root -a -f /proc/hdd_sdb ] && cnt=0
    cnt=`expr $cnt - 1`
  done
  /bin/echo

  if [ -e /.fastdisk ] ; then
    /bin/sleep 5
  else
    /bin/sleep 15
  fi

  mounted=

  for prefroot in sda1 sdb1 ; do
    if [ -z "$mounted" -a -e /.${prefroot}root ] ; then
      if /bin/mount -rt ext3 /dev/$prefroot /mnt ; then
        if [ -e /mnt/.${prefroot}root -a -x /mnt/bin/init ] ; then
          /bin/echo "Root filesystem will be mounted from /dev/$prefroot ..."
          mounted=/mnt
        else
          /bin/umount /mnt
          /bin/echo "Can't find valid rootfs on /dev/$prefroot ..."
        fi
      fi
    fi
  done

  if [ -z "$mounted" ] ; then
    /bin/echo "Can't find valid rootfs, using ramdisk ..."
    mounted=
  fi

  /bin/umount /proc

  # Pivot to the desired rootfs and run the initial executable.

  if [ -n "$mounted" ] ; then

      cd $mounted

      /bin/echo "Pivoting to external rootfs ..."
      /sbin/pivot_root . initrd

      if ( [ -z "$RERUN" ] ) ; then
        exec /usr/sbin/chroot . /bin/init < /dev/console 1> /dev/console 2> /dev/console
      else
        exec /usr/sbin/chroot . /bin/init
      fi
  else

      exec /bin/init

  fi

  /bin/echo "Can't pivot to external rootfs, using ramdisk ..."

else
  /bin/echo "Forced boot to internal flash ..."
  /bin/echo "(One-time only, clearing forced boot flag file.)"
  /bin/rm -f /.nodisk
fi

exec /bin/init

# Last-resort fall-back - this should never be reached.
/bin/sh