惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

人人都是产品经理
人人都是产品经理
美团技术团队
J
Java Code Geeks
T
The Exploit Database - CXSecurity.com
博客园 - 聂微东
T
Tor Project blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
P
Proofpoint News Feed
AWS News Blog
AWS News Blog
博客园_首页
S
Secure Thoughts
S
Schneier on Security
量子位
Simon Willison's Weblog
Simon Willison's Weblog
H
Help Net Security
Spread Privacy
Spread Privacy
Vercel News
Vercel News
Hugging Face - Blog
Hugging Face - Blog
M
Microsoft Research Blog - Microsoft Research
T
Tailwind CSS Blog
The Cloudflare Blog
V
V2EX - 技术
I
InfoQ
O
OpenAI News
有赞技术团队
有赞技术团队
F
Fortinet All Blogs
Google DeepMind News
Google DeepMind News
V
V2EX
Jina AI
Jina AI
Hacker News: Ask HN
Hacker News: Ask HN
F
Future of Privacy Forum
C
Comments on: Blog
Y
Y Combinator Blog
T
The Blog of Author Tim Ferriss
Blog — PlanetScale
Blog — PlanetScale
Cyberwarzone
Cyberwarzone
Project Zero
Project Zero
P
Privacy International News Feed
H
Hacker News: Front Page
Engineering at Meta
Engineering at Meta
Security Latest
Security Latest
P
Privacy & Cybersecurity Law Blog
Recent Announcements
Recent Announcements
小众软件
小众软件
The Hacker News
The Hacker News
Martin Fowler
Martin Fowler
T
Threatpost
P
Proofpoint News Feed
博客园 - 司徒正美
S
SegmentFault 最新的问题

蛋蛋之家

