blob: 431780a701aeeb3c3e7cb11494f98bc7703feb4e [file] [log] [blame]
Milton D. Miller IId89d5e02016-01-20 14:57:54 -06001#!/bin/sh
2
3rodir=run/initramfs/ro
4rwdir=run/initramfs/rw
5upper=$rwdir/cow
6work=$rwdir/work
7
8cd /
9mkdir -p sys proc dev run
10mount dev dev -tdevtmpfs
11mount sys sys -tsysfs
12mount proc proc -tproc
13if ! grep run proc/mounts
14then
15 mount tmpfs run -t tmpfs -o mode=755,nodev
16fi
17
18mkdir -p $rodir $rwdir
19
20cp -rp init shutdown update whitelist bin sbin usr lib etc var run/initramfs
21
22# To start a interactive shell with job control at this point, run
23# getty 38400 ttyS4
24
25findmtd() {
26 m=$(grep -xl "$1" /sys/class/mtd/*/name)
27 m=${m%/name}
28 m=${m##*/}
29 echo $m
30}
31
32rofs=$(findmtd rofs)
33rwfs=$(findmtd rwfs)
34
35rofst=squashfs
36rwfst=ext4
37
38echo rofs = $rofs $rofst rwfs = $rwfs $rwfst
39
40if grep -w debug-init-sh /proc/cmdline ||
41 ! mount -o rw /dev/mtdblock${rwfs#mtd} $rwdir -t $rwfst
42then
43 echo Please mount the rw file system on $rwdir from this shell
44 while ! sulogin && ! test -f /takeover
45 do
46 echo getty failed, retrying
47 done
48fi
49
50# Touch /takeover in the above getty to become pid 1
51if test -e /takeover
52then
53 export PS1=init#\
54 exec /bin/sh
55fi
56
57mount -o ro /dev/mtdblock${rofs#mtd} $rodir -t $rofst
58
59rm -rf $work
60mkdir -p $upper
61mkdir -p $work
62
63mount -t overlay -o lowerdir=$rodir,upperdir=$upper,workdir=$work cow /root
64
65if ! chroot /root /bin/sh -c exit
66then
67 echo 'chroot test failed; invoking emergency shell.'
68 PS1=rescue#\ sulogin
69fi
70
71for f in sys dev proc run
72do
73 mount --move $f root/$f
74done
75
76# switch_root /root /sbin/init
77exec chroot /root /sbin/init
78