红米2刷PostmarketOS打造ARM服务器(完全篇)
之前我关于PostmarketOS的内容是分几次完成的,其中有不少的错误和疏漏之处。为了便于感兴趣的朋友查找资料,我做了一次整理,删除了一些试错的内容。同时让内容变得更加完整,希望对于大家找资料有一定帮助。
手机安装原生Linux系统,目前最成熟的两个方案:1.Ubuntu Touch;2.PostmarketOS。
Ubuntu Touch我体验之后觉得系统做的稀烂,没有任何兴趣深入。
PostmarketOS基于Alpine Linux,支持的旧手机型号比较多。作为原生的完整Linux系统,可玩性很不错。国内最佳的刷机设备是红米2:功能支持全、没有BootLoader锁刷机简单、价格便宜刷坏不心疼。(要刷PostmarketOS,红米2必须是高通骁龙410的那款才兼容,1G+8G或2G+16G均可。不要小看这配置,论性能吊打现在溢价离谱的树莓派3B+没有任何问题)。
1.刷机
原生的安卓fastboot无法引导到Linux系统,所以刷机前手机需要刷一个ln2nd的“伪”fastboot,安装文件可以去GitHub上找。下载镜像后手机连接电脑进入fastboot模式,刷入ln2nd(关机后:音量减 + 关机键)
#fastboot flash:raw boot ln2nd.img
如果你买的是1+8G的红米,默认系统是安卓4.4,可能刷不进ln2nd。需要刷一次高配版的ROM(刷机后可以正常开机,安卓版本升级到了5.1)。
#安装必备软件
sudo apt install python3 git fastboot python3-pip
#安装pmbootstrap
pip3 install --user pmbootstrap
接下来是最重要的过程:配置pmbootstrap(建议看一下官方的文档,我这里做一个简单的配置过程介绍):
pmbootstrap init
#安装文件保存路径,默认即可
Work path
#postmarketOS发行版,默认是滚动更新版,可以选稳定版
Choose the postmarketOS release channel.
#选择手机品牌,全英文,可以在官方wiki查询红米属于xiaomi
Choose your target device vendor
#选择手机型号,官方wiki查询,红米2是wt88047
Available codenames
#是否安装驱动,默认选是
Enable this package?
#设置用户名
Username
#选择操作界面,如果是纯命令行选fbkeyboard,其余可以gnome、sxmo等
Available user interfaces
#后续的配置选择默认即可
配置完毕,输入下面的命令开始下载和打包:
pmbootstrap install
整个下载打包配置过程大概会用到1个小时左右。打包完成后手机进入ln2nd的伪fastboot模式开始准备安装(开机震动后按音量减)。
如果不通过这种方式打包,也可以直接在官网下载镜像刷机。
#查看是否正常连接
fastboot devices
#开始刷机
pmbootstrap flasher flash_rootfs
pmbootstrap flasher boot
#刷机完成
fastboot reboot
别看PostmarketOS界面简单,但比Ubuntu Touch好玩多了,SSH、Docker都可以跑起来,只是图形化界面不太流畅,但是玩Linux系统的人都知道SSH才最重要。
2.跑分
Alpine Linux下没想到Unixbench可以直接用apk包管理安装,跑分很简单:
sudo apk add unixbench
ubench whets dhry
我做了个简单的跑分,单核251(树莓派4B单核跑分也就290左右)。
发现仅有单核成绩,后面查资料发现因为刷的lk2nd版本是0.9仅开启了单CPU,而刷了0.11版后的lk2nd后可以开启全核后。完整的跑分Unixbench单核233、多核926:
PostmarketOS可以轻松地开启SSH,另外PostmarketOS自带USB网卡驱动,用数据线连接电脑可以直接共享电脑的网络(不需要路由器也能SSH你说放不方便),通过172.16.42.1就可以访问PostmarketOS。:
sudo rc-service sshd start
sudo rc-update add sshd
这样下来手机真的可以作为一台完全的ARM小服务器。接下来想装个zerotier组虚拟局域网,没想到官方源里直接有打包,所以说Alpine Linux真强:
#安装zerotier
apk add zerotier
#开启虚拟网卡
modprobe tun
#运行zerotier
zerotierzerotier-one -d
zerotier-cli join
#查看运行状态
zerotier-cli listnetworks
#如果运行出错,结束进程重新运行
killall -9 zerotier-one
zerotierzerotier-one -d
#让zerotier开机自启动
sudo rc-update add zerotier
部署了zerotier,这个ARM服务器就成了我诸多设备的一个node了。家庭服务器的玩法都可以如法炮制:
3.修改ash为bash
PostmarkOS默认为ash.ash我不太熟,所以改为bash顺手一点(主要是为了配置bashrc)。PostmarkOS默认已经安装了bash,如果没有的话先安装一下:
#安装bash
sudo apk add bash
#修改默认配置
sudo vim /etc/passwd以root账户为例修改其默认sh
root:x:0:0:root:/root:/bin/ash
#把上面这行改为下面的
root:x:0:0:root:/root:/bin/bash
新建一个.bashrc文件用于配置别名,后面的例子会介绍.bashrc的用法
sudo vim .bashrc
4.局域网开机设备
Alpine Linux没有wakeonlan安装包,我下了个c语言的wakeonlan源码编译:
#解压后编译
gcc wakeonlan.c -o wol
#把编译好的文件复制到bin文件夹方便调用
cp wol /bin/wol
有wol mac地址的命令太长不好记,所以要设置别名方便远程操作,之前我已经介绍如何切换为bash且生成bashrc文件,接下来编辑它:
sudo vim /home/.bashrc
#由于我有三台主机所以添加3个别名
alias wolxzj='wol mac1'
alias wolzj='wol mac2'
alias wolbjb='wol mac3'
由于我已经安装了zerotier,所以我可以远程SSH手机,通过手机唤醒局域网内的其它设备:输入wolxzj就可以唤醒我的小主机,wolzj就可以唤醒我的主机,wolbjb就能唤醒笔记本,然后再可以分别操作这些设备。是不是很省电。
5.安装Docker
PostmarketOS可以安装docker:
sudo apk add docker
sudo service docker start
sudo rc-update add docker default
安装docker后会遇到一个问题,防火墙让docker的端口无法通过远程访问。虽然官方文档里介绍了可以通过防火墙规则允许docker通信,但我按照官方指引配置/etc/nftables.d后无效:
#!/usr/sbin/nft -f
table inet filter {
chain input {
iifname "docker*" accept comment "Allow incoming network traffic from Docker"
}
chain forward {
iifname "docker*" accept comment "Allow outgoing network traffic from Docker"
ct state {established, related} counter accept comment "accept established connections"
}
}
于是我直接关了防火墙(毕竟是个人用的也没有公网,所以关闭防火墙影响不大):
sudo service nftables stop
sudo rc-update del nftables
这下docker可以正常访问了。
由于手机CPU是ARM指令集,所以下载镜像时也要搜索ARM镜像。我安装了一个speedtest进行测速,在USB连接模式下红米2测速可以达到100兆,而在wifi连接下,测速则只有20兆:
红米2的内存太小,带不起多个Docker。而且8G空间装不了几个镜像,可以考虑通过OTG拓展扩容。
6.OTG扩容
有朋友问OTG怎么解决充电问题?我还真找到一个完美解决方案。关键词“充电OTG线”,虽然介绍说仅支持平板电脑不支持安卓手机。但是事实上红米2刷PostmarketOS后可正常充电+OTG,3USB口+1个充电口的OTG线也就14元。将充电线插入OTG充电口,档位调到charge。然后插上500G硬盘和一个64GU盘,连接红米手机。
首先确认手机正在显示示充电,然后SSH连接红米2。由于postmarketOS不会自动挂载硬盘,所以一开始使用df -h命令看不到磁盘,需要用到lsblk命令:
#查看所有硬盘用lsblk或fdisk -l
lsblk
#查看硬盘UUID
sudo blkid
可以看到500G的硬盘和64G的U盘正常识别,接下来需要挂载才能使用。记下硬盘名字,然后根据名字查看对应的UUID。创建一个目录用于挂载硬盘,然后把挂载命令写入/etc/fstab:
#创建挂载文件夹
sudo mkdir /media/twindows
#设置自动挂载
sudo vim /etc/fstab
UUID="00BC-614E" /home/sd ext4 defaults 0 0
#让挂载命令生效
sudo mount -a
注意分区格式一定要正确,如果你的硬盘是ntfs等Windows格式需要安装软件ntfs-3g。如果安装了ntfs-3g挂载命令如下:
UUID="00BC-614E" /home/sd ntfs-3g rw 0 0
挂载硬盘之后可以开启Samba共享也可以安装aria2做下载机,是不是有点像NAS了。不过红米2WIFI速度太慢所以实际表现一般。
7.aria2c下载机
有了扩容方案,这台红米2还可以作为下载机了,毕竟低功耗挂机神器。搭建下载机自然少不了aria2:
sudo apk add aria2
aria2的配置,我这个是简版:
# 保存目录
dir=/home/downloads
# 断点续传
continue=true
# 任务目录设置
input-file=/etc/aria2/aria2.session
save-session=/etc/aria2/aria2.session
# 定时保存任务
save-session-interval=60
# 启用RPC
enable-rpc=true
# 允许所有来源
rpc-allow-origin-all=true
# 允许外部访问
rpc-listen-all=true
# RPC端口,默认6800如果被占用可修改
# rpc-listen-port=6800
# 设置的RPC授权令牌
rpc-secret=password
带配置的启动aria2命令有点长,所以还是通过.bashrc设置别名解决:
sudo vim /home/.bashrc
alias runaria2='aria2c --conf-path=/etc/aria2/aria2.conf -D'
8.Samba共享
既然做下载机了肯定要开Samba共享:
sudo apk add samba
sudo rc-update add samba
sudo rc-service samba start
设置一下samba登陆用户和密码
sudo smbpasswd -a username
然后编辑samba的配置文件
sudo vim /etc/samba/smb.conf
#在share里增加想共享的路径
[share]
comment = share
path = /home
public = yes
writable = yes
printable = no
browsable = yes
valid user = username
9.安装Nginx
虽然红米2性能很弱,但这是在图形化界面的使用感受。如果是作为小服务器,其性能还是挺强的,至少搭建个人网站没问题。如果你有域名和云服务器,通过nginx部署,借用云服务上的nginx搭建反向代理功能,就可以让别人在公网访问你的网站了:
sudo apk add nginx
sudo rc-update nginx
sudo rc-service nginx start
看了这么些是不是觉得PostmarkOS麻雀虽小五脏俱全,玩法确实很多。但不得不说手机扩展性太弱是一个非常大的瓶颈,制约了更大的可能性。但也让几十块的二手手机发挥了最大的价值。
作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~
窜着买
校验提示文案
是小黄皮耗子
校验提示文案
70FUN
校验提示文案
未完执念
校验提示文案
折翼的奥尔良烤鸡翅
校验提示文案
vxlinjie
校验提示文案
胡桃树
校验提示文案
[已注销]
校验提示文案
外面在下雨
校验提示文案
Wasam
校验提示文案
值友8259873149
校验提示文案
lanmei
校验提示文案
捷Q大叔
校验提示文案
值友6092861098
校验提示文案
encry
校验提示文案
值友7936353853
校验提示文案
Sailoe
校验提示文案
flying-v6
校验提示文案
凡有相皆虚妄
校验提示文案
K677
校验提示文案
值友3588212875
校验提示文案
值友1685324953
校验提示文案
值友9312268635
校验提示文案
尼摩船长88
校验提示文案
JAYWONG
校验提示文案
白芝麻狐
校验提示文案
K677
校验提示文案
凡有相皆虚妄
校验提示文案
flying-v6
校验提示文案
Sailoe
校验提示文案
值友7936353853
校验提示文案
encry
校验提示文案
值友6092861098
校验提示文案
捷Q大叔
校验提示文案
lanmei
校验提示文案
值友8259873149
校验提示文案
Wasam
校验提示文案
外面在下雨
校验提示文案
[已注销]
校验提示文案
胡桃树
校验提示文案