红米云
作者: wwk (公众号:解忧小角落)
设备: Redmi Note 7 Pro (代号: violet)
系统环境: LineageOS 23.2 (Android 16) + Magisk Root
核心目标: 打造一台 7x24 小时运行、支持原生 Docker、拥有完整 C++ 编译环境的便携 WebServer 服务器。
写在前面: 之前写过一篇文章是免root的,虽然开始上手简单,但是不能运行docker,Termux模拟的半吊子linux也不能获取root,总而言之如隔靴搔痒,怎么不得劲怎么来。所以有了这篇文档记录了将一台退役的骁龙 675 手机彻底改造为 Linux 容器服务器的全过程。从底层的 Bootloader 到内核层的 Cgroups 注入,再到应用层的 Android 16 杀后台破解,一路踩坑无数。谨以此文献给所有热爱折腾、不甘心让旧设备在抽屉里吃灰的极客们。
阶段一:破除枷锁与夺取底层控制权
要把手机变成服务器,第一步就是打破厂商的牢笼,拿到最高权限。
1. 解锁 Bootloader 与刷入 Recovery
-
解锁 BL :使用小米官方解锁工具,绑定账号并等待解锁周期(通常 168 小时)。这一步不难直接上网搜就行,总共就两步,但是后续一切操作的基石,还是要感谢雷军大帝,不过澎湃就要复杂些了,本文不展开讨论,也不建议这么折腾一遭,其实最好的选择就是把手机卖了,买个云服务器,但是折腾过来了就给同样还有ReadmiNote7Pro的同学们留下点东西吧。
-
准备工作:
在你的电脑上,请提前准备好以下弹药:
- ADB 与 Fastboot 工具包:这是与手机底层通信的命令行桥梁。
- 小米官方解锁工具 (Mi Unlock) :用于向官方申请解除设备的 BL 锁。
- OrangeFox Recovery 镜像 :专门为 Redmi Note 7 Pro (violet) 编译的版本(俗称"橙狐")。强烈建议解压下载好的 ZIP 包,提取出里面的
recovery.img文件放到电脑桌面备用。
-
刷入引导 (Recovery) :放弃原厂的 Recovery,使用
fastboot flash recovery recovery.img刷入强大的 OrangeFox Recovery 。它不仅支持触屏操作,还能完美解密高版本的 Androiddata分区。-
将手机关机,长按 电源键 + 音量减键 进入 Fastboot 模式,并连接电脑。
-
在电脑提取出的
recovery.img所在文件夹中,打开命令行终端(CMD 或 PowerShell)。 -
验明正身 :在终端输入
fastboot devices回车,如果返回了一串由字母和数字组成的序列号,且后面跟着fastboot,说明底层连接成功,如果没有稍等一会儿,我当时等了大概10S再执行命令就有了。 -
注入灵魂:敲下这行神圣的命令,将橙狐引导强行刷入恢复分区:
fastboot flash recovery recovery.img -
强行起飞(极其关键的防踩坑操作) :刷入成功后,千万不要用电源键或常规命令重启手机! MIUI 有一套极其流氓的恢复机制,一旦正常重启,它会把我们刚刷的 OrangeFox 强行覆盖回官方原版。请紧接着在终端敲入:
fastboot boot recovery.img这行命令会让手机绕过系统验证,立刻从你刚才注入的镜像中引导启动
-
-
允许修改 :首次进入 OrangeFox,系统可能会弹出警告并询问是否保持系统分区只读。直接滑动底部的滑块 "Swipe to Allow Modifications" (滑动以允许修改) ,我们需要绝对的读写权。
2. 破釜沉舟:彻底清理旧战场 (格式化与传包)
为了后续能够顺利刷入极高版本的 LineageOS 23.2,并解决 Android 底层的数据加密冲突,这一步是无法避免的阵痛。
-
格式化 Data (Format Data) :点击橙狐界面底部的垃圾桶图标 (Wipe),选择 Format Data 选项卡,输入
yes并确认。⚠️ 破釜沉舟警告 :执行
yes的那一刻,手机上的所有照片、通讯录、旧系统数据将被瞬间化为乌有,相当于硬盘的低级格式化。 -
重启到 Recovery :格式化完成后,千万不要立刻重启系统!依次点击
Menu -> Reboot -> Recovery,让橙狐在一个绝对干净的底层环境下重新启动。 -
💡 极其关键的传包操作 :此时手机内部存储已被完全清空。请用数据线连接电脑,电脑会将其识别为 MTP 设备。趁现在,将提前下载好的 LineageOS 安装包 和 Magisk 压缩包 复制到手机根目录。
3. 注入新魂:刷入 LineageOS 23.2 与 Magisk
- 刷入系统与 Root:在橙狐中点击 Install,先选中 LineageOS 的 ZIP 包刷入。为了防止重启丢失权限,紧接着选中 Magisk 压缩包一并刷入。
- 迎接新生:全部刷入完成后,点击 Reboot System,耐心等待第一次开机。彻底抛弃臃肿的 MIUI,一个极简的底层环境诞生了。
阶段二:永不拔管的硬件级改造 (供电策略)
作为一台 7x24 小时运行的服务器,长期插电会导致电池鼓包甚至爆炸。我们必须从底层修改供电逻辑。
-
部署 ACC (Advanced Charging Controller) :
- 在 Magisk 中安装 ACC 模块。
- 配置供电策略,开启 "电池直供" (Battery Idle Mode) 功能。
- 原理:当插着充电线时,主板直接从电源适配器取电,绕过电池。彻底消除电池寿命焦虑和安全隐患,让它真正具备"服务器"的物理素质。
阶段三:最硬核的"开胸手术"------交叉编译 Docker 内核
原厂内核缺失了 Docker 运行必须的 namespaces 和 cgroups 特性。为了解决这个问题,我动用了 i5-12600KF 宿主机的强大算力,亲自为 Violet 交叉编译了一颗跳动着 Docker 灵魂的"心脏"。
1. 准备编译环境 (Ubuntu)
拉取 Proton Clang 交叉编译工具链和 LineageOS 的官方 sm6150 内核源码。
Bash
bash
git clone --depth=1 -b lineage-21 https://github.com/LineageOS/android_kernel_xiaomi_sm6150.git kernel_violet
2. 注入 Docker 核心配置
加载基础配置 make O=out ARCH=arm64 CC=clang vendor/violet-perf_defconfig 后,必须在 .config 中强制开启以下特性:
- Namespaces :
CONFIG_NAMESPACES,CONFIG_UTS_NS,CONFIG_IPC_NS,CONFIG_USER_NS,CONFIG_PID_NS,CONFIG_NET_NS - Cgroups :
CONFIG_CGROUPS,CONFIG_CGROUP_FREEZER,CONFIG_CGROUP_DEVICE,CONFIG_MEMCG - 网络与文件系统 :
CONFIG_BRIDGE,CONFIG_VETH,CONFIG_OVERLAY_FS
3. AnyKernel3 打包与史诗级避坑 ⚠️
编译出 Image.gz-dtb 后,使用 AnyKernel3 打包。
-
天坑警告 :AnyKernel3 默认脚本中的挂载路径是老旧的
omap。必须手动修改anykernel.sh:Bash
ini# 错误路径:block=/dev/block/platform/omap/omap_hsmmc.0/by-name/boot; # 正确路径 (骁龙专用): block=/dev/block/bootdevice/by-name/boot; -
刷入:将修改好的 ZIP 包传入手机,通过 OrangeFox 一键刷入 boot 分区。内核手术成功!
阶段四:驯服 Android 16 与环境基建
有了内核支持,接下来是在 Termux 中搭建宿主环境。这一步与 Android 16 严苛的省电机制进行了长期的拉锯战。
1. 解决 Root 环境的"失忆"问题
在 Termux 中执行 su 会导致环境变量 $PATH 丢失(找不到 pkg 和 docker 命令)。 解法 :编写专用的入口脚本 enter-root.sh 强行注入环境变量:
Bash
bash
#!/bin/bash
su -c 'export PATH=/data/data/com.termux/files/usr/bin:$PATH; exec bash'
2. 暴打 Android 16 杀后台机制 (保活核心)
Android 16 引入了变态的冷冻器,导致 SSH 频繁断开。必须在 Root 权限下连下两道圣旨:
Bash
bash
# 1. 废掉幽灵进程杀手 (解除 32 个子进程限制)
su -c 'device_config put activity_manager max_phantom_processes 2147483647'
# 2. 彻底禁用系统级缓存应用冷冻器 (解决 SSH 息屏断连)
su -c "settings put global cached_apps_freezer_enabled false"
最后,在 Termux 通知栏点击 Acquire wakelock 获取电源锁。
阶段五:Docker 点火与 C++ 开发舱精装修
万事俱备,开始拉起 Docker 并部署 Ubuntu 开发环境。
1. 挂载 Cgroup 与启动引擎
编写 start-docker.sh 脚本,每次开机后自动挂载内核设备并静默拉起 dockerd:
Bash
bash
mount -t tmpfs -o mode=755 tmpfs /sys/fs/cgroup
mkdir -p /sys/fs/cgroup/devices
mount -t cgroup -o devices cgroup /sys/fs/cgroup/devices
nohup dockerd > ~/dockerd.log 2>&1 &
2. 创建终极 C++ 容器 (Host 网络模式) ⚠️
天坑警告 :Android 内核对虚拟网桥的 NAT 转发支持极差,导致容器内 apt update 卡死在 0%。 解法 :果断放弃桥接,使用 --net=host 让容器直接共享宿主机网络!
Bash
css
docker run -itd \
--name webserver \
--net=host \
--privileged \
-v /data/data/com.termux/files/home/project:/root/project \
ubuntu:22.04
3. 容器内精装修 (ARM64 换源与工具链)
进入容器 docker exec -it webserver /bin/bash。
-
ARM64 专属换源 :Ubuntu 的 ARM 架构不能用常规的
archive,必须替换ports域名!Bash
bashsed -i 's|ports.ubuntu.com|mirrors.aliyun.com|g' /etc/apt/sources.list -
安装 C++ 全家桶 :
apt update && apt install -y g++ cmake make git gdb libssl-dev openssh-server
4. 打通 PC 端 VS Code 远程开发
- 在容器内修改
/etc/ssh/sshd_config,将端口设为 2222 (避开 Termux 的 8022),并允许 Root 登录。 - 执行
service ssh start。 - 在 PC 端 VS Code 的 Remote-SSH 配置中填入手机 IP 及 2222 端口。
- 至此,手机完美化身 C++ 远程工作站。
结语:固化心血
经历了无数次的报错与重试,这个环境终于达到了完美的平衡状态。就用最后一行命令给这段旅程画上句号:
perl
docker commit webserver my-violet-server:RedmiServerv1
这台 Redmi Note 7 Pro,曾经陪伴过日常,曾在抽屉里吃灰,如今,它以服务器的姿态迎来了真正的赛博朋克式重生。
End of File.