<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Termux &#8211; mylogs.cn</title>
	<atom:link href="https://mylogs.cn/tag/termux/feed/" rel="self" type="application/rss+xml" />
	<link>https://mylogs.cn</link>
	<description>发现、记录、分享</description>
	<lastBuildDate>Thu, 13 Aug 2026 23:53:13 +0000</lastBuildDate>
	<language>zh-Hans</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	
	<item>
		<title>旧安卓机别扔：改造成常亮网络监视器</title>
		<link>https://mylogs.cn/old-android-network-monitor/</link>
		
		<dc:creator><![CDATA[steve, zhang]]></dc:creator>
		<pubDate>Thu, 13 Aug 2026 23:52:45 +0000</pubDate>
				<category><![CDATA[科技]]></category>
		<category><![CDATA[bmon]]></category>
		<category><![CDATA[htop]]></category>
		<category><![CDATA[Termux]]></category>
		<category><![CDATA[实用工具]]></category>
		<category><![CDATA[家庭实验室]]></category>
		<category><![CDATA[旧安卓]]></category>
		<category><![CDATA[网络监视]]></category>
		<guid isPermaLink="false">https://mylogs.cn/old-android-network-monitor/</guid>

					<description><![CDATA[一台退役安卓机，如何变成全天候网络监视器 手边那台被淘汰的旧安卓手机，与其丢在抽屉里吃灰，不如改造成一块常亮的 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">一台退役安卓机，如何变成全天候网络监视器</h2>



<p class="wp-block-paragraph">手边那台被淘汰的旧安卓手机，与其丢在抽屉里吃灰，不如改造成一块常亮的网络监视屏。一位长期折腾硬件的作者在家中实验室里就做了这样的尝试：用一台旧手机实时盯着电脑的中央处理器占用率和网络流量，不必再在干活时反复切换终端窗口。</p>



<figure data-wp-context="{&quot;imageId&quot;:&quot;6a8156e046c2e&quot;}" data-wp-interactive="core/image" data-wp-key="6a8156e046c2e" class="wp-block-image size-large aligncenter wp-lightbox-container"><img fetchpriority="high" decoding="async" width="1200" height="675" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on--click="actions.showLightbox" data-wp-on--load="callbacks.setButtonStyles" data-wp-on--pointerdown="actions.preloadImage" data-wp-on--pointerenter="actions.preloadImageWithDelay" data-wp-on--pointerleave="actions.cancelPreload" data-wp-on-window--resize="callbacks.setButtonStyles" src="https://mylogs.cn/wp-content/uploads/2026/08/f01053df29a0a5b5aad536f7c8c27d2e_header.webp" alt="旧安卓机别扔：改造成常亮网络监视器" class="wp-image-4769" style="max-width:100%;height:auto;" srcset="https://mylogs.cn/wp-content/uploads/2026/08/f01053df29a0a5b5aad536f7c8c27d2e_header.webp 1200w, https://mylogs.cn/wp-content/uploads/2026/08/f01053df29a0a5b5aad536f7c8c27d2e_header-300x169.webp 300w, https://mylogs.cn/wp-content/uploads/2026/08/f01053df29a0a5b5aad536f7c8c27d2e_header-1024x576.webp 1024w, https://mylogs.cn/wp-content/uploads/2026/08/f01053df29a0a5b5aad536f7c8c27d2e_header-768x432.webp 768w" sizes="(max-width: 1200px) 100vw, 1200px" /><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			data-wp-bind--aria-label="state.thisImage.triggerButtonAriaLabel"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on--click="actions.showLightbox"
			data-wp-style--right="state.thisImage.buttonRight"
			data-wp-style--top="state.thisImage.buttonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button><figcaption class="wp-element-caption">图片来源：How-To Geek</figcaption></figure>





<h2 class="wp-block-heading">为什么需要独立的监视屏</h2>



<p class="wp-block-paragraph">这位作者的日常离不开联网，无论是写代码还是跑项目，都很吃内存和算力。起初他直接在正用的电脑上开终端看系统状态，时间长了却越来越烦——为了盯一下资源占用，得在不同终端实例之间来回切，项目做到一半总要被打断。</p>



<p class="wp-block-paragraph">他试过几个方案，最后落在两个轻量工具上：用 <code>htop</code> 配合 <code>ssh</code> 搭建中央处理器实时监控，用 <code>bmon</code> 做网络流量监视。</p>



<h2 class="wp-block-heading">用 bmon 搭起网络监视</h2>



<p class="wp-block-paragraph">作者原本想用 Uptime Kuma 做网络监视，但手机上跑的是 Termux 终端模拟器，它原生并不支持 Docker 容器，Uptime Kuma 的非容器版本又始终没能顺利跑起来，于是暂时搁置，改用了更简单的 <code>bmon</code>。</p>



<p class="wp-block-paragraph"><code>bmon</code> 是一款轻量的监视工具，可以看带宽、数据包速率，也能追踪流量用量，在老手机上跑起来毫无压力。作者的习惯是在安卓设备上用 <code>proot-distro</code> 装一套 Ubuntu，主要走命令行操作。他在 Ubuntu 里用 <code>sudo apt install bmon</code> 完成安装，再用 <code>ifconfig</code> 找到正在用的网卡和地址——但 <code>bmon -p wlan0</code> 在手机本地只会监视手机自己，要监视家里的电脑，还得靠 <code>ssh</code>。</p>



<p class="wp-block-paragraph">具体做法是，在手机和电脑之间建立一条加密通道：在手机上执行 <code>ssh 电脑用户名@电脑IP地址</code>，并按所用 Linux 发行版的指引在防火墙放行对应端口。连上之后，<code>bmon</code> 就能把电脑那端的网络情况投到手机屏幕上。</p>



<h2 class="wp-block-heading">用 htop 盯住中央处理器</h2>



<p class="wp-block-paragraph"><code>htop</code> 作者用得熟，便顺手拿来监视电脑的进程号、中央处理器占用和内存。它在 Termux 里用 <code>pkg install htop</code> 即可安装，但默认只显示安卓设备自身的信息，必须连到电脑才能当监视器用。</p>



<p class="wp-block-paragraph">他把刷新间隔设为 3 秒（命令里的 <code>30</code> 代表 3 秒而非 30 秒），再用终端多路复用工具 <code>tmux</code> 把 <code>htop</code> 和 <code>bmon</code> 并排摆在同一块常亮屏上。起初遇到过显示空间不够的问题，把手机横过来就解决了。</p>



<h2 class="wp-block-heading">让旧手机一直亮着</h2>



<p class="wp-block-paragraph">老手机电池早已不如当年，要变成常亮屏得做几处调整。作者开启了大部分应用的省电模式，但把 Termux 排除在外，既不让后台乱跑，又防止它休眠；又在 Termux 里执行 <code>termux-wake-lock</code> 锁住唤醒状态。他还顺手精简了不必要的预装应用，关掉了定位、同步等用不上的服务。</p>



<p class="wp-block-paragraph">有些机型自带常亮显示，可按型号开启。由于空间所限他不打算一直插着电，于是把充电上限设到 80%，电量掉到约 10% 再补电，既保常亮又不伤电池。</p>



<p class="wp-block-paragraph">除了 <code>htop</code> 和 <code>bmon</code>，作者也考虑过 <code>Glances</code> 这类小部件，留待以后尝试。把一台没人要的旧手机变成专属监视器，这件事本身，就已经相当划算。</p>



<p class="has-small-font-size wp-block-paragraph">来源：How-To Geek（作者 David J. Buck）</p>

]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>免 root 跑真 Linux：UserLAnd 让安卓装进完整发行版</title>
		<link>https://mylogs.cn/userland-real-linux-on-android-no-termux/</link>
		
		<dc:creator><![CDATA[steve, zhang]]></dc:creator>
		<pubDate>Thu, 13 Aug 2026 06:27:03 +0000</pubDate>
				<category><![CDATA[科技]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[PRoot]]></category>
		<category><![CDATA[Termux]]></category>
		<category><![CDATA[UserLAnd]]></category>
		<category><![CDATA[安卓]]></category>
		<category><![CDATA[开源]]></category>
		<category><![CDATA[终端工具]]></category>
		<guid isPermaLink="false">https://mylogs.cn/userland-real-linux-on-android-no-termux/</guid>

					<description><![CDATA[多数安卓用户并不知道自己的手机里就藏着一套完整的 Linux 内核，即便知道，也往往以为想折腾 Linux 环 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">多数安卓用户并不知道自己的手机里就藏着一套完整的 Linux 内核，即便知道，也往往以为想折腾 Linux 环境只能靠 Termux 这一类终端工具。其实还有另一条更省事的路径：UserLAnd 能在不获取 root 权限的前提下，把 Ubuntu、Debian、Kali 等真正的 Linux 发行版直接装进手机。</p>



<figure data-wp-context="{&quot;imageId&quot;:&quot;6a8156e047b1a&quot;}" data-wp-interactive="core/image" data-wp-key="6a8156e047b1a" class="wp-block-image size-large aligncenter wp-lightbox-container"><img decoding="async" width="1200" height="675" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on--click="actions.showLightbox" data-wp-on--load="callbacks.setButtonStyles" data-wp-on--pointerdown="actions.preloadImage" data-wp-on--pointerenter="actions.preloadImageWithDelay" data-wp-on--pointerleave="actions.cancelPreload" data-wp-on-window--resize="callbacks.setButtonStyles" src="https://mylogs.cn/wp-content/uploads/2026/08/77170fbc3417409abf288446a26d666f_header.webp" alt="免 root 跑真 Linux：UserLAnd 让安卓装进完整发行版" class="wp-image-4669" style="max-width:100%;height:auto;" srcset="https://mylogs.cn/wp-content/uploads/2026/08/77170fbc3417409abf288446a26d666f_header.webp 1200w, https://mylogs.cn/wp-content/uploads/2026/08/77170fbc3417409abf288446a26d666f_header-300x169.webp 300w, https://mylogs.cn/wp-content/uploads/2026/08/77170fbc3417409abf288446a26d666f_header-1024x576.webp 1024w, https://mylogs.cn/wp-content/uploads/2026/08/77170fbc3417409abf288446a26d666f_header-768x432.webp 768w" sizes="(max-width: 1200px) 100vw, 1200px" /><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			data-wp-bind--aria-label="state.thisImage.triggerButtonAriaLabel"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on--click="actions.showLightbox"
			data-wp-style--right="state.thisImage.buttonRight"
			data-wp-style--top="state.thisImage.buttonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button><figcaption class="wp-element-caption">图片来源：Arol Wright / How-To Geek</figcaption></figure>





<h2 class="wp-block-heading">免 root 的真发行版</h2>



<p class="wp-block-paragraph">UserLAnd 是一款免费、开源、上架 Google Play 的应用。它的核心思路并不玄乎：借助 PRoot（chroot 系统调用的用户态实现）搭配一套自研的 SSH 或 VNC 连接层，在安卓现有内核之上圈出一块隔离的 Linux 环境。因为安卓本身基于 Linux，内核本就兼容 Linux 二进制文件，所以 UserLAnd 可以直接运行发行版原生的软件包，既不需要重新编译，也不需要做完整虚拟化。</p>



<p class="wp-block-paragraph">打开应用后，用户会看到一份可选清单：完整发行版涵盖 Ubuntu、Debian、Kali Linux、Alpine 等；也可以只挑单个应用环境，比如独立启动一个 Firefox，或者开一段 XFCE 桌面会话。选好之后走一遍简短的设置，应用会自动下载文件系统镜像、配置环境，几分钟内就能进入一个可用的命令行或图形桌面。整个过程不需要任何命令行「黑魔法」，这正是它和多数同类方案最不一样的地方。</p>



<h2 class="wp-block-heading">和 Termux 到底差在哪</h2>



<p class="wp-block-paragraph">常被拿来比较的 Termux 更像是一个终端模拟器加包管理器，它在安卓上提供了一套类 Linux 的命令行环境，但本质上不是一套「完整发行版」——你没有原生的 systemd、没有标准的桌面栈，很多需要真发行版支撑的软件跑起来并不顺。</p>



<p class="wp-block-paragraph">UserLAnd 走的是另一条路：它给的是货真价实的发行版，带原生的包管理器（apt、apk 等），可以像在一台普通电脑上那样安装 GIMP、LibreOffice、Firefox，也能通过 VNC 或 XSDL 把 LXDE、Xfce4 这类桌面环境投到屏幕上。换言之，Termux 适合「在手机里敲命令」，UserLAnd 适合「在手机里跑一台 Linux 电脑」。</p>



<h2 class="wp-block-heading">还有哪些替代方案</h2>



<p class="wp-block-paragraph">想在同一方向更进一步，也有别的选项，但各有门槛。Andronix 同样主打安卓上的完整发行版，不过部分功能需要订阅；Linux Deploy 能力更强，却要求设备已经 root；QEMU 走的是纯模拟路线，兼容性最好但性能损耗明显，在手机上偏慢。UserLAnd 的定位恰好卡在中间：零门槛、免 root、开箱即用，代价是 PRoot 用户态隔离带来了一定运行开销，性能上限不如真正拿到 root 的方案。</p>



<h2 class="wp-block-heading">怎么用、能用来做什么</h2>



<p class="wp-block-paragraph">实际连接时，UserLAnd 支持 SSH、VNC、XSDL 三种访问方式。选命令行就本地 SSH 直连；想要图形界面，则启动 VNC 服务，再用手机上的 VNC 客户端连到本机即可。一个实用的细节是：同一个文件系统可以挂在多个会话上，既能开一个轻量 SSH 会话敲命令，也能同时开一个 VNC 图形会话，看当下需要灵活切换。</p>



<p class="wp-block-paragraph">对开发者而言，它相当于把一台随身 Linux 实验机装进了口袋——临时编译、跑脚本、验证环境都很方便；对普通爱好者，则能在手机上体验 GIMP 修图、LibreOffice 写文档，或把手机当成一个可被其他电脑通过 SSH 接入的小型服务器。</p>



<h2 class="wp-block-heading">边界与取舍</h2>



<p class="wp-block-paragraph">需要清醒看待的是，UserLAnd 不是为了替代桌面或服务器而生。图形界面依赖 VNC / X Server 中转，安卓直接掌控 GPU，桌面渲染的流畅度受手机硬件制约；PRoot 的隔离也意味着它无法做到真 root 那般贴近系统底层。它最适合的场景，是「想要一个真正的 Linux 环境，但又不想解锁 bootloader、不想冒 root 风险」的轻度到中度需求。</p>



<p class="wp-block-paragraph">对这类用户来说，UserLAnd 把原本需要手动折腾 chroot、配网络、挂文件系统的繁琐流程，压缩成了几次点选。想顺手在安卓上拥有一台完整 Linux，它确实是目前门槛最低的那一个。</p>



<p class="has-small-font-size wp-block-paragraph">来源：How-To Geek（作者 Arol Wright）</p>

]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>旧手机别扔：用 Termux 把它变成家庭服务器</title>
		<link>https://mylogs.cn/old-phone-termux-home-server/</link>
					<comments>https://mylogs.cn/old-phone-termux-home-server/#respond</comments>
		
		<dc:creator><![CDATA[steve, zhang]]></dc:creator>
		<pubDate>Sun, 09 Aug 2026 07:24:43 +0000</pubDate>
				<category><![CDATA[科技]]></category>
		<category><![CDATA[chroot]]></category>
		<category><![CDATA[Tailscale]]></category>
		<category><![CDATA[Termux]]></category>
		<category><![CDATA[安卓]]></category>
		<category><![CDATA[家庭服务器]]></category>
		<category><![CDATA[旧手机]]></category>
		<category><![CDATA[自托管]]></category>
		<guid isPermaLink="false">https://mylogs.cn/old-phone-termux-home-server/</guid>

					<description><![CDATA[付着月费的小型云服务器，总让人觉得有点亏。一名开发者此前把个人服务跑在德国 Hetzner 的一台虚拟主机上， [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">付着月费的小型云服务器，总让人觉得有点亏。一名开发者此前把个人服务跑在德国 Hetzner 的一台虚拟主机上，里面装着几个 Web 应用、一个叫 Surf 的远程浏览器、反向代理 Caddy 等。问题出在 Surf 上：最便宜的共享机型还能应付日常，一旦 Chrome 真正开始干活就捉襟见肘，换带独享 CPU 的机型，月费又高得让一个私人浏览器显得不划算。</p>



<figure data-wp-context="{&quot;imageId&quot;:&quot;6a8156e048d46&quot;}" data-wp-interactive="core/image" data-wp-key="6a8156e048d46" class="wp-block-image size-large aligncenter wp-lightbox-container"><img decoding="async" width="1200" height="970" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on--click="actions.showLightbox" data-wp-on--load="callbacks.setButtonStyles" data-wp-on--pointerdown="actions.preloadImage" data-wp-on--pointerenter="actions.preloadImageWithDelay" data-wp-on--pointerleave="actions.cancelPreload" data-wp-on-window--resize="callbacks.setButtonStyles" src="https://mylogs.cn/wp-content/uploads/2026/08/f1d9fe002f85_header.webp" alt="旧手机别扔：用 Termux 把它变成家庭服务器" class="wp-image-4170" style="max-width:100%;height:auto;" srcset="https://mylogs.cn/wp-content/uploads/2026/08/f1d9fe002f85_header.webp 1200w, https://mylogs.cn/wp-content/uploads/2026/08/f1d9fe002f85_header-300x243.webp 300w, https://mylogs.cn/wp-content/uploads/2026/08/f1d9fe002f85_header-1024x828.webp 1024w, https://mylogs.cn/wp-content/uploads/2026/08/f1d9fe002f85_header-768x621.webp 768w" sizes="(max-width: 1200px) 100vw, 1200px" /><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			data-wp-bind--aria-label="state.thisImage.triggerButtonAriaLabel"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on--click="actions.showLightbox"
			data-wp-style--right="state.thisImage.buttonRight"
			data-wp-style--top="state.thisImage.buttonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button><figcaption class="wp-element-caption">图片来源：seg6.space</figcaption></figure>





<p class="wp-block-paragraph">买新机器也划不来。内存价格高得离谱，组装一台内存宽裕的小主机时机糟糕。就在他翻看二手迷你主机时，想起了那台吃灰的 CMF Phone 1：八颗 ARM 核、8GB 内存、128GB 闪存、Wi-Fi 6、5G 调制解调器，还自带电池。硬件明显被闲置，而且钱早就付过了。</p>



<p class="wp-block-paragraph">这台手机如今跑着 Surf 及其托管的 Chrome 实例、个人记账工具、屏幕共享服务，外加几个小应用。它们能扛住重启、从 Git 部署，手机在不同网络间移动时依旧可达——也就是说，它真正替代了那台虚拟主机。</p>



<h2 class="wp-block-heading">第一次走弯路：想刷掉安卓</h2>



<p class="wp-block-paragraph">最直接的思路是刷入常规 Linux 发行版。CMF Phone 1 确实有 postmarketOS 设备移植，能启动，设备页上够多的绿勾让人冲动。这位开发者成了那个冲动的人。</p>



<p class="wp-block-paragraph">他没太在意那些标红的「已损坏」项：Wi-Fi、蓝牙、硬件加速，以及让这部手机胜任小服务器的几乎一切。结果只看到 postmarketOS 的开机画面和一块黑屏——既不是服务器，也不是手机了。</p>



<p class="wp-block-paragraph">把原厂 Nothing OS 刷回来又成了另一桩苦差：刷机工具依赖 Windows，他得先在 QEMU 里装 Windows，和 USB 透传、联发科驱动搏斗，看工具卡死，最后挪到真机才恢复出厂镜像。中间一度软砖，只有黑屏，他真以为把一台好端端的设备变成了砖头。</p>



<p class="wp-block-paragraph">手机救回来了，教训也清楚：安卓已经为这块硬件写好了能用的驱动，Wi-Fi、电源管理、电池、GPU、调制解调器，连同所有古怪的厂商细节都正常工作。为了一个更常规的用户态而全盘抛弃，是笔亏本买卖。</p>



<h2 class="wp-block-heading">Termux 才是主机</h2>



<p class="wp-block-paragraph">第二次尝试保留原厂安卓，把 Termux 当作宿主环境。它提供了 OpenSSH、runit、Caddy、Cloudflared、包管理，以及足够像样的 Unix 工具；Termux:Boot 在重启后拉起监控进程与 SSH；Tailscale 给手机一个稳定的私网地址，于是从 tailnet 里的任意机器只要敲一句 <code>ssh cmf</code> 就能连上。</p>



<p class="wp-block-paragraph">Termux 不是虚拟机，它的进程仍跑在安卓的 Linux 内核上，只是它那套基于 Bionic 的用户态和标准 Debian 差别足够大，现成的 Linux 应用镜像没法直接丢进去。这个分裂反而有用：Termux 当小巧的宿主控制面，每个应用自带它期望的 Linux 文件系统。</p>



<p class="wp-block-paragraph">实际服务由 runit 监管。安卓的省电机制对一台假装服务器的设备极不友好，于是他用 Ansible 给安卓施加一套主机配置：常驻唤醒锁、关闭浅层与深层待机、把 Termux 与 Tailscale 移出后台限制、阻止 Wi-Fi 挂起，并把 Tailscale 设为常驻 VPN。</p>



<p class="wp-block-paragraph">恢复链路比任何单项设置都重要：</p>



<pre class="wp-block-code"><code>Android 启动
→ Tailscale 常驻 VPN
→ Termux:Boot
→ runit
→ 常驻服务
→ 本地与公网健康检查</code></pre>



<h2 class="wp-block-heading">从 PRoot 到真正的 chroot</h2>



<p class="wp-block-paragraph">他的应用大多以 Linux ARM64 的 OCI 镜像分发，proot-distro 能在 Debian 下轻松跑起来而不改动应用本身。PRoot 在用户态拦截文件系统和进程操作，让普通 Termux 进程以为自己身处 Debian 根文件系统里。它不是容器边界，仍与安卓共享内核、网络命名空间和 Termux 的用户身份，但作为兼容层极其好用——既不需要 root，也不需要特殊内核。</p>



<p class="wp-block-paragraph">普通 Web 服务起初这么跑毫无问题。例外是 Surf 这种对延迟敏感的浏览器负载：启动进程、加载库、读取浏览器配置、搬运截屏数据，全都要穿过 PRoot 的用户态翻译层。CPU 明明有富余，Chrome 却够不着。于是他把手机 root 了——不是为了替换安卓，而是为了把同一个 Debian 文件系统正确挂载，用真正的 <code>chroot</code> 进去。runit 依旧掌管生命周期，应用数据仍留在 Termux 存储里；负载只是改用原生系统调用而非 PRoot 抵达安卓内核。提升幅度相当明显。</p>



<p class="wp-block-paragraph">等这条路走稳，把剩下几个小服务也迁了过去。他的工作站把每个 ARM64 镜像解析到精确的摘要，导出文件系统，Ansible 在手机上校验并安装；一个小的 root 辅助程序建立私有挂载命名空间、以 chroot 进入、降权并启动原镜像的入口。手机上既不需要 Docker，也不需要编译器。这些仍是兼容环境而非安全边界，私有挂载命名空间主要让挂载与清理可预期。</p>



<h2 class="wp-block-heading">整机变成可复现的状态</h2>



<p class="wp-block-paragraph">到这一步手机什么都能跑，但他不想养一只靠一周后就会忘的命令行历史拼出来的宠物服务器。他把整个宿主搬进 Ansible 管理的状态：版本、服务定义、路由、电源设置、密钥、健康检查，全在同一个私有仓库里。</p>



<pre class="wp-block-code"><code>发布版 / OCI 镜像
→ 在 Git 中固定摘要（digest）
→ 通过 SSH 执行 Ansible
→ 手机上写入带版本号的目录
→ 原子 current 软链接
→ runit 服务
→ 本地与公网健康检查</code></pre>



<p class="wp-block-paragraph">发布版按摘要固定，装进带版本号的目录，背后是一个原子的 <code>current</code> 软链接；校验和或健康检查不通过就停下部署，回滚只需改回固定版本再应用一遍。应用数据独立于发布版存放。密钥不落在手机上，Ansible Vault 的密文放在基础设施仓库，部署时只把每个服务所需的运行时值渲染进 Termux 的私有存储。</p>



<h2 class="wp-block-heading">让手机从家用宽带接进流量</h2>



<p class="wp-block-paragraph">下一个要处理的是入口。家用宽带没有虚拟主机那样的静态地址，他也不想通过路由器把 SSH 或随机端口暴露出去，同时仍希望手机拔掉电源、带到别处、连上网络，服务器还在。</p>



<p class="wp-block-paragraph">HTTP 应用走 Cloudflare Tunnel。cloudflared 从手机发起一条出站连接，Cloudflare 把每个主机名经这条隧道送来，Caddy 再路由到对应的本地回环服务：</p>



<pre class="wp-block-code"><code>互联网
→ Cloudflare Tunnel
→ 127.0.0.1 上的 Caddy
→ 127.0.0.1 上的应用</code></pre>



<p class="wp-block-paragraph">这些服务没有任何入站路由器规则。cloudflared 只需要一条出站连接，所以手机换到别的网络，隧道会自动重连，主机名也跟着走。Tailscale 在管理面上做同样的事。</p>



<p class="wp-block-paragraph">Surf 远程浏览器的后端对延迟敏感、自己终结 TLS，而连它的旧 iPad 锁定了服务器身份，普通 Cloudflare Tunnel 在 Cloudflare 一侧终结 TLS 正好踩中它不想要的。解法是把整条 Surf TLS 流裹进一个普通的 WebSocket 里：Cloudflare 转发的是 WebSocket，真正的 Surf 连接仍在其中端到端加密，代价只是多一两个网络来回（iPad 初次测试约 60 毫秒），却能在一条只需出站连接的隧道里跑通。</p>



<h2 class="wp-block-heading">到底跑了什么</h2>



<p class="wp-block-paragraph">这台机器分两层。安卓与 Termux 掌管硬件、网络、入口与监管；Linux 常驻环境拿到自己期望的文件系统，其余时间不挡宿主的路。</p>



<ul class="wp-block-list"><li>安卓 / Termux 宿主：负责硬件、网络、入口、监管，组件含 runit、Tailscale、Caddy、Cloudflared、DDNS、运维仪表盘</li><li>root 后的 Linux 常驻环境：负责应用兼容与负载，运行 Surf 与 Chrome、记账工具、屏幕共享等</li></ul>



<p class="wp-block-paragraph">最吃力的负载是 Surf，它把现代 Chromium 带到老款 iPhone 和 iPad 上。手机在 Debian 运行时里跑桌面版 Chrome（较新的 arm64 版本）和 Surf 后端，iPad mini 收下 H.264 视频与音频，回传触摸、键盘、标签页和导航指令。另一个常驻项是个人记账工具，记录周期性收支、一次性交易、月度支出上限并逐日推算余额，它的 SQLite 数据库有自动化的离机备份和验证过的恢复流程。最新添的可观测性服务收集八核 CPU、内存、电池、温度与可达性，在 <code>https://dash.cmf</code> 提供一个只能局域网或 tailnet 内访问的界面。</p>



<h2 class="wp-block-heading">你该照做吗</h2>



<p class="wp-block-paragraph">如果你手边正有一台还算现代、可 root 的 ARM64 手机在吃灰，这事远没有听起来那么荒唐。你得到安静的硬件、低功耗、闪存、Wi-Fi、一块用于救急的内置屏幕，以及一块行为像微型不间断电源的电池。原厂安卓已经支持这块硬件，而 Termux 加一个 root 后的 chroot，足够跑起多得惊人的常规 Linux 软件。</p>



<p class="wp-block-paragraph">他不会把无可替代的数据放上去而不做自动化离机备份，也不会把 chroot 当成敌意负载的隔离边界。root 扩大了信任边界，安卓仍是个不寻常的服务器宿主，软件渲染的桌面版 Chrome 也打不过带 GPU 的专用工作站。但对手头那几个私人服务，尤其是当替代方案是无限期为一台要么慢、要么贵得离谱的虚拟主机付费时，它是个真正有用的选项，而不只是一个噱头。</p>



<p class="has-small-font-size wp-block-paragraph">来源：Hacker News / seg6.space</p>

]]></content:encoded>
					
					<wfw:commentRss>https://mylogs.cn/old-phone-termux-home-server/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
