恭喜你终于学会了如何退出 Vim,并且能写出密西西比河以东最优化版本的 "Hello World"。现在是时候提升你的技能了!快来试试 Android 平台的 Termux。
什么是 Termux?
Termux 是一个 Android 终端模拟器和 Linux 环境。 实际上,这意味着你可以在大多数 Android 设备上安装 Termux,并在该设备上执行几乎所有你在完整的 Linux 开发环境中可以执行的操作。 这听起来很酷,但你可能在问自己,“我为什么要用手机在触摸屏上编程? 这听起来太糟糕了。” 不妨考虑一下搭配键盘的平板电脑或现在可以运行 Android 应用程序的 Chromebook。 这些设备非常便宜,现在可以用来向人们介绍 Linux 黑客技术和开发。 我知道我们 Linux 社区的许多人都是从在旧 PC 上安装 Linux 开始的。
平板电脑和 Chromebook 是这一代人的旧电脑、废旧电脑。而且有很多可以利用的资源。 为什么不利用它们向下一代人介绍 Linux 呢? 既然 Termux 可以通过在 Google Play 商店中点击一下就安装完成,我认为 Termux 是向任何人介绍 Linux 最简单的方式。 但不要把所有的乐趣都留给新手。 Termux 可以满足您对 Linux 开发环境的许多需求。
Termux 是 Linux,但它基于 Android 并且运行在容器中。 这意味着你可以安装它而无需 root 访问权限,但也意味着你可能需要一些时间来适应它。 在本文中,我将概述我发现的一些技巧和窍门,以使 Termux 作为全职开发环境工作。
我的东西都在哪里?
你能看到的 Termux 文件系统的根目录大约从 /data/data/com.termux/files/
开始。 在该目录下,你会找到你的 home 目录和 usr
目录,所有 Linux 软件包都安装在这里。 这有点奇怪,但没什么大不了的,对吧? 你就错了,因为地球上几乎所有的脚本都硬编码为 /bin/bash
。 其他库、可执行文件和配置文件都位于与其他 Linux 发行版不一致的位置。
Termux 提供了许多经过修改以正确运行的 软件包。 首先尝试在那里查找,而不是进行自定义构建。 但是,你仍然可能需要自定义构建很多东西。 你可以尝试修改软件包的源代码,即使更改路径很容易,但很快就会变得乏味。 幸运的是,Termux 还捆绑了 termux-exec。 Termux-exec 将动态重定向脚本路径以使其正确工作。
你可能仍然会遇到一些 termux-exec 无法处理的硬编码路径。 由于你在 Termux 中没有 root 访问权限,因此你无法仅仅创建符号链接来解决路径问题。 但是,你可以创建一个 chroot 监狱。 使用 PRoot 软件包,你可以创建一个完全受你控制的 chroot,并允许你修改任何你想要的东西。 你还可以制作不同 Linux 发行版的 chroot。 如果你是 Fedora 爱好者,你可以使用 Termux 并在 chroot 监狱中运行它。 查看 PRoot 页面以获取更多发行版和安装详细信息,或者你可以使用 此脚本 来制作 Termux chroot 监狱。 我只尝试过 Termux chroot 和 Ubuntu chroot。 Ubuntu chroot 有一些需要解决的问题,因此根据你选择的 Linux 版本,结果可能会有所不同。
一个用户统治一切
在 Termux 中,所有内容都以一个用户身份安装和运行。 这与其说是一个问题,不如说是一个你需要习惯的事情。 这也意味着你可能熟悉的典型服务和用户组无处可寻。 并且没有任何东西会在启动时自动启动,因此你需要管理你可能使用的服务的启动和停止,例如数据库、SSH 等。 另请记住,你的一个用户无法修改基本系统,因此如果你需要这样做,则需要使用 chroot。 由于你没有漂亮的、预设的启动脚本,你可能必须自己编写一些。
对于日常开发,我需要 Postgres、Nginx 和 Redis。 我以前从未手动启动过这些服务; 通常它们会自动为我启动和停止,我不得不做一些研究来找出如何启动我最喜欢的服务。 这是我刚刚提到的三个服务的示例。 希望这些示例能为你指明使用你最喜欢的服务的正确方向。 你还可以查看软件包的文档以查找有关如何启动和停止它的信息。
Postgres
启动:pg_ctl -D $PREFIX/var/lib/postgresql start
停止:pg_ctl -D $PREFIX/var/lib/postgresql stop
Nginx
启动:nginx
停止:nginx -s stop
Redis
启动:redis-server $PREFIX/etc/redis.conf
停止:kill "$("$PREFIX/bin/applets/cat" "$PREFIX/var/run/redis_6379.pid"`
损坏的依赖项
Android 的构建方式与其他版本的 Linux 不同,其内核和库并不总是与典型 Linux 软件中的内核和库匹配。 你可以在 Termux 中构建软件时看到 常见的移植问题。 你可以解决其中的大多数问题,但修复软件中的每个依赖项可能需要付出太多努力。
例如,作为 Python 开发人员,我遇到的最大问题是 Android 内核不支持信号量。 Python 中的多进程库依赖于此功能,而靠我自己修复这个问题太困难了。 相反,我通过使用不同的部署机制来解决它。 之前我使用 uWSGI 运行我的 Python Web 服务,所以我切换到了 Gunicorn。 这使我可以绕过使用标准的 Python 多进程库。 当切换到 Termux 时,你可能需要有点创意来找到替代的软件依赖项,但你的列表可能非常小。
日常使用 Termux
当每天使用 Termux 时,你将需要学习它的 触摸屏 或 硬件键盘 快捷键。 你还需要一个文本编辑器或 IDE 进行编码。 所有可能的基于控制台的编辑器都可以通过快速软件包安装获得:Vim、Emacs 和 Nano。 Termux 仅基于控制台,因此你将无法安装任何基于图形界面的编辑器。 我想确保 Termux 有一个与之配套的优秀 IDE,因此我构建了基于 Web 的 Neutron64 编辑器,以便与 Termux 无缝对接。 只需访问 Neutron64.com 并在 Termux 上安装 Neutron Beam 即可开始编码。
了解一下 Termux,将你的旧 Android 设备变成开发利器。 祝你编码愉快!
5 条评论