CentOS 8 安装 Apache Gump 指南

在 CentOS 8 上从零安装 Apache Gump live r1939132,覆盖 EOL 后 vault 仓库修复、Python 3.6.8 依赖链、python 命令软链修复、SVN 源码获取、官方校验与单测实测、JDK 环境与 bin/env.py 探测,并如实记录与 Ubuntu 的全部差异点,命令回显实测通过。

Apache GumpApache Gump2026/10/15

CentOS 8 安装 Apache Gump 指南

目标:在 CentOS 8 上从零搭好 Apache Gump live r1939132 的元数据 CI 环境(Python 3.6 + SVN 源码 + xmllint/xsltproc 校验链 + JDK),跑通官方 ./gump help、./gump validate、./gump test 与 bin/env.py 验证,并记录 CentOS 8 相比 Ubuntu 的全部实测差异(EOL 仓库修复、python 命令缺失、Python 3.6 兼容性);本文全部命令与回显均已在 CentOS 8 实测通过。

CentOS Linux 8 已于 2021-12-31 停止维护(EOL),其官方软件源 mirror.centos.org 已下线、vault.centos.org 对部分网络环境返回 403,因此本篇先修复软件源再装依赖。Gump 本体对系统发行版不敏感(纯 Python + 源码检出),真正影响安装的是:Python 版本(CentOS 8 提供 3.6.8,低于 Ubuntu 22.04 的 3.10.12)、无版本号的 python 命令是否存在、以及 JDK 路径的确定方式。本篇与第 1 篇《Ubuntu 22.04 安装 Apache Gump 指南》结构对应,相同部分从简,差异部分展开。

一、环境信息

本节固定可复现的基线环境。CentOS 8 的包版本整体偏老,下表是实测装到的版本,后续命令回显均基于此。

  • 操作系统:CentOS Linux 8(PRETTY_NAME="CentOS Linux 8",VERSION_ID="8")
  • 架构:x86_64
  • Python:3.6.8(yum 包 python3,/usr/bin/python3)
  • SVN:1.10.2(yum 包 subversion)
  • XML 校验:libxml2 2.9.7、libxslt 1.1.32(yum 包 libxml2、libxslt,xmllint/xsltproc 由 libxml2 提供)
  • Git:2.27.0(yum 包 git)
  • JDK:java-11-openjdk 11.0.13(yum 包 java-11-openjdk-headless + java-11-openjdk-devel)
  • RDF 库:未安装(CentOS 8 vault 源无 python3-rdflib 包,实测影响见 5.4 节)
  • 组件版本:Apache Gump live,SVN 版本 r1939132(与 Ubuntu 篇同一实测快照)
  • 源码目录:/root/gump

系统确认(实时回显):

cat /etc/os-release | head -2
NAME="CentOS Linux"
VERSION="8"
uname -m
x86_64

二、前置条件

CentOS 8 的前置条件比 Ubuntu 多一条「软件源必须先修复」——这是本篇最重要的差异。

  1. 具有 root 权限的 CentOS 8 系统。
  2. 软件源可用:默认源指向 mirror.centos.org(已下线),必须改用 vault 镜像(见 4.2 节)。
  3. 可访问 svn.apache.org(检出源码)与所选 vault 镜像站。
  4. 至少 1 GB 可用磁盘空间。

源状态实测(修复前的真实回显):

curl -sI --max-time 15 http://mirror.centos.org/centos/8/os/x86_64/repodata/repomd.xml -o /dev/null -w "mirror.centos.org=%{http_code}\n"
curl -sI --max-time 15 https://vault.centos.org/8.5.2111/os/x86_64/repodata/repomd.xml -o /dev/null -w "vault.centos.org=%{http_code}\n"
mirror.centos.org=404
vault.centos.org=403

💡 技术拓展:CentOS 8 EOL 后的 yum 源选择实测对比——

源实测状态说明
mirror.centos.orgHTTP 404官方源已下线,repodata 不存在
vault.centos.orgHTTP 403官方归档对部分地区/网段拒绝
mirrors.aliyun.com/centos-vault/HTTP 200(需用 8.x 新布局路径)本文采用
mirrors.tuna.tsinghua.edu.cn/centos-vault/HTTP 200备选,路径结构与阿里云一致

关键点:CentOS 8 的 vault 仓库采用 BaseOS/AppStream 新布局(而非 CentOS 6/7 的 os/updates/extras 布局),正确路径形如 /centos-vault/8.5.2111/BaseOS/x86_64/os/;沿用老布局的 os/ 路径实测 404。本文采用阿里云 vault 源。

三、版本选型说明

Gump 版本形态与第 1 篇 3.1/3.2 节完全一致:唯一官方渠道是 Apache SVN 的 live 主干,GitHub 地址实测 404。本篇不再重复,只补充一点:同一份源码(r1939132)在 CentOS 8 与 Ubuntu 22.04 上的校验、单测结果完全一致(见 4.5/4.6 节),差异全部来自系统 Python 与包生态,不来自 Gump 本身。

确认检出版本(实时回显):

cd /root/gump && svn info | grep -E "Revision|URL"
URL: https://svn.apache.org/repos/asf/gump/live
Relative URL: ^/gump/live
Revision: 1939132

四、方案 A:修复 yum 源 + SVN 检出 + 校验链(基础环境,必做)

4.1 方案说明

链路是:把 /etc/yum.repos.d/ 指向阿里云 vault 的 BaseOS/AppStream 布局 → 安装 python3/subversion/libxml2 等依赖 → svn checkout 源码 → 跑通 help/validate/test。CentOS 特有的坑有两个:python 命令不存在(4.6 节)与 Python 3.6 的兼容性(4.7 节)。

4.2 修复 yum 源到 vault

先备份旧 repo 文件,再写入 vault 配置:

cd /etc/yum.repos.d
mkdir -p bak
mv CentOS-Linux-*.repo bak/

/etc/yum.repos.d/centos-vault.repo 全文(直接照抄):

[BaseOS-vault]
name=CentOS-8.5.2111 - BaseOS
baseurl=http://mirrors.aliyun.com/centos-vault/8.5.2111/BaseOS/x86_64/os/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
enabled=1

[AppStream-vault]
name=CentOS-8.5.2111 - AppStream
baseurl=http://mirrors.aliyun.com/centos-vault/8.5.2111/AppStream/x86_64/os/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
enabled=1

重建缓存验证源可用:

yum makecache
CentOS-8.5.2111 - BaseOS                       1.4 MB/s | 4.6 MB     00:03
CentOS-8.5.2111 - AppStream                    690 kB/s | 8.4 MB     00:12
Metadata cache created.

验证点:Metadata cache created. 且无 Errors during downloading metadata,说明 vault 源工作正常。若报 404,优先检查 baseurl 是否用了 BaseOS/x86_64/os/ 新布局路径。

4.3 安装基础依赖

yum install -y python3 subversion libxml2 libxslt curl git which
# 输出节选(实测首尾)
Installed:
  python3-3.6.8-41.module_el8.5.0+895+a459eca8.x86_64
  subversion-1.10.2-4.module_el8.5.0+773+34023c71.x86_64
  libxml2-2.9.7-9.el8_4.2.x86_64
  libxslt-1.1.32-6.el8.x86_64
  git-2.27.0-1.el8.x86_64
Complete!

确认版本(注意与 Ubuntu 的差异:Python 3.6.8 vs 3.10.12、SVN 1.10.2 vs 1.14.1):

python3 --version; svn --version --quiet; git --version; xmllint --version 2>&1 | head -1
Python 3.6.8
1.10.2
git version 2.27.0
xmllint: using libxml version 20907

4.4 SVN 检出源码

cd /root
svn checkout https://svn.apache.org/repos/asf/gump/live gump
取出版本 1939132。

验证点:Revision 1939132,ls /root/gump 能看到 gump、python、metadata、bin、cron 等目录(与第 1 篇 4.3 节清单一致)。

4.5 首次运行验证:./gump help

cd /root/gump && ./gump help

     _____
    |   __|_ Apache_ ___
    |  |  | | |     | . |
    |_____|___|_|_|_|  _|
                    |_|

      Usage:
        ./gump command [opts ...]

      Available commands are:

        run -- run Gumpy
        test -- run Gumpy its unit tests
        validate -- validate the metadata
        site -- use Apache Forrest to build the documentation
        site-publish -- use SVN and SSH to publish the site to the website
    help -- print this information

      Run

        ./gump help [command]

      for more information about a particular command.

与 Ubuntu 输出逐字一致——包装脚本是 Bash,不受 Python 版本影响。

