diff --git a/install.sh b/install.sh index d8d6958..6f3b20f 100644 --- a/install.sh +++ b/install.sh @@ -14,12 +14,14 @@ clear # Создаём переменную для логов logsINST="$(dirname "$0")/enginegp_install.log" +# Директория сохранения данных +saveDIR="/root/enginegp.cfg" + # Обновление системы sysUpdate # Установка начальных пакетов. -# lsb-release wget gnupg - Требуются для MySQL. В остальном зависимость не проверялась. -pkgsREQ=(sudo curl lsb-release wget gnupg rsync) +pkgsREQ=(sudo curl lsb-release wget gnupg rsync pwgen zip unzip bc tar) # Цикл установки пакетов for package in "${pkgsREQ[@]}"; do @@ -156,7 +158,7 @@ while true; do if [[ " ${suppOS[@]} " =~ " ${currOS} " ]]; then # Список пакетов для установки pkgsLNAMP=(apache2 php php-fpm php-ctype php-json php-mbstring php-zip php-gd php-xml php-curl libapache2-mod-php libapache2-mod-fcgid nginx) - pkgsEGP=(ufw memcached unzip bc cron php$verPHP php$verPHP-fpm php$verPHP-common php$verPHP-cli php$verPHP-memcache php$verPHP-memcached php$verPHP-mysql php$verPHP-xml php$verPHP-mbstring php$verPHP-gd php$verPHP-imagick php$verPHP-zip php$verPHP-curl php$verPHP-ssh2 php$verPHP-xml libapache2-mod-php$verPHP) + pkgsEGP=(ufw memcached cron php$verPHP php$verPHP-fpm php$verPHP-common php$verPHP-cli php$verPHP-memcache php$verPHP-memcached php$verPHP-mysql php$verPHP-xml php$verPHP-mbstring php$verPHP-gd php$verPHP-imagick php$verPHP-zip php$verPHP-curl php$verPHP-ssh2 php$verPHP-xml libapache2-mod-php$verPHP) # Установка стека LNAMP + phpMyAdmin # Проверяем наличие репозитория php sury @@ -425,6 +427,12 @@ EOF sudo rsync -av /tmp/enginegp/EngineGP-*/. /var/www/enginegp/ >> $logsINST 2>&1 sudo rm /tmp/enginegp/enginegp.zip >> $logsINST 2>&1 sudo rm -r /tmp/enginegp/EngineGP-* >> $logsINST 2>&1 + + # Генерация и хэширование пароля + #saltEGP=$(pwgen -cnys -1 16) # Необходимо записывать в system.php и acpsystem.php + #passEGP=$(pwgen -cnys -1 16) + #hashedPassEGP=$(echo -n "$saltEGP$passEGP" | sha512sum) + #hashedPassEGP=${hashedPassEGP%% *} else echo "===================================" >> $logsINST 2>&1 echo "enginegp уже установлен в системе. Продолжение установки невозможно." | tee -a $logsINST @@ -469,21 +477,317 @@ EOF ;; 2) clear - echo "===================================" >> $logsINST 2>&1 - echo "Вы выбрали: Настройка сервера под игры" | tee -a $logsINST - echo "===================================" >> $logsINST 2>&1 - # Здесь добавить код для настройки сервера под игры - read -p "Нажмите Enter для завершения..." - continue + # Проверяем, содержится ли текущая версия в массиве поддерживаемых версий + if [[ " ${suppOS[@]} " =~ " ${currOS} " ]]; then + pkgsLOC=(lib32z1 libbabeltrace1 libc6-dbg libdw1 lib32stdc++6 libreadline5 lib32gcc1 screen tcpdump lsof qstat gdb-minimal ntpdate gcc-multilib iptables default-jdk nginx) + passMySQL=$(pwgen -cnys -1 16) + safePassMySQL=$(printf '%s\n' "$passMySQL" | sed -e 's/[\&/]/\\&/g') + passProFTPD=$(pwgen -cnys -1 16) + + if ! dpkg --print-foreign-architectures | grep -q "i386"; then + echo "===================================" >> $logsINST 2>&1 + echo "Архитектура i386 не добавлена. Выполняется добавление..." | tee -a $logsINST + echo "===================================" >> $logsINST 2>&1 + sudo dpkg --add-architecture i386 >> $logsINST 2>&1 + + # Обновление таблиц + apt-get -y update >> $logsINST 2>&1 + else + echo "===================================" >> $logsINST 2>&1 + echo "Архитектура i386 уже добавлена." | tee -a $logsINST + echo "===================================" >> $logsINST 2>&1 + fi + + # Устанавливаем базу данных + if ! dpkg-query -W -f='${Status}' "mysql-server" 2>/dev/null | grep -q "install ok installed"; then + echo "===================================" >> $logsINST 2>&1 + echo "mysql-server не установлен. Выполняется установка..." | tee -a $logsINST + echo "===================================" >> $logsINST 2>&1 + sudo debconf-set-selections <> $logsINST 2>&1 + sudo DEBIAN_FRONTEND="noninteractive" dpkg -i mysql-apt-config_0.8.26-1_all.deb >> $logsINST 2>&1 + sudo apt-get update >> $logsINST 2>&1 + sudo rm mysql-apt-config_0.8.26-1_all.deb >> $logsINST 2>&1 + sudo debconf-set-selections <> $logsINST 2>&1 + else + echo "===================================" >> $logsINST 2>&1 + echo "mysql-server уже установлен в системе. Продолжение установки невозможно." | tee -a $logsINST + echo "===================================" >> $logsINST 2>&1 + read -p "Нажмите Enter для завершения..." + continue + fi + + # Цикл установки пакетов + for package in "${pkgsLOC[@]}"; do + # Проверка на наличие и установка пакетов + if ! dpkg-query -W -f='${Status}' "$package" 2>/dev/null | grep -q "install ok installed"; then + echo "===================================" >> $logsINST 2>&1 + echo "$package не установлен. Выполняется установка..." | tee -a $logsINST + echo "===================================" >> $logsINST 2>&1 + apt-get install -y "$package" >> $logsINST 2>&1 + else + echo "===================================" >> $logsINST 2>&1 + echo "$package уже установлен в системе." | tee -a $logsINST + echo "===================================" >> $logsINST 2>&1 + fi + done + + # Устанавливаем ProFTPD + if ! dpkg-query -W -f='${Status}' "proftpd" 2>/dev/null | grep -q "install ok installed"; then + echo "===================================" >> $logsINST 2>&1 + echo "proftpd не установлен. Выполняется установка..." | tee -a $logsINST + echo "===================================" >> $logsINST 2>&1 + echo "proftpd shared/proftpd/inetd_or_standalone select standalone" | debconf-set-selections + sudo apt-get install -y proftpd proftpd-mod-mysql >> $logsINST 2>&1 + curl -o /etc/proftpd/proftpd.conf $resURL/Components/ProFTPD/proftpd >> $logsINST 2>&1 + curl -o /etc/proftpd/proftpd_modules.conf $resURL/Components/ProFTPD/proftpd_modules >> $logsINST 2>&1 + curl -o /etc/proftpd/sql.conf $resURL/Components/ProFTPD/proftpd_sql >> $logsINST 2>&1 + mysql -uroot -p$safePassMySQL -e "CREATE DATABASE ftp;" >> $logsINST 2>&1 + mysql -uroot -p$safePassMySQL -e "CREATE USER 'ftp'@'localhost' IDENTIFIED BY '$passProFTPD';" >> $logsINST 2>&1 + mysql -uroot -p$safePassMySQL -e "GRANT ALL PRIVILEGES ON ftp . * TO 'ftp'@'localhost';" >> $logsINST 2>&1 + mysql -uroot -p$safePassMySQL ftp < EngineGP-requirements/proftpd/sqldump.sql >> $logsINST 2>&1 + sed -i 's/passwdfor/'$passProFTPD'/g' /etc/proftpd/sql.conf >> $logsINST 2>&1 + chmod -R 750 /etc/proftpd >> $logsINST 2>&1 + systemctl restart proftpd >> $logsINST 2>&1 + else + echo "===================================" >> $logsINST 2>&1 + echo "proftpd уже установлен. Продолжение установки невозможно." | tee -a $logsINST + echo "===================================" >> $logsINST 2>&1 + read -p "Нажмите Enter для завершения..." + continue + fi + + # Настраиваем rclocal + if [ ! -f /etc/rc.local ]; then + echo "===================================" >> $logsINST 2>&1 + echo "rc.local не настроен. Выполняется настройка..." | tee -a $logsINST + echo "===================================" >> $logsINST 2>&1 + sudo touch /etc/rc.local >> $logsINST 2>&1 + echo '#!/bin/bash' | sudo tee -a /etc/rc.local >> $logsINST 2>&1 + echo "/root/iptables_block" | sudo tee -a /etc/rc.local >> $logsINST 2>&1 + echo "exit 0" | sudo tee -a /etc/rc.local >> $logsINST 2>&1 + sudo chmod +x /etc/rc.local >> $logsINST 2>&1 + else + echo "===================================" >> $logsINST 2>&1 + echo "rc.local не настроен. Выполняется настройка..." | tee -a $logsINST + echo "===================================" >> $logsINST 2>&1 + sed -i '14d' /etc/rc.local >> $logsINST 2>&1 + echo "/root/iptables_block" | sudo tee -a /etc/rc.local >> $logsINST 2>&1 + echo "exit 0" | sudo tee -a /etc/rc.local >> $logsINST 2>&1 + sudo chmod +x /etc/rc.local >> $logsINST 2>&1 + fi + + # Настраиваем iptables + if dpkg-query -W -f='${Status}' "iptables" 2>/dev/null | grep -q "install ok installed"; then + echo "===================================" >> $logsINST 2>&1 + echo "iptables не настроен. Выполняется настройка..." | tee -a $logsINST + echo "===================================" >> $logsINST 2>&1 + # Проверка на наличие файла + if [ ! -f /root/iptables_block ]; then + sudo touch /root/iptables_block >> $logsINST 2>&1 + sudo chmod 500 /root/iptables_block >> $logsINST 2>&1 + else + sudo chmod 500 /root/iptables_block >> $logsINST 2>&1 + fi + else + echo "===================================" >> $logsINST 2>&1 + echo "iptables уже установлен. Продолжение установки невозможно." | tee -a $logsINST + echo "===================================" >> $logsINST 2>&1 + read -p "Нажмите Enter для завершения..." + continue + fi + + # Установка SteamCMD + if [ ! -d "/path/cmd" ]; then + echo "===================================" >> $logsINST 2>&1 + echo "SteamCMD не настроен. Выполняется настройка..." | tee -a $logsINST + echo "===================================" >> $logsINST 2>&1 + groupmod -g 998 `cat /etc/group | grep :1000 | awk -F":" '{print $1}'` >> $logsINST 2>&1 + groupadd -g 1000 servers >> $logsINST 2>&1 + mkdir -p /path /path/cmd /path/update /path/maps >> $logsINST 2>&1 + chmod -R 755 /path >> $logsINST 2>&1 + chown root:servers /path >> $logsINST 2>&1 + mkdir -p /servers >> $logsINST 2>&1 + chmod -R 711 /servers >> $logsINST 2>&1 + chown root:servers /servers >> $logsINST 2>&1 + mkdir -p /copy >> $logsINST 2>&1 + chmod -R 750 /copy >> $logsINST 2>&1 + chown root:root /copy >> $logsINST 2>&1 + sudo curl -SL -o steamcmd_linux.tar.gz http://media.steampowered.com/client/steamcmd_linux.tar.gz >> $logsINST 2>&1 + tar -xzf steamcmd_linux.tar.gz -C /path/cmd >> $logsINST 2>&1 + rm steamcmd_linux.tar.gz >> $logsINST 2>&1 + else + echo "===================================" >> $logsINST 2>&1 + echo "SteamCMD уже установлен. Продолжение установки невозможно...." | tee -a $logsINST + echo "===================================" >> $logsINST 2>&1 + read -p "Нажмите Enter для завершения..." + continue + fi + echo "">>$SAVE + echo "Location data:">>$saveDIR + echo "SQL_Username: root">>$saveDIR + echo "SQL_Password: $safePassMySQL">>$saveDIR + echo "SQL_FileTP: ftp">>$saveDIR + echo "SQL_Port: 3306">>$saveDIR + echo "Password for FTP database: $passProFTPD">>$saveDIR + else + echo "===================================" >> $logsINST 2>&1 + echo "Вы используете неподдерживаемую версию Linux" | tee -a $logsINST + echo "===================================" >> $logsINST 2>&1 + read -p "Нажмите Enter для завершения..." + fi ;; 3) clear - echo "===================================" >> $logsINST 2>&1 - echo "Вы выбрали: Установка игровых сборок" | tee -a $logsINST - echo "===================================" >> $logsINST 2>&1 - # Здесь добавить код для установки игровых сборок - read -p "Нажмите Enter для завершения..." - continue + # Игровой репозиторий + gamesURL="http://gs.enginegp.ru" + + echo "Меню установки игровых сборок:" + echo "1. Counter-Strike: 1.6" + echo "2. Counter-Strike: Source v34 (old)" + echo "3. Counter-Strike: Source (new)" + echo "4. Counter-Strike: Global Offensive" + echo "5. Counter-Strike: 2" + echo "6. Grand Theft Auto: San Andreas MultiPlayer" + echo "7. Grand Theft Auto: Criminal Russia MultiPlayer" + echo "8. Grand Theft Auto: Multi Theft Auto" + echo "9. Minecraft Java Edition" + echo "10. RUST" + echo "0. Вернуться в предыдущее меню" + + read -p "Выберите пункт меню: " game_choice + + case $game_choice in + 1) + clear + mkdir -p /path/cs /path/update/cs /path/maps/cs /servers/cs >> $logsINST 2>&1 + echo "Меню установки Counter-Strike: 1.6" + echo "1. Steam [Clean server]" + echo "2. Build ReHLDS" + echo "3. Build 8308" + echo "4. Build 8196" + echo "5. Build 7882" + echo "6. Build 7559" + echo "7. Build 6153" + echo "8. Build 5787" + echo "0. Вернуться в предыдущее меню" + + read -p "Выберите пункт меню: " cs16_choice + + case $cs16_choice in + 1) + mkdir -p /path/cs/steam 2>&1 | tee -a ${logsINST} + sudo curl -SL -o /path/cs/steam/steam.zip $gamesURL/cs/steam.zip 2>&1 | tee -a ${logsINST} + sudo unzip /path/cs/steam/steam.zip -d /path/cs/steam/ 2>&1 | tee -a ${logsINST} + sudo rm /path/cs/steam/steam.zip | tee -a $logsINST 2>&1 | tee -a ${logsINST} + cs16_choice + ;; + 2) + mkdir -p /path/cs/rehlds 2>&1 | tee -a ${logsINST} + sudo curl -SL -o /path/cs/rehlds/rehlds.zip $gamesURL/cs/rehlds.zip 2>&1 | tee -a ${logsINST} + sudo unzip /path/cs/rehlds/rehlds.zip -d /path/cs/rehlds/ 2>&1 | tee -a ${logsINST} + sudo rm /path/cs/rehlds/rehlds.zip 2>&1 | tee -a ${logsINST} + cs16_choice + ;; + 3) + mkdir -p /path/cs/8308 2>&1 | tee -a ${logsINST} + sudo curl -SL -o /path/cs/8308/8308.zip $gamesURL/cs/8308.zip 2>&1 | tee -a ${logsINST} + sudo unzip /path/cs/8308/8308.zip -d /path/cs/8308/ 2>&1 | tee -a ${logsINST} + sudo rm /path/cs/8308/8308.zip 2>&1 | tee -a ${logsINST} + cs16_choice + ;; + 4) + mkdir -p /path/cs/8196 2>&1 | tee -a ${logsINST} + sudo curl -SL -o /path/cs/8196/8196.zip $gamesURL/cs/8196.zip 2>&1 | tee -a ${logsINST} + unzip /path/cs/8196/8196.zip -d /path/cs/8196/ 2>&1 | tee -a ${logsINST} + rm /path/cs/8308/8308.zip 2>&1 | tee -a ${logsINST} + cs16_choice + ;; + 5) + mkdir -p /path/cs/7882 2>&1 | tee -a ${logsINST} + sudo curl -SL -o /path/cs/7882/7882.zip $gamesURL/cs/7882.zip 2>&1 | tee -a ${logsINST} + unzip /path/cs/7882/7882.zip -d /path/cs/7882/ 2>&1 | tee -a ${logsINST} + rm /path/cs/7882/7882.zip 2>&1 | tee -a ${logsINST} + cs16_choice + ;; + 6) + mkdir -p /path/cs/7559 2>&1 | tee -a ${logsINST} + sudo curl -SL -o /path/cs/7559/7559.zip $gamesURL/cs/7559.zip 2>&1 | tee -a ${logsINST} + unzip /path/cs/7559/7559.zip -d /path/cs/7559/ 2>&1 | tee -a ${logsINST} + rm /path/cs/7559/7559.zip 2>&1 | tee -a ${logsINST} + cs16_choice + ;; + 7) + mkdir -p /path/cs/6153 2>&1 | tee -a ${logsINST} + sudo curl -SL -o /path/cs/6153/6153.zip $gamesURL/cs/6153.zip 2>&1 | tee -a ${logsINST} + unzip /path/cs/6153/6153.zip -d /path/cs/6153/ 2>&1 | tee -a ${logsINST} + rm /path/cs/6153/6153.zip 2>&1 | tee -a ${logsINST} + cs16_choice + ;; + 8) + mkdir -p /path/cs/5787 2>&1 | tee -a ${logsINST} + sudo curl -SL -o /path/cs/5787/5787.zip $gamesURL/cs/5787.zip 2>&1 | tee -a ${logsINST} + unzip /path/cs/5787/5787.zip -d /path/cs/5787/ 2>&1 | tee -a ${logsINST} + rm /path/cs/5787/5787.zip 2>&1 | tee -a ${logsINST} + cs16_choice + ;; + 0) + game_choice + ;; + *) + clear + echo "===================================" >> $logsINST 2>&1 + echo "Неверный выбор. Попробуйте еще раз." | tee -a $logsINST + echo "===================================" >> $logsINST 2>&1 + ;; + esac + ;; + 2) + # Add code for installing SAMP game here + ;; + 3) + # Add code for installing MTA game here + ;; + 4) + # Add code for installing MTA game here + ;; + 5) + # Add code for installing MTA game here + ;; + 6) + # Add code for installing MTA game here + ;; + 7) + # Add code for installing MTA game here + ;; + 8) + # Add code for installing MTA game here + ;; + 9) + # Add code for installing MTA game here + ;; + 10) + # Add code for installing MTA game here + ;; + 0) + choice + ;; + *) + clear + echo "===================================" >> $logsINST 2>&1 + echo "Неверный выбор. Попробуйте еще раз." | tee -a $logsINST + echo "===================================" >> $logsINST 2>&1 + ;; + esac ;; 4) clear