CentOS 8 安装 Apache Chainsaw 指南

在 CentOS 8(EOL 后切 vault 归档源)上安装 Apache Chainsaw 2.1.0 的完整实测指南,含 java-17 安装、alternatives 优先级陷阱、CJK 字体与无 ImageMagick 环境的图形验证方案。

Apache ChainsawApache Chainsaw2026/10/15

CentOS 8 安装 Apache Chainsaw 指南

目标:在 CentOS 8 服务器(已停止维护,使用 vault 归档源)上完成 Apache Chainsaw 2.1.0 的安装与启动验证,实测通过官方 bin 包与 standalone 独立包两种方案,并在虚拟显示环境下完成图形界面截图验证。

一、环境信息

项目值
操作系统CentOS 8(x86_64,已 EOL,使用 8.5.2111 vault 归档源)
实测服务器chainsaw-centos-01(实验专用环境)
Java 运行时java-17-openjdk 17.0.1.0.12-2.el8_5(vault AppStream 提供)
虚拟显示Xvfb(xorg-x11-server-Xvfb)
Chainsaw 版本Apache Chainsaw 2.1.0(官方当前唯一版本)
网络通过 HTTP 代理访问归档镜像

CentOS 8 于 2021-12-31 停止维护,官方源已下线,yum install 会报 Failed to download metadata for repo 'appstream' 之类的错误,因此本文第一章先处理归档源,这是 CentOS 8 安装任何软件的第一步。

二、前置条件

2.1 修复 yum 源(切换到 vault 归档仓库)

CentOS 8 的 repo 文件默认走 mirrorlist.centos.org(已失效)。实测可行的修法是把 baseurl 指向阿里云 vault 归档的 8.5.2111(CentOS 8 最后一个版本,java-17 就在这个版本库里):

sed -i -e 's|mirrorlist=|#mirrorlist=|g' \
       -e 's|^#\s*baseurl=http://mirror.centos.org/\$contentdir/\$releasever|baseurl=https://mirrors.aliyun.com/centos-vault/8.5.2111|g' \
       /etc/yum.repos.d/CentOS-*.repo
grep -E '^(baseurl|name)' /etc/yum.repos.d/CentOS-Linux-AppStream.repo

实测回显:

name=CentOS Linux 8 - AppStream
baseurl=https://mirrors.aliyun.com/centos-vault/8.5.2111/AppStream/$basearch/os/

刷新缓存确认仓库可用:

dnf makecache

实测回显(节选):

CentOS Linux 8 - AppStream                                                                                     2.4 MB/s | 9.6 MB     00:04
CentOS Linux 8 - BaseOS                                                                                        2.9 MB/s | 6.6 MB     00:02
CentOS Linux 8 - Extras                                                                                        9.6 kB/s |  10 kB     00:01
Metadata cache created.

💡 技术拓展:vault 路径里 8.5.2111 不能写成变量 $releasever(它解析为 8,vault 下没有 centos/8/ 这个物理目录,只有 8.5.2111/)。sed 直接把版本写死是官方归档迁移文档推荐的做法。

2.2 安装 Java 17

Chainsaw 2.1.0 主类字节码为 major version 53(Java 9 编译),Java 8 无法运行(实测报错见 2.4 节),最低要求 Java 9。8.5.2111 vault 中提供的最高版本是 java-17:

dnf list available 'java-17-openjdk*'

实测回显:

Last metadata expiration check: 0:02:11 ago on Wed Oct 15 06:41:05 2026.
Available Packages
java-17-openjdk.x86_64                        1:17.0.1.0.12-2.el8_5              appstream
java-17-openjdk-demo.x86_64                   1:17.0.1.0.12-2.el8_5              appstream
java-17-openjdk-devel.x86_64                  1:17.0.1.0.12-2.el8_5              appstream
java-17-openjdk-headless.x86_64               1:17.0.1.0.12-2.el8_5              appstream
java-17-openjdk-javadoc.x86_64                1:17.0.1.0.12-2.el8_5              appstream
java-17-openjdk-javadoc-zip.x86_64            1:17.0.1.0.12-2.el8_5              appstream
java-17-openjdk-src.x86_64                    1:17.0.1.0.12-2.el8_5              appstream
java-17-openjdk-static-libs.x86_64            1:17.0.1.0.12-2.el8_5              appstream

