在Termux中使用proot-distro运行ubuntu

直接在termux中安装claude code会遇到下面错误:

bun -version
error: "/data/data/com.termux/files/home/.bun/bin/bun" has unexpected e_type: 2

这个错误是因为bun是为标准Linux环境(依赖glibc库)编译的,和Termux的Android环境(bionic libc)不兼容。

由于Bun官方的Android实验性支持可能尚未彻底落地,最简单可靠的方式是通过Termux运行一个完整的Linux虚拟环境。就像在安卓手机上“模拟”一台Linux电脑,在里面所有软件的兼容性都由Linux系统自己解决。

🛠️ 详细操作步骤

  1. 安装proot-distro并下载Ubuntu:在Termux中,依次运行以下两条命令:

    1pkg install proot-distro
    2proot-distro install ubuntu
    
  2. 登录Ubuntu环境并更新:安装完成后,用下面命令登录Ubuntu系统,并更新软件源:

    1proot-distro login ubuntu
    2apt update && apt upgrade -y
    
  3. 在Ubuntu中安装Bun:现在你的Termux就连接到了Ubuntu系统里。使用官方推荐的一键安装脚本安装Bun,网络问题多试几次即可:

    1curl -fsSL https://bun.sh/install | bash
    

    安装完成后,执行 source /root/.bashrc 使Bun命令生效,最后用 bun --version 检验,看到版本号就说明成功了。

💡 未来更简单的方案

Bun官方已宣布将实验性支持Android。届时你的操作流程会大大简化,只需在Termux中执行 pkg install bun 就能一步到位,再也无需折腾Proot虚拟环境了。

将ubuntu的安装源设置成中科大

要为 Termux 里的 Ubuntu 设置中科大源,核心是编辑 /etc/apt/sources.list,将其修改为中科大为 ARM 架构(ubuntu-ports 源)提供的地址,不能直接使用常规的 ubuntu 源。具体步骤如下:

  1. 进入 Ubuntu 环境:在 Termux 中执行 proot-distro login ubuntu

  2. 备份原有配置

    1cp /etc/apt/sources.list /etc/apt/sources.list.bak
    
  3. 获取版本代号:执行 lsb_release -a 查看 Codename。例如 24.04 是 noble,22.04 是 jammy

  4. 一键更换为中科大源:确认好你的版本代号后,运行以下命令(记得将 jammy 替换成你自己刚才查到的版本代号):

    1sudo sed -i '[email protected]@mirrors.ustc.edu.cn/ubuntu-ports@g' /etc/apt/sources.list
    
  5. 更新软件源

    1apt update && apt upgrade -y
    

💡 两种验证方法

  • 检查源文件:主要查看是否已将 /etc/apt/sources.list 文件里的官方源 ports.ubuntu.com 成功替换为 mirrors.ustc.edu.cn
  • 检查下载速度:观察 apt update 的输出,如果速度快且没有错误,则配置成功。

📝 手动配置参考(备用)

如果一键命令失效,可以用 nano 手动修改。把 jammy 替换成你的系统代号,并确保地址是 ubuntu-ports

1deb http://mirrors.ustc.edu.cn/ubuntu-ports/ jammy main restricted universe multiverse
2deb http://mirrors.ustc.edu.cn/ubuntu-ports/ jammy-updates main restricted universe multiverse
3deb http://mirrors.ustc.edu.cn/ubuntu-ports/ jammy-backports main restricted universe multiverse
4deb http://mirrors.ustc.edu.cn/ubuntu-ports/ jammy-security main restricted universe multiverse

