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