slitaz-boot-scripts view init @ rev 311

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