如何从 Live CD 重建 NixOS 安装的配置?

如何从 Live CD 重建 NixOS 安装的配置?

我按照 NixOS 手册的“在另一个分区上从 Ubuntu 安装了 NixOS 18.032.4.从另一个 Linux 发行版安装“部分。一切都很顺利,但我做了一些愚蠢的事情[?],即:

  • 之前忘记为 Ubuntu 安装添加额外的 GRUB 引导加载程序条目nixos-install。安装后添加它作为事后的想法,并重新启动(当然,没有Ubuntu条目)

  • 没有启用任何网络configuration.nix,并且在重新启动后没有网络配置命令来连接 wifi。第 22 个问题是nixos-rebuild switch需要网络连接,因此我无法完成任何更改。

所以我的想法是我可以从 NixOS Live CD (17.03) 启动,连接到我们的 wifi 并以某种方式重建安装的配置。

我很可能错过了一些重要的东西,上面的假设不正确等等;在 nix 和 NixOS 中相当新。


编辑:我忘记包括我的分区是如何设置的以及我在成功安装 NixOS 之前尝试过的内容。

分区(来自 Ubuntu 的挂载点):

sda
├─sda1         ntfs     Recovery              # some Win7 artifact
├─sda2         vfat               /boot/efi
├─sda3         vfat     NIXBOOT               # boot partition (esp, boot)
├─sda4         ext4     onyx                  # NixOS data
├─sda5         swap                           # Ubuntu swap
│ └─cryptswap1 swap               [SWAP]
├─sda6         ext4                           # (Arch install)
├─sda7         ext4               /           # Ubuntu install
├─sda8         swap     nixswap   
└─sda9         ext4     home      

我不想弄乱 Ubuntu 启动分区,所以我创建了另一个 ( /dev/sda3)。我的计划是稍后在 Ubuntu 的 GRUB for NixOS 中包含一个菜单项,但现在,从 GRUB 控制台安装、重新引导和测试引导 NixOS ( set root=..., linux ..., initrd ..., boot)

sudo PATH="$PATH" NIX_PATH="$NIX_PATH" `which nixos-install` --root /mnt --no-bootloader

重新启动后,我在 NixOS 启动分区上看不到任何内容。回到 Ubunut,安装时没有安装--no-bootloader,记得添加 Ubuntu 条目并重新启动。 (这之后我才发现systemd-boot和GRUB是完全不同的两个东西……)


更新:我可以通过在 BIOS 中选择 Ubuntu 引导分区作为替代引导设备来返回 Ubuntu,并且出现通常的 GRUB 菜单。我可能只是使用正确的配置重新安装。

答案1

最简单的方法是从 LiveCD 安装。

nixos-generate-config将重新生成硬件配置,但如果发现configuration.nix已经存在,则将其保留。其nixos-install设计使其可以根据需要安全地执行多次。

这意味着您可以使用已为 NixOS 创建的文件系统(和配置)遵循主要安装指南,然后从上次中断的地方继续。

需要注意的一些事项:

  • NixOS 将systemd-boot默认安装在 EFI 系统上。因此,除了已有的 EFI 可执行文件之外,您最终还会得到一个新的 EFI 可执行文件。
  • nixos-install还将尝试设置systemd-boot为默认启动管理器。我相信你可以通过设置boot.loader.efi.canTouchEfiVariables为 false 来禁用它configuration.nix
  • 我建议使用基本配置安装 NixOS;例如,设置网络、用户和安装文本编辑器,但仅此而已。原因是 LiveCD 使用保存在 RAM 中的 Nix 存储。您的系统将首先安装到这个 RAM 支持的 Nix 存储中,然后复制到磁盘。一旦安装并可启动,您就可以安全地继续进行其余的配置。

答案2

为了完整起见添加这个答案:理论上,@三奥院上面 ing 的建议chroot将是正确的答案,可以通过命令 来实现nixos-enter

从 Ubuntu,NixOS 分区安装到/mnt

$ sudo $(which nixos-enter)
...
[root@nixos:/]# nixos-rebuild switch

在实践中,这不起作用,因为网络不起作用(可能是因为我configuration.nix一开始就缺少正确的设置),并且收到了一堆错误消息:

warning: Nix search path entry '/nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs' does not exist, ignoring
warning: Nix search path entry '/nix/var/nix/profiles/per-user/root/channels' does not exist, ignoring
error: file 'nixpkgs/nixos' was not found in the Nix search path (add it using $NIX_PATH or -I), at (string):1:13
System has not been booted with systemd as init system (PID 1). Can't operate.
building Nix...
warning: Nix search path entry '/nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs' does not exist, ignoring
warning: Nix search path entry '/nix/var/nix/profiles/per-user/root/channels' does not exist, ignoring
error: file 'nixpkgs/nixos' was not found in the Nix search path (add it using $NIX_PATH or -I)
warning: Nix search path entry '/nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs' does not exist, ignoring
warning: Nix search path entry '/nix/var/nix/profiles/per-user/root/channels' does not exist, ignoring
error: file 'nixpkgs' was not found in the Nix search path (add it using $NIX_PATH or -I)
warning: unable to download 'https://cache.nixos.org/nix-cache-info': Couldn't resolve host name (6); retrying in 293 ms
^Cwarning: download of 'https://cache.nixos.org/nix-cache-info' was interrupted
don't know how to build these paths:
  /nix/store/z6avpvg24f6d1br2sr6qlphsq3h4d91v-nix-2.0.2
error: interrupted by the user
warning: don't know how to get latest Nix

到底, @伊曼纽尔·罗莎的答案是正确的,特别是因为(正如他指出的那样)nixos-install可以安全地执行多次。

相关内容