NixOS Profiles 完全指南:内置预配置模块的用法与源码级解析
包管理器操作系统【免费下载链接】nixpkgsNix Packages collection NixOS项目地址https://gitcode.com/GitHub_Trending/ni/nixpkgs点击查看免费下载NixOS 在 nixos/modules/profiles 目录下提供了一系列配置文件Profile——它们是 nixpkgs 预置的、常用且可复用的模块化配置供用户通过 imports 引入。本文以该目录下的每个 profile 为线索结合其源码实现系统讲解 Profiles 的定位、引入方式、各 profile 的适用场景与底层配置帮助你在真实安装、安装介质、容器、虚拟机、无图形服务器等场景中准确选用。Profiles 是什么NixOS 的默认安装配置由nixos-generate-config生成的/etc/nixos/configuration.nix只提供了最基础的系统骨架。在很多情况下我们希望直接利用 nixpkgs 中常用且预定义好的配置组合而不是从零开始逐一声明。这正是 Profiles 承担的角色它们以.nix文件形式存放在 nixos/modules/profiles 目录下本质上就是普通的 NixOS 模块唯一的区别是它们被集中放在一个固定目录中、按场景预先组织好了配置。官方文档明确指出其预期用法是将它们加入你的/etc/configuration.nix注意当前文档写的是/etc/configuration.nix而 NixOS 24.05 实际生成路径为/etc/nixos/configuration.nix两者均为可行写法的imports列表{ imports [ nixpkgs/nixos/modules/profiles/profile-name.nix ]; }例如引入minimal与qemu-guest{ config, pkgs, ... }: { imports [ nixpkgs/nixos/modules/profiles/minimal.nix nixpkgs/nixos/modules/profiles/qemu-guest.nix ]; # ... 其余配置 }几个需要理解的特性Profile 也是模块它与其他所有 NixOS 模块一样参与求值可以imports其他模块profile 之间也可以互相嵌套引用也可以被用户配置中的任何 option 覆盖。大量使用mkDefault从下方源码可以看到绝大多数 profile 使用lib.mkDefault来设置值意味着它们只提供默认值你随时可以在自己的配置中将其覆盖——这正是 Profile 与普通配置的关键区别引入 Profile 不会锁死你的系统而是给出一个合理基线。并非只服务于安装介质虽然部分 profile如base、graphical、installation-device看起来只在安装介质场景有用但官方文档特别强调其中许多 profile 实际上是为真实安装而设计的例如minimal、hardened、headless、qemu-guest、perlless等。核心 Profile 逐个解析minimal最小化系统配置minimal.nix 定义了一个小体量的 NixOS 配置不含任何图形内容。它对可选项全部使用lib.mkDefault false关闭documentation关闭enable、doc.enable、info.enable、man.enable、nixos.enable即不生成手册、man 页、info 页等文档。environment.defaultPackages默认置空Perl 是默认包此处也一并去掉stub-ld.enable关闭。programs.command-not-found.enable关闭fish.generateCompletions关闭。services.logrotate.enable、services.udisks2.enable关闭。xdg.autostart / icons / mime / sounds全部关闭。由于所有项都是mkDefault你完全可以随后再显式开启任意一项。该 profile 是多个其他 profile 的基石见下文docker-container、image-based-appliance。base最小安装 CD 的软件集合base.nix 定义了minimal 安装 CD包含的软件包集合注释明确说明它也可能在别处有用。它通过environment.systemPackages一次性注入一批实用工具并分成几组安装/修复类w3m-nographics手册阅读所需、testdisk修复启动问题、ms-sys写 Windows 引导扇区/MBR、efibootmgr、efivar、parted、gptfdisk、ddrescue、ccrypt、cryptsetupdm-crypt 卷。编辑器vim。网络工具fuse、fuse3、sshfs-fuse、socat、screen、tcpdump。硬件工具sdparm、hdparm、smartmontools、pciutils、usbutils、nvme-cli。压缩/归档unzip、zip。实用工具jq。此外它用boot.supportedFilesystems合并支持了ext2/ext3/ext4/btrfs/cifs/f2fs/ntfs/vfat/xfs等文件系统并在 ZFS 可用平台默认启用 ZFSlib.mkIf (lib.meta.availableOn ...)同时用networking.hostId lib.mkDefault 8425e349为 ZFS 提供所需的 host ID。installation-cd-base.nix见 nixos/modules/installer/cd-dvd/installation-cd-base.nix就是通过引入该 profile 来组装安装 CD 的。graphicalPlasma 6 图形桌面graphical.nix 定义了一套 Plasma 6 桌面配置被图形安装 CD 使用services.xserver.enable true且desktopManager.plasma6.enable true显示管理器启用plasma-login-manager开启services.libinput提供大量笔记本的触摸板支持附带mesa-demos与firefox两个演示/常用软件包。如果你的目标是开箱即用的桌面直接引入该 profile 即可获得一套完整的 Plasma 6 桌面栈而不必手写 xserver、displayManager 等一长串选项。headless无头服务器配置headless.nix 为无头机器如 Amazon EC2 实例提供通用配置关闭所有串口/终端 ttyserial-gettyttyS0、serial-gettyhvc0、gettytty1、autovt均被禁用。内核参数加入panic1、boot.panic_on_fail、vga0x317、nomodeset——既然无人值守遇到 panic 就直接重启。关闭 systemd 紧急模式systemd.enableEmergencyMode false因为无控制台可交互。移除 GRUB 启动画面boot.loader.grub.splashImage null。适合云主机、服务器等无显示器、无键盘接入的场景。qemu-guestQEMU/virtio 虚拟机客户机qemu-guest.nix 为运行在 QEMUvirtio下的虚拟机提供通用配置其核心动作是把 virtio 系列内核模块注入 initrdboot.initrd.availableKernelModulesvirtio_net、virtio_pci、virtio_mmio、virtio_blk、virtio_scsi、9p、9pnet_virtio、virtiofsboot.initrd.kernelModulesvirtio_balloon、virtio_console、virtio_rng、virtio_gpu。在 QEMU/KVM 中安装 NixOS 时引入该 profile可确保磁盘、网络、共享目录9p/virtiofs、随机数、GPU 等设备在 initrd 阶段即可用。perlless 与 bashless去除解释器依赖perlless.nix 的目标是构建一个不依赖 Perl的系统用system.etc.overlay.enable、services.userborn.enable替代激活脚本中的 Perl 用法关闭依赖 Perl 的工具system.tools.nixos-generate-config、GRUB、environment.defaultPackages、documentation.info、documentation.nixos、programs.command-not-found关键手段是system.forbiddenDependenciesRegexes [ perl ]构建系统时若 Nix store 中出现任何含 perl 字符串的路径构建即失败——用强制约束保证系统里确实没有 Perl。bashless.nix 在perlless之上进一步移除 bash源码注释明确 Bashless builds on perlless通过system.nixos-init.enable、system.activatable false、environment.shell.enable false、programs.bash.enable false移除 bash 激活逻辑逐项关闭依赖 bash 的组件nix.enable含 bash 补全、man-db、console、networking.useNetworkddhcpcd/openresolv 依赖 bash、boot.bcache、networking.firewallnixos-firewall-tool 是 bash 脚本、security.enableWrappers、boot.kexec、powerManagement、users.manageLingering、services.lvm.resizeHelper同样用system.forbiddenDependenciesRegexes [ bash ]在构建期强制校验。这两个 profile 适合对攻击面有极致要求、希望系统不含 Perl/bash 解释器的场景例如最小化容器或安全敏感设备。all-hardware 与 hardened兼容层与已移除项all-hardware.nix 只是一个极简兼容层它仅设置hardware.enableAllHardware true注释建议直接设置该 option 而非引入此文件保留此文件仅为旧配置向后兼容。hardened.nix 在当前仓库中已被移除它现在只注册一个lib.mkRemovedOptionModule [ profiles hardened ]提示用户hardened profile 已删除详情见 26.05 版本发布说明release notes的向后不兼容章节。注意如果搜索历史资料或旧教程中还在imports里写profiles/hardened.nix请改为阅读 nixos/doc/manual/release-notes/rl-2605.section.md 了解替代方案避免在新版本中报错。docker-containerDocker 镜像构建docker-container.nix 组合了../installer/cd-dvd/channel.nix、minimal.nix、clone-config.nix并定义system.build.tarball通过 nixos/lib/make-system-tarball.nix 把config.system.build.toplevel打包成 Docker 可导入的镜像 tarball其中extraArgs --owner0统一属主storeContents预置 toplevel 与pkgs.stdenv并加入初始化脚本。在 CI 中常见用法是引入该 profile 后nixos-rebuild build得到 tarball再docker import之。installation-device安装介质专用installation-device.nix 提供安装介质如 CD的基础配置它本身也是一个 import 组合引入 nixos/modules/installer/scan/detected.nix 与 nixos/modules/installer/scan/not-detected.nix扫描目标机硬件引入clone-config.nix让nixos-rebuild正常工作引入 nixos/modules/installer/cd-dvd/channel.nix在 CD 中附带一份 nixpkgs保证nixos-install开箱即用。它同时还做了大量面向安装场景的细节配置值得了解其要点system.nixos.variant_id installer即使 minimal profile 关闭文档也通过mkImageMediaOverride true强制开启文档与 NixOS 手册documentation.enable、documentation.nixos.enable创建低权限nixos用户属wheel/networkmanager/video组root 与 nixos 的初始密码均为空并在 getty 帮助文本中给出登录与 SSH 提示security.polkit.enable、wheel 组 sudo 免密mkImageMediaOverride false、services.getty.autologinUser nixos控制台自动登录默认启用opensshPermitRootLogin yes便于无头 ARM 板等场景直接 SSH内存受限环境优化GC_INITIAL_HEAP_SIZE 1M、vm.overcommit_memory 1预置stdenvNoCC、busybox、makeInitrdNGTool等system.extraDependencies加速安装启用软件 RAIDboot.swraid、降低防火墙拒绝日志噪音、设置nix.settings.trusted-users [ nixos ]允许nix-copy-closure等。clone-config让 nixos-rebuild 在安装介质上可用clone-config.nix 的目标是把用户的配置含configuration.nix与自定义模块文件复制进系统从而在安装介质内执行nixos-rebuild也能生效。从源码结构看它会从模块列表里过滤出非 NixOS 仓库内部的模块文件partitionedModuleFiles把用户自己的模块文件持久化复制到目标系统并避免复制 NixOS 自身的模块因为仓库更新会导致内容变化。理解它的行为对排查安装介质里改配置不生效类问题很有帮助。nix-builder / nix-builder-vm / nix-builder-vz-vm / macos-builder远程构建机这一族 profile 用于在 macOS 等非 Linux 系统上构建 Linux 包nix-builder.nix 是后端无关部分包含客户机guest的相关设置与宿主机host上的安装脚本提供config.system.build.vm不绑定具体 VM 后端。nix-builder-vm.nix 将nix-builder.nix与 QEMU 后端 nixos/modules/virtualisation/qemu-vm.nix 组合并配置端口转发guest 22 → hostconfig.virtualisation.darwin-builder.hostPort、关闭图形、以及关键的/nix/store快照隔离避免宿主机与客户机争抢锁导致构建失败。macos-builder.nix 是旧名兼容层它会在 2411 及更早 release 上发出警告macos-builder.nix 已迁移到 nix-builder-vm.nix并直接转发到后者。image-based-appliance镜像型设备image-based-appliance.nix 面向以整盘镜像安装、不可再重建、无 Nix、非交互使用的设备如嵌入式/物联网设备。要点引入minimal.nix保证最小化nix.enable false、system.switch.enable false系统不可重建users.mutableUsers false系统静态化boot.initrd.systemd.enable、networking.useNetworkd默认开启尽量减少解释器以降低攻击面。更新方式是通过 systemd-sysupdate 之类工具整体替换分区镜像。keys安装介质 SSH 主机密钥keys 目录存放预生成的ssh_host_ed25519_key与ssh_host_ed25519_key.pub用于让安装介质拥有确定的 SSH 主机密钥便于信任与首次连接校验。这属于安装介质 profile 的附属资源。Profile 的组合与覆盖机制从上述源码可以总结出三条实战经验Profile 可以互相嵌套bashlessimportsperllessdocker-containerimportsminimalclone-configinstallation-deviceimportsclone-configdetected/not-detectedchannelimage-based-applianceimportsminimal。选用 profile 时只需引入最高层的那个其依赖链会自动展开。mkDefault保证可覆盖绝大多数 profile 设置均以lib.mkDefault包裹因此引入 profile 后你仍可在configuration.nix中显式赋值覆盖其任何默认。例如引入minimal后又想保留手册只需documentation.enable true;。引入即生效卸载即删除与 NixOS 的声明式模型一致从 imports 移除某个 profile 并在nixos-rebuild switch后其关闭的服务/选项随之消失不需要手动反安装。一个典型的真实服务器配置组合示例{ config, pkgs, ... }: { imports [ nixpkgs/nixos/modules/profiles/minimal.nix # 基础精简 nixpkgs/nixos/modules/profiles/qemu-guest.nix # QEMU/KVM 虚拟机 nixpkgs/nixos/modules/profiles/headless.nix # 无头云服务器 ]; # 覆盖 minimal 的默认值仍需要 man 手册 documentation.man.enable true; # 其余业务配置…… system.stateVersion 26.05; }版本与注意事项当前仓库中的hardenedprofile 已移除仅保留报错提示不要在新配置中引入macos-builder.nix已更名为nix-builder-vm.nix新配置应使用新文件名部分 profile 依赖较新的 NixOS 选项如services.userborn、system.etc.overlay在旧版本上引入可能会遇到选项不存在错误请以你的目标 release 为准profile 名与引入方式请以当前仓库 nixos/modules/profiles 目录下的实际文件名为准。小结NixOS Profiles 是官方预置、按场景打包、可被覆盖的模块化配置集合。通过imports引入一个或多个 profile即可在数行配置内获得最小系统、Plasma 桌面、无头云主机、QEMU 客户机、Docker 镜像构建、远程构建机、镜像型设备等成熟基线再用mkDefault的覆盖能力按需调整。理解每个 profile 的源码实现尤其是mkDefault与imports的嵌套关系能帮助你在真实部署中精准选用、组合与覆盖它们。赞分享包管理器操作系统【免费下载链接】nixpkgsNix Packages collection NixOS项目地址https://gitcode.com/GitHub_Trending/ni/nixpkgs点击查看免费下载相关推荐MicroPython 内置函数与内置异常完全指南builtins 模块源码级解析MicroPython 内置函数与内置异常完全指南 builtins 模块源码级解析 导读 本文以 MicroPython 官方文档 docs/library嵌入式语言运行时编程语言解释器编译器物联网系统编程N_m3u8DL-RE 完整上手指南M3U8/MPD 下载、解密与直播录制实战N_m3u8DL RE 完整上手指南M3U8/MPD 下载、解密与直播录制实战 N_m3u8DL RE 是一款跨平台的流媒体下载工具专门解决 M3U8HLCLI音视频NixOS QEMU Guest Profile 全解析virtio 内核模块与 initrd 配置实战NixOS QEMU Guest Profile 全解析virtio 内核模块与 initrd 配置实战 导读 本文以 nixpkgs 仓库中 NixOS 手包管理器操作系统上一篇CrowSec: 开源的全栈安全扫描工具下一篇oh-my-openagent LazyCodex实战一行命令把多模型编排塞进Codex CLI的完整指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
上一篇/下一篇内容由系统自动关联
返回资讯列表 →