slitaz-modular annotate initramfs/init @ rev 13

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