wok-tiny diff busybox/stuff/init @ rev 176
busybox: fix modules order
author | Pascal Bellard <pascal.bellard@slitaz.org> |
---|---|
date | Wed Jul 14 19:16:39 2021 +0000 (2021-07-14) |
parents | |
children |
line diff
1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/busybox/stuff/init Wed Jul 14 19:16:39 2021 +0000 1.3 @@ -0,0 +1,159 @@ 1.4 +#!/bin/sh 1.5 + 1.6 +launch_init() 1.7 +{ 1.8 + umount /proc 1.9 + echo -e "\\033[70G[ \\033[1;33mOK\\033[0;39m ]" 1.10 + exec /sbin/switch_root mnt /sbin/init 1.11 +} 1.12 + 1.13 +failed() 1.14 +{ 1.15 + umount /proc 1.16 + echo -e "\\033[70G[ \\033[1;31mFailed\\033[0;39m ]" 1.17 + conspy -d 1 > /init.log 1.18 +} 1.19 + 1.20 +try_init() 1.21 +{ 1.22 + if [ ! -d /mnt/etc ] && grep -q cryptoroot= /proc/cmdline; then 1.23 + modprobe dm-mod 1.24 + modprobe dm-crypt 1.25 + modprobe aes-i586 1.26 + root="$(sed 's/.*cryptoroot=\([^ ]*\).*/\1/' < /proc/cmdline)" 1.27 + dev=${root#/dev/} 1.28 + dmlabel=crypto-$dev 1.29 + if cryptsetup isLuks $root 2> /dev/null; then 1.30 + cryptsetup luksOpen $root $dmlabel 1.31 + else 1.32 + read -s -t 60 -p "Pass phrase : " passphrase 1.33 + key=$(echo $passphrase | hashalot -x -n 32 sha512) 1.34 + blocks=$(cat $(find /sys/block | grep /$dev/size)) 1.35 + echo 0 $blocks crypt aes-plain $key 0 $root 0 | \ 1.36 + dmsetup create $dmlabel 1.37 + fi 1.38 + mount /dev/mapper/$dmlabel /mnt 1.39 + fi 1.40 + if [ -d /mnt/etc ]; then 1.41 + umount /sys 1.42 + [ -n "$1" ] && for i in $@ ; do 1.43 + cp -a $i /mnt$(dirname $i) 1.44 + done 1.45 + mount /mnt -o remount,ro 1.46 + launch_init 1.47 + fi 1.48 + failed 1.49 +} 1.50 + 1.51 +mount_mapper() 1.52 +{ 1.53 + mount $root /mnt 1.54 + try_init /dev/mapper $@ 1.55 +} 1.56 + 1.57 +lvmsetup() 1.58 +{ 1.59 + grep -q lvmroot= /proc/cmdline || return 1 1.60 + modprobe dm-mod 1.61 + vgscan --ignorelockingfailure 1.62 + vgchange -ay --ignorelockingfailure 1.63 + root="/dev/mapper/$(sed 's/.*lvmroot=\([^ ]*\).*/\1/' < /proc/cmdline)" 1.64 + return 0 1.65 +} 1.66 + 1.67 +load_raid() 1.68 +{ 1.69 +while read line; do 1.70 + case "$line" in 1.71 + *raid10*) modprobe raid10 ;; 1.72 + *raid0*) modprobe raid0 ;; 1.73 + *raid1*) modprobe raid1 ;; 1.74 + *raid[456]*) modprobe raid456 ;; 1.75 + esac 1.76 +done 1.77 +} 1.78 + 1.79 +mount -t proc proc /proc 1.80 +mount -t sysfs sysfs /sys 1.81 +if grep -q dmraid= /proc/cmdline; then 1.82 + root="$(sed 's/.*dmraid=\([^ ]*\).*/\1/' < /proc/cmdline)" 1.83 + echo -n "Switching / to dmraid $root..." 1.84 + dmraid -s | grep ^type | awk '{ print $3 }' | load_raid 1.85 + case "$root" in 1.86 + /dev/*);; 1.87 + *) root=/dev/mapper/$(dmraid -s|grep ^name|awk '{print $3}')p${root#p};; 1.88 + esac 1.89 + dmraid -ay 1.90 + lvmsetup 1.91 + mount_mapper 1.92 +fi 1.93 +if grep -q softraid= /proc/cmdline; then 1.94 + root="$(sed 's/.*softraid=\([^ ]*\).*/\1/' < /proc/cmdline)" 1.95 + echo -n "Switching / to softraid $root..." 1.96 + mdadm --examine --scan --config=partitions > /etc/mdadm.conf 1.97 + grep -qs " $root " /etc/mdadm.conf || 1.98 + root=$(awk '/dev.md/ { print $2; exit }' < /etc/mdadm.conf) 1.99 + grep level=raid /etc/mdadm.conf | load_raid 1.100 + mdadm --assemble --scan 1.101 + lvmsetup 1.102 + mount_mapper /etc/mdadm.conf 1.103 +fi 1.104 +if lvmsetup; then 1.105 + echo -n "Switching / to lvm $root..." 1.106 + mount_mapper 1.107 +fi 1.108 +if grep -q mount= /proc/cmdline; then 1.109 + root="$(sed 's/.*mount=\([^ ]*\).*/\1/' < /proc/cmdline)" 1.110 + dev=$(blkid | grep $root | sed 's/:.*//;q') 1.111 + echo -n "Mounting $dev ($root) ..." 1.112 + if ! mount $dev /mnt; then 1.113 + if echo $dev | grep -q "/dev/sd"; then 1.114 + delay=`cat /sys/module/usb_storage/parameters/delay_use` 1.115 + delay=$((1+$delay)) 1.116 + echo -n "sleep for $delay seconds..." 1.117 + sleep $delay 1.118 + fi 1.119 + mount $dev /mnt 1.120 + fi 1.121 +fi 1.122 +if grep -q loopfs= /proc/cmdline; then 1.123 + loopfs="$(sed 's/.*loopfs=\([^ ]*\).*/\1/' < /proc/cmdline)" 1.124 + echo -n "Switching / to loop $loopfs..." 1.125 + losetup /dev/loop0 /mnt/$loopfs 1.126 + mount /dev/loop0 /mnt 2> /dev/null 1.127 +fi 1.128 +grep -q cryptoroot= /proc/cmdline && try_init 1.129 +umount /sys 1.130 +if grep -q subroot= /proc/cmdline; then 1.131 + subroot="/$(sed 's/.*subroot=\([^ ]*\).*/\1/' < /proc/cmdline)" && 1.132 + if [ -s /usr/share/boot/busybox-static ]; then 1.133 + mv /usr/share/boot/busybox-static . 1.134 + /busybox-static rm -rf /etc /lib /*bin /usr /var 1.135 + exec /busybox-static chroot /mnt$subroot /sbin/init 1.136 + else 1.137 + exec chroot /mnt$subroot /sbin/init 1.138 + fi 1.139 +fi 1.140 +echo -n "Switching / to tmpfs..." 1.141 +size="$(grep rootfssize= < /proc/cmdline | \ 1.142 + sed 's/.*rootfssize=\([0-9]*[kmg%]\).*/-o size=\1/')" 1.143 +free=$(busybox free | busybox awk '/Mem:/ { print int(($4*100)/$3) }') 1.144 +umount /proc 1.145 +[ -n "$size" ] || size="-o size=90%" 1.146 +if [ $free -lt 100 ] || ! mount -t tmpfs $size tmpfs /mnt; then 1.147 + echo -e "\\033[70G[ \\033[1;33mSkipped\\033[0;39m]" 1.148 + umount /proc 1.149 + exec /sbin/init 1.150 +fi 1.151 +for i in $(ls -a /); do 1.152 + case "$i" in 1.153 + .|..) ;; 1.154 + mnt) mkdir /mnt/mnt;; 1.155 + *) if ! cp -a /$i /mnt 2> /dev/null; then 1.156 + failed 1.157 + umount /mnt 1.158 + exec /sbin/init 1.159 + fi;; 1.160 + esac 1.161 +done 1.162 +launch_init