mirror of
https://github.com/Ernous/TorrServerJellyfin.git
synced 2025-12-20 05:56:10 +05:00
Merge remote-tracking branch 'origin/master'
This commit is contained in:
@@ -5,9 +5,15 @@ TorrServer, stream torrent to http
|
|||||||
Just download server from releases and exec file\
|
Just download server from releases and exec file\
|
||||||
https://github.com/YouROK/TorrServer/releases \
|
https://github.com/YouROK/TorrServer/releases \
|
||||||
After open browser link http://127.0.0.1:8090 \
|
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***
|
***export GODEBUG=madvdontneed=1***
|
||||||
|
|
||||||
|
#### macOS install / configure / uninstall script
|
||||||
|
Just run in Terminal: `curl -s https://raw.githubusercontent.com/YouROK/TorrServer/master/installTorrServerMac.sh | sudo bash`
|
||||||
|
|
||||||
|
#### Linux on VPS install / configure / uninstall script
|
||||||
|
Just run in console: `curl -s https://raw.githubusercontent.com/YouROK/TorrServer/master/installTorrServerLinux.sh | sudo bash`
|
||||||
|
|
||||||
#### Unofficial TorrServer iocage plugin
|
#### Unofficial TorrServer iocage plugin
|
||||||
On FreeBSD (TrueNAS/FreeNAS) you can use this plugin
|
On FreeBSD (TrueNAS/FreeNAS) you can use this plugin
|
||||||
|
|
||||||
|
|||||||
520
installTorrServerLinux.sh
Normal file
520
installTorrServerLinux.sh
Normal file
@@ -0,0 +1,520 @@
|
|||||||
|
#!/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")")
|
||||||
|
|
||||||
|
#################################
|
||||||
|
# F U N C T I O N S #
|
||||||
|
#################################
|
||||||
|
|
||||||
|
function isRoot() {
|
||||||
|
if [ "$EUID" -ne 0 ]; then
|
||||||
|
return 1
|
||||||
|
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
|
||||||
|
}
|
||||||
|
|
||||||
|
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() {
|
||||||
|
checkArch
|
||||||
|
checkInstalled
|
||||||
|
[[ $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/tty || read -p ' Вы уверены что хотите удалить программу? (Да/Нет) ' answer_del </dev/tty
|
||||||
|
if [ "$answer_del" != "${answer_del#[YyДд]}" ]; then
|
||||||
|
cleanup
|
||||||
|
cleanAll
|
||||||
|
[[ $lang == "en" ]] && echo " - TorrServer uninstalled!" || echo " - TorrServer удален из системы!"
|
||||||
|
echo ""
|
||||||
|
else
|
||||||
|
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
|
||||||
|
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
|
||||||
|
}
|
||||||
|
|
||||||
|
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" ]] && read -p ' Want to update TorrServer? (Yes/No) ' answer_up </dev/tty || read -p ' Хотите обновить TorrServer? (Да/Нет) ' answer_up </dev/tty
|
||||||
|
if [ "$answer_up" != "${answer_up#[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 = $username
|
||||||
|
Group = $username
|
||||||
|
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" ]] && read -p ' Change TorrServer web-port? (Yes/No) ' answer_cp </dev/tty || read -p ' Хотите изменить порт для TorrServer? (Да/Нет) ' answer_cp </dev/tty
|
||||||
|
if [ "$answer_cp" != "${answer_cp#[YyДд]}" ]; then
|
||||||
|
[[ $lang == "en" ]] && read -p ' Enter port number: ' answer_port </dev/tty || read -p ' Введите номер порта: ' answer_port </dev/tty
|
||||||
|
servicePort=$answer_port
|
||||||
|
else
|
||||||
|
servicePort="8090"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
[ -z $isAuth ] && {
|
||||||
|
[[ $lang == "en" ]] && read -p ' Enable server authorization? (Yes/No) ' answer_auth </dev/tty || read -p ' Включить авторизацию на сервере? (Да/Нет) ' answer_auth </dev/tty
|
||||||
|
if [ "$answer_auth" != "${answer_auth#[YyДд]}" ]; then
|
||||||
|
isAuth=1
|
||||||
|
else
|
||||||
|
isAuth=0
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
if [[ "$isAuth" == 1 ]]; then
|
||||||
|
[[ ! -f "$dirInstall/accs.db" ]] && {
|
||||||
|
[[ $lang == "en" ]] && read -p ' User: ' answer_user </dev/tty || read -p ' Пользователь: ' answer_user </dev/tty
|
||||||
|
isAuthUser=$answer_user
|
||||||
|
[[ $lang == "en" ]] && read -p ' Password: ' answer_pass </dev/tty || read -p ' Пароль: ' answer_pass </dev/tty
|
||||||
|
isAuthPass=$answer_pass
|
||||||
|
[[ $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" ]] && read -p ' Start TorrServer in public read-only mode? (Yes/No) ' answer_rdb </dev/tty || read -p ' Запускать TorrServer в публичном режиме без возможности изменения настроек через веб сервера? (Да/Нет) ' answer_rdb </dev/tty
|
||||||
|
if [ "$answer_rdb" != "${answer_rdb#[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" ]] && read -p ' Enable TorrServer log output to file? (Yes/No) ' answer_log </dev/tty || read -p ' Включить запись журнала работы TorrServer в файл? (Да/Нет) ' answer_log </dev/tty
|
||||||
|
if [ "$answer_log" != "${answer_log#[YyДд]}" ]; then
|
||||||
|
sed -i "s|--path|--logpath $dirInstall/$serviceName.log --path|" "$dirInstall/$serviceName.config"
|
||||||
|
[[ $lang == "en" ]] && echo " - TorrServer log stored at $dirInstall/$serviceName.log" || echo " - лог TorrServer располагается по пути $dirInstall/$serviceName.log"
|
||||||
|
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 $serviceName.service 2>/dev/null # enable --now
|
||||||
|
systemctl restart $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() {
|
||||||
|
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"
|
||||||
|
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] Русский"
|
||||||
|
read -p ' Your language (Ваш язык): ' answer_lang </dev/tty
|
||||||
|
if [ "$answer_lang" != "${answer_lang#[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. " ydn </dev/tty || read -p " Хотите установить, обновить или настроить TorrServer? (Да|Нет) Для удаления введите «Удалить» " ydn </dev/tty
|
||||||
|
case $ydn 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
|
||||||
@@ -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 ""
|
||||||
read answer
|
} || {
|
||||||
if [ "$answer" != "${answer#[YyДд]}" ] ; then
|
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/tty || read -p ' Вы уверены что хотите удалить программу? (Да/Нет) ' answer_del </dev/tty
|
||||||
|
read answer_del
|
||||||
|
if [ "$answer_del" != "${answer_del#[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,32 @@ 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 can ask your admin account password"
|
||||||
|
echo ""
|
||||||
|
} || {
|
||||||
|
echo ""
|
||||||
|
echo " Создаем сервис автозагрузки TorrServer $(getLatestRelease)…"
|
||||||
|
echo ""
|
||||||
|
echo " Система может запросить ваш пароль администратора"
|
||||||
|
echo ""
|
||||||
|
}
|
||||||
|
###
|
||||||
|
cleanup
|
||||||
|
###
|
||||||
|
[[ $lang == "en" ]] && read -p ' Change TorrServer web port? (Yes/No) ' answer_cp </dev/tty || read -p ' Хотите изменить веб-порт для TorrServer? (Да/Нет) ' answer_cp </dev/tty
|
||||||
|
if [ "$answer_cp" != "${answer_cp#[YyДд]}" ]; then
|
||||||
|
echo ""
|
||||||
|
[[ $lang == "en" ]] && read -p ' Enter port number: ' answer_port </dev/tty || read -p ' Введите номер порта: ' answer_port </dev/tty
|
||||||
|
servicePort=$answer_port
|
||||||
|
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 +131,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 +145,36 @@ function installTorrServer() {
|
|||||||
</dict>
|
</dict>
|
||||||
</plist>
|
</plist>
|
||||||
EOF
|
EOF
|
||||||
###
|
[[ $lang == "en" ]] && read -p ' Enable HTTP Authorization? (Yes/No) ' answer_auth </dev/tty || read -p ' Включить авторизацию на сервере? (Да/Нет) ' answer_auth </dev/tty
|
||||||
cleanup
|
if [ "$answer_auth" != "${answer_auth#[YyДд]}" ]; then
|
||||||
###
|
|
||||||
printf 'Включить авторизацию на сервере? '
|
|
||||||
read answer
|
|
||||||
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" ]] && read -p ' User: ' answer_user </dev/tty || read -p ' Пользователь: ' answer_user </dev/tty
|
||||||
read answer
|
isAuthUser=$answer_user
|
||||||
isAuthUser=$answer
|
|
||||||
echo ""
|
echo ""
|
||||||
printf 'Пароль: '
|
[[ $lang == "en" ]] && read -p ' Password: ' answer_pass </dev/tty || read -p ' Пароль: ' answer_pass </dev/tty
|
||||||
read answer
|
isAuthPass=$answer_pass
|
||||||
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" ]] && read -p ' Add autostart for current user (1) or all users (2)? ' answer_cu </dev/tty || read -p ' Добавить автозагрузку для текушего пользователя (1) или всех (2)? ' answer_cu </dev/tty
|
||||||
read answer
|
if [ "$answer_cu" != "${answer_cu#[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,33 +190,45 @@ 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 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 для доступа к вебу TorrServer"
|
||||||
|
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 "=============================================================="
|
||||||
case $yn in
|
[[ $lang == "en" ]] && echo " TorrServer install, update and uninstall script for MacOS " || echo " Скрипт установки, обновления и удаления TorrServer для MacOS "
|
||||||
[YyДд]* ) installTorrServer; break;;
|
echo "=============================================================="
|
||||||
[DdУу]* ) uninstall; break;;
|
echo ""
|
||||||
[NnНн]* ) exit;;
|
[[ $lang == "en" ]] && read -p " Do You want to install or update TorrServer? (Yes or No). Enter \"Delete\" to Uninstall TorrServer. " ydn </dev/tty || read -p " Хотите установить или обновить TorrServer? (Да|Нет). Для удаления введите «Удалить». " ydn </dev/tty
|
||||||
* ) echo "Ввведите Да (Yes) Нет (No) или Удалить (Delete).";;
|
case $ydn in
|
||||||
|
[YyДд]*) checkArch; installTorrServer; break ;;
|
||||||
|
[DdУу]*) uninstall; break ;;
|
||||||
|
[NnНн]*) exit ;;
|
||||||
|
*) [[ $lang == "en" ]] && { echo ""; echo " Enter \"Yes\", \"No\" or \"Delete\"."; } || { echo ""; echo " Ввведите «Да», «Нет» или «Удалить»."; } ;;
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
echo "Have Fun!"
|
echo " Have Fun!"
|
||||||
echo ""
|
echo ""
|
||||||
sleep 5
|
sleep 5
|
||||||
Reference in New Issue
Block a user