Skip to content

Commit 3d3429b

Browse files
committed
nixos-modules/microvm: unify microvm.binScripts
1 parent f668622 commit 3d3429b

File tree

4 files changed

+86
-133
lines changed

4 files changed

+86
-133
lines changed

lib/runner.nix

Lines changed: 35 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
let
77
inherit (pkgs) lib;
88

9-
inherit (microvmConfig) virtiofsdScripts tapScripts macvtapScripts;
9+
inherit (microvmConfig) hostName virtiofsdScripts tapScripts macvtapScripts;
1010

1111
inherit (import ./. { inherit lib; }) createVolumesScript makeMacvtap;
1212
inherit (makeMacvtap {
@@ -21,37 +21,42 @@ let
2121
supportsNotifySocket = hypervisorConfig.supportsNotifySocket or false;
2222
preStart = hypervisorConfig.preStart or microvmConfig.preStart;
2323
tapMultiQueue = hypervisorConfig.tapMultiQueue or false;
24+
setBalloonScript = hypervisorConfig.setBalloonScript or null;
2425

2526
execArg = lib.optionalString microvmConfig.prettyProcnames
26-
''-a "microvm@${microvmConfig.hostName}"'';
27-
28-
runScriptBin = pkgs.writeShellScriptBin "microvm-run" ''
29-
set -eou pipefail
30-
${preStart}
31-
${createVolumesScript pkgs.buildPackages microvmConfig.volumes}
32-
${lib.optionalString (hypervisorConfig.requiresMacvtapAsFds or false) openMacvtapFds}
33-
34-
exec ${execArg} ${command}
35-
'';
36-
37-
shutdownScriptBin = pkgs.writeShellScriptBin "microvm-shutdown" ''
38-
${shutdownCommand}
39-
'';
40-
41-
balloonScriptBin = pkgs.writeShellScriptBin "microvm-balloon" ''
42-
set -e
43-
44-
if [ -z "$1" ]; then
45-
echo "Usage: $0 <balloon-size-mb>"
46-
exit 1
47-
fi
27+
''-a "microvm@${hostName}"'';
28+
29+
binScripts = microvmConfig.binScripts // {
30+
microvm-run = ''
31+
set -eou pipefail
32+
${preStart}
33+
${createVolumesScript pkgs.buildPackages microvmConfig.volumes}
34+
${lib.optionalString (hypervisorConfig.requiresMacvtapAsFds or false) openMacvtapFds}
35+
36+
exec ${execArg} ${command}
37+
'';
38+
} // lib.optionalAttrs canShutdown {
39+
microvm-shutdown = shutdownCommand;
40+
} // lib.optionalAttrs (setBalloonScript != null) {
41+
microvm-balloon = ''
42+
set -e
43+
44+
if [ -z "$1" ]; then
45+
echo "Usage: $0 <balloon-size-mb>"
46+
exit 1
47+
fi
48+
49+
SIZE=$1
50+
${setBalloonScript}
51+
'';
52+
};
4853

49-
SIZE=$1
50-
${hypervisorConfig.setBalloonScript}
51-
'';
54+
binScriptPkgs = lib.mapAttrs (scriptName: lines:
55+
pkgs.writeShellScript "microvm-${hostName}-${scriptName}" lines
56+
) binScripts;
5257
in
5358

