#!/bin/sh mount -t proc proc /proc mount -t sysfs sysfs /sys sleep 1 /sbin/mdev -s hostname kobo ifconfig lo up echo 3 > /sys/class/graphics/fb0/rotate # Upgrading kernel if needed mount /dev/mmcblk0p1 /mnt KERNEL_FLASH=`cat /mnt/flags/KERNEL_FLASH` 2>/dev/null WILL_UPDATE=`cat /mnt/flags/WILL_UPDATE` 2>/dev/null DIAGS_BOOT=`cat /mnt/flags/DIAGS_BOOT` 2>/dev/null STARTX=`cat /mnt/flags/X11_START` 2>/dev/null if [ "$KERNEL_FLASH" == "true" ]; then cp /mnt/boot/uImage / sync echo "Flashing new kernel..." dd if=/uImage of=/dev/mmcblk0 bs=512 seek=2048 sync echo "false" > /mnt/flags/KERNEL_FLASH rm /mnt/boot/uImage echo "Done, rebooting..." reboot else umount /mnt evtest /dev/input/event0 > /tmp/input-log & EVTEST_PID=$! read -t 3 -n 1 -s -r -p "Hit any key to stop auto-boot... " KEY if [ "$KEY" == "" ]; then INPUT_LOG=`cat /tmp/input-log | grep value` export INPUT_LOG # Device should have been wiped and restored to a factory state # Checking if there is still a "noroot" flag in the unpartitioned space export ROOT_FLAG=`dd if=/dev/mmcblk0 bs=512 skip=79872 count=1 status=none | head -c6` if [ "$ROOT_FLAG" == "rooted" ]; then echo "Security policy not enforced; root access permitted." else mount /dev/mmcblk0p3 /mnt mount /dev/mmcblk0p1 /mnt/boot echo "WARNING: User violated security policy!" echo "Flashing a new kernel that does not allow root access..." mkdir -p /recoveryfs mount /dev/mmcblk0p2 /recoveryfs dd if=/recoveryfs/opt/recovery/restore/uImage-std of=/dev/mmcblk0 bs=512 seek=2048 sync rm /mnt/etc/passwd sync cp /opt/passwd_lockdown /mnt/etc/passwd sync # We set the ALERT flag to show a GUI warning about what happened echo "true" > /mnt/boot/flags/ALERT sync echo "Done, rebooting..." reboot exit 0 fi if [ "$INPUT_LOG" == "" ]; then if [ "$DIAGS_BOOT" != "true" ]; then # If the security policy was violated, we would not be there anymore, so from now on we are booting as usual. # Splash /etc/init.d/inkbox-splash & mount /dev/mmcblk0p3 /mnt mount /dev/mmcblk0p1 /mnt/boot mkdir -p /mnt/opt/root mkdir -p /mnt/opt/key mkdir -p /mnt/selinux mkdir -p /mnt/modules losetup /dev/loop7 /opt/root.sqsh mount /dev/loop7 /mnt/opt/root -o ro,nodev,nosuid,noexec losetup /dev/loop6 /opt/key.sqsh mount /dev/loop6 /mnt/opt/key -o ro,nodev,nosuid,noexec losetup /dev/loop5 /opt/modules.sqsh mount /dev/loop5 /mnt/modules -o ro,nodev,nosuid,noexec mount --move /proc /mnt/proc mount --move /sys /mnt/sys mount -t devtmpfs devtmpfs /mnt/dev mount -t tmpfs tmpfs /mnt/tmp mount -t selinuxfs selinuxfs /mnt/selinux # Starting an X server if [ "$STARTX" == "true" ]; then /etc/init.d/startx fi chroot /mnt /sbin/openrc "sysinit" chroot /mnt /sbin/openrc "boot" chroot /mnt /sbin/openrc "default" exit 0 else echo "DIAGS_BOOT is set to 'true', booting into diagnostics..." mkdir -p /alpine mount /dev/mmcblk0p2 /mnt -o ro mount /dev/mmcblk0p1 /mnt/boot losetup /dev/loop7 /opt/root.sqsh mount /dev/loop7 /mnt/opt/root -o ro,nodev,nosuid,noexec losetup /dev/loop6 /opt/key.sqsh mount /dev/loop6 /mnt/opt/key -o ro,nodev,nosuid,noexec losetup /dev/loop5 /opt/modules.sqsh mount /dev/loop5 /mnt/modules -o ro,nodev,nosuid,noexec mount /mnt/opt/recovery/restore/alpine-udev.sqsh /alpine mount --bind /proc /mnt/proc mount --bind /proc /alpine/proc mount --bind /sys /mnt/sys mount --bind /sys /alpine/sys mount -t devtmpfs devtmpfs /mnt/dev mount -t devtmpfs devtmpfs /alpine/dev mount -t tmpfs tmpfs /mnt/tmp mount -t tmpfs tmpfs /alpine/tmp mount -t tmpfs tmpfs /alpine/run chroot /alpine /sbin/openrc "sysinit" chroot /mnt /opt/bin/diagnostics_splash sleep 2 chroot /mnt /opt/recovery/launch.sh & exit 0 fi else echo "Input event caught, booting into recovery partition..." mkdir -p /alpine mount /dev/mmcblk0p2 /mnt -o ro mount /dev/mmcblk0p1 /mnt/boot losetup /dev/loop7 /opt/root.sqsh mount /dev/loop7 /mnt/opt/root -o ro,nodev,nosuid,noexec losetup /dev/loop6 /opt/key.sqsh mount /dev/loop6 /mnt/opt/key -o ro,nodev,nosuid,noexec losetup /dev/loop5 /opt/modules.sqsh mount /dev/loop5 /mnt/modules -o ro,nodev,nosuid,noexec mount /mnt/opt/recovery/restore/alpine-udev.sqsh /alpine mount --bind /proc /mnt/proc mount --bind /proc /alpine/proc mount --bind /sys /mnt/sys mount --bind /sys /alpine/sys mount -t devtmpfs devtmpfs /mnt/dev mount -t devtmpfs devtmpfs /alpine/dev mount -t tmpfs tmpfs /mnt/tmp mount -t tmpfs tmpfs /alpine/tmp mount -t tmpfs tmpfs /alpine/run chroot /alpine /sbin/openrc "sysinit" chroot /mnt /opt/bin/diagnostics_splash sleep 2 chroot /mnt /opt/recovery/launch.sh & exit 0 fi else rm /usr/sbin/chroot echo -e "#!/bin/sh\n\n/sbin/getty -L ttymxc0 115200 vt100" > /usr/sbin/chroot chmod +x /usr/sbin/chroot exit 0 fi fi kill -9 $EVTEST_PID