From 7bc40ffbd1074088116c3ded63f45a9f7e1ae895 Mon Sep 17 00:00:00 2001
From: Howard Wu <HowardWu20@outlook.com>
Date: Mon, 12 Feb 2024 08:51:10 +0800
Subject: [PATCH] Fix env at first boot

---
 scripts/build.sh           |  2 ++
 scripts/init.lsp.magisk.rc |  2 ++
 scripts/post-fs-data.sh    | 38 ++++++++++++++++++++++++++++++++++++++
 3 files changed, 42 insertions(+)
 create mode 100644 scripts/init.lsp.magisk.rc
 create mode 100644 scripts/post-fs-data.sh

diff --git a/scripts/build.sh b/scripts/build.sh
index 1727ed4..3c83171 100755
--- a/scripts/build.sh
+++ b/scripts/build.sh
@@ -474,6 +474,8 @@ if [ "$HAS_GAPPS" ] || [ "$ROOT_SOL" = "magisk" ]; then
         "add 0644 overlay.d/sbin/magisk32.xz $WORK_DIR/magisk/magisk32.xz" \
         "add 0644 overlay.d/sbin/stub.xz $WORK_DIR/magisk/stub.xz" \
         "mkdir 000 .backup" \
+        "add 000 overlay.d/init.lsp.magisk.rc init.lsp.magisk.rc" \
+        "add 000 overlay.d/sbin/post-fs-data.sh post-fs-data.sh" \
         || abort "Unable to patch initrd"
 elif [ "$ROOT_SOL" = "kernelsu" ]; then
     echo "Extracting KernelSU"
diff --git a/scripts/init.lsp.magisk.rc b/scripts/init.lsp.magisk.rc
new file mode 100644
index 0000000..444331e
--- /dev/null
+++ b/scripts/init.lsp.magisk.rc
@@ -0,0 +1,2 @@
+on post-fs-data
+    exec u:r:magisk:s0 0 0 -- /system/bin/sh ${MAGISKTMP}/post-fs-data.sh
diff --git a/scripts/post-fs-data.sh b/scripts/post-fs-data.sh
new file mode 100644
index 0000000..b7adef5
--- /dev/null
+++ b/scripts/post-fs-data.sh
@@ -0,0 +1,38 @@
+#!/system/bin/sh
+MAGISKTMP=/sbin
+[ -d /sbin ] || MAGISKTMP=/debug_ramdisk
+MAGISKBIN=/data/adb/magisk
+if [ ! -d /data/adb ]; then
+    mkdir -m 700 /data/adb
+    chcon u:object_r:adb_data_file:s0 /data/adb
+fi
+if [ ! -x $MAGISKBIN/busybox ]; then
+    # shellcheck disable=SC2174
+    mkdir -p -m 755 $MAGISKBIN
+    chcon u:object_r:system_file:s0 $MAGISKBIN
+    ABI=$(/system/bin/getprop ro.product.cpu.abi)
+    /system/bin/unzip -d $MAGISKBIN -j $MAGISKTMP/stub.apk "lib/$ABI/libbusybox.so"
+    mv $MAGISKBIN/libbusybox.so $MAGISKBIN/busybox
+    chmod 755 $MAGISKBIN/busybox
+    /system/bin/unzip -d $MAGISKBIN -j $MAGISKTMP/stub.apk "lib/$ABI/libmagiskpolicy.so"
+    mv $MAGISKBIN/libmagiskpolicy.so $MAGISKBIN/magiskpolicy
+    chmod 755 $MAGISKBIN/magiskpolicy
+fi
+if [ ! -x $MAGISKBIN/magiskpolicy ]; then
+    /system/bin/unzip -d $MAGISKBIN -j $MAGISKTMP/stub.apk "lib/$ABI/libmagiskpolicy.so"
+    mv $MAGISKBIN/libmagiskpolicy.so $MAGISKBIN/magiskpolicy
+    chmod 755 $MAGISKBIN/magiskpolicy
+fi
+for file in magiskboot magiskinit; do
+    [ -x "$MAGISKBIN/$file" ] || {
+        /system/bin/unzip -d $MAGISKBIN -j $MAGISKTMP/stub.apk "lib/$ABI/lib$file.so"
+        mv $MAGISKBIN/lib$file.so $MAGISKBIN/$file
+        chmod 755 "$MAGISKBIN/$file"
+    }
+done
+for file in util_functions.sh boot_patch.sh; do
+    [ -x "$MAGISKBIN/$file" ] || {
+        /system/bin/unzip -d $MAGISKBIN -j $MAGISKTMP/stub.apk "assets/$file"
+        chmod 755 "$MAGISKBIN/$file"
+    }
+done