54-
pkgs.buildPackages.runCommand "microvm-${microvmConfig.hypervisor}-${microvmConfig.hostName}"
59+
pkgs.buildPackages.runCommand "microvm-${microvmConfig.hypervisor}-${hostName}"
5560
{
5661
# for `nix run`
5762
meta.mainProgram = "microvm-run";
@@ -63,35 +68,9 @@ pkgs.buildPackages.runCommand "microvm-${microvmConfig.hypervisor}-${microvmConf
6368
} ''
6469
mkdir -p $out/bin
6570
66-
ln -s ${runScriptBin}/bin/microvm-run $out/bin/microvm-run
67-
${if canShutdown
68-
then "ln -s ${shutdownScriptBin}/bin/microvm-shutdown $out/bin/microvm-shutdown"
69-
else ""}
70-
${lib.optionalString ((hypervisorConfig.setBalloonScript or null) != null) ''
71-
ln -s ${balloonScriptBin}/bin/microvm-balloon $out/bin/microvm-balloon
72-
''}
73-
74-
${lib.optionalString (virtiofsdScripts.run != null) ''
75-
ln -s ${lib.getExe virtiofsdScripts.run} $out/bin/virtiofsd-run
76-
''}
77-
${lib.optionalString (virtiofsdScripts.reload != null) ''
78-
ln -s ${lib.getExe virtiofsdScripts.reload} $out/bin/virtiofsd-reload
79-
''}
80-
${lib.optionalString (virtiofsdScripts.shutdown != null) ''
81-
ln -s ${lib.getExe virtiofsdScripts.shutdown} $out/bin/virtiofsd-shutdown
82-
''}
83-
${lib.optionalString (tapScripts.up != null) ''
84-
ln -s ${lib.getExe tapScripts.up} $out/bin/tap-up
85-
''}
86-
${lib.optionalString (tapScripts.down != null) ''
87-
ln -s ${lib.getExe tapScripts.down} $out/bin/tap-down
88-
''}
89-
${lib.optionalString (macvtapScripts.up != null) ''
90-
ln -s ${lib.getExe macvtapScripts.up} $out/bin/macvtap-up
91-
''}
92-
${lib.optionalString (macvtapScripts.down != null) ''
93-
ln -s ${lib.getExe macvtapScripts.down} $out/bin/macvtap-down
94-
''}
71+
${lib.concatMapStrings (scriptName: ''
72+
ln -s ${binScriptPkgs.${scriptName}} $out/bin/${scriptName}
73+
'') (builtins.attrNames binScriptPkgs)}
9574
9675
mkdir -p $out/share/microvm
9776
ln -s ${toplevel} $out/share/microvm/system

nixos-modules/microvm/interfaces.nix

Lines changed: 38 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -20,42 +20,44 @@ let
2020
group = "kvm";
2121
in
2222
{
23-
microvm.tapScripts = lib.mkIf (tapInterfaces != []) {
24-
up = pkgs.writeShellScriptBin "microvm-${hostName}-tap-up" (''
25-
set -eou pipefail
26-
'' + lib.concatMapStrings ({ id, mac, ... }: ''
27-
if [ -e /sys/class/net/${id} ]; then
23+
microvm.binScripts = lib.mkMerge [ (
24+
lib.mkIf (tapInterfaces != []) {
25+
tap-up = ''
26+
set -eou pipefail
27+
'' + lib.concatMapStrings ({ id, mac, ... }: ''
28+
if [ -e /sys/class/net/${id} ]; then
29+
${pkgs.iproute2}/bin/ip tuntap del name '${id}' mode tap ${tapFlags}
30+
fi
31+
32+
${pkgs.iproute2}/bin/ip tuntap add name '${id}' mode tap user '${user}' ${tapFlags}
33+
'') tapInterfaces;
34+
35+
tap-down = ''
36+
set -ou pipefail
37+
'' + lib.concatMapStrings ({ id, mac, ... }: ''
2838
${pkgs.iproute2}/bin/ip tuntap del name '${id}' mode tap ${tapFlags}
29-
fi
30-
31-
${pkgs.iproute2}/bin/ip tuntap add name '${id}' mode tap user '${user}' ${tapFlags}
32-
'') tapInterfaces);
33-
34-
down = pkgs.writeShellScriptBin "microvm-${hostName}-tap-down" (''
35-
set -ou pipefail
36-
'' + lib.concatMapStrings ({ id, mac, ... }: ''
37-
${pkgs.iproute2}/bin/ip tuntap del name '${id}' mode tap ${tapFlags}
38-
'') tapInterfaces);
39-
};
40-
41-
microvm.macvtapScripts = lib.mkIf (macvtapInterfaces != []) {
42-
up = pkgs.writeShellScriptBin "microvm-${hostName}-macvtap-up" (''
43-
set -eou pipefail
44-
'' + lib.concatMapStrings ({ id, mac, macvtap, ... }: ''
45-
if [ -e /sys/class/net/${id} ]; then
39+
'') tapInterfaces;
40+
}
41+
) (
42+
lib.mkIf (macvtapInterfaces != []) {
43+
macvtap-up = ''
44+
set -eou pipefail
45+
'' + lib.concatMapStrings ({ id, mac, macvtap, ... }: ''
46+
if [ -e /sys/class/net/${id} ]; then
47+
${pkgs.iproute2}/bin/ip link del name '${id}'
48+
fi
49+
${pkgs.iproute2}/bin/ip link add link '${macvtap.link}' name '${id}' address '${mac}' type macvtap '${macvtap.mode}'
50+
${pkgs.iproute2}/bin/ip link set '${id}' allmulticast on
51+
echo 1 > "/proc/sys/net/ipv6/conf/${id}/disable_ipv6"
52+
${pkgs.iproute2}/bin/ip link set '${id}' up
53+
${pkgs.coreutils-full}/bin/chown '${user}:${group}' /dev/tap$(< "/sys/class/net/${id}/ifindex")
54+
'') macvtapInterfaces;
55+
56+
macvap-down = pkgs.writeShellScriptBin "microvm-${hostName}-macvtap-down" (''
57+
set -ou pipefail
58+
'' + lib.concatMapStrings ({ id, mac, ... }: ''
4659
${pkgs.iproute2}/bin/ip link del name '${id}'
47-
fi
48-
${pkgs.iproute2}/bin/ip link add link '${macvtap.link}' name '${id}' address '${mac}' type macvtap '${macvtap.mode}'
49-
${pkgs.iproute2}/bin/ip link set '${id}' allmulticast on
50-
echo 1 > "/proc/sys/net/ipv6/conf/${id}/disable_ipv6"
51-
${pkgs.iproute2}/bin/ip link set '${id}' up
52-
${pkgs.coreutils-full}/bin/chown '${user}:${group}' /dev/tap$(< "/sys/class/net/${id}/ifindex")
53-
'') macvtapInterfaces);
54-
55-
down = pkgs.writeShellScriptBin "microvm-${hostName}-macvtap-down" (''
56-
set -ou pipefail
57-
'' + lib.concatMapStrings ({ id, mac, ... }: ''
58-
${pkgs.iproute2}/bin/ip link del name '${id}'
59-
'') macvtapInterfaces);
60-
};
60+
'') macvtapInterfaces);
61+
}
62+
) ];
6163
}

