返回首页

在随身WiFi上开一个MC怀旧服

MCPE 0.14 服务器截图

前言

如何在一个廉价的OpenStick随身WiFi上面运行一个MCPE 0.14的怀旧服务器。

一个几十块钱的随身WiFi设备,刷上Linux系统后,居然能跑起一个Minecraft服务器。这篇文章记录了整个折腾过程。

什么是MCPE 0.14? MCPE (Minecraft Pocket Edition) 0.14 是2016年发布的老版本,属于"远古时代"的MCPE。这个版本没有鞘翅、没有末地、没有海洋更新,但很多人对这个版本有特殊的情怀——因为它是很多人第一次在手机上玩到的Minecraft。

硬件准备

系统刷机

首先需要把随身WiFi刷成Debian系统。这一步比较复杂,需要拆机短接测试点进入9008模式,然后使用QPST工具刷入固件。

刷机教程参考:CSDN - OpenStick刷机教程

注意 刷机有风险,可能会变砖。请确保你了解风险后再操作。刷完机后设备默认IP通常是192.168.1.x,通过SSH连接:
ssh root@192.168.1.3
# 默认密码: 1313144

配置Swap交换空间

OpenStick只有461MB内存,跑MC服务器很紧张。第一步就是配置Swap交换空间,把一部分存储当虚拟内存用。

为什么要配置Swap? 461MB的物理内存对于运行MC服务器来说非常紧张。Swap可以让系统在内存不足时,把不活跃的内存数据写入磁盘,避免OOM(内存溢出)导致进程被杀。对于这种低内存设备,Swap是必须的。

创建Swap文件(230MB):

dd if=/dev/zero of=/swapfile bs=1M count=230
chmod 600 /swapfile

格式化并启用Swap:

mkswap /swapfile
swapon /swapfile

设置开机自动挂载:

echo '/swapfile none swap sw 0 0' >> /etc/fstab

调整Swap使用倾向(让系统更积极使用Swap):

echo 'vm.swappiness=60' >> /etc/sysctl.conf
sysctl -p

验证Swap是否生效:

free -h

应该能看到Swap有230MB可用。

Swap大小建议 对于461MB内存的设备,建议Swap设置为200-300MB。太大会占用宝贵的存储空间,太小效果不明显。我设置了230MB,实际使用中Swap使用率经常到100%,说明确实不够用,但至少不会OOM。

安装编译依赖

Genisys服务器需要PHP 7.0 ZTS版本,系统自带的PHP版本不对,需要从源码编译。先安装编译所需的各种依赖包:

apt update
apt install -y build-essential autoconf pkg-config \
    libxml2-dev libsqlite3-dev libcurl4-openssl-dev \
    libssl-dev libgmp-dev libzip-dev libpng-dev \
    libonig-dev libjpeg-dev libfreetype-dev

编译PHP 7.0 ZTS

这是整个过程中最耗时的一步。在OpenStick的ARM处理器上编译PHP大约需要30-40分钟。

为什么必须是PHP 7.0 ZTS? Genisys服务器(支持MCPE 0.14的PocketMine分支)使用了多线程架构,需要PHP的ZTS(Zend Thread Safety)版本。而且它用了pthreads扩展,这个扩展只兼容PHP 7.0-7.2,更高版本的PHP API不兼容。所以必须编译PHP 7.0.33 ZTS。

下载PHP 7.0.33源码并解压:

cd /root
wget https://www.php.net/distributions/php-7.0.33.tar.gz
tar xzf php-7.0.33.tar.gz

配置编译选项(注意--enable-maintainer-zts是关键):

cd php-7.0.33
./configure \
    --prefix=/root/php70-zts \
    --enable-maintainer-zts \
    --enable-mbstring \
    --enable-sockets \
    --with-curl \
    --with-openssl \
    --with-zlib \
    --with-gmp \
    --with-sqlite3 \
    --enable-phar \
    --enable-xml \
    --enable-dom \
    --disable-cgi \
    --disable-phpdbg \
    --enable-cli \
    --disable-opcache \
    --disable-fileinfo \
    --without-pear \
    CFLAGS="-O1"

编译并安装(-j1单线程编译避免OOM):

make -j1
make install

这一步大约需要30-40分钟,耐心等待。如果用-j2可能会因为内存不足被OOM Killer杀掉进程。

编译PHP扩展

Genisys需要三个额外的PHP扩展:pthreads(多线程)、yaml(配置解析)、bcmath(大数运算)。

编译pthreads扩展(版本3.1.6,兼容PHP 7.0):