安装(devel 包提供 javap/javac,便于后续校验与调试):

dnf install -y java-17-openjdk java-17-openjdk-devel
java -version

实测回显:

openjdk version "17.0.1" 2021-10-19 LTS
OpenJDK Runtime Environment 18.9 (build 17.0.1+12-LTS-392)
OpenJDK 64-Bit Server VM 18.9 (build 17.0.1+12-LTS-392, mixed mode, sharing)

2.3 安装 Xvfb 与截图验证工具

无桌面服务器验证 Swing 界面需要虚拟显示与截图能力。实测确认 8.5.2111 vault 中 没有 ImageMagick(RHEL 8 系不内置),dnf list available ImageMagick 返回 Error: Unable to find a match: ImageMagick。可行的组合是 Xvfb + JDK 自带的 java.awt.Robot 截图(见 4.4 节):

dnf install -y xorg-x11-server-Xvfb
rpm -q xorg-x11-server-Xvfb

实测回显:

xorg-x11-server-Xvfb-1.20.11-2.el8.x86_64

另有一个极易踩坑的依赖:which 命令。CentOS 8 精简安装默认不带它,而 Chainsaw 的 bin/chainsaw 启动脚本在未设置 JAVA_HOME 时靠 which java 定位 Java,缺失时启动脚本直接报 which: command not found。安装:

dnf install -y which
which which

实测回显:

/usr/bin/which

2.4 Java 8 不兼容说明(实测)

用系统里因依赖关系被带入的 java-1.8.0-openjdk 直接启动 Chainsaw,实测报错:

Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.UnsupportedClassVersionError: org/apache/log4j/chainsaw/LogUI has been compiled by a more recent version of the Java Runtime (class file version 53.0), this version of the Java Runtime only recognizes class file versions up to 52.0
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:756)

结论:CentOS 8 上必须用 java-17(或其它 ≥ Java 9 的运行时),Java 8 直接不可用。

三、版本选型

与 Ubuntu 篇一致的结论(此处为实测复核):

  • 官方下载目录 https://downloads.apache.org/logging/chainsaw/ 下当前只有 2.1.0/ 一个版本目录,Chainsaw 2.1.0 是官方在维护的唯一版本(发布于 2021-06-12,项目处于低维护状态);
  • Maven Central 检索 chainsaw 无结果(search.maven.org/solrsearch/select?q=chainsaw 返回空),没有 Maven 坐标,只能下载发行包;
  • 可选包两枚:apache-chainsaw-2.1.0-bin.tar.gz(6267376 字节,含源码与离线站点文档)与 apache-chainsaw-2.1.0-standalone.tar.gz(2946786 字节,自带启动脚本,推荐日常使用);
  • 每个包都有 .sha512 与 .asc 校验文件,生产环境建议同时做哈希与 GPG 签名验证。

四、方案A:安装官方 bin 包(完整发行版)

4.1 下载与校验

mkdir -p /root/chainsaw-dl && cd /root/chainsaw-dl
curl -O https://downloads.apache.org/logging/chainsaw/2.1.0/apache-chainsaw-2.1.0-bin.tar.gz
curl -O https://downloads.apache.org/logging/chainsaw/2.1.0/apache-chainsaw-2.1.0-bin.tar.gz.sha512
cat apache-chainsaw-2.1.0-bin.tar.gz.sha512
sha512sum apache-chainsaw-2.1.0-bin.tar.gz

实测回显:

1f8b466fb9014bcb049c71d964457ecbfc2221bda1aed42058c8dfe94fb8b9dc4591fefe24440e46183629660d87b461a59b7412a9855ea82907c44dd188ae91  apache-chainsaw-2.1.0-bin.tar.gz
1f8b466fb9014bcb049c71d964457ecbfc2221bda1aed42058c8dfe94fb8b9dc4591fefe24440e46183629660d87b461a59b7412a9855ea82907c44dd188ae91  apache-chainsaw-2.1.0-bin.tar.gz

哈希一致,校验通过。

4.2 解压安装

cd /root/chainsaw-dl
tar xzf apache-chainsaw-2.1.0-bin.tar.gz -C /opt/
ls /opt/apache-chainsaw-2.1.0/

实测回显:

