家里云的另一种实现方式

2026 年 1 月 22 日 星期四
2

家里云的另一种实现方式

长期搞“家里云”,以前要么是动辄上百瓦的x86,要么是价格被炒高的arm小主机。本文章另一种实现方式:用闲置手机改,成本低、性能强,带电池还算个UPS)。

设备选择

这次选的是 一加6T (OnePlus 6T)。 骁龙845+8G+128G,大概 200块不到 就能拿下。 对比一下,现在同性能的ARM开发板或者树莓派,算上电源散热外壳,少说也要300-500往上。而且手机改完服务器,长期运行功率也就 5W不到,电费几乎可以忽略。 可以流畅跑Home assistant,青龙版本等等各种服务

系统选择

既然要长期稳定运行,Android肯定是不行的,限制太多。我们要刷真的Linux——PostmarketOS 。此系统基于alpine linux,大体使用与普通主机无区别。此文章基于v25.12版本的PostmarketOS。

刷机

去pmOS官网下载对应机型(oneplus-fajita)的包,解压出来拿到 boot.imguserdata.img。 手机进Fastboot,几行命令搞定:

fastboot flashing unlock # 手机上按音量键选解锁,电源键确认

fastboot erase dtbo

fastboot flash boot boot.img
fastboot flash userdata userdata.img

fastboot reboot

初始化 & SSH

重启后进入桌面:

  1. 触屏连上家里的WiFi。
  2. 打开终端,敲命令开SSH: Bash sudo systemctl enable --now sshd
  3. 看眼IP,电脑SSH连上去,把手机插一个地方就行了。

改时区:

sudo timedatectl set-timezone Asia/Shanghai
sudo timedatectl set-ntp true

电源管理:防鼓包脚本

长期插着电肯定怕电池鼓包。虽然不是旁路供电,但我们可以通过脚本控制充放电阈值(呼吸充电)。

原理就是改 /sys/class/power_supply/ 下的参数。我写了个带文件锁的脚本,防并发冲突。

脚本 battery_ctrl.sh

#!/bin/bash

# 路径根据机型可能不同,一加6t是这个
CHARGER_NODE="/sys/class/power_supply/pmi8998-charger"
BATTERY_NODE="/sys/class/power_supply/bq27411-0"
CTRL_FILE="$CHARGER_NODE/current_max"
CAP_FILE="$BATTERY_NODE/capacity"

# 阈值:65%停,50%充
MAX_CAP=65
MIN_CAP=50
CHARGE_uA=1500000 # 1.5A
STOP_uA=0

# 加个锁,防止脚本多开
LOCK_FILE="/tmp/battery_ctrl.lock"
exec 200>"$LOCK_FILE"
flock -n 200 || exit 1

if [ ! -f "$CTRL_FILE" ] || [ ! -f "$CAP_FILE" ]; then
    exit 1
fi

NOW_CAP=$(cat "$CAP_FILE")
NOW_SETTING=$(cat "$CTRL_FILE")

if [ "$NOW_CAP" -ge "$MAX_CAP" ]; then
    # 到了上限,切断电流
    if [ "$NOW_SETTING" -gt "$STOP_uA" ]; then
        echo "$STOP_uA" > "$CTRL_FILE"
    fi
elif [ "$NOW_CAP" -le "$MIN_CAP" ]; then
    # 掉到底线,恢复充电
    if [ "$NOW_SETTING" -lt "$CHARGE_uA" ]; then
        echo "$CHARGE_uA" > "$CTRL_FILE"
    fi
fi

flock -u 200

别忘了给权限,然后加到 Crontab 里每分钟跑一次:

chmod +x battery_ctrl.sh
# 输入 sudo crontab -e 添加:
* * * * * /root/battery_ctrl.sh

Docker以及各种服务的避坑指南

目前pmOS上Systemd还在完善中,直接 apk add docker 装完是用不了的。

你会发现起不来,报错 code=exited, status=1/FAILURE。这是因为官方包里的Systemd配置文件路径写歪了。

手动修正一下:

# 1. 建个目录
sudo mkdir -p /etc/systemd/system/docker.service.d

# 2. 强行覆盖ExecStart路径
printf "[Service]\nExecStart=\nExecStart=/usr/bin/dockerd\n" | sudo tee /etc/systemd/system/docker.service.d/override.conf

# 3. 重载,搞定
sudo systemctl daemon-reload
sudo systemctl restart docker

包括其他的服务,你也需要进行如上的操作,才能正常使用Systemd

外网访问

  • 有公网IPv6的直接跑个DDNS。
  • 没有的就挂个FRP

欢迎留言哦~

对此博文有任何问题欢迎交流哦~

本文章所有内容仅供学习和参考,作者已尽力确保其准确性。因跟随本文章操作而导致的任何数据丢失、设备损坏或其他直接或间接损失,作者概不负责。请在操作前务必做好数据备份,并自行承担所有风险。

使用社交账号登录

  • Loading...
  • Loading...
  • Loading...
  • Loading...
  • Loading...