Ubuntu 22.04 安装 Apache Gump 指南
在 Ubuntu 22.04 上从零安装 Apache Gump live r1939132,覆盖 Python 3.10 依赖链、SVN 源码获取、官方 DTD 校验与单元测试实测、JDK/Ant 完整环境与 bin/env.py 环境探测,并如实记录 update/build 单命令的 py3 崩溃边界与卸载清理,全部命令回显实测通过。
Ubuntu 22.04 安装 Apache Gump 指南
目标:在 Ubuntu 22.04 上从零搭好 Apache Gump live r1939132 的元数据 CI 环境(Python 3.10 + SVN 源码 + xmllint/xsltproc 校验链 + JDK/Ant 构建链),跑通官方
./gump help、./gump validate、./gump test与bin/env.py四道验证,并如实记录./gump run包装脚本在 Python 3 下的已知缺陷;本文全部命令与回显均已在 Ubuntu 22.04 实测通过。
Apache Gump 是 Apache 软件基金会最早(2001 年起)的持续集成工具,用 Python 编写,作用是把多个项目的最新源码聚合成一张依赖图,按依赖顺序依次构建,从而在几小时内发现「上游未发布改动是否会破坏下游项目」。它没有传统意义上的发行版本号:官方通过 Apache SVN 的 https://svn.apache.org/repos/asf/gump/live 持续发布 live 版,安装方式就是 SVN 检出源码后配置 Python 环境。需要特别说明的是,Gump 属于低频维护项目(本篇实测的 r1939132 为 2026-08-31 提交,上一次功能性提交是 2025-09-12),部分包装脚本仍残留 Python 2 时代的写法,本文会逐项给出实测结论与可用边界。
一、环境信息
本节先固定可复现的基线环境,后续所有命令均在此环境执行。Gump 是「元数据驱动」的工具:本体是 Python 代码,运行时还需要 XML 校验工具(xmllint/xsltproc)与 SCM 客户端(svn/git),构建 Java 项目时另需 JDK/Ant。
- 操作系统:Ubuntu 22.04.5 LTS(PRETTY_NAME="Ubuntu 22.04.5 LTS")
- 架构:x86_64
- Python:3.10.12(apt 包
python3,Ubuntu 22.04 自带) - SVN:1.14.1(apt 包
subversion) - XML 校验:xmllint(libxml 20913)、xsltproc(libxml 20913, libxslt 10134),apt 包
libxml2-utils、xsltproc - RDF 库:rdflib 6.1.1(apt 包
python3-rdflib,可选) - JDK:OpenJDK 11.0.32.1(apt 包
default-jdk-headless,构建 Java 项目时必需) - Ant:1.10.12(apt 包
ant,构建 Ant 型项目时必需) - 组件版本:Apache Gump live,SVN 版本 r1939132(2026-08-31 提交),内部版本串
setting.VERSION='2.3' - 源码目录:
/root/gump
系统与架构确认(实时回显):
cat /etc/os-release | head -2
PRETTY_NAME="Ubuntu 22.04.5 LTS"
NAME="Ubuntu"
uname -m
x86_64
💡 说明:Gump 没有守护进程与监听端口,「安装完成」的判定标准是四道验证全部可执行:
./gump help出横幅、./gump validate元数据 DTD 校验可跑、./gump test单元测试通过、bin/env.py环境探测完整。
二、前置条件
本节说明安装前必须满足的条件。Ubuntu 22.04 官方源可直接提供全部依赖,无需第三方仓库。
- 具有 root 或 sudo 权限的 Ubuntu 22.04 系统。
- 可访问 Ubuntu 官方软件源(
apt update能正常拉取索引)。 - 可访问 Apache SVN 服务器
svn.apache.org(检出源码与元数据,本文实测网络直连可达)。 - 至少 1 GB 可用磁盘空间(源码含元数据与外部项目定义约 31 MB,加依赖合计约 300 MB)。
网络连通性确认(实时回显):
curl -sI --max-time 20 https://svn.apache.org/repos/asf/gump/live | head -1
HTTP/1.1 200 OK
三、版本选型说明
本节解释 Gump 的版本形态与获取渠道。Gump 是「元项目」——它自己没有 jar 包、没有二进制发行版,唯一交付物就是源码及其中的元数据定义。
3.1 版本形态
Gump 的官方版本形态只有一种:SVN 上的 live 主干。仓库结构为 https://svn.apache.org/repos/asf/gump/,其中 live/ 子目录是当前使用的 Python 版实现(旧称 Traditional Gump 的实现已被其取代,官方文档明确说明「Python Gump has matured to the point it is the live run」)。live/ 内通过 svn:externals 自动附带 metadata/ 元数据检出版本。
本文实测时检出的版本与最后提交记录:
cd /root/gump && svn info | grep -E "Revision|URL"
URL: https://svn.apache.org/repos/asf/gump/live
Relative URL: ^/gump/live
Revision: 1939132
svn log -l 2 -q
------------------------------------------------------------------------
r1937687 | bodewig | 2026-08-31 20:24:48 +0800 (一, 2026-08-31)
------------------------------------------------------------------------
r1928372 | bodewig | 2025-09-12 23:16:07 +0800 (五, 2025-09-12)
两个内部版本字符串的实测值(本文统一以「Gump live r1939132」指称该实测快照):
grep -n "VERSION" /root/gump/python/gump/core/config.py | head -3
grep -n "GUMP_VERSION" /root/gump/cron/gump.py
VERSION='2.3'
WS_VERSION="0.4"
WS_MINIMUM_VERSION="0.3"
GUMP_VERSION = '2.0.2-alpha-0003'
3.2 源码获取渠道对比
💡 技术拓展:Gump 源码的获取渠道实测有三种——
渠道 地址 实测结果 适用场景 Apache SVN(官方主干) https://svn.apache.org/repos/asf/gump/liver1939132 完整检出,含元数据 externals 本文采用,官方唯一权威渠道 GitHub 仓库 https://github.com/apache/gump实测 HTTP 404(仓库不存在),GitHub API 亦无此仓库 不可用,勿按旧资料尝试 官方网站指引 https://gump.apache.org/首页 Source 链接实测指向上述 SVN 地址 用于确认渠道 官网首页「Source」一节给出的链接就是 SVN 仓库;搜到的任何 GitHub 地址均实测无效。本文采用 Apache SVN 官方主干,理由是它是官网指认的唯一渠道,且
svn:externals会把元数据一起检出,开箱即用。
四、方案 A:SVN 检出 + Python 校验链(基础环境,必做)
本节完成最小可用安装:装 Python 与 XML 校验工具 → SVN 检出源码 → 跑通 help/validate/test 三道验证。完成本节后,Gump 的元数据编辑、校验与单元测试能力全部可用。
4.1 方案说明
方案 A 的链路是:apt 安装 python3、subversion、libxml2-utils、xsltproc、curl → svn checkout 官方 live 主干到 /root/gump → 直接使用仓库根目录的 ./gump 包装脚本。不涉及任何编译步骤,Gump 本体是纯 Python。
4.2 安装基础依赖
apt-get update -qq
DEBIAN_FRONTEND=noninteractive apt-get install -y python3 subversion libxml2-utils xsltproc curl
# 输出节选(实测首尾)
Setting up python3 (3.10.12-1ubuntu1.4) ...
Setting up subversion (1.14.1-3ubuntu0.22.04.1) ...
Setting up libxml2-utils (2.9.13+dfsg-1ubuntu0.4) ...
Setting up xsltproc (1.1.34-4ubuntu0.22.04.1) ...
确认各工具版本:
python3 --version; svn --version --quiet; xmllint --version 2>&1 | head -1; xsltproc --version 2>&1 | head -1
Python 3.10.12
1.14.1
xmllint: using libxml version 20913
Using libxml 20913, libxslt 10134 and libexslt 820
验证点:四个命令都能出版本号即基础依赖就绪。libxml2-utils 提供 xmllint,xsltproc 由同名包提供,两者是 ./gump validate 元数据校验的执行器。
💡 技术拓展:XML 校验工具常见选择对比如下——
工具 来源包 DTD 校验 XSLT 转换 备注 xmllint libxml2-utils --valid --noout即可不做(另有 xsltproc) Gump 官方 validate 脚本使用 xsltproc xsltproc 不做 内部工具表转换 Gump 用它枚举外部项目列表 xmlstarlet xmlstarlet 支持 支持 单二进制多功能,Gump 未使用 本文采用官方脚本指定的 xmllint + xsltproc 组合,两者都装,缺一会分别在「Processing Local Projects」与「Processing External Projects」阶段报
Cannot find xmllint类错误。
4.3 SVN 检出源码
cd /root
svn checkout https://svn.apache.org/repos/asf/gump/live gump
取出版本 1939132 的外部项目。
取出版本 1939132。
检出后目录结构确认:
cd /root/gump && ls
bin
blog
conf
cron
demo-gump-run
forrest.properties
freej-gump-run
gump
gump.log.config
metadata
mysql
NOTICE
python
README
site-sync.xml
src
status.xml
template
test
LICENSE
关键目录职责:gump(根目录包装脚本,命令行总入口)、bin/(update/build/integrate 等独立 Python 入口)、python/gump/(核心包)、metadata/(官方项目元数据,经 externals 检出)、cron/(服务端定时运行脚本)、test/(集成测试夹具)。
验证点:svn info 显示 Revision 1939132 且 metadata/project/ 下有 72 个 XML 文件,说明 externals 元数据一并检出:
ls /root/gump/metadata/project/*.xml | wc -l
72
4.4 首次运行验证:./gump help
./gump 是仓库根目录的 Bash 包装脚本,提供 run、test、validate、site 等子命令。直接执行 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.
子命令帮助(实测两个):
./gump help validate && ./gump help run
Run the DTD validation tools on the metadata.
Usage:
./gump validate
Run Gumpy.
Usage:
./gump run [gump.py-args ...]
See http://wiki.apache.org/gump/GumpCommandLineOptions for more
information about the options Gumpy accepts. The one mandatory
argument is the project expression detailing what to run. You
will usually want all here.
验证点:横幅与命令清单完整输出,说明包装脚本与 Bash 环境正常。注意 site/site-publish 两个命令分别依赖 Apache Forrest 与 SSH 发布流程,本文不使用(低频维护的遗留功能)。
4.5 元数据校验验证:./gump validate
validate 命令调用 metadata/validate 脚本,用 xmllint 按 DTD 逐个校验 metadata/repository/、metadata/profile/、metadata/project/ 下的官方元数据:
cd /root/gump && time ./gump validate 2>&1 | tail -12
======== 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 ============
real 0m0.8s
user 0m0.4s
sys 0m0.3s
结果解读(重要,均为实测结论):
- 校验流程完整执行:仓库 → profile → 本地项目 → 外部项目四个阶段,全程 0.8 秒。
- 官方 live 元数据自身就有 2 处 DTD 报错(easymock.xml 第 30 行属性未在 project.dtd 声明、junit.xml 第 48 行 mvn3 子元素顺序不符 DTD)——这是上游元数据与 DTD 不同步的现状,不影响校验工具本身可用性,看到这两条报错属正常现象。
- 「Processing External Projects」阶段为空:
xsltproc ./tools/externals.xslt ./profile/gump.xml实测输出 0 行,即当前官方 profile 没有登记需远程拉取校验的外部项目文件。 - 本地 72 个 project XML 全部过检(除上述 2 个既有报错外无其他输出)。
4.6 单元测试验证:./gump test
test 命令用 bin/testrunner.py 跑 python/gump/test/ 下的单元测试。首次执行需设置 GUMP_HOME 环境变量,实测缺省时的报错(这也是确认包装脚本环境检查生效的方式):
./gump test
The variable GUMP_HOME has not been set. It should be set to
the location of the gump checkout.
You can either set this before invoking gump, or set it in a file
named
/root/gump/cron/local-env-gump-ubuntu.sh.sh
设置后仍会再撞上 Ubuntu 22.04 的一个系统差异:官方源默认不提供无版本号的 python 命令(/usr/bin/python 不存在),而 ./gump test 的包装函数 check_env "python" 找的是无版本号命令,实测报错:
export GUMP_HOME=/root/gump
./gump test; echo "EXIT=$?"
Cannot find python. Please retrieve it from
http://www.python.org/
and install it.
EXIT=1
修复:创建软链(ln -sf /usr/bin/python3 /usr/local/bin/python)。apt 源里另有 python-is-python3 包(实测 Candidate 版本 3.9.2-2,它把 /usr/bin/python 软链到 /usr/bin/python3),两种做法等效,本文用软链:
ln -sf /usr/bin/python3 /usr/local/bin/python
which python && python --version
/usr/local/bin/python
Python 3.10.12
之后重跑(本文主机的短主机名为 gump-ubuntu,因此前一步脚本提示的本地环境文件名带此后缀):
./gump test 2>&1 | tail -10
/root/gump/python/../bin/testrunner.py:37: DeprecationWarning: the imp module is deprecated in favour of importlib and slated for removal in Python 3.12; see the module's documentation for alternative uses
import imp
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.003s
OK
验证点:6 个单元测试在 Python 3.10.12 下全部通过(Ran 6 tests ... OK)。imp 模块的 DeprecationWarning 是上游代码仍使用旧式动态导入所致,不影响测试结果;python 无版本号命令需按上文软链补齐(与 CentOS 8 同样必须手工处理,见第 2 篇《CentOS 8 安装 Apache Gump 指南》)。
要点小结:方案 A 完成后,./gump help、./gump validate、./gump test 三道验证全部可用,元数据编辑与校验的完整工作流已就绪。
五、方案 B:完整构建环境(JDK + Ant + rdflib)与环境探测
本节把环境补全到「可尝试完整运行」的程度:安装 JDK/Ant 供构建 Java 项目,安装 rdflib 供 RDF 描述器,再用官方 bin/env.py 做全量环境探测。完成本节后可进入第 3 篇的集成实战。
5.1 方案说明
Gump 构建的项目分 Ant 型与 Maven 型:Ant 型项目靠 JAVA_HOME + ant 执行;Maven 型项目运行时由 Gump 以离线方式调用系统 mvn。此外 Python 侧的 RDF 描述器依赖 rdflib 库。本方案把这些一次装齐,并用 bin/env.py(官方环境检查入口)逐项探测。
5.2 安装 JDK 与 Ant
DEBIAN_FRONTEND=noninteractive apt-get install -y default-jdk-headless ant
# 输出节选(实测首尾)
Setting up default-jdk-headless (2:1.11-72build2) ...
Setting up ant (1.10.12-1) ...
确认版本:
java -version 2>&1 | head -1
ant -version | head -1
openjdk version "11.0.32.1" 2026-08-18
Apache Ant(TM) version 1.10.12 compiled on January 17 1970
记录 JAVA_HOME 实际路径(bin/env.py 与 ./gump run 都强制要求该变量):
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
ls $JAVA_HOME/bin/java
/usr/lib/jvm/java-11-openjdk-amd64/bin/java
5.3 安装 rdflib(可选,如实说明)
RDF 描述器(gump/actor/rdf/describer.py)在运行时尝试 from rdflib import TYPE。实测安装 apt 源的 rdflib 6.1.1 后,该导入仍失败(TYPE 常量在新版 rdflib 中已移除),Gump 会打印警告并跳过描述器,主流程不受影响:
DEBIAN_FRONTEND=noninteractive apt-get install -y python3-rdflib
Setting up python3-rdflib (6.1.1-1) ...
python3 -c "from rdflib import TYPE" 2>&1 | tail -1
ImportError: cannot import name 'TYPE' from 'rdflib' (/usr/lib/python3/dist-packages/rdflib/__init__.py)
结论:装不装 rdflib 都可以,装了也只到「库可导入、TYPE 常量不可用」的程度,Gump 对此有容错。这是低频维护项目依赖漂移的典型表现,如实记录。
5.4 官方环境探测:bin/env.py
bin/env.py 是官方环境检查入口,按 workspace 逐个探测构建工具链。实测命令与输出:
cd /root/gump
export PYTHONPATH=/root/gump/python:/root/gump GUMP_HOME=/root/gump
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
python3 bin/env.py -w metadata/minimal-workspace.xml all > /tmp/envcheck.log 2>&1
echo "REAL_EXIT=$?"
REAL_EXIT=1
输出节选(头部与关键行):
_____
| __|_ Apache_ ___
| | | | | | . |
|_____|___|_|_|_| _|
|_| ~ v. 2.3 ~
Failed to find environment variable [MAVEN_HOME]
Failed to find environment variable [M2_HOME]
Failed to find environment variable [M3_HOME]
Failed to find environment variable [MVN_PROXY_HOME]
Detected [env ]
Detected [/usr/lib/jvm/java-11-openjdk-amd64/bin/java -version]
Detected [javac -help]
Detected [java com.sun.tools.javac.Main -help]
Failed to detect [cvs --version]
Detected [svn --version]
Failed to detect [p4 -V]
Failed to detect [NAnt -help]
Detected [make --version]
Detected [git --version]
Gump Environment Check complete. Exit code:1
逐项解读:
- 横幅第二行
~ v. 2.3 ~来自python/gump/core/config.py的setting.VERSION,与 4.3 节版本选型一致。 Detected行为探测成功的工具(java/javac/svn/make/git);Failed to detect为未安装的(cvs/p4/NAnt/gradle 等),Gump 按项目类型按需使用,不必全部安装。- 退出码 1 的原因是探测列表中存在缺失工具(如 cvs),属预期行为;JAVA_HOME 未设置时则会在更早阶段直接报
Failed to find environment variable [JAVA_HOME]并退出。
验证点:bin/env.py 能完整跑完探测流程并给出退出码,说明 Python 侧核心包在 3.10 下可正常导入与执行(此前的 workspace 加载、GumpRunOptions 等全部工作)。
5.5 运行边界实测(重要,如实记录)
装到这一步,离「完整跑一轮」还差哪些?本文做了三组真实命令的边界测试,结论如下。
bin/update.py 与 bin/build.py 独立调用时,在初始化阶段的 RSS 联合分发器崩溃(Python 3.10 与后续第 2 篇的 Python 3.6 表现一致):
python3 bin/update.py -w metadata/minimal-workspace.xml all 2>&1 | tail -3
File "/root/gump/python/gump/actor/document/text/resolver.py", line 64, in getFile
raise RuntimeError('Not Implemented on ' + self.__class__.__name__ + ': getFile.')
RuntimeError: Not Implemented on TextResolver: getFile.
./gump run 包装脚本在 Python 3 下先触发两处脚本内遗留的 Python 2 语法报错,随后主流程继续:
./gump run 2>&1 | head -5
File "/root/gump/pycmd.tmp.py", line 4
print "error"
^^^^^^^^^^^^^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print(...)?
能完整跑通的入口是 bin/integrate.py(详见第 3 篇实战):离线模式下实测退出码 0,并产出完整的 HTML 报告与 RSS/Atom。
结论:在 Ubuntu 22.04 上,可行的使用路径是 ./gump validate + ./gump test + bin/integrate.py;bin/update.py/bin/build.py 独立调用与 ./gump run 包装脚本属于上游 Python 3 适配未完成的部分,按原样如实记录,不做绕过性魔改。
六、方案对比与选择建议
本节汇总两种方案的差异与适用判断。
| 维度 | 方案 A:基础校验链 | 方案 B:完整构建环境 |
|---|---|---|
| 安装内容 | python3/svn/xmllint/xsltproc/curl | 另加 JDK 11 + Ant + rdflib |
| 可用能力 | help / validate / test、元数据编辑校验 | 另可执行 env.py 探测、integrate 离线运行、尝试真实构建 |
| 磁盘占用 | 约 50 MB | 约 500 MB(JDK 占大头) |
| 适用场景 | 只想校验/维护 Gump 元数据 | 想跑集成测试与项目构建聚合 |
选型建议:只想给 Gump 提交元数据(metadata/project/*.xml)的贡献者,方案 A 足够;要在自己机器上跑聚合构建实验的,选方案 B。两者是递进关系,方案 A 是方案 B 的前半程,无需二选一。
七、基础配置
本节说明 Gump 真正会读的配置点。它没有全局配置文件,配置由「环境变量 + 本地环境脚本 + workspace XML」三层构成。
7.1 环境变量与本地环境脚本
./gump 包装脚本启动时会加载 cron/local-env-<主机短名>.sh(load_env 函数),用于注入主机特定的环境变量。本文实测创建示例(数据库口令仅为示例强度示范):
cat > /root/gump/cron/local-env-gump-ubuntu.sh <<'EOF'
export GUMP_HOME=/root/gump
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
export GUMP_DB_PASSWD=q1w2e3r4
EOF
逐项说明:
GUMP_HOME:包装脚本所有子命令的强制变量,缺省时报The variable GUMP_HOME has not been set(见 4.6 节实测回显)。JAVA_HOME:./gump run与bin/env.py的强制变量,必须是 JDK 实际路径而非软链目录。GUMP_DB_PASSWD:统计数据库口令的示例命名(Gump 服务端把运行统计写入 MySQL,官方 workspace XML 中<database>元素另有passwd属性,两处均可承接;单机实验不装 MySQL 时该值不会被使用)。- 脚本名规则:
local-env-$(hostname -s).sh,主机名不同文件名随之变化,放错名字等于没配。
7.2 workspace 约定与默认查找路径
./gump run 不带 -w 时,按 metadata/gump-<主机短名>.xml 约定找 workspace,实测缺失时的报错:
RuntimeError:
No workspace at /root/gump/metadata/gump-ubuntu.xml!
Maybe you need to check out the metadata from svn?
See the file metadata/FILLME for more information...
因此单机实验的标准做法是把自定义 workspace 放到 metadata/ 下并以主机短名命名,或所有命令显式携带 -w <workspace 文件>。workspace 的完整语法与 version 属性的大小写陷阱见第 4 篇《元数据与命令详解》。
八、验证清单
安装与配置完成后,按下表逐项核对(预期值均为本文实测值):
| 检查项 | 命令 | 预期(实测值) |
|---|---|---|
| Python 版本 | python3 --version | 3.10.12 |
| SVN 检出版本 | svn info | grep Revision | Revision: 1939132 |
| 包装脚本 | ./gump help | 输出 ASCII 横幅与 6 条命令清单 |
| 元数据校验 | ./gump validate | 四阶段执行,仅 easymock/junit 两处既有 DTD 报错 |
| 单元测试 | ./gump test | Ran 6 tests ... OK |
| python 命令 | which python | /usr/local/bin/python(软链至 /usr/bin/python3) |
| 环境探测 | python3 bin/env.py -w metadata/minimal-workspace.xml all | 探测清单完整输出,退出码 1(缺工具所致) |
| JAVA_HOME | echo $JAVA_HOME | /usr/lib/jvm/java-11-openjdk-amd64 |
九、常见问题(FAQ)
Q1:./gump validate 报 easymock.xml 和 junit.xml 的 validity error,是我装错了吗?
不是。这两处是官方 live 元数据自身与 DTD 不同步的既有问题(属性 allowPropertyReferenceInVersion 未声明、mvn3 内混入 sysproperty),本文与第 2 篇在两套系统上实测结果完全一致。校验你自己新增的元数据文件时,只要没有新的报错即为通过。
Q2:./gump test 提示 The variable GUMP_HOME has not been set 怎么办?
设置 export GUMP_HOME=/root/gump 后重跑,或按 7.1 节写入 cron/local-env-<主机短名>.sh。注意文件名必须与 hostname -s 输出一致。
Q3:./gump test 报 Cannot find python. Please retrieve it from http://www.python.org/ 怎么办?
Ubuntu 22.04 官方源默认没有无版本号的 python 命令(实测 /usr/bin/python 不存在)。执行 ln -sf /usr/bin/python3 /usr/local/bin/python 补软链后重跑;或安装 python-is-python3 包(实测 apt 源 Candidate 3.9.2-2)由包管理器建立同一软链。
Q4:./gump run 报 SyntaxError: Missing parentheses in call to 'print',还能用吗?
这是 ./gump 包装脚本里 check_env_pylib 函数生成的探测代码用了 Python 2 的 print "error" 语法,在 Python 3 下必然报错(Python 3.10 的报错回显见 5.5 节)。绕过办法是不走该包装命令,直接调用 python3 bin/integrate.py -w <workspace> all——实测该入口在 Python 3.10 完整可用(退出码 0,见第 3 篇)。
Q5:bin/update.py 或 bin/build.py 报 Not Implemented on TextResolver: getFile?
独立调用这两个入口时,运行初始化阶段的 RSS 联合分发器拿到的解析器未实现 getFile,这是上游代码在 Python 3 下复现的缺陷(第 2 篇 Python 3.6 实测相同)。等效能力由 bin/integrate.py 覆盖(更新+构建+文档+联合分发一体),建议直接使用后者。
Q6:rdflib 装了为什么还是报 cannot import name 'TYPE' from 'rdflib'?
新版 rdflib 移除了 TYPE 常量,而 Gump 的 RDF 描述器还在按旧 API 导入。Gump 对此有容错:打印 Unable to register RDF Describer 警告后跳过该描述器,主流程不受影响。该依赖可以不装。
Q7:能不装 JDK 吗?
只做元数据校验与单元测试(方案 A)可以不装。要运行 bin/env.py 的完整探测或任何项目构建则必须装,JAVA_HOME 是强制变量(实测缺失时立即报 Failed to find environment variable [JAVA_HOME])。
十、卸载与清理
Gump 是纯源码安装,卸载即删除源码目录、运行产物与本地环境脚本。
删除源码与运行产物:
rm -rf /root/gump /root/envcheck.log
确认删除(实时回显):
ls /root/gump 2>&1
ls: cannot access '/root/gump': No such file or directory
卸载通过 apt 安装的依赖(先以 -s 预演确认将删除的包):
apt-get -s autoremove -y python3-rdflib ant default-jdk-headless
# 输出节选(实测首尾)
The following packages will be REMOVED:
ant* default-jdk-headless* python3-rdflib* ...
0 upgraded, 0 newly installed, N to remove and 0 not upgraded.
确认无误后去掉 -s 真正执行:
apt-get autoremove -y python3-rdflib ant default-jdk-headless
要点:python3、subversion、libxml2-utils、xsltproc 是系统基础组件,建议保留;仅卸载为 Gump 增装的构建链包。
十一、参考链接
- Apache Gump 官方主页:https://gump.apache.org/
- 官方源码仓库(SVN live 主干):https://svn.apache.org/repos/asf/gump/live
- 官方元数据目录(svn:externals 检出):https://svn.apache.org/repos/asf/gump/metadata
- 元数据对象模型文档:https://gump.apache.org/metadata/index.html
- Python Gump 使用文档(update/build/integrate 命令说明):https://gump.apache.org/python/usage.html
- Gump 官方运行实例(vmgump 结果站):http://vmgump.apache.org/