# HG changeset patch # User Pascal Bellard # Date 1327566271 -3600 # Node ID b4cefa566cf72883f8b2c6e7688df8f744a609e0 # Parent a6d3a3585e9100482533220a64dcf6f9e5593286 init: fix subdir case diff -r a6d3a3585e91 -r b4cefa566cf7 init --- a/init Tue Jan 24 11:31:05 2012 +0100 +++ b/init Thu Jan 26 09:24:31 2012 +0100 @@ -1,15 +1,20 @@ #!/bin/sh +success() +{ + cat > /dev/shm/init + [ -d /proc/sys ] && umount /proc + echo -e "\\033[70G[ \\033[1;32mOK\\033[0;39m ]" + exit +} + launch_init() { - [ -d /proc/sys ] && umount /proc - echo -e "\\033[70G[ \\033[1;32mOK\\033[0;39m ]" - cat > /dev/shm/init < /etc/mdadm.conf grep -qs " $root " /etc/mdadm.conf || root=$(awk '/dev.md/ { print $2; exit }' < /etc/mdadm.conf) @@ -114,13 +118,13 @@ mount_mapper /etc/mdadm.conf fi if lvmsetup; then - echo -n "lvm $root..." + echo -n "Switching / to lvm $root..." mount_mapper fi if grep -q mount= /proc/cmdline; then root="$(sed 's/.*mount=\([^ ]*\).*/\1/' < /proc/cmdline)" dev=$(blkid | grep $root | sed 's/:.*//;q') - echo -n "Mounting $dev ($root) ..." + echo "Mounting $dev ($root) ..." if ! mount $dev /mnt; then if echo $dev | grep -q "/dev/sd"; then delay=`cat /sys/module/usb_storage/parameters/delay_use` @@ -130,45 +134,55 @@ fi mount $dev /mnt fi - grep -q posixovl /proc/cmdline && mount.posixovl /mnt + grep -q posixovl /proc/cmdline && + echo "Mounting posixovl.." && + mount.posixovl /mnt fi if grep -q loopfs= /proc/cmdline; then loopfs="$(sed 's/.*loopfs=\([^ ]*\).*/\1/' < /proc/cmdline)" - echo -n "loop $loopfs..." + echo "Into loop file $loopfs..." losetup /dev/loop0 /mnt/$loopfs mount /dev/loop0 /mnt 2> /dev/null fi if grep -q bindfs= /proc/cmdline; then bind="$(sed 's/.*bindfs=\([^ ]*\).*/\1/' < /proc/cmdline)" + echo "Binding ${bind/,/ to } ..." mount --bind /mnt/${bind%,*} /mnt/${bind%,*}/${bind#*,} fi grep -q cryptoroot= /proc/cmdline && try_init umount /sys if grep -q subroot= /proc/cmdline; then subroot="/$(sed 's/.*subroot=\([^ ]*\).*/\1/' < /proc/cmdline)" && - if [ -s /usr/share/boot/busybox-static ]; then - mv /usr/share/boot/busybox-static . - /busybox-static rm -rf /etc /lib /*bin /usr /var - echo "exec /busybox-static chroot /mnt$subroot /sbin/init" > /dev/shm/init + echo -n "Chrooting to $subroot..." + mount --move /dev/pts /mnt$subroot/dev/pts + shm=$subroot/dev/shm + mount --move /dev/shm /mnt$shm + if mv /usr/share/boot/busybox-static /mnt$shm 2> /dev/null; then + success < /dev/shm/init + success < /dev/shm/init -if [ $free -lt 100 ] || ! mount -t tmpfs $size tmpfs /mnt; then +if [ $free -lt 50 ] || ! mount -t tmpfs $size tmpfs /mnt; then echo -e "\\033[70G[ \\033[1;33mSkipped\\033[0;39m]" exit fi -for i in $(ls -a /); do +for i in $(ls -ar /); do case "$i" in .|..) ;; mnt) mkdir /mnt/mnt;; + usr|var) mv /$i /mnt ;; *) if ! cp -a /$i /mnt 2> /dev/null; then failed umount /mnt