13 Commits
Author SHA1 Message Date
root 520804d732 fix: dns nameservers 2026-04-14 17:16:42 +04:00
root 179470709f cosmetic: terminal output 2026-04-14 15:58:04 +04:00
root d17ec7e084 fix: fixed pattern 2026-04-14 15:41:11 +04:00
root 530988a13f fix: update storage_type condition 2026-04-14 13:33:51 +04:00
root 6a586c1de7 docs: update readme 2026-04-14 13:32:53 +04:00
root ab76f89697 fix: update comments 2026-04-14 13:32:39 +04:00
root 6f512689d0 docs: update readme 2026-04-14 13:18:23 +04:00
root 516de4985f feat: move config to .env
fix: nfs/cifs dependencies
2026-04-14 13:16:43 +04:00
root 5b8ef165a1 fix: dependencies for cifs 2026-04-13 20:48:01 +04:00
root b6275cf81f fix: minor fixes for apk version 2026-04-13 15:25:28 +04:00
root 45bec3a869 merge: fix conflicts in readme 2026-04-13 15:16:05 +04:00
root 3b8c3d4207 feat: switched to apk version 2026-04-13 15:13:18 +04:00
root 79f6f004cf feat: switch to apk 2026-04-13 15:07:22 +04:00
4 changed files with 33 additions and 42 deletions
+7 -6
View File
@@ -1,4 +1,4 @@
# OpenWrt Backup Manager (OPKG Version)
# OpenWrt Backup Manager (APK Version)
Автономный набор скриптов для бэкапа и восстановления конфигурации и пакетов на OpenWrt.
@@ -8,7 +8,7 @@
- системных конфигов
- пользовательских файлов
- списка установленных пакетов (`opkg`)
- списка установленных пакетов (`apk`)
#### Восстановление
@@ -18,7 +18,7 @@
#### Поддержка удалённого хранилища
- `NFS`
- `SBM`
- `SMB`
#### Очистка старых бэкапов (локально и удалённо)
@@ -29,7 +29,7 @@
├── .env # конфиг-файл
├── backup-manager.sh # основной скрипт
├── backup-configs.sh # сбор конфигураций
├── backup-opkg.sh # работа с пакетами
├── backup-apk.sh # работа с пакетами
├── README.md
```
@@ -127,17 +127,18 @@ H_REPLACE="wpad dnsmasq"
- определяет пакеты, установленные пользователем
- исключает зависимости
## Зависимости
#### Для NFS
```bash
opkg install nfs-utils kmod-fs-nfs kmod-fs-nfs-v3 kmod-fs-nfs-v4
apk add nfs-utils kmod-fs-nfs kmod-fs-nfs-v3 kmod-fs-nfs-v4
```
#### Для SMB
```bash
opkg install cifsmount kmod-fs-cifs
apk add cifsmount kmod-fs-cifs
```
## Особенности
+15 -30
View File
@@ -6,8 +6,6 @@ H_REPLACE="$3"
[ -z "$CMD" ] || [ -z "$LOCAL_LST" ] || [ -z "$H_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"
@@ -21,28 +19,11 @@ fix_dns() {
}
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
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
@@ -62,34 +43,38 @@ case "$CMD" in
[ ! -f /etc/resolv.conf-backup ] && cp /etc/resolv.conf /etc/resolv.conf-backup
fix_dns
printf "Updating package lists... "
opkg update >/dev/null 2>&1
apk update >/dev/null 2>&1
echo "OK"
echo "Removing conflicts:"
if [ -n "$H_REPLACE" ]; then
REMOVABLE=$(opkg list-installed | grep -E $(echo "$H_REPLACE" | tr ' ' '|') | awk '{print $1}')
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"
opkg remove "$p" --force-depends >/dev/null 2>&1
apk del "$p" >/dev/null 2>&1
echo "OK"
done
fi
echo "Installing packages:"
for pkg in $(cat "$LOCAL_LST"); do
if opkg list-installed | grep -q "^$pkg "; then
if apk info -e "$pkg" >/dev/null 2>&1; then
echo " [=] $pkg... is already installed"
else
fix_dns
printf " [+] $pkg... "
if opkg install "$pkg" >/dev/null 2>&1; then
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"
echo " [!] Reboot required"
;;
esac
+2 -2
View File
@@ -2,7 +2,7 @@
LOCAL_FILE="$1"
LOCAL_LST="$2"
SCR_OPKG="$3"
SCR_APK="$3"
C_LIST="$4"
H_REPLACE="$5"
C_EXCLUDE="$6"
@@ -12,7 +12,7 @@ C_EXCLUDE="$6"
TMP_DIR="/tmp/backup_stack"
rm -rf "$TMP_DIR" && mkdir -p "$TMP_DIR"
$SCR_OPKG write "$LOCAL_LST" "$H_REPLACE"
$SCR_APK write "$LOCAL_LST" "$H_REPLACE"
echo "Included:"
for p in $C_LIST; do
+9 -4
View File
@@ -14,7 +14,7 @@ HNAME=$(uci get system.@system[0].hostname)
DATE=$(date +%Y-%m-%d_%H-%M)
L_BACKUP_DIR="$DIR/local_backups"
SCR_BACKUP="$DIR/backup-configs.sh"
SCR_OPKG="$DIR/backup-opkg.sh"
SCR_APK="$DIR/backup-apk.sh"
mkdir -p "$L_BACKUP_DIR"
@@ -40,11 +40,16 @@ check_dependencies() {
local pkgs=""
[ "$STORAGE_TYPE" = "nfs" ] && pkgs="nfs-utils kmod-fs-nfs kmod-fs-nfs-v3 kmod-fs-nfs-v4"
[ "$STORAGE_TYPE" = "smb" ] && pkgs="cifsmount kmod-fs-cifs"
local missing=""
for pkg in $pkgs; do
opkg list-installed | grep -q "^$pkg " || missing="$missing $pkg"
if ! apk info -e "$pkg" >/dev/null 2>&1; then
missing="$missing $pkg"
fi
done
if [ -n "$missing" ]; then
echo "FAILED"
echo " [!] Missing: $missing. Install them to use remote backup."
return 1
fi
@@ -111,7 +116,7 @@ case "$1" in
LOCAL_FILE="$L_BACKUP_DIR/backup_${HNAME}_${DATE}.tar.gz"
LOCAL_LST="$L_BACKUP_DIR/packages_${HNAME}_${DATE}.lst"
REMOTE_STATUS="FAILED"
$SCR_BACKUP "$LOCAL_FILE" "$LOCAL_LST" "$SCR_OPKG" "$C_LIST" "$H_REPLACE" "$C_EXCLUDE"
$SCR_BACKUP "$LOCAL_FILE" "$LOCAL_LST" "$SCR_APK" "$C_LIST" "$H_REPLACE" "$C_EXCLUDE"
manage_local_backups
if check_network && check_dependencies && mount_share; then
printf "Copying to %s storage... " "$STORAGE_TYPE"
@@ -168,7 +173,7 @@ case "$1" in
2)
select_file "$R_DIR" ".lst"
if [ -n "$SELECTED_PATH" ]; then
$SCR_OPKG restore "$SELECTED_PATH" "$H_REPLACE"
$SCR_APK restore "$SELECTED_PATH" "$H_REPLACE"
fi
;;
*)