Orin新系统常用软件安装教程

文章目录

Orin 刷好系统后,按这个顺序装软件

这份笔记给下次刚刷好的 Orin 用:先装浏览器,方便查资料和登录;再装中文输入法,方便打字;接着装 Codex,最后装 VS Code 和 Miniforge。这个顺序是为了用起来顺手,软件之间没有必须按此顺序安装的硬性依赖。

适用环境是 Jetson AGX Orin、Ubuntu 22.04、ARM64、Bash 终端和图形桌面。本次机器是 JetPack 6.2 / L4T R36.4.3。

如果是从旧系统迁移过来,先别急着刷机

我们之前就是旧系统里已经有浏览器收藏夹,也跟 Codex 聊了不少东西,后来要换系统。如果直接刷掉,软件可以重新装,但这些记录不一定找得回。所以先把要留的东西备份出来,确认新系统能用,再考虑清理旧备份。

这里先说两个最容易忘的:Chrome 收藏夹和 Codex 聊天。项目代码、教程、照片这些实际文件也要另外拷走,备份聊天不会顺便把它们全备份了。

先备份谷歌浏览器收藏夹

最简单的办法就是在旧系统的 Chrome 里导出,不用自己研究它的文件格式。

先建一个放迁移文件的目录:

bash 复制代码
mkdir -p ~/system-migration-backup

我们这台用户名是 nvidia,所以这里的 ~ 就是 /home/nvidia,刚才建的目录完整路径是:

text 复制代码
/home/nvidia/system-migration-backup/

打开 Chrome,在地址栏输入:

text 复制代码
chrome://bookmarks/

进入书签管理器,点页面右上角的三个点,选"导出书签",保存成:

text 复制代码
/home/nvidia/system-migration-backup/chrome-bookmarks.html

注意,是书签管理器里面的三个点。这个 HTML 文件里就是收藏的网址和文件夹结构,不包含登录密码、网站登录状态这些东西。

如果想知道原来的收藏夹到底放哪,我们这台实际是:

text 复制代码
/home/nvidia/.config/google-chrome/Default/Bookmarks

这个 Bookmarks 是原始数据文件,不是导出的 HTML,不能把后缀随便改成 .html 就拿去导入。Chrome 如果有多个用户配置,路径可能是 Profile 1、Profile 2。想确认当前用的是哪个,在地址栏打开 chrome://version/,看"个人资料路径",这个目录下面的 Bookmarks 才是当前这份收藏夹。文件管理器里按 Ctrl+H,就能看到 .config 这样的隐藏目录。

新系统装好 Chrome 后,还是打开 chrome://bookmarks/,点三个点,选"导入书签",找到拷回来的 chrome-bookmarks.html。打开几个收藏的网址看看,确认都还在就行。

我们之前那次备份里也已经有一份导出的收藏夹,在:

text 复制代码
/home/nvidia/preflash-backup-20261029-110751/chrome/Default/bookmarks.html

如果恢复的是那一次,就直接导入这个文件。

参考:Google 官方书签导出、导入说明。

Codex 的聊天到底放哪,先查清楚再备份

我们这台默认放在:

text 复制代码
/home/nvidia/.codex/

但别只记这个路径。有些机器设置过 CODEX_HOME,那 Codex 就可能把数据放在别处。要查,在平时启动 Codex 的同一个终端里执行:

bash 复制代码
printf 'CODEX_HOME=%s\n' "${CODEX_HOME:-未设置}"
printf '当前数据目录=%s\n' "${CODEX_HOME:-$HOME/.codex}"

我们这台没有设置 CODEX_HOME,所以上面第二行会显示 /home/nvidia/.codex。如果你是通过启动脚本或其他软件运行 Codex,还要检查那个入口有没有单独指定 CODEX_HOME;另一个终端的环境不一定和它相同。

数据目录里有几个地方要分清楚:

  • sessions/:聊天会话,按年、月、日放,文件一般叫 rollout-......jsonl。我们现在的实际路径就是 /home/nvidia/.codex/sessions/。
  • archived_sessions/:如果有归档会话,可能放在这里;没有这个目录也正常。
  • history.jsonl:输入历史,不是完整的聊天全文,只备份它是不够的。
  • session_index.jsonl 和一些 .sqlite 文件:会话索引、状态等数据,Codex 查找和管理会话时会用到。
  • config.toml:Codex 设置;auth.json:登录凭据。

