通过终端登录工具登录到transmission安装的设备,可以通过 xshell 、 putty 等连接
进入到transmission安装目录,然后下载新UI安装脚本文件,执行下载命令:
sudo wget https://github.com/ronggang/transmission-web-control/raw/master/release/install-tr-control.sh非root用户需要高级权限才能下载,所以加上sudo。
若下载github网站文件网络连接不太容易,可以直接复制以下脚本,然后用vi命令保存到xx.sh文件中。
#!/bin/bash
# 获取第一个参数
ARG1="$1"
ROOT_FOLDER=""
SCRIPT_NAME="$0"
SCRIPT_VERSION="1.2.3"
VERSION=""
WEB_FOLDER=""
ORG_INDEX_FILE="index.original.html"
INDEX_FILE="index.html"
TMP_FOLDER="/tmp/tr-web-control"
PACK_NAME="master.tar.gz"
WEB_HOST="https://github.com/ronggang/transmission-web-control/archive/"
DOWNLOAD_URL="$WEB_HOST$PACK_NAME"
# 安装类型
# 1 安装至当前 Transmission Web 所在目录
# 2 安装至 TRANSMISSION_WEB_HOME 环境变量指定的目录,参考:https://github.com/transmission/transmission/wiki/Environment-Variables#transmission-specific-variables
# 使用环境变量时,如果 transmission 不是当前用户运行的,则需要将 TRANSMISSION_WEB_HOME 添加至 /etc/profile 文件,以达到“永久”的目的
# 3 用户指定参数做为目录,如 sh install-tr-control.sh /usr/local/transmission/share/transmission
INSTALL_TYPE=-1
SKIP_SEARCH=0
AUTOINSTALL=0
if which whoami 2>/dev/null; then
    USER=`whoami`
fi
#==========================================================
MSG_TR_WORK_FOLDER="Transmission Web Path: "
MSG_SPECIFIED_VERSION="You are using the specified version to install, version:"
MSG_SEARCHING_TR_FOLDER="Searching Transmission Web Folder..."
MSG_THE_SPECIFIED_DIRECTORY_DOES_NOT_EXIST="Folder not found. Will search the entire /. This will take a while..."
MSG_USE_WEB_HOME="Use TRANSMISSION_WEB_HOME Variable: $TRANSMISSION_WEB_HOME"
MSG_AVAILABLE="Available"
MSG_TRY_SPECIFIED_VERSION="Attempting to specify version: "
MSG_PACK_COPYING="Copying installation package..."
MSG_WEB_PATH_IS_MISSING="ERROR : Transmisson WEB UI Folder is missing, Please confirm Transmisson is installed."
MSG_PACK_IS_EXIST=" Already exist, whether to download again? (y/n)"
MSG_SIKP_DOWNLOAD="\nSkip download, preparing to install"
MSG_DOWNLOADING="Transmission Web Control Is Downloading..."
MSG_DOWNLOAD_COMPLETE="Download completed, ready to install..."
MSG_DOWNLOAD_FAILED="The installation package failed to download. Please try again or try another version."
MSG_INSTALL_COMPLETE="Transmission Web Control Installation Completed!"
MSG_PACK_EXTRACTING="Extracting installation package..."
MSG_PACK_CLEANING_UP="Cleaning up the installation package..."
MSG_DONE="Installation completed. Installation problems see:https://github.com/ronggang/transmission-web-control/wiki "
MSG_SETTING_PERMISSIONS="Setting permissions, It takes about one minute ..."
MSG_BEGIN="BEGIN"
MSG_END="END"
MSG_MAIN_MENU="
    Welcome to the Transmission Web Control Installation Script.
    Official help documentation: https://github.com/ronggang/transmission-web-control/wiki 
    Installation script version: $SCRIPT_VERSION
    1. Install the latest release.
    2. Install the specified version.
    3. Revert to the official UI.
    4. Re-download the installation script.
    5. Check if Transmission is started.
    6. Input the Transmission Web directory.
    9. Installing from 'master' Repository.
    ===================
    0. Exit the installation;
    Please enter the corresponding number: "
