#!/bin/bash set -e FILES="/etc/mosquitto /etc/bird.conf /etc/bird4.conf" ROUTER_USER="${ROUTER_USER}" ROUTER_PASS="${ROUTER_PASS}" ROUTER_USER='root' ROUTER_PASS='556667777#' if [ -n "$ROUTER_HOSTS" ]; then HOSTS=($ROUTER_HOSTS) elif [ -f "hosts.txt" ]; then mapfile -t HOSTS < hosts.txt else echo "No hosts specified!" exit 1 fi if ! command -v sshpass &> /dev/null; then sudo apt update && sudo apt install -y sshpass fi if [ ! -d "bkps" ]; then mkdir -p "./bkps" fi # Бэкап для каждого хоста for HOST in "${HOSTS[@]}"; do echo "Backing up $HOST..." #BACKUP_NAME="wrt-bkp-$HOST-$(date +%F).sh" BACKUP_NAME="./bkps/wrt-bkp-$HOST.sh" echo "# [*] Creating backup on router $HOST..." echo '' > "$BACKUP_NAME" #sshpass -p "$ROUTER_PASS" ssh -o StrictHostKeyChecking=no $ROUTER_USER@$ROUTER_HOST << 'EOH' sshpass -p "$ROUTER_PASS" ssh -o StrictHostKeyChecking=no -o HostKeyAlgorithms=+ssh-rsa \ "$ROUTER_USER@$HOST" \ "lFILES='$FILES'" 'sh -s' << 'EOH' >> "$BACKUP_NAME" || true # Create OpenWRT uci-defaults file for image builder target=$(sed -n 1p /etc/opkg/distfeeds.conf | cut -d'/' -f8) soc=$(sed -n 1p /etc/opkg/distfeeds.conf | cut -d'/' -f9) arch=$(sed -n 2p /etc/opkg/distfeeds.conf | cut -d'/' -f8) model=$(cat /tmp/sysinfo/model) profile=$(cat /tmp/sysinfo/board_name | sed 's/,/_/') hst=$(uci get system.@system[0].hostname) ver=$(grep DISTRIB_DESCRIPTION /etc/openwrt_release) echo "#hostname= $hst" echo "#$ver" echo "#profile = $profile" echo "#target = $target" echo "#soc = $soc" echo "#arch = $arch" echo "#$model custom default settings" gen_pack() { echo '#----------------------------------------------------' echo '#Generating cmd for install pkg' echo '#----------------------------------------------------' grep -A3 "Package:" /usr/lib/opkg/status | awk ' /Package:/ { pkg=$2 } /Status:/ { if ($0 ~ /user installed/) { print "opkg install " pkg } }' } gen_conf() { echo '#----------------------------------------------------' echo "#Generating configuration $model" echo '#----------------------------------------------------' echo "uci -q batch << EOI" for section in $(uci show 2>/dev/null | awk -F. '{print $1}' | sort -u); do uci show "$section" | awk -F. '{print "set "$0}' echo "commit $section" done echo "EOI" # >> "$script" #chmod 755 "$script" #echo "Created $script". #echo Now transfer the file to the 'files/etc/uci-defaults/' folder in your image builder directory. } gen_confile() { echo '#----------------------------------------------------' echo "#Generating conf file" echo '#----------------------------------------------------' _process_file() { local file="$1" local dir dir=$(dirname "$file") echo "#Gen file $file" echo '' echo "mkdir -p \"$dir\"" echo "cat << 'CFGEOF' > \"$file\"" cat "$file" 2>/dev/null echo "CFGEOF" echo "" } for path in $@; do if [ -d "$path" ]; then echo "mkdir -p \"$path\"" echo "" # КЛЮЧЕВОЕ ИСПРАВЛЕНИЕ: -print0 + read -d '' find "$path" -print0 | while IFS= read -r -d '' item; do if [ -d "$item" ]; then echo "mkdir -p \"$item\"" echo "" elif [ -f "$item" ]; then _process_file "$item" fi done elif [ -f "$path" ]; then _process_file "$path" else echo "# WARNING: $path не существует" fi done } gen_cron() { echo '#----------------------------------------------------' echo "#Generating cron" echo '#----------------------------------------------------' echo '' crontab -l } gen_pack gen_conf gen_confile $lFILES gen_cron EOH echo "# [*] Finish" done