#!/system/bin/sh ### Rozhuk Ivan 2018-2022 ### optstart.sh ### # Workaround to find 'dirname' on system, at least at /system/xbin - busybox. export PATH=/bin:/sbin:/system/bin:/system/xbin export THIS_SCRIPT_NAME=`readlink -nf ${0}` export OPT_BIN_DIR=`dirname ${THIS_SCRIPT_NAME}` export OPT_ROOT_DIR=`dirname "${OPT_BIN_DIR}"` # Restore PATH. export PATH=${OPT_ROOT_DIR}/bin:${OPT_ROOT_DIR}/sbin:/bin:/sbin:/system/bin:/system/xbin echo "optstart.sh: ${0}: init entware: ${OPT_ROOT_DIR}" > /dev/kmsg # Check is we need run. if [ -d /bin ] && [ -d /opt/etc ]; then echo "optstart.sh: ${0}: entware already initialized." > /dev/kmsg return 0 fi # Change SeLinux context to magisk, if required and possible. if [ -r /system/bin/grep ] && [ -r /system/bin/id ] && [ -r /sbin/su ]; then if ! /system/bin/id -Z | /system/bin/grep -q 'magisk' ; then echo "optstart.sh: ${0}: need to re run ${THIS_SCRIPT_NAME} as root@magisk." > /dev/kmsg /sbin/su sh -c "${THIS_SCRIPT_NAME}" > /dev/kmsg 2>&1 return 0 else echo "optstart.sh: ${0}: running as root@magisk." > /dev/kmsg fi fi # Prepare rootfs. # Unprotect. /system/bin/mount -o rw,remount / > /dev/kmsg 2>&1 # Make /etc ln -sf /system/etc / > /dev/kmsg 2>&1 # Make /bin and sh. mkdir -p /bin > /dev/kmsg 2>&1 chmod 0755 /bin > /dev/kmsg 2>&1 ln -s /system/bin/sh /bin/sh > /dev/kmsg 2>&1 # Make /opt. mkdir -p /opt > /dev/kmsg 2>&1 chmod 0755 /opt > /dev/kmsg 2>&1 /system/bin/mount -o rw,bind "${OPT_ROOT_DIR}" /opt > /dev/kmsg 2>&1 /system/bin/mount -t tmpfs -o rw,nosuid,nodev,size=32m tmpfs /opt/tmp /system/bin/mount -t tmpfs -o rw,nosuid,nodev,size=8m tmpfs /opt/var/log /system/bin/mount -t tmpfs -o rw,nosuid,nodev,size=2m tmpfs /opt/var/run # Protect again. /system/bin/mount -o ro,remount / > /dev/kmsg 2>&1 # Start services. unset LD_LIBRARY_PATH unset LD_PRELOAD /opt/etc/init.d/rc.unslung start > /dev/kmsg 2>&1 echo "optstart.sh: ${0}: entware init done." > /dev/kmsg # Workaround: after this process exit init system may kill all child # zombie processes to cleanup resources. Work forever. while true; do sleep 60000; done