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
pyrschtjag 43243564cc Merge pull request 'docs: update_readme' (#5) from update_readme into main
Reviewed-on: https://gitea.oyacoi.ru/pyrschtjag/backup-manager/pulls/5
2026-04-04 02:44:15 +04:00
pyrschtjag 6d16f11007 docs: update_readme 2026-04-04 02:43:31 +04:00
5 changed files with 79 additions and 63 deletions
+37
View File
@@ -0,0 +1,37 @@
# "smb" or "nfs"
STORAGE_TYPE="nfs"
# ip or hostname
S_HOST="nfs.lan"
# /path/to/backup
S_PATH="/mnt/media1/backup"
SMB_USER="guest"
SMB_PASS="guest"
LOCAL_KEEP=10
HOST_KEEP=30
S_MOUNT="/tmp/share"
C_LIST="
/etc/config
/etc/xray
/etc/unbound
/root/.ssh
/opt/.xray-config
/opt/.backup-manager
/etc/nftables.d/10-netmap.nft
/etc/nftables.d/15-pbr-mark.nft
/etc/hotplug.d/iface/99-xray-restart
/etc/zabbix_agentd.conf
/etc/dropbear
/etc/banner
/etc/init.d/xray
/etc/crontabs/root
"
C_EXCLUDE="/opt/.backup-manager/local_backups"
H_REPLACE="wpad dnsmasq"
+1
View File
@@ -1 +1,2 @@
local_backups/ local_backups/
.env
+22 -15
View File
@@ -1,4 +1,4 @@
# OpenWrt Backup Manager # OpenWrt Backup Manager (APK Version)
Автономный набор скриптов для бэкапа и восстановления конфигурации и пакетов на OpenWrt. Автономный набор скриптов для бэкапа и восстановления конфигурации и пакетов на OpenWrt.
@@ -8,7 +8,7 @@
- системных конфигов - системных конфигов
- пользовательских файлов - пользовательских файлов
- списка установленных пакетов (apk) - списка установленных пакетов (`apk`)
#### Восстановление #### Восстановление
@@ -17,8 +17,8 @@
#### Поддержка удалённого хранилища #### Поддержка удалённого хранилища
- NFS - `NFS`
- SMB (CIFS) - `SMB`
#### Очистка старых бэкапов (локально и удалённо) #### Очистка старых бэкапов (локально и удалённо)
@@ -26,6 +26,7 @@
```bash ```bash
. .
├── .env # конфиг-файл
├── backup-manager.sh # основной скрипт ├── backup-manager.sh # основной скрипт
├── backup-configs.sh # сбор конфигураций ├── backup-configs.sh # сбор конфигураций
├── backup-apk.sh # работа с пакетами ├── backup-apk.sh # работа с пакетами
@@ -34,7 +35,13 @@
## Настройка ## Настройка
Отредактируйте переменные в backup-manager.sh: Скопируйте пример настроек:
```bash
cp ./.env-example ./.env
```
Отредактируйте переменные в `.env`:
### Хранилище ### Хранилище
@@ -96,8 +103,8 @@ H_REPLACE="wpad dnsmasq"
#### Что происходит: #### Что происходит:
- создаётся архив .tar.gz - создаётся архив `.tar.gz`
- сохраняется список пакетов .lst - сохраняется список пакетов `.lst`
- копируется на удалённое хранилище (если доступно) - копируется на удалённое хранилище (если доступно)
### Восстановление ### Восстановление
@@ -125,21 +132,21 @@ H_REPLACE="wpad dnsmasq"
#### Для NFS #### Для NFS
```sh ```bash
opkg install kmod-fs-nfs kmod-fs-nfs-v3 kmod-fs-nfs-v4 nfs-utils apk add nfs-utils kmod-fs-nfs kmod-fs-nfs-v3 kmod-fs-nfs-v4
``` ```
#### Для SMB #### Для SMB
```sh ```bash
opkg install kmod-fs-cifs cifs-utils apk add cifsmount kmod-fs-cifs
``` ```
## Особенности ## Особенности
- Используется временная директория: /tmp - Используется временная директория: `/tmp`
- При восстановлении пакетов: - При восстановлении пакетов:
- временно правится DNS (Cloudflare) - временно правится DNS (Cloudflare)
- Для восстановления конфигурации используется: - Для восстановления конфигурации используется:
```sh ```bash
sysupgrade -r backup.tar.gz sysupgrade -r backup.tar.gz
``` ```
@@ -147,11 +154,11 @@ sysupgrade -r backup.tar.gz
#### Автоматически: #### Автоматически:
- старые локальные бэкапы - старые локальные бэкапы
- удалённые файлы старше HOST_KEEP дней - удалённые файлы старше `HOST_KEEP` дней
## Пример cron ## Пример cron
```sh ```bash
0 3 * * * /opt/.backup-manager/backup-manager.sh backup 0 3 * * * /opt/.backup-manager/backup-manager.sh backup
``` ```
Regular → Executable
+6 -5
View File
@@ -11,6 +11,7 @@ fix_dns() {
local dns2="1.0.0.1" local dns2="1.0.0.1"
if ! grep -q "$dns1" /etc/resolv.conf; then if ! grep -q "$dns1" /etc/resolv.conf; then
printf "Patching DNS for restore... " printf "Patching DNS for restore... "
sed -i '/^nameserver/d' /etc/resolv.conf
sed -i "1i nameserver $dns1" /etc/resolv.conf sed -i "1i nameserver $dns1" /etc/resolv.conf
sed -i "2i nameserver $dns2" /etc/resolv.conf sed -i "2i nameserver $dns2" /etc/resolv.conf
echo "OK" echo "OK"
@@ -47,7 +48,7 @@ case "$CMD" in
echo "Removing conflicts:" echo "Removing conflicts:"
if [ -n "$H_REPLACE" ]; then if [ -n "$H_REPLACE" ]; then
local pattern=$(echo "$H_REPLACE" | sed 's/ /|/g') pattern=$(echo "$H_REPLACE" | sed 's/ /|/g')
REMOVABLE=$(apk list --installed | grep -E "$pattern" | awk '{print $1}' | sed 's/-[0-9].*$//') REMOVABLE=$(apk list --installed | grep -E "$pattern" | awk '{print $1}' | sed 's/-[0-9].*$//')
for p in $REMOVABLE; do for p in $REMOVABLE; do
printf " [-] %s... " "$p" printf " [-] %s... " "$p"
@@ -59,7 +60,7 @@ case "$CMD" in
echo "Installing packages:" echo "Installing packages:"
for pkg in $(cat "$LOCAL_LST"); do for pkg in $(cat "$LOCAL_LST"); do
if apk info -e "$pkg" >/dev/null 2>&1; then if apk info -e "$pkg" >/dev/null 2>&1; then
echo " [s] $pkg... is already installed" echo " [=] $pkg... is already installed"
else else
fix_dns fix_dns
printf " [+] $pkg... " printf " [+] $pkg... "
@@ -73,7 +74,7 @@ case "$CMD" in
[ -f /etc/resolv.conf-backup ] && mv /etc/resolv.conf-backup /etc/resolv.conf [ -f /etc/resolv.conf-backup ] && mv /etc/resolv.conf-backup /etc/resolv.conf
echo "Summary:" echo "Summary:"
echo " Restore complete" echo " [+] Restoring packages completed"
echo " Reboot is recommended" echo " [!] Reboot required"
;; ;;
esac esac
+13 -43
View File
@@ -1,50 +1,17 @@
#!/bin/sh #!/bin/sh
# "smb" or "nfs" DIR=$(cd "$(dirname "$0")" && pwd)
STORAGE_TYPE="nfs" ENV_FILE="$DIR/.env"
# ip or hostname if [ -f "$ENV_FILE" ]; then
S_HOST="nfs.lan" . "$ENV_FILE"
else
# /path/to/backup echo " [!] Error: .env file not found at $ENV_FILE"
S_PATH="/mnt/media1/backup" exit 1
fi
SMB_USER="guest"
SMB_PASS="guest"
LOCAL_KEEP=10
HOST_KEEP=30
HNAME=$(uci get system.@system[0].hostname) HNAME=$(uci get system.@system[0].hostname)
DATE=$(date +%Y-%m-%d_%H-%M) DATE=$(date +%Y-%m-%d_%H-%M)
S_MOUNT="/tmp/share"
C_LIST="
/etc/config
/etc/xray
/etc/unbound
/root/.ssh
/opt/.xray-config
/opt/.backup-manager
/etc/nftables.d/10-netmap.nft
/etc/nftables.d/15-pbr-mark.nft
/etc/hotplug.d/iface/99-xray-restart
/etc/zabbix_agentd.conf
/etc/dropbear
/etc/banner
/etc/init.d/xray
/etc/crontabs/root
"
C_EXCLUDE="
/opt/.backup-manager/local_backups
"
H_REPLACE="wpad dnsmasq"
DIR=$(cd "$(dirname "$0")" && pwd)
#DIR="/opt/.backup-manager"
L_BACKUP_DIR="$DIR/local_backups" L_BACKUP_DIR="$DIR/local_backups"
SCR_BACKUP="$DIR/backup-configs.sh" SCR_BACKUP="$DIR/backup-configs.sh"
SCR_APK="$DIR/backup-apk.sh" SCR_APK="$DIR/backup-apk.sh"
@@ -71,8 +38,8 @@ check_network() {
check_dependencies() { check_dependencies() {
printf "Checking %s dependencies... " "$STORAGE_TYPE" printf "Checking %s dependencies... " "$STORAGE_TYPE"
local pkgs="" local pkgs=""
[ "$STORAGE_TYPE" = "nfs" ] && pkgs="kmod-fs-nfs kmod-fs-nfs-v3 kmod-fs-nfs-v4 nfs-utils" [ "$STORAGE_TYPE" = "nfs" ] && pkgs="nfs-utils kmod-fs-nfs kmod-fs-nfs-v3 kmod-fs-nfs-v4"
[ "$STORAGE_TYPE" = "smb" ] && pkgs="kmod-fs-cifs cifs-utils" [ "$STORAGE_TYPE" = "smb" ] && pkgs="cifsmount kmod-fs-cifs"
local missing="" local missing=""
for pkg in $pkgs; do for pkg in $pkgs; do
@@ -198,6 +165,9 @@ case "$1" in
if [ -n "$SELECTED_PATH" ]; then if [ -n "$SELECTED_PATH" ]; then
[ "$s_choice" -eq 2 ] && { cp "$SELECTED_PATH" /tmp/restore.tar.gz; SELECTED_PATH="/tmp/restore.tar.gz"; umount "$S_MOUNT"; } [ "$s_choice" -eq 2 ] && { cp "$SELECTED_PATH" /tmp/restore.tar.gz; SELECTED_PATH="/tmp/restore.tar.gz"; umount "$S_MOUNT"; }
sysupgrade -r "$SELECTED_PATH" sysupgrade -r "$SELECTED_PATH"
echo "Summary:"
echo " [+] Restoring configs completed"
echo " [!] Reboot required"
fi fi
;; ;;
2) 2)