update_0.1

This commit is contained in:
2026-01-25 12:40:04 +00:00
parent ee5b9570a5
commit b51b792e27
3 changed files with 252 additions and 0 deletions
Executable
+97
View File
@@ -0,0 +1,97 @@
#!/bin/sh
CMD="$1"
PKG_FILE="$2"
HOT_REPLACE="$3"
[ -z "$CMD" ] || [ -z "$PKG_FILE" ] || [ -z "$HOT_REPLACE" ] && echo "Missing params!" && exit 1
TMP_DIR="/tmp/opkg_restore"
fix_dns() {
local dns1="1.1.1.1"
local dns2="1.0.0.1"
if ! grep -q "$dns1" /etc/resolv.conf; then
echo " [+] Patching DNS for restore..."
sed -i "1i nameserver $dns1" /etc/resolv.conf
sed -i "2i nameserver $dns2" /etc/resolv.conf
fi
}
list_user_packages() {
awk -f - << 'EOF'
BEGIN {
status_file = "/usr/lib/opkg/status"
cmd="opkg info busybox | grep '^Installed-Time: '"
if ((cmd | getline line) > 0) {
FLASH_TIME = substr(line, 17)
}
close(cmd)
while ((getline < status_file) > 0) {
if ($1 == "Package:") { pkg = $2 }
if ($1 == "Installed-Time:") {
installed_time = $2
if (installed_time > FLASH_TIME) {
check_cmd = "opkg whatdepends " pkg " | wc -l"
check_cmd | getline whatdepends
close(check_cmd)
if (whatdepends == 3) print pkg
}
}
}
}
EOF
}
case "$CMD" in
write)
mkdir -p "$(dirname "$PKG_FILE")"
echo "Scanning for user-installed packages..."
> "$PKG_FILE"
for pkg in $(list_user_packages); do
echo "$pkg" >> "$PKG_FILE"
echo " [+] $pkg"
done
echo "Total $(wc -l < "$PKG_FILE") packages saved to $PKG_FILE"
;;
restore)
[ ! -f "$PKG_FILE" ] && echo "File not found!" && exit 1
[ ! -f /etc/resolv.conf-backup ] && cp /etc/resolv.conf /etc/resolv.conf-backup
fix_dns
echo "Updating package lists..."
opkg update >/dev/null 2>&1
echo "Phase 1: Removing conflicts ($HOT_REPLACE)..."
if [ -n "$HOT_REPLACE" ]; then
REMOVABLE=$(opkg list-installed | grep -E $(echo "$HOT_REPLACE" | tr ' ' '|') | awk '{print $1}')
for p in $REMOVABLE; do
opkg remove "$p" --force-depends >/dev/null 2>&1
done
fi
echo "Phase 2: Installing packages from list..."
for pkg in $(cat "$PKG_FILE"); do
if opkg list-installed | grep -q "^$pkg "; then
echo " [s] $pkg is already installed"
else
fix_dns
printf " [+] Installing $pkg... "
if opkg install "$pkg" >/dev/null 2>&1; then
echo "OK"
else
echo "FAILED"
fi
fi
done
[ -f /etc/resolv.conf-backup ] && mv /etc/resolv.conf-backup /etc/resolv.conf
echo "Restore complete. Reboot is recommended."
;;
esac