- 包管理器
- 操作系统
【免费下载链接】nixpkgs
Nix Packages collection & NixOS
导读
本文基于 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 网络引导产物,输出bzImage、initrd与netboot.ipxe;kexec:用于在已运行的其他 Linux 发行版中“跳转”进入 NixOS 的产物。
其中 minimal 版与 graphical 版的差异可见于 installation-cd-minimal.nix:它导入profiles/minimal.nix与installation-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
Etcher(https://www.balena.io/etcher/)是跨平台(Linux / Windows / macOS)的流行图形化刷写工具:下载并启动程序后,选择已下载的 NixOS ISO、再选择目标 U 盘,点击 Flash 即可。
⚠️ 注意:Etcher 默认会上报错误与使用统计信息,可在设置中关闭。
USBImager(https://bztsrc.gitlab.io/usbimager)是另一款极简的离线工具:下载带wo(write-only,仅写入)界面的版本,启动后选择镜像、选择 U 盘,点击 "Write" 即可。它不联网,适合对隐私敏感的环境。
2.2 Linux 终端写入(dd 方法)
在 Linux 上推荐的写入流程如下:
- 插入 U 盘;
- 用
lsblk按容量大小区分设备名(避免写错磁盘!); - 确保设备上所有分区已卸载,将
sdX替换为实际设备(如sdb):
sudo umount /dev/sdX*- 使用
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 上的流程与之类似,但设备命名与参数不同:
- 插入 U 盘后,用
diskutil list按容量区分设备; - 卸载该磁盘(将
diskX替换为实际编号,如disk1):
diskutil unmountDisk diskX- 写入镜像,务必使用原始设备节点
rdiskX:
sudo dd if=<path-to-image> of=/dev/rdiskX bs=4m💡 使用
rdiskX(raw 设备)而非diskX(缓冲设备)时,dd可在几分钟内完成,而不是几个小时。
- 写入完成后 macOS 会弹出 “The disk you inserted was not readable by this computer” 对话框,属正常现象,直接忽略即可;
- 最后弹出磁盘:
diskutil eject /dev/diskX3. 无需自己安装的替代途径
如果不想手动制作启动盘,原文档给出了三条“开箱即用”的替代路径,它们都围绕“获取一个正在运行的 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 Linux | VirtualBox 不识别 NixOS 专用类型 |
| 内存(Base Memory) | 768 MB 及以上 | 安装过程与桌面运行的最低参考值 |
| 硬盘 | 10 GB 及以上 | 系统与软件包所需空间 |
| 光驱 | 挂载 NixOS ISO | 在 CD/DVD-ROM 设置中挂载 |
| PAE/NX | Settings → System → Processor 中开启 | 提升内存寻址能力 |
| VT-x/AMD-V | Settings → 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):
| 文件 | 作用 |
|---|---|
bzImage | Linux 内核 |
initrd | initrd 初始内存盘 |
netboot.ipxe | 示例 iPXE 脚本,内含该镜像所需的内核命令行参数 |
用法要点:
- 使用传统 PXE时,自行配置引导器加载
bzImage与initrd,并提供与netboot.ipxe中一致的内核命令行参数; - 使用iPXE时,
netboot.ipxe通常可直接使用,若 HTTP/FTP 服务器目录结构与脚本不符,则需按实际路径修改; - 该方式要求你已具备一套可用的 PXE/iPXE 基础设施。
5.3 kexec“跳转”进入 NixOS
当服务器(尤其是云厂商提供的 Debian/Ubuntu 实例)无法引导自定义镜像时,可用kexec从已运行的系统直接“跳进”NixOS 安装介质(详见 installing-kexec.section.md)。前提是目标机器已安装bash与kexec。
构建产物目录包含:
bzImage(Linux 内核)initrd(initrd 文件)kexec-boot(调用kexec的 shell 脚本)
使用流程:
- 由于
result内含符号链接,应在目录内使用scp * root@$destination复制(不要用rsync); - 在目标机器上执行
kexec-boot; - 数秒后机器将引导进入一个**临时(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_*、netboot、kexec等构建目标,你甚至可以从当前 nixpkgs 自行构建任何一类安装产物,真正做到“按需获取、按场景引导”。
- 包管理器
- 操作系统
【免费下载链接】nixpkgs
Nix Packages collection & NixOS
相关推荐
NixOS 通过 kexec 无介质"跳转"引导安装指南:从运行中的 Linux 直入 NixOS
NixOS 通过 kexec 无介质"跳转"引导安装指南:从运行中的 Linux 直入 NixOS 导读 本文介绍 NixOS 手册中的 kexec 引导方案(
包管理器操作系统NixOS 通过 PXE / iPXE 网络引导安装:netboot 介质构建与部署实战
NixOS 通过 PXE / iPXE 网络引导安装:netboot 介质构建与部署实战 本文围绕 NixOS 官方手册中“从 netboot 介质引导(PXE
包管理器操作系统netboot.xyz完全指南:从PXE引导到系统安装的完整流程
netboot.xyz完全指南:从PXE引导到系统安装的完整流程 netboot.xyz是一个革命性的开源网络启动菜单服务,通过PXE引导技术让你能够在BIOS
网络运维后端
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考