LK 博客
如何在 RV1126B 开发板上部署 Minecraft 服务器
嵌入式
约 1 分钟阅读 0 赞 0 条评论 鸿蒙黑体

如何在 RV1126B 开发板上部署 Minecraft 服务器

Yukikaze
Yukikaze @Yukikaze
累计点赞 0 登录后每个账号只能点一次
内容长度 0 正文词元数
正文
目录会跟随阅读位置移动。
阅读进度

1. 前言

ARM 开发板通常更多用于边缘计算、视觉推理、网关服务或嵌入式应用,但只要系统环境合适,它同样可以承载一些轻量级通用服务。本文记录一次在 ELF-RV1126B 开发板 上部署 Paper Minecraft 服务器 的完整过程,包括 Java 版本选择、存储目录规划、服务端安装、systemd 自启动配置,以及资源受限平台上的一些实际考虑。

本文使用的平台配置如下:

  • 开发板:ELF-RV1126B
  • SoC:Rockchip RV1126B
  • CPU:4 × Cortex-A53 @ 1.6GHz
  • NPU:3 TOPS @ INT8
  • RAM:4GB LPDDR4
  • eMMC:64GB
  • 操作系统:Debian 12

本文目标不是构建高并发、大型插件服,而是部署一个适合 小人数联机 的轻量级 Minecraft 服务器。

2. 版本选择:为什么采用 Java 17 与 Paper 1.19.4

在 ARM 开发板上部署 Minecraft 服务端,第一步不是下载安装,而是先确定 Java 版本服务端版本 的兼容关系。

本次环境中,Debian 12 仓库直接可用的是 ·openjdk-17· 系列,因此优先考虑 Java 17 对应的服务端版本。综合兼容性、资源占用与部署复杂度,最终采用:

  • Java:OpenJDK 17
  • 服务端:Paper 1.19.4

这样选择的原因主要有三点:

2.1 Java 17 可直接通过系统包管理器安装

不需要额外配置第三方源,也不需要手工部署新版本 JDK,维护成本较低。

2.2 Paper 1.19.4 对 Java 17 兼容成熟

相比更新的 Minecraft 版本,1.19.x 对 Java 版本要求更温和,更适合在 ARM 小板上做轻量部署。

2.3 Paper 更适合资源受限平台

相较于原版服务端,Paper 在性能和可调优性方面更适合低功耗、小内存设备,尤其是在多人联机或区块加载频繁的情况下更明显。

3. 存储规划:为什么不把服务器放在根分区

这块板子的实际分区结构中,根分区空间较小,而 /userdata 分区容量明显更充裕。部署过程中,根分区空间很快暴露出限制。

查看磁盘情况时,系统状态大致如下:

  • / 根分区容量较小,仅剩数百 MB 可用
  • /userdata 分区仍有数十 GB 可用空间

这类布局在开发板上很常见,因此如果直接把 Java、服务端文件、世界存档、日志等都压在根分区,后续会很快遇到空间瓶颈。

因此本次部署遵循两个原则:

  • 安装必须的系统软件时,优先解决 APT 缓存占用问题
  • Minecraft 服务目录统一放到 /userdata

4. 解决 APT 缓存占用问题

在安装 Java 时,APT 直接提示缓存目录空间不足:

E: You don't have enough free space in /var/cache/apt/archives/

这说明虽然 /userdata 空间充足,但默认的软件包缓存仍写入根分区。

处理方法是将 APT 缓存目录迁移到 /userdata。步骤如下:

4.1 清理现有缓存

sudo apt clean
sudo apt autoclean
sudo apt autoremove -y

4.2 在 /userdata 创建新的缓存目录

sudo mkdir -p /userdata/apt-archives
sudo chown root:root /userdata/apt-archives
sudo chmod 755 /userdata/apt-archives

4.3 替换原有缓存目录为软链接

sudo mv /var/cache/apt/archives /var/cache/apt/archives.bak
sudo ln -s /userdata/apt-archives /var/cache/apt/archives

4.4 验证结果

ls -ld /var/cache/apt/archives
df -h /var/cache/apt/archives /userdata

这样一来,后续通过 apt 下载的安装包就会写入 /userdata,避免根分区继续承压。

5、安装 Java:只求朴素,不求花哨

因为目标是纯服务端运行,所以没必要装完整桌面 Java 开发环境,直接上:

sudo apt update
sudo apt install -y openjdk-17-jre-headless curl jq

检查一下版本:

java -version
which java

结果正常的话,会看到类似:

openjdk version "17.0.18"
...
/usr/bin/java

到这里,Java 环境就算就位了。

6、下载 Paper:终于进入正题了

服务端选的是 Paper 1.19.4。

下载方式直接用接口拉最新稳定构建,最终会得到一个 paper.jar。

下载完之后,目录里会有:

/userdata/minecraft/paper.jar

看到那个几十 MB 的 jar 出现时,会有一种很奇妙的感觉:

好,边缘 AI 板子,现在开始准备承载方块世界。

7、第一次启动:熟悉的 EULA 环节虽迟但到