nixos-modules/microvm/options.nix

Lines changed: 8 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -6,19 +6,6 @@ let
66

77
hostName = config.networking.hostName or "$HOSTNAME";
88

9-
interfaceScriptOptions = type: with lib; {
10-
up = mkOption {
11-
description = "Generated script to create ${type} interfaces";
12-
type = with types; nullOr package;
13-
default = null;
14-
};
15-
down = mkOption {
16-
description = "Generated script to delete ${type} interfaces";
17-
type = with types; nullOr package;
18-
default = null;
19-
};
20-
};
21-
229
in
2310
{
2411
options.microvm = with lib; {
@@ -527,29 +514,14 @@ in
527514
defaultText = literalExpression ''"config.microvm.runner.''${config.microvm.hypervisor}"'';
528515
};
529516

530-
# TODO: just scripts
531-
virtiofsdScripts = {
532-
run = mkOption {
533-
description = "Generated script to run required virtiofsd instances";
534-
type = with types; nullOr package;
535-
default = null;
536-
};
537-
reload = mkOption {
538-
description = ''
539-
Generated script to reload the supervisor configuration that runs the virtiofsd instances
540-
'';
541-
type = with types; nullOr package;
542-
default = null;
543-
};
544-
shutdown = mkOption {
545-
description = "Generated script to stop the virtiofsd instances";
546-
type = with types; nullOr package;
547-
default = null;
548-
};
549-
};
550-
551-
tapScripts = interfaceScriptOptions "tap";
552-
macvtapScripts = interfaceScriptOptions "macvtap";
517+
# TODO: microvm-* as well?
518+
binScripts = mkOption {
519+
description = ''
520+
Script snippets that end up in the runner package's bin/ directory
521+
'';
522+
default = {};
523+
type = with types; attrsOf lines;
524+
};
553525
};
554526

555527
config = lib.mkMerge [ {

nixos-modules/microvm/virtiofsd/default.nix

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@ let
1313

1414
in
1515
{
16-
microvm.virtiofsdScripts = lib.mkIf requiresVirtiofsd {
17-
run =
16+
microvm.binScripts = lib.mkIf requiresVirtiofsd {
17+
virtiofsd-run =
1818
let
1919
supervisordConfig = pkgs.writeText "${config.networking.hostName}-virtiofsd-supervisord.conf" ''
2020
[supervisord]
@@ -54,15 +54,15 @@ in
5454
''}
5555
'' ) virtiofsShares}
5656
'';
57-
in pkgs.writeShellScriptBin "run-virtiofsd" ''
57+
in ''
5858
exec ${supervisord} --configuration ${supervisordConfig}
5959
'';
6060

61-
reload = pkgs.writeShellScriptBin "reload-virtiofsd" ''
61+
virtiofsd-reload = ''
6262
exec ${supervisorctl} reload
6363
'';
6464

65-
shutdown = pkgs.writeShellScriptBin "shutdown-virtiofsd" ''
65+
virtiofsd-shutdown = ''
6666
exec ${supervisorctl} stop
6767
'';
6868
};

0 commit comments

Comments
 (0)