diff options
author | Peter Simons <simons@cryp.to> | 2013-05-25 02:25:57 -0700 |
---|---|---|
committer | Peter Simons <simons@cryp.to> | 2013-05-25 02:25:57 -0700 |
commit | 717dc3b8582c16549b06fc9e3217aff2c1340bb9 (patch) | |
tree | b709929a203983d65fe93d2ba136aa68e472edc6 /modules/services | |
parent | a8517b3bff75332e3f12e388ee39b564898bf4b7 (diff) | |
parent | 6336048c5843ffcbd9fb010e47386adda2cdb913 (diff) | |
download | nixlib-717dc3b8582c16549b06fc9e3217aff2c1340bb9.tar nixlib-717dc3b8582c16549b06fc9e3217aff2c1340bb9.tar.gz nixlib-717dc3b8582c16549b06fc9e3217aff2c1340bb9.tar.bz2 nixlib-717dc3b8582c16549b06fc9e3217aff2c1340bb9.tar.lz nixlib-717dc3b8582c16549b06fc9e3217aff2c1340bb9.tar.xz nixlib-717dc3b8582c16549b06fc9e3217aff2c1340bb9.tar.zst nixlib-717dc3b8582c16549b06fc9e3217aff2c1340bb9.zip |
Merge pull request #169 from wizeman/chrony
Add chrony service
Diffstat (limited to 'modules/services')
-rw-r--r-- | modules/services/networking/chrony.nix | 118 | ||||
-rw-r--r-- | modules/services/networking/ntpd.nix | 3 |
2 files changed, 121 insertions, 0 deletions
diff --git a/modules/services/networking/chrony.nix b/modules/services/networking/chrony.nix new file mode 100644 index 000000000000..5e9818858e0c --- /dev/null +++ b/modules/services/networking/chrony.nix @@ -0,0 +1,118 @@ +{ config, pkgs, ... }: + +with pkgs.lib; + +let + + inherit (pkgs) chrony; + + stateDir = "/var/lib/chrony"; + + chronyUser = "chrony"; + + cfg = config.services.chrony; + + configFile = pkgs.writeText "chrony.conf" '' + ${toString (map (server: "server " + server + "\n") cfg.servers)} + + ${optionalString cfg.initstepslew.enabled '' + initstepslew ${toString cfg.initstepslew.threshold} ${toString (map (server: server + " ") cfg.initstepslew.servers)} + ''} + + driftfile ${stateDir}/chrony.drift + + ${optionalString (!config.time.hardwareClockInLocalTime) "rtconutc"} + + ${cfg.extraConfig} + ''; + + chronyFlags = "-m -f ${configFile} -u ${chronyUser}"; + +in + +{ + + ###### interface + + options = { + + services.chrony = { + + enable = mkOption { + default = false; + description = '' + Whether to synchronise your machine's time using chrony. + Make sure you disable NTP if you enable this service. + ''; + }; + + servers = mkOption { + default = [ + "0.pool.ntp.org" + "1.pool.ntp.org" + "2.pool.ntp.org" + ]; + description = '' + The set of NTP servers from which to synchronise. + ''; + }; + + initstepslew = mkOption { + default = { + enabled = true; + threshold = 1000; # by default, same threshold as 'ntpd -g' (1000s) + servers = cfg.servers; + }; + description = '' + Allow chronyd to make a rapid measurement of the system clock error at + boot time, and to correct the system clock by stepping before normal + operation begins. + ''; + }; + + extraConfig = mkOption { + default = ""; + description = '' + Extra configuration directives that should be added to + <literal>chrony.conf</literal> + ''; + }; + }; + + }; + + + ###### implementation + + config = mkIf config.services.chrony.enable { + + # Make chronyc available in the system path + environment.systemPackages = [ pkgs.chrony ]; + + users.extraUsers = singleton + { name = chronyUser; + uid = config.ids.uids.chrony; + description = "chrony daemon user"; + home = stateDir; + }; + + jobs.chronyd = + { description = "chrony daemon"; + + wantedBy = [ "ip-up.target" ]; + partOf = [ "ip-up.target" ]; + + path = [ chrony ]; + + preStart = + '' + mkdir -m 0755 -p ${stateDir} + chown ${chronyUser} ${stateDir} + ''; + + exec = "chronyd -n ${chronyFlags}"; + }; + + }; + +} diff --git a/modules/services/networking/ntpd.nix b/modules/services/networking/ntpd.nix index be3fcbd65433..e5e164021d3a 100644 --- a/modules/services/networking/ntpd.nix +++ b/modules/services/networking/ntpd.nix @@ -58,6 +58,9 @@ in config = mkIf config.services.ntp.enable { + # Make tools such as ntpq available in the system path + environment.systemPackages = [ pkgs.ntp ]; + users.extraUsers = singleton { name = ntpUser; uid = config.ids.uids.ntp; |