如何将旧手机改造为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

 

共有 77 条评论

  1. 如果设备能运行搭载主流内核的PostmarketOS,那么它就能运行任何Linux发行版。(我会在这类设备上安装Arch ARM,因为我喜欢这个发行版。)

    但这正是最大的障碍——主流内核支持。

    对于多数设备而言,即便能获取root权限或越狱,你仍受限于其预装内核。缺少所需新功能?网络栈存在严重漏洞?你只能自认倒霉。大多数“旧手机改造方案”都存在此问题。你可以将其改造成服务器,但绝不该将其暴露在公共互联网中。

    • s/主流/主线/

      但确实存在这个问题。我正在研究一部搭载3.0内核的2013年三星设备。虽然能运行pmos,但存在多个根权限本地执行漏洞。出于兴趣尝试让它运行主线内核,但难度不小。

    • Arch ARM是否由同一团队官方支持?若非如此,可能原因是什么?

      • x86_64是Arch Linux唯一的官方版本。其他所有移植版本均为非官方项目,由社区开发者维护——其中许多成员也参与主线Arch Linux的开发。

        我认为这与八年前放弃32位x86支持的理由基本相同:用户数量不足。(这导致了非官方Arch Linux 32版本的诞生以维持支持。)

  2. 阻碍我尝试的核心问题始终是电池。我希望移除电池以避免其成为潜在隐患,但现代手机拆卸电池操作繁琐,甚至不确定能否在无电池状态下启动。移动硬件复用领域对业余爱好者而言实在棘手。

    • 你可以尝试模拟电池状态: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英尺远的车库里

    • 理论上,你可以用足够大的电容器(以应对开机浪涌)和正确电压的电源替换电池,直接安装在原电池位置。不过焊接点实在太小,我的业余焊接技术根本搞不定。

    • 红魔手机可设置为充电时禁用电池供电。(此举旨在避免发热问题并防止电池性能衰减)

  3. 推荐World Wide Web(无商业关联)——可在iOS/iPadOS设备上搭建网页服务器(专业版9.99欧元,https://apps.apple.com/it/app/worldwideweb-mobile/id16230068…)

  4. 我所有旧手机都曾作为BOINC节点参与WorldCommunityGrid或seti@home项目,直到最终因电池耗尽无法开机为止。即便在装了风扇的凉爽区域,回家后还是发现太多手机被“辣枕”烤坏了。

    • 有意思,如果不需要触摸屏的话,用普通小型电脑风扇或许可行?

      直接给电池涂导热膏就行哈哈

      • 最近我用专用廉价手机(Moto G Stylus 2023)做Wigle无线网络扫描。

        为避免问题,我提前拆除了手机后盖和摄像头模组,让手机变得平整。然后买了个和手机尺寸相近的散热片。在低于电池的SoC上贴了导热垫,散热片本身预涂了导热胶,粘在电池/手机框架上固定。再也不用担心手机过热,就算电池鼓包也只会顶起散热片,不会导致整机变形。

  5. 根本不需要后市场系统。

    简单刷机获取root权限,搭配定制版去谷歌ROM和Termux就够用了。

  6. 标题应该加上“闲置安卓手机”才对

    • “支持postmarkOS的闲置安卓手机,且已解锁引导加载程序”

      (或可使用恢复zip文件,但每次重启后需额外操作)

  7. 相关进行中讨论:

    本博客现托管于GPS/LTE调制解调器(2021年)https://news.ycombinator.com/item?id=46049981

  8. 不知为何,我从未购买过支持postmarketOS的手机 🙁 而且手机命名让我困惑,本地很难找到二手设备来折腾。是Moto Play 2018还是Play 2020?在Facebook二手市场问别人这信息简直像拔牙。

    • 这很合理。大多数手机用户根本不懂技术。真的——一点都不懂。

      如果你能想想你认识的最普通的人会深入到什么程度的技术细节,那么你就能理解——大约一半的人比这还要不懂技术。

      这无可厚非,本就是常态。(我们可以接受或感到沮丧,接受更实用。)

      作为变通方案,我发现按零件编号搜索能有效筛选。

      假设我需要特定型号的Moto G Power手机。我根本不会搜索任何“Motorola G Power”的组合词,因为这些描述毫无帮助。

      取而代之的是,我直接查找零件编号(比如“XT2041-7”)进行搜索。

      这样能立即排除大量无关商品——这完全没问题:我不想在卖家根本不清楚自己商品的列表里瞎找。我只想买自己想要的,而我想要的就是XT2041-7。

    • eBay兄弟,上次我买那个游戏机才25美元。别跟Facebook卖家打交道

  9. 听起来是个有趣的项目。正好能让抽屉里那部闲置安卓手机派上用场。

  10. 正是通过这个链接,我今天才发现Surface RT居然能运行Linux。可惜我的那台早扔了,要是能让它重获新生该多好。

  11. 不知为何,我原本期待看到装在旋转电话外壳里的树莓派。

  12. 我的烤面包机当网页服务器,这体验无与伦比。

  13. 既然手机上架了网页服务器,如何实现互联网公开访问?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年代的时光。

      不知为何变化,如今流程更复杂——成本也更高了。

    • 其他人给出的是泛泛之谈,但我想问:你用的是哪家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端口的方法:

          # 在家庭主机上运行此命令,允许公共互联网用户访问
          # remote.example.com:80 时,由家庭主机:80 提供服务
          ssh -R :80:localhost:80 username@remote.example.com
      

      若需使上述连接永久生效,可在家庭主机上配置autossh

      • 既然每月都付费给他人“转发”端口,为何不直接购买某个博客空间?安全性高得多。

        • 因为家用服务器的内存/存储升级成本远低于VPS。若仅将VPS作为流量中转工具,可选择极低价方案。轻松就能找到月租2美元的小型VPS,附带1TB月流量配额;5美元即可获得无限流量套餐,优惠方案比比皆是。

      • 这样做是否会面临“常规”风险,比如有人入侵你家里的服务器?

        • 是的,但有例外。若仅在家庭网络中提供静态文件,服务器被劫持的风险极低;但若在家庭服务器上托管Wordpress,风险将急剧上升。因此务必明确风险边界,仅将“低风险组件”对外开放。

    • 可通过免费层级或超低价VPS建立Wireguard隧道,或选用支持端口转发的VPN服务商(如Proton)

      • 但如果流量全天候不间断,ISP难道不会察觉异常吗?

        • 关键在于流量总量。你是否整整一个月都让带宽全天候饱和?当然可能出问题。但如果你在下载种子(假设是合法种子,我指的不是盗版)或举办大型局域网聚会,让数百人同时直播游戏,同样会遇到同样的问题。

          否则无需担心。

        • 比全天候上传的Wi-Fi摄像头占用的带宽还少。

        • 网络服务商不就是按上下行流量封顶收费吗?

          从你的评论看显然不是。简直气死人。只要不损害他们利益,我付费购买的流量该怎么用就该怎么用,他们凭什么管?

          • 他的言论要么是受某处危言耸听的影响,要么是对ISP为规避所有理论风险而写的条款做过度字面解读。

            实施流量封顶的ISP早已将封顶成本计入定价,从技术层面看他们反而希望用户尽快超额,从而付费升级封顶额度(但他们仍可随意限速以确保网络容量充足)。

            未设置硬性封顶的ISP实际上仍会内部执行合理封顶政策,通常为数TB的流量上限。当然,他们会通过流量整形确保网络完整性,避免你的使用影响他人。若连续数月持续超出该软性上限,他们 可能 会联系你,但除此之外你无需担忧。

            简而言之:自建服务器尽情使用吧。等到你的规模达到下一个YouTube的级别时,才需要担心。

        • 是的,尽管他们能监测到流量,但只要加密就无法确知内容。只要不造成问题,他们根本不在乎你用它做什么。我多年使用中从未遇到ISP因持续加密流量投诉,不过像康卡斯特这类确实存在普遍流量封顶的运营商。

    • 你的ISP凭什么封禁你?

  14. 我用旧手机将串行数据转为TCP协议。还能实现宏操作和视频/音频传输。但最关键的是它内置了Web服务器。

  15. 正如其他人提到的,若真这么做必须注意电池问题。

    手机若全天候运行,电池会膨胀甚至爆炸。

  16. 关键问题在于:何必如此?我已有台3570K主机运行NAS、Plex、WiFi中继管理等功能,若真需要网页服务器,用Python之类搭建根本轻而易举。

    • 如何用你的设备托管我的网页服务器?

      • 当然可以,手机也能胜任——但前提是你没有现成的服务器。相较于50美元的二手服务器,手机的缺点可能太过麻烦。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注


京ICP备12002735号