From 516de4985fec1cd28a047dc246e9e2d222064eed Mon Sep 17 00:00:00 2001 From: root Date: Tue, 14 Apr 2026 13:16:43 +0400 Subject: [PATCH] feat: move config to .env fix: nfs/cifs dependencies --- .env-example | 37 +++++++++++++++++++++++++++++++++ .gitignore | 1 + README.md | 38 +++++++++++++++++++-------------- backup-manager.sh | 53 +++++++++-------------------------------------- 4 files changed, 70 insertions(+), 59 deletions(-) create mode 100644 .env-example diff --git a/.env-example b/.env-example new file mode 100644 index 0000000..8f4b06f --- /dev/null +++ b/.env-example @@ -0,0 +1,37 @@ +# "cifs" 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" diff --git a/.gitignore b/.gitignore index b97f4d5..77874d8 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ local_backups/ +.env diff --git a/README.md b/README.md index c766374..364e704 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# OpenWrt Backup Manager +# OpenWrt Backup Manager (APK Version) Автономный набор скриптов для бэкапа и восстановления конфигурации и пакетов на OpenWrt. @@ -8,7 +8,7 @@ - системных конфигов - пользовательских файлов -- списка установленных пакетов (apk) +- списка установленных пакетов (`apk`) #### Восстановление @@ -17,8 +17,8 @@ #### Поддержка удалённого хранилища -- NFS -- SMB (CIFS) +- `NFS` +- `CIFS` #### Очистка старых бэкапов (локально и удалённо) @@ -34,7 +34,13 @@ ## Настройка -Отредактируйте переменные в backup-manager.sh: +Скопируйте пример настроек: + +```bash +cp ./.env-example ./.env +``` + +Отредактируйте переменные в `.env`: ### Хранилище @@ -96,8 +102,8 @@ H_REPLACE="wpad dnsmasq" #### Что происходит: -- создаётся архив .tar.gz -- сохраняется список пакетов .lst +- создаётся архив `.tar.gz` +- сохраняется список пакетов `.lst` - копируется на удалённое хранилище (если доступно) ### Восстановление @@ -125,21 +131,21 @@ H_REPLACE="wpad dnsmasq" #### Для NFS -```sh -opkg install kmod-fs-nfs kmod-fs-nfs-v3 kmod-fs-nfs-v4 nfs-utils +```bash +apk add nfs-utils kmod-fs-nfs kmod-fs-nfs-v3 kmod-fs-nfs-v4 ``` -#### Для SMB -```sh -opkg install kmod-fs-cifs cifs-utils +#### Для CIFS +```bash +apk add cifsmount kmod-fs-cifs ``` ## Особенности -- Используется временная директория: /tmp +- Используется временная директория: `/tmp` - При восстановлении пакетов: - временно правится DNS (Cloudflare) - Для восстановления конфигурации используется: -```sh +```bash sysupgrade -r backup.tar.gz ``` @@ -147,11 +153,11 @@ sysupgrade -r backup.tar.gz #### Автоматически: - старые локальные бэкапы -- удалённые файлы старше HOST_KEEP дней +- удалённые файлы старше `HOST_KEEP` дней ## Пример cron -```sh +```bash 0 3 * * * /opt/.backup-manager/backup-manager.sh backup ``` \ No newline at end of file diff --git a/backup-manager.sh b/backup-manager.sh index 9b63952..508cc3b 100755 --- a/backup-manager.sh +++ b/backup-manager.sh @@ -1,50 +1,17 @@ #!/bin/sh -# "smb" or "nfs" -STORAGE_TYPE="nfs" +DIR=$(cd "$(dirname "$0")" && pwd) +ENV_FILE="$DIR/.env" -# 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 +if [ -f "$ENV_FILE" ]; then + . "$ENV_FILE" +else + echo " [!] Error: .env file not found at $ENV_FILE" + exit 1 +fi HNAME=$(uci get system.@system[0].hostname) 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" SCR_BACKUP="$DIR/backup-configs.sh" SCR_APK="$DIR/backup-apk.sh" @@ -71,8 +38,8 @@ check_network() { check_dependencies() { printf "Checking %s dependencies... " "$STORAGE_TYPE" local pkgs="" - [ "$STORAGE_TYPE" = "nfs" ] && pkgs="nfs-utils" - [ "$STORAGE_TYPE" = "smb" ] && pkgs="cifsmount" + [ "$STORAGE_TYPE" = "nfs" ] && pkgs="nfs-utils kmod-fs-nfs kmod-fs-nfs-v3 kmod-fs-nfs-v4" + [ "$STORAGE_TYPE" = "cifs" ] && pkgs="cifsmount kmod-fs-cifs" local missing="" for pkg in $pkgs; do