在 Mac 下编译 chaosblade
首先声明,这不是一份指南,这是一份失败的操作流水记录。我得到的最终结果:编译成功,但是无法运行,放弃在 Mac 平台直接使用此工具,乖乖用 Linux 或者容器环境。
以下问题的遇到和解决记录,基本是按时间序。
chaosblade 项目的 README 上自行编译部分 说明很简单,就是 make build_darwin
这么一条命令而已。
环境准备
安装 go,https://go.dev/ 下载最新版安装,我安装的是 1.17.7 版本,然后将 /usr/local/go/bin 添加到 PATH。
安装和配置 JAVA 环境。(我以前装过,本次先没动它,但实际后面也遇到问题与此相关。)
安装 Docker Desktop。
下载源码,开始编译
1 | git clone git@github.com:chaosblade-io/chaosblade.git |
然后,兵来将挡,水来土掩的问题解决之旅开始了。
遇到问题,解决问题
0x01 网络问题
编译过程中需要下载一些源码和二进制文件,首先遇到了网络问题。
如果遇到 timeout
或者 fatal: 无法访问 'xxxx':LibreSSL SSL_connect: Operation timed out in connection to xxx.com:443
之类的提示,一般是因为有一些资源偶尔需要科学上网才能访问。
解决方法:
终端挂代理:
1 | export http_proxy=http://127.0.0.1:54107 |
其中代理自备,no_proxy
那一行是指定从阿里域名下载不走代理。
如果遇到下载 https://chaosblade.oss-cn-hangzhou.aliyuncs.com/agent/github/sandbox/sandbox-1.3.1-bin.zip 特别慢,几 kb/s 的速度,但是用浏览器下载很快,那可以先停掉编译,直接用浏览器下载好该文件,放到 target/cache/chaosblade-exec-jvm/build-target/cache 下面,再重新开始编译。
同理:
如果遇到下载 https://chaosblade.oss-cn-hangzhou.aliyuncs.com/agent/release/tools.jar 特别慢,可以先停掉编译,直接用浏览器下载好该文件,放到 target/cache/chaosblade-exec-jvm/build-target/cache 下面,再重新开始编译。
例外是如果遇到下载 https://chaosblade.oss-cn-hangzhou.aliyuncs.com/agent/github/1.5.0/chaosblade-1.5.0-linux-amd64.tar.gz 特别慢,手动下载,放到 target/cache/chaosblade-operator/build/cache 也不行,编译过程只认自己下载的。
由以上得出的小技巧:
如果从 GitHub release 界面下载 chaosblade 的 release 文件特别慢,比如 https://github.com/chaosblade-io/chaosblade/releases/download/v1.3.0/chaosblade-1.3.0-darwin-amd64.tar.gz,可以将链接替换为 https://chaosblade.oss-cn-hangzhou.aliyuncs.com/agent/github/1.3.0/chaosblade-1.3.0-darwin-amd64.tar.gz 加速下载。
0x02 go 依赖模块问题
如果遇到
1 | exec/model.go:22:2: missing go.sum entry for module providing package github.com/chaosblade-io/chaosblade-exec-os/exec (imported by github.com/chaosblade-io/chaosblade-exec-docker/exec); to add: |
到 target/cache/chaosblade-exec-docker 和 target/cache/chaosblade-exec-os 目录下执行
1 | go mod tidy |
0x03 Java 编译问题
如果遇到报错:
1 | [ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project chaosblade-exec-spi: Compilation failure: Compilation failure: |
修改 target/cache/chaosblade-exec-jvm/chaosblade-exec-spi/pom.xml 里的
1 | <configuration> |
为
1 | <configuration> |
同理,后面还会遇到类似的报错,对应还要修改:
- target/cache/chaosblade-exec-jvm/chaosblade-exec-common/pom.xml
- target/cache/chaosblade-exec-jvm/chaosblade-exec-service/pom.xml
- target/cache/chaosblade-exec-jvm/chaosblade-exec-bootstrap/chaosblade-exec-bootstrap-jvmsandbox/pom.xml
- target/cache/chaosblade-exec-jvm/chaosblade-exec-plugin/chaosblade-exec-plugin-dubbo/pom.xml
- target/cache/chaosblade-exec-jvm/chaosblade-exec-plugin/chaosblade-exec-plugin-jvm/pom.xml
- target/cache/chaosblade-exec-jvm/chaosblade-exec-plugin/chaosblade-exec-plugin-mysql/pom.xml
- target/cache/chaosblade-exec-jvm/chaosblade-exec-plugin/chaosblade-exec-plugin-postgrelsql/pom.xml
- target/cache/chaosblade-exec-jvm/chaosblade-exec-plugin/chaosblade-exec-plugin-servlet/pom.xml
- target/cache/chaosblade-exec-jvm/chaosblade-exec-plugin/chaosblade-exec-plugin-jedis/pom.xml
- target/cache/chaosblade-exec-jvm/chaosblade-exec-plugin/chaosblade-exec-plugin-elasticsearch/pom.xml
- target/cache/chaosblade-exec-jvm/chaosblade-exec-plugin/chaosblade-exec-plugin-hbase/pom.xml
另外:
- target/cache/chaosblade-exec-jvm/chaosblade-exec-plugin/pom.xml
- target/cache/chaosblade-exec-jvm/chaosblade-exec-plugin/chaosblade-exec-plugin-dubbo/pom.xml(存疑)
- target/cache/chaosblade-exec-jvm/chaosblade-exec-plugin/chaosblade-exec-plugin-http/pom.xml(存疑)
里是需要添加
1 | <build> |
如果遇到
1 | [ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project chaosblade-exec-plugin-redisson: Compilation failure |
修改 target/cache/chaosblade-exec-jvm/chaosblade-exec-plugin/chaosblade-exec-plugin-redisson/src/main/java/com/alibaba/chaosblade/exec/plugin/redisson/RedissonEnhancer.java
1 | LOGGER.info("method command {}", ReflectUtil.invokeMethod(command, "getName", new Object[0], false)); |
改成
1 | Object tmpResult = ReflectUtil.invokeMethod(command, "getName", new Object[0], false); |
如果遇到
1 | [ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project chaosblade-exec-common: Fatal error compiling: java.lang.IllegalAccessError: class lombok.javac.apt.LombokProcessor (in unnamed module @0x45da40ad) cannot access class com.sun.tools.javac.processing.JavacProcessingEnvironment (in module jdk.compiler) because module jdk.compiler does not export com.sun.tools.javac.processing to unnamed module @0x45da40ad -> [Help 1] |
将 target/cache/chaosblade-exec-jvm/chaosblade-exec-common/pom.xml
lombok 版本由 1.18.10 改为 1.18.20,参考 https://www.cnblogs.com/ZZG-GANGAN/p/14789050.html
如果遇到
1 | The JAVA_HOME environment variable is not defined correctly, |
那配置 JAVA_HOME:
1 | /usr/libexec/java_home -V |
0x04 Docker 问题
如果遇到
1 | docker: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?. |
启动 Docker Desktop,然后再开始编译。
0x0x 未知
编码过程中有个警告,不知道有无影响:
1 | WARN[0000] parse java spec failed, so skip it, open build/cache/chaosblade/yaml/chaosblade-jvm-spec-1.5.0.yaml: no such file or directory |
结果
终于编译成功了,生成了 target/chaosblade-1.5.0.tar.gz 文件。
但解压后执行 ./blade
,输出:
1 | zsh: killed ./blade |
下载官方 Release 的 1.3.0 的 darwin 版本文件,也是报同样的问题。
到 Issues 里翻到了几个类似的问题,官方给出的 建议,比如修改系统【安全与隐私】-【通用】配置等,经验证都无效。
至此,如文首所述,放弃了在 Mac 平台下折腾,直接用 Linux 或者容器环境来体验。