nix/os: more work on partition handling
This commit is contained in:
parent
e7f6744be5
commit
f94d349398
3 changed files with 37 additions and 7 deletions
26
Justfile
26
Justfile
|
@ -76,15 +76,35 @@ hm-iterate-qtile:
|
||||||
# Sorry, this is a manual step for now. Please see nix/os/modules/encryptedDisk.nix for the layout
|
# Sorry, this is a manual step for now. Please see nix/os/modules/encryptedDisk.nix for the layout
|
||||||
disk-prepare:
|
disk-prepare:
|
||||||
echo NOT IMPLEMENTED
|
echo NOT IMPLEMENTED
|
||||||
|
# GPT partition table
|
||||||
|
# part1: size: 1MiB type: 4 BIOS BOOT
|
||||||
|
# part2: size: 512MiB label: 2-DISKID (36 char limit?)
|
||||||
|
# part3: size: * label: 3-DISKID (36 char limit?)
|
||||||
|
# cryptsetup format part3
|
||||||
|
# vgcreate DISKID part3
|
||||||
|
# lvcreate DISKID -L 8G -n swap
|
||||||
|
# lvcreate DISKID -l 100%FREE -n root
|
||||||
|
# sudo mkfs.vfat -F32 part2
|
||||||
|
# sudo mkfs.btrfs /dev/DISKID/root
|
||||||
|
# sudo mkswap /dev/DISKID/swap
|
||||||
|
# sudo mount /dev/DISKID/root /mnt
|
||||||
|
# sudo btrfs subvolume create nixos
|
||||||
|
# sudo btrfs subvolume create home
|
||||||
|
# sudo mount /dev/disk/by-partlabel/3-DISKID /mnt/DISKID-root
|
||||||
|
# pushd /dev/disk/by-partlabel/3-DISKID /mnt/DISKID-root
|
||||||
|
# sudo btrfs subvolume create nixos
|
||||||
|
# sudo mkdir nixos/{boot,home}
|
||||||
|
# sudo btrfs subvolume create home
|
||||||
|
#
|
||||||
|
|
||||||
# Mount the target disk specified by device configuration directory. The 'dir' argument points to a device configuration, e.g. 'nix/os/devices/steveej-live-mmc-SL32G_0x259093f6'
|
# Mount the target disk specified by device configuration directory. The 'dir' argument points to a device configuration, e.g. 'nix/os/devices/steveej-live-mmc-SL32G_0x259093f6'
|
||||||
disk-mount dir:
|
disk-mount dir:
|
||||||
just -v _device diskMount {{dir}}
|
just -v _device diskMount {{dir}} --argstr rebuildarg "dummy"
|
||||||
|
|
||||||
# Unmount target disk, specified by device configuration directory
|
# Unmount target disk, specified by device configuration directory
|
||||||
disk-umount dir:
|
disk-umount dir:
|
||||||
just -v _device diskUmount {{dir}}
|
just -v _device diskUmount {{dir}} --argstr rebuildarg "dummy"
|
||||||
|
|
||||||
# Perform an offline installation on the mounted the target disk, specified by device configuration directory
|
# Perform an offline installation on the mounted the target disk, specified by device configuration directory
|
||||||
disk-install dir:
|
disk-install dir:
|
||||||
just -v _device diskInstall {{dir}}
|
just -v _device diskInstall {{dir}} --argstr rebuildarg "dummy"
|
||||||
|
|
|
@ -31,12 +31,12 @@ in {
|
||||||
ID=${diskId}
|
ID=${diskId}
|
||||||
echo Mounting $ID
|
echo Mounting $ID
|
||||||
set -xe
|
set -xe
|
||||||
cryptsetup luksOpen /dev/disk/by-partlabel/$ID-part3 $ID-part3
|
cryptsetup luksOpen /dev/disk/by-id/$ID-part3 $ID-part3
|
||||||
vgchange -ay $ID
|
vgchange -ay $ID
|
||||||
mkdir -p /mnt/$ID-root
|
mkdir -p /mnt/$ID-root
|
||||||
mount /dev/$ID/root /mnt/$ID-root -o subvol=nixos
|
mount /dev/$ID/root /mnt/$ID-root -o subvol=nixos
|
||||||
mount /dev/$ID/root /mnt/$ID-root/home -o subvol=home
|
mount /dev/$ID/root /mnt/$ID-root/home -o subvol=home
|
||||||
mount /dev/disk/by-partlabel/$ID-part2 /mnt/$ID-root/boot
|
mount /dev/disk/by-id/$ID-part2 /mnt/$ID-root/boot
|
||||||
'';
|
'';
|
||||||
|
|
||||||
diskUmount = pkgs.writeScript "script" ''
|
diskUmount = pkgs.writeScript "script" ''
|
||||||
|
|
|
@ -6,13 +6,23 @@ with lib;
|
||||||
let
|
let
|
||||||
cfg = config.hardware.encryptedDisk;
|
cfg = config.hardware.encryptedDisk;
|
||||||
|
|
||||||
|
|
||||||
volumeGroup = cfg.diskId;
|
volumeGroup = cfg.diskId;
|
||||||
|
|
||||||
|
# This is important at install-time
|
||||||
bootGrubDevice = lib.concatStrings [ "/dev/disk/by-id/" cfg.diskId ];
|
bootGrubDevice = lib.concatStrings [ "/dev/disk/by-id/" cfg.diskId ];
|
||||||
bootFsDevice = lib.concatStrings [ "/dev/disk/by-partlabel/" cfg.diskId "-part2" ];
|
|
||||||
bootLuksDevice = lib.concatStrings [ "/dev/disk/by-partlabel/" cfg.diskId "-part3" ];
|
# These are guaranteed by LVM
|
||||||
rootFsDevice = lib.concatStrings [ "/dev/" volumeGroup "/root" ];
|
rootFsDevice = lib.concatStrings [ "/dev/" volumeGroup "/root" ];
|
||||||
swapFsDevice = lib.concatStrings [ "/dev/" volumeGroup "/swap" ];
|
swapFsDevice = lib.concatStrings [ "/dev/" volumeGroup "/swap" ];
|
||||||
|
|
||||||
|
# TODO: verify the GPT PARTLABEL cap at 36 chars
|
||||||
|
shortenPartlabel = name: (builtins.substring 0 36 name);
|
||||||
|
# Cannot use the disk ID here because might be different at install vs. runtime.
|
||||||
|
# Example: MMC card which is used in the internal reader vs. USB reader
|
||||||
|
bootFsDevice = lib.concatStrings [ "/dev/disk/by-partlabel/" (shortenPartlabel ("2-"+cfg.diskId))];
|
||||||
|
bootLuksDevice = lib.concatStrings [ "/dev/disk/by-partlabel/" (shortenPartlabel ("3-"+cfg.diskId))];
|
||||||
|
|
||||||
in {
|
in {
|
||||||
options.hardware.encryptedDisk = {
|
options.hardware.encryptedDisk = {
|
||||||
enable = mkEnableOption "Enable encrypted filesystem layout";
|
enable = mkEnableOption "Enable encrypted filesystem layout";
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue