#!/bin/bash

# Проверка прав доступа
if [[ $EUID -ne 0 ]]; then
   echo "Этот скрипт должен быть запущен с правами root (sudo)." 
   exit 1
fi

# Функция вывода справки
usage() {
    echo "Использование: $0 --src-dir <путь_к_каталогу_с_RPM_пакетами> --dest-dir <внутренний_каталог>"
    exit 1
}

# Проверка состояния SELinux
if [[ $(getenforce) == "Enabled" ]]; then
    echo "SELinux включен. Предварительно выключите SELinux."
    exit 1
fi

# Парсинг параметров
while [[ "$#" -gt 0 ]]; do
    case $1 in
        --src-dir)
            src_dir="$2"
            shift
            ;;
        --dest-dir)
            dest_dir="$2"
            shift
            ;;
        *)
            echo "Неизвестный параметр: $1"
            usage
            ;;
    esac
    shift
done

# Проверка наличия обязательных параметров
if [[ -z "$src_dir" || -z "$dest_dir" ]]; then
    usage
fi

# Проверка существования исходного каталога с RPM пакетами
if [[ ! -d "$src_dir" ]]; then
    echo "Указанный исходный каталог не существует: $src_dir"
    exit 1
fi

# Создание целевого каталога внутри репозитория
repo_root="/usr/share/nginx/html"
repo_dest_dir="$repo_root/$dest_dir"

echo "Создание целевого каталога: $repo_dest_dir..."
mkdir -p "$repo_dest_dir"

# Копирование RPM пакетов в целевой каталог
echo "Копирование RPM пакетов из $src_dir в $repo_dest_dir..."
cp -r "$src_dir"/* "$repo_dest_dir/"

# Установка необходимых пакетов
echo "Установка необходимых пакетов..."
yum install -y createrepo nginx

# Создание RPM репозитория
echo "Создание RPM репозитория в каталоге: $repo_dest_dir..."
createrepo "$repo_dest_dir"

# Настройка Nginx для работы на порту 8080
echo "Настройка Nginx..."
cat <<EOF > /etc/nginx/nginx.conf
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

events {
    worker_connections 1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    server {
        listen       8080;
        server_name  localhost;

        location / {
            root   $repo_root;
            autoindex on;
            autoindex_exact_size off;
        }
    }
}
EOF

# Запуск и включение автозапуска Nginx
echo "Запуск Nginx..."
systemctl start nginx
systemctl enable nginx

# Открытие порта 8080 в файрволе (только если firewalld запущен)
if systemctl is-active --quiet firewalld; then
    echo "Открытие порта 8080 в файрволе..."
    firewall-cmd --zone=public --add-port=8080/tcp --permanent
    firewall-cmd --reload
else
    echo "Firewalld не запущен. Пропустить настройку firewall."
fi

# Получение IP-адреса сервера
server_ip=$(hostname -I | awk '{print $1}')
if [[ -z "$server_ip" ]]; then
    echo "Не удалось определить IP-адрес сервера."
    exit 1
fi

# Вывод инструкций по настройке .repo файла
echo "RPM репозиторий успешно создан и доступен по адресу:"
echo "http://$server_ip:8080/$dest_dir/"
echo ""
echo "Добавьте следующий блок в ваш .repo файл:"
echo ""
cat <<EOF
[$dest_dir]
name=$dest_dir Repository
baseurl=http://$server_ip:8080/$dest_dir
enabled=1
gpgcheck=0
EOF
