diff --git a/nixos/modules/module-list.nix b/nixos/modules/module-list.nix index b113effdf9a..33a45f2240c 100644 --- a/nixos/modules/module-list.nix +++ b/nixos/modules/module-list.nix @@ -331,6 +331,7 @@ ./services/networking/openfire.nix ./services/networking/openntpd.nix ./services/networking/openvpn.nix + ./services/networking/ostinato.nix ./services/networking/polipo.nix ./services/networking/prayer.nix ./services/networking/privoxy.nix diff --git a/nixos/modules/services/networking/ostinato.nix b/nixos/modules/services/networking/ostinato.nix new file mode 100644 index 00000000000..13f784dc53c --- /dev/null +++ b/nixos/modules/services/networking/ostinato.nix @@ -0,0 +1,104 @@ +{ config, lib, pkgs, ... }: + +with lib; + +let + pkg = pkgs.ostinato; + cfg = config.services.ostinato; + configFile = pkgs.writeText "drone.ini" '' + [General] + RateAccuracy=${cfg.rateAccuracy} + + [RpcServer] + Address=${cfg.rpcServer.address} + + [PortList] + Include=${concatStringsSep "," cfg.portList.include} + Exclude=${concatStringsSep "," cfg.portList.exclude} + ''; + +in +{ + + ###### interface + + options = { + + services.ostinato = { + + enable = mkEnableOption "Ostinato agent-controller (Drone)"; + + port = mkOption { + type = types.int; + default = 7878; + description = '' + Port to listen on. + ''; + }; + + rateAccuracy = mkOption { + type = types.enum [ "High" "Low" ]; + default = "High"; + description = '' + To ensure that the actual transmit rate is as close as possible to + the configured transmit rate, Drone runs a busy-wait loop. + While this provides the maximum accuracy possible, the CPU + utilization is 100% while the transmit is on. You can however, + sacrifice the accuracy to reduce the CPU load. + ''; + }; + + rpcServer = { + address = mkOption { + type = types.string; + default = "0.0.0.0"; + description = '' + By default, the Drone RPC server will listen on all interfaces and + local IPv4 adresses for incoming connections from clients. Specify + a single IPv4 or IPv6 address if you want to restrict that. + To listen on any IPv6 address, use :: + ''; + }; + }; + + portList = { + include = mkOption { + type = types.listOf types.string; + default = []; + example = ''[ "eth*" "lo*" ]''; + description = '' + For a port to pass the filter and appear on the port list managed + by drone, it be allowed by this include list. + ''; + }; + exclude = mkOption { + type = types.listOf types.str; + default = []; + example = ''[ "usbmon*" "eth0" ]''; + description = '' + A list of ports does not appear on the port list managed by drone. + ''; + }; + }; + + }; + + }; + + ###### implementation + + config = mkIf cfg.enable { + + environment.systemPackages = [ pkg ]; + + systemd.services.drone = { + description = "Ostinato agent-controller"; + wantedBy = [ "multi-user.target" ]; + script = '' + ${pkg}/bin/drone ${toString cfg.port} ${configFile} + ''; + }; + + }; + +} diff --git a/pkgs/applications/networking/ostinato/default.nix b/pkgs/applications/networking/ostinato/default.nix new file mode 100644 index 00000000000..1d5986dbfa6 --- /dev/null +++ b/pkgs/applications/networking/ostinato/default.nix @@ -0,0 +1,64 @@ +{ stdenv, fetchgit, fetchurl, writeText +, qt4, protobuf, libpcap +, wireshark, gzip, diffutils, gawk +}: + +stdenv.mkDerivation rec { + name = "ostinato-2015-12-24"; + src = fetchgit { + url = "https://github.com/pstavirs/ostinato.git"; + rev = "414d89860de0987843295d149bcabeac7c6fd9e5"; + sha256 = "0hb78bq51r93p0yr4l1z5xlf1i666v5pa3zkdj7jmpb879kj05dx"; + }; + + ostinato_png = fetchurl { + url = "http://ostinato.org/images/site-logo.png"; + sha256 = "f5c067823f2934e4d358d76f65a343efd69ad783a7aeabd7ab4ce3cd03490d70"; + }; + + buildInputs = [ qt4 protobuf libpcap ]; + + patches = [ ./drone_ini.patch ]; + + configurePhase = "qmake PREFIX=$out" + + stdenv.lib.optionalString stdenv.isDarwin " -spec macx-g++"; + + postInstall = '' + cat > $out/bin/ostinato.ini < $out/share/applications/ostinato.desktop < 2 ? argv[2] : ++ QCoreApplication::applicationDirPath() + "/drone.ini"; + if (QFile::exists(portableIni)) + appSettings = new QSettings(portableIni, QSettings::IniFormat); + else diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index e9c0ccb2938..148bb3886d7 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -12617,6 +12617,8 @@ let oroborus = callPackage ../applications/window-managers/oroborus {}; + ostinato = callPackage ../applications/networking/ostinato { }; + panamax_api = callPackage ../applications/networking/cluster/panamax/api { ruby = ruby_2_1; };