diff --git a/.github/workflows/github-actions-docker.yml b/.github/workflows/github-actions-docker.yml index c187530..a6c82e0 100644 --- a/.github/workflows/github-actions-docker.yml +++ b/.github/workflows/github-actions-docker.yml @@ -13,16 +13,16 @@ jobs: run : echo ${{ github.event.release.tag_name }} - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v3.3.0 - name: Set up QEMU - uses: docker/setup-qemu-action@v1 + uses: docker/setup-qemu-action@v2.1.0 - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v1 + uses: docker/setup-buildx-action@v2.2.1 - name: Login to GitHub Container Registry - uses: docker/login-action@v1 + uses: docker/login-action@v2.1.0 with: registry: ghcr.io username: ${{ github.actor }} @@ -39,11 +39,11 @@ jobs: echo ${{ env.REG_REPO }} - name: Build and push - uses: docker/build-push-action@v2 + uses: docker/build-push-action@v3.3.0 with: context: . - platforms: linux/amd64,linux/arm/v6,linux/arm/v7,linux/arm64 + platforms: linux/amd64,linux/arm/v7,linux/arm64 push: true tags: | ghcr.io/${{ env.REG_REPO }}:${{ github.event.release.tag_name }} - ghcr.io/${{ env.REG_REPO }}:latest + ghcr.io/${{ env.REG_REPO }}:latest \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index deeef2c..df3951b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -6,8 +6,9 @@ WORKDIR /app RUN yarn install && yarn run build ### FRONT BUILD END ### + ### BUILD TORRSERVER MULTIARCH START ### -FROM --platform=$BUILDPLATFORM golang:1.18-alpine as builder +FROM --platform=$BUILDPLATFORM golang:1.19-alpine as builder COPY . /opt/src COPY --from=front /app/build /opt/src/web/build @@ -42,6 +43,7 @@ RUN apt-get update && apt-get install -y upx-ucl && upx --best --lzma ./torrserv # && if [[ "$compress" -eq 1 ]]; then ./upx --best --lzma ./torrserver; fi ### UPX COMPRESSING END ### + ### BUILD MAIN IMAGE START ### FROM alpine diff --git a/installTorrServerMac.sh b/installTorrServerMac.sh new file mode 100755 index 0000000..c27d1ed --- /dev/null +++ b/installTorrServerMac.sh @@ -0,0 +1,186 @@ +#!/bin/bash +dirInstall="/Users/Shared/TorrServer" +serviceName="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 + 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 +} + +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" + echo "" + sleep 5 + else + echo "" + echo "OK" + echo "" + sleep 5 + 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 + echo "" + if [[ "$isAuth" == 1 ]]; then + 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 для входа" + echo "" + } + else + sed -i '' -e '/httpauth/d' $dirInstall/$serviceName.plist + fi + 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 + echo "" + echo "Сервис автозагрузки записан в ${sysPath}" + echo "" + echo "TorrServer $(getLatestRelease) для ${architecture} Mac установлен в ${dirInstall}" + echo "" + echo "Теперь вы можете открыть браузер по адресу http://localhost:8090 для его настройки" + echo "" + if [[ "$isAuth" == 1 && $isAuthUser > 0 ]]; then + echo "Для авторизации введите пользователя $isAuthUser с паролем $isAuthPass" + echo "" + fi + sleep 60 +} + +while true; do + echo "===============================================================" + echo " Скрипт установки, обновления и удаления TorrServer для MacOS" + echo "===============================================================" + echo "" + read -p "Хотите установить или обновить TorrServer? Для удаления введите «Удалить» " yn + case $yn in + [YyДд]* ) installTorrServer; break;; + [DdУу]* ) uninstall; break;; + [NnНн]* ) exit;; + * ) echo "Ввведите Да (Yes) Нет (No) или Удалить (Delete).";; + esac +done +echo "Have Fun!" +echo "" +sleep 5 \ No newline at end of file diff --git a/web/yarn.lock b/web/yarn.lock index e6ef5ab..392b64a 100644 --- a/web/yarn.lock +++ b/web/yarn.lock @@ -7874,9 +7874,9 @@ json-stable-stringify-without-jsonify@^1.0.1: integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== json5@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" - integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== + version "1.0.2" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" + integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== dependencies: minimist "^1.2.0" @@ -8525,9 +8525,9 @@ minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: brace-expansion "^1.1.7" minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.6: - version "1.2.6" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" - integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== + version "1.2.7" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18" + integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g== minipass-collect@^1.0.2: version "1.0.2"