家里云 vol.1 - 手机变成服务器

·

0. 前言

最近一直在关注服务器,俗称小鸡(Viturl Private Server, VPS)。服务器主要看为线路和配置两方面,线路就是网好不好,配置就是性能高低。线路好的机器一般配置低且太贵,配置好的机器不仅贵还线路差,直连基本不可用,笔者没有什么“正经业务”,也不想为此额外付费。

想起我的第二个旧手机 OnePlus 6T。很早就听闻这款手机对于不同的系统适配性很好,搜索了一下果然如此:不仅能刷一些Linux发行版,居然还能刷Windows(给手机装Windows11!还能玩大型游戏?!- Bilibili)。这也激起了我的好奇心:如果手机能刷成Linux,那岂不是能放在家里做一个小型服务器?况且对比x86的整机而言,功耗还很低,省下一部分用来买服务器的钱的同时,也能省不少的电费:)。 一不做二不休,先调研一下可行性。

1. 调研

由于想用来做服务器,所以 Windows 系统并不在我的考虑范围之内。借助 Grok 的搜索能力,帮我圈定了几种系统:

发行版推荐基础系统硬件支持概况安装方式说明
postmarketOSAlpine LinuxWiFi/蓝牙/数据/屏幕/触控/GPU 良好;音频、相机、GPS 部分可用fastboot最成熟的主线方案
Ubuntu TouchUbuntu + Halium通话/SMS/数据/WiFi/蓝牙/相机/GPU 等大多可用UBports Installer成熟的手机向系统
Sailfish OSLinux (Mer Core)整体支持较好(社区反馈日常可用)fastboot / TWRP社区维护的替代移动系统
Mobian / DroidianDebian早期支持,基础功能可用,维护活跃度低较复杂Debian 生态
Fedora AtomicFedora实验性支持(OP6 有尝试,6T 类似硬件)实验性流程OnePlus 6T 支持仍在发展中

综合考虑下来,还是选择 postmarketOS 作为系统。Alpine Linux 是 Linux 生态中较常见的轻量级发行版之一,有比较好的兼容性同时也比较轻量,对于手机这样的设备而言相对友好。笔者也尝试了刷Mobian,但刷完之后一直无法正常开机。而其他如Ubuntu Touch需要原系统刷机,我解锁bootloader已经清空了数据,不想再进系统,能够直接fastboot线刷最好。

2. 刷机

刷机过程分为以下几步:

  1. 解锁bootloader(注意,会清空所有数据,先备份)
  2. 下载postmarketOS镜像
  3. 连接usb,fastboot线刷
  4. 移除usb,reboot完成刷机

对于OnePlus6T而言,解bl锁非常容易。进入开发者模式,打开OEM锁和adb调试即可,可以参考视频

2.1 postmarketOS镜像

OnePlus6T 的代号为 oneplus-fajita。在postmarketOS官网可以找到最新当前最新的版本为v26.06。点开后可以看到有4种不同的图形界面,分别为:

  • phosh:是手机上的 GNOME 风格 Shell
  • plasma-mobile:是 KDE Plasma 的手机版
  • gnome-mobile:是 GNOME Shell Mobile
  • sxmo-de-sway:是 Sxmo 桌面环境 + Sway Wayland 合成器

此处笔者选择的 phosh,除了第4个 sxmo-de-sway可能过于简略,其他三个大差不差,按需选择。

homelab-1.png

同时下载最新版本的两个镜像:xxxx-oneplus-fajita-boot.img.xzxxxx-oneplus-fajita.img.xz。下载完成后本地解压缩。

2.2 fastboot线刷

接下来就是将系统刷入手机。首先需要在电脑安装fastboot,macOS可直接使用homebrew安装:brew install --cask android-platform-tools.

  • fastboot模式官方的Wiki指引中提到,同时按住 Volume Up + Volume Down + Power,进入Fastboot模式,之后手机usb连接电脑。并通过 fastboot devices命令确认已经成功连接。
  • fastboot刷机:接下来按照如下命令线刷,先切换到b分区,刷入boot,刷入系统,然后重启。
