move ensureZfsMounts
This commit is contained in:
parent
80df89e9a1
commit
30421d96f0
@ -189,7 +189,10 @@
|
|||||||
# get nix-minecraft working!
|
# get nix-minecraft working!
|
||||||
nix-minecraft.nixosModules.minecraft-servers
|
nix-minecraft.nixosModules.minecraft-servers
|
||||||
{
|
{
|
||||||
nixpkgs.overlays = [ nix-minecraft.overlay ];
|
nixpkgs.overlays = [
|
||||||
|
nix-minecraft.overlay
|
||||||
|
(import ./overlays.nix)
|
||||||
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
lanzaboote.nixosModules.lanzaboote
|
lanzaboote.nixosModules.lanzaboote
|
||||||
|
|||||||
63
lib.nix
63
lib.nix
@ -9,58 +9,29 @@ inputs.nixpkgs.lib.extend (
|
|||||||
lib = prev;
|
lib = prev;
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
# Should probably be moved to a package later instead of this
|
|
||||||
ensureZfsMounts = pkgs.writeShellApplication {
|
|
||||||
name = "zfsEnsureMounted";
|
|
||||||
runtimeInputs = with pkgs; [
|
|
||||||
zfs
|
|
||||||
gnugrep
|
|
||||||
gawk
|
|
||||||
coreutils
|
|
||||||
];
|
|
||||||
|
|
||||||
text = ''
|
serviceMountDeps =
|
||||||
#!/bin/sh -x
|
serviceName: dirs:
|
||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
|
systemd.services."${serviceName}_mounts" = {
|
||||||
|
wants = [ "zfs.target" ];
|
||||||
|
before = [ "${serviceName}.service" ];
|
||||||
|
|
||||||
if [[ "$#" -eq "0" ]]; then
|
serviceConfig = {
|
||||||
echo "no arguments passed"
|
Type = "oneshot";
|
||||||
exit 1
|
RemainAfterExit = true;
|
||||||
fi
|
ExecStart = "${lib.getExe pkgs.ensureZfsMounts} ${lib.strings.concatStringsSep " " dirs}";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
TARGETS=$(echo "$@" | sort | uniq)
|
systemd.services.${serviceName} = {
|
||||||
MOUNTED=$(zfs list -o mountpoint,mounted -H | awk '$2 == "yes" {print $1}' | sort | uniq)
|
wants = [ "${serviceName}_mounts.service" ];
|
||||||
NUM_MATCHED=$(echo "$MOUNTED" | grep -Ec "$(echo "$@" | tr ' ' '\|')") # does not properly handle paths with strings
|
after = [ "${serviceName}_mounts.service" ];
|
||||||
if [[ "$NUM_MATCHED" -eq "$#" ]]; then
|
requires = [ "${serviceName}_mounts.service" ];
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
FOUND=$(printf "%s\n%s" "$TARGETS" "$MOUNTED" | sort | uniq -c | awk '$1 == "2" {print $2}' | sort)
|
|
||||||
MISSING=$(printf "%s\n%s" "$FOUND" "$TARGETS" | sort | uniq -u | sort)
|
|
||||||
|
|
||||||
echo "FAILURE, missing: $MISSING" 1>&2
|
|
||||||
exit 1
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
serviceMountDeps = serviceName: dirs: {
|
|
||||||
systemd.services."${serviceName}_mounts" = {
|
|
||||||
wants = [ "zfs.target" ];
|
|
||||||
before = [ "${serviceName}.service" ];
|
|
||||||
|
|
||||||
serviceConfig = {
|
|
||||||
Type = "oneshot";
|
|
||||||
RemainAfterExit = true;
|
|
||||||
ExecStart = "${lib.getExe final.ensureZfsMounts} ${lib.strings.concatStringsSep " " dirs}";
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
systemd.services.${serviceName} = {
|
|
||||||
wants = [ "${serviceName}_mounts.service" ];
|
|
||||||
after = [ "${serviceName}_mounts.service" ];
|
|
||||||
requires = [ "${serviceName}_mounts.service" ];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
# stolen from: https://stackoverflow.com/a/42398526
|
# stolen from: https://stackoverflow.com/a/42398526
|
||||||
optimizeWithFlags =
|
optimizeWithFlags =
|
||||||
pkg: flags:
|
pkg: flags:
|
||||||
|
|||||||
33
overlays.nix
Normal file
33
overlays.nix
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
final: prev: {
|
||||||
|
ensureZfsMounts = prev.writeShellApplication {
|
||||||
|
name = "zfsEnsureMounted";
|
||||||
|
runtimeInputs = with prev; [
|
||||||
|
zfs
|
||||||
|
gnugrep
|
||||||
|
gawk
|
||||||
|
coreutils
|
||||||
|
];
|
||||||
|
|
||||||
|
text = ''
|
||||||
|
#!/bin/sh -x
|
||||||
|
|
||||||
|
if [[ "$#" -eq "0" ]]; then
|
||||||
|
echo "no arguments passed"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
TARGETS=$(echo "$@" | sort | uniq)
|
||||||
|
MOUNTED=$(zfs list -o mountpoint,mounted -H | awk '$2 == "yes" {print $1}' | sort | uniq)
|
||||||
|
NUM_MATCHED=$(echo "$MOUNTED" | grep -Ec "$(echo "$@" | tr ' ' '\|')") # does not properly handle paths with strings
|
||||||
|
if [[ "$NUM_MATCHED" -eq "$#" ]]; then
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
FOUND=$(printf "%s\n%s" "$TARGETS" "$MOUNTED" | sort | uniq -c | awk '$1 == "2" {print $2}' | sort)
|
||||||
|
MISSING=$(printf "%s\n%s" "$FOUND" "$TARGETS" | sort | uniq -u | sort)
|
||||||
|
|
||||||
|
echo "FAILURE, missing: $MISSING" 1>&2
|
||||||
|
exit 1
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
}
|
||||||
@ -10,7 +10,10 @@ let
|
|||||||
testPkgs = import inputs.nixpkgs {
|
testPkgs = import inputs.nixpkgs {
|
||||||
system = pkgs.system;
|
system = pkgs.system;
|
||||||
config.allowUnfreePredicate = pkg: builtins.elem (lib.getName pkg) [ "minecraft-server" ];
|
config.allowUnfreePredicate = pkg: builtins.elem (lib.getName pkg) [ "minecraft-server" ];
|
||||||
overlays = [ inputs.nix-minecraft.overlay ];
|
overlays = [
|
||||||
|
inputs.nix-minecraft.overlay
|
||||||
|
(import ../overlays.nix)
|
||||||
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
# Create a wrapper module that imports the actual minecraft service
|
# Create a wrapper module that imports the actual minecraft service
|
||||||
|
|||||||
@ -2,9 +2,17 @@
|
|||||||
config,
|
config,
|
||||||
lib,
|
lib,
|
||||||
pkgs,
|
pkgs,
|
||||||
|
inputs,
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
pkgs.testers.runNixOSTest {
|
let
|
||||||
|
# Create pkgs with ensureZfsMounts overlay
|
||||||
|
testPkgs = import inputs.nixpkgs {
|
||||||
|
system = pkgs.system;
|
||||||
|
overlays = [ (import ../overlays.nix) ];
|
||||||
|
};
|
||||||
|
in
|
||||||
|
testPkgs.testers.runNixOSTest {
|
||||||
name = "zfs folder dependency and mounting test";
|
name = "zfs folder dependency and mounting test";
|
||||||
|
|
||||||
nodes.machine =
|
nodes.machine =
|
||||||
@ -35,7 +43,7 @@ pkgs.testers.runNixOSTest {
|
|||||||
|
|
||||||
environment.systemPackages = [
|
environment.systemPackages = [
|
||||||
pkgs.parted
|
pkgs.parted
|
||||||
lib.ensureZfsMounts
|
pkgs.ensureZfsMounts
|
||||||
];
|
];
|
||||||
|
|
||||||
systemd.services.foobar = {
|
systemd.services.foobar = {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user