Autoinstall/install.sh
Sergei Solovev f5ca1ecaba
The parameters used have been updated (#70)
* The parameters used have been updated

* The description has been corrected
2024-12-10 22:14:51 +03:00

163 lines
7.6 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
##
# TorrentPier Bull-powered BitTorrent tracker engine
# EngineGP (https://enginegp.ru or https://enginegp.com)
#
# @copyright Copyright (c) 2024-present TorrentPier (https://torrentpier.com)
# @copyright Copyright (c) 2024-present Solovev Sergei <inbox@seansolovev.ru>
#
# @link https://github.com/torrentpier/autoinstall for the canonical source repository
# @link https://github.com/EngineGPDev/Autoinstall for the canonical source repository
#
# @license https://github.com/torrentpier/autoinstall/blob/main/LICENSE MIT License
# @license https://github.com/EngineGPDev/Autoinstall/blob/main/LICENSE MIT License
##
clear
# Arrays and variables used
suppOs=("debian" "ubuntu")
aptOs=("debian" "ubuntu")
currOs=$(grep ^ID= /etc/os-release | awk -F= '{print $2}')
logsInst="/var/log/enginegp_install.log"
# User verification
if [ "$(whoami)" != "root" ]; then
echo "It needs to be run under the root user!" 2>&1 | tee -a "$logsInst"
exit 1
fi
# Проверка, есть ли currOs в массиве suppOs
foundOs=false
for os in "${suppOs[@]}"; do
if [[ "$os" == "$currOs" ]]; then
foundOs=true
break
fi
done
# Переменные для хранения
verPhp="8.2"
sysIp=$(ip a | grep -oP '(?<=inet\s)\d+(\.\d+){3}' | grep -v '127.0.0.1' | head -n 1)
relArgs=()
# Проверка аргументов командной строки
if [ $# -gt 0 ]; then
# Перебор всех аргументов
while [[ $# -gt 0 ]]; do
key="$1"
case $key in
--php)
# Если передан аргумент --php, сохранить указанную версию PHP
verPhp="$2"
shift # Пропустить значение версии
shift # Пропустить аргумент --php
;;
--ip)
# Если передан аргумент --ip, сохранить указанный IP-адрес
sysIp="$2"
shift # Пропустить значение IP-адреса
shift # Пропустить аргумент --ip
;;
--release|--beta|--snapshot)
relArgs+=("$key")
shift # Пропустить аргументы
;;
*)
# Неизвестный аргумент, вывести справку и выйти
clear
echo "Использование: ./install.sh --php 8.2 --ip 192.168.1.1 --branch main"
echo " --php версия: установить указанную версию PHP. Формат должен быть: 8.2"
echo " --ip IP-адрес: использовать указанный IP-адрес. Формат должен быть: 192.168.1.1"
echo " --release: установить последнюю, стабильную версию"
echo " --beta: установить последнюю, бета-версию"
echo " --snapshot: установить последний snapshot"
exit 1
;;
esac
done
fi
# Проверяем, является ли полученный IP-адрес действительным IPv4 адресом
if [[ ! $sysIp =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
clear
echo "Не удалось получить внешний IP-адрес"
echo "Используй: ./install.sh [--ip IP-адрес]"
exit
fi
# Checking for system support
foundOs=false
for os in "${suppOs[@]}"; do
if [[ "$os" == "$currOs" ]]; then
foundOs=true
break
fi
done
# Downloading and running the installation file
if $foundOs; then
for os in "${aptOs[@]}"; do
if [[ "$os" == "$currOs" ]]; then
# Required packages
pkgsList=("jq" "curl" "zip" "unzip")
# Updating tables and packages
echo "===================================" 2>&1 | tee -a "$logsInst" > /dev/null
echo "Updating tables and packages" | tee -a "$logsInst"
echo "===================================" 2>&1 | tee -a "$logsInst" > /dev/null
apt-get -y update 2>&1 | tee -a "$logsInst" > /dev/null
apt-get -y dist-upgrade 2>&1 | tee -a "$logsInst" > /dev/null
# Check and installation sudo
if ! dpkg-query -W -f='${Status}' "sudo" 2>/dev/null | grep -q "install ok installed"; then
echo "===================================" 2>&1 | tee -a "$logsInst" > /dev/null
echo "sudo not installed. Installation in progress..." | tee -a "$logsInst"
echo "===================================" 2>&1 | tee -a "$logsInst" > /dev/null
apt-get install -y sudo 2>&1 | tee -a "$logsInst" > /dev/null
fi
# Package installation cycle
for package in "${pkgsList[@]}"; do
# Checking for packages and installing packages
if ! dpkg-query -W -f='${Status}' "$package" 2>/dev/null | grep -q "install ok installed"; then
echo "===================================" 2>&1 | sudo tee -a "$logsInst" > /dev/null
echo "$package not installed. Installation in progress..." | tee -a "$logsInst"
echo "===================================" 2>&1 | sudo tee -a "$logsInst" > /dev/null
sudo apt-get install -y "$package" 2>&1 | sudo tee -a "$logsInst" > /dev/null
fi
done
# Preparing a temporary catalog
echo "===================================" 2>&1 | sudo tee -a "$logsInst" > /dev/null
echo "Preparing a temporary catalog" | tee -a "$logsInst"
echo "===================================" 2>&1 | sudo tee -a "$logsInst" > /dev/null
sudo mkdir -p /tmp/enginegp 2>&1 | sudo tee -a "$logsInst" > /dev/null
sudo rm -rf /tmp/enginegp/* 2>&1 | sudo tee -a "$logsInst" > /dev/null
# Downloading the installation script
echo "===================================" 2>&1 | sudo tee -a "$logsInst" > /dev/null
echo "Downloading the installation script" | tee -a "$logsInst"
echo "===================================" 2>&1 | sudo tee -a "$logsInst" > /dev/null
curl -s https://api.github.com/repos/EngineGPDev/Autoinstall/releases | jq -r 'map(select(.prerelease == true)) | .[0].zipball_url' | xargs -n 1 curl -L -o /tmp/enginegp/autoinstall.zip 2>&1 | sudo tee -a "$logsInst" > /dev/null
sudo unzip -o /tmp/enginegp/autoinstall.zip -d /tmp/enginegp 2>&1 | sudo tee -a "$logsInst" > /dev/null
sudo mv /tmp/enginegp/*Autoinstall-* /tmp/enginegp/autoinstall 2>&1 | sudo tee -a "$logsInst" > /dev/null
# Starting the automatic installation
echo "===================================" 2>&1 | sudo tee -a "$logsInst" > /dev/null
echo "Starting the automatic installation" | tee -a "$logsInst"
echo "===================================" 2>&1 | sudo tee -a "$logsInst" > /dev/null
sudo chmod +x /tmp/enginegp/autoinstall/deb.install.sh 2>&1 | sudo tee -a "$logsInst" > /dev/null
# Передача значений в команду
if [ ${#relArgs[@]} -gt 0 ]; then
sudo /tmp/enginegp/autoinstall/deb.install.sh --php "$verPhp" --ip "$sysIp" "${relArgs[@]}"
else
sudo /tmp/enginegp/autoinstall/deb.install.sh --php "$verPhp" --ip "$sysIp"
fi
fi
done
else
echo "Your system is not supported." 2>&1 | tee -a "$logsInst"
fi