4.6 元数据校验与单元测试(含 python 命令坑)

元数据校验与 Ubuntu 实测结果逐字一致(同样的两处官方元数据既有报错,非安装问题):

export GUMP_HOME=/root/gump
./gump validate 2>&1 | tail -8
 ======== Processing Repositories ============
 ======== Processing Profiles ============
 ======== Processing Local Projects ============
./tmp/./project/easymock.xml:30: element mvn3install: validity error : No declaration for attribute allowPropertyReferenceInVersion of element mvn3install
    <mvn3install allowPropertyReferenceInVersion="true"/>
                                                       ^
./tmp/./project/junit.xml:48: element mvn3: validity error : Element mvn3 content does not follow the DTD, expecting (property | depend | jvmarg)*, got (sysproperty )
    </mvn3>
           ^
 ======== Processing External Projects ============

单元测试首次执行实测失败——CentOS 8 默认只有 python3,没有 python 命令,而 ./gump test 的包装函数 check_env "python" 找的是无版本号命令:

./gump test; echo "EXIT=$?"
Cannot find python. Please retrieve it from

     http://www.python.org/

and install it.
EXIT=1

修复:创建软链(CentOS 8 的 vault 源实测无提供 /usr/bin/python 的包,yum provides /usr/bin/python 无结果,软链是标准做法):

ln -sf /usr/bin/python3 /usr/local/bin/python
which python && python --version
/usr/local/bin/python
Python 3.6.8

重跑单测:

./gump test 2>&1 | tail -10
testEnsureThisHostIsInDatabase (testDynagumper.DynagumperTestCase) ... ok
testProcessModule (testDynagumper.DynagumperTestCase) ... ok
testProcessOtherEvent (testDynagumper.DynagumperTestCase) ... ok
testProcessProject (testDynagumper.DynagumperTestCase) ... ok
testProcessWorkSpace (testDynagumper.DynagumperTestCase) ... ok
testSomething (testExample.ExampleTestCase) ... ok

----------------------------------------------------------------------
Ran 6 tests in 0.008s

OK

4.7 Python 3.6 兼容性实测结论

同一份 r1939132 代码,Python 3.6.8 与 3.10.12 的实测差异只有一处:

  • 单元测试输出:Python 3.6 下没有 imp 模块的 DeprecationWarning(该警告从 Python 3.4 引入、3.12 计划移除,3.6 的警告措辞/触发与 3.10 不同,实测 3.6 输出干净);测试本体 6/6 通过,仅耗时 0.008s(Ubuntu 为 0.003s)。
  • 元数据校验、workspace 加载、离线集成运行(bin/integrate.py,见第 3 篇):3.6 与 3.10 行为一致,bin/update.py/bin/build.py 的已知崩溃也一致。

结论:Gump live r1939132 在 Python 3.6.8~3.10.12 区间均可运行,CentOS 8 用户无需为 Python 版本做任何额外动作。

五、方案 B:完整构建环境(JDK + 环境探测)

5.1 方案说明

安装 java-11-openjdk(headless 运行时 + devel 编译器),确定 el8 的真实 JAVA_HOME,再用 bin/env.py 做环境探测。el8 的 JDK 路径带完整版本号子目录,且 alternatives 管理的 /usr/bin/javac 可能指向另一个 JDK 版本,这是 CentOS 特有的第二个坑。

5.2 安装 JDK

yum install -y java-11-openjdk-headless java-11-openjdk-devel
# 输出节选(实测首尾)
Installed:
  java-11-openjdk-11.0.13.0.8-4.el8_5.x86_64
  java-11-openjdk-devel-11.0.13.0.8-4.el8_5.x86_64
  java-11-openjdk-headless-11.0.13.0.8-4.el8_5.x86_64
Complete!

el8 的 JAVA_HOME 必须用带版本号的完整路径(/usr/lib/jvm/java-11 这类抽象软链在实测中不可靠):

readlink -f /usr/bin/java
/usr/lib/jvm/java-11-openjdk-11.0.13.0.8-4.el8_5.x86_64/bin/java
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-11.0.13.0.8-4.el8_5.x86_64
$JAVA_HOME/bin/java -version 2>&1 | head -1
openjdk version "11.0.13" 2021-10-19 LTS

5.3 javac 版本与 alternatives