MSG_INPUT_VERSION="Please enter the version number (e.g: 1.5.1):"
MSG_INPUT_TR_FOLDER="Please enter the directory where the Transmission Web is located (without 'web', e.g /usr/share/transmission): "
MSG_SPECIFIED_FOLDER="The installation directory is specified as: "
MSG_INVALID_PATH="The input path is invalid."
MSG_MASTER_INSTALL_CONFIRM="Do you confirm the installation? (y/n): "
MSG_FIND_WEB_FOLDER_FROM_PROCESS="Attempting to identify transmission Web directory from process..."
MSG_FIND_WEB_FOLDER_FROM_PROCESS_FAILED=" × Recognition failed, please confirm that transmission has started."
MSG_CHECK_TR_DAEMON="Detecting the Transmission process..."
MSG_CHECK_TR_DAEMON_FAILED="No Transmission was found in the system process. Please confirm that it is started."
MSG_TRY_START_TR="Do you want to try to start transmission-daemon? (y/n) "
MSG_TR_DAEMON_IS_STARTED="Transmission Is Started."
MSG_REVERTING_ORIGINAL_UI="Restoring the official UI..."
MSG_REVERT_COMPLETE="Restore complete, please re-enter http://ip:9091/ or refresh in the browser to view the official UI."
MSG_ORIGINAL_UI_IS_MISSING="The official UI does not exist."
MSG_DOWNLOADING_INSTALL_SCRIPT="Re-downloading the installation script..."
MSG_INSTALL_SCRIPT_DOWNLOAD_COMPLETE="The download is complete. Please re-run the installation script."
MSG_INSTALL_SCRIPT_DOWNLOAD_FAILED="Installation Script Download failed!"
MSG_NON_ROOT_USER="Unable to confirm if it is currently root, the installation may not be possible. Do you want to continue? (y/n)"
#==========================================================
# 是否自动安装
if [ "$ARG1" = "auto" ]; then
    AUTOINSTALL=1
    ROOT_FOLDER=$2
else
    ROOT_FOLDER=$ARG1
