在新磁盘挂载点/data安装codex

实例是 Oracle Cloud Always Free VM.Standard.E2.1.Micro + Linux , /data 目录。

Codex CLI 官方支持用 npm 安装:npm i -g @openai/codex,首次运行需要登录 ChatGPT 或配置 API key;

建议:Codex 安装到 /databubblewrap 用系统包安装到 /usr/bin/bwrap。因为 bubblewrap 涉及 Linux namespace / sandbox 权限,用发行版包最稳。


0. 检查 /data

df -h /data

mount | grep ' /data ' || true

复制代码
更改权限
```bash
sudo chown -R "$USER:$USER" /data
chmod 755 /data

如果看到 /data 挂载参数里有 noexec,Codex 二进制可能无法执行,需要改成可执行挂载:

bash 复制代码
sudo mount -o remount,exec /data

1. 安装基础依赖

Ubuntu / Debian 系

bash 复制代码
sudo apt update
sudo apt install -y curl git tar gzip unzip xz-utils ca-certificates

2. 把 Node.js 装到 /data

Codex CLI 可通过 npm 全局安装;npm 包会安装 @openai/codex 并提供 codex 命令。 [developers...openai.com], [npmjs.com]

这里用 nvm 安装 Node.js 到 /data/.nvm,避免占用系统盘。

a,
bash 复制代码
#设置一个名为 NVM_DIR 的环境变量。
export NVM_DIR=/data/nvm
mkdir -p "$NVM_DIR"

#  "| bash":通过"管道"把下载的内容直接交给 Bash 解释器去运行。
# ? 这个脚本下载在当前目录吗?不是 .nvm 文件夹
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/master/install.sh | bash

其中,curl -o .../install.sh |bash 是 NVM 官方提供的标准安装脚本执行命令。

它的流程如下:

  1. 下载脚本:curl 会从 GitHub 的官方仓库地址下载 install.sh 安装脚本.
  2. 通过管道传递:中间的竖线符号 | 会将下载好的脚本内容直接"喂"给 bash 解释器。
  3. 自动执行安装:bash 会立即运行这些脚本内容,完成以下操作:
  • 将 NVM 的核心源代码克隆(git clone)到你的 NVM_DIR 目录中。[2, 3]
    • 尝试自动在你的配置文件(如 ~/.bashrc 或 ~/.zshrc)中添加加载 NVM 的环境变量代码。

因为在这条命令之前已经执行了 export NVM_DIR=/data/.nvm,

所以这个 install.sh 脚本在运行时会聪明地识别出这个变量,

并放弃默认的 ~/.nvm 路径,直接把所有东西安装到你指定的 /data/.nvm 下。

b,

让当前 shell 生效:

bash 复制代码
export NVM_DIR=/data/nvm
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"

这是用于在 Shell 环境中加载 NVM(Node Version Manager)的配置代码。它通常出现在 .bashrc、.zshrc 或脚本开头。

可以把它拆解成三个部分来理解:

aa. export NVM_DIR=/data/.nvm
  • 作用:设置一个名为 NVM_DIR 的环境变量。
  • 含义:告诉系统 NVM 的程序和管理的所有 Node.js 版本都存放在 /data/.nvm 这个目录下。
  • 注意:默认通常是 $HOME/.nvm,这里显式指定到了 /data/.nvm(可能是为了节省系统盘空间或统一数据存放)。
bb. [ -s "$NVM_DIR/nvm.sh" ]
  • 作用:这是一个条件判断。
  • 含义:检查 $NVM_DIR/nvm.sh 这个文件是否存在,且其文件大小大于 0(即不是空文件)。
  • 目的:确保 NVM 的核心脚本文件是有效的,避免后面执行时报错。
cc. && . "$NVM_DIR/nvm.sh"
  • &&:逻辑"与"。只有当前面的判断(文件存在且非空)为真时,才会执行后面的命令。
  • .:(\在这里是取消.在shell下的alias,因为很少人改.的意思,所以这里不加\也行)这是 source 命令的简写。前面的反斜杠 \ 是为了防止别名(alias)干扰,确保执行的是原生的 Shell 命令。
  • 含义:运行(加载)nvm.sh 脚本。加载后,你的终端才能识别 nvm 这个命令,从而可以切换 Node 版本。

dd, 通俗总结

这段代码的意思是:

"先把 NVM 的家目录定在 /data/.nvm;如果发现这个目录里确实有 NVM 的启动脚本,就立刻运行它。"

执行完这一行后,你就可以在终端里愉快地使用 nvm install 或 nvm use 了。

c,

安装 Node.js LTS:

bash 复制代码
nvm install --lts
nvm use --lts
node -v
npm -v

写入 ~/.bashrc

bash 复制代码
cat >> ~/.bashrc <<'EOF'

# Node.js via nvm under /data
export NVM_DIR=/data/nvm
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"
EOF

3. 把 npm 全局包目录放到 /data

bash 复制代码
mkdir -p /data/npm-global
npm config set prefix /data/npm-global

写入 PATH:

bash 复制代码
cat >> ~/.bashrc <<'EOF'

# npm global binaries under /data
export PATH=/data/npm-global/bin:$PATH
EOF

export PATH=/data/npm-global/bin:$PATH

确认:

bash 复制代码
npm config get prefix
echo "$PATH"

4. 安装 Codex CLI 到 /data

bash 复制代码
npm install -g @openai/codex

验证:

bash 复制代码
which codex
codex --version

正常情况下应该显示类似:

bash 复制代码
/data/npm-global/bin/codex

运行:

bash 复制代码
codex

首次运行会提示登录;官方文档说明可用 ChatGPT 账号登录,或使用 API key。 [developers...openai.com], [npmjs.com]

如果你想用 API key:

bash 复制代码
cat >> ~/.bashrc <<'EOF'

# OpenAI API key for Codex
export OPENAI_API_KEY="你的_API_KEY"
EOF

export OPENAI_API_KEY="你的_API_KEY"

5. 把 Codex 配置也放到 /data,可选但推荐

Codex 默认配置一般在 ~/.codex。如果你的系统盘很小,可以软链到 /data

bash 复制代码
mkdir -p /data/codex-config

if [ -d ~/.codex ] && [ ! -L ~/.codex ]; then
  mv ~/.codex /data/codex-config/home-codex-backup
fi

ln -sfn /data/codex-config ~/.codex

验证:

bash 复制代码
ls -ld ~/.codex

6. 安装 bubblewrap

Bubblewrap 是 Linux 下常用的低层 sandbox 工具,命令通常是 bwrap;Oracle Linux 8 的官方 BaseOS 仓库提供 bubblewrap 包,安装后会有 /usr/bin/bwrap[github.com], [oraclelinux.pkgs.org]

Oracle Linux / RHEL 系

bash 复制代码
sudo dnf install -y bubblewrap

验证:

bash 复制代码
which bwrap
bwrap --version

Ubuntu / Debian 系

bash 复制代码
sudo apt install -y bubblewrap

验证:

bash 复制代码
which bwrap
bwrap --version

7. 测试 bubblewrap 是否可用

bash 复制代码
bwrap \
  --ro-bind /usr /usr \
  --symlink usr/bin /bin \
  --symlink usr/lib64 /lib64 \
  --proc /proc \
  --dev /dev \
  --tmpfs /tmp \
  --unshare-pid \
  bash -lc 'echo "bwrap OK"; uname -a'

如果成功,会输出:

text 复制代码
bwrap OK
Linux ...

8. 测试 Codex

进入一个项目目录,不建议直接在 $HOME 根目录运行:

bash 复制代码
mkdir -p /data/projects/test-codex
cd /data/projects/test-codex

codex

或者非交互测试:

bash 复制代码
codex exec "创建一个 hello.py,运行后打印 hello from codex"

9. 如果你强制想把 bubblewrap 也编译到 /data

一般不推荐,系统包更安全稳定。但如果你确实想放到 /data/local/bin/bwrap,可以这样做。Bubblewrap 官方源码使用 Meson 构建系统,也可以从源码安装。 [github.com], [deepwiki.com]

Oracle Linux / RHEL 系依赖

bash 复制代码
sudo dnf install -y git gcc meson ninja-build pkgconf-pkg-config libcap-devel libselinux-devel

编译安装到 /data/local

bash 复制代码
mkdir -p /data/src /data/local
cd /data/src

git clone https://github.com/containers/bubblewrap.git
cd bubblewrap

meson setup build --prefix=/data/local
meson compile -C build
meson install -C build

加入 PATH:

bash 复制代码
cat >> ~/.bashrc <<'EOF'

# local binaries under /data
export PATH=/data/local/bin:$PATH
EOF

export PATH=/data/local/bin:$PATH

验证:

bash 复制代码
which bwrap
bwrap --version

如果 Codex 或其他程序只找 /usr/bin/bwrap,可以建软链:

bash 复制代码
sudo ln -sf /data/local/bin/bwrap /usr/local/bin/bwrap

10. 常见问题

1)codex: command not found

执行:

bash 复制代码
source ~/.bashrc
export PATH=/data/npm-global/bin:$PATH
which codex

2)npm install -g @openai/codex 权限错误

确认 npm prefix:

bash 复制代码
npm config get prefix

如果不是 /data/npm-global

bash 复制代码
npm config set prefix /data/npm-global
export PATH=/data/npm-global/bin:$PATH
npm install -g @openai/codex

3)bwrap 报 user namespace / permission 错误

先检查:

bash 复制代码
sysctl user.max_user_namespaces 2>/dev/null || true

如果是 0,尝试:

bash 复制代码
echo 'user.max_user_namespaces=15000' | sudo tee /etc/sysctl.d/99-userns.conf
sudo sysctl --system

然后重新测试:

bash 复制代码
bwrap --dev-bind / / true

4)Oracle 免费小鸡内存小,npm 安装慢或失败

可以临时加 swap:

bash 复制代码
sudo fallocate -l 1G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
free -h

永久启用:

bash 复制代码
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

最小命令汇总版

如果你已经有 /data,直接跑这组:

bash 复制代码
sudo mkdir -p /data
sudo chown -R "$USER:$USER" /data

sudo dnf update -y
sudo dnf install -y curl git tar gzip unzip xz which ca-certificates bubblewrap

export NVM_DIR=/data/nvm
mkdir -p "$NVM_DIR"
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/master/install.sh | bash

export NVM_DIR=/data/nvm
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"

nvm install --lts
nvm use --lts

mkdir -p /data/npm-global
npm config set prefix /data/npm-global
export PATH=/data/npm-global/bin:$PATH

npm install -g @openai/codex

cat >> ~/.bashrc <<'EOF'

export NVM_DIR=/data/nvm
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"
export PATH=/data/npm-global/bin:$PATH
EOF

codex --version
bwrap --version

如果实例是 Ubuntu 镜像 ,把 dnf 那行换成:

bash 复制代码
sudo apt update
sudo apt install -y curl git tar gzip unzip xz-utils ca-certificates bubblewrap
相关推荐
神奇椰子3 小时前
Linux系统更换软件源说明文档
linux·运维·服务器
wanhengidc3 小时前
BGP服务器的功能是什么
运维·服务器·安全·web安全·智能手机
HealthScience4 小时前
vscode使用Excel插件导致codex插件无法粘贴图片
服务器·vscode·excel
夏日听雨眠4 小时前
Linux(printf函数输出问题,exit ,主函数参数,fork函数,文件系统调用)
linux·运维·服务器
阿火~4 小时前
linux部署nacos【无脑简单版】【支持ARM版本和X86版本】
linux·运维·服务器
暴力求解4 小时前
Linux---网络基础概念
linux·运维·服务器·网络·操作系统
AquaMriusC4 小时前
Windows11专业版使用虚拟化技术安装Linux(CentOS7)
linux·运维·服务器
pengyi8710154 小时前
共享IP全面优缺点解析,适合什么人群使用?
linux·运维·服务器·网络·tcp/ip
wo3258661455 小时前
国产信创海光服务、兆芯服务器,搭配板载国产千兆网卡网讯WX1860A2、WX1860A4网卡驱动安装方法
运维·服务器