From 14f09e01c15591c10bf9a31e4f4b7987b5c6a71b Mon Sep 17 00:00:00 2001 From: aszlig Date: Thu, 27 Nov 2014 18:24:57 +0100 Subject: [PATCH] nixos: Add enable option for programs/virtualbox. We will simply rename the previous module and add a warning whenever the module is included directly, pointing the user to the right option and also enable it as well (in case somebody has missed the option and is wondering why VirtualBox doesn't work anymore). Signed-off-by: aszlig --- nixos/modules/module-list.nix | 1 + nixos/modules/programs/virtualbox-host.nix | 56 ++++++++++++++++++++++ nixos/modules/programs/virtualbox.nix | 54 +++------------------ 3 files changed, 64 insertions(+), 47 deletions(-) create mode 100644 nixos/modules/programs/virtualbox-host.nix diff --git a/nixos/modules/module-list.nix b/nixos/modules/module-list.nix index 85afcb824fb7..cf9e7fa3bfa1 100755 --- a/nixos/modules/module-list.nix +++ b/nixos/modules/module-list.nix @@ -67,6 +67,7 @@ ./programs/ssmtp.nix ./programs/uim.nix ./programs/venus.nix + ./programs/virtualbox-host.nix ./programs/wvdial.nix ./programs/freetds.nix ./programs/zsh/zsh.nix diff --git a/nixos/modules/programs/virtualbox-host.nix b/nixos/modules/programs/virtualbox-host.nix new file mode 100644 index 000000000000..d32ebc7ebcb6 --- /dev/null +++ b/nixos/modules/programs/virtualbox-host.nix @@ -0,0 +1,56 @@ +{ config, lib, pkgs, ... }: + +with lib; + +let + virtualbox = config.boot.kernelPackages.virtualbox; +in + +{ + options = { + services.virtualboxHost.enable = mkEnableOption "VirtualBox Host support"; + }; + + config = mkIf config.services.virtualboxHost.enable { + boot.kernelModules = [ "vboxdrv" "vboxnetadp" "vboxnetflt" ]; + boot.extraModulePackages = [ virtualbox ]; + environment.systemPackages = [ virtualbox ]; + + users.extraGroups.vboxusers.gid = config.ids.gids.vboxusers; + + services.udev.extraRules = + '' + KERNEL=="vboxdrv", OWNER="root", GROUP="vboxusers", MODE="0660", TAG+="systemd" + KERNEL=="vboxdrvu", OWNER="root", GROUP="root", MODE="0666", TAG+="systemd" + KERNEL=="vboxnetctl", OWNER="root", GROUP="vboxusers", MODE="0660", TAG+="systemd" + SUBSYSTEM=="usb_device", ACTION=="add", RUN+="${virtualbox}/libexec/virtualbox/VBoxCreateUSBNode.sh $major $minor $attr{bDeviceClass}" + SUBSYSTEM=="usb", ACTION=="add", ENV{DEVTYPE}=="usb_device", RUN+="${virtualbox}/libexec/virtualbox/VBoxCreateUSBNode.sh $major $minor $attr{bDeviceClass}" + SUBSYSTEM=="usb_device", ACTION=="remove", RUN+="${virtualbox}/libexec/virtualbox/VBoxCreateUSBNode.sh --remove $major $minor" + SUBSYSTEM=="usb", ACTION=="remove", ENV{DEVTYPE}=="usb_device", RUN+="${virtualbox}/libexec/virtualbox/VBoxCreateUSBNode.sh --remove $major $minor" + ''; + + # Since we lack the right setuid binaries, set up a host-only network by default. + + systemd.services."vboxnet0" = + { description = "VirtualBox vboxnet0 Interface"; + requires = [ "dev-vboxnetctl.device" ]; + after = [ "dev-vboxnetctl.device" ]; + wantedBy = [ "network.target" "sys-subsystem-net-devices-vboxnet0.device" ]; + path = [ virtualbox ]; + serviceConfig.RemainAfterExit = true; + serviceConfig.Type = "oneshot"; + script = + '' + if ! [ -e /sys/class/net/vboxnet0 ]; then + VBoxManage hostonlyif create + fi + ''; + postStop = + '' + VBoxManage hostonlyif remove vboxnet0 + ''; + }; + + networking.interfaces.vboxnet0.ip4 = [ { address = "192.168.56.1"; prefixLength = 24; } ]; + }; +} diff --git a/nixos/modules/programs/virtualbox.nix b/nixos/modules/programs/virtualbox.nix index 1a190573e943..a00b1e5f64d0 100644 --- a/nixos/modules/programs/virtualbox.nix +++ b/nixos/modules/programs/virtualbox.nix @@ -1,48 +1,8 @@ -{ config, lib, pkgs, ... }: - -with lib; - -let virtualbox = config.boot.kernelPackages.virtualbox; in - -{ - boot.kernelModules = [ "vboxdrv" "vboxnetadp" "vboxnetflt" ]; - boot.extraModulePackages = [ virtualbox ]; - environment.systemPackages = [ virtualbox ]; - - users.extraGroups.vboxusers.gid = config.ids.gids.vboxusers; - - services.udev.extraRules = - '' - KERNEL=="vboxdrv", OWNER="root", GROUP="vboxusers", MODE="0660", TAG+="systemd" - KERNEL=="vboxdrvu", OWNER="root", GROUP="root", MODE="0666", TAG+="systemd" - KERNEL=="vboxnetctl", OWNER="root", GROUP="vboxusers", MODE="0660", TAG+="systemd" - SUBSYSTEM=="usb_device", ACTION=="add", RUN+="${virtualbox}/libexec/virtualbox/VBoxCreateUSBNode.sh $major $minor $attr{bDeviceClass}" - SUBSYSTEM=="usb", ACTION=="add", ENV{DEVTYPE}=="usb_device", RUN+="${virtualbox}/libexec/virtualbox/VBoxCreateUSBNode.sh $major $minor $attr{bDeviceClass}" - SUBSYSTEM=="usb_device", ACTION=="remove", RUN+="${virtualbox}/libexec/virtualbox/VBoxCreateUSBNode.sh --remove $major $minor" - SUBSYSTEM=="usb", ACTION=="remove", ENV{DEVTYPE}=="usb_device", RUN+="${virtualbox}/libexec/virtualbox/VBoxCreateUSBNode.sh --remove $major $minor" - ''; - - # Since we lack the right setuid binaries, set up a host-only network by default. - - systemd.services."vboxnet0" = - { description = "VirtualBox vboxnet0 Interface"; - requires = [ "dev-vboxnetctl.device" ]; - after = [ "dev-vboxnetctl.device" ]; - wantedBy = [ "network.target" "sys-subsystem-net-devices-vboxnet0.device" ]; - path = [ virtualbox ]; - serviceConfig.RemainAfterExit = true; - serviceConfig.Type = "oneshot"; - script = - '' - if ! [ -e /sys/class/net/vboxnet0 ]; then - VBoxManage hostonlyif create - fi - ''; - postStop = - '' - VBoxManage hostonlyif remove vboxnet0 - ''; - }; - - networking.interfaces.vboxnet0.ip4 = [ { address = "192.168.56.1"; prefixLength = 24; } ]; +let + msg = "Importing is " + + "deprecated, please use `services.virtualboxHost.enable = true' " + + "instead."; +in { + config.warnings = [ msg ]; + config.services.virtualboxHost.enable = true; }