Compare commits
8
Commits
5b8ef165a1
..
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
520804d732 | ||
|
|
179470709f | ||
|
|
d17ec7e084 | ||
|
|
530988a13f | ||
|
|
6a586c1de7 | ||
|
|
ab76f89697 | ||
|
|
6f512689d0 | ||
|
|
516de4985f |
@@ -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 +1,2 @@
|
|||||||
local_backups/
|
local_backups/
|
||||||
|
.env
|
||||||
|
|||||||
@@ -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
|
||||||
```
|
```
|
||||||
+5
-4
@@ -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
@@ -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="nfs-utils"
|
[ "$STORAGE_TYPE" = "nfs" ] && pkgs="nfs-utils kmod-fs-nfs kmod-fs-nfs-v3 kmod-fs-nfs-v4"
|
||||||
[ "$STORAGE_TYPE" = "smb" ] && pkgs="cifsmount"
|
[ "$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)
|
||||||
|
|||||||
Reference in New Issue
Block a user