slitaz-modular view initramfs/init @ rev 22

Update init and linuxrc scripts.
author Christopher Rogers <slaxemulator@gmail.com>
date Wed Jan 19 02:54:34 2011 +0000 (2011-01-19)
parents d52e861c9970
children 3a30fa829e2a
line source
1 #!/bin/sh
3 launch_init()
4 {
5 umount /proc
6 echo -e "\\033[70G[ \\033[1;33mOK\\033[0;39m ]"
7 exec /sbin/switch_root mnt /sbin/init
8 }
10 launch_init_modular()
11 {
12 echo -e "\\033[70G[ \\033[1;33mOK\\033[0;39m ]"
13 [ -d /mnt/initramfs ] || mkdir -p /mnt/initramfs
14 SYS_DIR="dev bin etc boot lib sbin home root usr var"
15 for dir in $SYS_DIR; do
16 cp -a /$dir /mnt/initramfs
17 done
18 MK_DIR="sys proc tmp media mnt"
19 for dir1 in $MK_DIR; do
20 mkdir -p /mnt/initramfs/$dir
21 done
22 exec /sbin/switch_root mnt /linuxrc
23 }
25 failed()
26 {
27 umount /proc
28 echo -e "\\033[70G[ \\033[1;31mFailed\\033[0;39m ]"
29 }
31 try_init()
32 {
33 if [ ! -d /mnt/etc ] && grep -q cryptoroot= /proc/cmdline; then
34 modprobe dm-mod
35 modprobe dm-crypt
36 modprobe aes-i586
37 root="$(sed 's/.*cryptoroot=\([^ ]*\).*/\1/' < /proc/cmdline)"
38 dev=${root#/dev/}
39 dmlabel=crypto-$dev
40 if cryptsetup isLuks $root 2> /dev/null; then
41 cryptsetup luksOpen $root $dmlabel
42 else
43 read -s -t 60 -p "Pass phrase : " passphrase
44 key=$(echo $passphrase | hashalot -x -n 32 sha512)
45 blocks=$(cat $(find /sys/block | grep /$dev/size))
46 echo 0 $blocks crypt aes-plain $key 0 $root 0 | \
47 dmsetup create $dmlabel
48 fi
49 mount /dev/mapper/$dmlabel /mnt
50 fi
51 if [ -d /mnt/etc ]; then
52 umount /sys
53 [ -n "$1" ] && for i in $@ ; do
54 cp -a $i /mnt$(dirname $i)
55 done
56 mount /mnt -o remount,ro
57 launch_init
58 fi
59 failed
60 }
62 mount_mapper()
63 {
64 mount $root /mnt
65 try_init /dev/mapper $@
66 }
68 lvmsetup()
69 {
70 if grep -q lvmroot= /proc/cmdline; then
71 modprobe dm-mod
72 vgscan --ignorelockingfailure
73 vgchange -ay --ignorelockingfailure
74 root="/dev/mapper/$(sed 's/.*lvmroot=\([^ ]*\).*/\1/' < /proc/cmdline)"
75 return 0
76 fi
77 return 1
78 }
80 load_raid()
81 {
82 while read line; do
83 case "$line" in
84 *raid10*) modprobe raid10 ;;
85 *raid0*) modprobe raid0 ;;
86 *raid1*) modprobe raid1 ;;
87 *raid[456]*) modprobe raid456 ;;
88 esac
89 done
90 }
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 mdadm --assemble --scan
114 lvmsetup
115 mount_mapper /etc/mdadm.conf
116 fi
117 if lvmsetup; then
118 echo -n "Switching / to lvm $root..."
119 mount_mapper
120 fi
121 if grep -q mount= /proc/cmdline; then
122 root="$(sed 's/.*mount=\([^ ]*\).*/\1/' < /proc/cmdline)"
123 dev=$(blkid | grep $root | sed 's/:.*//;q')
124 echo -n "Mounting $dev ($root) ..."
125 if ! mount $dev /mnt; then
126 if echo $dev | grep -q "/dev/sd"; then
127 delay=`cat /sys/module/usb_storage/parameters/delay_use`
128 delay=$((1+$delay))
129 echo -n "sleep for $delay seconds..."
130 sleep $delay
131 fi
132 mount $dev /mnt
133 fi
134 fi
135 if grep -q loopfs= /proc/cmdline; then
136 loopfs="$(sed 's/.*loopfs=\([^ ]*\).*/\1/' < /proc/cmdline)"
137 echo -n "Switching / to loop $loopfs..."
138 losetup /dev/loop0 /mnt/$loopfs
139 mount /dev/loop0 /mnt 2> /dev/null
140 fi
141 grep -q cryptoroot= /proc/cmdline && try_init
142 umount /sys
143 if grep -q subroot= /proc/cmdline; then
144 subroot="/$(sed 's/.*subroot=\([^ ]*\).*/\1/' < /proc/cmdline)" &&
145 if [ -s /usr/share/boot/busybox-static ]; then
146 mv /usr/share/boot/busybox-static .
147 /busybox-static rm -rf /etc /lib /*bin /usr /var
148 exec /busybox-static chroot /mnt$subroot /sbin/init
149 else
150 exec chroot /mnt$subroot /sbin/init
151 fi
152 fi
153 echo -n "Switching / to tmpfs..."
154 size="$(grep rootfssize= < /proc/cmdline | \
155 sed 's/.*rootfssize=\([0-9]*[kmg%]\).*/-o size=\1/')"
156 free=$(busybox free | busybox awk '/Mem:/ { print int(($4*100)/$3) }')
157 umount /proc
158 [ -n "$size" ] || size="-o size=90%"
159 if [ $free -lt 100 ] || ! mount -t tmpfs $size tmpfs /mnt; then
160 echo -e "\\033[70G[ \\033[1;33mSkipped\\033[0;39m]"
161 exec /sbin/init
162 fi
163 for i in $(ls -a /); do
164 case "$i" in
165 .|..) ;;
166 mnt) mkdir /mnt/mnt;;
167 *) if ! cp -a /$i /mnt 2> /dev/null; then
168 failed
169 umount /mnt
170 exec /sbin/init
171 fi;;
172 esac
173 done
174 launch_init_modular