slitaz-modular annotate initramfs/init @ rev 132

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