fastboot --set-active=b
fastboot flash boot xxxx-oneplus-fajita-boot.img
fastboot erase userdata
fastboot -S 200M flash userdata xxxx-oneplus-fajita.img.xz
fastboot erase dtbo
fastboot reboot

写入系统镜像时间会长一些,笔者用了3分钟左右,reboot之后就可以移除usb了。重启完成进入系统,初始用户名为user,密码为147147

![初始用户名和密码](./家里云-vol1-手机变为服务器-assets/homelab-2.png)

c285a9f46dff6633adb6cda063e4b941.jpg

3. 设置

在能够访问ssh服务器之后,进一步修改相关设置和安装必要的程序,来提升服务器的可用性和易用性。

3.1 联网

启动之后,先处理联网的问题。打开Wifi,连接家里的无线网络。如果想通过ssh在内网中连接手机,开需要开启系统的sshd服务。
打开手机的console APP,根据官方指引中,使用

sudo systemctl start sshd
sudo systemctl enable sshd

来启动和自动启动服务。

开启sshd服务之后,在路由器中查找设备的内网ip。以笔者所使用的路由器为例,可以在接入设备中查看所有接入网络设备的IP内网设备,并根据设备MAC地址,绑定静态IP地址。这样在手机重启,或者有新的设备加入网络之后,手机的IP是固定不变的,方便在内网中连接设备。

homelab-3.png

之后就可以使用 ssh user@192.168.5.6 连接服务器了。

除了连接问题,笔者还发现从PC经内网ping手机服务器的延迟高达40ms,经过一番查阅,是由于默认手机的网络默认设置为节能模式,导致网络连接不稳定,通过iw关闭对应网卡的节能模式,并将手机的性能调整为balanced

iw dev wlan0 set power_save off
iw dev wlan0 get power_save

sudo mkdir -p /etc/NetworkManager/conf.d
sudo tee /etc/NetworkManager/conf.d/wifi-powersave-off.conf > /dev/null <<'EOF'
[connection]
wifi.powersave = 2
EOF

sudo systemctl restart NetworkManager

iw dev wlan0 get power_save

if command -v powerprofilesctl >/dev/null 2>&1; then
  powerprofilesctl list
  sudo powerprofilesctl set balanced
  powerprofilesctl get
fi

也可以考虑其设置为服务,开机自动执行。

3.2 换源

postmarketOS 默认使用国外的Alpine Linux镜像源,导致下载速度很慢。安装nano编辑器,并通过nano修改文件 nano /etc/apk/repositories,题换为清华源。

# https://mirror.postmarketos.org/postmarketos/extra-repos/systemd/v26.06
# https://mirror.postmarketos.org/postmarketos/v26.06
# http://dl-cdn.alpinelinux.org/alpine/v3.24/main
# http://dl-cdn.alpinelinux.org/alpine/v3.24/community

http://mirrors.tuna.tsinghua.edu.cn/postmarketOS/v26.06
http://mirrors.tuna.tsinghua.edu.cn/alpine/v3.24/main
http://mirrors.tuna.tsinghua.edu.cn/alpine/v3.24/community

再使用 apk update 的速度飞快。

3.3 定时任务

为保证整个服务器运行的稳定性,还安装cronie启动crontab,能够编辑定时执行的脚本。

# 1. 安装
apk add cronie networkmanager bash

# 2. 写服务脚本
cat > /etc/systemd/system/crond.service <<'EOF'
[Unit]
Description=Cron daemon
After=network.target

[Service]
Type=simple
ExecStart=/usr/sbin/crond -n -s
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target
EOF

## 3. 重启
systemctl daemon-reload
systemctl enable --now crond
systemctl status crond

3.4 安装docker

后期免不了使用docker来运行一些程序。docker配置过程如下:

# 1. 安装 docker 和 docker compose
sudo apk add docker docker-cli-compose
# 2. 关闭防火墙,否则要手动放行端口
sudo systemctl stop nftables 
# 3. 重启docker服务
sudo systemctl restart docker

6.1.4 状态价值 TDLearning

123

longshot20260709195232.png

1 条评论

留下评论