Ubuntu 22.04 安装 Hyphanet 0.7.5 指南

Ubuntu 22.04 安装 Hyphanet 0.7.5(build 1507)指南:下载校验、console 模式安装、启动自启、JVM 内存调优、FAQ 与卸载清理,全流程实测。

HyphanetHyphanetJavaUbuntuUbuntu 22.042026/10/26

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 及以上运行环境;结合实测经验给出以下建议配置:

项目最低建议说明
CPU2 核加密与压缩运算密集
内存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.confJVM 服务包装器配置(内存、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.bindTo8888 / 127.0.0.1Web 界面端口与监听地址
fcp.port / fcp.bindTo9481 / 127.0.0.1FCP 应用协议端口
node.listenPort17420Darknet UDP 端口
node.opennet.listenPort39121Opennet UDP 端口
node.storeSize18736826286主存储字节数(约 17.4 GiB)
node.outputBandwidthLimit163840输出限速 160 KiB/s
node.inputBandwidthLimit1048576输入限速 1 MiB/s
security-levels.networkThreatLevelNORMAL网络威胁级别

全部参数逐项解释见本专栏《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 GB256 MB
≤ 2 GB512 MB
≤ 4 GB1024 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 命令与工具详解》。

八、参考链接