From 763f0db52ad45eef6e09d7982cd0f6cd898857e3 Mon Sep 17 00:00:00 2001 From: tv Date: Sat, 26 Dec 2015 05:55:13 +0100 Subject: [PATCH] {pkgs => lib}.genid --- krebs/3modules/Reaktor.nix | 20 +++------------ krebs/3modules/apt-cacher-ng.nix | 6 ++--- krebs/3modules/bepasty-server.nix | 4 +-- krebs/3modules/fetchWallpaper.nix | 2 +- krebs/3modules/git.nix | 8 +++--- krebs/3modules/github-hosts-sync.nix | 4 +-- krebs/3modules/go.nix | 5 ++-- krebs/3modules/realwallpaper.nix | 10 ++------ krebs/3modules/retiolum.nix | 4 +-- krebs/3modules/tinc_graphs.nix | 2 +- krebs/3modules/urlwatch.nix | 5 ++-- krebs/4lib/default.nix | 3 +++ krebs/4lib/genid.nix | 37 ++++++++++++++++++++++++++++ krebs/5pkgs/genid/default.nix | 22 ----------------- lass/1systems/mors.nix | 1 - lass/2configs/libvirt.nix | 4 +-- lass/2configs/skype.nix | 4 +-- lass/2configs/weechat.nix | 2 +- lass/3modules/newsbot-js.nix | 2 +- lass/3modules/owncloud_nginx.nix | 2 +- lass/3modules/wordpress_nginx.nix | 2 +- makefu/1systems/vbob.nix | 1 - makefu/3modules/buildbot/master.nix | 2 +- makefu/3modules/buildbot/slave.nix | 2 +- tv/1systems/wu.nix | 1 - tv/1systems/xu.nix | 1 - tv/2configs/charybdis.nix | 4 +-- tv/2configs/pulse.nix | 8 +++--- tv/3modules/consul.nix | 4 +-- tv/3modules/ejabberd.nix | 4 +-- 30 files changed, 83 insertions(+), 93 deletions(-) create mode 100644 krebs/4lib/genid.nix delete mode 100644 krebs/5pkgs/genid/default.nix diff --git a/krebs/3modules/Reaktor.nix b/krebs/3modules/Reaktor.nix index 1ec49b81e..0fca52203 100644 --- a/krebs/3modules/Reaktor.nix +++ b/krebs/3modules/Reaktor.nix @@ -1,19 +1,8 @@ -{ config, pkgs,lib, ... }: - +{ config, lib, pkgs, ... }: +with lib; let - inherit (lib) - mkIf - mkOption - types - singleton - isString - optionalString - concatStrings - escapeShellArg - ; - ReaktorConfig = pkgs.writeText "config.py" '' ${if (isString cfg.overrideConfig ) then '' # Overriden Config @@ -86,10 +75,9 @@ let imp = { # for reaktor get-config - users.extraUsers = singleton { + users.extraUsers = singleton rec { name = "Reaktor"; - # uid = config.ids.uids.Reaktor; - uid = 2066439104; #genid Reaktor + uid = genid name; description = "Reaktor user"; home = "/var/lib/Reaktor"; createHome = true; diff --git a/krebs/3modules/apt-cacher-ng.nix b/krebs/3modules/apt-cacher-ng.nix index 75296bafb..371d39b6f 100644 --- a/krebs/3modules/apt-cacher-ng.nix +++ b/krebs/3modules/apt-cacher-ng.nix @@ -119,16 +119,14 @@ let imp = { users.extraUsers.acng = { - # uid = config.ids.uids.acng; - uid = 897955083; #genid Reaktor + uid = genid "acng"; description = "apt-cacher-ng"; home = acng-home; createHome = false; }; users.extraGroups.acng = { - gid = 897955083; #genid Reaktor - # gid = config.ids.gids.Reaktor; + gid = genid "acng"; }; systemd.services.apt-cacher-ng = { diff --git a/krebs/3modules/bepasty-server.nix b/krebs/3modules/bepasty-server.nix index c99c3d11a..e74841205 100644 --- a/krebs/3modules/bepasty-server.nix +++ b/krebs/3modules/bepasty-server.nix @@ -130,12 +130,12 @@ let ) cfg.servers; users.extraUsers.bepasty = { - uid = 2796546855; #genid bepasty + uid = genid "bepasty"; group = "bepasty"; home = "/var/lib/bepasty-server"; }; users.extraGroups.bepasty = { - gid = 2796546855; #genid bepasty + gid = genid "bepasty"; }; }; diff --git a/krebs/3modules/fetchWallpaper.nix b/krebs/3modules/fetchWallpaper.nix index 83ecf4177..f320c7505 100644 --- a/krebs/3modules/fetchWallpaper.nix +++ b/krebs/3modules/fetchWallpaper.nix @@ -51,7 +51,7 @@ let imp = { users.users.fetchWallpaper = { name = "fetchWallpaper"; - uid = 3332383611; #genid fetchWallpaper + uid = genid "fetchWallpaper"; description = "fetchWallpaper user"; home = cfg.stateDir; createHome = true; diff --git a/krebs/3modules/git.nix b/krebs/3modules/git.nix index 234129497..e6267d7e6 100644 --- a/krebs/3modules/git.nix +++ b/krebs/3modules/git.nix @@ -145,14 +145,14 @@ let ]) (filter (x: hasAttr "allow-receive-ref" x.perm) cfg.rules)); }; - users.extraUsers = singleton { + users.extraUsers = singleton rec { description = "Git repository hosting user"; name = "git"; shell = "/bin/sh"; openssh.authorizedKeys.keys = mapAttrsToList (_: makeAuthorizedKey git-ssh-command) config.krebs.users; - uid = 129318403; # genid git + uid = genid name; }; }; @@ -238,9 +238,9 @@ let }; }; - fcgitwrap-user = { + fcgitwrap-user = rec { name = "fcgiwrap"; - uid = 2867890860; # genid fcgiwrap + uid = genid name; group = "fcgiwrap"; }; diff --git a/krebs/3modules/github-hosts-sync.nix b/krebs/3modules/github-hosts-sync.nix index 5503ee8d6..2aa18d53a 100644 --- a/krebs/3modules/github-hosts-sync.nix +++ b/krebs/3modules/github-hosts-sync.nix @@ -56,9 +56,9 @@ let }; }; - user = { + user = rec { name = "github-hosts-sync"; - uid = 3220554646; # genid github-hosts-sync + uid = genid name; }; # TODO move to lib? diff --git a/krebs/3modules/go.nix b/krebs/3modules/go.nix index 793d1f60d..08a93dab7 100644 --- a/krebs/3modules/go.nix +++ b/krebs/3modules/go.nix @@ -1,6 +1,5 @@ { config, lib, pkgs, ... }: -with builtins; with lib; let @@ -31,9 +30,9 @@ let bind = mkDefault "127.0.0.1"; }; - users.extraUsers.go = { + users.extraUsers.go = rec { name = "go"; - uid = 42774411; #genid go + uid = genid name; description = "go url shortener user"; home = "/var/lib/go"; createHome = true; diff --git a/krebs/3modules/realwallpaper.nix b/krebs/3modules/realwallpaper.nix index 7e02538f5..b377368f7 100644 --- a/krebs/3modules/realwallpaper.nix +++ b/krebs/3modules/realwallpaper.nix @@ -1,13 +1,7 @@ arg@{ config, lib, pkgs, ... }: +with lib; let - inherit (lib) - mkEnableOption - mkOption - types - mkIf - ; - cfg = config.krebs.realwallpaper; out = { @@ -89,7 +83,7 @@ let }; users.extraUsers.realwallpaper = { - uid = 2009435407; #genid realwallpaper + uid = genid "realwallpaper"; home = cfg.workingDir; createHome = true; }; diff --git a/krebs/3modules/retiolum.nix b/krebs/3modules/retiolum.nix index 28ac67306..e0e2692a8 100644 --- a/krebs/3modules/retiolum.nix +++ b/krebs/3modules/retiolum.nix @@ -133,9 +133,9 @@ let }; }; - user = { + user = rec { name = "retiolum"; - uid = 301281149; # genid retiolum + uid = genid name; }; tinc = cfg.tincPackage; diff --git a/krebs/3modules/tinc_graphs.nix b/krebs/3modules/tinc_graphs.nix index ba81dd416..1f32c2e59 100644 --- a/krebs/3modules/tinc_graphs.nix +++ b/krebs/3modules/tinc_graphs.nix @@ -120,7 +120,7 @@ let }; users.extraUsers.tinc_graphs = { - uid = 3925439960; #genid tinc_graphs + uid = genid "tinc_graphs"; home = "/var/spool/tinc_graphs"; }; diff --git a/krebs/3modules/urlwatch.nix b/krebs/3modules/urlwatch.nix index 206bc5697..31cbfcf6e 100644 --- a/krebs/3modules/urlwatch.nix +++ b/krebs/3modules/urlwatch.nix @@ -5,7 +5,6 @@ # cache = url: "${cfg.dataDir}/.urlwatch/cache/${hashString "sha1" url}" # TODO hooks.py -with builtins; with lib; let cfg = config.krebs.urlwatch; @@ -136,9 +135,9 @@ let }; }; - user = { + user = rec { name = "urlwatch"; - uid = 3467631196; # genid urlwatch + uid = genid name; }; in out diff --git a/krebs/4lib/default.nix b/krebs/4lib/default.nix index 1cabeae27..dfc51bbe4 100644 --- a/krebs/4lib/default.nix +++ b/krebs/4lib/default.nix @@ -7,6 +7,8 @@ let out = rec { eq = x: y: x == y; + mod = x: y: x - y * (x / y); + addName = name: set: set // { inherit name; }; @@ -17,6 +19,7 @@ let out = rec { dir.has-default-nix = path: pathExists (path + "/default.nix"); dns = import ./dns.nix { inherit lib; }; + genid = import ./genid.nix { lib = lib // out; }; git = import ./git.nix { lib = lib // out; }; listset = import ./listset.nix { inherit lib; }; shell = import ./shell.nix { inherit lib; }; diff --git a/krebs/4lib/genid.nix b/krebs/4lib/genid.nix new file mode 100644 index 000000000..0aed1d351 --- /dev/null +++ b/krebs/4lib/genid.nix @@ -0,0 +1,37 @@ +{ lib, ... }: +with lib; +with builtins; +let out = genid; + + # id = genid s = (hash s + min) % max + # min <= genid s < max + # + # min = 2^24 = 16777216 = 0x001000000 + # max = 2^32 = 4294967296 = 0x100000000 + # + # id is bigger than UID of nobody and GID of nogroup + # see and some spare for stuff like lxd. + # + # :: str -> uint32 + genid = s: sum16 (addmod16_16777216 (hash s)); + + # :: str -> list8 uint4 + hash = s: + map hexint (stringToCharacters (substring 32 8 (hashString "sha1" s))); + + # :: list uint -> uint + sum16 = foldl (a: i: a * 16 + i) 0; + + # :: list8 uint4 -> list1 uint8 ++ list6 uint4 + addmod16_16777216 = x: let + a = 16 * head x + head (tail x); + d = tail (tail x); + in [(mod (a + 1) 256)] ++ d; + + # :: char -> uint4 + hexint = x: hexvals.${toLower x}; + + # :: attrset char uint4 + hexvals = listToAttrs (imap (i: c: { name = c; value = i - 1; }) + (stringToCharacters "0123456789abcdef")); +in out diff --git a/krebs/5pkgs/genid/default.nix b/krebs/5pkgs/genid/default.nix deleted file mode 100644 index c75bec317..000000000 --- a/krebs/5pkgs/genid/default.nix +++ /dev/null @@ -1,22 +0,0 @@ -{ lib, pkgs, ... }: - -pkgs.writeScriptBin "genid" '' - #! /bin/sh - # usage: genid NAME - set -euf - - export PATH=${lib.makeSearchPath "bin" (with pkgs; [ - bc - coreutils - ])} - - name=$1 - hash=$(printf %s "$name" | sha1sum | cut -d\ -f1 | tr a-f A-F) - echo " - min=2^24 # bigger than nobody and nogroup, see - # and some spare for stuff like lxd. - max=2^32 # see 2^(8*sizeof(uid_t)) - ibase=16 - ($hash + min) % max - " | bc -'' diff --git a/lass/1systems/mors.nix b/lass/1systems/mors.nix index 4ba9df6f9..8af096f51 100644 --- a/lass/1systems/mors.nix +++ b/lass/1systems/mors.nix @@ -184,7 +184,6 @@ cac sshpass get - genid teamspeak_client hashPassword ]; diff --git a/lass/2configs/libvirt.nix b/lass/2configs/libvirt.nix index 368722e77..7520a0e36 100644 --- a/lass/2configs/libvirt.nix +++ b/lass/2configs/libvirt.nix @@ -1,4 +1,4 @@ -{ config, pkgs, ... }: +{ config, lib, pkgs, ... }: let mainUser = config.users.extraUsers.mainUser; @@ -8,7 +8,7 @@ in { users.extraUsers = { libvirt = { - uid = 358821352; # genid libvirt + uid = lib.genid "libvirt"; description = "user for running libvirt stuff"; home = "/home/libvirt"; useDefaultShell = true; diff --git a/lass/2configs/skype.nix b/lass/2configs/skype.nix index 6a226441b..d62a18a52 100644 --- a/lass/2configs/skype.nix +++ b/lass/2configs/skype.nix @@ -1,4 +1,4 @@ -{ config, pkgs, ... }: +{ config, lib, pkgs, ... }: let mainUser = config.users.extraUsers.mainUser; @@ -7,7 +7,7 @@ in { users.extraUsers = { skype = { name = "skype"; - uid = 2259819492; #genid skype + uid = lib.genid "skype"; description = "user for running skype"; home = "/home/skype"; useDefaultShell = true; diff --git a/lass/2configs/weechat.nix b/lass/2configs/weechat.nix index 18007ed61..6a257f0bb 100644 --- a/lass/2configs/weechat.nix +++ b/lass/2configs/weechat.nix @@ -8,7 +8,7 @@ users.extraUsers.chat = { home = "/home/chat"; - uid = 986764891; # genid chat + uid = lib.genid "chat"; useDefaultShell = true; createHome = true; openssh.authorizedKeys.keys = [ diff --git a/lass/3modules/newsbot-js.nix b/lass/3modules/newsbot-js.nix index 6d87d256d..5e340b26f 100644 --- a/lass/3modules/newsbot-js.nix +++ b/lass/3modules/newsbot-js.nix @@ -51,7 +51,7 @@ let imp = { users.extraUsers.newsbot-js = { name = "newsbot-js"; - uid = 1616759810; #genid newsbot-js + uid = genid "newsbot-js"; description = "newsbot-js user"; home = "/var/empty"; }; diff --git a/lass/3modules/owncloud_nginx.nix b/lass/3modules/owncloud_nginx.nix index a0db87b0b..0cb11846c 100644 --- a/lass/3modules/owncloud_nginx.nix +++ b/lass/3modules/owncloud_nginx.nix @@ -207,7 +207,7 @@ let # }; #}); users.users.nobody_oc = { - uid = 1651469147; # genid nobody_oc + uid = genid "nobody_oc"; useDefaultShell = true; }; }; diff --git a/lass/3modules/wordpress_nginx.nix b/lass/3modules/wordpress_nginx.nix index 2f31f6e02..974aacd83 100644 --- a/lass/3modules/wordpress_nginx.nix +++ b/lass/3modules/wordpress_nginx.nix @@ -229,7 +229,7 @@ let }; }); users.users.nobody2 = mkDefault { - uid = mkDefault 125816384; # genid nobody2 + uid = mkDefault (genid "nobody2"); useDefaultShell = mkDefault true; }; }; diff --git a/makefu/1systems/vbob.nix b/makefu/1systems/vbob.nix index a24cefd0d..b8c02cb67 100644 --- a/makefu/1systems/vbob.nix +++ b/makefu/1systems/vbob.nix @@ -59,7 +59,6 @@ in { buildbot buildbot-slave get - genid ]; networking.firewall.allowedTCPPorts = [ diff --git a/makefu/3modules/buildbot/master.nix b/makefu/3modules/buildbot/master.nix index 58e2f8175..09edac94d 100644 --- a/makefu/3modules/buildbot/master.nix +++ b/makefu/3modules/buildbot/master.nix @@ -204,7 +204,7 @@ let imp = { users.extraUsers.buildbotMaster = { - uid = 672626386; #genid buildbotMaster + uid = genid "buildbotMaster"; description = "Buildbot Master"; home = cfg.workDir; createHome = false; diff --git a/makefu/3modules/buildbot/slave.nix b/makefu/3modules/buildbot/slave.nix index 69d0361bf..7c9ea79c0 100644 --- a/makefu/3modules/buildbot/slave.nix +++ b/makefu/3modules/buildbot/slave.nix @@ -127,7 +127,7 @@ let imp = { users.extraUsers.buildbotSlave = { - uid = 1408105834; #genid buildbotMaster + uid = genid "buildbotSlave"; description = "Buildbot Slave"; home = cfg.workDir; createHome = false; diff --git a/tv/1systems/wu.nix b/tv/1systems/wu.nix index a768e781b..54ceb7783 100644 --- a/tv/1systems/wu.nix +++ b/tv/1systems/wu.nix @@ -16,7 +16,6 @@ with lib; environment.systemPackages = with pkgs; [ # stockholm - genid gnumake hashPassword lentil diff --git a/tv/1systems/xu.nix b/tv/1systems/xu.nix index eac36fafb..1f3e010a4 100644 --- a/tv/1systems/xu.nix +++ b/tv/1systems/xu.nix @@ -19,7 +19,6 @@ with lib; environment.systemPackages = with pkgs; [ # stockholm - genid gnumake hashPassword lentil diff --git a/tv/2configs/charybdis.nix b/tv/2configs/charybdis.nix index 80c6f7c4a..f9ab3da68 100644 --- a/tv/2configs/charybdis.nix +++ b/tv/2configs/charybdis.nix @@ -72,9 +72,9 @@ let }; }; - user = { + user = rec { name = "charybdis"; - uid = 3748224544; # genid charybdis + uid = genid name; }; configFile = toFile "charybdis-ircd.conf" '' diff --git a/tv/2configs/pulse.nix b/tv/2configs/pulse.nix index 0ddc52789..3db3532d5 100644 --- a/tv/2configs/pulse.nix +++ b/tv/2configs/pulse.nix @@ -69,12 +69,10 @@ in }; }; - users = let - id = 3768151709; # genid pulse - in { - groups.pulse.gid = id; + users = { + groups.pulse.gid = config.users.users.pulse.uid; users.pulse = { - uid = id; + uid = genid "pulse"; group = "pulse"; extraGroups = [ "audio" ]; home = "${runDir}/home"; diff --git a/tv/3modules/consul.nix b/tv/3modules/consul.nix index ccdee07f5..5c955fdb5 100644 --- a/tv/3modules/consul.nix +++ b/tv/3modules/consul.nix @@ -109,9 +109,9 @@ let }; }; - user = { + user = rec { name = "consul"; - uid = 2999951406; # genid consul + uid = genid name; }; in diff --git a/tv/3modules/ejabberd.nix b/tv/3modules/ejabberd.nix index 6b231fb56..581e10074 100644 --- a/tv/3modules/ejabberd.nix +++ b/tv/3modules/ejabberd.nix @@ -53,9 +53,9 @@ let }; }; - user = { + user = rec { name = "ejabberd"; - uid = 3499746127; # genid ejabberd + uid = genid name; }; my-ejabberdctl = pkgs.writeScriptBin "ejabberdctl" ''