获取与引导 NixOS:从 ISO 镜像、虚拟化到 PXE/kexec 的完整安装介质指南
2026/9/23 2:43:57 网站建设 项目流程
  • 包管理器
  • 操作系统

【免费下载链接】nixpkgs

Nix Packages collection & NixOS

项目地址:https://gitcode.com/GitHub_Trending/ni/nixpkgs
点击查看免费下载

导读

本文基于 nixpkgs 仓库中 obtaining.chapter.md 的核心内容,系统讲解如何获取 NixOS 安装介质、将其制作成可引导的 USB/CD,并通过 OVF 虚拟设备、EC2 AMI、NixOps、VirtualBox 等多种途径快速获得一个可运行的 NixOS 系统。读完后你将掌握 ISO 镜像在 Windows/Linux/macOS 三种平台上的写入方法、VirtualBox 客户机安装的关键配置,并能进一步了解 PXE 网络引导与 kexec 无介质启动等进阶途径的仓库源码实现。

1. NixOS 安装介质获取总览

NixOS 官方将编译好的 ISO 镜像发布在 NixOS 下载页面(https://nixos.org/download.html#nixos-iso),这是大多数用户开始安装的第一步。从仓库的构建配置看,安装介质本质上是由 NixOS 的声明式配置“编译”出来的可引导产物。

nixos/release.nix 中定义了完整的安装镜像构建目标,与本节内容对应的关键产物包括:

  • iso_minimal/iso_graphical:常规 ISO 镜像,构建入口在 installation-cd-minimal-combined.nix 等配置;
  • netboot:PXE 网络引导产物,输出bzImageinitrdnetboot.ipxe
  • kexec:用于在已运行的其他 Linux 发行版中“跳转”进入 NixOS 的产物。

其中 minimal 版与 graphical 版的差异可见于 installation-cd-minimal.nix:它导入profiles/minimal.nixinstallation-cd-base.nix,通过isoImage.edition = "minimal"标记版本,并且只保留命令行环境;而 graphical 版(如 installation-cd-graphical-base.nix)会额外携带 Calamares 图形安装器与桌面环境。

1.1 两种镜像类型的选型

镜像类型引导方式适用场景
minimal(最小化)引导到命令行熟悉 NixOS、愿意手动分区与配置的用户
graphical(图形化)引导到桌面 + Calamares 图形安装器桌面用户、新手,安装流程有图形向导

1.2 关于“非常老的系统”

原文档特别提醒:如果机器非常老、无法从 USB 启动,可以将镜像烧录到空白 CD 上引导,但 NixOS 在这种硬件上可能运行不佳。这一提示与仓库中仍保留的 CD/DVD 构建逻辑相印证(见 cd-dvd 目录),属于对旧硬件的兼容性说明,实际装机时仍建议优先使用 UEFI/USB 方案。

2. 制作可引导的 USB 启动盘

ISO 镜像必须**逐字节(verbatim)**写入 USB 设备才能同时在 UEFI 与 BIOS 两种固件上引导,普通“复制粘贴”ISO 文件的方式无法启动。完整操作步骤见 installing-usb.section.md。

2.1 图形化工具:Etcher 与 USBImager

Etcherhttps://www.balena.io/etcher/)是跨平台(Linux / Windows / macOS)的流行图形化刷写工具:下载并启动程序后,选择已下载的 NixOS ISO、再选择目标 U 盘,点击 Flash 即可。

⚠️ 注意:Etcher 默认会上报错误与使用统计信息,可在设置中关闭。

USBImagerhttps://bztsrc.gitlab.io/usbimager)是另一款极简的离线工具:下载带wo(write-only,仅写入)界面的版本,启动后选择镜像、选择 U 盘,点击 "Write" 即可。它不联网,适合对隐私敏感的环境。

2.2 Linux 终端写入(dd 方法)

在 Linux 上推荐的写入流程如下:

  1. 插入 U 盘;
  2. lsblk容量大小区分设备名(避免写错磁盘!);
  3. 确保设备上所有分区已卸载,将sdX替换为实际设备(如sdb):
sudo umount /dev/sdX*
  1. 使用dd将镜像写入设备:
sudo dd bs=4M conv=fsync oflag=direct status=progress if=<path-to-image> of=/dev/sdX

参数说明:

  • bs=4M:块大小设为 4 MiB,提高写入吞吐;
  • conv=fsync:写入完成后强制同步到物理设备,确保数据落盘;
  • oflag=direct:绕过页面缓存直接写设备,避免内存缓冲导致写入未完成;
  • status=progress:显示实时写入进度;
  • if=指向下载的 ISO 文件,of=指向整块设备/dev/sdX,不是分区/dev/sdX1)。