fi
initValues() {
    # 判断临时目录是否存在,不存在则创建
    if [ ! -d "$TMP_FOLDER" ]; then
        mkdir -p "$TMP_FOLDER"
    fi
    
    # 判断是否指定了ROOT_FOLDER
    if [ "$ROOT_FOLDER" == "" ]; then
        # 获取 Transmission 目录
        getTransmissionPath
    fi
    
    # 判断 ROOT_FOLDER 是否为一个有效的目录,如果是则表明传递了一个有效路径
    if [ -d "$ROOT_FOLDER" ]; then
        showLog "$MSG_TR_WORK_FOLDER $ROOT_FOLDER/web"
        INSTALL_TYPE=3
        WEB_FOLDER="$ROOT_FOLDER/web"
        SKIP_SEARCH=1
    fi
    # 判断是否指定了版本
    if [ "$VERSION" != "" ]; then
        # master 或 hash
        if [ "$VERSION" = "master" -o ${#VERSION} = 40 ]; then
            PACK_NAME="$VERSION.tar.gz"
        # 是否指定了 v
        elif [ ${VERSION:0:1} = "v" ]; then
            PACK_NAME="$VERSION.tar.gz"
            VERSION=${VERSION:1}
        else
            PACK_NAME="v$VERSION.tar.gz"
        fi
        showLog "$MSG_SPECIFIED_VERSION $VERSION"
        
        DOWNLOAD_URL="https://github.com/ronggang/transmission-web-control/archive/$PACK_NAME"
    fi    
    if [ $SKIP_SEARCH = 0 ]; then
        # 查找目录
        findWebFolder
    fi
}
# 开始
main() {
    begin
    # 初始化值
    initValues
    # 安装
    install
    # 清理
    clear
}
# 查找Web目录
findWebFolder() {
    # 找出web ui 目录
    showLog "$MSG_SEARCHING_TR_FOLDER"
        
    # 判断 TRANSMISSION_WEB_HOME 环境变量是否被定义,如果是,直接用这个变量的值
    if [ $TRANSMISSION_WEB_HOME ]; then
        showLog "$MSG_USE_WEB_HOME"
        # 判断目录是否存在,如果不存在则创建 https://github.com/ronggang/transmission-web-control/issues/167
        if [ ! -d "$TRANSMISSION_WEB_HOME" ]; then
         mkdir -p "$TRANSMISSION_WEB_HOME"
      fi
        INSTALL_TYPE=2
    else
        if [ -d "$ROOT_FOLDER" -a -d "$ROOT_FOLDER/web" ]; then
            WEB_FOLDER="$ROOT_FOLDER/web"
            INSTALL_TYPE=1
            showLog "$ROOT_FOLDER/web $MSG_AVAILABLE."
        else
            showLog "$MSG_THE_SPECIFIED_DIRECTORY_DOES_NOT_EXIST"
            ROOT_FOLDER=`find /usr /etc /home /root -name 'web' -type d 2>/dev/null| grep 'transmission/web' | sed 's/\/web$//g'`
            if [ -d "$ROOT_FOLDER/web" ]; then
                WEB_FOLDER="$ROOT_FOLDER/web"
                INSTALL_TYPE=1
            fi
        fi
    fi
}
# 安装
install() {
    # 是否指定版本
    if [ "$VERSION" != "" ]; then
        showLog "$MSG_TRY_SPECIFIED_VERSION $VERSION"
        # 下载安装包
        download
        # 解压安装包
        unpack
        showLog "$MSG_PACK_COPYING"
        # 复制文件到
        cp -r "$TMP_FOLDER/transmission-web-control-$VERSION/src/." "$WEB_FOLDER/"
        # 设置权限
        setPermissions "$WEB_FOLDER"
        # 安装完成
        installed
    # 如果目录存在,则进行下载和更新动作
    elif [ $INSTALL_TYPE = 1 -o $INSTALL_TYPE = 3 ]; then
        # 下载安装包
        download
        # 创建web文件夹,从 20171014 之后,打包文件不包含web目录,直接打包为src下所有文件
        mkdir web
        
        # 解压缩包
        unpack "web"
        
        showLog "$MSG_PACK_COPYING"
        # 复制文件到
        cp -r web "$ROOT_FOLDER"
        # 设置权限
        setPermissions "$ROOT_FOLDER"
        # 安装完成
        installed
    elif [ $INSTALL_TYPE = 2 ]; then
        # 下载安装包
        download
        # 解压缩包
        unpack "$TRANSMISSION_WEB_HOME"
        # 设置权限
        setPermissions "$TRANSMISSION_WEB_HOME"
        # 安装完成
        installed
    else
        echo "##############################################"
        echo "#"
        echo "# $MSG_WEB_PATH_IS_MISSING"
        echo "#"
        echo "##############################################"
    fi
}
# 下载安装包
download() {
    # 切换到临时目录
    cd "$TMP_FOLDER"
    # 判断安装包文件是否已存在
    if [ -f "$PACK_NAME" ]; then
        if [ $AUTOINSTALL = 0 ]; then
            echo -n "\n$PACK_NAME $MSG_PACK_IS_EXIST"
            read flag
        else
            flag="y"
        fi
        if [ "$flag" = "y" -o "$flag" = "Y" ] ; then
            rm "$PACK_NAME"
        else
            showLog "$MSG_SIKP_DOWNLOAD"
            return 0
        fi
    fi
    showLog "$MSG_DOWNLOADING"
    echo ""
    # 下载的时候强制命名文件,以免被重定向后文件名发生改变
    wget "$DOWNLOAD_URL" -O "$PACK_NAME" --no-check-certificate
    # 判断是否下载成功
    if [ $? -eq 0 ]; then
        showLog "$MSG_DOWNLOAD_COMPLETE"
        return 0
    else 
        showLog "$MSG_DOWNLOAD_FAILED"
        end
        exit 1
    fi
}
# 安装完成
installed() {
    showLog "$MSG_INSTALL_COMPLETE"
}
# 输出日志
showLog() {
    TIME=`date "+%Y-%m-%d %H:%M:%S"`
    case $2 in
        "n")
            echo -n "<< $TIME >> $1" ;;
        *)
            echo "<< $TIME >> $1" ;;
    esac
    
}
# 解压安装包
unpack() {
    showLog "$MSG_PACK_EXTRACTING"
    if [ "$1" != "" ]; then
        tar -xzf "$PACK_NAME" -C "$1"
    else
        tar -xzf "$PACK_NAME"
    fi
    # 如果之前没有安装过,则先将原系统的文件改为
    if [ ! -f "$WEB_FOLDER/$ORG_INDEX_FILE" -a -f "$WEB_FOLDER/$INDEX_FILE" ]; then
        mv "$WEB_FOLDER/$INDEX_FILE" "$WEB_FOLDER/$ORG_INDEX_FILE"
    fi
    # 清除原来的内容
    if [ -d "$WEB_FOLDER/tr-web-control" ]; then
        rm -rf "$WEB_FOLDER/tr-web-control"
    fi
}
# 清除工作
clear() {
    showLog "$MSG_PACK_CLEANING_UP"
    if [ -f "$PACK_NAME" ]; then
        # 删除安装包
        rm "$PACK_NAME"
    fi
    if [ -d "$TMP_FOLDER" ]; then
        # 删除临时目录
        rm -rf "$TMP_FOLDER"
    fi
    showLog "$MSG_DONE"
    end
}
# 设置权限
setPermissions() {
    folder="$1"
    showLog "$MSG_SETTING_PERMISSIONS"
    # 设置权限
    find "$folder" -type d -exec chmod o+rx {} \;
    find "$folder" -type f -exec chmod o+r {} \;
}
# 开始
begin() {
    echo ""
    showLog "== $MSG_BEGIN =="
    showLog ""
}
# 结束
end() {
    showLog "== $MSG_END =="
    echo ""
}
# 显示主菜单
showMainMenu() {
    echo -n "$MSG_MAIN_MENU"
    read flag
    echo ""
    case $flag in
        1)
            getLatestReleases
            main
            ;;
        2)
            echo -n "$MSG_INPUT_VERSION"
            read VERSION
            main
            ;;
        
        3)
            revertOriginalUI
            ;;
        4)
            downloadInstallScript
            ;;
        5)
            checkTransmissionDaemon
            ;;
        6)
            echo -n "$MSG_INPUT_TR_FOLDER"
            read input
            if [ -d "$input/web" ]; then
                ROOT_FOLDER="$input"
                showLog "$MSG_SPECIFIED_FOLDER $input/web"
            else
                showLog "$MSG_INVALID_PATH"
            fi
            sleep 2
            showMainMenu
            ;;
        
        # 下载最新的代码
        9)
            echo -n "$MSG_MASTER_INSTALL_CONFIRM"
            read input
            if [ "$input" = "y" -o "$input" = "Y" ]; then
                VERSION="master"
                main
            else
                showMainMenu
            fi
            ;;
        *)
            showLog "$MSG_END"
            ;;
    esac
}
# 获取Tr所在的目录
getTransmissionPath() {
    # 指定一次当前系统的默认目录
    # 用户如知道自己的 Transmission Web 所在的目录,直接修改这个值,以避免搜索所有目录
    # ROOT_FOLDER="/usr/local/transmission/share/transmission"
    # Fedora 或 Debian 发行版的默认 ROOT_FOLDER 目录
    if [ ! -d "$ROOT_FOLDER" ]; then
        if [ -f "/etc/fedora-release" ] || [ -f "/etc/debian_version" ] || [ -f "/etc/openwrt_release" ]; then
            ROOT_FOLDER="/usr/share/transmission"
        fi
        if [ -f "/bin/freebsd-version" ]; then
            ROOT_FOLDER="/usr/local/share/transmission"
        fi
        # 群晖
        if [ -f "/etc/synoinfo.conf" ]; then
            ROOT_FOLDER="/var/packages/transmission/target/share/transmission"
        fi
    fi
    if [ ! -d "$ROOT_FOLDER" ]; then
        showLog "$MSG_FIND_WEB_FOLDER_FROM_PROCESS" "n"
        infos=`ps -Aww -o command= | sed -r -e '/[t]ransmission-da/!d' -e 's/ .+//'`
        if [ "$infos" != "" ]; then
            echo " √"
            search="bin/transmission-daemon"
            replace="share/transmission"
            path=${infos//$search/$replace}
            if [ -d "$path" ]; then
                ROOT_FOLDER=$path
            fi
        else
            echo "$MSG_FIND_WEB_FOLDER_FROM_PROCESS_FAILED"
        fi
    fi
}
# 获取最后的发布版本号
# 因在源码库里提交二进制文件不便于管理,以后将使用这种方式获取最新发布的版本
getLatestReleases() {
    # VERSION=`wget -O - https://api.github.com/repos/ronggang/transmission-web-control/releases/latest | grep tag_name | head -n 1 | cut -d '"' -f 4`
    # 换为curl,避免OpenWRT下wget得到的内容没有分行,导致grep输出结果失效
    VERSION=`curl -s https://api.github.com/repos/ronggang/transmission-web-control/releases/latest | grep tag_name | head -n 1 | cut -d '"' -f 4`
}
# 检测 Transmission 进程是否存在
checkTransmissionDaemon() {
    showLog "$MSG_CHECK_TR_DAEMON"
    ps -C transmission-daemon
    if [ $? -ne 0 ]; then
        showLog "$MSG_CHECK_TR_DAEMON_FAILED"
        echo -n "$MSG_TRY_START_TR"
        read input
        if [ "$input" = "y" -o "$input" = "Y" ] ; then
            service transmission-daemon start
        fi
    else
        showLog "$MSG_TR_DAEMON_IS_STARTED"
    fi
    sleep 2
    showMainMenu
}
# 恢复官方UI
revertOriginalUI() {
    initValues
    # 判断是否有官方的UI存在
    if [ -f "$WEB_FOLDER/$ORG_INDEX_FILE" ]; then
        showLog "$MSG_REVERTING_ORIGINAL_UI"
        # 清除原来的内容
        if [ -d "$WEB_FOLDER/tr-web-control" ]; then
            rm -rf "$WEB_FOLDER/tr-web-control"
            rm "$WEB_FOLDER/favicon.ico"
            rm "$WEB_FOLDER/index.html"
            rm "$WEB_FOLDER/index.mobile.html"
            mv "$WEB_FOLDER/$ORG_INDEX_FILE" "$WEB_FOLDER/$INDEX_FILE"
            showLog "$MSG_REVERT_COMPLETE"
        else
            showLog "$MSG_WEB_PATH_IS_MISSING"
            sleep 2
            showMainMenu
        fi
    else
        showLog "$MSG_ORIGINAL_UI_IS_MISSING"
        sleep 2
        showMainMenu
    fi
}
# 重新下载安装脚本
downloadInstallScript() {
    if [ -f "$SCRIPT_NAME" ]; then
        rm "$SCRIPT_NAME"
    fi
    showLog "$MSG_DOWNLOADING_INSTALL_SCRIPT"
    wget "https://github.com/ronggang/transmission-web-control/raw/master/release/$SCRIPT_NAME" --no-check-certificate
    # 判断是否下载成功
    if [ $? -eq 0 ]; then
        showLog "$MSG_INSTALL_SCRIPT_DOWNLOAD_COMPLETE"
    else 
        showLog "$MSG_INSTALL_SCRIPT_DOWNLOAD_FAILED"
        sleep 2
        showMainMenu
    fi
}
if [ "$USER" != 'root' ]; then
    showLog "$MSG_NON_ROOT_USER" "n"
    read input
    if [ "$input" = "n" -o "$input" = "N" ]; then
        exit -1
    fi
fi
if [ $AUTOINSTALL = 1 ]; then
    getLatestReleases
    main
else
    # 执行
    showMainMenu
fi{/collapse-item}
二、执行安装脚本
sudo sh install-tr-control.sh
手动输入数字1,安装最新版本。若执行结果如下,则安装成功。
/bin/whoami
        Welcome to the Transmission Web Control Installation Script.
        Official help documentation: https://github.com/ronggang/transmission-web-control/wiki 
        Installation script version: 1.2.3
        1. Install the latest release.
        2. Install the specified version.
        3. Revert to the official UI.
        4. Re-download the installation script.
        5. Check if Transmission is started.
        6. Input the Transmission Web directory.
        9. Installing from 'master' Repository.
        ===================
        0. Exit the installation;
        Please enter the corresponding number: 1
<< 2022-04-10 00:07:13 >> == BEGIN ==
<< 2022-04-10 00:07:13 >> 
<< 2022-04-10 00:07:13 >> Transmission Web Path:  /var/packages/transmission/target/share/transmission/web
<< 2022-04-10 00:07:13 >> You are using the specified version to install, version: 1.6.1-update1
<< 2022-04-10 00:07:13 >> Attempting to specify version:  1.6.1-update1
<< 2022-04-10 00:07:13 >> Transmission Web Control Is Downloading...
--2022-04-10 00:07:13--  https://github.com/ronggang/transmission-web-control/archive/v1.6.1-update1.tar.gz
Resolving github.com... 20.205.243.166
Connecting to github.com|20.205.243.166|:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://codeload.github.com/ronggang/transmission-web-control/tar.gz/refs/tags/v1.6.1-update1 [following]
--2022-04-10 00:07:14--  https://codeload.github.com/ronggang/transmission-web-control/tar.gz/refs/tags/v1.6.1-update1
Resolving codeload.github.com... 20.205.243.165
Connecting to codeload.github.com|20.205.243.165|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1206252 (1.1M) [application/x-gzip]
Saving to: 'v1.6.1-update1.tar.gz'
v1.6.1-update1.tar.gz                  100%[==========================================================================>]   1.15M  47.9KB/s    in 18s     
2022-04-10 00:07:32 (64.8 KB/s) - 'v1.6.1-update1.tar.gz' saved [1206252/1206252]
<< 2022-04-10 00:07:33 >> Download completed, ready to install...
<< 2022-04-10 00:07:33 >> Extracting installation package...
<< 2022-04-10 00:07:33 >> Copying installation package...
<< 2022-04-10 00:07:33 >> Setting permissions, It takes about one minute ...
<< 2022-04-10 00:07:36 >> Transmission Web Control Installation Completed!
<< 2022-04-10 00:07:36 >> Cleaning up the installation package...
<< 2022-04-10 00:07:36 >> Installation completed. Installation problems see:https://github.com/ronggang/transmission-web-control/wiki 
<< 2022-04-10 00:07:36 >> == END ==
                
            
        
                    
评论 (0)