#!/bin/bash set -e REQUIRED_CMDS=(curl tar date) PKGS_MISSING=() # Проверка наличия команд for cmd in "${REQUIRED_CMDS[@]}"; do if ! command -v "$cmd" >/dev/null 2>&1; then PKGS_MISSING+=("$cmd") fi done install_packages() { PKGS=("$@") # Для Alpine if command -v apk >/dev/null 2>&1; then apk add --no-cache "${PKGS[@]}" # Для Debian/Ubuntu elif command -v apt-get >/dev/null 2>&1; then apt-get update && apt-get install -y "${PKGS[@]}" # Для Fedora elif command -v dnf >/dev/null 2>&1; then dnf install -y "${PKGS[@]}" # Для CentOS/RHEL elif command -v yum >/dev/null 2>&1; then yum install -y "${PKGS[@]}" # Для openSUSE elif command -v zypper >/dev/null 2>&1; then zypper install -y "${PKGS[@]}" # Для Arch elif command -v pacman >/dev/null 2>&1; then pacman -Sy --noconfirm "${PKGS[@]}" else echo "Не удалось определить пакетный менеджер для установки: ${PKGS[*]}" exit 1 fi } if [[ ${#PKGS_MISSING[@]} -gt 0 ]]; then if [[ "$EUID" -ne 0 ]]; then echo "Зависимости отсутствуют: ${PKGS_MISSING[*]}" echo "Запустите скрипт от root для автоустановки!" exit 1 fi echo "Необходимые пакеты отсутствуют: ${PKGS_MISSING[*]}" echo "Пробую установить..." install_packages "${PKGS_MISSING[@]}" fi # ПАРСИНГ ПАРАМЕТРОВ while [[ $# -gt 0 ]]; do case "$1" in --token) TOKEN="$2" shift 2 ;; --user_id) USER_ID="$2" shift 2 ;; *) echo "Unknown option: $1" exit 1 ;; esac done if [[ -z "$TOKEN" || -z "$USER_ID" ]]; then echo "Usage: $0 --token --user_id " exit 1 fi # 1. cd / cd / # 2. vaultwarden backup if ! /vaultwarden backup; then echo "vaultwarden backup failed" exit 1 fi # 3. create archive /data NOW=$(date '+%Y-%m-%d_%H-%M-%S') ARCHIVE="/tmp/vaultwarden_backup_${NOW}.tar.gz" tar -czf "$ARCHIVE" /data # 4. send archive user in telegram response=$(curl -s -F chat_id="$USER_ID" \ -F document=@"$ARCHIVE" \ "https://api.telegram.org/bot${TOKEN}/sendDocument") if ! echo "$response" | grep -q '"ok":true'; then echo "Failed to send archive to telegram: $response" exit 1 fi # 5. rm archive rm -f "$ARCHIVE" # 6. rm /data/db_* rm -f /data/db_* echo "Backup and send complete."