#!/bin/bash
#
# Модифицированная и исправленная версия скрипта для установки платформы Sipteco.
# Изменения:
# 1. Скорректирован URL для скачивания disk.img.
# 2. Добавлен интерактивный режим для создания базы данных opensips с инструкцией для пользователя.
# 3. Улучшена проверка перед перемещением каталога .acme.sh для предотвращения ошибок при повторном запуске.
# 4. Задания cron добавляются вручную, удалена зависимость от git.
# 5. Добавлена проверка на существование файлов перед их скачиванием.
# 6. Восстановлены недостающие конфигурации: sysctl, firewalld, SSMTP, NFS, Fail2ban, ODBC, Xen bridge.
#

# --- Шаг 1: Настройка репозитория ---
echo "--- Шаг 1: Настройка локального репозитория ---"
mkdir -p /etc/yum.repos.d/old_repos
mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/old_repos/ >/dev/null 2>&1 || true

cat <<EOF > /etc/yum.repos.d/local.repo
[local-repo]
name=Local Offline CentOS 7 Repo
baseurl=https://centos7.yodo.im/
enabled=1
gpgcheck=0
EOF

yum clean all
echo "Проверка доступности репозитория..."
REPO_STATUS=$(yum repolist enabled | grep '^local-repo' | awk '{print $NF}' | sed 's/,//g')
if [ -z "$REPO_STATUS" ] || [ "$REPO_STATUS" = "0" ]; then
    echo ""
    echo "ОШИБКА: Репозиторий 'local-repo' не найден или недоступен ($REPO_STATUS пакетов)."
    echo "Проверьте URL (https://centos7.yodo.im) и убедитесь, что он работает."
    echo "Установка прервана."
    exit 1
fi
echo "--- Репозиторий успешно настроен ---"
echo ""


# --- Шаг 2: Базовая настройка системы ---
echo "--- Шаг 2: Конфигурация системных переменных, локали и сети ---"
rm -rf /home/distrib
localectl set-locale LANG=ru_RU.utf8

if ! grep -q "HISTTIMEFORMAT" /etc/profile; then
    echo '
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/sipteco/sbin
export HISTTIMEFORMAT="%d/%m/%y %T "
HISTSIZE=50000
HISTFILESIZE=100000
shopt -s histappend
export PROMPT_COMMAND="history -a; history -c; history -r; $PROMPT_COMMAND"' >> /etc/profile
fi

. /etc/profile

# Проверка SELinux
SELINUX_MODE=$(sestatus | grep 'SELinux status' | awk {'print $3'})
if [[ "$SELINUX_MODE" = "enabled" ]]; then
    sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
    echo "SELinux выключен. Требуется перезагрузка."
    sleep 5
    reboot
    exit 0
fi

unalias cp >/dev/null 2>&1 || true
systemctl stop NetworkManager >/dev/null 2>&1 || true
systemctl disable NetworkManager >/dev/null 2>&1 || true
systemctl enable network
systemctl restart network

IP=$(hostname -I | awk '{print $1}')
NAME_FIRST_INTERFACE=$(ip -o -4 route show to default | awk '{print $5}')
if [ -z "$IP" ] || [ -z "$NAME_FIRST_INTERFACE" ]; then
    echo "Не удалось автоматически определить IP-адрес. Пожалуйста, введите его вручную:"
    read -r IP
    echo "Введите имя сетевого интерфейса (например, eth0):"
    read -r NAME_FIRST_INTERFACE
fi
IP_DB=$IP
echo "Используется IP: $IP и интерфейс: $NAME_FIRST_INTERFACE"
yum remove -y NetworkManager >/dev/null 2>&1 || true
echo ""