第一次启动还是很标准的:

sudo -u minecraft bash -c 'cd /userdata/minecraft && java -Xms1G -Xmx2G -jar paper.jar --nogui'

正常情况下,第一次主要是让它:

  • 解压依赖
  • 生成默认配置
  • 提示你同意 EULA

然后手动写:

echo 'eula=true' > /userdata/minecraft/eula.txt

之后再启动,就能看到 Paper 正常初始化:

  • 加载 properties
  • 准备世界
  • 监听 25565
  • 准备 level "world"

当时看到它真的开始 Preparing level "world",那一瞬间还是很开心的。

因为这不是在一台正常 x86 服务器上,而是在一块 RV1126B 开发板上。

这感觉有点像:

你原本以为它该去跑视觉推理,结果它认真地开始生成草方块和树。

8、内存怎么配:别上来就梭哈 4G

板子总内存是 4GB, 但这不代表你可以自信地给 Java:

-Xmx4G

那样大概率不是你在玩 Minecraft, 而是 Linux 在陪你玩“谁先 OOM”。

我最后给的启动参数比较保守:

-Xms1G -Xmx2G

这个配置的意思大概是:

  • 给 Minecraft 1G 起步
  • 最多吃到 2G
  • 剩下空间给系统、缓存、其他进程

对于这类板子,内存参数的哲学不是“堆越大越强”,而是:

留点余地,大家都好过。

9、把它做成 systemd 自启动:它现在真的是个服务器

临时能跑不算什么, 开机自启动 才是“它现在真的是个服务器”那种感觉。

一个很简单的启动脚本:

#!/usr/bin/env bash
cd /userdata/minecraft || exit 1

exec /usr/bin/java \
  -Xms1G \
  -Xmx2G \
  -jar paper.jar \
  --nogui

然后再配一个 minecraft.service,让 systemd 去托管它。

大意上就是:

  • 指定用户 minecraft
  • 工作目录 /userdata/minecraft
  • 启动执行 start.sh
  • 失败自动拉起

这样一来,后面就可以:

sudo systemctl start minecraft
sudo systemctl stop minecraft
sudo systemctl restart minecraft
sudo systemctl status minecraft
journalctl -u minecraft -f

不得不说, 当你第一次在开发板上敲下:

sudo systemctl enable minecraft

那种感觉已经完全不是“在玩具上折腾”,而是:

行,这台板子现在也是个正儿八经的小服务器了。

10、为了以后好管理,开 RCON 吧

既然已经是服务器了,那肯定不想每次都手动趴在前台控制台上操作。 所以后面还顺手开了 RCON

server.properties 里打开:

enable-rcon=true
rcon.port=25575
rcon.password=你自己的密码

然后就可以用 mcrcon 之类的客户端去发命令,比如:

mcrcon -H 127.0.0.1 -P 25575 -p '你的密码' list

这样后面无论是:

  • 看在线人数
  • 发广播
  • 下插件命令
  • 管理 Chunky 预生成

都会轻松很多。

11、预生成区块:为了不让朋友一进服就帮你测压力极限

开发板跑 MC 最大的问题之一,不是“能不能启动”,而是:

有人一边跑图一边开新区块时,板子会不会当场开始怀疑人生。

所以后面我又准备装 Chunky 做区块预生成。

逻辑很简单:

  • 提前把主世界周边地形生成出来
  • 减少玩家乱跑时的即时区块生成压力
  • 对这种低功耗小板子尤其有意义

如果只打算几个人轻度玩,我建议一开始不要太贪,先设个比较克制的半径,比如:

  • 3000
  • 稳了再去 5000

别一上来就做“世界尽头都给我生成完”, 那种想法通常只存在于心很热、CPU 很冷的时候。

12、写在最后

如果要总结,我觉得不是“RV1126B 能不能跑 MC”。

因为答案已经很明确了:

能。

真正有意思的是,你会在这个过程中重新理解一遍:

  • Linux 小系统怎么分区
  • 根分区和数据分区怎么取舍
  • Java 在 ARM 板子上的现实配置
  • Paper 为什么比原版更适合轻量部署
  • systemd 托管一个服务到底有多舒服
  • RCON、插件、预生成这些东西真正落地是什么感觉

而且当你在一块平时拿来搞嵌入式边缘计算的板子上,看着它认真地监听 25565 的时候, 会有一种很奇妙的技术快乐:

原来“服务器”这件事,本质上也没那么神秘。

不过就是:

  • 一个能跑 Java 的系统
  • 一点点空间
  • 一点点内存
  • 一些耐心

很多看起来“不是给这个用的东西”,其实只要资源够、思路对,就真的能拿来用。

开发板不一定非得只跑推理。 它也可以在某个晚上,安安静静地替你托管一个小小的方块世界。

作者名片

Yukikaze
Yukikaze
@Yukikaze

私にできることなら何でもするから

评论区
文章作者和管理员都可以管理这里的评论。
0 条评论
登录后即可参与评论。 去登录
还没有评论,欢迎留下第一条交流内容。