support metamodule, remove built-in overlayfs mount
Co-authored-by: weishu <twsxtd@gmail.com> Co-authored-by: YuKongA <70465933+YuKongA@users.noreply.github.com> Co-authored-by: Ylarod <me@ylarod.cn>
This commit is contained in:
0
userspace/meta-overlayfs/metamodule/.gitkeep
Normal file
0
userspace/meta-overlayfs/metamodule/.gitkeep
Normal file
77
userspace/meta-overlayfs/metamodule/customize.sh
Normal file
77
userspace/meta-overlayfs/metamodule/customize.sh
Normal file
@@ -0,0 +1,77 @@
|
||||
#!/system/bin/sh
|
||||
|
||||
ui_print "- Detecting device architecture..."
|
||||
|
||||
# Detect architecture using ro.product.cpu.abi
|
||||
ABI=$(grep_get_prop ro.product.cpu.abi)
|
||||
ui_print "- Detected ABI: $ABI"
|
||||
|
||||
# Select the correct binary based on architecture
|
||||
case "$ABI" in
|
||||
arm64-v8a)
|
||||
ARCH_BINARY="meta-overlayfs-aarch64"
|
||||
REMOVE_BINARY="meta-overlayfs-x86_64"
|
||||
ui_print "- Selected architecture: ARM64"
|
||||
;;
|
||||
x86_64)
|
||||
ARCH_BINARY="meta-overlayfs-x86_64"
|
||||
REMOVE_BINARY="meta-overlayfs-aarch64"
|
||||
ui_print "- Selected architecture: x86_64"
|
||||
;;
|
||||
*)
|
||||
abort "! Unsupported architecture: $ABI"
|
||||
;;
|
||||
esac
|
||||
|
||||
# Verify the selected binary exists
|
||||
if [ ! -f "$MODPATH/$ARCH_BINARY" ]; then
|
||||
abort "! Binary not found: $ARCH_BINARY"
|
||||
fi
|
||||
|
||||
ui_print "- Installing $ARCH_BINARY as meta-overlayfs"
|
||||
|
||||
# Rename the selected binary to the generic name
|
||||
mv "$MODPATH/$ARCH_BINARY" "$MODPATH/meta-overlayfs" || abort "! Failed to rename binary"
|
||||
|
||||
# Remove the unused binary
|
||||
rm -f "$MODPATH/$REMOVE_BINARY"
|
||||
|
||||
# Ensure the binary is executable
|
||||
chmod 755 "$MODPATH/meta-overlayfs" || abort "! Failed to set permissions"
|
||||
|
||||
ui_print "- Architecture-specific binary installed successfully"
|
||||
|
||||
# Create ext4 image for module content storage
|
||||
IMG_FILE="$MODPATH/modules.img"
|
||||
MNT_DIR="$MODPATH/mnt"
|
||||
IMG_SIZE_MB=2048
|
||||
|
||||
if [ ! -f "$IMG_FILE" ]; then
|
||||
ui_print "- Creating 2GB ext4 image for module storage"
|
||||
|
||||
# Create sparse file (2GB logical size, 0 bytes actual)
|
||||
truncate -s ${IMG_SIZE_MB}M "$IMG_FILE" || \
|
||||
abort "! Failed to create image file"
|
||||
|
||||
# Format as ext4 with small journal (8MB) for safety with minimal overhead
|
||||
/system/bin/mke2fs -t ext4 -J size=8 -F "$IMG_FILE" >/dev/null 2>&1 || \
|
||||
abort "! Failed to format ext4 image"
|
||||
|
||||
ui_print "- Image created successfully (sparse file)"
|
||||
else
|
||||
ui_print "- Existing image found, keeping it"
|
||||
fi
|
||||
|
||||
# Mount image immediately for use
|
||||
ui_print "- Mounting image for immediate use..."
|
||||
mkdir -p "$MNT_DIR"
|
||||
if ! mountpoint -q "$MNT_DIR" 2>/dev/null; then
|
||||
mount -t ext4 -o loop,rw,noatime "$IMG_FILE" "$MNT_DIR" || \
|
||||
abort "! Failed to mount image"
|
||||
ui_print "- Image mounted successfully"
|
||||
else
|
||||
ui_print "- Image already mounted"
|
||||
fi
|
||||
|
||||
ui_print "- Installation complete"
|
||||
ui_print "- Image is ready for module installations"
|
||||
61
userspace/meta-overlayfs/metamodule/metainstall.sh
Normal file
61
userspace/meta-overlayfs/metamodule/metainstall.sh
Normal file
@@ -0,0 +1,61 @@
|
||||
#!/system/bin/sh
|
||||
############################################
|
||||
# meta-overlayfs metainstall.sh
|
||||
# Module installation hook for ext4 image support
|
||||
############################################
|
||||
|
||||
# Constants
|
||||
IMG_FILE="/data/adb/metamodule/modules.img"
|
||||
MNT_DIR="/data/adb/metamodule/mnt"
|
||||
|
||||
# Ensure ext4 image is mounted
|
||||
ensure_image_mounted() {
|
||||
if ! mountpoint -q "$MNT_DIR" 2>/dev/null; then
|
||||
ui_print "- Mounting modules image"
|
||||
mkdir -p "$MNT_DIR"
|
||||
mount -t ext4 -o loop,rw,noatime "$IMG_FILE" "$MNT_DIR" || {
|
||||
abort "! Failed to mount modules image"
|
||||
}
|
||||
ui_print "- Image mounted successfully"
|
||||
else
|
||||
ui_print "- Image already mounted"
|
||||
fi
|
||||
}
|
||||
|
||||
# Post-installation: move partition directories to ext4 image
|
||||
post_install_to_image() {
|
||||
ui_print "- Moving module content to image"
|
||||
|
||||
MOD_IMG_DIR="$MNT_DIR/$MODID"
|
||||
mkdir -p "$MOD_IMG_DIR"
|
||||
|
||||
# Move all partition directories
|
||||
for partition in system vendor product system_ext odm oem; do
|
||||
if [ -d "$MODPATH/$partition" ]; then
|
||||
ui_print " Moving $partition/"
|
||||
mv "$MODPATH/$partition" "$MOD_IMG_DIR/" || {
|
||||
ui_print "! Warning: Failed to move $partition"
|
||||
}
|
||||
fi
|
||||
done
|
||||
|
||||
# Set permissions
|
||||
chown -R 0:0 "$MOD_IMG_DIR" 2>/dev/null
|
||||
chmod -R 755 "$MOD_IMG_DIR" 2>/dev/null
|
||||
|
||||
ui_print "- Module content moved to image"
|
||||
}
|
||||
|
||||
# Main installation flow
|
||||
ui_print "- Using meta-overlayfs metainstall"
|
||||
|
||||
# 1. Ensure ext4 image is mounted
|
||||
ensure_image_mounted
|
||||
|
||||
# 2. Call standard install_module function (defined in installer.sh)
|
||||
install_module
|
||||
|
||||
# 3. Post-process: move content to image
|
||||
post_install_to_image
|
||||
|
||||
ui_print "- Installation complete"
|
||||
65
userspace/meta-overlayfs/metamodule/metamount.sh
Normal file
65
userspace/meta-overlayfs/metamodule/metamount.sh
Normal file
@@ -0,0 +1,65 @@
|
||||
#!/system/bin/sh
|
||||
# meta-overlayfs Module Mount Handler
|
||||
# This script is the entry point for dual-directory module mounting
|
||||
|
||||
MODDIR="${0%/*}"
|
||||
IMG_FILE="$MODDIR/modules.img"
|
||||
MNT_DIR="$MODDIR/mnt"
|
||||
|
||||
# Log function
|
||||
log() {
|
||||
echo "[meta-overlayfs] $1"
|
||||
}
|
||||
|
||||
log "Starting module mount process"
|
||||
|
||||
# Ensure ext4 image is mounted
|
||||
if ! mountpoint -q "$MNT_DIR" 2>/dev/null; then
|
||||
log "Image not mounted, mounting now..."
|
||||
|
||||
# Check if image file exists
|
||||
if [ ! -f "$IMG_FILE" ]; then
|
||||
log "ERROR: Image file not found at $IMG_FILE"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Create mount point
|
||||
mkdir -p "$MNT_DIR"
|
||||
|
||||
# Mount the ext4 image
|
||||
mount -t ext4 -o loop,rw,noatime "$IMG_FILE" "$MNT_DIR" || {
|
||||
log "ERROR: Failed to mount image"
|
||||
exit 1
|
||||
}
|
||||
log "Image mounted successfully at $MNT_DIR"
|
||||
else
|
||||
log "Image already mounted at $MNT_DIR"
|
||||
fi
|
||||
|
||||
# Binary path (architecture-specific binary selected during installation)
|
||||
BINARY="$MODDIR/meta-overlayfs"
|
||||
|
||||
if [ ! -f "$BINARY" ]; then
|
||||
log "ERROR: Binary not found: $BINARY"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Set dual-directory environment variables
|
||||
export MODULE_METADATA_DIR="/data/adb/modules"
|
||||
export MODULE_CONTENT_DIR="$MNT_DIR"
|
||||
|
||||
log "Metadata directory: $MODULE_METADATA_DIR"
|
||||
log "Content directory: $MODULE_CONTENT_DIR"
|
||||
log "Executing $BINARY"
|
||||
|
||||
# Execute the mount binary
|
||||
"$BINARY"
|
||||
EXIT_CODE=$?
|
||||
|
||||
if [ $EXIT_CODE -ne 0 ]; then
|
||||
log "Mount failed with exit code $EXIT_CODE"
|
||||
exit $EXIT_CODE
|
||||
fi
|
||||
|
||||
log "Mount completed successfully"
|
||||
exit 0
|
||||
35
userspace/meta-overlayfs/metamodule/metauninstall.sh
Normal file
35
userspace/meta-overlayfs/metamodule/metauninstall.sh
Normal file
@@ -0,0 +1,35 @@
|
||||
#!/system/bin/sh
|
||||
############################################
|
||||
# mm-overlayfs metauninstall.sh
|
||||
# Module uninstallation hook for ext4 image cleanup
|
||||
############################################
|
||||
|
||||
# Constants
|
||||
MNT_DIR="/data/adb/metamodule/mnt"
|
||||
|
||||
if [ -z "$MODULE_ID" ]; then
|
||||
echo "! Error: MODULE_ID not provided"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "- Cleaning up module content from image: $MODULE_ID"
|
||||
|
||||
# Check if image is mounted
|
||||
if ! mountpoint -q "$MNT_DIR" 2>/dev/null; then
|
||||
echo "! Warning: Image not mounted, skipping cleanup"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Remove module content from image
|
||||
MOD_IMG_DIR="$MNT_DIR/$MODULE_ID"
|
||||
if [ -d "$MOD_IMG_DIR" ]; then
|
||||
echo " Removing $MOD_IMG_DIR"
|
||||
rm -rf "$MOD_IMG_DIR" || {
|
||||
echo "! Warning: Failed to remove module content from image"
|
||||
}
|
||||
echo "- Module content removed from image"
|
||||
else
|
||||
echo "- No module content found in image, skipping"
|
||||
fi
|
||||
|
||||
exit 0
|
||||
8
userspace/meta-overlayfs/metamodule/module.prop
Normal file
8
userspace/meta-overlayfs/metamodule/module.prop
Normal file
@@ -0,0 +1,8 @@
|
||||
id=meta-overlayfs
|
||||
metamodule=1
|
||||
name=OverlayFS MetaModule
|
||||
version=1.0.0
|
||||
versionCode=1
|
||||
author=KernelSU Developers
|
||||
description=An implementation of a metamodule using OverlayFS for KernelSU
|
||||
updateJson=https://raw.githubusercontent.com/tiann/KernelSU/main/userspace/meta-overlayfs/update.json
|
||||
24
userspace/meta-overlayfs/metamodule/uninstall.sh
Normal file
24
userspace/meta-overlayfs/metamodule/uninstall.sh
Normal file
@@ -0,0 +1,24 @@
|
||||
#!/system/bin/sh
|
||||
############################################
|
||||
# mm-overlayfs uninstall.sh
|
||||
# Cleanup script for metamodule removal
|
||||
############################################
|
||||
|
||||
MODDIR="${0%/*}"
|
||||
MNT_DIR="$MODDIR/mnt"
|
||||
|
||||
echo "- Uninstalling metamodule..."
|
||||
|
||||
# Unmount the ext4 image if mounted
|
||||
if mountpoint -q "$MNT_DIR" 2>/dev/null; then
|
||||
echo "- Unmounting image..."
|
||||
umount "$MNT_DIR" 2>/dev/null || {
|
||||
echo "- Warning: Failed to unmount cleanly"
|
||||
umount -l "$MNT_DIR" 2>/dev/null
|
||||
}
|
||||
echo "- Image unmounted"
|
||||
fi
|
||||
|
||||
echo "- Uninstall complete"
|
||||
|
||||
exit 0
|
||||
Reference in New Issue
Block a user