meta-magic_mount/template/customize.sh
2026-01-11 10:53:01 +00:00

248 lines
6.5 KiB
Shell
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/system/bin/sh
SKIPUNZIP=1
# Module configuration
module_id="meta-mm"
module_data_dir="/data/adb/magic_mount"
metamodule_link="/data/adb/metamodule"
ui_print "- File integrity check"
# Extract all files to temporary directory
if ! unzip -o "${ZIPFILE}" -d "${TMPDIR}" >/dev/null 2>&1; then
abort "! Failed to extract ZIP file"
fi
# Verify checksums
(
cd "${TMPDIR}" || abort "! Failed to change directory to TMPDIR"
if [ ! -f "checksums" ]; then
abort "! checksums file not found in package"
fi
if sha256sum -c -s "checksums" >/dev/null 2>&1; then
ui_print " ✓ File integrity verification passed"
else
abort "! File integrity check failed - package may be corrupted"
fi
) || abort "! Integrity check process failed"
ui_print "- Detecting device architecture..."
# Detect architecture using ro.product.cpu.abi
ABI=$(getprop ro.product.cpu.abi)
if [ -z "$ABI" ]; then
abort "! Failed to detect device architecture"
fi
ui_print " Detected ABI: $ABI"
# Select the correct binary based on architecture
case "$ABI" in
arm64-v8a)
ui_print " ✓ Selected architecture: ARM64"
ARCH_BINARY="mm_arm64"
;;
armeabi-v7a)
ui_print " ✓ Selected architecture: ARMv7"
ARCH_BINARY="mm_armv7"
;;
x86_64)
ui_print " ✓ Selected architecture: x86_64"
ARCH_BINARY="mm_amd64"
;;
*)
abort "! Unsupported architecture: $ABI"
;;
esac
ui_print "- Installing architecture-specific binary"
# Verify the selected binary exists
if [ ! -f "$TMPDIR/bin/$ARCH_BINARY" ]; then
abort "! Binary not found: $ARCH_BINARY"
fi
# Ensure MODPATH exists
mkdir -p "$MODPATH" || abort "! Failed to create module directory"
# Install the binary
if ! cp "$TMPDIR/bin/$ARCH_BINARY" "$MODPATH/mmd"; then
abort "! Failed to install binary"
fi
# Set executable permissions
if ! chmod 755 "$MODPATH/mmd"; then
abort "! Failed to set binary permissions"
fi
ui_print " ✓ Installed $ARCH_BINARY as magic_mount"
ui_print "- Configuring module properties"
# Modify module.prop with correct module ID and metamodule flag
if ! sed -i "s|^id=.*|id=$module_id|" "$TMPDIR/module.prop"; then
abort "! Failed to set module ID"
fi
if ! sed -i "s|^metamodule=.*|metamodule=1|" "$TMPDIR/module.prop"; then
abort "! Failed to set metamodule flag"
fi
ui_print " ✓ Module ID: $module_id"
ui_print "- Installing module files"
# Define files to install
module_files="
module.prop
"
# Scripts that need executable permissions
executable_scripts="
metainstall.sh
metauninstall.sh
metamount.sh
uninstall.sh
"
# Directories to copy recursively
module_dirs="
webroot
"
# Copy regular module files
for f in ${module_files}; do
if [ ! -f "$TMPDIR/$f" ]; then
ui_print " ! Warning: $f not found, skipping"
continue
fi
if ! cp "$TMPDIR/$f" "$MODPATH/$f"; then
abort "! Failed to copy $f"
fi
chmod 0644 "$MODPATH/$f" || abort "! Failed to set permissions for $f"
ui_print " ✓ Installed: $f"
done
# Copy executable scripts
for f in ${executable_scripts}; do
if [ ! -f "$TMPDIR/$f" ]; then
ui_print " ! Warning: $f not found, skipping"
continue
fi
if ! cp "$TMPDIR/$f" "$MODPATH/$f"; then
abort "! Failed to copy $f"
fi
chmod 0755 "$MODPATH/$f" || abort "! Failed to set permissions for $f"
ui_print " ✓ Installed: $f (executable)"
done
# Copy directories
for d in ${module_dirs}; do
if [ ! -d "$TMPDIR/$d" ]; then
ui_print " ! Warning: $d not found, skipping"
continue
fi
if ! cp -r "$TMPDIR/$d" "$MODPATH/"; then
abort "! Failed to copy directory $d"
fi
ui_print " ✓ Installed: $d/"
done
if [ "x$KSU" = "xtrue" ] && [ "x$APATCH" = "xtrue" ]; then
abort "err"
elif [ "x$KSU" = "xtrue" ]; then
AOK="KSU"
echo "AOK=KSU" > "$MODPATH/aok"
elif [ "x$APATCH" = "xtrue" ]; then
AOK="APATCH"
ui_print "AOK=APATCH" > "$MODPATH/aok"
else
abort "err"
fi
ui_print "- Initializing configuration"
# Create data directory
if ! mkdir -p "$module_data_dir"; then
abort "! Failed to create data directory"
fi
# Install default configuration only if it doesn't exist
if [ ! -f "$module_data_dir/mm.conf" ]; then
if [ -f "$TMPDIR/mm.conf" ]; then
if ! cp "$TMPDIR/mm.conf" "$module_data_dir/mm.conf"; then
abort "! Failed to install default configuration"
fi
chmod 0644 "$module_data_dir/mm.conf"
ui_print " ✓ Installed default configuration"
else
ui_print " ! Warning: Default config not found"
fi
else
ui_print " ℹ Existing configuration preserved"
fi
if [ "$AOK" = "APATCH" ]; then
sed -i '/^[[:space:]]*umount=true[[:space:]]*$/d' "$module_data_dir/mm.conf"
fi
ui_print "- Managing metamodule status"
# Check if metamodule symlink exists and points to a different module
if [ -L "$metamodule_link" ]; then
metamodule_path=$(realpath "$metamodule_link" 2>/dev/null)
if [ -n "$metamodule_path" ]; then
metamodule_id=$(basename "$metamodule_path")
if [ "$metamodule_id" != "$module_id" ]; then
ui_print " Switching from $metamodule_id to $module_id"
# Mark old metamodule for removal
if [ -f "$metamodule_path/module.prop" ]; then
touch "$metamodule_path/remove" 2>/dev/null
sed -i "s|^metamodule=.*|metamodule=0|" "$metamodule_path/module.prop" 2>/dev/null
fi
# Remove old symlink
rm -f "$metamodule_link"
else
ui_print " ✓ Already active metamodule"
fi
fi
elif [ -e "$metamodule_link" ]; then
# If it exists but is not a symlink, remove it
ui_print " Cleaning up invalid metamodule link"
rm -rf "$metamodule_link"
fi
# Create new metamodule symlink if needed
if [ ! -e "$metamodule_link" ]; then
if ln -sf "/data/adb/modules/$module_id" "$metamodule_link"; then
ui_print " ✓ Activated as metamodule"
else
ui_print " ! Warning: Failed to create metamodule link"
fi
fi
ui_print "- Finalizing installation"
ui_print ""
ui_print "========================================="
ui_print " Magic Mount Installation Information"
ui_print "========================================="
ui_print " Module ID: $module_id"
ui_print " Architecture: $ABI"
ui_print " Binary: $ARCH_BINARY"
ui_print " Data directory: $module_data_dir"
ui_print "========================================="
ui_print ""