ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Termux安装Kali报错排查全攻略:Android上的Linux环境构建指南

Termux安装Kali报错排查全攻略:Android上的Linux环境构建指南 在 Termux 里装 Kali听上去就是几条命令的事真正动手才知道报错才是常态。我见过太多人卡在同一个地方照着教程装 Andronix过程也没出错最后启动 Kali 的时候黑屏或者一路 Next 下去突然冒出一个ERROR: failed to connect to mirror然后整条命令中断连重新执行都不敢乱动。turmex 这个拼写其实也是 Termux 常见的手滑写法说明很多人连名字都还不太熟就已经开始踩坑了。这篇文章不会给你贴一份“复制粘贴就能成功”的魔法命令因为那东西基本不存在。我会把 Termux 下安装 Kali 的各种报错按“装到哪一步 报错长什么样 根因是什么 怎么处理”的方式拆开讲。适合第一次在 Android 上装 Kali 的新手也适合那些已经装了一半、卡在某个红字界面不知道该怎么继续的人。1. 先说清楚Termux 里的 Kali 到底是怎么“装”上去的1.1 三种主流方案的差别NetHunter、Andronix、纯 chroot 脚本在 Termux 生态里装 Kali市面上流行的大概有三种做法。很多人报错之后去搜教程发现别人用的方案和自己根本不一样结果把 A 方案的排错方法用到 B 方案上越搞越乱。所以先把这个底层差异讲明白。第一种是NetHunter。它本质上是给特定机型做的 Kali 发行版需要手机解锁 Bootloader、刷入内核属于“重操作”。如果你的手机没解锁或者压根不想动系统分区那 NetHunter 就不适合而且它也不是在 Termux 里面跑的。第二种是Andronix。它提供了一组打包好的安装脚本原理是在 Termux 环境里创建一个 Linux 发行版的 chroot 或 proot 环境。Andronix 的优点是交互做得好菜单引导式操作新手也能一路点下去。但它的脚本内部做了很多封装一旦出错错误信息往往很长看起来像是“万能报错”实际定位起来反而麻烦。第三种是纯命令行的 chroot/proot 方案。一般步骤是安装 Termux 基础包下载 Kali 的 rootfs 镜像然后用proot或者chroot进入系统。这也是 Andronix 背后的原理区别在于你手动控制每一步报错也看得懂。对学习排错的人来说我反而更推荐这种方式因为你能清楚地知道是下载问题、权限问题还是文件系统问题。方案核心方式报错重点适合人群NetHunter刷内核 系统级安装机型不兼容、内核刷入失败有刷机经验的折腾党AndronixTermux 内引导安装脚本中断、存储权限、镜像连接图省事的新手手动 proot/chroot自己下载 rootfs 并配置下载失败、依赖缺失、权限问题想真正学到原理的人1.2 报错频发的底层原因Android 沙箱和 Linux 发行版的天然冲突很多人以为 Termux 就是“手机上装了个 Linux 终端”其实并不是。Termux 本身是一个 Android 应用它运行在系统的沙箱环境里不能像普通 Linux 服务器那样直接操作/sys、/proc、/dev等目录。而 Kali 的 rootfs 在启动时会尝试访问这些系统路径来初始化各种服务这就是大量报错的源头。另一个容易被忽略的问题是Android 10 及以后版本的存储策略变化。Termux 默认只能访问自己的私有数据目录如果你想把 Kali 的镜像文件放到手机“公共目录”里比如/sdcard/Download就必须手动授予存储权限。很多报错表面上看起来是“文件不存在”或者“权限拒绝”实际上就是这个原因。还有exec 权限的问题。在部分 Android 设备上/data目录挂载时带了noexec参数导致 Termux 里的二进制文件无法执行。你的 Kali 系统就算正确安装了一运行就提示Permission denied也是这一层的问题。理解了这三个底层原因再去看到各种五花八门的报错你会发现它们其实就是“Android 限制了 Linux 的发挥空间”在不同环节的具体表现。下文的所有排查基本都是围绕这几条主线展开的。2. 按报错出现顺序拆解从安装到进桌面的完整排查流程2.1 阶段一Termux 基础环境准备很多新手一上来就跑pkg update pkg upgrade然后看着一大屏日志滚过去最后一段红字写着ERROR: Problem detected或者下载速度极慢。这不是 Kali 安装的问题而是 Termux 仓库连接不稳定。官方的仓库在国外访问速度时快时慢偶尔还会直接超时。我的建议是不要折腾官方源直接把 Termux 的软件源切换成国内镜像。Termux 换源很简单在较新版本里只需要termux-change-repo在弹出的图形界面上用方向键选择国内的镜像站点比如清华源或阿里源回车确认即可。切换之后再跑一次pkg update更新速度会有一个质的提升很多莫名其妙的“下载中断”“校验失败”也会随之消失。这里要特别提醒一件事不要跳过pkg upgrade。Termux 的基础包里像wget、curl、tar、proot这些软件版本更新很频繁。如果你刚装的 Termux 版本是旧的直接去跑 Kali 安装脚本很可能因为某个依赖库版本太低而报错。这类报错通常非常隐蔽不会直接告诉你“某个包版本不对”而是显示一段类似cannot find -lxxx或者undefined symbol的信息新手根本看不懂。我实测过一个场景不执行pkg upgrade直接安装 proot、wget 等工具再运行 Kali 的启动脚本大概率会遇到bash: /bin/bash: No such file or directory之类的诡异提示。出现这种情况往往不是 Kali 文件系统坏了而是 Termux 内部的文件路径映射有问题。升级 Termux 的基础包之后问题自动消失。2.2 阶段二下载启动脚本与镜像文件时的报错安装 Kali 最关键的一步是下载 rootfs 镜像。Andronix 的脚本会自动下载手动方案则需要你自己找到镜像地址。这一阶段的报错主要集中在wget: unable to resolve host address、ERROR 403: Forbidden、TLS certificate verification failed等。unable to resolve host address说明 DNS 解析有问题。你可以在 Termux 里用pkg install dnsutils安装工具然后执行nslookup mirror.xxx.com来确认域名是否解析成功。如果 DNS 确实挂了可以切换到公共 DNS 再试。由于 Android 应用的网络请求通常走系统的 DNS 设置Termux 内部往往没法直接改所以更实际的办法是换个网络环境或者关闭 Wi-Fi 用移动数据试一次。ERROR 403: Forbidden在 Andronix 里很常见因为 Andronix 的脚本里下载链接带有一次性 token链接过期了就会返回 403。这时候不要反复重新执行同一个脚本先把已下载的临时文件清理掉再重新生成一个新的下载链接。手动方案中如果 wget 下载官方 Kali rootfs 出现 403大概率是你用的镜像链接本身限制了非浏览器访问可以换一个镜像源地址。网络层面的勘误其实不难真正麻烦的是下载到一半中断后你无法判断文件是否完整。es 的做法是下载完成后立刻校验文件大小和校验值。如果下载中断wget 会生成一个部分文件再次执行时可能因为同名文件存在而覆盖失败报出一个很奇怪的No such file or directory。我自己的习惯是每一步下载前先清理同名文件rm -f kali-rootfs-arm64.tar.xz wget -O kali-rootfs-arm64.tar.xz https://mirrors.tuna.tsinghua.edu.cn/kali-images/kali-2024.2/kali-linux-2024.2-esp.img.xz如果文件较大建议在后台执行wget -c支持断点续传这样即使中途网络断开重新执行也能继续下载而不是从头再来。2.3 阶段三写入文件系统与安装依赖时的报错镜像下载完成后下一步通常是把 rootfs 解压到某个目录。这里最容易出现的是空间不足的报错No space left on device。为什么会出现空间不足因为 Termux 安装在 Android 的应用数据分区里这个分区可能很小。很多手机虽然机身存储有 128GB但/data分区的用户可用空间并不等同于手机标称的存储空间尤其是 2021 年以后的机型系统分区划分越来越复杂Termux 实际可用的可能只有几十个 GB而且你手机里的照片、微信缓存也占的是同一个分区。处理方式有两个方向一是把 Kali 目录设置在 Termux 数据目录之外的外部存储上需要用到 Termux 的存储权限和~/storage软链接二是直接给 Termux 清理出足够空间删掉下载好的镜像压缩包只保留解压后的目录。这里我强烈建议rootfs 压包解压完后立刻把原始压缩包删掉。压缩包动辄 1~2GB解压后系统占 5~8GB加起来对 Termux 来说压力很大。具体操作# 解压 proot --link2symlink tar -xf kali-rootfs.tar.xz # 确认解压成功后再删除压缩包 rm -f kali-rootfs.tar.xz其实还有一种更隐蔽的情况空间明明充足却依然报No space left on device。这时候八成是inode 用完了。你可以用df -i去查看 inode 使用率如果发现IUsed%接近 100%说明小文件太多把 inode 挤满了。这种情况清理掉部分 Termux 缓存文件即可恢复。另外解压时如果用了tar而不是proot --link2symlink tar在一些 Android 设备上会因为不支持硬链接而报错。硬链接在 Android 的/data分区上不是总能正常工作强制把所有硬链接转换为符号链接能规避这个问题。这个细节是很多新手最容易卡住的地方之一而且光看报错信息根本联想不到是硬链接的问题。2.4 阶段四进入 Kali 后的配置报错文件系统解压完成后你的 Kali 其实还不能用需要通过proot进入。命令大概是proot --link2symlink \ -0 \ -r /data/data/com.termux/files/home/kali-arm64 \ -b /dev -b /proc -b /sys \ /usr/bin/env HOME/root \ /bin/bash --login这一步常见的报错是chroot: cant execute /bin/bash: Exec format error。这种提示和我们前面提到的 exec 权限有关系但更常见的原因是架构不匹配你下载了 arm64 的镜像但设备是 32 位系统或者反过来下载了 x86_64 的镜像设备是 ARM 处理器。检查方法很简单在 Termux 里执行uname -m如果输出是aarch64下载镜像时就要认准arm64字样。如果输出是armv7l那就得找armhf版本。这个错误我在很多求助帖里看到过很多人第一反应是去问“为什么我的 Kali 进不去”其实只要对照一下架构自己就能发现真相。成功进入 Kali 之后还有一批新的问题等着你比如 locale 警告。这个不算致命但很烦人启动时满屏提示perl: warning: Setting locale failed。处理方式是进入 Kali 后先安装语言包apt install locales -y dpkg-reconfigure locales然后选中en_US.UTF-8或者zh_CN.UTF-8重新登录即可。另外很多人装 Kali 不只是为了用终端还想在里面跑图形桌面。这就会用到 VNC 或 Xserver。报错里最常见的是Could not create directory /root/.vnc或者A VNC server is already running as :1。前者是权限问题mkdir -p /root/.vnc手动建目录就能解决后者是端口冲突杀掉旧进程或者换一个 display 编号即可。3. 高频报错对照表与实战排查方法3.1 高频报错速查表现象、根因、解决办法我根据自己摸索和帮人查错的经验把 Termux 装 Kali 最常见的报错汇总成一张速查表。建议你收藏一下遇到问题先来这里对号入座再去搜具体细节会高效很多。报错内容典型片段根因方向快速处理思路ERROR: Problem detectedTermux 官方源连接不稳定执行termux-change-repo换国内镜像源unable to resolve host addressDNS 解析失败检查网络关 Wi-Fi 用移动网络重试ERROR 403: Forbidden下载链接 token 过期清理旧临时文件重新生成下载链接No space left on device存储或 inode 不足df -h和df -i查看清理缓存并删除压缩包Exec format error架构不匹配uname -m查看架构重新下载对应镜像cant execute /bin/bash镜像损坏或 exec 权限问题重新解压 rootfs检查/data挂载参数Permission denied缺少-0参数或目录权限不对在 proot 命令中加上-0或改用 root 用户检查tar: Cannot hard linkAndroid 不支持硬链接用proot --link2symlink tar解压locale: Cannot set LC_ALL缺失 locale 配置进入系统后安装 locales 并重新配置A VNC server is already runningVNC 端口冲突或未杀掉旧进程vncserver -kill :1后重新启动表格只能告诉你“是什么问题”真正动手时还需要一点定位问题的基本功。3.2 定位报错的两个基本功看日志和分段验证我发现很多人遇到报错的第一反应是把错误截图发到问答社区里然后干等回复。但截图里的信息量其实非常有限特别是报错信息特别长的时候截图上可能只显示了最后几行关键线索全被截掉了。在求助之前至少有件事值得你自己先做把完整日志保存下来逐行看一遍。Termux 里有一个简单办法能让所有输出同时写入文件bash setup.sh 21 | tee install.log21表示把标准错误输出合并到标准输出里tee会同时把内容显示在屏幕上并写进install.log。出问题后你可以在日志里搜索error、failed、cannot这些关键词定位离它们最近的上下文。另一个基本功是分段验证。安装 Kali 的流程本质上是一串动作准备环境 → 下载镜像 → 解压文件 → 进入系统 → 配置系统。如果最后一步失败了不要从头到尾重新跑一遍因为前面的步骤可能都是成功的。更好的做法是把已经完成的部分当作“既定事实”只重跑失败的那一段。举个例子。如果你已经成功进入到 Kali 的rootlocalhost提示符只是后续apt install某个软件包时报错了那就没有必要回到 Termux 环境重新下载镜像、重新解压。直接在 Kali 里排查就行检查软件源、检查依赖关系、看是不是包名写错了。这个习惯不仅对 Termux 装 Kali 有用以后你排查任何 Linux 问题都用得上。大部分人不缺解决问题的命令缺的是“缩小问题范围”这个思维。4. 一次真实的“卡了三天”的报错复盘4.1 现场描述报错截图到底长什么样说一个我印象很深的案例。有个朋友发给我一张截图内容是E: Cant locate package metasploit-framework他说自己在 Termux 里装 Kali 卡了三天换了好几个教程每个教程都叫他用apt install metasploit-framework但每次执行都提示找不到这个软件包。我第一反应是问他你现在是在 Termux 环境里执行apt还是已经进入了 Kali 环境再执行apt他回答说是在 Termux 里。这就是问题所在Termux 的apt用的是 Termux 自己的软件仓库里面根本不包含 Kali 的工具包。只有在proot进入 Kali 之后apt才是 Kali 的apt才能安装 Kali 仓库里的软件。4.2 排查思路演进为什么会出现这种认知错位很多人下意识认为只要照着教程输入同样的命令就能得到同样的结果。但忽略了一个关键前提教程里的apt、dpkg、systemctl这些命令是在哪个环境里执行的这个前提错了后面的命令全都会失效。这个问题的根源是环境混淆。Termux 本身是一个 Linux 环境它有自己的包管理器你进入 Kali 的 chroot 之后是另外一个独立的 Linux 环境也有自己的包管理器。两者的软件仓库完全不同。如何确认自己当前在哪个环境里最直观的方法看提示符Termux 的提示符通常是$而 Kali 的 root 提示符是rootlocalhost或者类似的#。不过有些脚本会修改 PS1所以更可靠的方法是执行cat /etc/os-release输出NAMEKali GNU/Linux就说明你已经在 Kali 里了输出别的发行版信息则说明你还在 Termux 或者别的地方。4.3 最终解决只改了一个执行环境问题秒消失确认问题后解决方式非常简单。先退出 Termux 的普通环境用前面提到的 proot 命令进入 Kali然后再执行apt update apt install metasploit-framework几分钟后软件包就正常装了。这个案例之所以能让人卡三天不是命令本身有多难而是对“环境”的理解出了问题。我后来把这套思路总结成一句话报错不可怕可怕的是搞不清自己现在是在哪一个环境里执行命令。这个判断一旦错了后面所有排查都会南辕北辙。5. 规避这些坑我后来推荐的安装前检查清单5.1 硬件与系统前置条件先确认手机适不适合折腾在按下第一条安装命令之前花五分钟做个前置检查能帮你避开 80% 的基础报错。第一是Android 版本。Termux 官方新版本要求 Android 7 及以上低于这个版本很多功能会异常。在拨号界面输入*#*#4636#*#*可以快速查看手机信息也可以在设置里找到“关于手机”查看。第二是RAM 大小。在 Termux 里跑 Kali即使是最小安装也建议手机 RAM 不低于 4GB。RAM 不够的机型进入 Kali 后很容易出现“进程被系统杀掉”的问题现象是终端突然自己黑屏或者提示Process completed (signal 9)。这种问题基本无解只能换设备或者用更轻量的发行版。第三是磁盘空间。建议至少预留 10GB 给 Termux 使用。前面说过了rootfs 解压后本身就有 5~8GB你后面还要安装工具、存放临时文件空间太紧会在各种意想不到的环节触发No space left on device。5.2 推荐的最小化安装顺序如果需要我给一个相对保守、不容易出错的安装路线我会推荐下面这个顺序。它不是最短路径但每一步都留有验证环节出了问题你知道是哪一个环节的问题。# 第一步更新 Termux 基础环境 pkg update pkg upgrade -y # 第二步安装必要工具 pkg install wget proot tar termux-tools -y # 第三步授予存储权限 termux-setup-storage # 第四步创建 Kali 目录并下载 rootfs mkdir -p ~/kali-arm64 cd ~/kali-arm64 rm -f kali-rootfs.tar.xz wget -O kali-rootfs.tar.xz 你的镜像下载地址 # 第五步解压 rootfs关键 proot --link2symlink tar -xf kali-rootfs.tar.xz rm -f kali-rootfs.tar.xz # 第六步启动 Kali建议先写成一个脚本 nano start-kali.shstart-kali.sh的内容如下#!/data/data/com.termux/files/usr/bin/bash proot --link2symlink \ -0 \ -r /data/data/com.termux/files/home/kali-arm64 \ -b /dev \ -b /proc \ -b /sys \ -b /sdcard \ /usr/bin/env HOME/root \ /bin/bash --login保存后设置执行权限chmod x start-kali.sh ./start-kali.sh每次进入 Kali 都统一执行./start-kali.sh不要每次粘贴一长串命令减少手动输入出错的概率。5.3 排错原则尽快建立“最小可运行系统”最后一条原则是我在多次折腾后总结出的最重要的经验先把最小系统跑起来再谈图形界面和额外工具。很多人的目标是“在 Kali 里用图形界面跑 Burp Suite 或者别的工具”于是一开始就想装完整版 Kali还配上桌面环境。在我看来这是完全颠倒的顺序。正确做法是先用最小 rootfs 进入终端确认apt update能跑通装一个vim、curl之类的小工具验证软件源、网络、权限都正常。只有这个“最小可运行系统”稳定了再一步步加装桌面环境、VNC、常用工具。这样做的好处是每一轮新增的东西如果报错你都有清晰的边界。比如 VNC 连不上那就只是显示协议的问题和 rootfs 本身无关如果apt正常但某个工具装不上那多半是软件源或依赖问题而不是系统结构问题。如果你一开始就装完整版出了问题你会同时面对十几个不确定因素排查难度直接翻倍。另外再说一个小技巧。如果你已经安装了 Andronix 又中途失败想切换到手动方案之前残留的目录和脚本可能会干扰后续操作。推荐用rm -rf把相关的临时目录清理干净或者干脆重装一次 Termux从零开始。重装也就几分钟比在残留环境里反复排查要快得多。根据我个人的经验Termux 里装 Kali 这件事成功与否并不取决于你多会用 Kali而取决于你能不能读懂 Android 环境对 Linux 的那些限制。大部分报错翻来覆去就是存储权限、架构不匹配、exec/proot 异常、软件源连接失败这几类。把 Android 和 Termux 这一层理解透了以后无论是装 Kali 还是跑别的 Linux 发行版都会顺畅很多。
返回列表