29 May 2023 |
Winter (she/her) | so sysroot.mount + initrd-fs.target are the way to go, i guess? | 01:26:41 |
@elvishjerricco:matrix.org | while local-fs.target is stage 1 specific file systems | 01:26:42 |
@elvishjerricco:matrix.org | initrd-fs.target depends on sysroot.mount already | 01:26:55 |
@elvishjerricco:matrix.org | so if you just want a fully configured sysroot, with all child file systems, After=initrd-fs.target is all you need | 01:27:23 |
@elvishjerricco:matrix.org | sysroot.mount is just if you only care about the root fs only | 01:27:40 |
@elvishjerricco:matrix.org | oh but if you mean you want to be before things are mounted, then yea you want Before=sysroot.mount | 01:28:12 |
Winter (she/her) | what if I want to go before sysroot (so Before = sysroot.mount), but after device nodes are created, and I don't care about anything else? do I just do Before = sysroot.mount , After = local-fs.target (so I get /dev?) | 01:28:27 |
@elvishjerricco:matrix.org | well | 01:28:42 |
@elvishjerricco:matrix.org | the best thing to do is have After= on the specific device you want | 01:28:55 |
@elvishjerricco:matrix.org | in an ideal world we'd have Lily Foster's patch and you could do After=initrd-root-device.target to wait for whatever the root fs's device is | 01:29:21 |
Winter (she/her) | ah, okay | 01:29:30 |
@elvishjerricco:matrix.org | but that's still not "all devices" since that's not really a thing in udev | 01:29:34 |
Winter (she/her) | In reply to @elvishjerricco:matrix.org the best thing to do is have After= on the specific device you want how do I find that? | 01:29:44 |
@elvishjerricco:matrix.org | Winter (she/her): What specifically are you trying to do? We may have an X Y problem here | 01:30:05 |
Winter (she/her) | ephemeral rootfs, so I kind of need that ordering | 01:30:39 |
Winter (she/her) | not ZFS though, so I can't rely on the ZFS import services | 01:30:56 |
@elvishjerricco:matrix.org | so how are you achieving ephemeral rootfs then? | 01:31:16 |
Winter (she/her) | btrfs:
mkdir /scratch
mount /dev/mapper/nixos /scratch
btrfs subvolume delete /scratch/root/srv
btrfs subvolume delete /scratch/root/var/lib/portables
btrfs subvolume delete /scratch/root/var/lib/machines
btrfs subvolume delete /scratch/root
btrfs subvolume snapshot /scratch/root-blank /scratch/root
umount /scratch
rm -r /scratch
| 01:32:26 |
Winter (she/her) | oh, i could use cryptsetup.target | 01:32:46 |
@elvishjerricco:matrix.org | I se | 01:32:55 |
@elvishjerricco:matrix.org | * I see | 01:32:56 |
@elvishjerricco:matrix.org | no, | 01:32:57 |
@elvishjerricco:matrix.org | You probably just want to do After=dev-mapper-nixos.device | 01:33:20 |
Winter (she/her) | ah, yeah, that'd be better | 01:33:29 |
@elvishjerricco:matrix.org | and BindsTo=dev-mapper-nixos.device | 01:33:34 |
@elvishjerricco:matrix.org | with that combination, that's how systemd does the "waiting for device blabla..." thing | 01:33:53 |
Winter (she/her) | so like this?
boot.initrd.systemd.services.wipe-root = {
wantedBy = [ "initrd.target" ];
before = [ "sysroot.target" ];
after = [ "dev-mapper-nixos.device" ];
bindsTo = [ "dev-mapper-nixos.device" ];
path = [ pkgs.coreutils pkgs.btrfs-progs ];
serviceConfig.Type = "oneshot";
script = ''
mkdir /scratch
mount /dev/mapper/nixos /scratch
btrfs subvolume delete /scratch/root/srv
btrfs subvolume delete /scratch/root/var/lib/portables
btrfs subvolume delete /scratch/root/var/lib/machines
btrfs subvolume delete /scratch/root
btrfs subvolume snapshot /scratch/root-blank /scratch/root
umount /scratch
rm -r /scratch
'';
};
| 01:36:19 |
@elvishjerricco:matrix.org | s/sysroot.target/sysroot.mount/ | 01:37:04 |
@elvishjerricco:matrix.org | * s/sysroot.target/sysroot.mount/ | 01:37:06 |
Winter (she/her) | thanks. | 01:37:28 |