diff --git a/.github/ISSUE_TEMPLATE/bug---.md b/.github/ISSUE_TEMPLATE/bug---.md index 83d544b..11d04e9 100644 --- a/.github/ISSUE_TEMPLATE/bug---.md +++ b/.github/ISSUE_TEMPLATE/bug---.md @@ -11,32 +11,28 @@ assignees: '' 我们建议您按照下方模板填写 Bug Report,以便我们收集更多的有效信息 -# 简单描述这个 Bug: +## 简单描述这个 Bug +## 如何复现这个 Bug -# 如何复现这个 Bug: +在此描述复现这个Bug所需要的操作步骤 -1. -2. -3. -4. - -### 服务器和客户端环境信息 +## 服务器和客户端环境信息 在此描述你的服务器和客户端所处的网络环境,系统架构,以及其他信息 -### 服务端和客户端日志 +## 服务端和客户端日志 粘贴**故障发生时**,服务端和客户端日志 -### 服务端和客户端配置文件 +## 服务端和客户端配置文件 -可以复现该问题的客户端和服务端的完整配置 +可以复现该问题的客户端和服务端的完整配置(请隐去域名和IP等隐私信息) -### 服务端和客户端版本信息 +## 服务端和客户端版本信息 -请执行 ./trojan-go -version并将输出完整粘贴在此处 +请执行./trojan-go -version并将输出完整粘贴在此处 -### 其他信息 +## 其他信息 你认为对我们修复bug有帮助的任何信息都可以在这里写出来 diff --git a/.github/workflows/dev-build.yml b/.github/workflows/dev-build.yml index ab3eb5a..bc389b6 100644 --- a/.github/workflows/dev-build.yml +++ b/.github/workflows/dev-build.yml @@ -23,9 +23,9 @@ jobs: - name: Test run: go test ./... - name: Build - run: mkdir dist && go build -tags "full" -o dist + run: make - name: Upload Binary uses: actions/upload-artifact@v1 with: - name: dist-${{ matrix.platform }} - path: ./dist/ + name: bin-${{ matrix.platform }} + path: ./bin/ diff --git a/.github/workflows/release-build.yml b/.github/workflows/release-build.yml index 89ffd7d..40586f9 100644 --- a/.github/workflows/release-build.yml +++ b/.github/workflows/release-build.yml @@ -21,7 +21,7 @@ jobs: git checkout $tag_name - name: Build run: | - ./build-all.sh + ./release.sh set -x assets=() for asset in ./release/*; do diff --git a/Dockerfile b/Dockerfile index eca6dfa..26338f6 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,13 +2,13 @@ FROM golang:alpine AS builder WORKDIR / RUN apk add --update git &&\ git clone --depth=1 https://github.com/p4gefau1t/trojan-go.git &&\ - cd trojan-go && mkdir release && go build -tags "full" -ldflags "-s -w" -o release &&\ - wget https://github.com/v2ray/domain-list-community/raw/release/dlc.dat -O release/geosite.dat &&\ - wget https://github.com/v2ray/geoip/raw/release/geoip.dat -O release/geoip.dat + cd trojan-go && make &&\ + wget https://github.com/v2ray/domain-list-community/raw/release/dlc.dat -O bin/geosite.dat &&\ + wget https://github.com/v2ray/geoip/raw/release/geoip.dat -O bin/geoip.dat FROM alpine WORKDIR / -COPY --from=builder /trojan-go/release /usr/local/bin/ +COPY --from=builder /trojan-go/bin /usr/local/bin/ COPY --from=builder /trojan-go/example/server.json /etc/trojan-go/config.json ENTRYPOINT ["/usr/local/bin/trojan-go", "-config"] diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..ceb9ff3 --- /dev/null +++ b/Makefile @@ -0,0 +1,92 @@ +NAME=trojan-go +PACKAGE_NAME=github.com/p4gefau1t/trojan-go +VERSION=`git describe` +COMMIT=`git rev-parse HEAD` + +BIN_DIR=bin +VAR_SETTING=-X $(PACKAGE_NAME)/constant.Version=$(VERSION) -X $(PACKAGE_NAME)/constant.Commit=$(COMMIT) +GOBUILD=CGO_ENABLED=0 go build -tags "full" -ldflags="-s -w $(VAR_SETTING)" -o $(BIN_DIR)/$(NAME) + +normal: clean + $(GOBUILD) + +clean: + -rm -frd $(BIN_DIR) + +geoip.dat: + wget https://github.com/v2ray/geoip/raw/release/geoip.dat + +geosite.dat: + wget https://github.com/v2ray/domain-list-community/raw/release/dlc.dat -O geosite.dat + +install: $(BIN_DIR)/$(NAME) geoip.dat geosite.dat + mkdir -p /etc/$(NAME) + mkdir -p /usr/share/$(NAME) + cp example/*.json /etc/$(NAME) + cp $(BIN_DIR)/$(NAME) /usr/bin/$(NAME) + cp example/$(NAME).service /etc/systemd/system + cp example/$(NAME)@.service /etc/systemd/system + cp geosite.dat /usr/share/$(NAME)/geosite.dat + cp geoip.dat /usr/share/$(NAME)/geoip.dat + ln -fs /usr/share/$(NAME)/geoip.dat /usr/bin/ + ln -fs /usr/share/$(NAME)/geosite.dat /usr/bin/ + +uninstall: + rm /etc/systemd/system/$(NAME).service + rm /etc/systemd/system/$(NAME)@.service + rm /usr/bin/$(NAME) + rm -rd /etc/$(NAME) + rm -rd /usr/share/$(NAME) + rm /usr/bin/geoip.dat + rm /usr/bin/geosite.dat + +darwin-amd64: + GOARCH=amd64 GOOS=darwin $(GOBUILD) + +linux-386: + GOARCH=386 GOOS=linux $(GOBUILD) + +linux-amd64: + GOARCH=amd64 GOOS=linux $(GOBUILD) + +linux-armv5: + GOARCH=arm GOOS=linux GOARM=5 $(GOBUILD) + +linux-armv6: + GOARCH=arm GOOS=linux GOARM=6 $(GOBUILD) + +linux-armv7: + GOARCH=arm GOOS=linux GOARM=7 $(GOBUILD) + +linux-armv8: + GOARCH=arm64 GOOS=linux $(GOBUILD) + +linux-mips-softfloat: + GOARCH=mips GOMIPS=softfloat GOOS=linux $(GOBUILD) + +linux-mips-hardfloat: + GOARCH=mips GOMIPS=hardfloat GOOS=linux $(GOBUILD) + +linux-mipsle-softfloat: + GOARCH=mipsle GOMIPS=softfloat GOOS=linux $(GOBUILD) + +linux-mipsle-hardfloat: + GOARCH=mipsle GOMIPS=hardfloat GOOS=linux $(GOBUILD) + +linux-mips64: + GOARCH=mips64 GOOS=linux $(GOBUILD) + +linux-mips64le: + GOARCH=mips64le GOOS=linux $(GOBUILD) + +freebsd-386: + GOARCH=386 GOOS=freebsd $(GOBUILD) + +freebsd-amd64: + GOARCH=amd64 GOOS=freebsd $(GOBUILD) + +windows-386: + GOARCH=386 GOOS=windows $(GOBUILD) + +windows-amd64: + GOARCH=amd64 GOOS=windows $(GOBUILD) diff --git a/README.md b/README.md index e4aa999..eb56382 100644 --- a/README.md +++ b/README.md @@ -340,9 +340,18 @@ Trojan-Go支持可插拔的传输层插件,并支持Shadowsocks [SIP003](https 确保你的Go版本 >= 1.14,推荐使用snap安装Go保持与上游同步。 +下面的命令使用```make```进行编译 + ```shell git clone https://github.com/p4gefau1t/trojan-go.git cd trojan-go +make +make install #安装systemd服务等,可选 +``` + +你也可以使用Go自行编译和安装 + +```shell go build -tags "full" ``` diff --git a/build-all.sh b/build-all.sh deleted file mode 100755 index d13a1a4..0000000 --- a/build-all.sh +++ /dev/null @@ -1,77 +0,0 @@ -#!/bin/bash - -PLATFORMS="darwin/amd64 darwin/386" -PLATFORMS="$PLATFORMS windows/amd64 windows/386" -PLATFORMS="$PLATFORMS windows/arm" -PLATFORMS="$PLATFORMS linux/amd64 linux/386" -PLATFORMS="$PLATFORMS linux/ppc64 linux/ppc64le" -PLATFORMS="$PLATFORMS linux/mips64 linux/mips64le" -PLATFORMS="$PLATFORMS linux/mips linux/mipsle" -PLATFORMS="$PLATFORMS linux/arm64 linux/arm" -PLATFORMS="$PLATFORMS linux/s390x" -PLATFORMS="$PLATFORMS dragonfly/amd64" -PLATFORMS="$PLATFORMS openbsd/arm64 openbsd/arm" -PLATFORMS="$PLATFORMS openbsd/amd64 openbsd/386" -PLATFORMS="$PLATFORMS freebsd/amd64 freebsd/386" -PLATFORMS="$PLATFORMS freebsd/arm64 freebsd/arm" - -type setopt >/dev/null 2>&1 - -rm -rd release -rm -rd temp -rm ./*.dat - -mkdir release -mkdir temp - -wget https://github.com/v2ray/domain-list-community/raw/release/dlc.dat -O geosite.dat -wget https://github.com/v2ray/geoip/raw/release/geoip.dat -O geoip.dat - - -SCRIPT_NAME=`basename "$0"` -FAILURES="" - -PACKAGE_NAME="github.com/p4gefau1t/trojan-go" -VERSION=`git describe` -COMMIT=`git rev-parse HEAD` - -VAR_SETTING="" -VAR_SETTING="$VAR_SETTING -X $PACKAGE_NAME/constant.Version=$VERSION" -VAR_SETTING="$VAR_SETTING -X $PACKAGE_NAME/constant.Commit=$COMMIT" - -for PLATFORM in $PLATFORMS; do - GOOS=${PLATFORM%/*} - GOARCH=${PLATFORM#*/} - ZIP_FILENAME="trojan-go-${GOOS}-${GOARCH}.zip" - CMD="CGO_ENABLED=0 GOOS=${GOOS} GOARCH=${GOARCH} go build -tags \"full\" -o temp -ldflags=\"-s -w ${VAR_SETTING}\"" - echo "${CMD}" - eval $CMD || FAILURES="${FAILURES} ${PLATFORM}" - zip -j release/$ZIP_FILENAME temp/* ./*.dat - zip release/$ZIP_FILENAME example/* - sha1sum release/$ZIP_FILENAME >> release/checksum.sha1 - rm temp/* -done - -# arm -PLATFORMS_ARM="windows linux freebsd netbsd" -for GOOS in $PLATFORMS_ARM; do - # build for each ARM version - GOARCH="arm" - for GOARM in 7 6 5; do - ZIP_FILENAME="trojan-go-${GOOS}-${GOARCH}v${GOARM}.zip" - CMD="CGO_ENABLED=0 GOARM=${GOARM} GOOS=${GOOS} GOARCH=${GOARCH} go build -tags \"full\" -o temp -ldflags \"-s -w ${VAR_SETTING}\"" - echo "${CMD}" - eval "${CMD}" || FAILURES="${FAILURES} ${GOOS}/${GOARCH}v${GOARM}" - zip -j release/$ZIP_FILENAME temp/* ./*.dat - zip release/$ZIP_FILENAME example/* - sha1sum release/$ZIP_FILENAME >> release/checksum.sha1 - rm temp/* - done -done - - -# eval errors -if [[ "${FAILURES}" != "" ]]; then - echo "" - echo "${SCRIPT_NAME} failed on: ${FAILURES}" -fi diff --git a/build.sh b/build.sh deleted file mode 100755 index 09cfad3..0000000 --- a/build.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/bash - -PACKAGE_NAME="github.com/p4gefau1t/trojan-go" -VERSION=`git describe` -COMMIT=`git rev-parse HEAD` - -VAR_SETTING="" -VAR_SETTING="$VAR_SETTING -X $PACKAGE_NAME/constant.Version=$VERSION" -VAR_SETTING="$VAR_SETTING -X $PACKAGE_NAME/constant.Commit=$COMMIT" - -CGO_ENABLED=0 go build -tags "full" -ldflags="-s -w $VAR_SETTING" diff --git a/docs/content/developer/build.md b/docs/content/developer/build.md index 493ad0f..69be85e 100644 --- a/docs/content/developer/build.md +++ b/docs/content/developer/build.md @@ -6,14 +6,19 @@ weight: 10 编译需要Go版本号高于1.14.x,请在编译前确认你的编译器版本。推荐使用snap安装和更新go。 -编译过程非常简单 +编译方式非常简单,可以使用Makefile预设步骤进行编译: + +```shell +make +make install #安装systemd服务等,可选 +``` + +或者直接使用Go进行编译: ```shell go build -tags "full" #编译完整版本 ``` -build.sh中的命令禁用了cgo并去除可执行文件的调试符号以减小体积。 - 可以通过指定GOOS和GOARCH环境变量,指定交叉编译的目标操作系统和架构,例如 ```shell @@ -21,7 +26,7 @@ GOOS=windows GOARCH=386 go build -tags "full" #windows x86 GOOS=linux GOARCH=arm64 go build -tags "full" #linux arm64 ``` -你可以使用build-all.sh进行批量的多个平台的交叉编译,release版本使用了这个脚本进行构建。 +你可以使用release.sh进行批量的多个平台的交叉编译,release版本使用了这个脚本进行构建。 Trojan-Go的大多数模块是可插拔的。在build文件夹下可以找到各个模块的导入声明。如果你不需要其中某些功能,或者需要缩小可执行文件的体积,可以使用构建标签(tags)进行模块的自定义,例如 diff --git a/example/client.json b/example/client.json index 93a4355..ca05ce1 100644 --- a/example/client.json +++ b/example/client.json @@ -10,10 +10,10 @@ "ssl": { "sni": "your-domain-name.com" }, - "mux" :{ + "mux": { "enabled": true }, - "router":{ + "router": { "enabled": true, "bypass": [ "geoip:cn", @@ -27,6 +27,8 @@ "proxy": [ "geosite:geolocation-!cn" ], - "default_policy": "proxy" + "default_policy": "proxy", + "geoip": "/usr/share/trojan-go/geoip.dat", + "geosite": "/usr/share/trojan-go/geosite.dat" } } \ No newline at end of file diff --git a/example/server.json b/example/server.json index cb6d898..bd399f3 100755 --- a/example/server.json +++ b/example/server.json @@ -12,10 +12,12 @@ "key": "your_key.key", "sni": "your-domain-name.com" }, - "router":{ + "router": { "enabled": true, "block": [ "geoip:private" - ] + ], + "geoip": "/usr/share/trojan-go/geoip.dat", + "geosite": "/usr/share/trojan-go/geosite.dat" } -} +} \ No newline at end of file diff --git a/example/trojan-go.service b/example/trojan-go.service index 19380a2..dc4b609 100644 --- a/example/trojan-go.service +++ b/example/trojan-go.service @@ -6,7 +6,7 @@ Wants=network-online.target [Service] Type=simple -User=root +User=nobody ExecStart=/usr/bin/trojan-go -config /etc/trojan-go/config.json Restart=on-failure RestartSec=10 diff --git a/example/trojan-go@.service b/example/trojan-go@.service index 91a8d46..01789b0 100644 --- a/example/trojan-go@.service +++ b/example/trojan-go@.service @@ -6,7 +6,7 @@ After=network.target network-online.target nss-lookup.target mysql.service maria [Service] Type=simple StandardError=journal -User=root +User=nobody AmbientCapabilities=CAP_NET_BIND_SERVICE ExecStart=/usr/bin/trojan-go -config /etc/trojan-go/%i.json ExecReload=/bin/kill -HUP $MAINPID diff --git a/release.sh b/release.sh new file mode 100755 index 0000000..a92334c --- /dev/null +++ b/release.sh @@ -0,0 +1,44 @@ +#!/bin/bash + +PLATFORMS="$PLATFORMS darwin-amd64" +PLATFORMS="$PLATFORMS linux-386" +PLATFORMS="$PLATFORMS linux-amd64" +PLATFORMS="$PLATFORMS linux-armv5" +PLATFORMS="$PLATFORMS linux-armv6" +PLATFORMS="$PLATFORMS linux-armv7" +PLATFORMS="$PLATFORMS linux-armv8" +PLATFORMS="$PLATFORMS linux-mips-softfloat" +PLATFORMS="$PLATFORMS linux-mips-hardfloat" +PLATFORMS="$PLATFORMS linux-mipsle-softfloat" +PLATFORMS="$PLATFORMS linux-mipsle-hardfloat" +PLATFORMS="$PLATFORMS linux-mips64" +PLATFORMS="$PLATFORMS linux-mips64le" +PLATFORMS="$PLATFORMS freebsd-386" +PLATFORMS="$PLATFORMS freebsd-amd64" +PLATFORMS="$PLATFORMS windows-386" +PLATFORMS="$PLATFORMS windows-amd64" + +rm -rdf release +rm -rdf temp +mkdir release +mkdir temp + +wget https://github.com/v2ray/domain-list-community/raw/release/dlc.dat -O temp/geosite.dat +wget https://github.com/v2ray/geoip/raw/release/geoip.dat -O temp/geoip.dat + +for PLATFORM in $PLATFORMS; do + make clean + eval "make $PLATFORM" || FAILURES="${PLATFORM}" + if [[ "${FAILURES}" != "" ]]; then + echo "failed on: ${FAILURES}" + exit 1 + fi + + ZIP_FILENAME=trojan-go-$PLATFORM.zip + zip -j release/$ZIP_FILENAME bin/trojan-go + zip release/$ZIP_FILENAME example/* + zip -j release/$ZIP_FILENAME temp/* +done + +make clean +rm -rdf temp \ No newline at end of file