想看聊天文件有哪些,可以这样查:

bash 复制代码
find "${CODEX_HOME:-$HOME/.codex}/sessions" -type f -name '*.jsonl'

所以别以为把家目录里几个教程文件复制走,聊天也就跟着过去了。教程和代码是我们让 Codex 写出来的文件;.codex 里面才是 Codex 自己保存的聊天数据。

参考:OpenAI 官方数据目录与 CODEX_HOME 说明。

旧系统怎么备份 Codex

如果是准备刷机,省心一点就把整个 Codex 数据目录打包。这样聊天、索引和配套数据都在,不用自己猜该漏掉哪个文件。代价是包可能比较大,也包含登录凭据,别公开分享。

**先退出所有 Codex 会话,也退出 VS Code 里的 Codex 扩展,再从普通终端执行。**不然一边聊天一边备份,文件和数据库还在变化,拷到的可能不是同一时刻的数据。这里的意思是先看完这段,关闭 Codex 后再操作。

bash 复制代码
mkdir -p ~/system-migration-backup
CODEX_DATA="${CODEX_HOME:-$HOME/.codex}"
CODEX_ARCHIVE="$HOME/system-migration-backup/codex-data-$(date -u +%Y%m%dT%H%M%SZ).tar.gz"
tar -czf "$CODEX_ARCHIVE" -C "$CODEX_DATA" . \
  && sha256sum "$CODEX_ARCHIVE" > "$CODEX_ARCHIVE.sha256"
printf '备份文件:%s\n' "$CODEX_ARCHIVE"

CODEX_DATA 是刚查到的数据目录,tar 是打包,文件名里的时间用来区分每一次备份。只有打包没有报错、校验文件也生成了,才算这一步成功。printf 打印出路径本身不代表前面一定成功,要看有没有错误信息。

比如最后可能得到:

text 复制代码
/home/nvidia/system-migration-backup/codex-data-20261030T080000Z.tar.gz
/home/nvidia/system-migration-backup/codex-data-20261030T080000Z.tar.gz.sha256

这两个时间只是举例,实际按命令输出的文件名来。

**然后把整个 /home/nvidia/system-migration-backup/ 拷到 U 盘、移动硬盘或另一台电脑。只放在准备刷掉的系统盘上,不算留住了备份。**拷完最好在外部副本上再比一下压缩包的 sha256sum,和校验文件里记录的那串值相同,说明内容一致。重要的项目文件和本教程也一起拷走。

新系统怎么恢复 Codex

这里要分一下情况:新系统刚装好,还没开始聊什么,可以恢复整个数据目录;如果已经聊了不少,就应该合并旧聊天,别拿旧目录直接覆盖新的。

下面这套"整体恢复",只对应刚才新打出来的 codex-data-时间.tar.gz。我们历史上那份 codex-backup.tar.gz 的目录结构不同,不能直接照这一套解压覆盖,后面单独说。

先在新系统装好 Codex,使用相同或更新的版本,再把备份拷回 /home/nvidia/system-migration-backup/。关闭 Codex 和相关扩展后,在普通终端中操作。

第一步,把下面的示例文件名换成你实际备份的名字,然后验证:

bash 复制代码
CODEX_ARCHIVE="$HOME/system-migration-backup/codex-data-20261030T080000Z.tar.gz"
sha256sum "$CODEX_ARCHIVE"
cat "$CODEX_ARCHIVE.sha256"

比较两行开头的那串值,必须相同。这里看的是内容指纹,后面的文件路径因为拷贝位置不同,可以不一样。对不上就先别恢复。

第二步,先解压到新目录看看,不要直接往当前 .codex 里倒:

bash 复制代码
CODEX_STAGE=$(mktemp -d "$HOME/codex-restore-staging.XXXXXX")
tar -xzf "$CODEX_ARCHIVE" -C "$CODEX_STAGE"
ls -la "$CODEX_STAGE"