Halo 博客晚间卡顿排查记:从"玄学卡顿"到"真凶落网" 我用这个开源项目,把 AI 绘画提示词变成了"代码"——awesome-gpt-image-2 深度体验报告 群晖部署 LX Music Server:浏览器就是你的音乐播放器【详细版】 500道Word题库太痛苦?于是我写了个智能学习平台 别用一个人的奔跑,耗尽两个人的余生——《你凭什么认为我会一直喜欢你呢》 博客评论自动填充新方案:兼容 Vue/React 响应式绑定与跨架构填充逻辑 2026 生产级指南:Halo 2.x + PostgreSQL 自动化部署与性能优化手册 - 蛋蛋之家 从 Typecho 转向 Halo 2.x:全能型 Nginx 架构与 SEO 无损迁移指南 - 蛋蛋之家 Typecho 迁移 Halo 完整教程:数据库视图解决表前缀 + 自动提取封面图 + 去重检测 - 蛋蛋之家 我的 CodeBuddy 装备库:218个技能全公开 + 使用心得 - 蛋蛋之家 为博客添加自定义评论表情 - 蛋蛋之家 - 一枚蛋蛋的自留地 Comment2Bark:Typecho评论推送到Bark插件 又拍云插件 UpyunFile v1.2 更新:修复 Typecho 1.3.0 兼容性问题 - 蛋蛋之家 手把手修复RSS 403:从PHP警告到Cloudflare拦截的全链路排查 - 蛋蛋之家 - 一枚蛋蛋的自留地 网站被镜像怎么办?2026年反镜像攻防实战指南 - 蛋蛋之家 - 一枚蛋蛋的自留地 VLESS + Reality + Vision:2026 极致隐蔽节点搭建全解析 - 蛋蛋之家 给OpenList和Alist加上液态玻璃效果,颜值直接拉满! - 蛋蛋之家 - 一枚蛋蛋的自留地 网页截图瞬间“赛博飞升”?手把手教你根治 Windows HDR 截图发白 - 蛋蛋之家 群晖 NAS 影音终极方案:Docker Rclone + OpenList 完美挂载 Plex 全攻略 - 蛋蛋之家 一个简洁高效的SVG图标库 - 蛋蛋之家 - 一枚蛋蛋的自留地 告别重复劳动!一键填充评论的神奇书签脚本 - 蛋蛋之家 - 一枚蛋蛋的自留地 解锁思源笔记的隐藏力量:siyuan-patch 深度体验与技术实现 - 蛋蛋之家 - 一枚蛋蛋的自留地 Oracle Cloud 自救指南:旧手机丢失后如何绕过 MFA 重新登录【更新2026年最新政策】 - 蛋蛋之家 本站已加入“萌国ICP备案”联萌!😄 - 蛋蛋之家 - 一枚蛋蛋的自留地 Excel 月报自动化指南:告别重复劳动,让数据主动为你服务 - 蛋蛋之家 - 一枚蛋蛋的自留地 梦呓:为异地女友准备的2周年惊喜礼物 - 蛋蛋之家 - 一枚蛋蛋的自留地 Typecho 多吉云插件优化:更灵活的存储目录配置 - 蛋蛋之家 - 一枚蛋蛋的自留地 甲骨文云硬盘扩容指南:从50G到200G的“免费午餐”怎么吃? ⏰ 时间同步:当你的服务器开始“穿越”时,如何优雅地把它拉回现实 Typecho 又拍云文件管理插件修改版使用指南:新增自定义目录结构功能 华为鸿蒙6.0回退4.2记录 最近小公主情绪不佳 劳动节的家乡景色 烟台山公园一游 群晖搭建ChatGPT Web 推荐脚本:ChatGPT - 提示选择器 Activation Method for JetBrains Products (English version) JetBrains 系列产品激活方法 疫情三年后再进校园 修复searchEngineJump在谷歌搜索页面不生效问题 事情既然发生了,可以是遗憾,不要去后悔。 侄女的试唱会比赛 新一代图片编码格式测试 省科技馆之行 Typora Windows版破解补丁及主题推荐 在Typora中使用PicList上传图片 域名ICP备案之变更网站 Ubuntu 系统如何使用 root 用户登录 中国联通——让一切自由连不通 如何选购适合的口罩? 今天移动营业厅遇到一个小姐姐,真的好美 它不乐意 如何解决Typecho文章不是Markdown语法创建问题 探手抓住这一天的尾巴,为自己庆生 收到腾讯云自媒体分享计划2月份礼品 尝试百度Spider抓取异常问题 甲骨文DD重装系统及失联救砖教程 终于MrDoc升级v0.8.7成功了 Windows 端口查询及杀死进程 甲骨文实例开通与X-UI安装 国艺花鸟市场的悠闲 在思源笔记中使用群晖Synology C2对象存储服务 MrDoc升级v0.8.7失败 居居的手工作品 Linux系统时间同步命令小结 AList安装指南 宝塔面板降级 v7.7.0 及解除强制绑定手机、免费安装专业版插件的方法 修复群晖Synology Drive client右键菜单缺失问题 Windows11 展开折叠的右键菜单为传统模式 在 Windows 下批量将 Markdown 文档转为 Word 文档 Typecho的一些修改记录 Markdown语法——Mermaid 有两种新方案—CloudFlare官方免费CNAME接入教程 居居的新冠历程 群晖 docker 部署思源笔记 Office for Mac 2019 License Installer 公众号通过api发送小程序消息 Windows 10下 iTunes 备份默认存储路径修改 Excel查找返回多个值,并将返回的值放在同一个单元格里面 七牛云测试域名失效后如何下载空间中的文件 入手三星860 evo 500g SSD固态硬盘 分享一套耐看的鼠标指针 如何重置OmniFocus数据库 Office for Mac 2016 License Installer Mac下配置终端+iTerm 2主题
群辉安装Transmission套件、增强汉化WebUI并备份做种列表
吴蛋蛋 · 2022-01-05 · via 蛋蛋之家

0. 为什么要使用 Transmission

  • 开源免费,无广告;
  • 全平台支持,适合 NAS 系统;
  • 没有内容审查,无法下载等情况;
  • 迅雷下载故意降速,很多资源无速度或只能下载到 99%;

