From 191856f710e84bd6d05800143d06aa66e482af73 Mon Sep 17 00:00:00 2001 From: Jrohy Date: Fri, 28 May 2021 10:19:08 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=AE=89=E8=A3=85=E6=8C=87?= =?UTF-8?q?=E5=AE=9A=E7=89=88=E6=9C=ACtrojan?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- asset/trojan-install.sh | 31 +++++++++++++++++++++++++++++-- cmd/root.go | 2 +- cmd/update.go | 8 +++++++- trojan/install.go | 7 +++++-- trojan/trojan.go | 2 +- web/controller/trojan.go | 2 +- 6 files changed, 44 insertions(+), 8 deletions(-) diff --git a/asset/trojan-install.sh b/asset/trojan-install.sh index 23a72204..6a42b2e9 100644 --- a/asset/trojan-install.sh +++ b/asset/trojan-install.sh @@ -5,7 +5,26 @@ set -eo pipefail # trojan: 0, trojan-go: 1 TYPE=0 -[[ $1 == "go" ]] && TYPE=1 +INSTALL_VERSION="" + +while [[ $# > 0 ]];do + KEY="$1" + case $KEY in + -v|--version) + INSTALL_VERSION="$2" + echo -e "prepare install $INSTALL_VERSION version..\n" + shift + ;; + -g|--go) + TYPE=1 + ;; + *) + # unknown option + ;; + esac + shift # past argument or value +done +############################# function prompt() { while true; do @@ -38,7 +57,15 @@ else CHECKVERSION="https://api.github.com/repos/p4gefau1t/trojan-go/releases" fi NAME=trojan -VERSION=$(curl -H 'Cache-Control: no-cache' -s "$CHECKVERSION" | grep 'tag_name' | cut -d\" -f4 | sed 's/v//g' | head -n 1) +if [[ -z $INSTALL_VERSION ]];then + VERSION=$(curl -H 'Cache-Control: no-cache' -s "$CHECKVERSION" | grep 'tag_name' | cut -d\" -f4 | sed 's/v//g' | head -n 1) +else + if [[ -z `curl -H 'Cache-Control: no-cache' -s "$CHECKVERSION"|grep $INSTALL_VERSION` ]];then + echo "no $INSTALL_VERSION version file!" + exit 1 + fi + VERSION=`echo "$INSTALL_VERSION"|sed 's/v//g'` +fi if [[ $TYPE == 0 ]];then TARBALL="$NAME-$VERSION-linux-amd64.tar.xz" DOWNLOADURL="https://github.com/trojan-gfw/$NAME/releases/download/v$VERSION/$TARBALL" diff --git a/cmd/root.go b/cmd/root.go index 517e7ae4..c947c6ec 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -29,7 +29,7 @@ func Execute() { func check() { if !util.IsExists("/usr/local/etc/trojan/config.json") { fmt.Println("本机未安装trojan, 正在自动安装...") - trojan.InstallTrojan() + trojan.InstallTrojan("") core.WritePassword(nil) trojan.InstallTls() trojan.InstallMysql() diff --git a/cmd/update.go b/cmd/update.go index 5e48d3b9..7619de5f 100644 --- a/cmd/update.go +++ b/cmd/update.go @@ -9,8 +9,14 @@ import ( var updateCmd = &cobra.Command{ Use: "update", Short: "更新trojan", + Long: "可添加版本号更新特定版本, 比如'trojan update v0.10.0', 不添加版本号则安装最新版", + Args: cobra.MaximumNArgs(1), Run: func(cmd *cobra.Command, args []string) { - trojan.InstallTrojan() + version := "" + if len(args) == 1 { + version = args[0] + } + trojan.InstallTrojan(version) }, } diff --git a/trojan/install.go b/trojan/install.go index 05fb3bba..24d1b7ed 100644 --- a/trojan/install.go +++ b/trojan/install.go @@ -24,7 +24,7 @@ func InstallMenu() { menu := []string{"更新trojan", "证书申请", "安装mysql"} switch util.LoopInput("请选择: ", menu, true) { case 1: - InstallTrojan() + InstallTrojan("") case 2: InstallTls() case 3: @@ -49,13 +49,16 @@ func InstallDocker() { } // InstallTrojan 安装trojan -func InstallTrojan() { +func InstallTrojan(version string) { fmt.Println() data := string(asset.GetAsset("trojan-install.sh")) checkTrojan := util.ExecCommandWithResult("systemctl list-unit-files|grep trojan.service") if (checkTrojan == "" && runtime.GOARCH != "amd64") || Type() == "trojan-go" { data = strings.ReplaceAll(data, "TYPE=0", "TYPE=1") } + if version != "" { + data = strings.ReplaceAll(data, "INSTALL_VERSION=\"\"", "INSTALL_VERSION=\""+version+"\"") + } util.ExecCommand(data) util.OpenPort(443) util.ExecCommand("systemctl restart trojan") diff --git a/trojan/trojan.go b/trojan/trojan.go index b0e3e60f..22048714 100644 --- a/trojan/trojan.go +++ b/trojan/trojan.go @@ -120,7 +120,7 @@ func SwitchType(tType string) error { if err := core.SetValue("trojanType", tType); err != nil { return err } - InstallTrojan() + InstallTrojan("") return nil } diff --git a/web/controller/trojan.go b/web/controller/trojan.go index b95cb54f..af179d48 100644 --- a/web/controller/trojan.go +++ b/web/controller/trojan.go @@ -45,7 +45,7 @@ func Restart() *ResponseBody { func Update() *ResponseBody { responseBody := ResponseBody{Msg: "success"} defer TimeCost(time.Now(), &responseBody) - trojan.InstallTrojan() + trojan.InstallTrojan("") return &responseBody }