#!/bin/sh CMD="$1" LOCAL_LST="$2" H_REPLACE="$3" [ -z "$CMD" ] || [ -z "$LOCAL_LST" ] || [ -z "$H_REPLACE" ] && echo "Missing params!" && exit 1 fix_dns() { local dns1="1.1.1.1" local dns2="1.0.0.1" if ! grep -q "$dns1" /etc/resolv.conf; then printf "Patching DNS for restore... " sed -i '/^nameserver/d' /etc/resolv.conf sed -i "1i nameserver $dns1" /etc/resolv.conf sed -i "2i nameserver $dns2" /etc/resolv.conf echo "OK" fi } list_user_packages() { if [ -f /rom/etc/apk/world ]; then grep -v -F -x -f /rom/etc/apk/world /etc/apk/world | sed 's/=.*//' else cat /etc/apk/world | sed 's/=.*//' fi } case "$CMD" in write) mkdir -p "$(dirname "$LOCAL_LST")" echo "Package list:" > "$LOCAL_LST" for pkg in $(list_user_packages); do echo "$pkg" >> "$LOCAL_LST" echo " [+] $pkg" done ;; restore) [ ! -f "$LOCAL_LST" ] && echo "File not found!" && exit 1 [ ! -f /etc/resolv.conf-backup ] && cp /etc/resolv.conf /etc/resolv.conf-backup fix_dns printf "Updating package lists... " apk update >/dev/null 2>&1 echo "OK" echo "Removing conflicts:" if [ -n "$H_REPLACE" ]; then pattern=$(echo "$H_REPLACE" | sed 's/ /|/g') REMOVABLE=$(apk list --installed | grep -E "$pattern" | awk '{print $1}' | sed 's/-[0-9].*$//') for p in $REMOVABLE; do printf " [-] %s... " "$p" apk del "$p" >/dev/null 2>&1 echo "OK" done fi echo "Installing packages:" for pkg in $(cat "$LOCAL_LST"); do if apk info -e "$pkg" >/dev/null 2>&1; then echo " [=] $pkg... is already installed" else fix_dns printf " [+] $pkg... " if apk add "$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 "Summary:" echo " [+] Restoring packages completed" echo " [!] Reboot required" ;; esac