slitaz-boot-scripts rev 278
init: fix subdir case
author | Pascal Bellard <pascal.bellard@slitaz.org> |
---|---|
date | Thu Jan 26 09:24:31 2012 +0100 (2012-01-26) |
parents | a6d3a3585e91 |
children | e5d3e6f80efd |
files | init |
line diff
1.1 --- a/init Tue Jan 24 11:31:05 2012 +0100 1.2 +++ b/init Thu Jan 26 09:24:31 2012 +0100 1.3 @@ -1,15 +1,20 @@ 1.4 #!/bin/sh 1.5 1.6 +success() 1.7 +{ 1.8 + cat > /dev/shm/init 1.9 + [ -d /proc/sys ] && umount /proc 1.10 + echo -e "\\033[70G[ \\033[1;32mOK\\033[0;39m ]" 1.11 + exit 1.12 +} 1.13 + 1.14 launch_init() 1.15 { 1.16 - [ -d /proc/sys ] && umount /proc 1.17 - echo -e "\\033[70G[ \\033[1;32mOK\\033[0;39m ]" 1.18 - cat > /dev/shm/init <<EOT 1.19 -mount --move /dev/pts /mnt/dev/pts 1.20 -mount --move /dev/shm /mnt/dev/shm 1.21 + mount --move /dev/pts /mnt/dev/pts 1.22 + mount --move /dev/shm /mnt/dev/shm 1.23 + success <<EOT 1.24 exec /sbin/switch_root mnt /sbin/init 1.25 EOT 1.26 - exit 1.27 } 1.28 1.29 failed() 1.30 @@ -85,10 +90,9 @@ 1.31 else 1.32 mount -t proc proc /proc 1.33 mount -t sysfs sysfs /sys 1.34 -echo -n "Switching / to " 1.35 if grep -q dmraid= /proc/cmdline; then 1.36 root="$(sed 's/.*dmraid=\([^ ]*\).*/\1/' < /proc/cmdline)" 1.37 - echo -n "dmraid $root..." 1.38 + echo -n "Switching / to dmraid $root..." 1.39 dmraid -s | grep ^type | awk '{ print $3 }' | load_raid 1.40 case "$root" in 1.41 /dev/*);; 1.42 @@ -100,7 +104,7 @@ 1.43 fi 1.44 if grep -q softraid= /proc/cmdline; then 1.45 root="$(sed 's/.*softraid=\([^ ]*\).*/\1/' < /proc/cmdline)" 1.46 - echo -n "softraid $root..." 1.47 + echo -n "Switching / to softraid $root..." 1.48 mdadm --examine --scan --config=partitions > /etc/mdadm.conf 1.49 grep -qs " $root " /etc/mdadm.conf || 1.50 root=$(awk '/dev.md/ { print $2; exit }' < /etc/mdadm.conf) 1.51 @@ -114,13 +118,13 @@ 1.52 mount_mapper /etc/mdadm.conf 1.53 fi 1.54 if lvmsetup; then 1.55 - echo -n "lvm $root..." 1.56 + echo -n "Switching / to lvm $root..." 1.57 mount_mapper 1.58 fi 1.59 if grep -q mount= /proc/cmdline; then 1.60 root="$(sed 's/.*mount=\([^ ]*\).*/\1/' < /proc/cmdline)" 1.61 dev=$(blkid | grep $root | sed 's/:.*//;q') 1.62 - echo -n "Mounting $dev ($root) ..." 1.63 + echo "Mounting $dev ($root) ..." 1.64 if ! mount $dev /mnt; then 1.65 if echo $dev | grep -q "/dev/sd"; then 1.66 delay=`cat /sys/module/usb_storage/parameters/delay_use` 1.67 @@ -130,45 +134,55 @@ 1.68 fi 1.69 mount $dev /mnt 1.70 fi 1.71 - grep -q posixovl /proc/cmdline && mount.posixovl /mnt 1.72 + grep -q posixovl /proc/cmdline && 1.73 + echo "Mounting posixovl.." && 1.74 + mount.posixovl /mnt 1.75 fi 1.76 if grep -q loopfs= /proc/cmdline; then 1.77 loopfs="$(sed 's/.*loopfs=\([^ ]*\).*/\1/' < /proc/cmdline)" 1.78 - echo -n "loop $loopfs..." 1.79 + echo "Into loop file $loopfs..." 1.80 losetup /dev/loop0 /mnt/$loopfs 1.81 mount /dev/loop0 /mnt 2> /dev/null 1.82 fi 1.83 if grep -q bindfs= /proc/cmdline; then 1.84 bind="$(sed 's/.*bindfs=\([^ ]*\).*/\1/' < /proc/cmdline)" 1.85 + echo "Binding ${bind/,/ to } ..." 1.86 mount --bind /mnt/${bind%,*} /mnt/${bind%,*}/${bind#*,} 1.87 fi 1.88 grep -q cryptoroot= /proc/cmdline && try_init 1.89 umount /sys 1.90 if grep -q subroot= /proc/cmdline; then 1.91 subroot="/$(sed 's/.*subroot=\([^ ]*\).*/\1/' < /proc/cmdline)" && 1.92 - if [ -s /usr/share/boot/busybox-static ]; then 1.93 - mv /usr/share/boot/busybox-static . 1.94 - /busybox-static rm -rf /etc /lib /*bin /usr /var 1.95 - echo "exec /busybox-static chroot /mnt$subroot /sbin/init" > /dev/shm/init 1.96 + echo -n "Chrooting to $subroot..." 1.97 + mount --move /dev/pts /mnt$subroot/dev/pts 1.98 + shm=$subroot/dev/shm 1.99 + mount --move /dev/shm /mnt$shm 1.100 + if mv /usr/share/boot/busybox-static /mnt$shm 2> /dev/null; then 1.101 + success <<EOT 1.102 +exec /sbin/switch_root mnt $shm/busybox-static chroot $subroot /sbin/init 1.103 +EOT 1.104 else 1.105 - echo "exec chroot /mnt$subroot /sbin/init" > /dev/shm/init 1.106 + success <<EOT 1.107 +exec chroot /mnt$subroot /sbin/init 1.108 +EOT 1.109 fi 1.110 fi 1.111 -echo -n "tmpfs..." 1.112 +echo -n "Switching / to tmpfs" 1.113 size="$(grep rootfssize= < /proc/cmdline | \ 1.114 sed 's/.*rootfssize=\([0-9]*[kmg%]\).*/-o size=\1/')" 1.115 free=$(busybox free | busybox awk '/Mem:/ { print int(($4*100)/$3) }') 1.116 umount /proc 1.117 [ -n "$size" ] || size="-o size=90%" 1.118 echo "exec /sbin/init" > /dev/shm/init 1.119 -if [ $free -lt 100 ] || ! mount -t tmpfs $size tmpfs /mnt; then 1.120 +if [ $free -lt 50 ] || ! mount -t tmpfs $size tmpfs /mnt; then 1.121 echo -e "\\033[70G[ \\033[1;33mSkipped\\033[0;39m]" 1.122 exit 1.123 fi 1.124 -for i in $(ls -a /); do 1.125 +for i in $(ls -ar /); do 1.126 case "$i" in 1.127 .|..) ;; 1.128 mnt) mkdir /mnt/mnt;; 1.129 + usr|var) mv /$i /mnt ;; 1.130 *) if ! cp -a /$i /mnt 2> /dev/null; then 1.131 failed 1.132 umount /mnt