rev |
line source |
slaxemulator@0
|
1 #!/bin/sh
|
slaxemulator@0
|
2
|
slaxemulator@166
|
3 success()
|
slaxemulator@166
|
4 {
|
slaxemulator@166
|
5 cat > /tmp/init
|
slaxemulator@166
|
6 [ -d /proc/sys ] && umount /proc
|
slaxemulator@166
|
7 echo -e "\\033[70G[ \\033[1;32mOK\\033[0;39m ]"
|
slaxemulator@166
|
8 exit
|
slaxemulator@166
|
9 }
|
slaxemulator@166
|
10
|
slaxemulator@0
|
11 launch_init()
|
slaxemulator@0
|
12 {
|
slaxemulator@166
|
13 mount --move /dev/pts /mnt/dev/pts
|
slaxemulator@166
|
14 mount --move /dev/shm /mnt/dev/shm
|
slaxemulator@166
|
15 success <<EOT
|
slaxemulator@166
|
16 exec /sbin/switch_root mnt /sbin/init
|
slaxemulator@166
|
17 EOT
|
slaxemulator@166
|
18 }
|
slaxemulator@166
|
19
|
slaxemulator@166
|
20 failed()
|
slaxemulator@166
|
21 {
|
slaxemulator@25
|
22 [ -d /proc/sys ] && umount /proc
|
slaxemulator@166
|
23 echo -e "\\033[70G[ \\033[1;31mFailed\\033[0;39m ]"
|
slaxemulator@0
|
24 }
|
slaxemulator@0
|
25
|
slaxemulator@0
|
26 launch_init_modular()
|
slaxemulator@0
|
27 {
|
slaxemulator@132
|
28 echo -e "\\033[70G[ \\033[1;32mOK\\033[0;39m ]"
|
slaxemulator@22
|
29 [ -d /mnt/initramfs ] || mkdir -p /mnt/initramfs
|
slaxemulator@127
|
30 SYS_DIR="dev bin etc boot lib sbin home root run usr var"
|
slaxemulator@13
|
31 for dir in $SYS_DIR; do
|
slaxemulator@22
|
32 cp -a /$dir /mnt/initramfs
|
slaxemulator@13
|
33 done
|
slaxemulator@13
|
34 MK_DIR="sys proc tmp media mnt"
|
slaxemulator@13
|
35 for dir1 in $MK_DIR; do
|
slaxemulator@24
|
36 mkdir -p /mnt/initramfs/$dir1
|
slaxemulator@13
|
37 done
|
slaxemulator@166
|
38 mount --move /dev /mnt/dev
|
slaxemulator@166
|
39 [ -f /mnt/dev/sdc ] || mknod /mnt/dev/sdc b 8 32
|
slaxemulator@166
|
40 [ -f /mnt/dev/sdc1 ] || mknod /mnt/dev/sdc1 b 8 33
|
slaxemulator@166
|
41 mount --move /run /mnt/run
|
slaxemulator@166
|
42 mkdir -p /mnt/dev/pts
|
slaxemulator@166
|
43 mount --move /dev/pts /mnt/dev/pts
|
slaxemulator@166
|
44 mkdir -p /mnt/dev/shm
|
slaxemulator@166
|
45 mount --move /dev/shm /mnt/dev/shm
|
slaxemulator@166
|
46 success <<EOT
|
slaxemulator@166
|
47 exec /sbin/switch_root mnt /linuxrc
|
slaxemulator@166
|
48 EOT
|
slaxemulator@0
|
49 }
|
slaxemulator@0
|
50
|
slaxemulator@0
|
51 try_init()
|
slaxemulator@0
|
52 {
|
slaxemulator@0
|
53 if [ ! -d /mnt/etc ] && grep -q cryptoroot= /proc/cmdline; then
|
slaxemulator@0
|
54 modprobe dm-mod
|
slaxemulator@0
|
55 modprobe dm-crypt
|
slaxemulator@0
|
56 modprobe aes-i586
|
slaxemulator@0
|
57 root="$(sed 's/.*cryptoroot=\([^ ]*\).*/\1/' < /proc/cmdline)"
|
slaxemulator@0
|
58 dev=${root#/dev/}
|
slaxemulator@0
|
59 dmlabel=crypto-$dev
|
slaxemulator@0
|
60 if cryptsetup isLuks $root 2> /dev/null; then
|
slaxemulator@0
|
61 cryptsetup luksOpen $root $dmlabel
|
slaxemulator@0
|
62 else
|
slaxemulator@0
|
63 read -s -t 60 -p "Pass phrase : " passphrase
|
slaxemulator@0
|
64 key=$(echo $passphrase | hashalot -x -n 32 sha512)
|
slaxemulator@0
|
65 blocks=$(cat $(find /sys/block | grep /$dev/size))
|
slaxemulator@0
|
66 echo 0 $blocks crypt aes-plain $key 0 $root 0 | \
|
slaxemulator@0
|
67 dmsetup create $dmlabel
|
slaxemulator@0
|
68 fi
|
slaxemulator@0
|
69 mount /dev/mapper/$dmlabel /mnt
|
slaxemulator@0
|
70 fi
|
slaxemulator@0
|
71 if [ -d /mnt/etc ]; then
|
slaxemulator@0
|
72 umount /sys
|
slaxemulator@0
|
73 [ -n "$1" ] && for i in $@ ; do
|
slaxemulator@0
|
74 cp -a $i /mnt$(dirname $i)
|
slaxemulator@0
|
75 done
|
slaxemulator@22
|
76 mount /mnt -o remount,ro
|
slaxemulator@0
|
77 launch_init
|
slaxemulator@0
|
78 fi
|
slaxemulator@0
|
79 failed
|
slaxemulator@0
|
80 }
|
slaxemulator@0
|
81
|
slaxemulator@0
|
82 mount_mapper()
|
slaxemulator@0
|
83 {
|
slaxemulator@0
|
84 mount $root /mnt
|
slaxemulator@0
|
85 try_init /dev/mapper $@
|
slaxemulator@0
|
86 }
|
slaxemulator@0
|
87
|
slaxemulator@0
|
88 lvmsetup()
|
slaxemulator@0
|
89 {
|
slaxemulator@23
|
90 grep -q lvmroot= /proc/cmdline || return 1
|
slaxemulator@0
|
91 modprobe dm-mod
|
slaxemulator@0
|
92 vgscan --ignorelockingfailure
|
slaxemulator@0
|
93 vgchange -ay --ignorelockingfailure
|
slaxemulator@0
|
94 root="/dev/mapper/$(sed 's/.*lvmroot=\([^ ]*\).*/\1/' < /proc/cmdline)"
|
slaxemulator@0
|
95 return 0
|
slaxemulator@0
|
96 }
|
slaxemulator@0
|
97
|
slaxemulator@0
|
98 load_raid()
|
slaxemulator@0
|
99 {
|
slaxemulator@0
|
100 while read line; do
|
slaxemulator@0
|
101 case "$line" in
|
slaxemulator@0
|
102 *raid10*) modprobe raid10 ;;
|
slaxemulator@0
|
103 *raid0*) modprobe raid0 ;;
|
slaxemulator@0
|
104 *raid1*) modprobe raid1 ;;
|
slaxemulator@0
|
105 *raid[456]*) modprobe raid456 ;;
|
slaxemulator@0
|
106 esac
|
slaxemulator@0
|
107 done
|
slaxemulator@0
|
108 }
|
slaxemulator@0
|
109
|
slaxemulator@166
|
110 if [ "$1" != "logged" ]; then
|
slaxemulator@166
|
111 mount -t devpts devpts /dev/pts
|
slaxemulator@166
|
112 mount -t tmpfs tmpfs /dev/shm
|
slaxemulator@166
|
113 script -qc '/init logged' /dev/shm/boot.log
|
slaxemulator@166
|
114 . /tmp/init
|
slaxemulator@166
|
115 else
|
slaxemulator@166
|
116 mountpoint -q /proc || mount -t proc proc /proc -o nosuid,noexec,nodev
|
slaxemulator@166
|
117 mountpoint -q /sys || mount -t sysfs sys /sys -o nosuid,noexec,nodev
|
slaxemulator@166
|
118 mountpoint -q /run || mount -t tmpfs run /run -o mode=0755,nosuid,nodev
|
slaxemulator@166
|
119 mountpoint -q /dev || mount -t devtmpfs dev /dev -o mode=0755,nosuid
|
slaxemulator@166
|
120
|
slaxemulator@0
|
121 if grep -q dmraid= /proc/cmdline; then
|
slaxemulator@0
|
122 root="$(sed 's/.*dmraid=\([^ ]*\).*/\1/' < /proc/cmdline)"
|
slaxemulator@166
|
123 echo -n "Switching / to dmraid $root..."
|
slaxemulator@0
|
124 dmraid -s | grep ^type | awk '{ print $3 }' | load_raid
|
slaxemulator@0
|
125 case "$root" in
|
slaxemulator@0
|
126 /dev/*);;
|
slaxemulator@0
|
127 *) root=/dev/mapper/$(dmraid -s|grep ^name|awk '{print $3}')p${root#p};;
|
slaxemulator@0
|
128 esac
|
slaxemulator@0
|
129 dmraid -ay
|
slaxemulator@0
|
130 lvmsetup
|
slaxemulator@0
|
131 mount_mapper
|
slaxemulator@0
|
132 fi
|
slaxemulator@0
|
133 if grep -q softraid= /proc/cmdline; then
|
slaxemulator@0
|
134 root="$(sed 's/.*softraid=\([^ ]*\).*/\1/' < /proc/cmdline)"
|
slaxemulator@166
|
135 echo -n "Switching / to softraid $root..."
|
slaxemulator@0
|
136 mdadm --examine --scan --config=partitions > /etc/mdadm.conf
|
slaxemulator@22
|
137 grep -qs " $root " /etc/mdadm.conf ||
|
slaxemulator@22
|
138 root=$(awk '/dev.md/ { print $2; exit }' < /etc/mdadm.conf)
|
slaxemulator@0
|
139 grep level=raid /etc/mdadm.conf | load_raid
|
slaxemulator@132
|
140 for i in 1 2 3 4 5 6 7 8 9; do
|
slaxemulator@132
|
141 sleep $i
|
slaxemulator@132
|
142 mdadm --assemble --scan
|
slaxemulator@132
|
143 grep -qs ': active' /proc/mdstat && break
|
slaxemulator@132
|
144 done
|
slaxemulator@0
|
145 lvmsetup
|
slaxemulator@0
|
146 mount_mapper /etc/mdadm.conf
|
slaxemulator@0
|
147 fi
|
slaxemulator@0
|
148 if lvmsetup; then
|
slaxemulator@166
|
149 echo -n "Switching / to lvm $root..."
|
slaxemulator@0
|
150 mount_mapper
|
slaxemulator@0
|
151 fi
|
slaxemulator@22
|
152 if grep -q mount= /proc/cmdline; then
|
slaxemulator@22
|
153 root="$(sed 's/.*mount=\([^ ]*\).*/\1/' < /proc/cmdline)"
|
slaxemulator@22
|
154 dev=$(blkid | grep $root | sed 's/:.*//;q')
|
slaxemulator@166
|
155 echo "Mounting $dev ($root) ..."
|
slaxemulator@0
|
156 if ! mount $dev /mnt; then
|
slaxemulator@0
|
157 if echo $dev | grep -q "/dev/sd"; then
|
slaxemulator@0
|
158 delay=`cat /sys/module/usb_storage/parameters/delay_use`
|
slaxemulator@0
|
159 delay=$((1+$delay))
|
slaxemulator@0
|
160 echo -n "sleep for $delay seconds..."
|
slaxemulator@0
|
161 sleep $delay
|
slaxemulator@0
|
162 fi
|
slaxemulator@22
|
163 mount $dev /mnt
|
slaxemulator@0
|
164 fi
|
slaxemulator@132
|
165 grep -q posixovl /proc/cmdline && mount.posixovl /mnt
|
slaxemulator@22
|
166 fi
|
slaxemulator@22
|
167 if grep -q loopfs= /proc/cmdline; then
|
slaxemulator@22
|
168 loopfs="$(sed 's/.*loopfs=\([^ ]*\).*/\1/' < /proc/cmdline)"
|
slaxemulator@166
|
169 echo -n "Into loop file $loopfs..."
|
slaxemulator@22
|
170 losetup /dev/loop0 /mnt/$loopfs
|
slaxemulator@22
|
171 mount /dev/loop0 /mnt 2> /dev/null
|
slaxemulator@0
|
172 fi
|
slaxemulator@132
|
173 if grep -q bindfs= /proc/cmdline; then
|
slaxemulator@132
|
174 bind="$(sed 's/.*bindfs=\([^ ]*\).*/\1/' < /proc/cmdline)"
|
slaxemulator@166
|
175 echo "Binding ${bind/,/ to } ..."
|
slaxemulator@132
|
176 mount --bind /mnt/${bind%,*} /mnt/${bind%,*}/${bind#*,}
|
slaxemulator@132
|
177 fi
|
slaxemulator@0
|
178 grep -q cryptoroot= /proc/cmdline && try_init
|
slaxemulator@22
|
179 umount /sys
|
slaxemulator@22
|
180 if grep -q subroot= /proc/cmdline; then
|
slaxemulator@22
|
181 subroot="/$(sed 's/.*subroot=\([^ ]*\).*/\1/' < /proc/cmdline)" &&
|
slaxemulator@166
|
182 echo -n "Chrooting to $subroot..."
|
slaxemulator@166
|
183 mount --move /dev/pts /mnt$subroot/dev/pts
|
slaxemulator@166
|
184 shm=$subroot/dev/shm
|
slaxemulator@166
|
185 mount --move /dev/shm /mnt$shm &&
|
slaxemulator@166
|
186 if mv /usr/share/boot/busybox-static /mnt$shm 2> /dev/null; then
|
slaxemulator@166
|
187 success <<EOT
|
slaxemulator@166
|
188 exec /sbin/switch_root mnt $shm/busybox-static chroot $subroot /sbin/init
|
slaxemulator@166
|
189 EOT
|
slaxemulator@22
|
190 else
|
slaxemulator@166
|
191 success <<EOT
|
slaxemulator@166
|
192 exec chroot /mnt$subroot /sbin/init
|
slaxemulator@166
|
193 EOT
|
slaxemulator@22
|
194 fi
|
slaxemulator@13
|
195 fi
|
slaxemulator@166
|
196 echo -n "Switching / to tmpfs"
|
slaxemulator@0
|
197 size="$(grep rootfssize= < /proc/cmdline | \
|
slaxemulator@0
|
198 sed 's/.*rootfssize=\([0-9]*[kmg%]\).*/-o size=\1/')"
|
slaxemulator@0
|
199 free=$(busybox free | busybox awk '/Mem:/ { print int(($4*100)/$3) }')
|
slaxemulator@0
|
200 umount /proc
|
slaxemulator@0
|
201 [ -n "$size" ] || size="-o size=90%"
|
slaxemulator@166
|
202 echo "exec /sbin/init" > /tmp/init
|
slaxemulator@166
|
203 if [ $free -lt 50 ] || ! mount -t tmpfs $size tmpfs /mnt; then
|
slaxemulator@0
|
204 echo -e "\\033[70G[ \\033[1;33mSkipped\\033[0;39m]"
|
slaxemulator@166
|
205 exit
|
slaxemulator@0
|
206 fi
|
slaxemulator@166
|
207 for i in $(ls -ar /); do
|
slaxemulator@0
|
208 case "$i" in
|
slaxemulator@0
|
209 .|..) ;;
|
slaxemulator@0
|
210 mnt) mkdir /mnt/mnt;;
|
slaxemulator@0
|
211 *) if ! cp -a /$i /mnt 2> /dev/null; then
|
slaxemulator@0
|
212 failed
|
slaxemulator@0
|
213 umount /mnt
|
slaxemulator@0
|
214 exec /sbin/init
|
slaxemulator@0
|
215 fi;;
|
slaxemulator@0
|
216 esac
|
slaxemulator@0
|
217 done
|
slaxemulator@0
|
218 launch_init_modular
|
slaxemulator@166
|
219 fi
|