From 69337095f7a2632cd1a3a1893b5241a80df80ad7 Mon Sep 17 00:00:00 2001 From: nikk gitanes Date: Thu, 2 Feb 2023 13:00:52 +0300 Subject: [PATCH 1/9] update Mac install script and add one for Linux --- installTorrServerLinux.sh | 482 ++++++++++++++++++++++++++++++++++++++ installTorrServerMac.sh | 154 ++++++++---- 2 files changed, 586 insertions(+), 50 deletions(-) create mode 100644 installTorrServerLinux.sh diff --git a/installTorrServerLinux.sh b/installTorrServerLinux.sh new file mode 100644 index 0000000..f8a4224 --- /dev/null +++ b/installTorrServerLinux.sh @@ -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 \ No newline at end of file diff --git a/installTorrServerMac.sh b/installTorrServerMac.sh index c27d1ed..18f51f7 100755 --- a/installTorrServerMac.sh +++ b/installTorrServerMac.sh @@ -2,13 +2,18 @@ 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" ;; - *) echo "Извините, не поддерживаемая архитектура. Продолжение невозможно" && exit 1;; + *) [[ $lang == "en" ]] && { echo ""; echo "Unsupported Arch. Can't continue."; exit 1; } || { echo ""; echo "Не поддерживаемая архитектура. Продолжение невозможно."; exit 1; } ;; esac } @@ -19,29 +24,42 @@ function getLatestRelease() { 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 - self="$(basename "$0")" - runningPid=$(ps -ax|grep -i torrserver|grep -v grep|grep -v "$self"|awk '{print $1}') - sudo kill -9 $runningPid 1>/dev/null 2>&1 + killRunning } function uninstall() { - echo "" - echo "Директория c TorrServer - ${dirInstall}" - echo "" - echo "Это действие удалит все данные TorrServer включая базу данных торрентов и настройки по указанному выше пути." - echo "" - printf 'Вы уверены что хотите удалить программу? ' + [[ $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 + if [ "$answer" != "${answer#[YyДд]}" ]; then cleanup sudo rm -rf $dirInstall echo "" - echo "TorrServer удален c вашего Mac" + [[ $lang == "en" ]] && echo "TorrServer deleted from Mac" || echo "TorrServer удален c вашего Mac" echo "" sleep 5 else @@ -51,13 +69,17 @@ function uninstall() { sleep 5 fi } - -checkArch function installTorrServer() { - echo "" - echo "Устанавливаем TorrServer $(getLatestRelease) ..." - echo "" + [[ $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}" @@ -66,11 +88,34 @@ function installTorrServer() { chmod a+rx "$dirInstall/$binName" xattr -r -d com.apple.quarantine "$dirInstall/$binName" fi - echo "" - echo "Создаем сервис автозагрузки TorrServer $(getLatestRelease) ..." - echo "" - echo "Система запросит ваш пароль администратора" - echo "" + [[ $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 @@ -88,7 +133,7 @@ function installTorrServer() { ${dirInstall}/TorrServer-darwin-${architecture} --port - 8090 + ${servicePort} --path ${dirInstall} --logpath @@ -102,43 +147,40 @@ function installTorrServer() { EOF -### - cleanup -### - printf 'Включить авторизацию на сервере? ' + [[ $lang == "en" ]] && printf 'Enable HTTP Authorization? (Yes/No) ' || printf 'Включить авторизацию на сервере? (Да/Нет) ' read answer - if [ "$answer" != "${answer#[YyДд]}" ] ;then + if [ "$answer" != "${answer#[YyДд]}" ]; then isAuth=1 else isAuth=0 fi echo "" if [[ "$isAuth" == 1 ]]; then - echo "Вы выбрали установку с авторизацией" + [[ $lang == "en" ]] && echo "HTTP Auth Install choosen" || echo "Вы выбрали установку с авторизацией" [[ ! -f "$dirInstall/accs.db" ]] && { echo "" - printf 'Пользователь: ' + [[ $lang == "en" ]] && printf 'User: ' || printf 'Пользователь: ' read answer isAuthUser=$answer echo "" - printf 'Пароль: ' + [[ $lang == "en" ]] && printf 'Password: ' || printf 'Пароль: ' read answer isAuthPass=$answer echo "" - echo "Устанавливаем логин и пароль: $isAuthUser:$isAuthPass" + [[ $lang == "en" ]] && echo "Added credentials: $isAuthUser:$isAuthPass" || echo "Устанавливаем логин и пароль: $isAuthUser:$isAuthPass" echo "" echo -e "{\n \"$isAuthUser\": \"$isAuthPass\"\n}" > $dirInstall/accs.db } || { echo "" - echo "Используйте реквизиты из ${dirInstall}/accs.db для входа" + [[ $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 - printf 'Автозагрузка для текушего пользователя (1) или всех (2)? ' + [[ $lang == "en" ]] && printf 'Add autostart for current user (1) or all users (2)? ' || printf 'Добавить автозагрузку для текушего пользователя (1) или всех (2)? ' read answer - if [ "$answer" != "${answer#[1]}" ] ;then + if [ "$answer" != "${answer#[1]}" ]; then # user sysPath="${HOME}/Library/LaunchAgents" [[ ! -d "$sysPath" ]] && mkdir -p ${sysPath} @@ -154,31 +196,43 @@ EOF sudo chmod 0644 "$sysPath/$serviceName.plist" sudo launchctl load -w "$sysPath/$serviceName.plist" 1>/dev/null 2>&1 fi - echo "" - echo "Сервис автозагрузки записан в ${sysPath}" - echo "" - echo "TorrServer $(getLatestRelease) для ${architecture} Mac установлен в ${dirInstall}" - echo "" - echo "Теперь вы можете открыть браузер по адресу http://localhost:8090 для его настройки" - echo "" + [[ $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 - echo "Для авторизации введите пользователя $isAuthUser с паролем $isAuthPass" - echo "" + [[ $lang == "en" ]] && echo "Use user \"$isAuthUser\" with password \"$isAuthPass\" for web auth" || echo "Для авторизации введите пользователя $isAuthUser с паролем $isAuthPass" + echo "" fi sleep 60 } while true; do - echo "===============================================================" - echo " Скрипт установки, обновления и удаления TorrServer для MacOS" - echo "===============================================================" + getLang 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 - [YyДд]* ) installTorrServer; break;; + [YyДд]* ) checkArch; installTorrServer; break;; [DdУу]* ) uninstall; break;; [NnНн]* ) exit;; - * ) echo "Ввведите Да (Yes) Нет (No) или Удалить (Delete).";; + * ) [[ $lang == "en" ]] && { echo ""; echo "Enter \"Yes\", \"No\" or \"Delete\"."; } || { echo ""; echo "Ввведите «Да», «Нет» или «Удалить»."; } ;; esac done echo "Have Fun!" From fecb18ecab95c78425e0f7674d7306851022bbe0 Mon Sep 17 00:00:00 2001 From: nikk gitanes Date: Thu, 2 Feb 2023 13:30:04 +0300 Subject: [PATCH 2/9] Update installTorrServerLinux.sh --- installTorrServerLinux.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/installTorrServerLinux.sh b/installTorrServerLinux.sh index f8a4224..5d0e070 100644 --- a/installTorrServerLinux.sh +++ b/installTorrServerLinux.sh @@ -434,7 +434,7 @@ case $1 in exit ;; -r|--remove|remove) - uninstall + cleanup exit ;; -h|--help|help) From 829adead28ac21532f24217bff48d3b853ccd8b5 Mon Sep 17 00:00:00 2001 From: nikk gitanes Date: Thu, 2 Feb 2023 14:14:28 +0300 Subject: [PATCH 3/9] change to read from pipe prompts for install script --- installTorrServerLinux.sh | 38 +++++++++++++------------------------- 1 file changed, 13 insertions(+), 25 deletions(-) diff --git a/installTorrServerLinux.sh b/installTorrServerLinux.sh index 5d0e070..8702324 100644 --- a/installTorrServerLinux.sh +++ b/installTorrServerLinux.sh @@ -42,18 +42,15 @@ function uninstall() { echo " Это действие удалит все данные TorrServer включая базу данных торрентов и настройки по указанному выше пути!" echo "" } - [[ $lang == "en" ]] && printf ' Are you shure you want to delete TorrServer? (Yes/No) ' || printf ' Вы уверены что хотите удалить программу? (Да/Нет) ' - read answer + [[ $lang == "en" ]] && read -p ' Are you shure you want to delete TorrServer? (Yes/No) ' answer $dirInstall/accs.db @@ -285,8 +276,7 @@ EOF EOF fi [ -z $isRdb ] && { - [[ $lang == "en" ]] && printf ' Start TorrServer in public read-only mode? (Yes/No) ' || printf ' Запускать TorrServer в публичном режиме без возможности изменения настроек через веб сервера? (Да/Нет) ' - read answer + [[ $lang == "en" ]] && read -p ' Start TorrServer in public read-only mode? (Yes/No) ' answer Date: Thu, 2 Feb 2023 15:08:12 +0300 Subject: [PATCH 4/9] change answer vars --- installTorrServerLinux.sh | 52 +++++++++++++++++++-------------------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/installTorrServerLinux.sh b/installTorrServerLinux.sh index 8702324..7f8dd27 100644 --- a/installTorrServerLinux.sh +++ b/installTorrServerLinux.sh @@ -42,8 +42,8 @@ function uninstall() { echo " Это действие удалит все данные TorrServer включая базу данных торрентов и настройки по указанному выше пути!" echo "" } - [[ $lang == "en" ]] && read -p ' Are you shure you want to delete TorrServer? (Yes/No) ' answer $dirInstall/accs.db } || { @@ -276,8 +276,8 @@ EOF EOF fi [ -z $isRdb ] && { - [[ $lang == "en" ]] && read -p ' Start TorrServer in public read-only mode? (Yes/No) ' answer Date: Thu, 2 Feb 2023 15:24:04 +0300 Subject: [PATCH 5/9] detab and add log path info --- installTorrServerLinux.sh | 69 ++++++++++++++++++++------------------- 1 file changed, 35 insertions(+), 34 deletions(-) diff --git a/installTorrServerLinux.sh b/installTorrServerLinux.sh index 7f8dd27..690a1e4 100644 --- a/installTorrServerLinux.sh +++ b/installTorrServerLinux.sh @@ -24,26 +24,26 @@ function getLang() { } 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 + [ -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" ]] && { + 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" ]] && read -p ' Are you shure you want to delete TorrServer? (Yes/No) ' answer_del /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)\"" + [[ $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)\"" + echo " - Доступно обновление сервера" + echo " установлен: \"$($dirInstall/$binName --version 2>/dev/null | awk '{print $2}')\"" + echo " обновление: \"$(getLatestRelease)\"" } return 1 fi @@ -436,7 +437,7 @@ case $1 in echo " [1] English" echo " [2] Русский" read -p ' Your language (Ваш язык): ' answer_lang Date: Thu, 2 Feb 2023 18:23:35 +0300 Subject: [PATCH 6/9] add rootless service --- installTorrServerLinux.sh | 65 +++++++++++++++++++++++++++++++++------ 1 file changed, 55 insertions(+), 10 deletions(-) diff --git a/installTorrServerLinux.sh b/installTorrServerLinux.sh index 690a1e4..cda27d6 100644 --- a/installTorrServerLinux.sh +++ b/installTorrServerLinux.sh @@ -1,4 +1,5 @@ #!/usr/bin/env bash +username="torrserver" # system user to add || root dirInstall="/opt/torrserver" # путь установки torrserver serviceName="torrserver" # имя службы: systemctl status torrserver.service scriptname=$(basename "$(test -L "$0" && readlink "$0" || echo "$0")") @@ -13,6 +14,43 @@ function isRoot() { fi } +function addUser() { + if isRoot; then + [[ $username == "root" ]] && return 0 + egrep "^$username" /etc/passwd >/dev/null + if [ $? -eq 0 ]; then + [[ $lang == "en" ]] && echo " - $username user exists!" || echo " - пользователь $username найден!" + return 0 + else + useradd --home-dir "$dirInstall" --create-home --shell /bin/false -c "TorrServer" "$username" + [ $? -eq 0 ] && { + chmod 755 "$dirInstall" + [[ $lang == "en" ]] && echo " - User $username has been added to system!" || echo " - пользователь $username добавлен!" + } || { + [[ $lang == "en" ]] && echo " - Failed to add $username user!" || echo " - не удалось добавить пользователя $username!" + } + fi + fi +} + +function delUser() { + if isRoot; then + [[ $username == "root" ]] && return 0 + egrep "^$username" /etc/passwd >/dev/null + if [ $? -eq 0 ]; then + userdel --remove "$username" 2>/dev/null # --force + [ $? -eq 0 ] && { + [[ $lang == "en" ]] && echo " - User $username has been removed from system!" || echo " - Пользователь $username удален!" + } || { + [[ $lang == "en" ]] && echo " - Failed to remove $username user!" || echo " - не удалось удалить пользователя $username!" + } + else + [[ $lang == "en" ]] && echo " - $username - no such user!" || echo " - пользователь $username не найден!" + return 1 + fi + fi +} + function checkRunning() { runningPid=$(ps -ax|grep -i torrserver|grep -v grep|grep -v "$scriptname"|awk '{print $1}') echo $runningPid @@ -29,6 +67,8 @@ function getIP() { } function uninstall() { + checkArch + checkInstalled [[ $lang == "en" ]] && { echo "" echo " TorrServer install dir - ${dirInstall}" @@ -46,8 +86,7 @@ function uninstall() { if [ "$answer_del" != "${answer_del#[YyДд]}" ]; then cleanup cleanAll - echo "" - [[ $lang == "en" ]] && echo " TorrServer deleted!" || echo " TorrServer удален!" + [[ $lang == "en" ]] && echo " - TorrServer uninstalled!" || echo " - TorrServer удален из системы!" echo "" else echo "" @@ -58,11 +97,13 @@ 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 + delUser } function cleanAll() { # guess other installs systemctl stop torr torrserver 2>/dev/null systemctl disable torr torrserver 2>/dev/null + rm -rf /home/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 @@ -222,8 +263,8 @@ function installTorrServer() { After = network.target [Service] - User = root - Group = root + User = $username + Group = $username Type = simple NonBlocking = true EnvironmentFile = $dirInstall/$serviceName.config @@ -309,7 +350,8 @@ EOF [[ $lang == "en" ]] && echo " Starting TorrServer…" || echo " Запускаем службу TorrServer…" systemctl daemon-reload 2>/dev/null - systemctl enable --now $serviceName.service 2>/dev/null + systemctl enable $serviceName.service 2>/dev/null # enable --now + systemctl restart $serviceName.service 2>/dev/null getIP [[ $lang == "en" ]] && { echo "" @@ -331,6 +373,9 @@ EOF } function checkInstalled() { + if ! addUser; then + username="root" + fi 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" @@ -351,12 +396,12 @@ function checkInstalledVersion() { else [[ $lang == "en" ]] && { echo " - TorrServer update found!" - echo " installed: \"$($dirInstall/$binName --version 2>/dev/null | awk '{print $2}')\"" - echo " available: \"$(getLatestRelease)\"" + 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)\"" + echo " установлен: \"$($dirInstall/$binName --version 2>/dev/null | awk '{print $2}')\"" + echo " обновление: \"$(getLatestRelease)\"" } return 1 fi @@ -424,7 +469,7 @@ case $1 in exit ;; -r|--remove|remove) - cleanup + uninstall exit ;; -h|--help|help) From 3b7d90d628f1bccd37b12c8ddc7ab79f728ed57e Mon Sep 17 00:00:00 2001 From: nikk gitanes Date: Thu, 2 Feb 2023 19:48:46 +0300 Subject: [PATCH 7/9] change to read from pipe prompts for Mac install script --- installTorrServerMac.sh | 166 +++++++++++++++++++--------------------- 1 file changed, 80 insertions(+), 86 deletions(-) diff --git a/installTorrServerMac.sh b/installTorrServerMac.sh index 18f51f7..1e1b147 100755 --- a/installTorrServerMac.sh +++ b/installTorrServerMac.sh @@ -3,8 +3,8 @@ dirInstall="/Users/Shared/TorrServer" serviceName="torrserver" function getLang() { - lang=$(locale | grep LANG | cut -d= -f2 | tr -d '"' | cut -d_ -f1) - [[ $lang != "ru" ]] && lang="en" + lang=$(locale | grep LANG | cut -d= -f2 | tr -d '"' | cut -d_ -f1) + [[ $lang != "ru" ]] && lang="en" } function checkArch() { @@ -13,7 +13,7 @@ function checkArch() { 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; } ;; + *) [[ $lang == "en" ]] && { echo ""; echo " Unsupported Arch. Can't continue."; exit 1; } || { echo ""; echo " Не поддерживаемая архитектура. Продолжение невозможно."; exit 1; } ;; esac } @@ -40,26 +40,26 @@ function cleanup() { } 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 "" + [[ $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 "" + 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 + [[ $lang == "en" ]] && read -p ' Are you shure you want to delete TorrServer? (Yes/No) ' answer_del $dirInstall/$serviceName.plist @@ -147,40 +145,36 @@ function installTorrServer() { EOF - [[ $lang == "en" ]] && printf 'Enable HTTP Authorization? (Yes/No) ' || printf 'Включить авторизацию на сервере? (Да/Нет) ' - read answer - if [ "$answer" != "${answer#[YyДд]}" ]; then + [[ $lang == "en" ]] && read -p ' Enable HTTP Authorization? (Yes/No) ' answer_auth $dirInstall/accs.db } || { echo "" - [[ $lang == "en" ]] && echo "Use ${dirInstall}/accs.db credentials for access" || echo "Используйте реквизиты из ${dirInstall}/accs.db для входа" + [[ $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 + [[ $lang == "en" ]] && read -p ' Add autostart for current user (1) or all users (2)? ' answer_cu /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 " Autostart service added to ${sysPath}" + echo "" + echo " TorrServer $(getLatestRelease) for ${architecture} Mac installed to ${dirInstall}" + echo "" + echo " You can now open browser URL http://localhost:$servicePort to access TorrServer GUI" + echo "" } || { - echo "" - echo "Сервис автозагрузки записан в ${sysPath}" - echo "" - echo "TorrServer $(getLatestRelease) для ${architecture} Mac установлен в ${dirInstall}" - echo "" - echo "Теперь вы можете открыть браузер по адресу http://localhost:$servicePort для его настройки и использования" - echo "" + echo "" + echo " Сервис автозагрузки записан в ${sysPath}" + echo "" + echo " TorrServer $(getLatestRelease) для ${architecture} Mac установлен в ${dirInstall}" + echo "" + echo " Теперь вы можете открыть браузер по адресу http://localhost:$servicePort для доступа к вебу TorrServer" + echo "" } if [[ "$isAuth" == 1 && $isAuthUser > 0 ]]; then - [[ $lang == "en" ]] && echo "Use user \"$isAuthUser\" with password \"$isAuthPass\" for web auth" || echo "Для авторизации введите пользователя $isAuthUser с паролем $isAuthPass" - echo "" + [[ $lang == "en" ]] && echo " Use user \"$isAuthUser\" with password \"$isAuthPass\" for web auth" || echo " Для авторизации введите пользователя $isAuthUser с паролем $isAuthPass" + echo "" fi sleep 60 } while true; do - getLang + 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 "Ввведите «Да», «Нет» или «Удалить»."; } ;; + [[ $lang == "en" ]] && read -p " Do You want to install or update TorrServer? (Yes or No). Enter \"Delete\" to Uninstall TorrServer. " ydn Date: Thu, 2 Feb 2023 19:50:45 +0300 Subject: [PATCH 8/9] update README and cosmetics --- README.md | 8 +++++++- installTorrServerLinux.sh | 32 ++++++++++++++++++-------------- 2 files changed, 25 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index 3ae3490..d36b4cd 100644 --- a/README.md +++ b/README.md @@ -5,9 +5,15 @@ TorrServer, stream torrent to http Just download server from releases and exec file\ https://github.com/YouROK/TorrServer/releases \ After open browser link http://127.0.0.1:8090 \ -On linux systems you need to set the environment variable before run \ +On linux systems you may need to set the environment variable before run \ ***export GODEBUG=madvdontneed=1*** +#### macOS install / configure / uninstall script +curl -s https://raw.githubusercontent.com/YouROK/TorrServer/master/installTorrServerMac.sh|sudo bash + +#### Linux on VPS install / configure / uninstall script +curl -s https://raw.githubusercontent.com/YouROK/TorrServer/master/installTorrServerLinux.sh|sudo bash + #### Unofficial TorrServer iocage plugin On FreeBSD (TrueNAS/FreeNAS) you can use this plugin diff --git a/installTorrServerLinux.sh b/installTorrServerLinux.sh index cda27d6..c4451f8 100644 --- a/installTorrServerLinux.sh +++ b/installTorrServerLinux.sh @@ -16,7 +16,7 @@ function isRoot() { function addUser() { if isRoot; then - [[ $username == "root" ]] && return 0 + [[ $username == "root" ]] && return 0 egrep "^$username" /etc/passwd >/dev/null if [ $? -eq 0 ]; then [[ $lang == "en" ]] && echo " - $username user exists!" || echo " - пользователь $username найден!" @@ -35,7 +35,7 @@ function addUser() { function delUser() { if isRoot; then - [[ $username == "root" ]] && return 0 + [[ $username == "root" ]] && return 0 egrep "^$username" /etc/passwd >/dev/null if [ $? -eq 0 ]; then userdel --remove "$username" 2>/dev/null # --force @@ -204,8 +204,8 @@ function checkArch() { i686) architecture="386" ;; x86_64) architecture="amd64" ;; aarch64) architecture="arm64" ;; - armv7|armv7l) architecture="arm7";; - armv6|armv6l) architecture="arm5";; + armv7|armv7l) architecture="arm7" ;; + armv6|armv6l) architecture="arm5" ;; *) [[ $lang == "en" ]] && { echo " Unsupported Arch. Can't continue."; exit 1; } || { echo " Не поддерживаемая архитектура. Продолжение невозможно."; exit 1; } ;; esac } @@ -498,16 +498,20 @@ while true; do echo "" [[ $lang == "en" ]] && read -p " Want to install or configure TorrServer? (Yes|No) Type Delete to uninstall. " ydn Date: Thu, 2 Feb 2023 19:54:29 +0300 Subject: [PATCH 9/9] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index d36b4cd..2073429 100644 --- a/README.md +++ b/README.md @@ -9,10 +9,10 @@ On linux systems you may need to set the environment variable before run \ ***export GODEBUG=madvdontneed=1*** #### macOS install / configure / uninstall script -curl -s https://raw.githubusercontent.com/YouROK/TorrServer/master/installTorrServerMac.sh|sudo bash +Just run in Terminal: `curl -s https://raw.githubusercontent.com/YouROK/TorrServer/master/installTorrServerMac.sh | sudo bash` #### Linux on VPS install / configure / uninstall script -curl -s https://raw.githubusercontent.com/YouROK/TorrServer/master/installTorrServerLinux.sh|sudo bash +Just run in console: `curl -s https://raw.githubusercontent.com/YouROK/TorrServer/master/installTorrServerLinux.sh | sudo bash` #### Unofficial TorrServer iocage plugin On FreeBSD (TrueNAS/FreeNAS) you can use this plugin