确认解压成功,目录里有 sessions、配置和原来的数据文件后,再执行下一段。这里的 CODEX_STAGE 要在同一个终端里继续使用,换终端后变量就没有了。

第三步,保留新系统原有目录,再把解压好的旧数据放到实际使用的数据目录:

bash 复制代码
CODEX_DATA="${CODEX_HOME:-$HOME/.codex}"
CODEX_SAVED="${CODEX_DATA}.before-restore-$(date -u +%Y%m%dT%H%M%SZ)"
if [ -e "$CODEX_DATA" ]; then
    mv -- "$CODEX_DATA" "$CODEX_SAVED"
fi
mkdir -p -- "$(dirname -- "$CODEX_DATA")"
mv -- "$CODEX_STAGE" "$CODEX_DATA"

默认情况下,就是把原来的 /home/nvidia/.codex 留成 /home/nvidia/.codex.before-restore-时间,再把旧数据放回 /home/nvidia/.codex。如果设置过 CODEX_HOME,就按那个实际路径恢复。任何一步报错都先停下来,别继续复制或删除。

这套做法适合我们这种迁移到相同 ARM64 架构、用户名仍是 nvidia 的环境。整包里还可能带旧配置、插件、程序文件和登录凭据,不是跨平台、跨版本恢复的保证;登录失效时重新登录即可。如果 codex 启动命令因此找不到程序,先检查启动命令的实际指向,必要时按前面的安装步骤重装 Codex 程序,保留恢复的数据目录。

最后新开终端检查:

bash 复制代码
codex resume --all

--all 是把其他工作目录下的会话也显示出来。默认列表可能只显示当前项目,不能只因为列表里没看到,就认为记录丢了。选一条旧会话,看看内容是否还在;再确认你实际的项目目录也已经拷回来了。

我们这次已经有新聊天了,怎么把旧的合进来

我们这次实际用来恢复的旧备份在:

text 复制代码
/home/nvidia/guanlinyi/codex-backup.tar.gz

里面有 3 个旧会话。它的会话文件放在压缩包的 .codex/sessions/ 下,跟前面新备份方法直接打包"目录里的内容"不同,所以别混着恢复。

之前准备过 /home/nvidia/codex-chat-restore/restore.py,这次实际使用的是下面这个脚本,后续按这里的路径来,不用两个都跑:

text 复制代码
/home/nvidia/guanlinyi/codex-chat-recovery/code/import_chats.py

先退出 Codex 和相关扩展,再从普通终端运行。不要只在聊天窗口里让 Codex 执行:我们这次聊天里的执行环境对 /home/nvidia/.codex 是只读的,实际写入会报错,需要自己在本机终端运行:

bash 复制代码
python3 /home/nvidia/guanlinyi/codex-chat-recovery/code/import_chats.py

它先检查压缩包里的聊天记录能不能正常解析、会不会跟现有会话冲突,再把缺少的聊天文件补到:

text 复制代码
/home/nvidia/.codex/sessions/

**这个脚本只补聊天文件,不会替换现在的聊天、数据库、索引、登录信息和配置,也不会另外备份当前目录。**已有文件内容一样就跳过,发现同名但内容不一样就停下来。写入后还会核对内容,所以可以重复运行,不用为了重试先删文件。

脚本默认使用上面那份压缩包,目标是当前用户家目录的 .codex。我们这台就是 /home/nvidia/.codex;如果前面查到设置了 CODEX_HOME,运行时要用 --target 指定那个实际目录。下次迁移还想用这套方法,就把 codex-chat-recovery/ 和 codex-backup.tar.gz 一起带走。

文件导入了,为什么 codex resume 里面还是没有?

我们这次就遇到了:脚本已经把 3 个旧会话复制进去,但运行 codex resume --all,列表还是只有新系统的聊天。

后来检查发现,**旧聊天文件已经在 .codex/sessions/ 里了,但 Codex 的会话数据库还没有收录它们。**可以理解为书已经放进书柜,目录里却还没有这几本书。--all 只是显示其他工作目录的聊天,不是重新扫描、登记所有聊天文件,所以加了这个参数也不一定马上看得到。