⚠️ 常见问题

  • sudo: command not found:默认是 root 用户无需 sudo”。如果添加了普通用户,可执行 apt update` 安装 sudo。
  • ports.ubuntu.com 连接失败:网络问题。可再次运行一键命令或直接使用上面“手动配置参考”中给出的中科大源地址。
  • lsb_release: command not found:未安装 lsb-release。运行 apt update && apt install lsb-release -y 即可。

基于bun安装claude code

这主要有两种方式:

  • 方式一:全局安装官方包(最简单):如果只想把 Claude Code 作为命令行工具使用,官方已经支持直接使用 Bun 进行全局安装。在终端执行 bun install -g @anthropic-ai/claude-code 即可,安装完成后用 claude --version 验证是否成功。

  • 方式二:从源码运行(最前沿):如果你想体验最新功能甚至研究源码,可以克隆社区重构版仓库。依次执行 git clone https://github.com/pengchengneo/Claude-Code.gitcd Claude-Codebun installbun run dev 即可【12†L11】。需提前安装好 Git。

📝 详细操作步骤

无论采用哪种方式,都可以参考这份详细的步骤:

  1. 安装 Bun 运行时 Claude Code 正是基于 Bun 运行时构建的,在安装 Claude Code 之前,请先通过官方脚本安装 Bun:

    1curl -fsSL https://bun.sh/install | bash
    

    安装完毕后,重启终端或执行 source ~/.bashrc,然后运行 bun --version 确认版本需不小于 1.3.5

  2. 执行安装

    • 全局安装:执行 bun install -g @anthropic-ai/claude-code
    • 源码运行:依次执行以下命令【12†L11】:
      1git clone https://github.com/pengchengneo/Claude-Code.git
      2cd Claude-Code
      3bun install
      4bun run dev
      
  3. 配置 API 密钥并启动 在项目目录中创建 .env 文件,写入你的 API 密钥(例如 ANTHROPIC_API_KEY=你的密钥)。最后在终端输入 claude 命令即可启动。

全局安装完后,记得把 API 密钥配置好。

proot-distro login ubuntu后如何查看termux下的文件?

直接访问/sdcard目录即可,可以使用 ln -sf /sdcard/xxx yyy 命令建立软连然后进行访问。

在 Ubuntu (PRoot) 容器内,默认是看不到 Termux 宿主环境中的文件的,因为容器有自己独立的根文件系统。不过,你可以通过绑定挂载(bind mount)的方式,将 Termux 的目录映射到容器中。

下面介绍两种简单的方法,无需退出容器也能临时访问,但最稳定的是重新登录并添加挂载参数。


🔄 方法一:重新登录时挂载(推荐)

  1. 退出当前 Ubuntu 容器:在 Ubuntu 终端输入 exit 或按 Ctrl+D

  2. 在 Termux 中,使用 --bind 参数重新登录

    1proot-distro login ubuntu --bind /data/data/com.termux/files/home:/termux-home
    
    • 这会将 Termux 的 主目录(即 ~/,包含 storage 等)映射到 Ubuntu 容器内的 /termux-home 目录。
  3. 在 Ubuntu 中访问:进入容器后,直接查看 /termux-home

    1ls /termux-home
    2# 例如查看手机内部存储(Download 等)
    3ls /termux-home/storage/shared/Download
    

💡 如果需要同时挂载多个目录(如整个 Termux 的根目录),可以重复 --bind 参数:

1proot-distro login ubuntu \
2  --bind /data/data/com.termux/files/home:/termux-home \
3  --bind /data/data/com.termux/files/usr:/termux-usr

🧩 方法二:在已有的容器内手动挂载(稍复杂)

如果你已经登录 Ubuntu,并且不想退出,可以借助 proot 的运行时绑定功能,但需要额外工具。步骤如下:

  1. 在 Ubuntu 中安装 bindfs(可选)
    1apt update && apt install bindfs -y
    
  2. 创建挂载点并绑定
    1mkdir -p /mnt/termux-home
    2# 使用 bindfs 将 Termux 主目录映射进来(需要知道 Termux 的实际路径)
    3bindfs /data/data/com.termux/files/home /mnt/termux-home
    

    ⚠️ 注意:/data/data/com.termux/files/home 这个路径在 Ubuntu 容器内默认是不存在的,除非你之前已经绑定了上一级目录。这种方法通常行不通,因为容器内看不到宿主机的 /data。因此不推荐此方法,还是方法一更可靠。


📂 常用挂载场景

你想要访问的手机目录 Termux 中的路径 建议挂载到 Ubuntu 容器中的路径
Termux 主目录(含 storage /data/data/com.termux/files/home /termux-home
手机内部存储根目录 /data/data/com.termux/files/home/storage/shared /sdcard
下载文件夹 /data/data/com.termux/files/home/storage/shared/Download /termux-downloads

示例命令(一次挂载多个常用位置):

1proot-distro login ubuntu \
2  --bind /data/data/com.termux/files/home:/termux-home \
3  --bind /data/data/com.termux/files/home/storage/shared/Download:/downloads

登录后,你就可以在 Ubuntu 中直接 cd /termux-homecd /downloads 操作文件了。


🔐 权限提示

  • 挂载后,Ubuntu 内的用户(默认为 root)拥有对被挂载目录的完整读写权限。
  • 如果你在 Ubuntu 内创建了普通用户(例如 adduser myuser),可能需要确保该用户有权访问 /termux-home,可以使用 chmod 755 /termux-home

❓ 不想每次都输入长命令?

可以创建一个 Termux 的别名(编辑 ~/.bashrc):

1alias ubuntu='proot-distro login ubuntu --bind /data/data/com.termux/files/home:/termux-home'

然后执行 source ~/.bashrc,之后只需输入 ubuntu 即可自动挂载主目录登录。


现在你可以在 Ubuntu 容器中自由访问 Termux 的文件了,比如直接编辑手机 Download 文件夹里的代码,或者将 Ubuntu 内生成的文件复制到手机存储中。