Jump to content

NixOS安装指南

From NixOS Wiki
This page is a translated version of the page NixOS Installation Guide and the translation is 95% complete.

这份指南是对官方手册的一份参考指南. 它讲述了把NixOS作为完整操作系统的安装过程. 为了在一个已存在的操作系统内安装Nix, 请见Nix安装指南.

除了讲述官方手册上的步骤, 它还提供了用于常见使用场景的已知良好指导. 当官方手册和这份指南之间出现矛盾时, 以官方手册中描述的情况为准.

把这份指南当作逐步操作指南使用. 出现不同选择时, 只使用选定的部分, 并在这部分的结尾按照它的指示前进.

安装目标

NixOS可以安装在越来越多种类的硬件上:

  • 常规(Intel或AMD)台式机, 笔记本电脑, 或是物理可访问的服务器, 该页面包含了它们
  • 单板计算机(如树莓派)和其他ARM开发板, 见 NixOS on ARM
  • 云服务器和远程服务器, 见 NixOS friendly hosters

安装方式

NixOS, 如同绝大部分基于Linux的操作系统一样, 可以通过多种方式进行安装.

  1. 传统方式, 通过安装媒介启动.(会在下面讲述.)
  2. 通过已存在的Linux安装启动媒介

制作安装媒介

从NixOS 14.11开始, 安装程序ISO(镜像文件)是混合型的. 这意味着它通过CD和USB驱动器都可以启动. 它也可以在EFI系统上启动, 如大多数现代主板和苹果系统. 接下来的指导将假设使用复制镜像文件到USB驱动器的标准方式. 当使用CD或者DVD时, 刻录到光盘的通常方式应当也适用于该iso文件.

"刻录"到USB驱动器

首先, 下载一个NixOS ISO镜像 或者 创建一个自定义ISO文件. 接着插入一个空间大到足够容纳镜像的USB. 然后遵循平台的指令:

在Linux上

  1. 通过 lsblkfdisk -l 找到正确的设备. 在接下来的步骤中, 把/dev/sdX 替换为正确的设备.
  2. 复制到设备: cp nixos-xxx.iso /dev/sdX
Note: 不要使用 /dev/sdX1 或硬盘的分区, 请使用整块硬盘 /dev/sdX

也可通过 dd if=nixos.iso of=/dev/sdX bs=4M status=progress conv=fdatasync 写入硬盘镜像

在macOS上

  1. 使用diskutil list找到正确的设备, 比如说diskX.
  2. 使用diskutil unmountDisk diskX取消挂载.
  3. 使用sudo dd if=path_to_nixos.iso of=/dev/diskX进行刻录

在Windows上

  1. 下载USBwriter.
  2. 启动USBwriter.
  3. 选择下载的ISO文件作为'Source'
  4. 选择USB驱动器作为'Target'
  5. 点击'Write'
  6. 当USBWriter完成写入操作后, 安全拔出USB驱动器

可选的安装媒介指导

之前的方式是制作USB安装媒介的受支持方式.

这些方式也同样有记录, 它们可以使用USB驱动器启动多个发行版. 这种方式不被支持, 结果可能因人而异.

启动(Boot)安装媒介

因为安装媒介是混合型的, 它通过legacy bios模式和UEFI模式都可以启动.

无论使用哪种方式启动安装媒介, 你可能需要修改主板或者电脑的配置, 以允许从光盘驱动器(对于CD/DVD)或者从一个外部的USB驱动器启动.

Legacy bios启动

这是在没有EFI/UEFI的机器上唯一的启动方式.

UEFI启动

安装媒介的EFI引导加载程序未经过签名, 也没有使用经过签名的shim来启动. 这意味着只有禁用了Secure Boot(安全启动)才能启动.

连接到网络

安装过程几乎肯定需要有效的网络连接. 无网络的安装是可行的, 但是可用的软件包集合是受限的.

有线网络

对于内核提供的网络接口, DHCP(动态主机配置协议)解析应当在shell可用之前就已经完成.

系留式(网络共享)

如果你无法通过网线或者wifi连接到网络, 你可以使用智能手机的网络共享能力. 依赖于你的手机的能力, 只需要内核自带的驱动就可以提供有效的网络连接.

