init (2325B)
1 #!/bin/busybox sh 2 3 NEWROOT=/.newroot 4 INITRAMFS=/run/initramfs 5 MEDIA=$INITRAMFS/media 6 LOWER=$INITRAMFS/lower 7 UPPER=$INITRAMFS/upper 8 WORK=$INITRAMFS/work 9 SFSIMAGE=$MEDIA/boot/rootfs.sfs 10 11 /bin/busybox --install -s /bin 12 13 clear 14 15 mkdir -p /proc /sys /run /dev 16 mount -t proc proc /proc 17 mount -t sysfs sysfs /sys 18 mount -t tmpfs run /run 19 mount -t devtmpfs dev /dev 20 21 mkdir -p $LOWER $MEDIA $UPPER $WORK $NEWROOT 22 23 exec >/dev/console </dev/console 2>&1 24 25 PRINTK="`cat /proc/sys/kernel/printk`" 26 echo "0" > /proc/sys/kernel/printk 27 28 # mdev 29 mkdir -p /etc 30 echo '$MODALIAS=.* 0:0 660 @modprobe "$MODALIAS"' > /etc/mdev.conf 31 mdev -df & pid_mdev=$! 32 33 # load kernel modules, twice 34 find /sys -name 'modalias' -type f -exec cat '{}' + | sort -u | xargs modprobe -b -a >/dev/null 2>&1 35 find /sys -name 'modalias' -type f -exec cat '{}' + | sort -u | xargs modprobe -b -a >/dev/null 2>&1 36 37 # load kernel modules required for live iso 38 for m in loop cdrom isofs overlay squashfs usb-storage loop fuse exfat; do 39 modprobe $m >/dev/null 2>&1 40 done 41 42 echo "Please wait..." 43 44 # figure out media 45 if [ -f /proc/sys/dev/cdrom/info ]; then 46 CDROM=$(grep name /proc/sys/dev/cdrom/info | awk -F : '{print $2}' | awk '{print $1}') 47 fi 48 49 while [ "$wait" != 10 ]; do 50 BLOCK=$(grep -E '[vsh]d' /proc/partitions | awk '{print $4}') 51 for i in $CDROM $BLOCK; do 52 mount -v -r /dev/$i $MEDIA >/dev/null 2>&1 || continue 53 [ -f $MEDIA/boot/livemedia ] || { umount $MEDIA; continue; } 54 MEDIAFOUND=1 55 break 2 56 done 57 wait=$(( wait + 1 )) 58 sleep 1 59 done 60 61 if [ ! "$MEDIAFOUND" ]; then 62 echo "Media not found even after 10 seconds" 63 sh 64 echo "Cannot go further" 65 sleep 99999 66 exit 1 67 fi 68 69 # mount stuffs 70 loopdevice=$(losetup -f) 71 losetup -f $SFSIMAGE 72 mount -r $loopdevice $LOWER 73 mount -t overlay overlay -o lowerdir=$LOWER,upperdir=$UPPER,workdir=$WORK $NEWROOT 74 if [ -f $MEDIA/boot/rootfs.gz ]; then 75 tar -xzaf $MEDIA/boot/rootfs.gz -C $NEWROOT 76 fi 77 78 kill $pid_mdev 79 80 mount --move /sys $NEWROOT/sys 81 mount --move /proc $NEWROOT/proc 82 mount --move /dev $NEWROOT/dev 83 mount --move /run $NEWROOT/run 84 85 # execute live script if exist 86 if [ -f $NEWROOT/$MEDIA/boot/live_script.sh ]; then 87 chroot $NEWROOT sh $MEDIA/boot/live_script.sh 88 fi 89 90 # switch to newroot 91 clear 92 exec /bin/switch_root $NEWROOT /sbin/init 93 94 echo "This is the end of initramfs" 95 echo "Nothing further, here's the shell" 96 /bin/busybox sh