Ubuntu 22.04 安装 Hyphanet 0.7.5 指南
Ubuntu 22.04 安装 Hyphanet 0.7.5(build 1507)指南:下载校验、console 模式安装、启动自启、JVM 内存调优、FAQ 与卸载清理,全流程实测。
Ubuntu 22.04 安装 Hyphanet 0.7.5 指南
目标:读完本文你将能在 Ubuntu 22.04 上完成 Hyphanet 0.7.5(build 1507)的下载校验、console 模式安装、启动停止、开机自启、JVM 内存调优与卸载清理,已在 Ubuntu 22.04(OpenJDK 17)实测通过。
环境信息:本文所有命令与回显均在下列环境实测完成。
| 项目 | 内容 |
|---|---|
| 软件版本 | Hyphanet 0.7.5 Build #1507(发布标签 build01507) |
| 操作系统 | Ubuntu 22.04 LTS(amd64,内核 7.0.0-38-generic) |
| Java 环境 | OpenJDK 17.0.20.1(openjdk-17-jre-headless) |
| 安装路径 | /opt/hyphanet |
| 运行用户 | 普通用户(实验用户 hyphanet) |
| 硬件配置 | 6 vCPU / 64 GB 内存(安装器自动分配 JVM 上限 1536 MB,后手工调为 512 MB) |
| 实测日期 | 2026-10-26 |
背景与选型请先阅读本专栏《Hyphanet 0.7.5 介绍与选型指南》:《Hyphanet 0.7.5 介绍与选型指南》。
一、前置条件
1.1 硬件与系统要求
Hyphanet 官方要求 Java 9 及以上运行环境;结合实测经验给出以下建议配置:
| 项目 | 最低建议 | 说明 |
|---|---|---|
| CPU | 2 核 | 加密与压缩运算密集 |
| 内存 | 2 GB(JVM 堆 256–512 MB) | 可通过 wrapper.conf 限制(见 5.2 节) |
| 磁盘 | 20 GB+ 空闲 | 主存储默认约 17.4 GiB 并持续增长 |
| 网络 | 可出网 UDP | 节点互联走 UDP 17420/39121,NAT 后可正常工作 |
1.2 安装 Java 运行环境
sudo apt-get update
sudo apt-get install -y openjdk-17-jre-headless
java -version
实测回显:
openjdk version "17.0.20.1" 2026-08-18
OpenJDK Runtime Environment (build 17.0.20.1+1-1-22.04-Ubuntu)
OpenJDK 64-Bit Server VM (build 17.0.20.1+1-1-22.04-Ubuntu, mixed mode, sharing)
注意:openjdk-17-jre-headless 只含 JRE,不带 jps 等 JDK 工具,后文验证进程一律使用 ps(见 6.2 节)。
1.3 创建专用用户与目录
run.sh 明确拒绝 root 运行,且安装器同样提示不建议 root 安装。建议创建普通用户运行节点:
sudo useradd -m -s /bin/bash hyphanet
sudo mkdir -p /opt/hyphanet
sudo chown hyphanet:hyphanet /opt/hyphanet
后续所有安装与运行操作均以 hyphanet 用户执行(sudo -iu hyphanet 切换)。
二、版本选型与安装方案
2.1 版本确认
官方当前发布版本为 build01507(内部版本串 Fred,0.7,1.0,1507),发布渠道:
- 官网下载页:
https://www.hyphanet.org/pages/download.html(直链托管于 www.draketo.de); - GitHub Releases:
https://github.com/hyphanet/fred/releases/tag/build01507/; - Lysator 学会提供的 http / Tor 下载源:
https://ftp.lysator.liu.se/pub/freenet/。
2.2 两种安装方案对比
| 对比项 | 方案 A:官方离线安装器(.jar) | 方案 B:Debian 包(.deb) |
|---|---|---|
| 适用系统 | 任意有 Java 9+ 的 GNU/Linux/POSIX | 仅 amd64 的 Debian/Ubuntu 系 |
| 安装方式 | java -jar 图形或 console 交互 | apt/dpkg 包管理 |
| 支持无图形服务器 | 支持(-console 模式,本文实测) | 支持 |
| 自启机制 | cron(run.sh 自动注册) | 由包脚本注册 |
| 实测情况 | 本文全流程实测 | 未实测,口径来自官方下载页 |
服务器/无图形环境推荐方案 A。
三、方案 A:官方离线安装器(推荐,已实测)
3.1 下载安装包并校验
cd /tmp
wget 'https://www.draketo.de/dateien/freenet/build01507/new_installer_offline_1507.jar'
sha256sum new_installer_offline_1507.jar
ls -l new_installer_offline_1507.jar
实测回显:
75043e4c0d5bb1d4b610729d571373c53c9215c2933feed57ff8683a153e301a new_installer_offline_1507.jar
-rw-r--r-- 1 root root 20757314 Oct 26 10:12 new_installer_offline_1507.jar
安装包大小 20,757,314 字节。官方还提供同目录下的 GPG 签名文件(new_installer_offline_1507.jar.sig)与站点密钥环(https://www.hyphanet.org/assets/keyring.gpg),可进一步验证签名。
3.2 console 模式安装
无图形界面(或出现 fontconfig 报错)时使用 -console 模式:
java -jar new_installer_offline_1507.jar -console
实测交互过程(关键步骤节选,目标路径改为 /opt/hyphanet):
Select target path [/tmp]
/opt/hyphanet
press 1 to continue, 2 to quit, 3 to redisplay
1
[ Starting to unpack ]
[ Processing package: Base (1/3) ]
[ Processing package: License (2/3) ]
[ Processing package: Unix (3/3) ]
[ Starting processing ]
Starting up (1/17) Setting up the environment ...
The installer isn't meant to be run as root
两点说明:
- 以 root 试装时会出现
The installer isn't meant to be run as root告警,正式安装请用 1.3 节创建的普通用户执行,最终回显为安装完成信息; - 目标路径必须为该用户可写目录,实测以普通用户安装到
/opt/hyphanet成功。
安装器会写入版本信息文件 .installationinformation(实测内容):
APP_NAME=Freenet
APP_VER=0.7.5
APP_URL=https://freenetproject.org/
3.3 安装目录布局
ls -l /opt/hyphanet/
实测布局(整理为表):
| 路径 | 说明 |
|---|---|
run.sh | 启停控制脚本(start/stop/restart/status/console/dump) |
freenet.ini | 主配置文件 |
wrapper.conf | JVM 服务包装器配置(内存、classpath 等) |
freenet-stable-latest.jar / freenet-ext.jar / bcprov-jdk15on-1.59.jar | 节点主程序与依赖库 |
bin/ | 各架构 wrapper 二进制、remove_cronjob.sh、bindtest.jar、sha1test.jar 等,wrapper.log 也在此 |
logs/ | 运行日志:freenet-latest.log、freenet-previous.log 及按小时滚动的 .log.gz |
datastore/ | 主存储目录(实测约 19 GB,预分配 17.4 GiB) |
temp/ persistent-temp/ | 下载与插入临时目录 |
master.keys | 节点主密钥,实测权限 -rw-------(600),务必保密与备份 |
client.dat.crypt / bookmarks.dat / Sharesite.db | 客户端加密数据、书签、分享库 |
plugin-data/ plugins/ | 插件数据与已下载插件 |
Uninstaller/ | 卸载器(uninstaller.jar,实测 167,101 字节) |
memory.autolimit | 首次启动自动记录的内存上限(实测内容 1536,单位 MB) |
3.4 启动与停止
cd /opt/hyphanet
./run.sh start
./run.sh status
实测回显:
Starting Freenet...
Waiting for Freenet......
running: PID:52573
Freenet 0.7 is running (52573).
脚本能力(实测 ./run.sh 错误用法时回显):
Usage: ./run.sh { console | start | stop | restart | status | dump }
启动时的自动行为(实测日志与脚本):
- 自动探测 Java 可执行文件并回写
wrapper.conf的wrapper.java.command(日志回显Your java executable at /bin/java seems suitable); - 无
memory.autolimit时按物理内存自动设定 JVM 堆上限(规则见 5.2 节); - 进程以 nice 10 低优先级运行(脚本内
PRIORITY=10),避免抢占系统负载。
停止:
./run.sh stop
停止机制为删除 anchor 文件触发优雅关停,bin/wrapper.log 实测回显:
STATUS | wrapper | ... | Anchor file deleted. Shutting down.
若 stop 后脚本长时间无响应(实测在本环境出现过一次),按 6.3 节处理残留进程后再启动。
3.5 配置开机自启
Linux 上 run.sh 通过 cron 实现开机自启:首次 ./run.sh start 时会向当前用户 crontab 注册 @reboot 任务(FProxy 首页对自启的官方说明同样指出 Linux 下走 cron)。验证与禁用:
crontab -l # 查看已注册的自启任务
bin/remove_cronjob.sh # 禁用开机自启(实测该脚本位于 bin/ 下)
实测说明:本文环境已确认 cron 注册与 remove_cronjob.sh 机制存在,未做整机重启验证拉起效果;需要开机自启请保留 crontab 条目并确认 cron 服务开启。
3.6 安装验证
curl -sI http://127.0.0.1:8888/ | head -1
curl -s http://127.0.0.1:8888/diagnostic/ | head -3
./run.sh status
实测回显:
HTTP/1.1 200 OK
Freenet Version:
Freenet 0.7.5 Build #1507 build01507
Freenet-ext Build #29 rv29
Freenet 0.7 is running (52573).
浏览器打开 http://127.0.0.1:8888/ 即可看到节点门户页(首次访问可完成安全级别向导)。
四、方案 B:Debian 包安装(未实测)
⚠️ 说明:本节内容基于官方下载页的公开说明整理,本文未在 Ubuntu 22.04 上实测该方案,生产使用建议优先选择已实测的方案 A。
官方下载页提供 Debian 包:
wget 'https://www.draketo.de/dateien/freenet/build01507/freenet_0.7.5+1507-1_amd64.deb'
sudo apt-get install ./freenet_0.7.5+1507-1_amd64.deb
官方说明要点:该包可在 WSL2 上使用(不支持 WSL1);此外 Gentoo 发行版有第三方维护的 net-p2p/freenet 包。deb 方式的配置文件路径、自启单元由包内脚本决定,与方案 A 的安装目录结构不同,安装后请以包文档为准。
五、安装后配置说明
5.1 freenet.ini 主配置
freenet.ini 位于安装目录根,文件首行官方注释(实测原文):
# This file is overwritten whenever Freenet shuts down, so only edit it when the node is not running.
即:节点关闭时会回写该文件,修改必须在节点停止状态下进行(或改用 Web 配置页 /config/node)。实测配置中的常用项:
| 参数 | 实测值 | 说明 |
|---|---|---|
fproxy.port / fproxy.bindTo | 8888 / 127.0.0.1 | Web 界面端口与监听地址 |
fcp.port / fcp.bindTo | 9481 / 127.0.0.1 | FCP 应用协议端口 |
node.listenPort | 17420 | Darknet UDP 端口 |
node.opennet.listenPort | 39121 | Opennet UDP 端口 |
node.storeSize | 18736826286 | 主存储字节数(约 17.4 GiB) |
node.outputBandwidthLimit | 163840 | 输出限速 160 KiB/s |
node.inputBandwidthLimit | 1048576 | 输入限速 1 MiB/s |
security-levels.networkThreatLevel | NORMAL | 网络威胁级别 |
全部参数逐项解释见本专栏《Hyphanet 0.7.5 配置参数详解》。修改后需 ./run.sh stop && ./run.sh start 重启生效。
5.2 wrapper.conf 与 JVM 内存限制(实测调优)
自动分配规则:首次 ./run.sh start 时,若无 memory.autolimit 文件,脚本按物理内存自动设定 JVM 最大堆并写入 wrapper.conf(实测规则):
| 物理内存 | 自动设定的 wrapper.java.maxmemory |
|---|---|
| ≤ 1 GB | 256 MB |
| ≤ 2 GB | 512 MB |
| ≤ 4 GB | 1024 MB |
| 其他 | 1536 MB |
实测 64 GB 主机被自动设为 1536 MB,并在安装目录生成 memory.autolimit 文件(内容 1536)。
手工修改:对常规节点建议把堆控制在 256–512 MB。编辑 wrapper.conf 两行(实测将第 15 行 initmemory 60→256、第 19 行 maxmemory 1536→512,脚本会把旧值备份为 wrapper.conf.old):
wrapper.java.initmemory=256
wrapper.java.maxmemory=512
注意 wrapper.conf 中的官方注释:Java 实际占用会略高于 maxmemory(bloom 过滤器等也要算在内),设置过高可能导致部分系统无法启动。
重启后验证:
./run.sh restart
ps -ef | grep [f]reenet.node.NodeStarter
实测回显(命令行节选,可确认 -Xms256m -Xmx512m 已生效;修改前为 -Xms60m -Xmx512m):
hyphanet 53120 1 2 10:31 ? 00:00:30 /usr/lib/jvm/java-17-openjdk-amd64/bin/java -Dnetworkaddress.cache.ttl=0 -Dnetworkaddress.cache.negative.ttl=0 -Djava.net.preferIPv4Stack=false -Djava.io.tmpdir=./tmp/ --illegal-access=permit --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED -Xss512k -Xms256m -Xmx512m -Djava.library.path=lib -classpath wrapper.jar:bcprov-jdk15on-1.59.jar:freenet-ext.jar:freenet.jar:jna-4.5.2.jar:jna-platform-4.5.2.jar:pebble-3.1.5.jar:unbescape-1.1.6.RELEASE.jar:slf4j-api-1.7.25.jar -Dwrapper.key=... freenet.node.NodeStarter freenet.ini
也可在 Web 界面 /stats/ 页 Java Info 区核对(实测回显):
Used Java memory: 216 MiB
Allocated Java memory: 256 MiB
Maximum Java memory: 512 MiB
六、常见问题(FAQ)
6.1 提示 "Do not run this script as root"
run.sh 与安装器都拒绝/不建议 root 运行。切换普通用户执行(sudo -iu hyphanet),或为目录重新授权后由专用用户运行。
6.2 找不到 jps / jps 看不到节点进程
openjdk-17-jre-headless 仅含 JRE,不包含 jps。验证进程改用:
ps -ef | grep [f]reenet.node.NodeStarter
或访问 Web 界面 http://127.0.0.1:8888/diagnostic/ 查看版本、内存、线程信息。
6.3 stop 之后 start 卡住不动
停止机制依赖 anchor 文件(Anchor file deleted. Shutting down.)。实测出现过 stop 后 run.sh 无响应的情况,处理方法:
kill -9 <节点PID>
rm -f /opt/hyphanet/Freenet.anchor /opt/hyphanet/Freenet.pid
./run.sh start
6.4 想长期固定 JVM 内存
自动分配只在首次启动(memory.autolimit 不存在时)生效。直接按 5.2 节修改 wrapper.conf 的 initmemory/maxmemory 并重启节点即可,无需删除 memory.autolimit。
6.5 安装时 fontconfig 报错
无图形环境运行图形安装器可能触发字体相关报错,官方建议改用 -console 模式安装(本文 3.2 节即该模式)。
6.6 防火墙需要放行哪些端口
- 必须放行出方向(以及条件允许时的入方向)UDP 17420(Darknet)、UDP 39121(Opennet);
- TCP 8888(FProxy)、TCP 9481(FCP)默认只绑定
127.0.0.1,仅供本机访问,不要对公网放行; - NAT/无公网 IP 环境默认
node.assumeNATed=true即可正常出网连接。
6.7 首次启动后一直很慢、连接数少
正常现象:新节点主存储为空、路由未收敛,需要数小时到数天预热;可通过 /connectivity/ 页确认 UDP 连通性,/strangers/ 页查看 Opennet 连接进度(实测新节点约一小时连上 2/26)。
七、卸载与清理
实测卸载路径(卸载器文件已确认存在,卸载动作本身未实跑,按官方机制如实说明):
cd /opt/hyphanet
bin/remove_cronjob.sh # 1. 取消开机自启
./run.sh stop # 2. 停止节点
java -jar Uninstaller/uninstaller.jar # 3. 官方卸载器(交互确认)
卸载器仅清理程序文件;个人与运行数据需要手动删除,它们全部位于安装目录内(无系统级散落):
| 数据 | 位置 | 说明 |
|---|---|---|
| 主存储(占空间大头) | datastore/(约 17.4 GiB) | 网络缓存,可直接删 |
| 节点与客户端密钥 | master.keys、client.dat.crypt | 含节点身份,删除后不可恢复;迁移而非退役时应先备份 |
| 日志 | logs/、bin/wrapper.log | 按需留存 |
彻底清理(确认不再使用时):
rm -rf /opt/hyphanet
sudo userdel -r hyphanet # 可选:删除专用用户
配置备份与迁移的实测方法(tar 打包 + md5 校验)见本专栏《Hyphanet 0.7.5 常用 CLI 命令与工具详解》。
八、参考链接
- 官方下载页:https://www.hyphanet.org/pages/download.html(查询日期 2026-10-26)
- 本版发布标签:https://github.com/hyphanet/fred/releases/tag/build01507/
- 官方 Wiki(安装与自启说明):https://github.com/hyphanet/wiki/wiki
- 本专栏《Hyphanet 0.7.5 介绍与选型指南》:《Hyphanet 0.7.5 介绍与选型指南》