CentOS 8 安装 Apache Gump 指南
在 CentOS 8 上从零安装 Apache Gump live r1939132,覆盖 EOL 后 vault 仓库修复、Python 3.6.8 依赖链、python 命令软链修复、SVN 源码获取、官方校验与单测实测、JDK 环境与 bin/env.py 探测,并如实记录与 Ubuntu 的全部差异点,命令回显实测通过。
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 多一条「软件源必须先修复」——这是本篇最重要的差异。
- 具有 root 权限的 CentOS 8 系统。
- 软件源可用:默认源指向
mirror.centos.org(已下线),必须改用 vault 镜像(见 4.2 节)。 - 可访问
svn.apache.org(检出源码)与所选 vault 镜像站。 - 至少 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.org HTTP 404 官方源已下线,repodata 不存在 vault.centos.org HTTP 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 离线运行 |
| Python | 3.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 makecache | Metadata cache created. |
| Python | python3 --version | 3.6.8 |
| python 命令 | which python | /usr/local/bin/python |
| SVN 检出版本 | svn info | grep Revision | Revision: 1939132 |
| 包装脚本 | ./gump help | ASCII 横幅与命令清单 |
| 元数据校验 | ./gump validate | 仅 easymock/junit 两处既有 DTD 报错 |
| 单元测试 | ./gump test | Ran 6 tests ... OK |
| JAVA_HOME | echo $JAVA_HOME | /usr/lib/jvm/java-11-openjdk-11.0.13.0.8-4.el8_5.x86_64 |
| javac 对齐 | javac -version | 11.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 配置。
十一、参考链接
- Apache Gump 官方主页:https://gump.apache.org/
- 官方源码仓库(SVN live 主干):https://svn.apache.org/repos/asf/gump/live
- CentOS Vault 归档说明:https://wiki.centos.org/Download (EOL 后改用 vault 镜像)
- 阿里云 CentOS Vault 镜像:http://mirrors.aliyun.com/centos-vault/
- 元数据对象模型文档:https://gump.apache.org/metadata/index.html
- Python Gump 使用文档:https://gump.apache.org/python/usage.html