update Mac install script and add one for Linux

This commit is contained in:
nikk gitanes
2023-02-02 13:00:52 +03:00
parent f08f144ac7
commit 69337095f7
2 changed files with 586 additions and 50 deletions

482
installTorrServerLinux.sh Normal file
View File

@@ -0,0 +1,482 @@
#!/usr/bin/env bash
dirInstall="/opt/torrserver" # путь установки torrserver
serviceName="torrserver" # имя службы: systemctl status torrserver.service
scriptname=$(basename "$(test -L "$0" && readlink "$0" || echo "$0")")
#################################
# F U N C T I O N S #
#################################
function isRoot() {
if [ "$EUID" -ne 0 ]; then
return 1
fi
}
function checkRunning() {
runningPid=$(ps -ax|grep -i torrserver|grep -v grep|grep -v "$scriptname"|awk '{print $1}')
echo $runningPid
}
function getLang() {
lang=$(locale | grep LANG | cut -d= -f2 | tr -d '"' | cut -d_ -f1)
[[ $lang != "ru" ]] && lang="en"
}
function getIP() {
[ -z "`which dig`" ] && serverIP=$(host myip.opendns.com resolver1.opendns.com | tail -n1 | cut -d' ' -f4-) || serverIP=$(dig +short myip.opendns.com @resolver1.opendns.com)
# echo $serverIP
}
function uninstall() {
[[ $lang == "en" ]] && {
echo ""
echo " TorrServer install dir - ${dirInstall}"
echo ""
echo " This action will delete TorrServer including all it's torrents, settings and files on path above!"
echo ""
} || {
echo ""
echo " Директория c TorrServer - ${dirInstall}"
echo ""
echo " Это действие удалит все данные TorrServer включая базу данных торрентов и настройки по указанному выше пути!"
echo ""
}
[[ $lang == "en" ]] && printf ' Are you shure you want to delete TorrServer? (Yes/No) ' || printf ' Вы уверены что хотите удалить программу? (Да/Нет) '
read answer
if [ "$answer" != "${answer#[YyДд]}" ] ; then
cleanup
cleanAll
echo ""
[[ $lang == "en" ]] && echo " TorrServer deleted" || echo " TorrServer удален"
echo ""
else
echo ""
echo " OK"
echo ""
fi
}
function cleanup() {
systemctl stop $serviceName 2>/dev/null
systemctl disable $serviceName 2>/dev/null
rm -rf /usr/local/lib/systemd/system/$serviceName.service $dirInstall 2>/dev/null
}
function cleanAll() { # guess other installs
systemctl stop torr torrserver 2>/dev/null
systemctl disable torr torrserver 2>/dev/null
rm -rf /usr/local/torr 2>/dev/null
rm -rf /opt/torr{,*} 2>/dev/null
rm -f /{,etc,usr/local/lib}/systemd/system/tor{,r,rserver}.service 2>/dev/null
}
function helpUsage() {
[[ $lang == "en" ]] && echo -e "$scriptname
-i | --install | install - install latest release version
-u | --update | update - install latest update (if any)
-c | --check | check - check update (show only version info)
-d | --down | down - version downgrade, need version number as argument
-r | --remove | remove - uninstall TorrServer
-h | --help | help - this help screen
" || echo -e "$scriptname
-i | --install | install - установка последней версии
-u | --update | update - установка последнего обновления, если имеется
-c | --check | check - проверка обновления (выводит только информацию о версиях)
-d | --down | down - понизить версию, после опции указывается версия для понижения
-r | --remove | remove - удаление TorrServer
-h | --help | help - эта справка
"
}
function checkOS() {
if [[ -e /etc/debian_version ]]; then
OS="debian"
source /etc/os-release
if [[ $ID == "debian" || $ID == "raspbian" ]]; then
if [[ $VERSION_ID -lt 6 ]]; then
echo "⚠️ Ваша версия Debian не поддерживается."
echo ""
echo " Скрипт поддерживает только Debian >=6"
echo ""
exit 1
fi
elif [[ $ID == "ubuntu" ]]; then
OS="ubuntu"
MAJOR_UBUNTU_VERSION=$(echo "$VERSION_ID" | cut -d '.' -f1)
if [[ $MAJOR_UBUNTU_VERSION -lt 10 ]]; then
echo "⚠️ Ваша версия Ubuntu не поддерживается."
echo ""
echo " Скрипт поддерживает только Ubuntu >=10"
echo ""
exit 1
fi
fi
elif [[ -e /etc/system-release ]]; then
source /etc/os-release
if [[ $ID == "fedora" || $ID_LIKE == "fedora" ]]; then
OS="fedora"
# [ -z "$(rpm -qa wget)" ] && yum -y install wget
fi
if [[ $ID == "centos" || $ID == "rocky" || $ID == "redhat" ]]; then
OS="centos"
if [[ ! $VERSION_ID =~ (6|7|8) ]]; then
echo "⚠️ Ваша версия CentOS/RockyLinux/RedHat не поддерживается."
echo ""
echo " Скрипт поддерживает только CentOS/RockyLinux/RedHat версии 6,7 и 8."
echo ""
exit 1
fi
# [ -z "$(rpm -qa wget)" ] && yum -y install wget
fi
if [[ $ID == "ol" ]]; then
OS="oracle"
if [[ ! $VERSION_ID =~ (6|7|8) ]]; then
echo "⚠️ Ваша версия Oracle Linux не поддерживается."
echo ""
echo " Скрипт поддерживает только Oracle Linux версии 6,7 и 8."
exit 1
fi
# [ -z "$(rpm -qa wget)" ] && yum -y install wget
fi
if [[ $ID == "amzn" ]]; then
OS="amzn"
if [[ $VERSION_ID != "2" ]]; then
echo "⚠️ Ваша версия Amazon Linux не поддерживается."
echo ""
echo " Скрипт поддерживает только Amazon Linux 2."
echo ""
exit 1
fi
# [ -z "$(rpm -qa wget)" ] && yum -y install wget
fi
elif [[ -e /etc/arch-release ]]; then
OS=arch
# [ -z $(pacman -Qqe wget 2>/dev/null) ] && pacman -Sy --noconfirm wget
else
echo " Похоже, что вы запускаете этот установщик в системе отличной от Debian, Ubuntu, Fedora, CentOS, Amazon Linux, Oracle Linux или Arch Linux."
exit 1
fi
}
function checkArch() {
case $(uname -m) in
i386) architecture="386" ;;
i686) architecture="386" ;;
x86_64) architecture="amd64" ;;
aarch64) architecture="arm64" ;;
armv7|armv7l) architecture="arm7";;
armv6|armv6l) architecture="arm5";;
*) [[ $lang == "en" ]] && { echo " Unsupported Arch. Can't continue."; exit 1; } || { echo " Не поддерживаемая архитектура. Продолжение невозможно."; exit 1; } ;;
esac
}
function checkInternet() {
[ -z "`which ping`" ] && echo " Сначала установите iputils-ping" && exit 1
[[ $lang == "en" ]] && echo " Check Internet access…" || echo " Проверяем соединение с Интернетом…"
if ! ping -c 2 google.com &> /dev/null; then
[[ $lang == "en" ]] && echo " - No Internet. Check your network and DNS settings." || echo " - Нет Интернета. Проверьте ваше соединение, а также разрешение имен DNS."
exit 1
fi
[[ $lang == "en" ]] && echo " - Have Internet Access" || echo " - соединение с Интернетом успешно"
}
function initialCheck() {
if ! isRoot; then
[[ $lang == "en" ]] && echo " Script must run as root or user with sudo privileges. Example: sudo $scriptname" || echo " Вам нужно запустить скрипт от root или пользователя с правами sudo. Пример: sudo $scriptname"
exit 1
fi
[ -z "`which curl`" ] && echo " Сначала установите curl" && exit 1
checkOS
checkArch
checkInternet
}
function getLatestRelease() {
curl -s "https://api.github.com/repos/YouROK/TorrServer/releases" |
grep -iE '"tag_name":|"version":' |
sed -E 's/.*"([^"]+)".*/\1/' |
head -1
}
function installTorrServer() {
[[ $lang == "en" ]] && echo " Install and configure TorrServer…" || echo " Устанавливаем и настраиваем TorrServer…"
if checkInstalled; then
if ! checkInstalledVersion; then
[[ $lang == "en" ]] && printf ' Want to update TorrServer? (Yes/No) ' || printf ' Хотите обновить TorrServer? (Да/Нет) '
read answer
if [ "$answer" != "${answer#[YyДд]}" ] ;then
UpdateVersion
fi
fi
fi
binName="TorrServer-linux-${architecture}"
[[ ! -d "$dirInstall" ]] && mkdir -p ${dirInstall}
[[ ! -d "/usr/local/lib/systemd/system" ]] && mkdir -p "/usr/local/lib/systemd/system"
urlBin="https://github.com/YouROK/TorrServer/releases/download/$(getLatestRelease)/${binName}"
if [[ ! -f "$dirInstall/$binName" ]] | [[ ! -x "$dirInstall/$binName" ]] || [[ $(stat -c%s "$dirInstall/$binName" 2>/dev/null) -eq 0 ]]; then
curl -L --progress-bar -# -o "$dirInstall/$binName" "$urlBin"
chmod +x "$dirInstall/$binName"
fi
cat << EOF > $dirInstall/$serviceName.service
[Unit]
Description = TorrServer - stream torrent to http
Wants = network-online.target
After = network.target
[Service]
User = root
Group = root
Type = simple
NonBlocking = true
EnvironmentFile = $dirInstall/$serviceName.config
ExecStart = ${dirInstall}/${binName} \$DAEMON_OPTIONS
ExecReload = /bin/kill -HUP \${MAINPID}
ExecStop = /bin/kill -INT \${MAINPID}
TimeoutSec = 30
#WorkingDirectory = ${dirInstall}
Restart = on-failure
RestartSec = 5s
#LimitNOFILE = 4096
[Install]
WantedBy = multi-user.target
EOF
[ -z $servicePort ] && {
[[ $lang == "en" ]] && printf ' Change TorrServer web-port? (Yes/No) ' || printf ' Хотите изменить порт для TorrServer? (Да/Нет) '
read answer
if [ "$answer" != "${answer#[YyДд]}" ] ;then
[[ $lang == "en" ]] && printf ' Enter port number: ' || printf ' Введите номер порта: '
read answer
servicePort=$answer
else
servicePort="8090"
fi
}
[ -z $isAuth ] && {
[[ $lang == "en" ]] && printf ' Enable server authorization? (Yes/No) ' || printf ' Включить авторизацию на сервере? (Да/Нет) '
read answer
if [ "$answer" != "${answer#[YyДд]}" ] ;then
isAuth=1
else
isAuth=0
fi
}
if [[ "$isAuth" == 1 ]]; then
[[ ! -f "$dirInstall/accs.db" ]] && {
[[ $lang == "en" ]] && printf ' User: ' || printf ' Пользователь: '
read answer
isAuthUser=$answer
[[ $lang == "en" ]] && printf ' Password: ' || printf ' Пароль: '
read answer
isAuthPass=$answer
[[ $lang == "en" ]] && echo " Apply user and password - $isAuthUser:$isAuthPass" || echo " Устанавливаем логин и пароль - $isAuthUser:$isAuthPass"
echo -e "{\n \"$isAuthUser\": \"$isAuthPass\"\n}" > $dirInstall/accs.db
} || {
[[ $lang == "en" ]] && echo " Use existing auth from ${dirInstall}/accs.db" || echo " Используйте реквизиты из ${dirInstall}/accs.db для входа"
}
cat << EOF > $dirInstall/$serviceName.config
DAEMON_OPTIONS="--port $servicePort --path $dirInstall --httpauth"
EOF
else
cat << EOF > $dirInstall/$serviceName.config
DAEMON_OPTIONS="--port $servicePort --path $dirInstall"
EOF
fi
[ -z $isRdb ] && {
[[ $lang == "en" ]] && printf ' Start TorrServer in public read-only mode? (Yes/No) ' || printf ' Запускать TorrServer в публичном режиме без возможности изменения настроек через веб сервера? (Да/Нет) '
read answer
if [ "$answer" != "${answer#[YyДд]}" ] ;then
isRdb=1
else
isRdb=0
fi
}
if [[ "$isRdb" == 1 ]]; then
[[ $lang == "en" ]] && {
echo " Set database to read-only mode…"
echo " To change remove --rdb option from $dirInstall/$serviceName.config"
echo " or rerun install script without parameters"
} || {
echo " База данных устанавливается в режим «только для чтения»…"
echo " Для изменения отредактируйте $dirInstall/$serviceName.config, убрав опцию --rdb"
echo " или запустите интерактивную установку без параметров повторно"
}
sed -i 's|DAEMON_OPTIONS="--port|DAEMON_OPTIONS="--rdb --port|' $dirInstall/$serviceName.config
fi
[ -z $isLog ] && {
[[ $lang == "en" ]] && printf ' Enable TorrServer log output to file? (Yes/No) ' || printf ' Включить запись журнала работы TorrServer в файл? (Да/Нет) '
read answer
if [ "$answer" != "${answer#[YyДд]}" ] ;then
sed -i "s|--path|--logpath $dirInstall/$serviceName.log --path|" "$dirInstall/$serviceName.config"
fi
}
ln -sf $dirInstall/$serviceName.service /usr/local/lib/systemd/system/
sed -i 's/^[ \t]*//' $dirInstall/$serviceName.service
sed -i 's/^[ \t]*//' $dirInstall/$serviceName.config
[[ $lang == "en" ]] && echo " Starting TorrServer…" || echo " Запускаем службу TorrServer…"
systemctl daemon-reload 2>/dev/null
systemctl enable --now $serviceName.service 2>/dev/null
getIP
[[ $lang == "en" ]] && {
echo ""
echo " TorrServer $(getLatestRelease) installed to ${dirInstall}"
echo ""
echo " You can now open your browser at http://${serverIP}:${servicePort} to access TorrServer web GUI."
echo ""
} || {
echo ""
echo " TorrServer $(getLatestRelease) установлен в директории ${dirInstall}"
echo ""
echo " Теперь вы можете открыть браузер по адресу http://${serverIP}:${servicePort} для доступа к вебу TorrServer"
echo ""
}
if [[ "$isAuth" == 1 && $isAuthUser > 0 ]]; then
[[ $lang == "en" ]] && echo " Use user \"$isAuthUser\" with password \"$isAuthPass\" for authentication" || echo " Для авторизации введите пользователя $isAuthUser с паролем $isAuthPass"
echo ""
fi
}
function checkInstalled() {
binName="TorrServer-linux-${architecture}"
if [[ -f "$dirInstall/$binName" ]] || [[ $(stat -c%s "$dirInstall/$binName" 2>/dev/null) -ne 0 ]]; then
[[ $lang == "en" ]] && echo " - TorrServer found in $dirInstall" || echo " - TorrServer найден в директории $dirInstall"
else
[[ $lang == "en" ]] && echo " - TorrServer not found. It's not installed or have zero size." || echo " - TorrServer не найден, возможно он не установлен или размер бинарника равен 0."
return 1
fi
}
function checkInstalledVersion() {
binName="TorrServer-linux-${architecture}"
if [[ -z "$(getLatestRelease)" ]]; then
[[ $lang == "en" ]] && echo " - No update. Can be server issue." || echo " - Не найдено обновление. Возможно сервер не доступен."
exit 1
fi
if [[ "$(getLatestRelease)" == "$($dirInstall/$binName --version 2>/dev/null | awk '{print $2}')" ]]; then
[[ $lang == "en" ]] && echo " - You have latest TorrServer $(getLatestRelease)" || echo " - Установлен TorrServer последней версии $(getLatestRelease)"
else
[[ $lang == "en" ]] && {
echo " - TorrServer update found!"
echo " installed: \"$($dirInstall/$binName --version 2>/dev/null | awk '{print $2}')\""
echo " available: \"$(getLatestRelease)\""
} || {
echo " - Доступно обновление сервера"
echo " установлен: \"$($dirInstall/$binName --version 2>/dev/null | awk '{print $2}')\""
echo " обновление: \"$(getLatestRelease)\""
}
return 1
fi
}
function UpdateVersion() {
systemctl stop $serviceName.service
binName="TorrServer-linux-${architecture}"
urlBin="https://github.com/YouROK/TorrServer/releases/download/$(getLatestRelease)/${binName}"
curl -L --progress-bar -# -o "$dirInstall/$binName" "$urlBin"
chmod +x "$dirInstall/$binName"
systemctl start $serviceName.service
}
function DowngradeVersion() {
systemctl stop $serviceName.service
binName="TorrServer-linux-${architecture}"
urlBin="https://github.com/YouROK/TorrServer/releases/download/MatriX.$downgradeRelease/${binName}"
curl -L --progress-bar -# -o "$dirInstall/$binName" "$urlBin"
chmod +x "$dirInstall/$binName"
systemctl start $serviceName.service
}
#####################################
# E N D F U N C T I O N S #
#####################################
getLang
case $1 in
-i|--install|install)
initialCheck
if ! checkInstalled; then
servicePort="8090"
isAuth=0
isRdb=0
isLog=0
installTorrServer
fi
exit
;;
-u|--update|update)
initialCheck
if checkInstalled; then
if ! checkInstalledVersion; then
UpdateVersion
fi
fi
exit
;;
-c|--check|check)
initialCheck
if checkInstalled; then
checkInstalledVersion
fi
exit
;;
-d|--down|down)
initialCheck
downgradeRelease="$2"
[ -z "$downgradeRelease" ] &&
echo " Вы не указали номер версии" &&
echo " Наберите $scriptname -d|-down|down <версия>, например $scriptname -d 101" &&
exit 1
if checkInstalled; then
DowngradeVersion
fi
exit
;;
-r|--remove|remove)
uninstall
exit
;;
-h|--help|help)
helpUsage
exit
;;
*)
echo ""
echo " Choose Language:"
echo " [1] English"
echo " [2] Русский"
printf ' Your language (Ваш язык): '
read answer
if [ "$answer" != "${answer#[2]}" ] ;then
lang="ru"
fi
echo ""
echo "============================================================="
[[ $lang == "en" ]] && echo " TorrServer install and configuration script for Linux " || echo " Скрипт установки, удаления и настройки TorrServer для Linux "
echo "============================================================="
echo ""
[[ $lang == "en" ]] && echo " Enter $scriptname -h or --help or help for all available commands" || echo " Наберите $scriptname -h или --help или help для вызова справки всех доступных команд"
;;
esac
while true; do
echo ""
[[ $lang == "en" ]] && read -p " Want to install or configure TorrServer? (Yes|No) Type Delete to uninstall. " yn || read -p " Хотите установить, обновить или настроить TorrServer? (Да|Нет) Для удаления введите «Удалить» " yn
case $yn in
[YyДд]* )
initialCheck;
installTorrServer;
break;;
[DdУу]* )
uninstall;
break;;
[NnНн]* )
break;;
* ) [[ $lang == "en" ]] && echo " Enter Yes, No or Delete" || echo " Ввведите Да, Нет или Удалить" ;;
esac
done
echo " Have Fun!"
echo ""
sleep 3

