From 664215b7d5d96d63dc09afa2c7c0bd3fcf0990a0 Mon Sep 17 00:00:00 2001
From: tytydraco <tylernij@gmail.com>
Date: Fri, 18 Dec 2020 11:09:54 +0000
Subject: [PATCH 1/9] all: patching for anndroid

Signed-off-by: alanndz <alanmahmud0@gmail.com>
---
 bin/charch | 5 +++--
 bin/cparch | 5 +++--
 bin/lsarch | 5 +++--
 bin/mkarch | 5 +++--
 bin/rmarch | 5 +++--
 bin/unarch | 5 +++--
 6 files changed, 18 insertions(+), 12 deletions(-)

diff --git a/bin/charch b/bin/charch
index 9a62f5b..45605a0 100755
--- a/bin/charch
+++ b/bin/charch
@@ -1,5 +1,6 @@
-#!/usr/bin/env bash
+#!/system/bin/sh
 # Written by Draco (tytydraco) @ GitHub
+export PATH="/sbin/.magisk/busybox:$PATH"
 
 # Log in red and exit
 err() {
@@ -17,7 +18,7 @@ done
 [[ "$(id -u)" -ne 0 ]] && err "No root permissions. Exiting."
 
 # Path containing rootfs tarball and all rootfs instances
-CHROOT_DIR="$HOME/charch"
+CHROOT_DIR="/data/unencrypted/charch"
 
 # The name of the current rootfs instance
 ROOTFS="rootfs"
diff --git a/bin/cparch b/bin/cparch
index 6eecb8c..2d6d634 100755
--- a/bin/cparch
+++ b/bin/cparch
@@ -1,5 +1,6 @@
-#!/usr/bin/env bash
+#!/system/bin/sh
 # Written by Draco (tytydraco) @ GitHub
+export PATH="/sbin/.magisk/busybox:$PATH"
 
 # Log in red and exit
 err() {
@@ -17,7 +18,7 @@ done
 [[ "$(id -u)" -ne 0 ]] && err "No root permissions. Exiting."
 
 # Path containing rootfs tarball and all rootfs instances
-CHROOT_DIR="$HOME/charch"
+CHROOT_DIR="/data/unencrypted/charch"
 
 usage() {
 	echo -n "Usage: $(basename "$0") [OPTIONS] <OLD NAME> <NEW NAME>
diff --git a/bin/lsarch b/bin/lsarch
index 48e1626..139d27e 100755
--- a/bin/lsarch
+++ b/bin/lsarch
@@ -1,5 +1,6 @@
-#!/usr/bin/env bash
+#!/system/bin/sh
 # Written by Draco (tytydraco) @ GitHub
+export PATH="/sbin/.magisk/busybox:$PATH"
 
 # Log in red and exit
 err() {
@@ -17,7 +18,7 @@ done
 [[ "$(id -u)" -ne 0 ]] && err "No root permissions. Exiting."
 
 # Path containing rootfs tarball and all rootfs instances
-CHROOT_DIR="$HOME/charch"
+CHROOT_DIR="/data/unencrypted/charch"
 
 usage() {
 	echo -n "Usage: $(basename "$0") [OPTIONS]
diff --git a/bin/mkarch b/bin/mkarch
index ad84796..7f55f3b 100755
--- a/bin/mkarch
+++ b/bin/mkarch
@@ -1,5 +1,6 @@
-#!/usr/bin/env bash
+#!/system/bin/sh
 # Written by Draco (tytydraco) @ GitHub
+export PATH="/sbin/.magisk/busybox:$PATH"
 
 # Log in red and exit
 err() {
@@ -17,7 +18,7 @@ done
 [[ "$(id -u)" -ne 0 ]] && err "No root permissions. Exiting."
 
 # Path containing rootfs tarball and all rootfs instances
-CHROOT_DIR="$HOME/charch"
+CHROOT_DIR="/data/unencrypted/charch"
 
 # The name of the current rootfs instance
 ROOTFS="rootfs"
diff --git a/bin/rmarch b/bin/rmarch
index 8d110fb..25c2744 100755
--- a/bin/rmarch
+++ b/bin/rmarch
@@ -1,5 +1,6 @@
-#!/usr/bin/env bash
+#!/system/bin/sh
 # Written by Draco (tytydraco) @ GitHub
+export PATH="/sbin/.magisk/busybox:$PATH"
 
 # Log in red and exit
 err() {
@@ -17,7 +18,7 @@ done
 [[ "$(id -u)" -ne 0 ]] && err "No root permissions. Exiting."
 
 # Path containing rootfs tarball and all rootfs instances
-CHROOT_DIR="$HOME/charch"
+CHROOT_DIR="/data/unencrypted/charch"
 
 # The name of the current rootfs instance
 ROOTFS="rootfs"
diff --git a/bin/unarch b/bin/unarch
index 0f3eeea..0825c8a 100755
--- a/bin/unarch
+++ b/bin/unarch
@@ -1,5 +1,6 @@
-#!/usr/bin/env bash
+#!/system/bin/sh
 # Written by Draco (tytydraco) @ GitHub
+export PATH="/sbin/.magisk/busybox:$PATH"
 
 # Log in red and exit
 err() {
@@ -17,7 +18,7 @@ done
 [[ "$(id -u)" -ne 0 ]] && err "No root permissions. Exiting."
 
 # Path containing rootfs tarball and rootfs instances
-CHROOT_DIR="$HOME/charch"
+CHROOT_DIR="/data/unencrypted/charch"
 
 # The name of the current rootfs instance
 ROOTFS="rootfs"

From 9cd213a9ea5389f37c9bc0ecc393035b6554572a Mon Sep 17 00:00:00 2001
From: tytydraco <tylernij@gmail.com>
Date: Fri, 18 Dec 2020 11:13:45 +0000
Subject: [PATCH 2/9] charch: patching for android

Signed-off-by: alanndz <alanmahmud0@gmail.com>
---
 bin/charch | 19 +++++++++++++++++++
 1 file changed, 19 insertions(+)

diff --git a/bin/charch b/bin/charch
index 45605a0..eca1a35 100755
--- a/bin/charch
+++ b/bin/charch
@@ -107,12 +107,31 @@ safe_mount_file() {
 	fi
 }
 
+# Find the outermost mountpoint that charch is currently executing from
+find_mountpoint() {
+	local path=`readlink -f "$1"`
+	until mountpoint -q "$path" &>/dev/null
+	do
+		path=${path%/*}
+		path=${path:-/}
+
+		# Break if we reach the end of the filesystem
+		[[ "$path" == "/" ]] && ! mountpoint -q "/" &> /dev/null && break
+	done
+	echo "$path"
+}
+
 # Mount essentials and remound current mount as suid,exec
 setup_mounts() {
 	safe_mount_dir /dev tmpfs
 	safe_mount_dir /sys sysfs
 	safe_mount_dir /proc proc
 	safe_mount_file /etc/resolv.conf
+
+	# Remount data partition with suid to allow sudo to function
+	local root_mount=`find_mountpoint "$CHROOT_DIR"`
+	mount | awk '{print $3}' | grep -q "^$root_mount\$" &&
+		mount -o remount,suid,exec "$root_mount" &> /dev/null
 }
 
 # Enter the chroot with the provided command

From 6680058619e0e05d424c4e168f640dd1d46ac143 Mon Sep 17 00:00:00 2001
From: alanndz <alanmahmud0@gmail.com>
Date: Mon, 30 Nov 2020 01:53:16 +0000
Subject: [PATCH 3/9] charch: remove mount --make-slave

* In Android 11, mount havent --make-slave
* They will error with:
  mount: bad /etc/fstab: No such file or directory

Signed-off-by: alanndz <alanmahmud0@gmail.com>
---
 bin/charch | 2 --
 1 file changed, 2 deletions(-)

diff --git a/bin/charch b/bin/charch
index eca1a35..9fd4757 100755
--- a/bin/charch
+++ b/bin/charch
@@ -82,7 +82,6 @@ safe_mount_dir() {
 	then
 		mkdir -p "$guest_mount"
 		mount --rbind "$1" "$guest_mount"
-		mount --make-rslave "$guest_mount"
 	elif [[ -n "$2" ]]
 	then
 		mkdir -p "$guest_mount"
@@ -103,7 +102,6 @@ safe_mount_file() {
 		mkdir -p "${guest_mount%/*}"
 		[[ ! -f "$guest_mount" ]] && touch "$guest_mount"
 		mount --bind "$1" "$guest_mount"
-		mount --make-slave "$guest_mount"
 	fi
 }
 

From e1cd21d3af306bb3ba5a13ec5465462e9ebf0bfa Mon Sep 17 00:00:00 2001
From: alanndz <alanmahmud0@gmail.com>
Date: Mon, 30 Nov 2020 01:56:07 +0000
Subject: [PATCH 4/9] charch: mount /dev/pts

* Its will fixed packages screen, tmux or other cant run

Signed-off-by: alanndz <alanmahmud0@gmail.com>
---
 bin/charch | 1 +
 1 file changed, 1 insertion(+)

diff --git a/bin/charch b/bin/charch
index 9fd4757..91b2ae7 100755
--- a/bin/charch
+++ b/bin/charch
@@ -122,6 +122,7 @@ find_mountpoint() {
 # Mount essentials and remound current mount as suid,exec
 setup_mounts() {
 	safe_mount_dir /dev tmpfs
+	safe_mount_dir /dev/pts devpts
 	safe_mount_dir /sys sysfs
 	safe_mount_dir /proc proc
 	safe_mount_file /etc/resolv.conf

From 4d2e203b2ca0fd115c80771b5bf092ddc0249923 Mon Sep 17 00:00:00 2001
From: alanndz <alanmahmud0@gmail.com>
Date: Fri, 18 Dec 2020 11:16:50 +0000
Subject: [PATCH 5/9] move bin into system/

Signed-off-by: alanndz <alanmahmud0@gmail.com>
---
 {bin => system/bin}/charch | 0
 {bin => system/bin}/cparch | 0
 {bin => system/bin}/lsarch | 0
 {bin => system/bin}/mkarch | 0
 {bin => system/bin}/rmarch | 0
 {bin => system/bin}/unarch | 0
 6 files changed, 0 insertions(+), 0 deletions(-)
 rename {bin => system/bin}/charch (100%)
 rename {bin => system/bin}/cparch (100%)
 rename {bin => system/bin}/lsarch (100%)
 rename {bin => system/bin}/mkarch (100%)
 rename {bin => system/bin}/rmarch (100%)
 rename {bin => system/bin}/unarch (100%)

diff --git a/bin/charch b/system/bin/charch
similarity index 100%
rename from bin/charch
rename to system/bin/charch
diff --git a/bin/cparch b/system/bin/cparch
similarity index 100%
rename from bin/cparch
rename to system/bin/cparch
diff --git a/bin/lsarch b/system/bin/lsarch
similarity index 100%
rename from bin/lsarch
rename to system/bin/lsarch
diff --git a/bin/mkarch b/system/bin/mkarch
similarity index 100%
rename from bin/mkarch
rename to system/bin/mkarch
diff --git a/bin/rmarch b/system/bin/rmarch
similarity index 100%
rename from bin/rmarch
rename to system/bin/rmarch
diff --git a/bin/unarch b/system/bin/unarch
similarity index 100%
rename from bin/unarch
rename to system/bin/unarch

From afb1aaee09eff9561adc3324d016021a49784210 Mon Sep 17 00:00:00 2001
From: alanndz <alanmahmud0@gmail.com>
Date: Fri, 18 Dec 2020 11:20:40 +0000
Subject: [PATCH 6/9] Add magisk module

Signed-off-by: alanndz <alanmahmud0@gmail.com>
---
 META-INF/com/google/android/update-binary  | 173 +++++++++++++++++++++
 META-INF/com/google/android/updater-script |   1 +
 Makefile                                   |  12 ++
 customize.sh                               |   5 +
 module.prop                                |   6 +
 5 files changed, 197 insertions(+)
 create mode 100644 META-INF/com/google/android/update-binary
 create mode 100644 META-INF/com/google/android/updater-script
 create mode 100644 Makefile
 create mode 100644 customize.sh
 create mode 100644 module.prop

diff --git a/META-INF/com/google/android/update-binary b/META-INF/com/google/android/update-binary
new file mode 100644
index 0000000..d19eeb5
--- /dev/null
+++ b/META-INF/com/google/android/update-binary
@@ -0,0 +1,173 @@
+#!/sbin/sh
+
+#################
+# Initialization
+#################
+
+umask 022
+
+# Global vars
+TMPDIR=/dev/tmp
+PERSISTDIR=/sbin/.magisk/mirror/persist
+
+rm -rf $TMPDIR 2>/dev/null
+mkdir -p $TMPDIR
+
+# echo before loading util_functions
+ui_print() { echo "$1"; }
+
+require_new_magisk() {
+  ui_print "*******************************"
+  ui_print " Please install Magisk v19.0+! "
+  ui_print "*******************************"
+  exit 1
+}
+
+is_legacy_script() {
+  unzip -l "$ZIPFILE" install.sh | grep -q install.sh
+  return $?
+}
+
+print_modname() {
+  local len
+  len=`echo -n $MODNAME | wc -c`
+  len=$((len + 2))
+  local pounds=`printf "%${len}s" | tr ' ' '*'`
+  ui_print "$pounds"
+  ui_print " $MODNAME "
+  ui_print "$pounds"
+  ui_print "*******************"
+  ui_print " Powered by Magisk "
+  ui_print "*******************"
+}
+
+##############
+# Environment
+##############
+
+OUTFD=$2
+ZIPFILE=$3
+
+mount /data 2>/dev/null
+
+# Load utility functions
+[ -f /data/adb/magisk/util_functions.sh ] || require_new_magisk
+. /data/adb/magisk/util_functions.sh
+[ $MAGISK_VER_CODE -gt 18100 ] || require_new_magisk
+
+# Preperation for flashable zips
+setup_flashable
+
+# Mount partitions
+mount_partitions
+
+# Detect version and architecture
+api_level_arch_detect
+
+# Setup busybox and binaries
+$BOOTMODE && boot_actions || recovery_actions
+
+##############
+# Preparation
+##############
+
+# Extract prop file
+unzip -o "$ZIPFILE" module.prop -d $TMPDIR >&2
+[ ! -f $TMPDIR/module.prop ] && abort "! Unable to extract zip file!"
+
+$BOOTMODE && MODDIRNAME=modules_update || MODDIRNAME=modules
+MODULEROOT=$NVBASE/$MODDIRNAME
+MODID=`grep_prop id $TMPDIR/module.prop`
+MODPATH=$MODULEROOT/$MODID
+MODNAME=`grep_prop name $TMPDIR/module.prop`
+
+# Create mod paths
+rm -rf $MODPATH 2>/dev/null
+mkdir -p $MODPATH
+
+##########
+# Install
+##########
+
+if is_legacy_script; then
+  unzip -oj "$ZIPFILE" module.prop install.sh uninstall.sh 'common/*' -d $TMPDIR >&2
+
+  # Load install script
+  . $TMPDIR/install.sh
+
+  # Callbacks
+  print_modname
+  on_install
+
+  # Custom uninstaller
+  [ -f $TMPDIR/uninstall.sh ] && cp -af $TMPDIR/uninstall.sh $MODPATH/uninstall.sh
+
+  # Skip mount
+  $SKIPMOUNT && touch $MODPATH/skip_mount
+
+  # prop file
+  $PROPFILE && cp -af $TMPDIR/system.prop $MODPATH/system.prop
+
+  # Module info
+  cp -af $TMPDIR/module.prop $MODPATH/module.prop
+
+  # post-fs-data scripts
+  $POSTFSDATA && cp -af $TMPDIR/post-fs-data.sh $MODPATH/post-fs-data.sh
+
+  # service scripts
+  $LATESTARTSERVICE && cp -af $TMPDIR/service.sh $MODPATH/service.sh
+
+  ui_print "- Setting permissions"
+  set_permissions
+else
+  print_modname
+
+  unzip -o "$ZIPFILE" customize.sh -d $MODPATH >&2
+
+  if ! grep -q '^SKIPUNZIP=1$' $MODPATH/customize.sh 2>/dev/null; then
+    ui_print "- Extracting module files"
+    unzip -o "$ZIPFILE" -x 'META-INF/*' -d $MODPATH >&2
+
+    # Default permissions
+    set_perm_recursive $MODPATH 0 0 0755 0644
+  fi
+
+  # Load customization script
+  [ -f $MODPATH/customize.sh ] && . $MODPATH/customize.sh
+fi
+
+# Handle replace folders
+for TARGET in $REPLACE; do
+  ui_print "- Replace target: $TARGET"
+  mktouch $MODPATH$TARGET/.replace
+done
+
+if $BOOTMODE; then
+  # Update info for Magisk Manager
+  mktouch $NVBASE/modules/$MODID/update
+  cp -af $MODPATH/module.prop $NVBASE/modules/$MODID/module.prop
+fi
+
+# Copy over custom sepolicy rules
+if [ -f $MODPATH/sepolicy.rule -a -e $PERSISTDIR ]; then
+  ui_print "- Installing custom sepolicy patch"
+  PERSISTMOD=$PERSISTDIR/magisk/$MODID
+  mkdir -p $PERSISTMOD
+  cp -af $MODPATH/sepolicy.rule $PERSISTMOD/sepolicy.rule
+fi
+
+# Remove stuffs that don't belong to modules
+rm -rf \
+$MODPATH/system/placeholder $MODPATH/customize.sh \
+$MODPATH/README.md $MODPATH/.git* 2>/dev/null
+
+##############
+# Finalizing
+##############
+
+cd /
+$BOOTMODE || recovery_cleanup
+rm -rf $TMPDIR
+
+ui_print "- Done"
+exit 0
\ No newline at end of file
diff --git a/META-INF/com/google/android/updater-script b/META-INF/com/google/android/updater-script
new file mode 100644
index 0000000..492be83
--- /dev/null
+++ b/META-INF/com/google/android/updater-script
@@ -0,0 +1 @@
+#MAGISK
\ No newline at end of file
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..59a744c
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,12 @@
+# Written by Draco (tytydraco @ GitHub)
+# Modified by alanndz
+
+HASH := $(shell git rev-parse --short HEAD)
+VERSION := $(shell cat module.prop | grep version= | sed "s/version=//")
+
+zip:
+	make clean || true
+	zip -x .git\* Makefile bin .gitignore *patch README* -r9 ChArch-Mod-$(VERSION)_$(HASH).zip .
+
+clean:
+	rm *.zip || true
diff --git a/customize.sh b/customize.sh
new file mode 100644
index 0000000..108b949
--- /dev/null
+++ b/customize.sh
@@ -0,0 +1,5 @@
+#!/system/bin/sh
+# Written by Draco (tytydraco @ GitHub)
+
+ui_print "[*] Setting executable permissions..."
+set_perm_recursive "$MODPATH/system/bin" root root 0777 0755
diff --git a/module.prop b/module.prop
new file mode 100644
index 0000000..8a5ac94
--- /dev/null
+++ b/module.prop
@@ -0,0 +1,6 @@
+id=charch
+name=ChArch
+version=v2.0
+versionCode=2
+author=tytydraco
+description=ChArch for Android. Modified by alanndz

From 84b588fd048d971df94d9d2023f53011593a4ada Mon Sep 17 00:00:00 2001
From: alanndz <alanmahmud0@gmail.com>
Date: Fri, 18 Dec 2020 11:29:27 +0000
Subject: [PATCH 7/9] add prebuilt fuser

Signed-off-by: alanndz <alanmahmud0@gmail.com>
---
 system/bin/fuser | Bin 0 -> 67608 bytes
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100755 system/bin/fuser

diff --git a/system/bin/fuser b/system/bin/fuser
new file mode 100755
index 0000000000000000000000000000000000000000..4a3191c6f39e6134f65f27fa9e8d880ec7f737d4
GIT binary patch
literal 67608
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

literal 0
HcmV?d00001


From 16c1fb9951562e65dcb5ff538e220d3e119380a2 Mon Sep 17 00:00:00 2001
From: alanndz <alanmahmud0@gmail.com>
Date: Fri, 18 Dec 2020 11:31:23 +0000
Subject: [PATCH 8/9] cparch: fix

Signed-off-by: alanndz <alanmahmud0@gmail.com>
---
 system/bin/cparch | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/system/bin/cparch b/system/bin/cparch
index 2d6d634..f318ed3 100755
--- a/system/bin/cparch
+++ b/system/bin/cparch
@@ -62,7 +62,7 @@ fi
 [[ -d "$CHROOT_DIR/$2" ]] && err "Rootfs instance with name $2 already exists. Exiting."
 
 # Unmount and exit on fail
-! unarch -d "$CHROOT_DIR" "$1" && exit 1
+! unarch -d "$CHROOT_DIR" -n "$1" && exit 1
 
 # Clone
 cp -Ra "$CHROOT_DIR/$1" "$CHROOT_DIR/$2"

From 1f58e68f5b49931390d19c30bce1de6a08333dc6 Mon Sep 17 00:00:00 2001
From: alanndz <alanndz7@gmail.com>
Date: Fri, 20 May 2022 20:45:13 +0800
Subject: [PATCH 9/9] mkarch: Use curl instead wget

Signed-off-by: alanndz <alanndz7@gmail.com>
---
 system/bin/mkarch | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/system/bin/mkarch b/system/bin/mkarch
index 7f55f3b..1c5f458 100755
--- a/system/bin/mkarch
+++ b/system/bin/mkarch
@@ -9,7 +9,7 @@ err() {
 }
 
 # Check for required dependencies
-for dep in find id mkdir rm sed tar wc wget
+for dep in find id mkdir rm sed tar wc curl
 do
 	! command -v "$dep" &> /dev/null && err "Unable to locate dependency $dep. Exiting."
 done
@@ -74,7 +74,7 @@ ROOTFS_DIR="$CHROOT_DIR/$ROOTFS"
 fetch_rootfs() {
 	[[ -z "$ROOTFS_URL" ]] && err "No rootfs tarball URL specified. Exiting."
 
-	! wget -qO "$ROOTFS_TAR" "$ROOTFS_URL" && err "Failed to fetch rootfs tarball. Exiting."
+	! curl -s -o "$ROOTFS_TAR" "$ROOTFS_URL" && err "Failed to fetch rootfs tarball. Exiting."
 }
 
 # Extract the rootfs and make it usable