2.3 macOS 终端写入(dd 方法)

macOS 上的流程与之类似,但设备命名与参数不同:

  1. 插入 U 盘后,用diskutil list按容量区分设备;
  2. 卸载该磁盘(将diskX替换为实际编号,如disk1):
diskutil unmountDisk diskX
  1. 写入镜像,务必使用原始设备节点rdiskX
sudo dd if=<path-to-image> of=/dev/rdiskX bs=4m

💡 使用rdiskX(raw 设备)而非diskX(缓冲设备)时,dd可在几分钟内完成,而不是几个小时。

  1. 写入完成后 macOS 会弹出 “The disk you inserted was not readable by this computer” 对话框,属正常现象,直接忽略即可;
  2. 最后弹出磁盘:
diskutil eject /dev/diskX

3. 无需自己安装的替代途径

如果不想手动制作启动盘,原文档给出了三条“开箱即用”的替代路径,它们都围绕“获取一个正在运行的 NixOS 系统”展开:

3.1 VirtualBox OVF 虚拟设备

NixOS 下载页面(https://nixos.org/download.html#nixos-virtualbox)提供 Open Virtualization Format(OVF)格式的虚拟设备,可直接导入 VirtualBox,适合希望快速体验、不想触碰物理机分区的用户。

3.2 Amazon EC2 AMI

NixOS 为亚马逊 EC2 提供预构建的 AMI(Amazon Machine Image)。由于 AMI 按区域(region)分发,需要到下载页面(https://nixos.org/download.html#nixos-amazon)查询自己所在区域对应的 AMI ID 后使用。

3.3 NixOps 声明式云部署

NixOps 是 NixOS 官方的云部署工具(https://nixos.org/nixops),其核心思想是:用声明式配置描述 VirtualBox 或 EC2 上的 NixOS 实例,然后由工具自动完成创建、配置与部署。这意味着你可以像管理本地系统一样,用一份 Nix 配置管理云端机器。这与 NixOS “声明式配置驱动一切”的理念一脉相承(详见 configuration.nix 的声明式模型)。

4. VirtualBox 客户机安装实战

在 VirtualBox 中安装 NixOS 是“不碰物理机”的推荐方式,详细步骤见 installing-virtualbox-guest.section.md。

4.1 虚拟机创建参数

参数推荐值说明
操作系统类型Linux / Other LinuxVirtualBox 不识别 NixOS 专用类型
内存(Base Memory)768 MB 及以上安装过程与桌面运行的最低参考值
硬盘10 GB 及以上系统与软件包所需空间
光驱挂载 NixOS ISO在 CD/DVD-ROM 设置中挂载
PAE/NXSettings → System → Processor 中开启提升内存寻址能力
VT-x/AMD-VSettings → System → Acceleration 中开启硬件虚拟化加速,必须开启否则无法启动
显卡控制器Settings → Display → Screen 中选择VMSVGA保证图形显示正常

按上述参数创建并保存后启动虚拟机,即可像物理机一样进入安装流程。

4.2 客户机 configuration.nix 必改项

安装完成后,需要修改/etc/nixos/configuration.nix(对应仓库中的系统配置语法,见 配置语法章节 相关说明)才能正常引导:

① 指定 GRUB 安装设备(VirtualBox 默认的 BIOS 引导方式需要):

{ boot.loader.grub.device = "/dev/sda"; }

② 关闭 initrd 阶段的日志文件系统检查——否则每次启动都会因 vboxsf 之类的原因检查失败,卡在要求按*的提示上:

{ boot.initrd.checkJournalingFS = false; }

4.3 自动挂载 VirtualBox 共享文件夹

先在 VirtualBox 的 Machine → Settings → Shared Folders 中添加共享目录(可自定义名称与主机路径),然后在configuration.nix中加入以下内容,device填共享文件夹的名称:

{ config, pkgs, ... }: { fileSystems."/virtualboxshare" = { fsType = "vboxsf"; device = "nameofthesharedfolder"; options = [ "rw" "nofail" ]; }; }

⚠️ 必须保留"nofail"选项,否则共享目录不可用时系统将拒绝正常启动。挂载后,该目录会直接出现在根目录/virtualboxshare下。

5. 进阶:PXE 网络引导与 kexec 无介质启动

除 ISO/USB 之外,仓库还提供了两种面向高级用户的引导方式,它们与“获取安装介质”直接相关,且构建目标就定义在 nixos/release.nix。

5.1 用 nix-build 构建引导产物

在本地 nixpkgs 中执行(均基于当前仓库的 nixpkgs 版本):

nix-build -A kexec.x86_64-linux '<nixpkgs/nixos/release.nix>' nix-build -A netboot.x86_64-linux '<nixpkgs/nixos/release.nix>'

其中:

  • kexec目标在 release.nix 中定义,导入 netboot-minimal.nix 后取其config.system.build.kexecTree
  • netboot目标通过makeNetboot组装netbootRamdisk、内核与netbootIpxeScript(见 release.nix)。

5.2 PXE/iPXE 网络引导

netboot产物目录包含三个文件(详见 installing-pxe.section.md):

文件作用
bzImageLinux 内核
initrdinitrd 初始内存盘
netboot.ipxe示例 iPXE 脚本,内含该镜像所需的内核命令行参数

用法要点:

  • 使用传统 PXE时,自行配置引导器加载bzImageinitrd,并提供与netboot.ipxe中一致的内核命令行参数;
  • 使用iPXE时,netboot.ipxe通常可直接使用,若 HTTP/FTP 服务器目录结构与脚本不符,则需按实际路径修改;
  • 该方式要求你已具备一套可用的 PXE/iPXE 基础设施。

5.3 kexec“跳转”进入 NixOS

当服务器(尤其是云厂商提供的 Debian/Ubuntu 实例)无法引导自定义镜像时,可用kexec从已运行的系统直接“跳进”NixOS 安装介质(详见 installing-kexec.section.md)。前提是目标机器已安装bashkexec

构建产物目录包含:

  • bzImage(Linux 内核)
  • initrd(initrd 文件)
  • kexec-boot(调用kexec的 shell 脚本)

使用流程:

  1. 由于result内含符号链接,应在目录内使用scp * root@$destination复制(不要用rsync);
  2. 目标机器上执行kexec-boot
  3. 数秒后机器将引导进入一个**临时(ephemeral)**的 NixOS 安装介质。

如需定制 kexec 进入的系统闭包,可自建configuration.nix并保证仍导入 netboot 模块:

{ modulesPath, ... }: { imports = [ (modulesPath + "/installer/netboot/netboot-minimal.nix") ]; services.openssh.enable = true; users.users.root.openssh.authorizedKeys.keys = [ "my-ssh-pubkey" ]; }
nix-build '<nixpkgs/nixos>' \ --arg configuration ./configuration.nix \ --attr config.system.build.kexecTree

从 netboot-minimal.nix 的源码可以看到,该模块实际上是一个“最小 netboot 环境”:关闭 NetworkManager、禁用可再分发固件、保留 man 文档并导入 minimal.nix 配置档案,因此定制时仍需基于netboot-minimal.nix(或netboot-base.nix)扩展。

⚠️ 注意事项:kexec 不会完全重新初始化硬件设备,个别硬件上可能无法正常工作,但实践中极少遇到。

6. 获取介质后的下一步

拿到可引导的安装介质后,完整的安装路径是 安装章节:从引导菜单进入图形化(Calamares)或手动安装流程,完成分区(UEFI/GPT 或 Legacy/MBR)、格式化、nixos-generate-config生成配置、nixos-install安装直至重启。安装完成后如需更新系统,可参考 升级章节;若想在已运行的 Linux 基础上转换,可参考 从其他发行版安装。

结语

获取 NixOS 安装介质并非只有“下载 ISO + 写入 U 盘”一条路:桌面用户可选择图形化 ISO 或 VirtualBox OVF 虚拟设备,云端用户可直接使用 EC2 AMI,运维工程师可用 NixOps 声明式托管实例,高级用户则可借助 PXE 网络引导或 kexec 在无 USB 介质的情况下进入 NixOS。结合 nixos/release.nix 中iso_*netbootkexec等构建目标,你甚至可以从当前 nixpkgs 自行构建任何一类安装产物,真正做到“按需获取、按场景引导”。

  • 包管理器
  • 操作系统

【免费下载链接】nixpkgs

Nix Packages collection & NixOS

项目地址:https://gitcode.com/GitHub_Trending/ni/nixpkgs
点击查看免费下载

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询