# 构建说明
有三个类型的版本:
- `Dockerfile`: 带 VNC 的图形界面版
- `Dockerfile.vncless`: 不带 VNC 的图形界面版(依赖于 X11 socket)
- `Dockerfile.cli`: 纯命令行版
其中图形界面版一个镜像仅可包含一个 EasyConnect 版本,纯命令行版可包含多个 EasyConnect 版本。
## 构建参数
- `EC_HOST`: EasyConnect deb 包的架构,默认为空表示 deb 包架构与容器运行的架构一致;以 Debian 包管理器的架构名可准,可选项为:`aarch64`、`amd64`、`armel`、`armhf`、`i386`、`misp64el`。
- `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` 架构无需设定该参数,构建脚本中已经预设(有特殊需要可以使用该参数覆盖预设值)
- EasyConnect 自带的 electron 为 v1.6.7 版,为确保兼容性应只使用 v1.x.xx 的镜像
- 暂不适用于 aTrust
- `EC_763_URL`(仅适用于命令行版): `7.6.3` 版 EasyConnect 的 deb 包下载地址,默认为 `http://download.sangfor.com.cn/download/product/sslvpn/pkg/linux_01/EasyConnect_x64.deb`,将其设为空值时构建的镜像不包含 `7.6.3` 版的配置文件
- `EC_767_URL`(仅适用于命令行版): `7.6.7` 版 EasyConnect 的 deb 包下载地址,默认为 `http://download.sangfor.com.cn/download/product/sslvpn/pkg/linux_767/EasyConnect_x64_7_6_7_3.deb`,将其设为空值时构建的镜像不包含 `7.6.7` 版的配置文件
- `EC_CLI_URL`(仅适用于命令行版): [@shmilee](https://github.com/shmilee) 提供的命令行 `7.6.8` 版 deb 包的下载地址,默认为 `https://github.com/shmilee/scripts/releases/download/v0.0.1/easyconn_7.6.8.2-ubuntu_amd64.deb`
- `MIRROR_URL`: Debian 镜像站,默认为 ,设为空则使用默认镜像站
- `USE_EC_ELECTRON`(仅适用于图形界面版): 默认为空,是否使用来自 EasyConnect 的 electron,不为空时使用来自 EasyConnect 的 electron.
- `VPN_DEB_PATH`(仅适用于图形界面版): 默认为空。非空时表示 `VPN_URL` 是一个 zip 包的地址(见),而 `VPN_DEB_PATH` 则是 zip 包中的 deb 包的路径。
- `http_proxy`: 默认为空,不为空时 http 协议的连接走该代理,注意若代理 ip 为本机 `127.0.0.1` 时,需要在 build 命令后加上参数 `--network host` 。
- `https_proxy`: 同上,不为空时 https 协议走该代理。
- `CHROMIUM`: 默认为空,不为空时,将安装 chromium,用于 web 认证。
- **`VPN_TYPE`**:默认为 `EC_GUI`。构建 aTrust 镜像时,需要将该参数设为 `ATRUST`。
- **`VPN_URL`**(仅适用于图形界面版): EasyConnect 的 deb 包下载地址(`VPN_DEB_PATH` 非空时则是包含 deb 包的 zip 包下载地址),各版本的下载地址可见于 [../build-args/](../build-args/)。
### `Dockerfile.build` 构建参数
- `EC_HOST`: EasyConnect deb 包的架构,同上文
- `MIRROR_URL`: Debian 镜像站,同上文
- `http_proxy`: 同上文
- `https_proxy`: 同上文
- `TINYPROXY_COMMIT`: 构建支持 websocket 的 [tinyproxy](https://github.com/tinyproxy/tinyproxy) 的 commit.
- `NOVNC_METHOD`: 提供 noVNC 服务的方式,默认为 `min-size`,可选选项有
- `min-size`: 最小化镜像体积的方式,通过 busybox、tinyproxy 和 [C 语言版的 websockify](https://github.com/novnc/websockify-other) 来实现
- `easy-novnc`: 使用 [easy-novnc](https://github.com/pgaskin/easy-novnc),由 easy-novnc 直接提供所有所需服务
## 从 Dockerfile 构建
### 纯命令行
``` bash
git clone https://github.com/hagb/docker-easyconnect.git
cd docker-easyconnect
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 $(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 $(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 .
```
### 构建带有 chromium 的 VNC 镜像
(使用本机代理,以 aTrust 为例)
```bash
git clone https://github.com/hagb/docker-easyconnect.git
cd docker-easyconnect
docker image build --network host $(cat build-args/atrust-arm64.txt) --build-arg http_proxy=${http_proxy} --build-arg https_proxy=${https_proxy} --build-arg MIRROR_URL="http://mirrors.ustc.edu.cn/debian/" -f Dockerfile.build -t hagb/docker-easyconnect:build .
docker image build --network host $(cat build-args/atrust-arm64.txt) --build-arg http_proxy=${http_proxy} --build-arg https_proxy=${https_proxy} --build-arg CHROMIUM=1 --build-arg MIRROR_URL="http://mirrors.ustc.edu.cn/debian/" -f Dockerfile -t hagb/docker-atrust:chromium .
```