目标
用 NixOS 制作一个自定义系统 ISO,内置于硬盘分区、UEFI 引导、BCD 编辑、Windows 安装、ISO 处理等运维工具,用途类比 PE 维护盘。
可行性
可行。NixOS 以声明式配置文件(configuration.nix)精确指定所需软件包与配置,再生成可启动 ISO。
实现步骤
1. 编写 configuration.nix
{ config, pkgs, ... }:
{
imports = [
<nixpkgs/nixos/modules/installer/cd-dvd/installation-cd-minimal.nix>
];
# 禁用非必要服务
services.sshd.enable = false;
networking.networkmanager.enable = false;
networking.dhcpcd.enable = false;
services.resolved.enable = false;
# 使用 LXDE 桌面环境
services.xserver.enable = true;
services.xserver.desktopManager.lxde.enable = true;
services.xserver.displayManager.lightdm.enable = true;
services.xserver.displayManager.autoLogin.enable = true;
services.xserver.displayManager.autoLogin.user = "nixos";
# 硬盘维护工具
environment.systemPackages = with pkgs; [
gnome.gnome-disk-utility # 磁盘管理工具 (~20MB)
];
# 支持 UEFI 启动
boot.loader.systemd-boot.enable = true;
boot.loader.efi.canTouchEfiVariables = true;
# 只支持必要文件系统
boot.supportedFilesystems = [ "ntfs" "vfat" "ext4" ];
# 使用精简内核
boot.kernelPackages = pkgs.linuxPackages_tinyconfig;
boot.kernelModules = [ "ntfs" "vfat" "ext4" ];
# 禁用国际化
i18n.supportedLocales = [ "en_US.UTF-8/UTF-8" ];
i18n.defaultLocale = "en_US.UTF-8";
# 禁用文档
documentation.enable = false;
documentation.man.enable = false;
# 最大化压缩
isoImage.squashfsCompression = "xz -Xdict-size 100% -Xbcj x86";
# ISO 名称
isoImage.isoName = "nixos-lxde-disk.iso";
# 默认用户
users.users.nixos = {
isNormalUser = true;
password = "nixos";
home = "/home/nixos";
createHome = true;
};
# 添加桌面快捷方式
environment.etc."skel/Desktop/gnome-disks.desktop" = {
text = ''
[Desktop Entry]
Name=Disk Utility
Exec=${pkgs.gnome.gnome-disk-utility}/bin/gnome-disks
Type=Application
Terminal=false
Icon=drive-harddisk
'';
mode = "0644";
};
# 精简 initrd
boot.initrd.includeDefaultModules = false;
boot.initrd.availableKernelModules = [ "usbhid" "uas" "nvme" ];
}2. 构建 ISO
需在已安装 Nix 包管理器的系统(一般为 Linux 或虚拟机)中执行:
nix-build '<nixpkgs/nixos>' -A config.system.build.isoImage -I nixos-config=./configuration.nix构建产物位于 result/iso/ 目录下,例如 nixos-custom-tools.iso。
3. 测试 ISO
qemu-system-x86_64 -cdrom result/iso/nixos-custom-tools.iso -m 20484. 可选扩展
- 需要更多 Windows 工具时,可将 Windows ISO 集成进 NixOS ISO,并在启动菜单中提供入口。
- 网络支持默认已启用,可用于下载额外工具或驱动。
工具对应
- 硬盘分区:
gparted、parted可满足大多数需求。 - UEFI 引导:
efibootmgr管理 UEFI 启动项,grub2作为备用引导加载器。 - BCD 工具:NixOS 无
bcdedit,可通过ntfs3g挂载 Windows 分区后手动编辑 BCD 文件,或在虚拟环境中运行 Windows 工具。 - Windows 安装:
woeusb可将 Windows ISO 写入 U 盘。 - ISO 工具:
mkisofs、xorriso用于创建与操作 ISO 文件。
注意事项
- BCD 编辑:
bcdedit为 Windows 专有工具,需在 ISO 中包含轻量 Windows PE 环境,或由用户手动操作。 - 许可问题:Windows 相关工具可能涉及版权或授权,需确保合规。
- 硬件兼容性:需在真实硬件上测试 ISO 的 UEFI 启动能力。