slitaz-modular rev 166

initramfs: Updated init and linuxrc.
author Christopher Rogers <slaxemulator@gmail.com>
date Fri Feb 24 18:58:07 2012 -0500 (2012-02-24)
parents 666c76a20586
children 3528c0778d4b
files initramfs/init initramfs/linuxrc
line diff
     1.1 --- a/initramfs/init	Tue Jan 24 05:06:38 2012 -0500
     1.2 +++ b/initramfs/init	Fri Feb 24 18:58:07 2012 -0500
     1.3 @@ -1,35 +1,51 @@
     1.4  #!/bin/sh
     1.5  
     1.6 +success()
     1.7 +{
     1.8 +	cat > /tmp/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 +	mount --move /dev/pts /mnt/dev/pts
    1.17 +	mount --move /dev/shm /mnt/dev/shm
    1.18 +	success <<EOT
    1.19 +exec /sbin/switch_root mnt /sbin/init
    1.20 +EOT
    1.21 +}
    1.22 +
    1.23 +failed()
    1.24 +{
    1.25  	[ -d /proc/sys ] && umount /proc
    1.26 -	echo -e "\\033[70G[ \\033[1;32mOK\\033[0;39m ]"
    1.27 -	exec /sbin/switch_root mnt /sbin/init
    1.28 +	echo -e "\\033[70G[ \\033[1;31mFailed\\033[0;39m ]"
    1.29  }
    1.30  
    1.31  launch_init_modular()
    1.32  {
    1.33 -	[ -d /proc/sys ] && umount /proc
    1.34  	echo -e "\\033[70G[ \\033[1;32mOK\\033[0;39m ]"
    1.35  	[ -d /mnt/initramfs ] || mkdir -p /mnt/initramfs
    1.36  	SYS_DIR="dev bin etc boot lib sbin home root run usr var"
    1.37  	for dir in $SYS_DIR; do
    1.38  		cp -a /$dir /mnt/initramfs
    1.39  	done
    1.40 -	[ -f /mnt/dev/sdc ] || mknod /mnt/dev/sdc b 8 32
    1.41 -	[ -f /mnt/dev/sdc1 ] || mknod /mnt/dev/sdc1 b 8 33
    1.42  	MK_DIR="sys proc tmp media mnt"
    1.43  	for dir1 in $MK_DIR; do
    1.44  		mkdir -p /mnt/initramfs/$dir1
    1.45  	done
    1.46 -	exec /sbin/switch_root mnt /linuxrc
    1.47 -}
    1.48 -
    1.49 -failed()
    1.50 -{
    1.51 -	[ -d /proc/sys ] && umount /proc
    1.52 -	echo -e "\\033[70G[ \\033[1;31mFailed\\033[0;39m ]"
    1.53 -	conspy -d 1 > /init.log
    1.54 +	mount --move /dev /mnt/dev
    1.55 +	[ -f /mnt/dev/sdc ] || mknod /mnt/dev/sdc b 8 32
    1.56 +	[ -f /mnt/dev/sdc1 ] || mknod /mnt/dev/sdc1 b 8 33
    1.57 +	mount --move /run /mnt/run
    1.58 +	mkdir -p /mnt/dev/pts
    1.59 +	mount --move /dev/pts /mnt/dev/pts
    1.60 +	mkdir -p /mnt/dev/shm
    1.61 +	mount --move /dev/shm /mnt/dev/shm
    1.62 +	success <<EOT
    1.63 +exec /sbin/switch_root mnt /linuxrc
    1.64 +EOT
    1.65  }
    1.66  
    1.67  try_init()
    1.68 @@ -91,12 +107,20 @@
    1.69  done
    1.70  }
    1.71  
    1.72 -mount -t proc proc /proc
    1.73 -mount -t sysfs sysfs /sys
    1.74 -echo -n "Switching / to "
    1.75 +if [ "$1" != "logged" ]; then
    1.76 +	mount -t devpts devpts /dev/pts
    1.77 +	mount -t tmpfs tmpfs /dev/shm
    1.78 +	script -qc '/init logged' /dev/shm/boot.log
    1.79 +	. /tmp/init
    1.80 +else
    1.81 +mountpoint -q /proc || mount -t proc proc /proc -o nosuid,noexec,nodev
    1.82 +mountpoint -q /sys  || mount -t sysfs sys /sys -o nosuid,noexec,nodev
    1.83 +mountpoint -q /run  || mount -t tmpfs run /run -o mode=0755,nosuid,nodev
    1.84 +mountpoint -q /dev  || mount -t devtmpfs dev /dev -o mode=0755,nosuid
    1.85 +
    1.86  if grep -q dmraid= /proc/cmdline; then
    1.87  	root="$(sed 's/.*dmraid=\([^ ]*\).*/\1/' < /proc/cmdline)"
    1.88 -	echo -n "dmraid $root..."
    1.89 +	echo -n "Switching / to dmraid $root..."
    1.90  	dmraid -s | grep ^type | awk '{ print $3 }' | load_raid
    1.91  	case "$root" in
    1.92  	/dev/*);;
    1.93 @@ -108,7 +132,7 @@
    1.94  fi
    1.95  if grep -q softraid= /proc/cmdline; then
    1.96  	root="$(sed 's/.*softraid=\([^ ]*\).*/\1/' < /proc/cmdline)"
    1.97 -	echo -n "softraid $root..."
    1.98 +	echo -n "Switching / to softraid $root..."
    1.99  	mdadm --examine --scan --config=partitions > /etc/mdadm.conf
   1.100  	grep -qs " $root " /etc/mdadm.conf ||
   1.101  		root=$(awk '/dev.md/ { print $2; exit }' < /etc/mdadm.conf)
   1.102 @@ -122,13 +146,13 @@
   1.103  	mount_mapper /etc/mdadm.conf
   1.104  fi
   1.105  if lvmsetup; then
   1.106 -	echo -n "lvm $root..."
   1.107 +	echo -n "Switching / to lvm $root..."
   1.108  	mount_mapper
   1.109  fi
   1.110  if grep -q mount= /proc/cmdline; then
   1.111  	root="$(sed 's/.*mount=\([^ ]*\).*/\1/' < /proc/cmdline)"
   1.112  	dev=$(blkid | grep $root | sed 's/:.*//;q')
   1.113 -	echo -n "Mounting $dev ($root) ..."
   1.114 +	echo "Mounting $dev ($root) ..."
   1.115  	if ! mount $dev /mnt; then
   1.116  		if echo $dev | grep -q "/dev/sd"; then
   1.117  			delay=`cat /sys/module/usb_storage/parameters/delay_use`
   1.118 @@ -142,37 +166,45 @@
   1.119  fi
   1.120  if grep -q loopfs= /proc/cmdline; then
   1.121  	loopfs="$(sed 's/.*loopfs=\([^ ]*\).*/\1/' < /proc/cmdline)"
   1.122 -	echo -n "loop $loopfs..."
   1.123 +	echo -n "Into loop file $loopfs..."
   1.124  	losetup /dev/loop0 /mnt/$loopfs
   1.125  	mount /dev/loop0 /mnt 2> /dev/null
   1.126  fi
   1.127  if grep -q bindfs= /proc/cmdline; then
   1.128  	bind="$(sed 's/.*bindfs=\([^ ]*\).*/\1/' < /proc/cmdline)"
   1.129 +	echo "Binding ${bind/,/ to } ..."
   1.130  	mount --bind /mnt/${bind%,*} /mnt/${bind%,*}/${bind#*,}
   1.131  fi
   1.132  grep -q cryptoroot= /proc/cmdline && try_init
   1.133  umount /sys
   1.134  if grep -q subroot= /proc/cmdline; then
   1.135  	subroot="/$(sed 's/.*subroot=\([^ ]*\).*/\1/' < /proc/cmdline)" &&
   1.136 -	if [ -s /usr/share/boot/busybox-static ]; then
   1.137 -		mv /usr/share/boot/busybox-static .
   1.138 -		/busybox-static rm -rf /etc /lib /*bin /usr /var
   1.139 -		exec /busybox-static chroot /mnt$subroot /sbin/init
   1.140 +	echo -n "Chrooting to $subroot..."
   1.141 +	mount --move /dev/pts /mnt$subroot/dev/pts
   1.142 +	shm=$subroot/dev/shm
   1.143 +	mount --move /dev/shm /mnt$shm &&
   1.144 +	if mv /usr/share/boot/busybox-static /mnt$shm 2> /dev/null; then
   1.145 +		success <<EOT
   1.146 +exec /sbin/switch_root mnt $shm/busybox-static chroot $subroot /sbin/init
   1.147 +EOT
   1.148  	else
   1.149 -		exec chroot /mnt$subroot /sbin/init
   1.150 +		success <<EOT
   1.151 +exec chroot /mnt$subroot /sbin/init
   1.152 +EOT
   1.153  	fi
   1.154  fi
   1.155 -echo -n "tmpfs..."
   1.156 +echo -n "Switching / to tmpfs"
   1.157  size="$(grep rootfssize= < /proc/cmdline | \
   1.158  	sed 's/.*rootfssize=\([0-9]*[kmg%]\).*/-o size=\1/')"
   1.159  free=$(busybox free | busybox awk '/Mem:/ { print int(($4*100)/$3) }')
   1.160  umount /proc
   1.161  [ -n "$size" ] || size="-o size=90%"
   1.162 -if [ $free -lt 100 ] || ! mount -t tmpfs $size tmpfs /mnt; then
   1.163 +echo "exec /sbin/init" > /tmp/init
   1.164 +if [ $free -lt 50 ] || ! mount -t tmpfs $size tmpfs /mnt; then
   1.165  	echo -e "\\033[70G[ \\033[1;33mSkipped\\033[0;39m]"
   1.166 -	exec /sbin/init
   1.167 +	exit
   1.168  fi
   1.169 -for i in $(ls -a /); do
   1.170 +for i in $(ls -ar /); do
   1.171  	case "$i" in
   1.172  	.|..)	;;
   1.173  	mnt)	mkdir /mnt/mnt;;
   1.174 @@ -184,3 +216,4 @@
   1.175  	esac
   1.176  done
   1.177  launch_init_modular
   1.178 +fi
     2.1 --- a/initramfs/linuxrc	Tue Jan 24 05:06:38 2012 -0500
     2.2 +++ b/initramfs/linuxrc	Fri Feb 24 18:58:07 2012 -0500
     2.3 @@ -4,8 +4,8 @@
     2.4  
     2.5  export PATH=.:/:/usr/sbin:/usr/bin:/sbin:/bin
     2.6  
     2.7 -mount -n -t proc proc /proc
     2.8 -mount -n -t sysfs sysfs /sys
     2.9 +mount -t proc proc /proc -o nosuid,noexec,nodev
    2.10 +mount -t sysfs sys /sys -o nosuid,noexec,nodev
    2.11  #mount -n -o remount,rw /         # for the case we forgot rw boot option
    2.12  ln -sf /proc/mounts /etc/mtab    # this allows us to use umount -a
    2.13  
    2.14 @@ -320,8 +320,12 @@
    2.15  #mount -n -o move /proc proc
    2.16  #mount -n -o move /sys sys
    2.17  fumount /sys
    2.18 +fumount /run
    2.19 +fumount /dev
    2.20  
    2.21  if [ ! -e /dev/console ]; then mknod /dev/console c 5 1; fi
    2.22 +if [ ! -d dev/shm ]; then mkdir -p dev/shm; fi
    2.23 +if [ ! -d dev/pts ]; then mkdir -p dev/pts; fi
    2.24  
    2.25  # find chroot and init
    2.26  if [ -x bin/chroot ]; then  CHROOT=bin/chroot; fi