testsAndMisc/linux_configuration/scripts/single_use/utils/lib/bl9000_backup.sh
Krzysztof kuhy Rudnicki 7a74804786 Split three more linux_configuration giants
raspberry_pi_nextcloud.sh 1276 -> 163, root_bl9000.sh 1116 -> 211,
lookup_docs.sh 942 -> 165. Sixteen new libs.

lookup_python was one 300-line function; its keyword-to-anchor mapping
became python_keyword_doc, emitting result and desc tab-separated so the
caller keeps its control flow.

bl9000_mtkclient had cd X; work; cd - with three return paths.
install_mtkclient became a subshell; extract_boot_with_mtkclient could
not, since it exports BOOT_IMG - so the venv check moved before the cd,
the cd is guarded, and the restores use a saved $PWD.

Four more unguarded cd calls fixed, and a third instance of the lib
chaining bug flattened. lookup_docs.sh had no SCRIPT_DIR at all.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011w2Pj4Ek3ZNMQVYcFHgXDY
2026-08-16 19:43:55 +02:00

166 lines
6.5 KiB
Bash
Executable File

#!/bin/bash
# Device data backup before rooting.
#
# Sourced by root_bl9000.sh; split out to keep bl9000_deps.sh under the
# 250-line cap. Sourced rather than run, so it inherits the caller's
# strict mode and the variables defined above the source line.
backup_device_data() {
print_header "Backing Up Device Data"
local backup_dir
backup_dir="${WORK_DIR}/backup_$(date +%Y%m%d_%H%M%S)"
mkdir -p "$backup_dir"
log "Backup directory: $backup_dir" # Check device connection first
if ! adb get-state > /dev/null 2>&1; then
error "Device not connected. Please connect your device first."
return 1
fi
log "Starting comprehensive backup process..."
# 1. Backup internal storage (DCIM, Pictures, Documents, Downloads, etc.)
log "Backing up internal storage (this may take a while)..."
local storage_dirs=("DCIM" "Pictures" "Documents" "Download" "Music" "Movies" "WhatsApp" "Telegram")
for dir in "${storage_dirs[@]}"; do
if adb shell "[ -d /sdcard/$dir ]" 2> /dev/null; then
log " → Backing up /sdcard/$dir..."
if adb pull "/sdcard/$dir" "$backup_dir/$dir" 2>&1 | grep -v "^$"; then
log " ✓ $dir backed up successfully"
else
warn " ⚠ Could not backup $dir (may be empty or inaccessible)"
fi
fi
done
# 2. Backup SMS/MMS (if possible)
log "Backing up SMS/MMS database..."
if adb shell "su -c 'cp /data/data/com.android.providers.telephony/databases/mmssms.db /sdcard/mmssms.db'" 2> /dev/null; then
adb pull /sdcard/mmssms.db "$backup_dir/mmssms.db" 2> /dev/null && log " ✓ SMS/MMS backed up"
adb shell "rm /sdcard/mmssms.db" 2> /dev/null || true
else
warn " ⚠ SMS/MMS backup requires root (skipping)"
fi
# 3. Backup contacts
log "Backing up contacts..."
if adb shell "su -c 'cp /data/data/com.android.providers.contacts/databases/contacts2.db /sdcard/contacts2.db'" 2> /dev/null; then
adb pull /sdcard/contacts2.db "$backup_dir/contacts2.db" 2> /dev/null && log " ✓ Contacts backed up"
adb shell "rm /sdcard/contacts2.db" 2> /dev/null || true
else
warn " ⚠ Contacts backup requires root (skipping)"
fi
# 4. Backup call logs
log "Backing up call logs..."
if adb shell "su -c 'cp /data/data/com.android.providers.contacts/databases/calllog.db /sdcard/calllog.db'" 2> /dev/null; then
adb pull /sdcard/calllog.db "$backup_dir/calllog.db" 2> /dev/null && log " ✓ Call logs backed up"
adb shell "rm /sdcard/calllog.db" 2> /dev/null || true
else
warn " ⚠ Call logs backup requires root (skipping)"
fi
# 5. Backup app list
log "Backing up installed apps list..."
adb shell "pm list packages -f" > "$backup_dir/installed_apps.txt"
log " ✓ App list saved to installed_apps.txt"
# 6. Backup APKs for user-installed apps (optional, can be large)
if confirm "Backup APK files for installed apps? (This can take a long time and use lots of space)"; then
log "Backing up user-installed APKs..."
local apk_dir="$backup_dir/apks"
mkdir -p "$apk_dir"
# Get user-installed packages
local user_apps
user_apps=$(adb shell "pm list packages -3 -f" | sed 's/package://' | cut -d'=' -f2)
local count=0
while IFS= read -r pkg; do
if [[ -n $pkg ]]; then
log " → Backing up $pkg..."
local apk_path
apk_path=$(adb shell "pm path $pkg" | head -n1 | sed 's/package://')
if [[ -n $apk_path ]]; then
adb pull "$apk_path" "$apk_dir/${pkg}.apk" > /dev/null 2>&1 && count=$((count + 1))
fi
fi
done <<< "$user_apps"
log " ✓ Backed up $count APK files"
fi
# 7. Full ADB backup (app data, if device supports it)
log "Creating full ADB backup (app data)..."
if confirm "Create full ADB backup? (You'll need to confirm on your device)"; then
echo
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo " On your phone: Tap 'Back up my data' when prompted"
echo " You can set a password or leave it blank"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo
if adb backup -apk -shared -all -system -f "$backup_dir/full_backup.ab"; then
log " ✓ Full ADB backup completed"
log " Note: Restore with: adb restore full_backup.ab"
else
warn " ⚠ ADB backup failed or was cancelled"
fi
fi
# 8. Backup device info
log "Saving device information..."
{
echo "Device Backup Information"
echo "========================="
echo "Date: $(date)"
echo
echo "Device Model: $(adb shell getprop ro.product.model | tr -d '\r\n')"
echo "Android Version: $(adb shell getprop ro.build.version.release | tr -d '\r\n')"
echo "Build Number: $(adb shell getprop ro.build.display.id | tr -d '\r\n')"
echo "Security Patch: $(adb shell getprop ro.build.version.security_patch | tr -d '\r\n')"
echo "Serial: $(adb shell getprop ro.serialno | tr -d '\r\n')"
echo
echo "Installed Apps:"
adb shell "pm list packages -3" | sed 's/package:/ - /'
} > "$backup_dir/device_info.txt"
log " ✓ Device info saved"
# Summary
local backup_size
backup_size=$(du -sh "$backup_dir" 2> /dev/null | cut -f1 || echo "unknown")
echo
echo -e "${GREEN}╔═══════════════════════════════════════════════════════╗${NC}"
echo -e "${GREEN}║ Backup Completed Successfully! ║${NC}"
echo -e "${GREEN}╚═══════════════════════════════════════════════════════╝${NC}"
echo
log "Backup location: $backup_dir"
log "Backup size: $backup_size"
echo
echo "What was backed up:"
echo " ✓ Photos (DCIM)"
echo " ✓ Pictures"
echo " ✓ Documents"
echo " ✓ Downloads"
echo " ✓ Music"
echo " ✓ Movies"
echo " ✓ WhatsApp data (if present)"
echo " ✓ Telegram data (if present)"
echo " ✓ Installed apps list"
echo " ✓ Device information"
if [[ -f "$backup_dir/full_backup.ab" ]]; then
echo " ✓ Full app data backup"
fi
if [[ -d "$backup_dir/apks" ]]; then
echo " ✓ APK files"
fi
echo
log "Keep this backup safe! You'll need it to restore your data after rooting."
return 0
}