实测本机 /usr/bin/javac 指向了 java-17(javac -version 返回 17.0.1),与 java 命令的 11 不一致。用 alternatives 显式对齐:

javac -version
javac 17.0.1
alternatives --set javac /usr/lib/jvm/java-11-openjdk-11.0.13.0.8-4.el8_5.x86_64/bin/javac
javac -version
javac 11.0.13

验证点:javac -version 与 $JAVA_HOME/bin/javac -version 输出一致(均为 11.0.13),构建工具链不再混用两个 JDK。要点:el8 上 java 与 javac 是两条独立的 alternatives 注册项,升级/安装多版本后必须分别核对。

5.4 官方环境探测:bin/env.py

cd /root/gump
export PYTHONPATH=/root/gump/python:/root/gump GUMP_HOME=/root/gump
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-11.0.13.0.8-4.el8_5.x86_64
python3 bin/env.py -w metadata/minimal-workspace.xml all > /tmp/envcheck.log 2>&1
echo "REAL_EXIT=$?"
REAL_EXIT=1

输出关键行:

                     |_|     ~ v. 2.3 ~

Failed to find environment variable [MAVEN_HOME]
Detected [/usr/lib/jvm/java-11-openjdk-11.0.13.0.8-4.el8_5.x86_64/bin/java -version]
Detected [javac -help]
Detected [java com.sun.tools.javac.Main -help]
Detected [svn --version]
Detected [git --version]
Failed to detect [gradle --version]
Gump Environment Check complete. Exit code:1

与 Ubuntu 的差异解读:本机探测成功 6 项(env/java/javac/javac 主类/svn/git),比 Ubuntu 少 make(未安装,需要构建 make 型项目时装 make 包即可);CentOS 8 vault 源没有 python3-rdflib 包,gump/actor/rdf/describer.py 导入时实测报 ModuleNotFoundError: No module named 'rdflib',Gump 打印警告后跳过 RDF 描述器,主流程不受影响(真实回显见第 3 篇)。

5.5 运行边界实测(与 Ubuntu 一致)

三项结论在 CentOS 8 + Python 3.6.8 下与 Ubuntu + 3.10.12 完全一致,不再重复展开:

  • bin/update.py、bin/build.py 独立调用崩溃于 RuntimeError: Not Implemented on TextResolver: getFile.(实测回显逐字一致);
  • ./gump run 包装命令在 Python 3 下触发两处 print "error" SyntaxError(Python 2 遗留语法)后主流程继续;
  • bin/integrate.py 离线运行完整可用,退出码 0(完整实战见第 3 篇)。

六、方案对比与选择建议

维度方案 A:基础校验链方案 B:完整构建环境
额外操作需先修 vault 源、补 python 软链另需 JDK 双包 + alternatives 对齐
可用能力help / validate / test另加 env.py 探测、integrate 离线运行
Python3.6.8(实测足够)3.6.8
适用场景元数据校验与贡献聚合构建实验

选型建议与第 1 篇相同:元数据贡献者选 A,要做聚合构建实验选 B。CentOS 8 额外的两处系统级修复(vault 源、python 软链)是方案 A 的必做项,不要跳过。

七、基础配置

7.1 环境变量与本地环境脚本

./gump 启动时加载 cron/local-env-$(hostname -s).sh。本文主机短名为 gump-centos,实测创建:

cat > /root/gump/cron/local-env-gump-centos.sh <<'EOF'
export GUMP_HOME=/root/gump
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-11.0.13.0.8-4.el8_5.x86_64
export GUMP_DB_PASSWD=q1w2e3r4
EOF

逐项说明:

  • JAVA_HOME:必须用 el8 带版本号的完整路径(5.2 节实测);./gump run 会把它回显在运行环境清单中(实测回显 JAVA_HOME -> [/usr/lib/jvm/java-11-openjdk-11.0.13.0.8-4.el8_5.x86_64])。
  • GUMP_DB_PASSWD:统计数据库口令示例(仅命名示范,单机实验未装 MySQL 时不会被使用);服务端正式部署时 workspace XML 的 <database passwd="..."> 属性承接同一用途。
  • 文件名必须与 hostname -s 一致,否则脚本不加载。

7.2 workspace 约定

与 Ubuntu 一致:./gump run 缺省按 metadata/gump-<主机短名>.xml 找 workspace,实测报错为:

