#!/bin/bash # ============================================================================== # Скрипт: sync_scripts.sh # Описание: Автоматически скачивает или обновляет репозиторий со скриптами. # Сам устанавливает git и curl, если их нет на сервере. # ============================================================================== set -e # Останавливаем скрипт, если произойдет критическая ошибка GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' REPO_URL="https://gitlab.alex2py.ru/uristalex/server-tools.git" DEST_DIR="/opt/server-tools" echo -e "${GREEN}Запуск синхронизации скриптов...${NC}" # Функция для установки программ в зависимости от версии Linux install_dependencies() { echo -e "${YELLOW}Отсутствуют нужные программы. Начинаю автоматическую установку...${NC}" # Проверяем наличие apt (Ubuntu/Debian) if command -v apt-get &> /dev/null; then apt-get update -qq apt-get install -y git curl # Проверяем наличие dnf (Новые CentOS/Fedora) elif command -v dnf &> /dev/null; then dnf install -y git curl # Проверяем наличие yum (Старые CentOS/RedHat) elif command -v yum &> /dev/null; then yum install -y git curl else echo -e "${YELLOW}Ошибка: Не удалось определить пакетный менеджер. Установите git вручную.${NC}" exit 1 fi echo -e "${GREEN}Программы успешно установлены!${NC}" } # Проверяем, установлены ли git и curl. Если нет — вызываем нашу функцию. if ! command -v git &> /dev/null || ! command -v curl &> /dev/null; then install_dependencies fi # Основная логика: клонирование или обновление репозитория if [ ! -d "$DEST_DIR" ]; then echo "Папка не найдена. Выполняю первоначальное клонирование..." git clone "$REPO_URL" "$DEST_DIR" else echo "Папка существует. Обновляю до последней версии..." cd "$DEST_DIR" || exit # Отменяем любые случайные изменения на сервере и скачиваем свежее из Gitea git reset --hard HEAD git pull origin main fi # Выдаем права на выполнение всем скачанным bash скриптам find "$DEST_DIR/bash" -type f -name "*.sh" -exec chmod +x {} \; echo -e "${GREEN}Синхронизация успешно завершена!${NC}"