这时先别重新解压覆盖,更不要拿旧数据库替换新数据库。直接用会话编号打开旧聊天。会话编号就是脚本输出的那串字符,也能在对应聊天文件的文件名末尾找到。这次的 3 条分别这样打开:

第一条,2026 年 10 月 26 日创建,当时工作目录是 /home/nvidia:

bash 复制代码
codex resume 01a17702-94de-7330-94f6-88c6534b5b8d

第二条,2026 年 10 月 27 日创建,当时工作目录是 /home/nvidia/guanlinyi:

bash 复制代码
codex resume 01a17bb2-618a-7532-8f66-8f3621d4c0f1

第三条,2026 年 10 月 29 日创建,当时工作目录是 /home/nvidia:

bash 复制代码
codex resume 01a1859b-662f-7af1-b7c0-2bf8af7b45e3

**上面三条分开执行。**每打开一条,先看看旧内容是不是在,确认后按 Ctrl+D 退出,再执行下一条。如果询问使用当前目录还是原来的目录,按你接下来要工作的目录选;本次是在原路径恢复,如果旧项目还没拷回来,先把项目文件找回来。

都打开过后,再运行:

bash 复制代码
codex resume --all

我们这次按会话编号恢复后,实际使用已经确认可以了。这里要分清:**脚本提示文件写入成功,只说明聊天文件进去了;能打开旧会话、看到旧内容,才算恢复这件事真的完成。**以后换一份备份,会话编号也要换成那份备份自己的,不能照抄上面这三串。

参考:OpenAI 官方会话恢复命令说明。

这里最重要的就是:**先备份到机器外面,新系统里先保留现有数据,再恢复旧的。**别只看到一个压缩包就觉得万事大吉,也别为了找回旧聊天,把新聊天直接覆盖掉。

先确认系统和网络

按 Ctrl+Alt+T 打开终端,输入:

bash 复制代码
cat /etc/os-release
uname -m

应看到 Ubuntu 22.04,架构是 aarch64。它也叫 ARM64;下载软件时选 ARM64,别选普通 Intel/AMD 电脑用的 amd64/x86_64。

先定义一个安装命令的简写,后面的 apt_run 就是用管理员权限运行 apt-get,用于安装系统软件:

bash 复制代码
apt_run() {
    sudo apt-get "$@"
}

如果换了新终端,要重新定义它。

先装下载工具:

bash 复制代码
apt_run update
apt_run install -y ca-certificates curl software-properties-common
mkdir -p ~/Downloads/orin-setup
cd ~/Downloads/orin-setup

update 只是刷新软件清单。这里不执行整机升级,也不需要为了装这些应用重新刷机。后面每一步确认成功再继续;下载报错时不要继续运行安装包。

1. 先装 Google Chrome

现在 Google 官方提供 Linux ARM64 版 Chrome,直接下载对应安装包:

bash 复制代码
curl -fL --retry 3 -o chrome_arm64.deb \
  https://dl.google.com/linux/direct/google-chrome-stable_current_arm64.deb

检查下载到的确实是 Chrome、架构确实是 ARM64:

bash 复制代码
dpkg-deb -f chrome_arm64.deb Package Architecture

应显示 google-chrome-stable 和 arm64。然后安装:

bash 复制代码
apt_run install -y ./chrome_arm64.deb
google-chrome --version

从桌面应用菜单打开 Google Chrome,首次启动按提示接受条款。浏览器要用普通用户打开。若链接将来变更,从 Google 官方安装说明 找 ARM64 .deb,不要改成下载 amd64 包。

2. 装中文输入法

我们用 Fcitx5,可以把它理解成"负责切换输入法的工具",再配上中文拼音组件:

bash 复制代码
sudo add-apt-repository -y universe
apt_run update
apt_run install -y --install-recommends \
  fcitx5 fcitx5-chinese-addons fcitx5-config-qt im-config
im-config -n fcitx5

universe 是 Ubuntu 的一个软件仓库,输入法的一些组件在这里。im-config 最后一行是在选择默认输入法框架。

**保存工作,注销桌面,再登录。**这一步让新登录会话读到输入法设置,通常不用重启整台机器。重新打开终端运行:

bash 复制代码
fcitx5-configtool

