#!/bin/bash dirInstall="/Users/Shared/TorrServer" serviceName="torrserver" function getLang() { lang=$(locale | grep LANG | cut -d= -f2 | tr -d '"' | cut -d_ -f1) [[ $lang != "ru" ]] && lang="en" } function checkArch() { case $(uname -m) in i386) architecture="386" ;; i686) architecture="386" ;; x86_64) architecture="amd64" ;; aarch64) architecture="arm64" ;; *) [[ $lang == "en" ]] && { echo ""; echo "Unsupported Arch. Can't continue."; exit 1; } || { echo ""; echo "Не поддерживаемая архитектура. Продолжение невозможно."; exit 1; } ;; esac } function getLatestRelease() { curl -s "https://api.github.com/repos/YouROK/TorrServer/releases" | grep -iE '"tag_name":|"version":' | sed -E 's/.*"([^"]+)".*/\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() { 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 $HOME/Library/LaunchAgents/*torrserver* 1>/dev/null 2>&1 sudo rm -f $HOME/Library/LaunchDaemons/*torrserver* 1>/dev/null 2>&1 killRunning } 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 sudo rm -rf $dirInstall echo "" [[ $lang == "en" ]] && echo "TorrServer deleted from Mac" || echo "TorrServer удален c вашего Mac" echo "" sleep 5 else echo "" echo "OK" echo "" sleep 5 fi } function installTorrServer() { [[ $lang == "en" ]] && { echo "" echo "Install TorrServer $(getLatestRelease)…" echo "" } || { echo "" echo "Устанавливаем TorrServer $(getLatestRelease)…" echo "" } binName="TorrServer-darwin-${architecture}" [[ ! -d "$dirInstall" ]] && mkdir -p ${dirInstall} 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 a+rx "$dirInstall/$binName" xattr -r -d com.apple.quarantine "$dirInstall/$binName" fi [[ $lang == "en" ]] && { echo "" echo "Add autostart service for TorrServer $(getLatestRelease)…" 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 Label ${serviceName} ServiceDescription TorrServer service for MacOS LaunchOnlyOnce RunAtLoad ProgramArguments ${dirInstall}/TorrServer-darwin-${architecture} --port ${servicePort} --path ${dirInstall} --logpath ${dirInstall}/torrserver.log --httpauth StandardOutPath ${dirInstall}/torrserver.log StandardErrorPath ${dirInstall}/torrserver.log EOF [[ $lang == "en" ]] && printf 'Enable HTTP Authorization? (Yes/No) ' || printf 'Включить авторизацию на сервере? (Да/Нет) ' read answer if [ "$answer" != "${answer#[YyДд]}" ]; then isAuth=1 else isAuth=0 fi echo "" if [[ "$isAuth" == 1 ]]; then [[ $lang == "en" ]] && echo "HTTP Auth Install choosen" || echo "Вы выбрали установку с авторизацией" [[ ! -f "$dirInstall/accs.db" ]] && { echo "" [[ $lang == "en" ]] && printf 'User: ' || printf 'Пользователь: ' read answer isAuthUser=$answer echo "" [[ $lang == "en" ]] && printf 'Password: ' || printf 'Пароль: ' read answer isAuthPass=$answer echo "" [[ $lang == "en" ]] && echo "Added credentials: $isAuthUser:$isAuthPass" || echo "Устанавливаем логин и пароль: $isAuthUser:$isAuthPass" echo "" echo -e "{\n \"$isAuthUser\": \"$isAuthPass\"\n}" > $dirInstall/accs.db } || { echo "" [[ $lang == "en" ]] && echo "Use ${dirInstall}/accs.db credentials for access" || echo "Используйте реквизиты из ${dirInstall}/accs.db для входа" echo "" } else sed -i '' -e '/httpauth/d' $dirInstall/$serviceName.plist fi [[ $lang == "en" ]] && printf 'Add autostart for current user (1) or all users (2)? ' || printf 'Добавить автозагрузку для текушего пользователя (1) или всех (2)? ' read answer if [ "$answer" != "${answer#[1]}" ]; then # user sysPath="${HOME}/Library/LaunchAgents" [[ ! -d "$sysPath" ]] && mkdir -p ${sysPath} cp "$dirInstall/$serviceName.plist" $sysPath chmod 0644 "$sysPath/$serviceName.plist" launchctl load -w "$sysPath/$serviceName.plist" 1>/dev/null 2>&1 else # root sysPath="/Library/LaunchDaemons" [[ ! -d "$sysPath" ]] && sudo mkdir -p ${sysPath} sudo cp "$dirInstall/$serviceName.plist" $sysPath sudo chown root:wheel "$sysPath/$serviceName.plist" sudo chmod 0644 "$sysPath/$serviceName.plist" sudo launchctl load -w "$sysPath/$serviceName.plist" 1>/dev/null 2>&1 fi [[ $lang == "en" ]] && { echo "" echo "Autostart service added to ${sysPath}" echo "" echo "TorrServer $(getLatestRelease) for ${architecture} Mac installed to ${dirInstall}" 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 [[ $lang == "en" ]] && echo "Use user \"$isAuthUser\" with password \"$isAuthPass\" for web auth" || echo "Для авторизации введите пользователя $isAuthUser с паролем $isAuthPass" echo "" fi sleep 60 } while true; do getLang echo "" 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 [YyДд]* ) checkArch; installTorrServer; break;; [DdУу]* ) uninstall; break;; [NnНн]* ) exit;; * ) [[ $lang == "en" ]] && { echo ""; echo "Enter \"Yes\", \"No\" or \"Delete\"."; } || { echo ""; echo "Ввведите «Да», «Нет» или «Удалить»."; } ;; esac done echo "Have Fun!" echo "" sleep 5