如何将旧手机改造为Web服务器
本网页托管于一部2015年款Fairphone 2旧机,该设备现闲置于抽屉中,运行PostmarketOS系统
本教程将引导您完成所有操作步骤
最终您将获得一台小型家庭服务器,可运行基础Web服务
我们的目标是减少电子垃圾、倡导资源再利用,为闲置芯片赋予新生
您需要准备
- 一部闲置安卓手机
- 充电器及电源
- 无线网络连接
- 运行Linux系统的计算机(原生或虚拟机环境)
步骤1:安装postmarketos
第一步是在手机上安装postmarketos
请在设备页面查找您的设备型号,确认设备获得完整支持
安装过程中请保持该页面常驻
安装pmbootstrap,这是postmarketos的核心命令行工具
我们将先生成镜像,再将其刷写至设备
生成镜像
更新端口并初始化设备信息:
$ pmbootstrap pull
$ pmbootstrap init
当询问设备代号时,请提供您在上方打开的设备页面中列出的名称
当询问使用何种用户界面时,可选择console(最精简选项)或fbkeyboard以获得简易屏幕键盘(通过ssh连接通常无需使用,但作为备用方案也颇具趣味)
生成镜像:
$ pmbootstrap install
刷写镜像
请查阅设备页面了解如何进入刷写模式
通常需按住“音量减小”键开机
将手机连接至电脑并进入刷写模式
随后查阅页面中的安装章节并遵循相关指引
最后(若尚未执行),将镜像刷写至设备:
$ pmbootstrap flasher flash_rootfs
随后重启设备,验证postmarketos能否正常启动
步骤2:配置服务器
手机刷入postmarketos后,请登录系统
默认用户名/密码组合为 user/147147
保持手机与电脑连接,通过SSH登录:
$ ssh user@172.16.42.1
将手机连接至您的WiFi网络:
$ nmcli device wifi connect your_wifi_network --ask
恭喜,您现在正式拥有了一台小型本地手机服务器
运行此命令可查看手机本地IP地址:
$ ip -4 addr show wlan0 | grep inet | awk ‘{print $2}’ | cut -d'/' -f1
在典型家用路由器中,地址格式为192.168.1.x
现在可将手机放置安全位置,通过Wi-Fi连接:
ssh user@192.168.1.x
步骤3:提供网页服务
创建/var/www/html/目录:
sudo mkdir -p /var/www/html/
编写简单的Hello World HTML文件:
$ sudo sh -c ‘echo “<h1>hello world</h1>” > /var/www/html/index.html’
在/etc/nftables.d/99_http.nft中添加nftables规则允许80端口入站数据包:
inet filter input tcp dport 80 ct state new accept
随后重启nftables服务:
$ sudo systemctl restart nftables
执行以下命令启动Web服务器:
$ httpd -h /var/www/html/
通过本地计算机访问网站进行测试:
$ curl 192.168.1.x
此时应显示上文的<h1>hello world</h1>文本
现在在同一WiFi网络下任意设备的浏览器中输入该IP地址,即可欣赏您专属的微型本地数字花园
注意:若手机因故重启,此HTTP服务器不会自动重启
进阶:远程访问
出于安全考虑,建议 不要 向互联网开放SSH使用的22端口
若需远程访问,应通过路由器设置VPN通道(多数路由器支持网页界面配置)
连接本地网络后,可如前所述通过SSH访问手机
若您确知操作风险仍需开放22端口,请务必禁用密码登录并配置SSH密钥
扩展:维护操作
更新服务器软件包请执行:
$ sudo apk update
$ sudo apk upgrade
如果设备能运行搭载主流内核的PostmarketOS,那么它就能运行任何Linux发行版。(我会在这类设备上安装Arch ARM,因为我喜欢这个发行版。)
但这正是最大的障碍——主流内核支持。
对于多数设备而言,即便能获取root权限或越狱,你仍受限于其预装内核。缺少所需新功能?网络栈存在严重漏洞?你只能自认倒霉。大多数“旧手机改造方案”都存在此问题。你可以将其改造成服务器,但绝不该将其暴露在公共互联网中。
s/主流/主线/
但确实存在这个问题。我正在研究一部搭载3.0内核的2013年三星设备。虽然能运行pmos,但存在多个根权限本地执行漏洞。出于兴趣尝试让它运行主线内核,但难度不小。
Arch ARM是否由同一团队官方支持?若非如此,可能原因是什么?
x86_64是Arch Linux唯一的官方版本。其他所有移植版本均为非官方项目,由社区开发者维护——其中许多成员也参与主线Arch Linux的开发。
我认为这与八年前放弃32位x86支持的理由基本相同:用户数量不足。(这导致了非官方Arch Linux 32版本的诞生以维持支持。)
Arch正致力于正式支持ARM及非x86_64架构。
https://rfc.archlinux.page/0032-arch-linux-ports/
该RFC声明“新增移植需通过RFC提案,且至少需两名软件包维护者主导移植工作以确保长期开发。”但目前未发现任何关于ARM支持的RFC提案,那么能否认定ARM平台的开发工作已正式启动?
阻碍我尝试的核心问题始终是电池。我希望移除电池以避免其成为潜在隐患,但现代手机拆卸电池操作繁琐,甚至不确定能否在无电池状态下启动。移动硬件复用领域对业余爱好者而言实在棘手。
你可以尝试模拟电池状态:https://yaky.dev/2022-09-06-smartphone-without-battery/
(此方案适用于可拆卸电池,但对内置电池应该也适用)
多数手机的电池虽可通过破坏性方式取出,但不会影响手机其他部件。
通常只要保持手机连接电源,电池几乎可无限期安全存放——板载电池管理系统会维持恒定充电状态,确保化学反应稳定。
上述论述中的若干概括性表述,恰与我对原帖作者担忧的相似顾虑相呼应。多数固件会尽量减少充放电循环,多数电池在恒定充电状态下保持稳定…但“多数”对我的需求并不理想——我希望设备能十年闲置在角落持续运行。我有几台旧台式机,用于临时搭建独立服务器或短暂托管网络实况。它们终将出现硬件故障, 但我更确信它们出故障时不会引发灾难性后果——旧笔记本电脑亦是如此,其可维护性远高于手机,至今我遇到的每台笔记本都能轻松拆开取出电池,仅靠交流电运行。若遇到UPS无法覆盖的断电情况,我宁愿设备直接关机,也不愿面对可能发生的灾难性故障。
我认为若考虑回收旧设备用于托管,且清单已排到手机环节,说明日常维护成本已相当高昂,此时再增加火灾风险的担忧实在得不偿失。
> 通常只要保持手机持续充电,电池几乎能无限期安全使用
此说法依据何在?
我十年间已三次更换始终插着电源的iPhone电池,因为电池膨胀得像个辣味枕头。
我也渴望找到无需电池、直接通过USB供电运行手机的方法。
去ifixit.com查手机换电池教程,看到一半就停手吧 🙂
前两次苹果店帮我换的。后来苹果不再支持这么老的机型换电池,我就从亚马逊订了换电池工具包,靠ifixit.com的教程自己动手换了。
十年间我已三次更换常年插着电源的iPhone电池,因为它膨胀得像个辣味枕头。
我也渴望能直接用USB供电运行手机,彻底摆脱电池束缚。
去ifixit.com查查你手机的换电池教程,操作到一半就停手吧 🙂
前两次苹果公司帮我更换的。后来苹果停止支持这么老款手机的电池更换,我就从亚马逊订购了电池更换套件,在ifixit.com的指导下自己动手。
再也不干了。合上后手机居然还能开机,我真心吓了一跳。光是概念上理解手机内部元件有多微小是一回事, 亲手用镊子把插头塞进插孔时,完全搞不清到底算没插到位——这才是真正的考验。
深有同感。不过拆电池倒是简单得很。iFixit的教程尤其实用,会提醒你拆胶合外壳时那些意想不到的陷阱。
> 我真心震惊了
情况本可能更糟——这句话本可以就此戛然而止…
我手头六部旧安卓手机中,有两部因电池膨胀不敢开机。这可能取决于设备使用年限是否构成实际风险,但出于这个原因,我再也不敢让设备持续充电了。
我在这方面知识有限,无法提供专业见解,但根据个人经验,锂离子电池长期充电会导致可怕的半爆炸状态,同时电池也会失效。
您认为这是化学反应/质量控制问题吗?电池/控制器技术是否已取得突破性进展来解决上述问题?
我正要说同样的事!我的Steam Deck始终插着电源(作为主力电脑使用),电池照样鼓包了(Valve当然免费更换了)
取决于你的手机。刚给常年插电的摩托罗拉换了电池(至少用到一定年限后)。电池已经鼓包了。现在它充当我们的“座机”,通过link2cell连接几部旧DECT话机。
如果电源重置,没有电池的话手机会陷入开机循环吗?
将“服务器”放入鞋盒,再用装满沙子的鞋盒压顶,用胶带封好藏在家具后方。
这样手机就成了4U机架服务器, 大概 不会有太大火灾隐患。我们还会用木板遮挡以防万一。反正我向来不喜欢闭着眼睛睡觉!
然后把整个装置放在离住宅至少50英尺远的车库里
理论上,你可以用足够大的电容器(以应对开机浪涌)和正确电压的电源替换电池,直接安装在原电池位置。不过焊接点实在太小,我的业余焊接技术根本搞不定。
参考这个方案:https://www.youtube.com/watch?v=7f8SliNGeDM
红魔手机可设置为充电时禁用电池供电。(此举旨在避免发热问题并防止电池性能衰减)
推荐World Wide Web(无商业关联)——可在iOS/iPadOS设备上搭建网页服务器(专业版9.99欧元,https://apps.apple.com/it/app/worldwideweb-mobile/id16230068…)
我所有旧手机都曾作为BOINC节点参与WorldCommunityGrid或seti@home项目,直到最终因电池耗尽无法开机为止。即便在装了风扇的凉爽区域,回家后还是发现太多手机被“辣枕”烤坏了。
有意思,如果不需要触摸屏的话,用普通小型电脑风扇或许可行?
直接给电池涂导热膏就行哈哈
最近我用专用廉价手机(Moto G Stylus 2023)做Wigle无线网络扫描。
为避免问题,我提前拆除了手机后盖和摄像头模组,让手机变得平整。然后买了个和手机尺寸相近的散热片。在低于电池的SoC上贴了导热垫,散热片本身预涂了导热胶,粘在电池/手机框架上固定。再也不用担心手机过热,就算电池鼓包也只会顶起散热片,不会导致整机变形。
根本不需要后市场系统。
简单刷机获取root权限,搭配定制版去谷歌ROM和Termux就够用了。
现在不能直接在安卓上运行Linux虚拟机吗?
标题应该加上“闲置安卓手机”才对
“支持postmarkOS的闲置安卓手机,且已解锁引导加载程序”
(或可使用恢复zip文件,但每次重启后需额外操作)
相关进行中讨论:
本博客现托管于GPS/LTE调制解调器(2021年) – https://news.ycombinator.com/item?id=46049981
不知为何,我从未购买过支持postmarketOS的手机 🙁 而且手机命名让我困惑,本地很难找到二手设备来折腾。是Moto Play 2018还是Play 2020?在Facebook二手市场问别人这信息简直像拔牙。
这很合理。大多数手机用户根本不懂技术。真的——一点都不懂。
如果你能想想你认识的最普通的人会深入到什么程度的技术细节,那么你就能理解——大约一半的人比这还要不懂技术。
这无可厚非,本就是常态。(我们可以接受或感到沮丧,接受更实用。)
作为变通方案,我发现按零件编号搜索能有效筛选。
假设我需要特定型号的Moto G Power手机。我根本不会搜索任何“Motorola G Power”的组合词,因为这些描述毫无帮助。
取而代之的是,我直接查找零件编号(比如“XT2041-7”)进行搜索。
这样能立即排除大量无关商品——这完全没问题:我不想在卖家根本不清楚自己商品的列表里瞎找。我只想买自己想要的,而我想要的就是XT2041-7。
eBay兄弟,上次我买那个游戏机才25美元。别跟Facebook卖家打交道
听起来是个有趣的项目。正好能让抽屉里那部闲置安卓手机派上用场。
建议合并至:https://news.ycombinator.com/item?id=46027554
正是通过这个链接,我今天才发现Surface RT居然能运行Linux。可惜我的那台早扔了,要是能让它重获新生该多好。
不知为何,我原本期待看到装在旋转电话外壳里的树莓派。
我的烤面包机当网页服务器,这体验无与伦比。
当然能运行NetBSD啦
既然手机上架了网页服务器,如何实现互联网公开访问?ISP不会检测封禁吗?是用WireGuard之类工具吗?
我一直在尝试搭建自有服务器,考虑用旧安卓手机直接充当机架设备,但至今困扰我的核心问题是:如何在不被ISP察觉的情况下实现公共访问?毕竟ISP要求商业套餐才能开通此类服务,费用不菲。
用CloudFlare隧道?
https://developers.cloudflare.com/cloudflare-one/networks/co…
当然,你也可以选择5美元的虚拟主机(如Linode Nanode 1GB)配合WireGuard构建自有隧道(或仅用5美元主机运行服务器)
到这个阶段你根本不需要手机了 😀
明白了,只要运行CF隧道,ISP就无法察觉我在托管网页应用?但若传输大文件(非种子)呢?他们难道不会通过带宽消耗要求我升级商业套餐?
哪家的ISP会禁止自建服务器?
这主要取决于你和ISP的合约条款。我没听说过禁止“商业用途”使用上行链路的规定——他们到底怎么定义和监控这个概念?
是的,ISP能监测到你的流量消耗。但若流量经过加密,他们无法确定具体用途。你是个人用户还是企业用户?在全加密状态下他们如何分辨?
至于流量规模问题,你至少该略读下ISP合同条款。你的ISP可能设有流量上限(例如每月仅限5TB),若达到上限,他们可能会暂时暂停服务。但只要他们无法监控你的具体行为,且你在技术和合同层面的服务协议范围内,同时未给他们造成困扰,那么ISP根本不会在意你做什么。
> 难道ISP不会检测并封禁这些行为?
不会。任何不惜代价争夺市场份额、强迫用户签订一年合约的ISP都不会故意封禁用户。这种误解从何而来我都不确定——毕竟ISP可没发起过大规模公关活动警告人们运行服务器的风险。
你唯一会被封禁的情况是给他们的网络造成不成比例的压力,这意味着你需要超过以下用户的典型使用量:- 游戏玩家(定期下载数百GB的游戏)- 直播主(持续数小时直播4K视频)- 云备份用户(定期上传数GB数据) Windows用户(默认配置下Windows会通过P2P共享更新)、种子用户(持续全双工带宽占用),以及设备遭入侵后以线路速率喷涌DoS流量的倒霉蛋。
持续数日通过托管视频占满带宽?当然可能收到警告甚至最终断网——前提是运营商尚未部署流量整形方案。他们通常会悄无声息地将你的带宽限制在可接受范围内,等你发现自建YouTube克隆站运行缓慢时,自然会自行迁移。
托管网站产生几Mbps流量且偶有峰值?相较于日常正常使用量,这根本是微不足道的误差,完全没问题。
大多数消费级ISP禁止运行服务器(甚至未定义何为服务器)的条款,是为了防范潜在企业利用家庭用户线路搭建数据中心,随后在服务中断或被断网时抱怨或索赔。技术爱好者在家里玩玩博客这种事,没人会在意。
多数ISP并不在意。
部分服务商可能以“安全”为由封锁80/443端口,但联系客服后往往能解封——即便你并非商业用户。
我家里就运行着Web服务器,并使用noip.com的免费动态DNS服务。
过去搭建Web服务器要简单得多。我怀念90年代的时光。
不知为何变化,如今流程更复杂——成本也更高了。
> 不知为何变化
IPv4地址枯竭。
其他人给出的是泛泛之谈,但我想问:你用的是哪家ISP?具体在哪个地区?
(我幸运地使用旧金山湾区的Sonic。这家本地ISP积极倡导网络中立性,将1Gbps对称光纤作为基础套餐标准。我敢肯定他们不会封禁任何人的服务器。)
> ISP难道不会检测并封禁这类流量?
不会?虽然肯定存在这么做的ISP,但这种做法实在荒谬。
实际上ISP根本不在乎。他们关注的是运营问题,而你持续传输的网络流量对他们来说微不足道——即便成功博客的流量,也远不及你在Netflix上流媒体播放4K电影的流量。
ISP确实有规则(每月最大数据量)和限制(ISP设备会自动丢弃25、80、443或456端口的收发数据包),但在这些限制范围内,只要你不给他们添麻烦,他们根本不在乎。
此外,暴露内部服务器端口(如80端口)最简便的方式,就是让本地服务器通过SSH端口转发连接到远程服务器(如廉价VPS)。需注意默认情况下SSH会绑定到远程主机的本地端口,因此远程主机需配置HTTP服务器反向代理到远程本地主机:8080端口,或者在远程主机的sshd配置文件中启用
GatewayPorts: yes。假设已在remote.example.com启用GatewayPorts,以下是暴露本地主机80端口的方法:若需使上述连接永久生效,可在家庭主机上配置
autossh。既然每月都付费给他人“转发”端口,为何不直接购买某个博客空间?安全性高得多。
因为家用服务器的内存/存储升级成本远低于VPS。若仅将VPS作为流量中转工具,可选择极低价方案。轻松就能找到月租2美元的小型VPS,附带1TB月流量配额;5美元即可获得无限流量套餐,优惠方案比比皆是。
这样做是否会面临“常规”风险,比如有人入侵你家里的服务器?
是的,但有例外。若仅在家庭网络中提供静态文件,服务器被劫持的风险极低;但若在家庭服务器上托管Wordpress,风险将急剧上升。因此务必明确风险边界,仅将“低风险组件”对外开放。
可通过免费层级或超低价VPS建立Wireguard隧道,或选用支持端口转发的VPN服务商(如Proton)
但如果流量全天候不间断,ISP难道不会察觉异常吗?
关键在于流量总量。你是否整整一个月都让带宽全天候饱和?当然可能出问题。但如果你在下载种子(假设是合法种子,我指的不是盗版)或举办大型局域网聚会,让数百人同时直播游戏,同样会遇到同样的问题。
否则无需担心。
比全天候上传的Wi-Fi摄像头占用的带宽还少。
网络服务商不就是按上下行流量封顶收费吗?
从你的评论看显然不是。简直气死人。只要不损害他们利益,我付费购买的流量该怎么用就该怎么用,他们凭什么管?
他的言论要么是受某处危言耸听的影响,要么是对ISP为规避所有理论风险而写的条款做过度字面解读。
实施流量封顶的ISP早已将封顶成本计入定价,从技术层面看他们反而希望用户尽快超额,从而付费升级封顶额度(但他们仍可随意限速以确保网络容量充足)。
未设置硬性封顶的ISP实际上仍会内部执行合理封顶政策,通常为数TB的流量上限。当然,他们会通过流量整形确保网络完整性,避免你的使用影响他人。若连续数月持续超出该软性上限,他们 可能 会联系你,但除此之外你无需担忧。
简而言之:自建服务器尽情使用吧。等到你的规模达到下一个YouTube的级别时,才需要担心。
是的,尽管他们能监测到流量,但只要加密就无法确知内容。只要不造成问题,他们根本不在乎你用它做什么。我多年使用中从未遇到ISP因持续加密流量投诉,不过像康卡斯特这类确实存在普遍流量封顶的运营商。
你的ISP凭什么封禁你?
我用旧手机将串行数据转为TCP协议。还能实现宏操作和视频/音频传输。但最关键的是它内置了Web服务器。
正如其他人提到的,若真这么做必须注意电池问题。
手机若全天候运行,电池会膨胀甚至爆炸。
关键问题在于:何必如此?我已有台3570K主机运行NAS、Plex、WiFi中继管理等功能,若真需要网页服务器,用Python之类搭建根本轻而易举。
如何用你的设备托管我的网页服务器?
当然可以,手机也能胜任——但前提是你没有现成的服务器。相较于50美元的二手服务器,手机的缺点可能太过麻烦。