NixOS 安装教程

本文介绍如何安装 命令行版本(Minimal)的 NixOS,NixOS 是一个基于 Nix 包管理器的 Linux 发行版,具有声明式配置等特点。

使用版本

本文中使用的 NixOS 版本为 24.11

安装前准备

准备 NixOS 可启动 USB

下载镜像

前往 NixOS 官网 下载最新的 NixOS 镜像,选择 Minimal 版本。或直接使用以下链接下载:

  • NixOS 24.11 Minimal ISO for amd64
  • SHA-256

制作可启动 USB

建议使用 Ventoy 制作可启动 USB,Ventoy 支持多种操作系统的 ISO 镜像,可以方便地在同一 USB 上存放多个 ISO 镜像。将上一步骤下载并验证的 NixOS 镜像复制到 Ventoy 制作的 USB 中即可。

安装

从 USB 启动计算机,选择 NixOS 进入安装界面。

使用 SSH 远程连接

由于默认情况下 nixosroot 用户的密码均为空,因此在使用 SSH 连接前请使用 passwd 命令设置密码,之后便可以在另一台计算机上使用 SSH 连接到 NixOS 安装界面。

1
2
3
4
5
# 为当前用户 (默认为 nixos) 设置密码
passwd

# 之后就可以使用 SSH 连接了
ssh nixos@<ip_address>

检查网络连接

可以使用 ping 命令检查网络连接是否正常:

1
ping -c 5 ping.ui.com

给磁盘分区

使用 parted 命令对磁盘进行分区。

请在分区前备份数据,分区操作会清除磁盘上的所有数据。

假设您要安装 NixOS 的磁盘为 /dev/nvme0n1, 并希望根目录使用 btrfs 文件系统,可以使用以下命令进行分区:

1
2
3
4
5
6
7
$ sudo parted /dev/nvme0n1

(parted) mklabel gpt # 创建 GPT 分区表
(parted) mkpart "EFI system partition" fat32 1MiB 513MiB # 创建 EFI 分区
(parted) set 1 esp on # 设置 EFI 分区标志
(parted) mkpart "root partition" btrfs 513MiB 100% # 创建根分区
(parted) quit # 退出 parted

分区完成后,对分区进行格式化:

1
2
3
4
5
# 格式化 EFI 分区
sudo mkfs.fat -F 32 /dev/nvme0n1p1

# 格式化根分区
sudo mkfs.btrfs /dev/nvme0n1p2

由于我们使用的是 btrfs 文件系统,因此需要根据自己的需求创建子卷。以下是一个示例,创建 @ subvolume:

1
2
3
4
5
6
7
8
# 挂载根分区
sudo mount /dev/nvme0n1p2 /mnt

# 创建子卷
sudo btrfs subvolume create /mnt/@

# 卸载根分区
sudo umount /mnt

挂载分区

1
2
3
4
5
6
7
8
# 挂载根分区到 /mnt,使用 subvolume @,并开启 zstd:1 压缩
sudo mount -o compress=zstd:1,subvol=@ /dev/nvme0n1p2 /mnt

# 创建 boot 挂载点
sudo mkdir -p /mnt/boot

# 挂载 EFI 分区到 /mnt/boot
sudo mount -o umask=077 /dev/nvme0n1p1 /mnt/boot

生成并调整 NixOS 配置文件

使用 sudo nixos-generate-config --root /mnt 命令生成 NixOS 配置文件。

  • /mnt/etc/nixos/hardware-configuration.nix:硬件配置文件,包含了系统的硬件信息。
  • /mnt/etc/nixos/configuration.nix:系统配置文件,包含了系统的基本配置。

Patch hardware-configuration.nix

/mnt/etc/nixos/hardware-configuration.nix 中添加以下内容:

更改以下内容:

1
2
# 将根目录的挂载选项根据需要进行修改
options = [ "subvol=@" "compress=zstd:1" "lazytime" ];

Patch configuration.nix

/mnt/etc/nixos/configuration.nix 中添加以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
networking.hostName = "<YOUR_HOSTNAME>"; # 设置主机名
networking.networkmanager.enable = true; # 启用 NetworkManager

time.timeZone = "<YOUR_TIMEZONE>"; # 设置时区,例如 Asia/Shanghai, America/Chicago 等

# 设置 User account
users.users.<YOUR_USERNAME> = {
isNormalUser = true; # 普通用户
extraGroups = [ "wheel" ]; # 添加到 wheel 组,给予 sudo 权限
packages = with pkgs; [
# 添加需要的包
git
vim
];
};

# 添加 mirror,针对网络访问较慢的用户,这里以 USTC 的镜像为例
nix.settings.substituters = [ "https://mirrors.ustc.edu.cn/nix-channels/store" ];

# 设置系统级别安装的软件包
environment.systemPackages = with pkgs; [
vim
wget
htop
];

# 启用 SSH 服务
services.openssh.enable = true;

# 将当前 configuration 复制到 /run/current-system/configuration.nix,防止误删除
system.copySystemConfiguration = true;

安装 NixOS

在调整好配置文件后,可以开始安装 NixOS 了。使用以下命令安装:

1
sudo nixos-install # 最后会提示设置 root 密码,使用 --no-root-passwd 选项来跳过

安装完成后,别忘了设置自己账号的密码:

1
nixos-enter --root /mnt -c 'passwd <YOUR_USERNAME>'

最后进行重启,进入新安装的 NixOS 系统:

1
sudo reboot
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
$ nix-shell -p fastfetch

$ fastfetch

▗▄▄▄ ▗▄▄▄▄ ▄▄▄▖ <YOUR_USERNAME>@<YOUR_HOSTNAME>
▜███▙ ▜███▙ ▟███▛ --------------
▜███▙ ▜███▙▟███▛ OS: NixOS 24.11 (Vicuna) x86_64
▜███▙ ▜██████▛ Host: <YOUR_DEVICE_NAME>
▟█████████████████▙ ▜████▛ ▟▙ Kernel: Linux 6.6.84
▟███████████████████▙ ▜███▙ ▟██▙ Uptime: 12 hours, 34 mins
▄▄▄▄▖ ▜███▙ ▟███▛ Packages: 567 (nix-system)
▟███▛ ▜██▛ ▟███▛ Shell: bash 5.2.37
▟███▛ ▜▛ ▟███▛ Terminal: /dev/pts/0
▟███████████▛ ▟██████████▙ CPU: Intel(R) Core(TM) i3-9100T (4) @ 3.70 GHz
▜██████████▛ ▟███████████▛ GPU: Intel UHD Graphics 630 @ 1.10 GHz [Integrated]
▟███▛ ▟▙ ▟███▛ Memory: 409.95 MiB / 7.51 GiB (5%)
▟███▛ ▟██▙ ▟███▛ Swap: Disabled
▟███▛ ▜███▙ ▝▀▀▀▀ Disk (/): 2.41 GiB / 465.26 GiB (1%) - btrfs
▜██▛ ▜███▙ ▜██████████████████▛ Local IP (eno1): 192.168.0.2/24
▜▛ ▟████▙ ▜████████████████▛ Locale: en_US.UTF-8
▟██████▙ ▜███▙
▟███▛▜███▙ ▜███▙
▟███▛ ▜███▙ ▜███▙
▝▀▀▀ ▀▀▀▀▘ ▀▀▀▘