cd /root
wget https://github.com/krakjoe/pthreads/archive/refs/tags/v3.1.6.zip
unzip v3.1.6.zip
cd pthreads-3.1.6
/root/php70-zts/bin/phpize
./configure --with-php-config=/root/php70-zts/bin/php-config
make -j1
make install

编译yaml扩展(版本2.1.0,兼容PHP 7.0):

cd /root
wget https://pecl.php.net/get/yaml-2.1.0.tgz
tar xzf yaml-2.1.0.tgz
cd yaml-2.1.0
/root/php70-zts/bin/phpize
./configure --with-php-config=/root/php70-zts/bin/php-config
make -j1
make install

编译bcmath扩展(使用PHP源码自带的扩展):

cd /root/php-7.0.33/ext/bcmath
/root/php70-zts/bin/phpize
./configure --with-php-config=/root/php70-zts/bin/php-config
make -j1
make install

创建php.ini,让PHP启动时自动加载这些扩展:

cat > /root/php70-zts/lib/php.ini << 'EOF'
extension=pthreads.so
extension=yaml.so
extension=bcmath.so
EOF

部署Genisys服务器

PHP环境准备好后,就可以部署Genisys服务器了。Genisys是PocketMine-MP的一个分支,专门为MCPE 0.14设计。

下载开服包并解压(或者使用本文底部的一键开服包):

mkdir -p /root/server/plugins
cd /root/server
# 将PocketMine-MP.phar和插件文件放到对应目录

启动服务器:

cd /root/server
/root/php70-zts/bin/php PocketMine-MP.phar --no-wizard

第一次启动会自动生成世界和配置文件,大约需要10-20秒。

后台运行服务器(关闭SSH后服务器继续运行):

nohup /root/php70-zts/bin/php PocketMine-MP.phar --no-wizard > server.log 2>&1 &

服务器性能实测

在OpenStick上运行MCPE 0.14服务器的实际性能表现:

服务器负载监控

服务器运行时的系统监控面板

指标 数值 说明
CPU使用率 4% 大部分时间很空闲
系统负载 0.23, 0.34, 0.26 非常低,没有瓶颈
内存使用 365M/461M (79%) 比较紧张但可用
Swap使用 230M/230M (100%) 满了,说明内存确实不够
启动时间 约15-20秒 可以接受
支持玩家数 2-3人同时在线 超过会卡顿
性能瓶颈在哪里? 主要瓶颈是内存,不是CPU。461MB内存对于MC服务器来说确实太少了,Swap被100%占满说明系统经常需要在内存和磁盘之间交换数据。如果想要更好的体验,建议同时在线人数不超过2-3人,世界大小不要超过100MB。

服务器插件

我为这个服务器配置了以下插件:

插件 功能 状态
登录插件 (Protection) 玩家注册/登录系统 正常
经济核心 (EconomyAPI) 游戏内经济系统 正常
领地 (FResidence) 领地保护系统 正常
座椅 (Seat) 可以坐在椅子上 正常
邮件 (ServerMail) 玩家互发邮件 正常
防OP滥用 (plcmd) 防止OP权限被滥用 正常
生物插件 (WPureEntities) 生物生成控制 正常
别踩白块 小游戏 正常

一键开服包

为了方便大家快速开服,我打包了一个一键开服包,包含了所有必要的文件(PHP二进制、扩展、服务器核心、插件、配置文件):

下载开服包 (4.8MB)
开服包使用方法
  1. 解压开服包到任意目录
  2. Linux用户运行 ./start.sh
  3. Windows用户双击 启动服务器.bat
  4. 等待服务器启动完成(约15-20秒)

连接服务器

服务器启动后,使用MCPE 0.14客户端连接:

  1. 打开Minecraft PE 0.14
  2. 点击"游戏"
  3. 点击"新"添加服务器
  4. 服务器名称随意填,地址填你的设备IP
  5. 端口默认19132,不用改
  6. 点击服务器加入
服务器常用命令
  • /register 密码 密码 - 注册账号(第一次进服必须注册)
  • /login 密码 - 登录
  • /tpa 玩家名 - 请求传送到其他玩家
  • /sethome - 设置家的位置
  • /home - 回到设置的家
  • /gamemode 1 - 切换创造模式(需要OP权限)
  • /setspawn - 设置服务器出生点(需要OP)
常见问题
  • 连不上服务器? - 检查IP是否正确,确保手机和随身WiFi在同一局域网
  • 服务器卡顿? - 可能是内存不足,尝试减小view-distance配置
  • RakLib崩溃? - 端口被占用,运行fuser -k 19132/udp释放端口后重启
  • 无法破坏方块? - 需要先注册登录(/register 密码 密码

维护技巧