# --- Шаг 3: Установка всех пакетов ---
echo "--- Шаг 3: Установка всех RPM-пакетов из локального репозитория ---"
yum install -y \
net-tools vim htop iotop mc git expect bind bind-utils tcpdump ssmtp certbot wget yum-utils tmux \
nginx nginx-all-modules socat python2-PyMySQL \
php php-cli php-common php-curl php-gd php-json php-mysql php-readline php-xml php-xmlrpc php-zip php-fpm php-mcrypt php-soap php-mbstring php-pdo \
ffmpeg smartmontools nfs-utils fail2ban iptables iptables-services \
make gcc gcc-c++ \
perl-DBI perl-DBD-MySQL perl-DBD-ODBC perl-Frontier-RPC perl-Term-ReadLine-Gnu perl-BerkeleyDB perl-CPAN perl-EV perl-YAML perl-Crypt-CBC perl-Crypt-Rijndael \
ncurses ncurses-devel bison flex openssl \
curl openvpn automake binutils-devel doxygen libedit-devel libical-devel libogg-devel libusb-devel libvorbis-devel \
libxml2-devel python-devel uuid uuid-devel libuuid bzip2 patch openssl-devel unixODBC-devel libcurl-devel \
speex-devel spandsp-devel net-snmp-devel corosynclib-devel newt-devel popt-devel libtool-ltdl-devel \
lua-devel sqlite-devel libsqlite3x-devel neon-devel openldap-devel sqlite2-devel gsm-devel jansson-devel \
libsrtp-devel libxslt-devel c-ares-devel c-ares mod_ssl wireshark \
rtpproxy opensips opensips-db_mysql opensips-topology_hiding \
centos-release-xen-common mariadb mariadb-devel mariadb-libs mysql-connector-odbc mariadb-server \
xen xen-hypervisor xen-runtime kernel-xen
echo "Все пакеты установлены."
echo ""


# --- Шаг 4: Настройка MySQL (MariaDB) ---
echo "--- Шаг 4: Настройка MySQL (MariaDB) ---"
systemctl enable mariadb
systemctl start mariadb
mysql -uroot -e "SET PASSWORD FOR 'root'@'localhost' = PASSWORD('5r4lo9tk');"
mysql -u root -p5r4lo9tk -e "CREATE USER 'sipteco'@'localhost' IDENTIFIED BY 'Or54o3w0';"
mysql -u root -p5r4lo9tk -e "CREATE USER 'sipteco'@'%' IDENTIFIED BY 'Or54o3w0';"
mysql -u root -p5r4lo9tk -e "GRANT ALL PRIVILEGES ON *.* TO 'sipteco'@'localhost' WITH GRANT OPTION;"
mysql -u root -p5r4lo9tk -e "GRANT ALL PRIVILEGES ON *.* TO 'sipteco'@'%' WITH GRANT OPTION;"
mysql -u root -p5r4lo9tk -e "FLUSH PRIVILEGES;"
mysqladmin -u root -p5r4lo9tk create aa_billing || true
if [ ! -f "aa_billing.sql" ]; then
    wget https://centos7.yodo.im/aa_billing.sql
else
    echo "Файл aa_billing.sql уже существует, пропуск загрузки."
fi
mysql -u root -p5r4lo9tk aa_billing < aa_billing.sql
echo "База данных aa_billing развернута."
echo ""

# --- Шаг 5: Настройка системы и сервисов ---
echo "--- Шаг 5: Настройка системы и сервисов Sipteco ---"
dd if=/dev/zero of=/swapfile bs=1024 count=8388544
mkswap /swapfile
chmod 600 /swapfile
swapon /swapfile
echo "/swapfile none swap sw 0 0" >> /etc/fstab

mkdir -p /astmoh /astspoolmonitor /astprompts /home/domains /ssmtp /usr/local/sipteco/

# Скачиваем активы из локального репозитория
if [ ! -f "/astmoh/default.mp3" ]; then
    wget https://centos7.yodo.im/moh.mp3 -O /astmoh/default.mp3
else
    echo "Файл /astmoh/default.mp3 уже существует, пропуск загрузки."
fi
mkdir /home/distrib && cd /home/distrib
if [ ! -f "sipteco-stable-current.tar.gz" ]; then
    wget https://centos7.yodo.im/sipteco-stable-current.tar.gz
else
    echo "Файл sipteco-stable-current.tar.gz уже существует, пропуск загрузки."
fi
tar xzfv sipteco-stable-current.tar.gz
cd home/sipteco/build/

