mirror of
https://github.com/kuhyx/testsAndMisc.git
synced 2026-11-12 23:10:53 +01:00
Two levels of pure taxonomy carrying no information, and a 2-directory
cap leaves no room for them. Categories now sit directly under
linux_configuration/: features, fixes, utils, misc, fresh-install,
installers, diagnostics, gaming, boot_recovery, periodic_background, lib,
meta, tests. A script's own lib/ and tests/ are exempt from the cap, so
those stay put.
Depth violations 248 -> 139; roughly 40 of the remainder are inside
digital_wellbeing and hosts, deferred until the guard-lib repoint.
The moves are the easy half. What breaks is every path that counted
levels, and three classes of it had to be found by resolving paths rather
than reading diffs:
- 52 relative `source` lines for lib/common.sh and lib/android.sh. The
correct prefix differs per file: 40 were ../../ and 12 were ../../../,
so a blanket replace would have fixed one set and broken the other.
- REPO_ROOT in 7 fixes/lib/tests harnesses and setup_syncyomi_guard.sh,
each walking up four levels from a directory now two levels shallower.
This caused a real regression -- the fixes suite went red with
"log_warn: command not found" -- caught by running it and comparing
against the pre-move baseline worktree.
- conftest.py's sys.path entries, which took the pytest gate down with
14 collection errors, and the `# shellcheck source=` directives, which
took shellcheck down with SC1091.
16 symlinks in $HOME broke, including the entire i3blocks bar. All
repointed, and cpu_monitor/memory/disk/time/volume were run to confirm
they emit real output rather than merely resolving.
Verified: 1798 tests pass at 100% coverage, 8 of 9 lib/tests suites pass
(the ninth needs the coverage jail, identically at baseline), pre-commit
is clean, and the two untracked secret configs are still ignored after
their gitignore paths changed.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PJrqKERAo5QUeEHWS5Asgp
244 lines
7.0 KiB
Bash
Executable File
244 lines
7.0 KiB
Bash
Executable File
#!/bin/bash
|
|
# The install, status, disable and app-blocking subcommands.
|
|
#
|
|
# Sourced by update_android_hosts.sh; split out to keep it under the 250-line cap.
|
|
# Sourced rather than run, so it inherits the caller's strict mode.
|
|
|
|
# Install/update the guardian module
|
|
cmd_install() {
|
|
ensure_device_ready
|
|
|
|
local module_zip
|
|
module_zip=$(build_module)
|
|
|
|
log "Pushing module to device..."
|
|
adb push "$module_zip" /sdcard/android_guardian.zip || die "Failed to push module"
|
|
|
|
log "Installing module..."
|
|
adb shell "su -c 'mkdir -p $MODULE_DEST'" || die "Failed to create module directory"
|
|
adb shell "su -c 'cd $MODULE_DEST && unzip -o /sdcard/android_guardian.zip'" || die "Failed to extract module"
|
|
adb shell "su -c 'chmod 755 $MODULE_DEST/*.sh'"
|
|
adb shell "su -c 'rm /sdcard/android_guardian.zip'"
|
|
|
|
# Set up guardian data directory
|
|
log "Setting up guardian data..."
|
|
adb shell "su -c 'mkdir -p $GUARDIAN_DATA_DIR'"
|
|
adb shell "su -c 'echo ENABLED > $GUARDIAN_DATA_DIR/control'"
|
|
|
|
# Copy blocked apps list
|
|
adb push "$GUARDIAN_MODULE_DIR/blocked_apps.txt" /sdcard/blocked_apps.txt || die "Failed to push blocked apps list"
|
|
adb shell "su -c 'cp /sdcard/blocked_apps.txt $GUARDIAN_DATA_DIR/blocked_apps.txt'"
|
|
adb shell "su -c 'rm /sdcard/blocked_apps.txt'"
|
|
|
|
# Create hosts backup for tamper protection
|
|
adb shell "su -c 'cp $MODULE_DEST/system/etc/hosts $GUARDIAN_DATA_DIR/hosts.backup'"
|
|
|
|
# Immediately uninstall any currently installed blocked apps
|
|
log "Checking for blocked apps to remove..."
|
|
uninstall_blocked_apps
|
|
|
|
echo ""
|
|
echo "=========================================="
|
|
echo " ✓ Android Guardian installed!"
|
|
echo "=========================================="
|
|
echo ""
|
|
echo "Features enabled:"
|
|
echo " • Hosts-based ad/tracker blocking"
|
|
echo " • App installation blocking"
|
|
echo " • Tamper protection"
|
|
echo ""
|
|
echo "⚠️ This can ONLY be controlled via ADB:"
|
|
echo " Disable: $0 disable"
|
|
echo " Enable: $0 enable"
|
|
echo " Status: $0 status"
|
|
echo ""
|
|
echo "Reboot your device to activate the module."
|
|
echo ""
|
|
}
|
|
|
|
# Uninstall currently installed blocked apps
|
|
uninstall_blocked_apps() {
|
|
local blocked_apps
|
|
blocked_apps=$(grep -v '^#' "$GUARDIAN_MODULE_DIR/blocked_apps.txt" | grep -v '^$' || true)
|
|
|
|
for package in $blocked_apps; do
|
|
if adb shell "pm list packages" 2>/dev/null | grep -q "package:$package"; then
|
|
log "Uninstalling blocked app: $package"
|
|
adb shell "pm uninstall $package" 2>/dev/null || true
|
|
fi
|
|
done
|
|
}
|
|
|
|
# Show status
|
|
cmd_status() {
|
|
ensure_device_ready
|
|
|
|
echo ""
|
|
echo "=== Android Guardian Status ==="
|
|
echo ""
|
|
|
|
# Check if module is installed
|
|
if adb shell "su -c 'test -d $MODULE_DEST'" 2>/dev/null; then
|
|
echo "Module: INSTALLED"
|
|
else
|
|
echo "Module: NOT INSTALLED"
|
|
return
|
|
fi
|
|
|
|
# Check control status
|
|
local status
|
|
status=$(adb shell "su -c 'cat $GUARDIAN_DATA_DIR/control 2>/dev/null || echo UNKNOWN'" | tr -d '\r')
|
|
echo "Status: $status"
|
|
|
|
# Check if module is "disabled" in Magisk UI (should be auto-fixed by watchdog)
|
|
local magisk_disabled
|
|
if adb shell "su -c 'test -f $MODULE_DEST/disable'" 2>/dev/null; then
|
|
magisk_disabled="YES (watchdog should fix this)"
|
|
else
|
|
magisk_disabled="No"
|
|
fi
|
|
echo "Magisk UI disabled: $magisk_disabled"
|
|
|
|
# Check if watchdog is running
|
|
local watchdog_running
|
|
watchdog_running=$(adb shell "su -c 'pgrep -f watchdog.sh 2>/dev/null | wc -l'" | tr -d '\r')
|
|
if [ "$watchdog_running" -gt 0 ] 2>/dev/null; then
|
|
echo "Watchdog: RUNNING ($watchdog_running processes)"
|
|
else
|
|
echo "Watchdog: NOT RUNNING (reboot phone to start)"
|
|
fi
|
|
|
|
# Check hosts file
|
|
local hosts_entries
|
|
hosts_entries=$(adb shell "su -c 'grep -c \"^0.0.0.0\" /system/etc/hosts 2>/dev/null || echo 0'" | tr -d '\r')
|
|
echo "Blocked domains: $hosts_entries"
|
|
|
|
# Check blocked apps count
|
|
local blocked_count
|
|
blocked_count=$(adb shell "su -c 'grep -v \"^#\" $GUARDIAN_DATA_DIR/blocked_apps.txt 2>/dev/null | grep -v \"^$\" | wc -l || echo 0'" | tr -d '\r')
|
|
echo "Blocked app rules: $blocked_count packages"
|
|
|
|
echo ""
|
|
echo "Protection: Module cannot be disabled from Magisk UI"
|
|
echo " Only controllable via: $0 disable/enable"
|
|
echo ""
|
|
}
|
|
|
|
# Disable guardian
|
|
cmd_disable() {
|
|
ensure_device_ready
|
|
|
|
log "Disabling Android Guardian..."
|
|
adb shell "su -c 'echo DISABLED > $GUARDIAN_DATA_DIR/control'" || die "Failed to disable guardian"
|
|
|
|
echo ""
|
|
echo "✓ Guardian DISABLED"
|
|
echo " Hosts blocking still active until reboot"
|
|
echo " App blocking service paused"
|
|
echo ""
|
|
echo "To re-enable: $0 enable"
|
|
echo ""
|
|
}
|
|
|
|
# Enable guardian
|
|
cmd_enable() {
|
|
ensure_device_ready
|
|
|
|
log "Enabling Android Guardian..."
|
|
adb shell "su -c 'echo ENABLED > $GUARDIAN_DATA_DIR/control'" || die "Failed to enable guardian"
|
|
|
|
echo ""
|
|
echo "✓ Guardian ENABLED"
|
|
echo ""
|
|
}
|
|
|
|
# Uninstall module
|
|
cmd_uninstall() {
|
|
ensure_device_ready
|
|
|
|
# Check if disabled first
|
|
local status
|
|
status=$(adb shell "su -c 'cat $GUARDIAN_DATA_DIR/control 2>/dev/null || echo ENABLED'" | tr -d '\r')
|
|
|
|
if [[ $status != "DISABLED" ]]; then
|
|
echo ""
|
|
echo "⚠️ Guardian must be disabled before uninstalling!"
|
|
echo " Run: $0 disable"
|
|
echo " Then: $0 uninstall"
|
|
echo ""
|
|
exit 1
|
|
fi
|
|
|
|
log "Removing Android Guardian..."
|
|
adb shell "su -c 'rm -rf $MODULE_DEST'"
|
|
adb shell "su -c 'rm -rf $GUARDIAN_DATA_DIR'"
|
|
|
|
echo ""
|
|
echo "✓ Guardian uninstalled"
|
|
echo " Reboot to remove hosts blocking"
|
|
echo ""
|
|
}
|
|
|
|
# Show logs
|
|
cmd_logs() {
|
|
ensure_device_ready
|
|
|
|
echo "=== Guardian Logs ==="
|
|
adb shell "su -c 'cat $GUARDIAN_DATA_DIR/guardian.log 2>/dev/null || echo \"No logs yet\"'"
|
|
}
|
|
|
|
# Block an app
|
|
cmd_block_app() {
|
|
local package="${1:-}"
|
|
|
|
if [[ -z $package ]]; then
|
|
echo "Usage: $0 block-app <package.name>"
|
|
echo "Example: $0 block-app com.ubercab.eats"
|
|
exit 1
|
|
fi
|
|
|
|
ensure_device_ready
|
|
|
|
log "Adding $package to block list..."
|
|
adb shell "su -c 'echo \"$package\" >> $GUARDIAN_DATA_DIR/blocked_apps.txt'"
|
|
|
|
# Also add to local file
|
|
echo "$package" >>"$GUARDIAN_MODULE_DIR/blocked_apps.txt"
|
|
|
|
# Try to uninstall if currently installed
|
|
if adb shell "pm list packages" 2>/dev/null | grep -q "package:$package"; then
|
|
log "Uninstalling $package..."
|
|
adb shell "pm uninstall $package" 2>/dev/null || true
|
|
fi
|
|
|
|
echo "✓ $package added to block list"
|
|
}
|
|
|
|
# Unblock an app
|
|
cmd_unblock_app() {
|
|
local package="${1:-}"
|
|
|
|
if [[ -z $package ]]; then
|
|
echo "Usage: $0 unblock-app <package.name>"
|
|
exit 1
|
|
fi
|
|
|
|
ensure_device_ready
|
|
|
|
log "Removing $package from block list..."
|
|
adb shell "su -c 'grep -v \"^$package\$\" $GUARDIAN_DATA_DIR/blocked_apps.txt > $GUARDIAN_DATA_DIR/blocked_apps.tmp && mv $GUARDIAN_DATA_DIR/blocked_apps.tmp $GUARDIAN_DATA_DIR/blocked_apps.txt'"
|
|
|
|
# Also remove from local file
|
|
grep -v "^$package$" "$GUARDIAN_MODULE_DIR/blocked_apps.txt" >"$GUARDIAN_MODULE_DIR/blocked_apps.tmp" && mv "$GUARDIAN_MODULE_DIR/blocked_apps.tmp" "$GUARDIAN_MODULE_DIR/blocked_apps.txt"
|
|
|
|
echo "✓ $package removed from block list"
|
|
}
|
|
|
|
# List blocked apps
|
|
cmd_list_blocked() {
|
|
ensure_device_ready
|
|
|
|
echo "=== Blocked Apps ==="
|
|
adb shell "su -c 'cat $GUARDIAN_DATA_DIR/blocked_apps.txt 2>/dev/null'" | grep -v "^#" | grep -v "^$" || echo "No blocked apps"
|
|
}
|