点添加按钮,搜索并添加 Pinyin;找不到时取消"只显示当前语言"的筛选。打开浏览器输入框试打中文,通常用 Ctrl+空格 切换,具体以配置界面的快捷键为准。

如果 Chrome 中仍无法输入,先完全退出并重新打开 Chrome;仍不行时,在 Ubuntu 登录界面选用户后,通过齿轮菜单选择 Ubuntu on Xorg 再试。不要一上来同时安装好几套输入法框架。

参考:Fcitx5 安装说明。

3. 装 Codex

注销之后,重新打开终端,进入下载目录,把官方安装脚本下载成功后再运行:

bash 复制代码
cd ~/Downloads/orin-setup
curl -fL --retry 3 -o codex-install.sh https://chatgpt.com/codex/install.sh

下载无报错,再执行:

bash 复制代码
sh codex-install.sh
export PATH="$HOME/.local/bin:$PATH"
codex --version

不需要为此先安装 Node.js,也不要用 sudo 运行这个安装脚本。PATH 是终端查找命令的目录清单。为了下次打开终端也找得到 Codex,保存一次:

bash 复制代码
grep -Fqx 'export PATH="$HOME/.local/bin:$PATH"' ~/.bashrc || \
  echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc

然后启动:

bash 复制代码
codex

按界面提示选择 ChatGPT 登录,并在浏览器完成授权;账号能使用哪些功能取决于账号权限。以后进入项目目录再运行 codex,它就能围绕该目录工作。教程中的命令适用于终端版 Codex。

如果提示找不到命令,先试 ~/.local/bin/codex --version:能输出版本说明主要是 PATH 问题,不要急着重复安装。

参考:OpenAI 官方 Codex CLI 说明。

4. 装 VS Code

VS Code 用来编辑代码。新终端中先重新定义开头的 apt_run,再下载 ARM64 安装包:

bash 复制代码
cd ~/Downloads/orin-setup
curl -fL --retry 3 -o code_arm64.deb \
  https://update.code.visualstudio.com/latest/linux-deb-arm64/stable

下载成功后检查,应该显示 code 和 arm64:

bash 复制代码
dpkg-deb -f code_arm64.deb Package Architecture

再安装并打开:

bash 复制代码
apt_run install -y ./code_arm64.deb
code --version
code

安装时如果询问是否添加 Microsoft 软件源,可以选择同意,方便以后更新。需要中文界面时,在扩展页搜索 Microsoft 发布的 Chinese (Simplified) Language Pack,安装后按提示重启 VS Code。

参考:VS Code 官方 Linux 安装说明。

5. 最后装 Miniforge

Miniforge 提供 Conda,用来给不同 Python 项目分开装环境,避免互相影响。它不能替你更换系统内核,也不会自动配好 Jetson 的 CUDA 或 GPU 版 PyTorch。

这里固定使用 26.9.4-1,让安装包和校验文件属于同一次发布:

bash 复制代码
cd ~/Downloads/orin-setup
curl -fL --retry 3 -O \
  https://github.com/conda-forge/miniforge/releases/download/26.9.4-1/Miniforge3-26.9.4-1-Linux-aarch64.sh \
&& curl -fL --retry 3 -O \
  https://github.com/conda-forge/miniforge/releases/download/26.9.4-1/Miniforge3-26.9.4-1-Linux-aarch64.sh.sha256

下载完成后检查文件完整性:

bash 复制代码
sha256sum -c Miniforge3-26.9.4-1-Linux-aarch64.sh.sha256

只有显示 OK(或本地语言对应的"成功")才继续:

bash 复制代码
bash Miniforge3-26.9.4-1-Linux-aarch64.sh -b -p "$HOME/miniforge3"

安装成功后执行:

bash 复制代码
"$HOME/miniforge3/bin/conda" init bash

关闭并重新打开终端,检查:

bash 复制代码
conda --version

如果 ~/miniforge3 已存在,先检查 ~/miniforge3/bin/conda --version。不要为了消除报错直接删目录,里面可能有之前的环境。

以后新建项目,可以这样开始:

bash 复制代码
conda create -n myproject python=3.10 -y
conda activate myproject