View File

@@ -2,13 +2,18 @@
dirInstall="/Users/Shared/TorrServer" dirInstall="/Users/Shared/TorrServer"
serviceName="torrserver" serviceName="torrserver"
function getLang() {
lang=$(locale | grep LANG | cut -d= -f2 | tr -d '"' | cut -d_ -f1)
[[ $lang != "ru" ]] && lang="en"
}
function checkArch() { function checkArch() {
case $(uname -m) in case $(uname -m) in
i386) architecture="386" ;; i386) architecture="386" ;;
i686) architecture="386" ;; i686) architecture="386" ;;
x86_64) architecture="amd64" ;; x86_64) architecture="amd64" ;;
aarch64) architecture="arm64" ;; aarch64) architecture="arm64" ;;
*) echo "Извините, не поддерживаемая архитектура. Продолжение невозможно" && exit 1;; *) [[ $lang == "en" ]] && { echo ""; echo "Unsupported Arch. Can't continue."; exit 1; } || { echo ""; echo "Не поддерживаемая архитектура. Продолжение невозможно."; exit 1; } ;;
esac esac
} }
@@ -19,29 +24,42 @@ function getLatestRelease() {
head -1 head -1
} }
function killRunning() {
self="$(basename "$0")"
runningPid=$(ps -ax|grep -i torrserver|grep -v grep|grep -v "$self"|awk '{print $1}')
# echo $runningPid
[ -z $runningPid ] || sudo kill -9 $runningPid
}
function cleanup() { function cleanup() {
sudo rm -f /Library/LaunchAgents/*torrserver* 1>/dev/null 2>&1 sudo rm -f /Library/LaunchAgents/*torrserver* 1>/dev/null 2>&1
sudo rm -f /Library/LaunchDaemons/*torrserver* 1>/dev/null 2>&1 sudo rm -f /Library/LaunchDaemons/*torrserver* 1>/dev/null 2>&1
sudo rm -f $HOME/Library/LaunchAgents/*torrserver* 1>/dev/null 2>&1 sudo rm -f $HOME/Library/LaunchAgents/*torrserver* 1>/dev/null 2>&1
sudo rm -f $HOME/Library/LaunchDaemons/*torrserver* 1>/dev/null 2>&1 sudo rm -f $HOME/Library/LaunchDaemons/*torrserver* 1>/dev/null 2>&1
self="$(basename "$0")" killRunning
runningPid=$(ps -ax|grep -i torrserver|grep -v grep|grep -v "$self"|awk '{print $1}')
sudo kill -9 $runningPid 1>/dev/null 2>&1
} }
function uninstall() { function uninstall() {
echo "" [[ $lang == "en" ]] && {
echo "Директория c TorrServer - ${dirInstall}" echo ""
echo "" echo "TorrServer install dir - ${dirInstall}"
echo "Это действие удалит все данные TorrServer включая базу данных торрентов и настройки по указанному выше пути." echo ""
echo "" echo "This action will delete TorrServer including all it's torrents, settings and files on path above."
printf 'Вы уверены что хотите удалить программу? ' echo ""
} || {
echo ""
echo "Директория c TorrServer - ${dirInstall}"
echo ""
echo "Это действие удалит все данные TorrServer включая базу данных торрентов и настройки по указанному выше пути."
echo ""
}
[[ $lang == "en" ]] && printf 'Are you shure you want to delete TorrServer? (Yes/No) ' || printf 'Вы уверены что хотите удалить программу? (Да/Нет) '
read answer read answer
if [ "$answer" != "${answer#[YyДд]}" ] ; then if [ "$answer" != "${answer#[YyДд]}" ]; then
cleanup cleanup
sudo rm -rf $dirInstall sudo rm -rf $dirInstall
echo "" echo ""
echo "TorrServer удален c вашего Mac" [[ $lang == "en" ]] && echo "TorrServer deleted from Mac" || echo "TorrServer удален c вашего Mac"
echo "" echo ""
sleep 5 sleep 5
else else
@@ -51,13 +69,17 @@ function uninstall() {
sleep 5 sleep 5
fi fi
} }
checkArch
function installTorrServer() { function installTorrServer() {
echo "" [[ $lang == "en" ]] && {
echo "Устанавливаем TorrServer $(getLatestRelease) ..." echo ""
echo "" echo "Install TorrServer $(getLatestRelease)"
echo ""
} || {
echo ""
echo "Устанавливаем TorrServer $(getLatestRelease)"
echo ""
}
binName="TorrServer-darwin-${architecture}" binName="TorrServer-darwin-${architecture}"
[[ ! -d "$dirInstall" ]] && mkdir -p ${dirInstall} [[ ! -d "$dirInstall" ]] && mkdir -p ${dirInstall}
urlBin="https://github.com/YouROK/TorrServer/releases/download/$(getLatestRelease)/${binName}" urlBin="https://github.com/YouROK/TorrServer/releases/download/$(getLatestRelease)/${binName}"
@@ -66,11 +88,34 @@ function installTorrServer() {
chmod a+rx "$dirInstall/$binName" chmod a+rx "$dirInstall/$binName"
xattr -r -d com.apple.quarantine "$dirInstall/$binName" xattr -r -d com.apple.quarantine "$dirInstall/$binName"
fi fi
echo "" [[ $lang == "en" ]] && {
echo "Создаем сервис автозагрузки TorrServer $(getLatestRelease) ..." echo ""
echo "" echo "Add autostart service for TorrServer $(getLatestRelease)"
echo "Система запросит ваш пароль администратора" echo ""
echo "" echo "System will ask your administrator password"
echo ""
} || {
echo ""
echo "Создаем сервис автозагрузки TorrServer $(getLatestRelease)"
echo ""
echo "Система запросит ваш пароль администратора"
echo ""
}
###
cleanup
###
[[ $lang == "en" ]] && printf 'Change TorrServer web port? (Yes/No) ' || printf 'Хотите изменить веб-порт для TorrServer? (Да/Нет) '
read answer
if [ "$answer" != "${answer#[YyДд]}" ]; then
echo ""
[[ $lang == "en" ]] && printf 'Enter port number: ' || printf 'Введите номер порта: '
read answer
servicePort=$answer
echo ""
else
servicePort="8090"
echo ""
fi
cat << EOF > $dirInstall/$serviceName.plist cat << EOF > $dirInstall/$serviceName.plist
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
@@ -88,7 +133,7 @@ function installTorrServer() {
<array> <array>
<string>${dirInstall}/TorrServer-darwin-${architecture}</string> <string>${dirInstall}/TorrServer-darwin-${architecture}</string>
<string>--port</string> <string>--port</string>
<string>8090</string> <string>${servicePort}</string>
<string>--path</string> <string>--path</string>
<string>${dirInstall}</string> <string>${dirInstall}</string>
<string>--logpath</string> <string>--logpath</string>
@@ -102,43 +147,40 @@ function installTorrServer() {
</dict> </dict>
</plist> </plist>
EOF EOF
### [[ $lang == "en" ]] && printf 'Enable HTTP Authorization? (Yes/No) ' || printf 'Включить авторизацию на сервере? (Да/Нет) '
cleanup
###
printf 'Включить авторизацию на сервере? '
read answer read answer
if [ "$answer" != "${answer#[YyДд]}" ] ;then if [ "$answer" != "${answer#[YyДд]}" ]; then
isAuth=1 isAuth=1
else else
isAuth=0 isAuth=0
fi fi
echo "" echo ""
if [[ "$isAuth" == 1 ]]; then if [[ "$isAuth" == 1 ]]; then
echo "Вы выбрали установку с авторизацией" [[ $lang == "en" ]] && echo "HTTP Auth Install choosen" || echo "Вы выбрали установку с авторизацией"
[[ ! -f "$dirInstall/accs.db" ]] && { [[ ! -f "$dirInstall/accs.db" ]] && {
echo "" echo ""
printf 'Пользователь: ' [[ $lang == "en" ]] && printf 'User: ' || printf 'Пользователь: '
read answer read answer
isAuthUser=$answer isAuthUser=$answer
echo "" echo ""
printf 'Пароль: ' [[ $lang == "en" ]] && printf 'Password: ' || printf 'Пароль: '
read answer read answer
isAuthPass=$answer isAuthPass=$answer
echo "" echo ""
echo "Устанавливаем логин и пароль: $isAuthUser:$isAuthPass" [[ $lang == "en" ]] && echo "Added credentials: $isAuthUser:$isAuthPass" || echo "Устанавливаем логин и пароль: $isAuthUser:$isAuthPass"
echo "" echo ""
echo -e "{\n \"$isAuthUser\": \"$isAuthPass\"\n}" > $dirInstall/accs.db echo -e "{\n \"$isAuthUser\": \"$isAuthPass\"\n}" > $dirInstall/accs.db
} || { } || {
echo "" echo ""
echo "Используйте реквизиты из ${dirInstall}/accs.db для входа" [[ $lang == "en" ]] && echo "Use ${dirInstall}/accs.db credentials for access" || echo "Используйте реквизиты из ${dirInstall}/accs.db для входа"
echo "" echo ""
} }
else else
sed -i '' -e '/httpauth/d' $dirInstall/$serviceName.plist sed -i '' -e '/httpauth/d' $dirInstall/$serviceName.plist
fi fi
printf 'Автозагрузка для текушего пользователя (1) или всех (2)? ' [[ $lang == "en" ]] && printf 'Add autostart for current user (1) or all users (2)? ' || printf 'Добавить автозагрузку для текушего пользователя (1) или всех (2)? '
read answer read answer
if [ "$answer" != "${answer#[1]}" ] ;then if [ "$answer" != "${answer#[1]}" ]; then
# user # user
sysPath="${HOME}/Library/LaunchAgents" sysPath="${HOME}/Library/LaunchAgents"
[[ ! -d "$sysPath" ]] && mkdir -p ${sysPath} [[ ! -d "$sysPath" ]] && mkdir -p ${sysPath}
@@ -154,31 +196,43 @@ EOF
sudo chmod 0644 "$sysPath/$serviceName.plist" sudo chmod 0644 "$sysPath/$serviceName.plist"
sudo launchctl load -w "$sysPath/$serviceName.plist" 1>/dev/null 2>&1 sudo launchctl load -w "$sysPath/$serviceName.plist" 1>/dev/null 2>&1
fi fi
echo "" [[ $lang == "en" ]] && {
echo "Сервис автозагрузки записан в ${sysPath}" echo ""
echo "" echo "Autostart service added to ${sysPath}"
echo "TorrServer $(getLatestRelease) для ${architecture} Mac установлен в ${dirInstall}" echo ""
echo "" echo "TorrServer $(getLatestRelease) for ${architecture} Mac installed to ${dirInstall}"
echo "Теперь вы можете открыть браузер по адресу http://localhost:8090 для его настройки" echo ""
echo "" echo "You can open browser URL http://localhost:$servicePort for TorrServer setup and use"
echo ""
} || {
echo ""
echo "Сервис автозагрузки записан в ${sysPath}"
echo ""
echo "TorrServer $(getLatestRelease) для ${architecture} Mac установлен в ${dirInstall}"
echo ""
echo "Теперь вы можете открыть браузер по адресу http://localhost:$servicePort для его настройки и использования"
echo ""
}
if [[ "$isAuth" == 1 && $isAuthUser > 0 ]]; then if [[ "$isAuth" == 1 && $isAuthUser > 0 ]]; then
echo "Для авторизации введите пользователя $isAuthUser с паролем $isAuthPass" [[ $lang == "en" ]] && echo "Use user \"$isAuthUser\" with password \"$isAuthPass\" for web auth" || echo "Для авторизации введите пользователя $isAuthUser с паролем $isAuthPass"
echo "" echo ""
fi fi
sleep 60 sleep 60
} }
while true; do while true; do
echo "===============================================================" getLang
echo " Скрипт установки, обновления и удаления TorrServer для MacOS"
echo "==============================================================="
echo "" echo ""
read -p "Хотите установить или обновить TorrServer? Для удаления введите «Удалить» " yn echo "=============================================================="
[[ $lang == "en" ]] && echo " TorrServer install, update and uninstall script for MacOS " || echo " Скрипт установки, обновления и удаления TorrServer для MacOS "
echo "=============================================================="
echo ""
[[ $lang == "en" ]] && read -p "Want to install or update TorrServer? (Yes or No). Enter \"Delete\" to Uninstall TorrServer. " yn || read -p "Хотите установить или обновить TorrServer? (Да|Нет). Для удаления введите «Удалить». " yn
case $yn in case $yn in
[YyДд]* ) installTorrServer; break;; [YyДд]* ) checkArch; installTorrServer; break;;
[DdУу]* ) uninstall; break;; [DdУу]* ) uninstall; break;;
[NnНн]* ) exit;; [NnНн]* ) exit;;
* ) echo "Ввведите Да (Yes) Нет (No) или Удалить (Delete).";; * ) [[ $lang == "en" ]] && { echo ""; echo "Enter \"Yes\", \"No\" or \"Delete\"."; } || { echo ""; echo "Ввведите «Да», «Нет» или «Удалить»."; } ;;
esac esac
done done
echo "Have Fun!" echo "Have Fun!"