mkdir -p /usr/local/sipteco/sbin
mv SIPTECO_TOOLS/* /usr/local/sipteco/sbin/
mkdir -p /astconfigs/
mv astconfigs /astconfigs/sipteco
mv web_sipteco3 /var/www/
mv admin_websipteco /var/www/
mv astagi /
if [ -d "/etc/nginx" ]; then mv /etc/nginx /etc/nginx-orig; fi
mv nginx-settings /etc/nginx
rm -f /etc/nginx/sites-enabled/*
rm -f /etc/nginx/ssl/*
openssl dhparam -out /etc/nginx/ssl/dhparam.pem 2048
if [ -d "/etc/nginx/.acme.sh" ] && [ ! -d "/root/.acme.sh" ]; then mv /etc/nginx/.acme.sh /root/; fi
cp -rp php-settings/* /etc/
if [ -d "/etc/xen" ]; then rm -rf /etc/xen; fi
mv xen-settings /etc/xen
if [ -d "/etc/opensips" ]; then rm -rf /etc/opensips; fi
mv opensips /etc/opensips
cp -rp /etc/opensips/config_default/* /etc/opensips/
sed -i "s/IP_FOR_OPENSIPS/$IP/g" /etc/opensips/opensips.cfg
cp -f /etc/opensips/systemd/opensips.service /usr/lib/systemd/system/

echo "#################################################################################"
echo "####### Создание базы данных opensips...                                 #######"
echo "#################################################################################"
mysql -u root -p5r4lo9tk -e "DROP DATABASE IF EXISTS opensips;" || true

echo ""
echo "--- ВАЖНО! ---"
echo "Сейчас утилита 'opensipsdbctl' запросит пароль для пользователя root базы данных."
echo "Пожалуйста, скопируйте и вставьте следующий пароль, когда увидите запрос 'MySQL password for root':"
echo ""
echo "Пароль: 5r4lo9tk"
echo ""
echo "----------------"
/usr/sbin/opensipsdbctl create

mkdir -p /var/run/opensips/

sed -i 's/GRUB_CMDLINE_XEN_DEFAULT=.*/GRUB_CMDLINE_XEN_DEFAULT="dom0_mem=4096M,max:4096M cpuinfo com1=115200,8n1 console=com1,tty loglvl=all guest_loglvl=all"/' /etc/default/grub
grub-bootxen.sh

mkdir -p /home/domains/quickfon/
if [ ! -f "/home/domains/quickfon/disk.img" ]; then
    wget -c https://centos7.yodo.im/disk.img -O /home/domains/quickfon/disk.img
else
    echo "Файл /home/domains/quickfon/disk.img уже существует, пропуск загрузки."
fi
dd if=/dev/zero of=/home/domains/quickfon/swap.img bs=128M count=1
mkswap /home/domains/quickfon/swap.img

mysql -u sipteco -pOr54o3w0 -e "CREATE DATABASE IF NOT EXISTS dummy;"
# Очистка перед скачиванием
rm -f ./sipteco_stable.sql
wget https://centos7.yodo.im/sipteco_stable.sql
mysql -u sipteco -pOr54o3w0 dummy < sipteco_stable.sql
cp ./sipteco_stable.sql /usr/local/sipteco/sbin/
cp ./sipteco_stable.sql /var/www/web_sipteco3/main/web/application/config/

chmod -R 777 /astspoolmonitor /astmoh /astprompts
chown -R nginx:nginx /astprompts/ /astmoh/ /astspoolmonitor/ /var/www/

export PERL_MM_USE_DEFAULT=1
cpan App::cpanminus && cpanm --notest Asterisk::AMI Asterisk::AGI

echo "OPTIONS=\"-F -l $IP -s udp:localhost:12221\"" > /etc/sysconfig/rtpproxy

# --- Восстановленные конфигурации из старого скрипта ---
echo "--- Применение дополнительных конфигураций ---"

# Настройка SSMTP для отправки почты
echo "Настройка SSMTP..."
cat > /etc/ssmtp/ssmtp.conf <<'EOF'
Debug=NO
hostname=$IP
FromLineOverride=NO
AuthUser=vpbx@sipteco.com
AuthPass=gN6t4McYju
mailhub=smtp.yandex.ru:465
rewriteDomain=yandex.ru
UseTLS=YES
TLS_CA_File=/etc/pki/tls/certs/ca-bundle.crt
EOF
echo "root:vpbx@sipteco.com:smtp.yandex.ru:465" > /etc/ssmtp/revaliases

# Настройка NFS
echo "Настройка NFS exports..."
cat > /etc/exports <<'EOF'
/astagi 10.0.0.0/16(rw,async,root_squash)
/astconfigs 10.0.0.0/16(rw,async,no_root_squash)
/astprompts 10.0.0.0/16(rw,async,no_root_squash)
/astmoh 10.0.0.0/16(rw,async,no_root_squash)
/ssmtp 10.0.0.0/16(rw,async,no_root_squash)
/astspoolmonitor/ 10.0.0.0/16(rw,async,no_root_squash)
EOF
exportfs -a

