あいむaimu/霊夢と魔理沙
1165 words
6 minutes
全盘加密安装NixOS
安装前
联网
生成 wifi 配置文件
wpa_passphrase "WiFi_SSID" "WiFi_PASSWORD" | tee /etc/whatever.conf查看设备名
ip a用刚刚列出的设备通过配置文件连接 wifi
wpa_supplicant -B -i "devicename" -c /etc/whatever.conf代理
仅作参考
nix-shell -p xrayxray run -c /path/to/config.jsonexport http_proxy=http://127.0.0.1:portexport https_proxy=http://127.0.0.1:portexport ALL_PROXY=socks5h://127.0.0.1:port无休眠系统安装 (不使用 LVM)
格式化+分区
1.创建 gpt 分区表
parted /dev/sdX mklabel gpt2.创建 UEFI FAT32 分区 (以下表示为/dev/sdXY)
parted /dev/sdX mkpart esp fat32 1MiB 512MiBparted /dev/sdX set 1 esp onparted /dev/sdX set 1 boot onmkfs.fat -F 32 -n UEFI /dev/sdXY3.创建 SWAP 分区 (以下表示为/dev/sdXW)
parted /dev/sdX mkpart swap linux-swap 512MiB 4.5GiBmkswap -L SWAP /dev/sdXW4.创建 NIXOS BTRFS 加密分区 (以下表示为/dev/sdXZ)
parted /dev/sdX mkpart nixos btrfs 4.5GiB 100%cryptsetup --verify-passphrase -v luksFormat /dev/sdXZcryptsetup open /dev/sdXZ encmkfs.btrfs -L NIXOS /dev/mapper/enc设置 BTRFS 子卷
1.挂载 NIXOS 分区
mount -t btrfs /dev/mapper/enc /mnt2.创建 NIX 子卷
btrfs subvolume create /mnt/@nix3.创建 HOME 子卷
btrfs subvolume create /mnt/@home4.创建 snapshots 子卷 (用于 snapper 自动快照)
btrfs subvolume create /mnt/@home/.snapshots5.卸载 NIXOS 分区
umount /mnt挂载分区
1.挂载 ROOT 分区 (in-ram)
mount -t tmpfs -o noatime,mode=755 none /mnt2.创建挂载点
mkdir /mnt/{boot,nix,home}mkdir /mnt/home/.snapshots3.挂载 UEFI 分区
mount -t vfat -o defaults,noatime,fmask=0077,dmask=0077 /dev/sdXY /mnt/boot4.挂载 NIX 子卷
mount -t btrfs -o noatime,compress=zstd,subvol=@nix /dev/mapper/enc /mnt/nix5.挂载 HOME 子卷
mount -t btrfs -o noatime,compress=zstd,subvol=@home /dev/mapper/enc mnt/home6.挂载 snapshots 子卷
mount -t btrfs -o noatime,compress=zstd,subvol=@home/.snapshots /dev/mapper/enc /mnt/home/.snapshots7.挂载 SWAP 分区
swapon /dev/sdXW生成 NixOS 配置文件并安装
1.让 NixOS 生成初始配置文件
nixos-generate-config --root /mnt2.确保 hardware-configuration.nix 里的挂载点和之前的挂载步骤一致
vim /mnt/etc/nixos/hardware-configuration.nix示例
fileSystems."/boot" = { device = "/dev/disk/by-uuid/XXX"; fsType = "vfat"; options = [ "fmask=0077" "dmask=0077" ]; };
boot.initrd.luks.devices."enc".device = "/dev/disk/by-uuid/XXX";
fileSystems."/nix" = { device = "/dev/disk/by-uuid/XXX"; fsType = "btrfs"; options = [ "subvol=@nix" "compress=zstd" "noatime" ]; };
fileSystems."/home" = { device = "/dev/disk/by-uuid/XXX"; fsType = "btrfs"; options = [ "subvol=@home" "compress=zstd" "noatime" ]; };
fileSystems."/home/.snapshots" = { device = "/dev/disk/by-uuid/XXX"; fsType = "btrfs"; options = [ "subvol=@home/.snapshots" "compress=zstd" "noatime" ]; };
swapDevices = [ { device = "/dev/disk/by-partuuid/XXX"; randomEncryption.enable = true; } ];NOTE如果有 swap 启用了 randomEncryption, 不要使用休眠!!! 对于启用了 randomEncryption 的 swap, 不要使用 /dev/disk/by-uuid/… 或者 /dev/disk/by-label/… , 应该使用 /dev/disk/by-partuuid/…
3.编辑 configuration.nix
vim /mnt/etc/nixos/configuration.nix禁用可变用户
users.mutableUsers = false;- 添加用户密码(hashed):
(在另一个终端输入:
nix-shell --run 'mkpasswd -m SHA-512 -s' -p mkpasswd)
users.users.<USERNAME>.initialHashedPassword = "<HASHED_PASSWORD>";4.安装 NixOS
nixos-install --no-root-passwdreboot带休眠系统安装 (使用 LVM)
格式化并分区
1.创建 GPT 分区表
parted /dev/sdX mklabel gpt2.创建 UEFI FAT32 分区 (以下表示为/dev/sdXY)
parted /dev/sdX mkpart esp fat32 1MiB 512MiBparted /dev/sdX set 1 esp onparted /dev/sdX set 1 boot onmkfs.fat -F 32 -n UEFI /dev/sdXY3.为 LVM 创建加密分区 (以下表示为/dev/sdXZ)
parted /dev/sdX mkpart primary 512MiB 100%parted /dev/sdX set 2 lvm oncryptsetup --verify-passphrase -v luksFormat /dev/sdXZ4.创建 LVM 逻辑卷
cryptsetup open /dev/sdXZ encpvcreate /dev/mapper/encvgcreate vg0 /dev/mapper/enc5.创建 swap 卷 (以下表示为/dev/vg0/swap)
lvcreate -L 48G -n swap vg0mkswap -L SWAP /dev/vg0/swap6.创建 NixOS Btrfs 卷 (以下表示为/dev/vg0/main)
lvcreate -l 100%FREE -n main vg0mkfs.btrfs -L NIXOS /dev/vg0/main设置 BTRFS 子卷
1.挂载 NIXOS 卷
mount -t btrfs /dev/vg0/main /mnt2.创建 NIX 子卷
btrfs subvolume create /mnt/@nix3.创建 HOME 子卷
btrfs subvolume create /mnt/@home4.创建 snapshots 子卷 (用于 snapper 自动快照)
btrfs subvolume create /mnt/@home/.snapshots5.卸载 NIXOS 卷
umount /mnt挂载分区
1.挂载 ROOT 分区 (in-ram)
mount -t tmpfs -o noatime,mode=755 none /mnt2.创建挂载点
mkdir /mnt/{boot,nix,home}mkdir /mnt/home/.snapshots3.挂载 UEFI 分区
mount -t vfat -o defaults,noatime,fmask=0077,dmask=0077 /dev/sdXY /mnt/boot4.挂载 NIX 子卷
mount -t btrfs -o noatime,compress=zstd,subvol=@nix /dev/vg0/main /mnt/nix5.挂载 HOME 子卷
mount -t btrfs -o noatime,compress=zstd,subvol=@home /dev/vg0/main /mnt/home6.挂载 snapshots 子卷
mount -t btrfs -o noatime,compress=zstd,subvol=@home/.snapshots /dev/vg0/main /mnt/home/.snapshots7.挂载 swap
swapon /dev/vg0/swap生成 NixOS 配置文件并安装
1.让 NixOS 生成初始配置文件
nixos-generate-config --root /mnt2.确保 hardware-configuration.nix 里的挂载点和之前的挂载步骤一致
vim /mnt/etc/nixos/hardware-configuration.nix示例
fileSystems."/" = { device = "none"; fsType = "tmpfs"; options = [ "noatime" "size=3G" "mode=755" ]; };
fileSystems."/boot" = { device = "/dev/disk/by-uuid/XXX"; fsType = "vfat"; options = [ "fmask=0077" "dmask=0077" ]; };
boot.initrd.luks.devices."enc".device = "/dev/disk/by-uuid/XXX";
fileSystems."/nix" = { device = "/dev/disk/by-uuid/XXX"; fsType = "btrfs"; options = [ "subvol=@nix" "compress=zstd" "noatime" ]; };
fileSystems."/home" = { device = "/dev/disk/by-uuid/XXX"; fsType = "btrfs"; options = [ "subvol=@home" "compress=zstd" "noatime" ]; };
fileSystems."/home/.snapshots" = { device = "/dev/disk/by-uuid/XXX"; fsType = "btrfs"; options = [ "subvol=@home/.snapshots" "compress=zstd" "noatime" ]; };
swapDevices = [ { device = "/dev/disk/by-uuid/XXX"; } ];NOTE手动添加以下内容:
boot.initrd.luks.devices."enc".device = "/dev/disk/by-uuid/XXX";用实际 UUID (终端输入
blkid /dev/sdXZ查看) 代替XXX
3.编辑 configuration.nix
vim /mnt/etc/nixos/configuration.nix禁用可变用户
users.mutableUsers = false;- 添加用户密码(hashed):
(在另一个终端输入:
nix-shell --run 'mkpasswd -m SHA-512 -s' -p mkpasswd)
users.users.<USERNAME>.initialHashedPassword = "<HASHED_PASSWORD>";4.安装 NixOS
nixos-install --no-root-passwdreboot安装后
1.保存 nixos 文件夹
mkdir /mnt/nix/persist/etccp -r /etc/nixos /mnt/nix/persist/etc/2.使用 impermanence 来保存需要的文件
添加到 flake.nix inputs
impermanence.url = "github:nix-community/impermanence";configuration.nix
{ inputs, config, pkgs, lib, ...}:{ # persist imports = [ inputs.impermanence.nixosModules.impermanence ]; environment.persistence."/nix/persist" = { hideMounts = true; directories = ( [ "/var/log" "/var/lib/nixos" "/var/lib/systemd/coredump" "/var/lib/systemd/timers" "/var/lib/bluetooth" "/etc/nixos" "/etc/NetworkManager/system-connections" { directory = "/var/lib/colord"; user = "colord"; group = "colord"; mode = "u=rwx,g=rx,o="; } ] ++ lib.optional config.virtualisation.libvirtd.enable "/var/lib/libvirt" ); files = ( [ "/etc/machine-id" { file = "/etc/nix/id_rsa"; parentDirectory = { mode = "u=rwx,g=rx,o=rx"; }; } ] ++ lib.optionals config.services.openssh.enable [ "/etc/ssh/ssh_host_rsa_key" "/etc/ssh/ssh_host_rsa_key.pub" "/etc/ssh/ssh_host_ed25519_key" "/etc/ssh/ssh_host_ed25519_key.pub" ] ); }; security.sudo.extraConfig = '' Defaults lecture = never '';}参考: