隔壁老王
**一、 前言:我们要做什么,以及为什么这么做?**
欢迎来到本篇教程。如果您已经通过 SSH 登录到系统,可能会发现一个特殊的设计:通过 `apt` 等传统方式安装的软件,在系统重启后会消失。
根据官方说明,这是产品“岩层”架构的一部分,旨在通过保持核心系统(地核层、地幔层)的纯净与不变,来确保长期的、绝对的运行稳定性。这是一个为保障核心业务而做出的严谨设计。不过还是给种子用户开了个口子,lzcos v1.3.2+版本后,root用户的家目录会调整为永久存储,即/root目录得以保留。
虽然还有虚拟机、 playground-docker这两个给用户一定自由度的方案,但是我是用户,我就想折腾底层,不想接受一点的性能损耗。另外我的需求也不多,方便的装一些二进制软件。
本教程的目的,是在**完全尊重并兼容这一设计**的前提下,利用强大的 **Nix 包管理器**,为我们自己开辟一个**可持久化的应用空间**。所有操作都将在系统允许的、可持久化的 `/root` 目录中进行,我们不会对核心系统进行任何修改。
理论上是没有任何问题的,如果误操作导致系统异常。重启应该会自动恢复的。另外要相信老王的服务,就算坏了也有专业售后兜底。:)
**最终目标**:实现一个重启后依然存在的、独立的软件环境,让我们可以自由、安全地安装和管理所需的命令行工具。

---
### **二、 准备工作**
在开始之前,请确保您已具备:
1.系统的 SSH root 权限。
2.从https://releases.nixos.org/nix/nix-2.32.2/nix-2.32.2-x86_64-linux.tar.xz (地址以当前2025-10-29最新版,2.32 为例)下载 Nix 的官方安装包。
3.解压至 `~/onix-unpack` 目录。任意目录都可以,我的操作是这样的。当然需要先 `apt update`,然后 `apt install xz`。
运行 `tar -xJf data.tar.xz -C ~/onix-unpack`
---
### **三、 详细安装步骤**
请严格按照以下步骤操作,以确保安装过程顺利。
#### **第一步:创建并配置持久化环境**
这是整个方案的基石。我们将创建真实的数据存储目录,并使用 `bind mount` 技术将其映射到 Nix 所需的 `/nix` 路径。同时,预先设置一个关键配置以确保安装过程顺利。
1. **创建持久化目录与挂载点**
在终端中执行以下命令:
```bash
# 在可持久化的 /root 目录下,创建用于实际存放 Nix 数据的主目录
mkdir -p /root/nix_persistent
# 创建 Nix 期望的 /nix 目录,它将作为我们映射的“入口”
mkdir -p /nix
```
2. **执行 Bind Mount 路径映射**
这一步将把我们的持久化目录链接到 `/nix`:
```bash
# 将 /root/nix_persistent 目录挂载到 /nix
# 此后,所有对 /nix 目录的读写操作,都会被系统透明地重定向到 /root/nix_persistent
mount --bind /root/nix_persistent /nix
```
3. **预设 Nix 配置**
为了避免在 `root` 用户下安装时因默认的安全检查而中断,我们预先创建一个配置文件:
```bash
# 创建用户配置目录
mkdir -p /root/.config/nix
# 写入配置,将 build-users-group 选项设置为空
# 这将告知 Nix 在我们的单用户环境下,无需进行构建组的相关检查
echo "build-users-group =" > /root/.config/nix/nix.conf
```
#### **第二步:运行 Nix 官方安装脚本**
在准备工作完成后,我们可以开始正式安装。
```bash
# 进入存放安装脚本的目录
cd ~/onix-unpack
# 运行单用户模式的安装命令
sh ./install --no-daemon
```
安装脚本会识别到我们预设的环境与配置,并顺利完成。安装结束后,您会看到提示信息,告知需要重新登录或加载配置文件。
#### **第三步:配置环境自动恢复**
为了让我们的 `bind mount` 映射在系统重启后依然生效,需要将其加入到 Shell 的启动流程中。
我们将使用 `sed` 命令,安全地将一段自动挂载脚本插入到 `/root/.profile` 文件的顶部。
```bash
# 这行命令会将一段脚本插入到 /root/.profile 文件的第一行
# 该脚本会在每次登录时检查 /nix 是否已挂载,如果未挂载,则自动重新执行挂载操作
sed -i '1i # --- [Auto-Mount Nix Persistence Layer] ---\nif ! mountpoint -q /nix; then\n mkdir -p /nix && mount --bind /root/nix_persistent /nix\nfi\n# -------------------------------------\n' /root/.profile
```
图片内容稍有一点出入,本质就是自动绑定挂载 root/nix_persistent 到 /nix

其实这一步骤应该也可以使用 systemd --user 免登录运行。不过在目前场景下,终端二进制文件反正也是登录进来使用的,简单就用了 .profile。
---
### **四、 验证与使用**
至此,全部安装与配置工作已完成。让我们来验证一下成果。
1. **加载新环境并启用 Flakes**
Flakes 是 Nix 推荐的现代化工作流,提供了更佳的可复现性。
```bash
# 重新加载 Shell 配置,使所有改动立即生效
source /root/.profile
# 启用 Flakes 实验性功能(可选,但强烈推荐)
# 我们使用 `>>` 追加到现有配置文件中
echo "experimental-features = nix-command flakes" >> /root/.config/nix/nix.conf
```
2. **安装第一个持久化应用**
我们以安装 `git` 为例:
```bash
# 使用 nix profile 命令将 git 安装到我们的用户环境中
nix profile install nixpkgs#git
```
3. **最终验证**
检查 `git` 是否已成功安装:
```bash
git --version
```
如果您能看到 `git` 的版本号输出,那么恭喜您,安装已完美成功!现在,您可以尝试重启系统,再次登录后,`git --version` 命令依然可用。

---
### **五、 总结**
通过本教程,我们在完全遵循系统设计的前提下,成功地为自己构建了一个独立、安全且可持久化的应用环境。现在,您可以自由探索庞大的 Nix 软件生态,为您的工作流增添更多强大的工具。
评论
1反馈2点: 1.xz的安装命令用这个apt install -y xz-utils 2.后续安装git需要把魔法开开,不然装不上 感谢作者的贡献