RuntimeError:
  No workspace at /root/gump/metadata/gump-centos.xml!
  Maybe you need to check out the metadata from svn?
  See the file metadata/FILLME for more information...

单机实验建议所有命令显式携带 -w <workspace>,workspace 语法见第 4 篇。

八、验证清单

检查项命令预期(实测值)
vault 源yum makecacheMetadata cache created.
Pythonpython3 --version3.6.8
python 命令which python/usr/local/bin/python
SVN 检出版本svn info | grep RevisionRevision: 1939132
包装脚本./gump helpASCII 横幅与命令清单
元数据校验./gump validate仅 easymock/junit 两处既有 DTD 报错
单元测试./gump testRan 6 tests ... OK
JAVA_HOMEecho $JAVA_HOME/usr/lib/jvm/java-11-openjdk-11.0.13.0.8-4.el8_5.x86_64
javac 对齐javac -version11.0.13(与 JAVA_HOME 一致)

九、常见问题(FAQ)

Q1:yum makecache 报 404 或 Cannot prepare internal mirrorlist? 默认源 mirror.centos.org 已下线。按 4.2 节把 repo 换成 vault 的 BaseOS/AppStream 布局路径;最常见的错误是沿用老布局的 os/x86_64/ 路径——CentOS 8 的 vault 必须用 BaseOS/x86_64/os/、AppStream/x86_64/os/。

Q2:./gump test 报 Cannot find python 怎么办? CentOS 8 只有 python3 命令。执行 ln -sf /usr/bin/python3 /usr/local/bin/python 后重跑。实测 vault 源中没有任何包提供 /usr/bin/python,软链是唯一办法。

Q3:Python 3.6.8 会不会太老? 实测 r1939132 在 3.6.8 下元数据校验、单元测试(6/6 OK)、workspace 加载、离线集成运行(退出码 0)全部正常;与 Python 3.10 的唯一实测差异是单测输出少了 imp 的 DeprecationWarning。不必升级 Python。

Q4:java -version 是 11 但 javac -version 是 17? el8 的 java 与 javac 是独立的 alternatives 注册项,本机实测出现过 java 指向 11、javac 指向 17 的混用。按 5.3 节 alternatives --set javac <java-11 的 javac 完整路径> 对齐,并始终用带版本号的 JAVA_HOME 完整路径。

Q5:能装 rdflib 吗? vault 源没有 python3-rdflib 包。不装也不影响主流程:Gump 在 RDF 描述器导入失败时打印警告并跳过(实测 ModuleNotFoundError: No module named 'rdflib' 后运行继续)。第 1 篇的实测进一步表明:即使装上新版 rdflib,其移除的 TYPE 常量仍会让该描述器被跳过。

Q6:./gump validate 的两处 DTD 报错和 Ubuntu 上一样吗? 逐字一致(easymock.xml 第 30 行、junit.xml 第 48 行),是官方 live 元数据的既有问题,与安装无关。

十、卸载与清理

删除源码、运行产物与本地环境脚本:

rm -rf /root/gump /root/envcheck.log /usr/local/bin/python

卸载为 Gump 增装的包(先 -s 预演):

yum remove -s java-11-openjdk-devel java-11-openjdk-headless subversion git 2>&1 | head -6

确认清单无误后去掉 -s 执行;python3、libxml2、libxslt 属系统基础组件建议保留。若不再需要 vault 源,恢复原 repo 文件:

cd /etc/yum.repos.d && mv centos-vault.repo bak/ 2>/dev/null; mv bak/CentOS-Linux-*.repo . 2>/dev/null; ls

要点:CentOS 8 已 EOL,恢复默认源后 yum 将不可用;除非迁移到其他 EL8 兼容发行版的源,否则建议保留 vault 配置。

十一、参考链接

  1. Apache Gump 官方主页:https://gump.apache.org/
  2. 官方源码仓库(SVN live 主干):https://svn.apache.org/repos/asf/gump/live
  3. CentOS Vault 归档说明:https://wiki.centos.org/Download (EOL 后改用 vault 镜像)
  4. 阿里云 CentOS Vault 镜像:http://mirrors.aliyun.com/centos-vault/
  5. 元数据对象模型文档:https://gump.apache.org/metadata/index.html
  6. Python Gump 使用文档:https://gump.apache.org/python/usage.html