文章脑图

1. 安装

1.1 添加源

打开【套件中心】选择【套件来源】新增一个非群晖官方的套件安装源。

名称 :synocommunity 位置http://packages.synocommunity.com

添加源

1.2 开启信任层级

由于非群晖官方套件,如果不开启信任,会提示安装失败。

信任发行者

1.3 安装 Transmission

添加之后,刷新或重新打开套件中心找到社群并找到 Transmission 点击安装。

寻找套件

2. 配置目录

2.1 设置文件夹路径

安装成功后会弹出配置界面,我们暂时先不要配置,先打开 File Station 创建下载文件夹

  • dowload 文件下载完成后再会出现再该目录,所以可以直接关联该目录为媒体库;
  • incomplete 临时文件,正在下载但是未下载完成的文件;
  • watch 这个目录一旦放入 torrent 文件,会自动创建任务并下载,适合做批量和自动下载。

文件目录

按照示例分别创建 download incomplete watch 文件夹

  1. 上述路径,都需要授权 sc-download 用户读写权限,否则将 tr 将无法下载或自动添加种子。
  2. 后面两个路径如果不写,默认禁用相应的功能

安装套件指定目录

根据自己实际需求填写文件夹地址

填写对应文件夹地址到安装界面,点击 下一步 ,填写 后台管理用户名和密码(一定要记住) ,继续下一步完成后会启动。

2.2 设置文件夹权限

在开始使用之前,我们还需要设置目标 下载文件夹读写权限,否则会出现无权限读取和写入。

设置文件夹权限

设置读写权限,需要设置好 sc-download 用户完全读写权限:

添加权限

设置,打开 http://你的IP 地址:9091 或者通过已安装套件中点击启动会自动跳转到该管理控制台,输入安装过程中我们设置的用户名和密码,进入管理控制台。

3. 下载文件与控制

3.1 控制台页面介绍

控制台介绍

3.2 GUI 客户端控制

除了网页之外,我们还可以通过电脑上安装 Transmission 客户端软件进行下载任务的控制。打开 transgui 选择对应平台软件下载并安装。

开通

4. 安装增强汉化版 WebUI

4.1 项目地址:

https://github.com/ronggang/transmission-web-control

4.2 如何安装(SSH 方式)

安装之前

  • 请确认系统已安装 Transmission;
  • 请确认你是否有 root 用户权限;

4.3 获取最新的安装脚本

  • 使用终端以 root 用户登录到你的系统,以下脚本假设你已经使用 root 用户;(方法自行搜索)
  • 记住当前路径(如 /volume1/ ),以后用到,因为 wget 下载的文件会保存到当前目录;
  • 获取最新的安装脚本:
wget https://github.com/ronggang/transmission-web-control/raw/master/release/install-tr-control-cn.sh
  • 请留意执行结果,如果出现 install-tr-control-cn.sh.1 之类的提示,表示文件已存在,请使用 rm install-tr-control-cn.sh* 删除之前的脚本再重新执行上面的命令;
  • 如果提示 https 获取失败,请使用以下命令获取安装脚本:
wget https://github.com/ronggang/transmission-web-control/raw/master/release/install-tr-control-cn.sh --no-check-certificate
  • 如果提示文件已存在,可以通过 rm install-tr-control-cn.sh 进行删除后再执行下载;或者在 wget 后面添加 -N 参数,如:
wget -N https://github.com/ronggang/transmission-web-control/raw/master/release/install-tr-control-cn.sh --no-check-certificate

4.4 执行安装脚本

  • 执行安装脚本(如果系统不支持 bash 命令,请尝试将 bash 改为 sh ):
bash install-tr-control-cn.sh
  • 如果出现 Permission denied 之类的提示,表示没有权限,可尝试添加执行权限:
chmod +x install-tr-control-cn.sh
  • 如果命令成功执行,将出现以下界面:

成功界面

  • 按照提示,输入相应的数字,按回车即可;
  • 如果无法正常显示中文,请尝试设置 SSH 客户端编码为 UTF-8 ,如依然不能显示中文,请下载并使用英文安装脚本 install-tr-control.sh