# Настройка AGI
echo "email = diag@sipteco.com
proxyIP = $IP" > /astagi/options.conf

# Настройка сетевого моста Xen
echo "Настройка сетевого моста xenbr0..."
cat > /etc/sysconfig/network-scripts/ifcfg-xenbr0 <<'EOF'
DEVICE=xenbr0
BOOTPROTO=static
IPADDR=10.0.0.1
NETMASK=255.255.0.0
ONBOOT=yes
TYPE=Bridge
NM_CONTROLLED="no"
STP=no
PROXY_METHOD=none
BROWSER_ONLY=no
DEFROUTE=yes
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
NAME=xenbr0
EOF

# Настройка системных параметров ядра (IP Forwarding)
echo "Включение IP Forwarding..."
cat >> /etc/sysctl.conf <<EOF
net.ipv4.ip_forward = 1
net.ipv4.conf.${NAME_FIRST_INTERFACE}.proxy_arp = 1
EOF
sysctl -p /etc/sysctl.conf

# Настройка ODBC
echo "Настройка ODBC..."
cat > /etc/odbc.ini <<EOF
[sipteco-odbc]
driver=MySQL ODBC 5.3 Unicode Driver
Server=$IP_DB
User=sipteco
Password=Or54o3w0
CharSet=utf8
EOF

# Настройка Fail2ban и фаервола
echo "Настройка Fail2ban и Iptables..."
systemctl stop firewalld
systemctl disable firewalld
sed -i 's/banaction.*/banaction = iptables-multiport/' /etc/fail2ban/jail.d/00-firewalld.conf
sed -i '/^\[sshd\]/a enabled = true' /etc/fail2ban/jail.conf
# --- Конец восстановленных конфигураций ---


# --- Финальные настройки и запуск сервисов ---
echo "--- Финальные настройки и запуск сервисов ---"
systemctl daemon-reload
systemctl enable mariadb rtpproxy opensips nginx php-fpm fail2ban iptables nfs-server rpcbind nfs-lock nfs-idmap
systemctl start mariadb rtpproxy opensips nginx php-fpm fail2ban iptables nfs-server rpcbind nfs-lock nfs-idmap

echo "10.0.0.1	$(hostname)" >> /etc/hosts
# ИЗМЕНЕНО: Ручное добавление заданий cron вместо скачивания из git
echo "--- Настройка заданий Cron ---"
(crontab -l 2>/dev/null; cat <<'EOF'
08 00 * * * /usr/bin/touch /tmp/XXX
0 * * * * /usr/local/sipteco/sbin/check_vms.sh
40 00 * * * /usr/local/sipteco/sbin/vm_reload.sh
00 1 * * * /usr/local/sipteco/sbin/audioconvert.sh
00 2 * * * /usr/local/sipteco/sbin/check_months_store_and_delete.sh
30 1 * * * cd /var/www/admin_websipteco/main/web/application && /bin/php yiic vatc >> /var/log/admin_websipteco 2>&1
30 0 * * * /usr/local/sipteco/sbin/delete_missed_calls_now.sh > /dev/null 2>&1
00 3 * * * /usr/local/sipteco/sbin/update_ssl.sh
EOF
) | crontab -
echo "Задания Cron успешно добавлены."

iptables -D INPUT -j REJECT --reject-with icmp-host-prohibited || true
iptables -D FORWARD -j REJECT --reject-with icmp-host-prohibited || true
iptables -t nat -A POSTROUTING -o "$NAME_FIRST_INTERFACE" -j MASQUERADE
iptables-save > /etc/sysconfig/iptables

chmod +x /etc/rc.d/rc.local
chmod +x /var/www/web_sipteco3/main/lib/Script/*
/root/.acme.sh/acme.sh --upgrade
/root/.acme.sh/acme.sh --set-default-ca --server letsencrypt
/root/.acme.sh/acme.sh --register-account -m michaeal@gmail.com
cd /usr/local/sipteco/sbin
rm -f /usr/local/sipteco/sbin/quickfon.sql 
wget https://centos7.yodo.im/quickfon.sql 

echo ""
echo "#####################################################"
echo "### Установка платформы Sipteco успешно завершена! ###"
echo "###         Сервер будет перезагружен через 15 секунд.         ###"
echo "#####################################################"
sleep 15
reboot