apache-chainsaw-2.1.0.jar    build.xml        jmdns-3.4.1.jar           log4j-1.2.16.jar      site
apache-log4j-extras-1.1.jar  commons-vfs-1.0.jar  jsch-0.1.55.jar       pom.xml               src
commons-logging-1.1.1.jar    LICENSE          xmlpull-1.1.3.1.jar       xpp3_min-1.1.4c.jar
NOTICE                       xstream-1.4.11.1.jar

bin 包无启动脚本,10 个 jar 平铺在根目录,site/ 为离线站点文档(含 quicktour.html),src/ 为完整源码。

4.3 启动脚本封装(含 Java 17 add-opens)

bin 包主类为 org.apache.log4j.chainsaw.LogUI。Java 17 下必须追加 --add-opens(XStream 1.4.11.1 反射需要,缺一项就可能在启动期抛 InaccessibleObjectException 退出),封装为 /usr/local/bin/chainsaw-bin:

cat > /usr/local/bin/chainsaw-bin <<'EOF'
#!/bin/bash
# Apache Chainsaw 2.1.0 bin 包启动脚本(Java 17 需 add-opens)
BASE=/opt/apache-chainsaw-2.1.0
CP=$(ls $BASE/*.jar | tr '\n' ':' | sed 's/:$//')
exec java \
  --add-opens java.base/java.util=ALL-UNNAMED \
  --add-opens java.base/java.lang=ALL-UNNAMED \
  --add-opens java.base/java.io=ALL-UNNAMED \
  --add-opens java.base/java.text=ALL-UNNAMED \
  --add-opens java.base/java.time=ALL-UNNAMED \
  --add-opens java.base/java.math=ALL-UNNAMED \
  --add-opens java.base/java.net=ALL-UNNAMED \
  --add-opens java.base/java.lang.reflect=ALL-UNNAMED \
  --add-opens java.base/java.util.concurrent=ALL-UNNAMED \
  --add-opens java.desktop/java.awt=ALL-UNNAMED \
  --add-opens java.desktop/java.awt.font=ALL-UNNAMED \
  -cp "$CP" org.apache.log4j.chainsaw.LogUI "$@"
EOF
chmod +x /usr/local/bin/chainsaw-bin

4.4 无显示环境启动验证(Xvfb + java.awt.Robot 截图)

准备演示日志与接收器配置(与 Ubuntu 篇相同的文件,fileURL 指向本机路径):

mkdir -p /root/chainsaw-demo
cat > /root/chainsaw-demo/app.log <<'EOF'
2026-10-15 10:00:00,001 INFO  [com.example.service.UserService] 用户登录成功 userId=1001 ip=192.168.10.25
2026-10-15 10:00:02,417 WARN  [com.example.service.UserService] 登录重试次数达到阈值 userId=1002 retries=5
2026-10-15 10:00:05,090 ERROR [com.example.dao.UserDao] 查询用户失败: connection timeout after 3000ms
2026-10-15 10:00:07,552 DEBUG [com.example.dao.UserDao] SELECT * FROM t_user WHERE id=1001
2026-10-15 10:00:09,878 INFO  [com.example.web.OrderController] 订单提交成功 orderId=202610159876
2026-10-15 10:00:11,204 ERROR [com.example.web.OrderController] 提交订单异常
java.sql.SQLException: Connection refused
	at com.example.dao.UserDao.query(UserDao.java:88)
	at com.example.web.OrderController.submit(OrderController.java:41)
EOF
cat > /root/chainsaw-demo/chainsaw-gui-config.xml <<'EOF'
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
  <plugin name="demoApp" class="org.apache.log4j.varia.LogFilePatternReceiver">
    <param name="logFormat" value="TIMESTAMP LEVEL [LOGGER] MESSAGE"/>
    <param name="timestampFormat" value="yyyy-MM-dd HH:mm:ss,SSS"/>
    <param name="fileURL" value="file:///root/chainsaw-demo/app.log"/>
    <param name="tailing" value="true"/>
  </plugin>
</log4j:configuration>
EOF

由于 vault 中没有 ImageMagick,截屏用一段 15 行的 Java 小程序(调用 java.awt.Robot 抓取整屏,JDK 自带能力):

cat > /root/chainsaw-demo/Screenshot.java <<'EOF'
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;

public class Screenshot {
    public static void main(String[] args) throws Exception {
        Rectangle screen = new Rectangle(Toolkit.getDefaultToolkit().getScreenSize());
        BufferedImage img = new Robot().createScreenCapture(screen);
        ImageIO.write(img, "png", new File(args[0]));
        System.out.println("saved " + args[0] + " " + img.getWidth() + "x" + img.getHeight());
    }
}
EOF
cd /root/chainsaw-demo && javac Screenshot.java

启动并截图:

Xvfb :99 -screen 0 1280x1024x24 >/tmp/xvfb.log 2>&1 &
sleep 2
export DISPLAY=:99
chainsaw-bin file:///root/chainsaw-demo/chainsaw-gui-config.xml >/tmp/chainsaw-run.log 2>&1 &
sleep 40
ps aux | grep 'chainsaw[.]LogUI' | grep -v grep | wc -l
cd /root/chainsaw-demo && java -cp . Screenshot /root/chainsaw-demo/centos-shot1.png

实测回显:

1
saved /root/chainsaw-demo/centos-shot1.png 1280x1024

进程存活、截图 1280x1024。首屏截图中事件表 6 行数据、颜色规则(WARN 黄底/ERROR 红底)均已生效,但中文显示为方块——这是缺少 CJK 字体所致(截图证据 /tmp/commons-batch1-b2/chainsaw/centos-shot1-main.png),处理方法见第五章 5.4 节。

💡 技术拓展:Robot.createScreenCapture 抓的是当前 DISPLAY 的整屏位图,等价于 ImageMagick 的 import -window root。在只有 JDK 没有 X11 截图工具的服务器上,这是最省依赖的 GUI 验证手段;配合 Xvfb 的 -screen 0 1280x1024x24,24 位色深可保证 Swing 渲染颜色正确。

五、方案B:安装 standalone 独立包(推荐)

5.1 下载与校验

cd /root/chainsaw-dl
curl -O https://downloads.apache.org/logging/chainsaw/2.1.0/apache-chainsaw-2.1.0-standalone.tar.gz
curl -O https://downloads.apache.org/logging/chainsaw/2.1.0/apache-chainsaw-2.1.0-standalone.tar.gz.sha512
cat apache-chainsaw-2.1.0-standalone.tar.gz.sha512
sha512sum apache-chainsaw-2.1.0-standalone.tar.gz

实测回显:

1e2131c9e490551b5ec2ed4a9f9885bb28791b8f28585b6d70285e68985238da1c166cb84aac4a9b9d9acfa72e184b268bd1540875aad3de525a65acaf4ef926  apache-chainsaw-2.1.0-standalone.tar.gz
1e2131c9e490551b5ec2ed4a9f9885bb28791b8f28585b6d70285e68985238da1c166cb84aac4a9b9d9acfa72e184b268bd1540875aad3de525a65acaf4ef926  apache-chainsaw-2.1.0-standalone.tar.gz

校验一致。

5.2 解压与目录结构

tar xzf apache-chainsaw-2.1.0-standalone.tar.gz -C /opt/
find /opt/apache-chainsaw-2.1.0 -maxdepth 2 | sort

实测回显(standalone 包共 12 个文件):

/opt/apache-chainsaw-2.1.0
/opt/apache-chainsaw-2.1.0/bin
/opt/apache-chainsaw-2.1.0/bin/chainsaw
/opt/apache-chainsaw-2.1.0/bin/chainsaw.bat
/opt/apache-chainsaw-2.1.0/repo
/opt/apache-chainsaw-2.1.0/repo/com
/opt/apache-chainsaw-2.1.0/repo/commons-logging
/opt/apache-chainsaw-2.1.0/repo/commons-vfs
/opt/apache-chainsaw-2.1.0/repo/javax
/opt/apache-chainsaw-2.1.0/repo/log4j
/opt/apache-chainsaw-2.1.0/repo/xmlpull
/opt/apache-chainsaw-2.1.0/repo/xpp3

依赖 jar 按 Maven 坐标放在 repo/(repo/log4j/ 内为 apache-chainsaw、apache-log4j-extras、log4j),bin/chainsaw 为官方启动脚本。脚本优先使用 $JAVA_HOME/bin/java,否则回退 which java;JAVA_OPTS 环境变量原样透传给 JVM——Java 17 的 --add-opens 无需改脚本即可注入。

5.3 启动验证(Java 17 + JAVA_OPTS)

export DISPLAY=:99
export JAVA_OPTS='--add-opens java.base/java.util=ALL-UNNAMED --add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.io=ALL-UNNAMED --add-opens java.base/java.text=ALL-UNNAMED --add-opens java.base/java.time=ALL-UNNAMED --add-opens java.base/java.math=ALL-UNNAMED --add-opens java.base/java.net=ALL-UNNAMED --add-opens java.base/java.lang.reflect=ALL-UNNAMED --add-opens java.base/java.util.concurrent=ALL-UNNAMED --add-opens java.desktop/java.awt=ALL-UNNAMED --add-opens java.desktop/java.awt.font=ALL-UNNAMED'
/opt/apache-chainsaw-2.1.0/bin/chainsaw file:///root/chainsaw-demo/chainsaw-gui-config.xml >/tmp/chainsaw-run.log 2>&1 &
sleep 40
ps aux | grep 'chainsaw[.]LogUI' | grep -v grep | wc -l
cd /root/chainsaw-demo && java -cp . Screenshot /root/chainsaw-demo/centos-shot2.png

实测回显:

1
saved /root/chainsaw-demo/centos-shot2.png 1280x1024

截图证据 /tmp/commons-batch1-b2/chainsaw/centos-shot2-cjk.png(装 CJK 字体后,中文正常)。随后向 app.log 追加 3 行日志,约 8 秒后再次截图:

cat >> /root/chainsaw-demo/app.log <<'EOF'
2026-10-15 10:05:21,330 WARN  [com.example.service.AuthService] 密码连续错误锁定账号 userId=1007
2026-10-15 10:05:24,871 ERROR [com.example.service.AuthService] 鉴权服务调用 LDAP 超时 elapsed=5000ms
2026-10-15 10:05:27,118 INFO  [com.example.service.AuthService] 账号解锁成功 userId=1007
EOF
sleep 8
cd /root/chainsaw-demo && java -cp . Screenshot /root/chainsaw-demo/centos-shot3.png

截图证据 /tmp/commons-batch1-b2/chainsaw/centos-shot3-tailing.png:事件表实时从 6 行增长到 9 行,状态栏显示 Filtered/Total: 9:9,tailing 接收器实时追尾验证通过。

5.4 中文字体补装(避免界面方块)

CentOS 8 精简环境没有 CJK 字体,Swing 回退到不含汉字的字形导致方块。实测安装 Noto CJK 字体并刷新字体缓存:

dnf install -y google-noto-sans-cjk-ttc-fonts
rpm -q google-noto-sans-cjk-ttc-fonts
fc-cache -f

实测回显:

google-noto-sans-cjk-ttc-fonts-20190416-1.el8.noarch

重启 Chainsaw 后中文正常渲染(对比截图:centos-shot1-main.png 为装字体前方块状态,centos-shot2-cjk.png 为装字体后正常状态)。

六、方案对比

维度方案A:bin 包方案B:standalone 包
包大小6267376 字节(约 6.0 MB)2946786 字节(约 2.8 MB)
启动脚本无,自建 /usr/local/bin/chainsaw-bin有(bin/chainsaw)
jar 组织方式10 个 jar 平铺在根目录按 Maven 坐标存放在 repo/
附带源码与站点文档有(src/、site/、pom.xml、build.xml)无
Java 17 add-opens 注入方式写在自建脚本里写在 JAVA_OPTS 环境变量里
实测启动结果通过(Xvfb 截图验证)通过(Xvfb 截图验证)
适用场景二次开发、离线查文档日常安装使用(推荐)

两包内 Chainsaw 与依赖 jar 版本完全一致,仅打包布局不同。

七、配置说明

7.1 alternatives 优先级陷阱(CentOS 8 特有,实测踩坑)

安装过程中系统因依赖关系同时存在 java-1.8.0-openjdk 与 java-17-openjdk 时,/usr/bin/java 由 alternatives auto 模式决定指向,而两个包的 alternatives 优先级相差悬殊:

alternatives --display java | head -3

实测回显:

java - status is auto.
 link currently points to /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.312.b07-2.el8_5.x86_64/jre/bin/java
/usr/lib/jvm/java-17-openjdk-17.0.1.0.12-2.el8_5.x86_64/bin/java - family java-17-openjdk.x86_64 priority 1

java-8 的优先级(18000312 量级)远高于 java-17 的 priority 1,auto 模式选中 java-8。此时启动 Chainsaw 会看到两个连锁报错:

Unrecognized option: --add-opens
Error: Could not create the Java Virtual Machine.

(Java 8 不认识 --add-opens,且后续必然还有 UnsupportedClassVersionError。)显式固定系统 Java:

alternatives --set java /usr/lib/jvm/java-17-openjdk-17.0.1.0.12-2.el8_5.x86_64/bin/java
java -version

实测回显:

openjdk version "17.0.1" 2021-10-19 LTS

javac 链接同理:alternatives --set javac /usr/lib/jvm/java-17-openjdk-17.0.1.0.12-2.el8_5.x86_64/bin/javac。更稳妥的做法是不依赖系统默认 java,直接为 Chainsaw 指定 JAVA_HOME:

export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-17.0.1.0.12-2.el8_5.x86_64
/opt/apache-chainsaw-2.1.0/bin/chainsaw file:///root/chainsaw-demo/chainsaw-gui-config.xml

7.2 命令行配置 URL 与 ~/.chainsaw/

与 Ubuntu 篇一致:LogUI.main 将第一个命令行参数解析为 log4j 配置 URL 并执行 DOMConfigurator.configure(),其中 <plugin> 元素注册为接收器,实现"启动即加载日志"。7.3 节配置文件模板直接可用。菜单正常退出(File → Exit)后配置写入 $HOME/.chainsaw/(receiver-config.xml、chainsaw.settings.properties、Default.colors 等),直接 kill 进程不落盘。

7.3 JAVA_HOME 探查

readlink -f /usr/bin/java

实测回显(alternatives 固定后):

/usr/lib/jvm/java-17-openjdk-17.0.1.0.12-2.el8_5.x86_64/bin/java

八、常见问题(FAQ)

Q1:dnf makecache 报 Failed to download metadata for repo 'appstream'? 源未切 vault。按 2.1 节 sed 命令处理,注意 baseurl 必须写死 8.5.2111 而不是 $releasever。

Q2:启动脚本报 which: command not found? CentOS 8 精简环境缺 which。dnf install -y which,或 export JAVA_HOME=... 绕过脚本内 which java 的回退逻辑(推荐)。

Q3:报 Unrecognized option: --add-opens? 实际执行的 java 是 Java 8(见 7.1 alternatives 陷阱)。alternatives --set java ... 固定到 17,或在启动前 export JAVA_HOME。

Q4:报 InaccessibleObjectException: ... does not "opens java.util"? Java 17 强封装与 XStream 反射冲突,按 4.3/5.3 的 11 项 --add-opens 配齐。

Q5:界面中文是方块? 缺 CJK 字体,dnf install -y google-noto-sans-cjk-ttc-fonts && fc-cache -f 后重启(实测前后截图见 5.4)。

Q6:想用 ImageMagick 截屏验证界面,装不上? 8.5.2111 vault 确认无 ImageMagick(dnf list available ImageMagick 报 Unable to find a match),xorg-x11-apps(xwd)同样不在。用 4.4 节的 java.awt.Robot 方案替代,零额外依赖。

Q7:Java 8 能跑吗? 不能,major version 53 vs 52(实测报错见 2.4)。

九、卸载与清理

# 1. 结束进程
pkill -f 'org.apache.log4j.chainsaw.LogUI'

# 2. 删除安装目录与自建脚本
rm -rf /opt/apache-chainsaw-2.1.0
rm -f /usr/local/bin/chainsaw-bin

# 3. 删除用户级配置与演示文件(按需)
rm -rf ~/.chainsaw
rm -rf /root/chainsaw-dl /root/chainsaw-demo

# 4. 移除软件包(仅当服务器上无其他 Java 应用依赖时执行)
dnf remove -y java-17-openjdk java-17-openjdk-devel xorg-x11-server-Xvfb google-noto-sans-cjk-ttc-fonts

清理后确认:ls /opt/apache-chainsaw-2.1.0 提示目录不存在、rpm -q java-17-openjdk 无输出即可。

十、参考链接