Skip to content

Commit

Permalink
Make 7.6.7 default and support multi-arch build in github action
Browse files Browse the repository at this point in the history
Resolve #99, #128, #258
  • Loading branch information
Hagb committed Jun 24, 2023
1 parent b93d0d5 commit 59265bf
Show file tree
Hide file tree
Showing 17 changed files with 103 additions and 42 deletions.
81 changes: 70 additions & 11 deletions .github/workflows/build-and-push-docker-image.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ on: workflow_dispatch

env:
IMAGE_NAME: hagb/docker-easyconnect
ARCHS: mips64le arm64 i386 amd64

jobs:
build:
Expand All @@ -24,25 +25,83 @@ jobs:
run: |
docker-build() {
#docker pull $1
docker build -t $1 --build-arg BUILD_ENV=actions "${@:2}"
docker buildx build --build-arg BUILD_ENV=actions "$@"
}
pirefix=""
latest_name="latest"
if [ "$(git branch --show-current)" = develop ]; then prefix=dev- ; latest_name=dev ; fi
branch="$(git branch --show-current)"
case "$branch" in
master) prefix= ;;
develop) prefix=dev- ;;
*) prefix="$branch"- ;;
esac
docker-build hagb/docker-easyconnect:build -f Dockerfile.build .
build() {
for ver in 7.6.3 7.6.7; do
docker-build --platform "$1" -t hagb/docker-easyconnect:build -f Dockerfile.build $(cat build-args/$ver-"$1".txt) .
docker-build --platform "$1" -t ${{ env.IMAGE_NAME }}:${prefix}$ver-"$1" $(cat build-args/$ver-"$1".txt) -f Dockerfile .
docker-build --platform "$1" -t ${{ env.IMAGE_NAME }}:${prefix}vncless-$ver-"$1" $(cat build-args/$ver-"$1".txt) -f Dockerfile.vncless .
done
docker-build ${{ env.IMAGE_NAME }}:${prefix}cli -f Dockerfile.cli .
if [ amd64 = "$1" ]; then
docker-build -t ${{ env.IMAGE_NAME }}:${prefix}cli -f Dockerfile.cli .
fi
}
docker-build ${{ env.IMAGE_NAME }}:${prefix}7.6.3 --build-arg EC_URL=$(cat ec_urls/7.6.3.txt) -f Dockerfile .
docker-build ${{ env.IMAGE_NAME }}:${prefix}7.6.7 --build-arg EC_URL=$(cat ec_urls/7.6.7.txt) -f Dockerfile .
sudo apt-get -y install binfmt-support qemu-user-static
docker-build ${{ env.IMAGE_NAME }}:${prefix}vncless-7.6.3 --build-arg EC_URL=$(cat ec_urls/7.6.3.txt) -f Dockerfile.vncless .
docker-build ${{ env.IMAGE_NAME }}:${prefix}vncless-7.6.7 --build-arg EC_URL=$(cat ec_urls/7.6.7.txt) -f Dockerfile.vncless .
for arch in ${{ env.ARCHS }}; do
build $arch
done
docker tag ${{ env.IMAGE_NAME }}:${prefix}7.6.3 ${{ env.IMAGE_NAME }}:${latest_name}
docker image rm hagb/docker-easyconnect:build
- name: Push Docker image
run: |
branch="$(git branch --show-current)"
case "$branch" in
master)
prefix=
default=latest
;;
develop)
prefix=dev-
default=dev
;;
*)
prefix="$branch"-
default="$branch"
;;
esac
token="$( curl -sH "Content-Type: application/json" \
-X POST -d "{\"username\": \"${{ secrets.DOCKERHUB_USERNAME }}\", \"password\": \"${{ secrets.DOCKERHUB_TOKEN }}\"}" \
https://hub.docker.com/v2/users/login/ |
jq -r .token )"
docker push --all-tags ${{ env.IMAGE_NAME }}
for ver in 7.6.3 7.6.7; do
for vncless in "" vncless-; do
for arch in ${{ env.ARCHS }}; do
docker manifest create ${{ env.IMAGE_NAME }}:${prefix}${vncless}${ver} --amend ${{ env.IMAGE_NAME }}:${prefix}${vncless}${ver}-${arch}
done
docker manifest push ${{ env.IMAGE_NAME }}:${prefix}${vncless}${ver}
if [ 7.6.7 = $ver ]; then
if [ -n "$vncless" ]; then
tag=${prefix}vncless
else
tag=$default
fi
for arch in ${{ env.ARCHS }}; do
docker manifest create ${{ env.IMAGE_NAME }}:$tag --amend ${{ env.IMAGE_NAME }}:${prefix}${vncless}${ver}-${arch}
done
docker manifest push ${{ env.IMAGE_NAME }}:$tag
fi
for arch in ${{ env.ARCHS }}; do
curl -sH "Content-Type: application/json" -X DELETE -H "Authorization: JWT $token" \
https://hub.docker.com/v2/repositories/${{ env.IMAGE_NAME }}/tags/${prefix}${vncless}${ver}-${arch}/
done
done
done
10 changes: 5 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,15 +19,15 @@
``` bash
docker run --device /dev/net/tun --cap-add NET_ADMIN -ti -p 127.0.0.1:1080:1080 -p 127.0.0.1:8888:8888 -e EC_VER=7.6.3 -e CLI_OPTS="-d vpnaddress -u username -p password" hagb/docker-easyconnect:cli
```
其中 `-e EC_VER=7.6.3` 表示使用 `7.6.3` 版本的 EasyConnect,请根据实际情况修改版本号;
其中 `-e EC_VER=7.6.7` 表示使用 `7.6.7` 版本的 EasyConnect,请根据实际情况修改版本号(选择 `7.6.7``7.6.3`
3. 根据提示输入服务器地址、登录凭据;
4. 浏览器(或其他支持的应用)可配置socks5代理(可以通过插件配置),地址 `127.0.0.1`, 端口 `1080`;也可以使用 http 代理,地址 `127.0.0.1`, 端口 `8888`
5. 如需为 socks5 设置密码,可在 `docker run` 命令后追加 `-e SOCKS_USER="youruser" -e SOCKS_PASSWD="thepassword"`

### 图形界面版

1. [安装Docker并运行](https://docs.docker.com/get-docker/)
2. 在终端输入: `docker run --device /dev/net/tun --cap-add NET_ADMIN -ti -e PASSWORD=xxxx -v $HOME/.ecdata:/root -p 127.0.0.1:5901:5901 -p 127.0.0.1:1080:1080 -p 127.0.0.1:8888:8888 hagb/docker-easyconnect:7.6.3`(末尾 EasyConnect 版本号 `7.6.3` 请根据实际情况修改);
2. 在终端输入: `docker run --device /dev/net/tun --cap-add NET_ADMIN -ti -e PASSWORD=xxxx -v $HOME/.ecdata:/root -p 127.0.0.1:5901:5901 -p 127.0.0.1:1080:1080 -p 127.0.0.1:8888:8888 hagb/docker-easyconnect:7.6.7`(末尾 EasyConnect 版本号 `7.6.7` 请根据实际情况修改);
3. 使用vnc客户端连接vnc, 地址:127.0.0.1, 端口: 5901, 密码 xxxx ;
4. 成功连上后你应该能看到easyconnect的登录窗口,填写并登录easyconnect;
5. 浏览器(或其他支持的应用)可配置socks5代理(可以通过插件配置),地址 `127.0.0.1`, 端口 `1080`;也可以使用 http 代理,地址 `127.0.0.1`, 端口 `8888`
Expand All @@ -37,7 +37,7 @@

## EasyConnect 版本

[`ec_urls`](ec_urls) 目录中以`版本号.txt`为文件名的文本文件保存了下载链接。(欢迎提交 issue 或 PR)
[`build-args`](./build-args) 目录中以`版本号-架构.txt`为文件名的文本文件中包含下载链接。(欢迎提交 issue 或 PR)

### 已经过测试的版本

Expand All @@ -59,9 +59,9 @@ docker pull hagb/docker-easyconnect:TAG

其中 TAG 可以是如下值(不带 VNC 服务端的 image 比带 VNC 服务端的 image 小):

- `latest`: 默认值,带 VNC 服务端的`7.6.3`版 image,
- `latest`: 默认值,带 VNC 服务端的`7.6.7`版 image,
- `cli`: 多版本(`7.6.3`, `7.6.7`, `7.6.8`)纯命令行版
- `vncless`: 不带 VNC 服务端的`7.6.3`版 image
- `vncless`: 不带 VNC 服务端的`7.6.7`版 image
- `7.6.3`: 带 VNC 服务端的`7.6.3`版 image
- `vncless-7.6.3`: 不带 VNC 服务端的`7.6.3`版 image
- `7.6.7`: 带 VNC 服务端的`7.6.7`版 image
Expand Down
1 change: 1 addition & 0 deletions build-args/7.6.3-amd64.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
--build-arg EC_URL=http://download.sangfor.com.cn/download/product/sslvpn/pkg/linux_01/EasyConnect_x64.deb
1 change: 1 addition & 0 deletions build-args/7.6.3-arm64.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
--build-arg EC_URL=https://download.sangfor.com.cn/download/product/sslvpn/SSLVPN%E4%BF%A1%E5%88%9B%E5%AE%A2%E6%88%B7%E7%AB%AF/%E7%BB%9F%E4%BF%A1UOS%20%E9%B2%B2%E9%B9%8F%20SSL%20VPN%E5%AE%A2%E6%88%B7%E7%AB%AF.zip --build-arg EC_DEB_PATH=UOS_EasyConnect_arm64.deb
1 change: 1 addition & 0 deletions build-args/7.6.3-i386.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
--build-arg EC_URL=http://download.sangfor.com.cn/download/product/sslvpn/pkg/linux_01/EasyConnect_x86.deb
1 change: 1 addition & 0 deletions build-args/7.6.3-mips64le.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
--build-arg EC_URL=https://download.sangfor.com.cn/download/product/sslvpn/SSLVPN%E4%BF%A1%E5%88%9B%E5%AE%A2%E6%88%B7%E7%AB%AF/%E7%BB%9F%E4%BF%A1UOS%20%E9%BE%99%E8%8A%AF%20SSL%20VPN%E5%AE%A2%E6%88%B7%E7%AB%AF.zip --build-arg EC_DEB_PATH=02-升级包及安装文件/EasyConnect.deb
1 change: 1 addition & 0 deletions build-args/7.6.3-other.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
--build-arg EC_URL=http://download.sangfor.com.cn/download/product/sslvpn/pkg/linux_01/EasyConnect_x64.deb --build-arg EC_HOST=amd64
1 change: 1 addition & 0 deletions build-args/7.6.7-amd64.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
--build-arg EC_URL=http://download.sangfor.com.cn/download/product/sslvpn/pkg/linux_767/EasyConnect_x64_7_6_7_3.deb
1 change: 1 addition & 0 deletions build-args/7.6.7-arm64.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
--build-arg EC_URL=https://download.sangfor.com.cn/download/product/sslvpn/SSLVPN%E4%BF%A1%E5%88%9B%E5%AE%A2%E6%88%B7%E7%AB%AF/%E7%BB%9F%E4%BF%A1UOS%20%E6%B5%B7%E6%80%9D%E9%BA%92%E9%BA%9F990%20SSL%20VPN%E5%AE%A2%E6%88%B7%E7%AB%AF.zip --build-arg EC_DEB_PATH=02-升级包及安装文件/EasyConnect_UOS_arm64-20220302.deb
1 change: 1 addition & 0 deletions build-args/7.6.7-i386.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
--build-arg EC_URL=http://download.sangfor.com.cn/download/product/sslvpn/pkg/linux_767/EasyConnect_x86_7_6_7_3.deb
1 change: 1 addition & 0 deletions build-args/7.6.7-mips64le.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
--build-arg https://download.sangfor.com.cn/download/product/sslvpn/SSLVPN%E4%BF%A1%E5%88%9B%E5%AE%A2%E6%88%B7%E7%AB%AF/%E7%BB%9F%E4%BF%A1UOS%20%E9%BE%99%E8%8A%AF%20SSL%20VPN%E5%AE%A2%E6%88%B7%E7%AB%AF%EF%BC%88M767%E5%8F%8A%E4%BB%A5%E4%B8%8A%E7%89%88%E6%9C%AC%EF%BC%89.zip --build-arg EC_DEB_PATH=02-升级包及安装文件/EasyConnect_mips64.deb
1 change: 1 addition & 0 deletions build-args/7.6.7-other.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
--build-arg EC_URL=http://download.sangfor.com.cn/download/product/sslvpn/pkg/linux_767/EasyConnect_x64_7_6_7_3.deb --build-arg EC_HOST=amd64
12 changes: 4 additions & 8 deletions build-scripts/install-ec-gui.sh
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,10 @@ else
busybox unzip -p EasyConnect.zip "${EC_DEB_PATH}" > EasyConnect.deb &&
rm EasyConnect.zip
fi &&
if is_echost_foreign; then
dpkg-deb -R EasyConnect.deb / &&
/DEBIAN/postinst &&
rm -r /DEBIAN &&
extra_bins=EasyMonitor ./build-scripts/mk-qemu-wrapper.sh
else
dpkg -i EasyConnect.deb
fi &&
dpkg-deb -R EasyConnect.deb / &&
/DEBIAN/postinst &&
rm -r /DEBIAN &&
extra_bins=EasyMonitor ./build-scripts/mk-qemu-wrapper.sh
rm EasyConnect.deb &&

rm -f /usr/share/sangfor/EasyConnect/resources/conf/easy_connect.json &&
Expand Down
16 changes: 7 additions & 9 deletions doc/build.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@

- `EC_DEB_PATH`(仅适用于图形界面版): 默认为空。非空时表示 `EC_URL` 是一个 zip 包的地址(见<https://github.com/Hagb/docker-easyconnect/issues/25#issuecomment-1233369467>),而 `EC_DEB_PATH` 则是 zip 包中的 EasyConnect 的 deb 包的路径。
- `EC_HOST`: EasyConnect deb 包的架构,默认为空表示 deb 包架构与容器运行的架构一致;以 Debian 包管理器的架构名可准,可选项为:`aarch64``amd64``armel``armhf``i386``misp64el`
- `EC_URL`(仅适用于图形界面版): EasyConnect 的 deb 包下载地址(`EC_DEB_PATH` 非空时则是包含 deb 包的 zip 包下载地址),各版本的下载地址可见于 [../ec\_urls/](../ec_urls/)
- `EC_URL`(仅适用于图形界面版): EasyConnect 的 deb 包下载地址(`EC_DEB_PATH` 非空时则是包含 deb 包的 zip 包下载地址),各版本的下载地址可见于 [../build-args/](../build-args/)
- `ELECTRON_URL`(仅适用于图形界面版): [electron](https://github.com/electron/electron/releases) 的下载地址,用于在非 amd64 架构中将 EasyConnect 前端自带的 electron 替换成可原生执行的 electron(使用 qemu 时原生 electron 可以减小翻译开销;来自 EasyConnect 的 electron 在 Debian bookworm 上有段错误的现象),有一些注意事项:

- `armel``armhf``arm64``mips64el``amd64``i386` 架构无需设定该参数,构建脚本中已经预设(有特殊需要可以使用该参数覆盖预设值)
Expand Down Expand Up @@ -41,27 +41,25 @@
``` bash
git clone https://github.com/hagb/docker-easyconnect.git
cd docker-easyconnect
docker image build -f Dockerfile.build -t hagb/docker-easyconnect:build .
docker image build --tag hagb/docker-easyconnect -f Dockerfile.cli .
docker image build -f Dockerfile.build -t hagb/docker-easyconnect:build --build-arg EC_HOST=amd64 .
docker image build --tag hagb/docker-easyconnect -f Dockerfile.cli --build-arg EC_HOST=amd64 .
```

### 带 VNC 服务端

``` bash
git clone https://github.com/hagb/docker-easyconnect.git
cd docker-easyconnect
docker image build -f Dockerfile.build -t hagb/docker-easyconnect:build .
EC_VER=7.6.3 # 此变量填写 ec_urls 文件夹中的版本,`7.6.3`或`7.6.7`
docker image build --build-arg EC_URL=$(cat ec_urls/${EC_VER}.txt) --tag hagb/docker-easyconnect -f Dockerfile .
docker image build $(cat build-args/7.6.7-amd64.txt) -f Dockerfile.build -t hagb/docker-easyconnect:build .
docker image build $(cat build-args/7.6.7-amd64.txt) --tag hagb/docker-easyconnect -f Dockerfile .
```

### 使用 X11 socket 而无 VNC 服务端

``` bash
git clone https://github.com/hagb/docker-easyconnect.git
cd docker-easyconnect
docker image build -f Dockerfile.build -t hagb/docker-easyconnect:build .
EC_VER=7.6.3 # 此变量填写 ec_urls 文件夹中的版本,`7.6.3`或`7.6.7`
docker image build --build-arg EC_URL=$(cat ec_urls/${EC_VER}.txt) --tag hagb/docker-easyconnect -f Dockerfile.vncless .
docker image build $(cat build-args/7.6.7-amd64.txt) -f Dockerfile.build -t hagb/docker-easyconnect:build .
docker image build $(cat build-args/7.6.7-amd64.txt) --tag hagb/docker-easyconnect -f Dockerfile.vncless .
```

14 changes: 7 additions & 7 deletions doc/usage.md
Original file line number Diff line number Diff line change
Expand Up @@ -137,19 +137,19 @@ ip rule add iif lo table 3

### 纯命令行

下列例子可启动纯命令行的 EasyConnect `7.6.3``-e EC_VER=7.6.3`),并且退出后不会自动重启(`-e EXIT=1`)。
下列例子可启动纯命令行的 EasyConnect `7.6.7``-e EC_VER=7.6.7`),并且退出后不会自动重启(`-e EXIT=1`)。

``` bash
touch ~/.easyconn
docker run --device /dev/net/tun --cap-add NET_ADMIN -ti -v $HOME/.easyconn:/root/.easyconn -e EC_VER=7.6.3 -e EXIT=1 -p 127.0.0.1:1080:1080 hagb/docker-easyconnect:cli
docker run --device /dev/net/tun --cap-add NET_ADMIN -ti -v $HOME/.easyconn:/root/.easyconn -e EC_VER=7.6.7 -e EXIT=1 -p 127.0.0.1:1080:1080 hagb/docker-easyconnect:cli
```

### tinyproxy
下列例子可启动纯命令行的 EasyConnect `7.6.3` 并且对宿主主机提供 http 代理
下列例子可启动纯命令行的 EasyConnect `7.6.7` 并且对宿主主机提供 http 代理

``` bash
$ touch ~/.easyconn
$ docker run --device /dev/net/tun --cap-add NET_ADMIN -ti -v $HOME/.easyconn:/root/.easyconn -p 127.0.0.1:8888:8888 -e EC_VER=7.6.3 ztongxue/docker-easyconnect-tinyproxy:cli
$ docker run --device /dev/net/tun --cap-add NET_ADMIN -ti -v $HOME/.easyconn:/root/.easyconn -p 127.0.0.1:8888:8888 -e EC_VER=7.6.7 ztongxue/docker-easyconnect-tinyproxy:cli
```

程序内直接使用代理地址 127.0.0.1:8888 即可。例如在 python requests 中使用:
Expand All @@ -160,16 +160,16 @@ requests.get('https://www.hao123.com', proxies={'http': '127.0.0.1:8888'})

你也可以改成你需要宿主主机代理端口,例如你想对程序暴露的代理端口为 8118 ,只需要在启动容器的时候,指定一下端口即可。👇
```
$ docker run --device /dev/net/tun --cap-add NET_ADMIN -ti -v $HOME/.easyconn:/root/.easyconn -p 127.0.0.1:8118:8888 -e EC_VER=7.6.3 ztongxue/docker-easyconnect-tinyproxy:cli
$ docker run --device /dev/net/tun --cap-add NET_ADMIN -ti -v $HOME/.easyconn:/root/.easyconn -p 127.0.0.1:8118:8888 -e EC_VER=7.6.7 ztongxue/docker-easyconnect-tinyproxy:cli
```

### X11 socket

在当前桌面环境中启动 EasyConnect `7.6.3` 前端,并且该前端退出后不会自动重启(`-e EXIT=1`),EasyConnect 要进行浏览器弹窗时会弹出含链接的文本框(`-e URLWIN=1`)。
在当前桌面环境中启动 EasyConnect 前端,并且该前端退出后不会自动重启(`-e EXIT=1`),EasyConnect 要进行浏览器弹窗时会弹出含链接的文本框(`-e URLWIN=1`)。

``` bash
xhost +LOCAL:
docker run --device /dev/net/tun --cap-add NET_ADMIN -ti -v /tmp/.X11-unix:/tmp/.X11-unix -v $HOME/.Xauthority:/root/.Xauthority -e EXIT=1 -e DISPLAY=$DISPLAY -e URLWIN=1 -e TYPE=x11 -v $HOME/.ecdata:/root -p 127.0.0.1:1080:1080 hagb/docker-easyconnect:vncless-7.6.3
docker run --device /dev/net/tun --cap-add NET_ADMIN -ti -v /tmp/.X11-unix:/tmp/.X11-unix -v $HOME/.Xauthority:/root/.Xauthority -e EXIT=1 -e DISPLAY=$DISPLAY -e URLWIN=1 -e TYPE=x11 -v $HOME/.ecdata:/root -p 127.0.0.1:1080:1080 hagb/docker-easyconnect:vncless
xhost -LOCAL:
```

Expand Down
1 change: 0 additions & 1 deletion ec_urls/7.6.3.txt

This file was deleted.

1 change: 0 additions & 1 deletion ec_urls/7.6.7.txt

This file was deleted.

0 comments on commit 59265bf

Please sign in to comment.