Добавлен скрипт установки

This commit is contained in:
Евгений Александрович 2025-01-25 13:31:08 +03:00
parent 0afb6d0580
commit 46cd117c79
2 changed files with 78 additions and 20 deletions

View File

@ -1,21 +1,29 @@
#!/bin/bash #!/bin/bash
CONFIG_DIR="backup.ini" #Author: stirelshka8
LOG_FILE="backup_log_$(date +"%Y-%m-%d_%H-%M-%S").txt" #Description: Backup script
#License: MIT
#Version: 0.0.1test
WORK_DIR="/opt/adminlabs_backup"
CONFIG_DIR="$WORK_DIR/backup.ini"
LOG_FILE="$WORK_DIR/backup_log_$(date +"%Y-%m-%d_%H-%M-%S").txt"
mkdir -p "$WORK_DIR"
# Инициализация логирования # Инициализация логирования
exec &> >(tee -a "$LOG_FILE") exec &> >(tee -a "$LOG_FILE")
# Проверка на выполнение скрипта с правами суперпользователя # Проверка на выполнение скрипта с правами суперпользователя
if [ "$EUID" -ne 0 ]; then if [ "$EUID" -ne 0 ]; then
echo "Error: the script must be run with superuser rights (sudo)." echo "Error: the script must be run with superuser rights (sudo)." >> "$LOG_FILE"
exit 1 exit 1
fi fi
# Проверка наличия необходимых утилит # Проверка наличия необходимых утилит
for cmd in tar ftp lftp curl; do for cmd in tar ftp lftp curl; do
if ! command -v "$cmd" &> /dev/null; then if ! command -v "$cmd" &> /dev/null; then
echo "Error: $cmd is not installed." echo "Error: $cmd is not installed." >> "$LOG_FILE"
exit 1 exit 1
fi fi
done done
@ -49,7 +57,7 @@ get_ini_value() {
fi fi
done < "$ini_file" done < "$ini_file"
echo "Error: Key '$key' not found in section '$section'." echo "Error: Key '$key' not found in section '$section'." >> "$LOG_FILE"
exit 1 exit 1
} }
@ -74,7 +82,7 @@ get_sent_message() {
-H "Content-Type: application/json" -H "Content-Type: application/json"
-d "{"title":$title,"message":$escaped_message,"priority":5}") -d "{"title":$title,"message":$escaped_message,"priority":5}")
if [[ "$response" -ne 200 ]]; then if [[ "$response" -ne 200 ]]; then
echo "Gotify error: $response" echo "Gotify error: $response" >> "$LOG_FILE"
fi fi
fi fi
@ -82,7 +90,7 @@ get_sent_message() {
response=$(curl -s -o /dev/null -w "%{http_code}" -X POST "https://api.telegram.org/bot$TELEGRAM_TOKEN/sendMessage" response=$(curl -s -o /dev/null -w "%{http_code}" -X POST "https://api.telegram.org/bot$TELEGRAM_TOKEN/sendMessage"
-d "chat_id=$CHAT_ID&text=$title: $message") -d "chat_id=$CHAT_ID&text=$title: $message")
if [[ "$response" -ne 200 ]]; then if [[ "$response" -ne 200 ]]; then
echo "Telegram error: $response" echo "Telegram error: $response" >> "$LOG_FILE"
fi fi
fi fi
fi fi
@ -105,7 +113,7 @@ FTP_PASS="$(get_ini_value "FTP" "FTP_PASS")"
# Создаем временную директорию # Создаем временную директорию
mkdir -p "$TEMP_DIR" mkdir -p "$TEMP_DIR"
echo "Create temp directory: $TEMP_DIR" echo "Create temp directory: $TEMP_DIR" >> "$LOG_FILE"
# Преобразуем списки исключений в массивы # Преобразуем списки исключений в массивы
IFS=',' read -r -a SKIP_FILE_ARRAY <<< "$SKIP_FILES" IFS=',' read -r -a SKIP_FILE_ARRAY <<< "$SKIP_FILES"
@ -118,35 +126,35 @@ if [[ "$ENABLE_DIRS" == "true" ]]; then
for DIR in "${DIR_ARRAY[@]}"; do for DIR in "${DIR_ARRAY[@]}"; do
# Проверка на исключение директорий # Проверка на исключение директорий
if [[ " ${SKIP_DIR_ARRAY[@]} " =~ " $DIR " ]]; then if [[ " ${SKIP_DIR_ARRAY[@]} " =~ " $DIR " ]]; then
echo "Directory $DIR is in the skip list, skipping." echo "Directory $DIR is in the skip list, skipping." >> "$LOG_FILE"
continue continue
fi fi
if [ -d "$DIR" ]; then if [ -d "$DIR" ]; then
cp -r "$DIR" "$TEMP_DIR/" && echo "Copy directory $DIR completed." || echo "Error while copying directory $DIR." cp -r "$DIR" "$TEMP_DIR/" && echo "Copy directory $DIR completed." >> "$LOG_FILE" || echo "Error while copying directory $DIR." >> "$LOG_FILE"
else else
echo "Directory $DIR not found, skipping." echo "Directory $DIR not found, skipping." >> "$LOG_FILE"
fi fi
done done
else else
echo "Backup of directories is disabled." echo "Backup of directories is disabled." >> "$LOG_FILE"
fi fi
# Проверка, включено ли резервное копирование файлов # Проверка, включено ли резервное копирование файлов
echo "Enable backup of files: $ENABLE_FILES" echo "Enable backup of files: $ENABLE_FILES" >> "$LOG_FILE"
if [[ "$ENABLE_FILES" == "true" ]]; then if [[ "$ENABLE_FILES" == "true" ]]; then
IFS=',' read -r -a FILE_ARRAY <<< "$FILES" IFS=',' read -r -a FILE_ARRAY <<< "$FILES"
for FILE in "${FILE_ARRAY[@]}"; do for FILE in "${FILE_ARRAY[@]}"; do
# Проверка на исключение файлов # Проверка на исключение файлов
if [[ " ${SKIP_FILE_ARRAY[@]} " =~ " $FILE " ]]; then if [[ " ${SKIP_FILE_ARRAY[@]} " =~ " $FILE " ]]; then
echo "File $FILE is in the skip list, skipping." echo "File $FILE is in the skip list, skipping." >> "$LOG_FILE"
continue continue
fi fi
if [ -f "$FILE" ]; then if [ -f "$FILE" ]; then
cp "$FILE" "$TEMP_DIR/" && echo "Copy file $FILE completed." || echo "Error while copying file $FILE." cp "$FILE" "$TEMP_DIR/" && echo "Copy file $FILE completed." >> "$LOG_FILE" || echo "Error while copying file $FILE." >> "$LOG_FILE"
else else
echo "File $FILE not found, skipping." echo "File $FILE not found, skipping." >> "$LOG_FILE"
fi fi
done done
else else
@ -154,7 +162,7 @@ else
fi fi
# Упаковываем временную директорию в tar.gz архив # Упаковываем временную директорию в tar.gz архив
tar -czf "$TAR_NAME" -C "$TEMP_DIR" . && echo "Created tar.gz archive: $(pwd)/$TAR_NAME" || { echo "Error while creating tar.gz archive."; rm -rf "$TEMP_DIR"; exit 1; } tar -czf "$WORK_DIR/$TAR_NAME" -C "$TEMP_DIR" . && echo "Created tar.gz archive: $(pwd)/$TAR_NAME" || { echo "Error while creating tar.gz archive."; rm -rf "$TEMP_DIR"; exit 1; }
# Проверяем наличие файлов # Проверяем наличие файлов
if [[ ! -f "$TAR_NAME" ]]; then if [[ ! -f "$TAR_NAME" ]]; then
@ -168,15 +176,15 @@ if [[ ! -f "$LOG_FILE" ]]; then
fi fi
# Загружаем файлы на FTP-сервер # Загружаем файлы на FTP-сервер
echo "Sending files ..." echo "Sending files ..." >> "$LOG_FILE"
lftp -u "$FTP_USER","$FTP_PASS" "$FTP_SERVER" <<EOF > ftp_log.txt 2>&1 lftp -u "$FTP_USER","$FTP_PASS" "$FTP_SERVER" <<EOF > ftp_log.txt 2>&1
set ssl:verify-certificate no set ssl:verify-certificate no
set net:timeout 10 set net:timeout 10
set net:max-retries 3 set net:max-retries 3
set net:reconnect-interval-base 5 set net:reconnect-interval-base 5
set net:reconnect-interval-multiplier 2 set net:reconnect-interval-multiplier 2
put "/$TAR_NAME" put "$WORK_DIR/$TAR_NAME"
put "/$LOG_FILE" put "$WORK_DIR/$LOG_FILE"
bye bye
EOF EOF
@ -185,6 +193,8 @@ if [ $? -ne 0 ]; then
echo "Error while sending files." echo "Error while sending files."
rm "$TAR_NAME" rm "$TAR_NAME"
exit 1 exit 1
else
echo "Files sent successfully."
fi fi
# Удаление временной директории и архива после завершения работы скрипта # Удаление временной директории и архива после завершения работы скрипта

48
install.sh Normal file
View File

@ -0,0 +1,48 @@
#!/bin/bash
# Проверка на выполнение скрипта с правами суперпользователя
if [ "$EUID" -ne 0 ]; then
echo "Error: the script must be run with superuser rights (sudo)."
exit 1
fi
WORK_DIR="/opt/adminlabs_backup"
BACKUP_SCRIPT="$WORK_DIR/backup.sh"
BACKUP_CONFIG="$WORK_DIR/backup.ini"
SCRIPT_URL="http://files.adminlabs.space/scripts/backup.sh"
CONFIG_URL="http://files.adminlabs.space/scripts/backup.ini"
# Создание рабочей директории, если она не существует
if [ ! -d "$WORK_DIR" ]; then
mkdir -p "$WORK_DIR" || { echo "Error: Failed to create directory $WORK_DIR"; exit 1; }
echo "Created directory $WORK_DIR."
else
echo "Directory $WORK_DIR already exists."
fi
# Функция для скачивания файла
download_file() {
local url="$1"
local dest="$2"
echo "Downloading $url..."
curl -o "$dest" "$url" || { echo "Error: Failed to download $url"; exit 1; }
}
# Проверка и копирование скрипта
if [[ -f "$BACKUP_SCRIPT" ]]; then
mv "$BACKUP_SCRIPT" "$WORK_DIR" || { echo "Error: Failed to move $BACKUP_SCRIPT to $WORK_DIR"; exit 1; }
else
download_file "$SCRIPT_URL" "$BACKUP_SCRIPT"
mv "$BACKUP_SCRIPT" "$WORK_DIR" || { echo "Error: Failed to move $BACKUP_SCRIPT to $WORK_DIR"; exit 1; }
fi
# Проверка и копирование конфигурационного файла
if [[ -f "$BACKUP_CONFIG" ]]; then
mv "$BACKUP_CONFIG" "$WORK_DIR" || { echo "Error: Failed to move $BACKUP_CONFIG to $WORK_DIR"; exit 1; }
else
download_file "$CONFIG_URL" "$BACKUP_CONFIG"
mv "$BACKUP_CONFIG" "$WORK_DIR" || { echo "Error: Failed to move $BACKUP_CONFIG to $WORK_DIR"; exit 1; }
fi
echo "Installation complete."