#!/bin/bash dirInstall="/Users/Shared/TorrServer" serviceName="ru.yourok.torrserver" function checkArch() { case $(uname -m) in i386) architecture="386" ;; i686) architecture="386" ;; x86_64) architecture="amd64" ;; aarch64) architecture="arm64" ;; *) 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 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 runningPid=$(ps -ax|grep -i torr|awk '{print $1}'|head -n1) sudo kill -9 $runningPid 1>/dev/null 2>&1 } function uninstall() { echo "" echo "Директория c TorrServer - ${dirInstall}" echo "" echo "Это действие удалит все данные TorrServer включая базу данных торрентов и настройки по указанному выше пути." echo "" printf 'Вы уверены что хотите удалить программу? ' read answer if [ "$answer" != "${answer#[YyДд]}" ] ; then cleanup sudo rm -rf $dirInstall echo "" echo "TorrServer удален c вашего Mac" else echo "" echo "OK" fi } checkArch function installTorrServer() { 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 echo "" echo "Создаем сервис автозагрузки TorrServer $(getLatestRelease) ..." echo "" echo "Система запросит ваш пароль администратора" echo "" cat << EOF > $dirInstall/$serviceName.plist Label ${serviceName} ServiceDescription TorrServer service for MacOS LaunchOnlyOnce RunAtLoad ProgramArguments ${dirInstall}/TorrServer-darwin-${architecture} --port 8090 --path ${dirInstall} --logpath ${dirInstall}/torrserver.log --httpauth StandardOutPath ${dirInstall}/torrserver.log StandardErrorPath ${dirInstall}/torrserver.log EOF ### cleanup ### printf 'Включить авторизацию на сервере? ' read answer if [ "$answer" != "${answer#[YyДд]}" ] ;then isAuth=1 else isAuth=0 fi if [[ "$isAuth" == 1 ]]; then echo "" echo "Вы выбрали установку с авторизацией" [[ ! -f "$dirInstall/accs.db" ]] && { echo "" printf 'Пользователь: ' read answer isAuthUser=$answer echo "" printf 'Пароль: ' read answer isAuthPass=$answer echo "" echo "Устанавливаем логин и пароль: $isAuthUser:$isAuthPass" echo "" echo -e "{\n \"$isAuthUser\": \"$isAuthPass\"\n}" > $dirInstall/accs.db } || { echo "" echo "Используйте реквизиты из ${dirInstall}/accs.db для входа" } else sed -i '' -e '/httpauth/d' $dirInstall/$serviceName.plist fi echo "" 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" 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" fi echo "" echo "Сервис автозагрузки записан в ${sysPath}" echo "" echo "TorrServer $(getLatestRelease) для ${architecture} Mac установлен в ${dirInstall}" } while true; do echo "" read -p "Хотите установить или обновить TorrServer? Для удаления введите «Удалить» " yn case $yn in [YyДд]* ) installTorrServer; break;; [DdУу]* ) uninstall; break;; [NnНн]* ) exit;; * ) echo "Ввведите Да (Yes) Нет (No) или Удалить (Delete).";; esac done echo "" echo "Have Fun!" echo ""