wget https://github.com/ronggang/transmission-web-control/raw/master/release/install-tr-control.sh --no-check-certificate
  • 安装完成后,用浏览器访问 Transmission Web Interface(如:http://192.168.1.1:9091/ )即可看到新的界面;如果无法看到新界面,可能是浏览器缓存了,请按 Ctrl + F5 强制刷新页面或 [清空缓存]后再重新打开;
  • 如果在知道自己的 Transmission Web 所在目录,也可以在安装脚本后面直接加路径,以避免搜索,如:
bash install-tr-control-cn.sh /var/packages/transmission/target/share/transmission
  • 注意,路径最后 不要web

5. 关于下载速度

  • 带宽的大小决定了下载速度的上限;
  • 资源的热度也可以决定下载速度快慢,一般冷门资源速度较慢;
  • 一开始速度较慢可以稍等,比如到了晚上可能速度就会边快,理论上越多人下载,速度越快;
  • 如果速度特别甚至为 0 ,可以考虑更换其它同内容磁力链接。

6. 备份恢复做种列表

6.1 明确 Transmission 安装位置

我的安装位置:所在磁盘的 /volume3/@appstore/transmission/

6.2. 备份文件夹

备份安装路径 resume 和 torrents 文件夹,如果没有暂定任务,resume 文件夹内无内容。

/volume3/@appstore/transmission/var/torrents

/volume3/@appstore/transmission/var/resume

可以创建群辉定时任务,这样群辉可以定期备份做种列表和种子,任务内容如下,需要根据自己的情况修改

# 按日期新建备份文件夹
mkdir -p /var/services/homes/admin/PTools/transmission/resume/`date +%y%m%d`
mkdir -p /var/services/homes/admin/PTools/transmission/torrents/`date +%y%m%d`
# 备份至新建的文件夹
cp -rf /volume2/@appstore/transmission/var/resume/* /var/services/homes/admin/PTools/transmission/resume/`date +%y%m%d`
cp -rf /volume2/@appstore/transmission/var/torrents/* /var/services/homes/admin/PTools/transmission/torrents/`date +%y%m%d`

6. 3. 重装 tr 后恢复做种列表

将备份的文件夹覆盖新的安装路径对应位置,然后修改种子文件和 resume 文件的权限、所有者、所有组。

chmod 600 *
chown sc-transmission *
chgrp transmission *
ll

修改完成之后,重启 Tr 即可看到亲切的做种列表。

PS:install-tr-control.sh 代码备份

#!/bin/bash
# 获取第一个参数
ARG1="$1"
ROOT_FOLDER=""
SCRIPT_NAME="$0"
SCRIPT_VERSION="1.2.2-beta2"
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 目录为: "
MSG_SPECIFIED_VERSION="您正在使用指定版本安装,版本:"
MSG_SEARCHING_TR_FOLDER="正在搜索 Transmission Web 目录..."
MSG_THE_SPECIFIED_DIRECTORY_DOES_NOT_EXIST="指定的目录不存在,准备进行搜索,请稍候..."
MSG_USE_WEB_HOME="使用 TRANSMISSION_WEB_HOME 变量: $TRANSMISSION_WEB_HOME"
MSG_AVAILABLE="可用"
MSG_TRY_SPECIFIED_VERSION="正在尝试指定版本"
MSG_PACK_COPYING="正在复制安装包..."
MSG_WEB_PATH_IS_MISSING="错误 : Transmisson WEB 目录不存在,请确认是否已安装 Transmisson 。"
MSG_PACK_IS_EXIST=" 已存在,是否重新下载?(y/n)"
MSG_SIKP_DOWNLOAD="\n跳过下载,正在准备安装"
MSG_DOWNLOADING="正在下载 Transmission Web Control..."
MSG_DOWNLOAD_COMPLETE="下载完成,正在准备安装..."
MSG_DOWNLOAD_FAILED="安装包下载失败,请重试或尝试其他版本。"
MSG_INSTALL_COMPLETE="Transmission Web Control 安装完成!"
MSG_PACK_EXTRACTING="正在解压安装包..."
MSG_PACK_CLEANING_UP="正在清理安装包..."
MSG_DONE="安装脚本执行完成。如遇到问题请查看:https://github.com/ronggang/transmission-web-control/wiki "
MSG_SETTING_PERMISSIONS="正在设置权限,大约需要一分钟 ..."
MSG_BEGIN="开始"
MSG_END="结束"
MSG_MAIN_MENU="
    欢迎使用 Transmission Web Control 中文安装脚本。
    官方帮助文档:https://github.com/ronggang/transmission-web-control/wiki 
    安装脚本版本:$SCRIPT_VERSION 
    1. 安装最新的发布版本(release);
    2. 安装指定版本,可用于降级;
    3. 恢复到官方UI;
    4. 重新下载安装脚本($SCRIPT_NAME);
    5. 检测 Transmission 是否已启动;
    6. 指定安装目录;
    9. 安装最新代码库中的内容(master);
    ===================
    0. 退出安装;
    请输入对应的数字:"
MSG_INPUT_VERSION="请输入版本号(如:1.5.1):"
MSG_INPUT_TR_FOLDER="请输入 Transmission Web 所在的目录(不包含web,如:/usr/share/transmission):"
MSG_SPECIFIED_FOLDER="安装目录已指定为:"
MSG_INVALID_PATH="输入的路径无效。"
MSG_MASTER_INSTALL_CONFIRM="最新代码可能包含未知错误,是否确认安装? (y/n): "
MSG_FIND_WEB_FOLDER_FROM_PROCESS="正在尝试从进程中识别 Transmission Web 目录..."
MSG_FIND_WEB_FOLDER_FROM_PROCESS_FAILED=" × 识别失败,请确认 Transmission 已启动。"
MSG_CHECK_TR_DAEMON="正在检测 Transmission 进程..."
MSG_CHECK_TR_DAEMON_FAILED="在系统进程中没有找到 Transmission ,请确认是否已启动。"
MSG_TRY_START_TR="是否尝试启动 Transmission ?(y/n)"
MSG_TR_DAEMON_IS_STARTED="Transmission 已启动。"
MSG_REVERTING_ORIGINAL_UI="正在恢复官方UI..."
MSG_REVERT_COMPLETE="恢复完成,在浏览器中重新访问 http://ip:9091/ 或刷新即可查看官方UI。"
MSG_ORIGINAL_UI_IS_MISSING="官方UI不存在。"
MSG_DOWNLOADING_INSTALL_SCRIPT="正在重新下载安装脚本..."
MSG_INSTALL_SCRIPT_DOWNLOAD_COMPLETE="下载完成,请重新运行安装脚本。"
MSG_INSTALL_SCRIPT_DOWNLOAD_FAILED="安装脚本下载失败!"
MSG_NON_ROOT_USER="无法确认当前是否为 root 用户,可能无法进行安装操作。是否继续?(y/n)"
#==========================================================

# 是否自动安装
if [ "$ARG1" = "auto" ]; then
    AUTOINSTALL=1
else
    ROOT_FOLDER=$ARG1
fi

initValues() {
    # 判断临时目录是否存在,不存在则创建
    if [ ! -d "$TMP_FOLDER" ]; then
        mkdir -p "$TMP_FOLDER"
    fi

    # 获取 Transmission 目录
    getTransmissionPath

    # 判断 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 / -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" --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 [ -f "/etc/fedora-release" ] || [ -f "/etc/debian_version" ]; then
        ROOT_FOLDER="/usr/share/transmission"
    fi

    if [ ! -d "$ROOT_FOLDER" ]; then
        showLog "$MSG_FIND_WEB_FOLDER_FROM_PROCESS" "n"
        infos=`ps -ef | awk '/[t]ransmission-da/{print $8}'`
        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`
}

# 检测 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