在懒猫上实现应用持久化:Nix 安装与配置完全指南

隔壁老王

发布于217天前
还没想好签名
**一、 前言:我们要做什么,以及为什么这么做?**

欢迎来到本篇教程。如果您已经通过 SSH 登录到系统,可能会发现一个特殊的设计:通过 `apt` 等传统方式安装的软件,在系统重启后会消失。

根据官方说明,这是产品“岩层”架构的一部分,旨在通过保持核心系统(地核层、地幔层)的纯净与不变,来确保长期的、绝对的运行稳定性。这是一个为保障核心业务而做出的严谨设计。不过还是给种子用户开了个口子,lzcos v1.3.2+版本后,root用户的家目录会调整为永久存储,即/root目录得以保留。

虽然还有虚拟机、 playground-docker这两个给用户一定自由度的方案,但是我是用户,我就想折腾底层,不想接受一点的性能损耗。另外我的需求也不多,方便的装一些二进制软件。

本教程的目的,是在**完全尊重并兼容这一设计**的前提下,利用强大的 **Nix 包管理器**,为我们自己开辟一个**可持久化的应用空间**。所有操作都将在系统允许的、可持久化的 `/root` 目录中进行,我们不会对核心系统进行任何修改。

理论上是没有任何问题的,如果误操作导致系统异常。重启应该会自动恢复的。另外要相信老王的服务,就算坏了也有专业售后兜底。:)

**最终目标**:实现一个重启后依然存在的、独立的软件环境,让我们可以自由、安全地安装和管理所需的命令行工具。



![screenshot_20251029_171142.png](https://dl.playground.lazycat.cloud/guidelines/404/1e961f35-689a-4a69-a82a-9e8dee16ae31.png "screenshot_20251029_171142.png")
---

### **二、 准备工作**

在开始之前,请确保您已具备:
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

![screenshot_20251029_173735.png](https://dl.playground.lazycat.cloud/guidelines/404/2ea40d78-6a06-4687-87ab-72889ae734c3.png "screenshot_20251029_173735.png")


其实这一步骤应该也可以使用 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` 命令依然可用。

![screenshot_20251029_174016.png](https://dl.playground.lazycat.cloud/guidelines/404/17e7e57d-e990-4ae4-a50b-d6afcdb80dc3.png "screenshot_20251029_174016.png")

---

### **五、 总结**

通过本教程,我们在完全遵循系统设计的前提下,成功地为自己构建了一个独立、安全且可持久化的应用环境。现在,您可以自由探索庞大的 Nix 软件生态,为您的工作流增添更多强大的工具。

评论

1
Alex Liu213天前

反馈2点: 1.xz的安装命令用这个apt install -y xz-utils 2.后续安装git需要把魔法开开,不然装不上 感谢作者的贡献

说点什么呢~
收藏
4
1
0