myproject 是自己起的环境名。普通 Python 包可以在这个环境里装;涉及 Jetson GPU 的包,还得按对应 JetPack 的官方说明选版本。

参考:Miniforge 官方项目、本文使用的发布文件。

遇到报错,先看哪里

下载提示 Couldn't connect,先检查网络连接是否正常。提示 404,说明链接可能变了。输入法包找不到,检查 universe 是否启用、apt_run update 是否成功。

command not found 则先找安装位置,再检查 PATH。终端输出版本号说明程序能启动,但浏览器、输入法、Codex 登录和 VS Code 都还要实际用一下才算完成。

附:一键安装脚本(未经实际安装测试)

同目录提供 orin_setup_untested.sh。**它未经空白系统的实际安装测试,只通过 Bash 语法检查。**安装中断不会自动撤销已经完成的步骤;修好网络后可以重跑,已有 Miniforge 会保留。

用普通用户运行,别在整条命令前加 sudo。执行:

bash 复制代码
bash ~/orin_setup_untested.sh

如果把文件复制到了其他目录,就替换成脚本的实际路径。脚本按同样顺序安装,最后统一注销登录即可。它会备份已有的 ~/.bashrc 和 ~/.xinputrc,备份名带 before-orin-setup-时间.bak。安装包保存在 ~/Downloads/orin-setup/。Chrome 和 VS Code 的安装器可能添加各自的软件源。

脚本结束后仍需手动添加 Pinyin、登录 Codex、首次打开 Chrome 接受条款,并打开 VS Code 验证。自动脚本无法替代这些交互步骤。

脚本全文如下,若与单独的 .sh 文件同时保存,直接运行 .sh 即可:

bash 复制代码
#!/usr/bin/env bash
# 未经实际安装测试:仅用于 Ubuntu 22.04 ARM64 桌面版 Orin。
# 请用普通用户运行:bash orin_setup_untested.sh
set -Eeuo pipefail
trap 'printf "安装中止:第 %s 行失败。请查看上面的错误;修复后可以重新运行。\n" "$LINENO" >&2' ERR
[[ $EUID != 0 ]] || { echo '请用普通用户运行,不要 sudo bash 此脚本。'; exit 1; }
source /etc/os-release
[[ $ID == ubuntu && $VERSION_ID == 22.04 && $(dpkg --print-architecture) == arm64 ]] || {
    echo '此脚本仅面向 Ubuntu 22.04 ARM64;当前环境不符合,已停止。'; exit 1;
}
echo '注意:此脚本未经实际安装测试,将安装软件并修改当前用户的输入法和 Bash 配置。'
sudo -v
apt_run() { sudo apt-get "$@"; }
fetch() {
    # 失败时保留 .part 文件供排查,下次重跑会重新下载。
    curl --fail --location --retry 3 --connect-timeout 15 --max-time 1800 -o "$2.part" "$1"
    mv -- "$2.part" "$2"
}
check_deb() {
    [[ $(dpkg-deb -f "$1" Architecture) == arm64 && $(dpkg-deb -f "$1" Package) == "$2" ]] || {
        echo "安装包身份或架构不符:$1" >&2; exit 1;
    }
}
SETUP_DIR="$HOME/Downloads/orin-setup"
mkdir -p "$SETUP_DIR"
cd "$SETUP_DIR"
apt_run update
apt_run install -y ca-certificates curl software-properties-common

printf '\n[1/5] Google Chrome\n'
fetch https://dl.google.com/linux/direct/google-chrome-stable_current_arm64.deb "$SETUP_DIR/chrome_arm64.deb"
check_deb "$SETUP_DIR/chrome_arm64.deb" google-chrome-stable
apt_run install -y "$SETUP_DIR/chrome_arm64.deb"

printf '\n[2/5] 中文输入法\n'
sudo add-apt-repository -y universe
apt_run update
apt_run install -y --install-recommends fcitx5 fcitx5-chinese-addons fcitx5-config-qt im-config
# 修改用户配置前留备份;若目标已经是 Fcitx5,也仍可重复选择。
SETUP_STAMP=$(date -u +%Y%m%dT%H%M%SZ)
for config in "$HOME/.xinputrc" "$HOME/.bashrc"; do
    if [[ -e $config ]]; then cp -a -- "$config" "$config.before-orin-setup-$SETUP_STAMP.bak"; fi
done
im-config -n fcitx5

printf '\n[3/5] Codex CLI\n'
fetch https://chatgpt.com/codex/install.sh "$SETUP_DIR/codex-install.sh"
sh "$SETUP_DIR/codex-install.sh"
export PATH="$HOME/.local/bin:$PATH"
PATH_LINE='export PATH="$HOME/.local/bin:$PATH"'
if ! grep -Fqx "$PATH_LINE" "$HOME/.bashrc"; then
    printf '\n%s\n' "$PATH_LINE" >> "$HOME/.bashrc"
fi
codex --version

printf '\n[4/5] VS Code\n'
fetch https://update.code.visualstudio.com/latest/linux-deb-arm64/stable "$SETUP_DIR/code_arm64.deb"
check_deb "$SETUP_DIR/code_arm64.deb" code
apt_run install -y "$SETUP_DIR/code_arm64.deb"

printf '\n[5/5] Miniforge\n'
if [[ -x "$HOME/miniforge3/bin/conda" ]]; then
    echo '检测到已有 Miniforge,保留当前安装。'
elif [[ -e "$HOME/miniforge3" ]]; then
    echo '~/miniforge3 已存在但未找到 conda,请先检查这个目录;不会覆盖或删除。' >&2
    exit 1
else
    MINIFORGE_VERSION=26.9.4-1
    MINIFORGE_FILE="Miniforge3-${MINIFORGE_VERSION}-Linux-aarch64.sh"
    MINIFORGE_BASE="https://github.com/conda-forge/miniforge/releases/download/${MINIFORGE_VERSION}"
    fetch "$MINIFORGE_BASE/$MINIFORGE_FILE" "$SETUP_DIR/$MINIFORGE_FILE"
    fetch "$MINIFORGE_BASE/$MINIFORGE_FILE.sha256" "$SETUP_DIR/$MINIFORGE_FILE.sha256"
    sha256sum -c "$MINIFORGE_FILE.sha256"
    bash "$SETUP_DIR/$MINIFORGE_FILE" -b -p "$HOME/miniforge3"
fi
"$HOME/miniforge3/bin/conda" init bash
"$HOME/miniforge3/bin/conda" --version
printf '\n安装步骤结束。请保存工作,注销桌面后重新登录。\n'
printf '随后运行 fcitx5-configtool 添加 Pinyin,运行 codex 完成登录。\n'
printf '首次启动 Chrome 需接受条款;VS Code、浏览器和 Conda 仍需实际打开验证。\n'
相关推荐
云和恩墨1 小时前
Mopheus Runtime深度剖析:如何将Provider CLI变成企业级智能体运行时
人工智能
X54先生(人文科技)1 小时前
百度智能对 X54 先生学科底色评估
人工智能·深度学习·百度·架构
LaughingZhu1 小时前
Product Hunt 热榜 2026-10-30:Empacer、Scape、Floot in ChatGPT
java·前端·数据库·人工智能·chatgpt·notion
西瓜拿铁好喝1 小时前
AI 办公和 RPA 不是一回事:自动化与智能化的分工
人工智能·自动化·rpa
Margrop1 小时前
下载错一个包,服务器直接崩了?别再让 x64 与 ARM64 搞崩你的环境!小学生都能懂的 CPU 架构大比方与跨三大系统(Linux/macOS/Win)一键秒级识别指南(附全自动检测脚本与避坑秘籍)
人工智能
_冷眸_1 小时前
Python 调用大模型 API:最小请求、Base URL 和 401/404 排查
开发语言·人工智能·python
Raas1001 小时前
AI网关怎么部署?MAI Gateway部署实操教程
人工智能·开源·gateway·mai gateway·企业级ai产品
alonglong1 小时前
本地把 Chrome 会话复用跑通:cookie 解密 + Playwright 注入的工程实录
人工智能
摩羯12301 小时前
AI署名论文场景下,引用存在性校验如何支撑学术科研诚信
人工智能·aigc