无线网络

Network Manager安装在图形界面ISO文件中, 这意味着可以在命令行中使用nmtui来连接到网络.

使用左上方的"Applications(应用)"标签页或者在底部的启动栏, 打开一个终端应用, 在那里启动 nmtui. 这可以让你'activate(激活)'一个(无线)连接 - 你应该可以在列表里看到你那里的SSID(无线网络名称), 除此之外你还可以添加一个新的连接. 当无线连接处于活动状态, 并且你已经测试过了时, 一开始就启动的安装程序很可能还没有检测到新的连接. 关掉安装程序, 再重新从屏幕底部的启动栏打开它. 这时它应该会检测到新的网络连接而继续.

在最小化安装的ISO文件上(或者你更熟悉 wpa_supplicant ), 你也可以运行 wpa_passphrase ESSID | sudo tee /etc/wpa_supplicant.conf, 然后输入你的密码, 再运行systemctl restart wpa_supplicant.

Partitioning(分区操作)

为了给连续存储进行分区, 运行 sudo fdisk /dev/diskX , 然后跟着针对DOS或(U)EFI的指示来做. 这里有一个非常简单的示例设置.

DOS

  • o (dos硬盘标签)
  • n new
  • p primary (4 primary in total)
  • 1 (分区编号[1/4])
  • 2048 first sector (alignment for performance)
  • +500M last sector (引导扇区的大小)
  • rm signature (Y), if ex. => warning of overwriting existing system, could use wipefs
  • n
  • p
  • 2
  • default (填满分区)
  • default (填满分区)
  • w (写入)

UEFI

  • g (gpt硬盘标签)
  • n
  • 1 (分区编号[1/128])
  • 2048 first sector
  • +500M last sector (引导扇区的大小)
  • t
  • 1 (EFI系统)
  • n
  • 2
  • default (填满分区)
  • default (填满分区)
  • w (写入)

Label partitions(给分区贴标签)

这对于有多个分区设置的情况很有用, 使分区更容易处理

$ lsblk
$ sudo mkfs.fat -F 32 /dev/sdX1
$ sudo fatlabel /dev/sdX1 NIXBOOT
$ sudo mkfs.ext4 /dev/sdX2 -L NIXROOT
$ sudo mount /dev/disk/by-label/NIXROOT /mnt
$ sudo mkdir -p /mnt/boot
$ sudo mount /dev/disk/by-label/NIXBOOT /mnt/boot

Swap文件

$ sudo dd if=/dev/zero of=/mnt/.swapfile bs=1024 count=2097152 (2GB size)
$ sudo chmod 600 /mnt/.swapfile
$ sudo mkswap /mnt/.swapfile
$ sudo swapon /mnt/.swapfile

NixOS配置

$ sudo nixos-generate-config --root /mnt
$ cd /mnt/etc/nixos/
$ sudo vim configuration.nix

最重要的修改:

  • keyboard layout(键盘布局), 也就是services.xserver.xkb.layout
  • users.users.user 和附加条目 initialPassword = "pw123";
  • networking (wifi), 如果出现问题, 请见下方的修复方法
  • boot.loader.grub.device = "/dev/sda"; #或者只用于efi的 "nodev"
  • 安装编辑器来编辑配置文件
  • 修改硬件配置以使用标签

具有自我说明性的NixOS选项可以在NixOS选项搜索上搜索到.

NixOS安装

$ cd /mnt
$ sudo nixos-install

安装完成后: 运行 passwd 来修改用户的密码. 如果网络出现问题, 请尝试下面的一种方法:

$ nixos-rebuild switch --option substitute false # 无下载
$ nixos-rebuild switch --option binary-caches "" # 无下载
  • 设置wpa_supplicant标志来连接到wifi.

有关特定硬件的附加说明

这些是有关特定硬件问题的收集到的说明或链接.

  • Blog post how to install NixOS on a Dell 9560
  • Brand servers may require extra kernel modules be included into initrd (boot.initrd.extraKernelModules in configuration.nix) For example HP Proliant needs "hpsa" module to see the disk drive.