alicelinux

A lightweight musl + clang/llvm + libressl + busybox distro
git clone https://codeberg.org/emmett1/alicelinux
Log | Files | Refs | README | LICENSE

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