summaryrefslogtreecommitdiffstats
path: root/modules/tv/retiolum
diff options
context:
space:
mode:
authortv <tv@shackspace.de>2015-07-11 19:44:12 +0200
committertv <tv@shackspace.de>2015-07-11 19:44:12 +0200
commit2bc5c58d85990e483af8fde57ed5f2442351b69c (patch)
tree94cd29e6a98f1ce6228104055d0550e318242290 /modules/tv/retiolum
parentc5fcda1390afaba71133b2ee6ac1ddd0f559ef8c (diff)
move old stuff
Diffstat (limited to 'modules/tv/retiolum')
-rw-r--r--modules/tv/retiolum/config.nix130
-rw-r--r--modules/tv/retiolum/default.nix11
-rw-r--r--modules/tv/retiolum/options.nix87
3 files changed, 0 insertions, 228 deletions
diff --git a/modules/tv/retiolum/config.nix b/modules/tv/retiolum/config.nix
deleted file mode 100644
index f1d227f6b..000000000
--- a/modules/tv/retiolum/config.nix
+++ /dev/null
@@ -1,130 +0,0 @@
-{ cfg, config, lib, pkgs, ... }:
-
-let
- inherit (lib) concatStrings singleton;
-
- tinc = cfg.tincPackage;
- hostsType = builtins.typeOf cfg.hosts;
- hosts =
- if hostsType == "package" then
- # use package as is
- cfg.hosts
- else if hostsType == "path" then
- # use path to generate a package
- pkgs.stdenv.mkDerivation {
- name = "custom-retiolum-hosts";
- src = cfg.hosts;
- installPhase = ''
- mkdir $out
- find . -name .git -prune -o -type f -print0 | xargs -0 cp --target-directory $out
- '';
- }
- else
- abort "The option `services.retiolum.hosts' must be set to a package or a path"
- ;
- iproute = cfg.iproutePackage;
-
- retiolumExtraHosts = import (pkgs.runCommand "retiolum-etc-hosts"
- { }
- ''
- generate() {
- (cd ${hosts}
- printf \'\'
- for i in `ls`; do
- names=$(hostnames $i)
- for j in `sed -En 's|^ *Aliases *= *(.+)|\1|p' $i`; do
- names="$names $(hostnames $j)"
- done
- sed -En '
- s|^ *Subnet *= *([^ /]*)(/[0-9]*)? *$|\1 '"$names"'|p
- ' $i
- done | sort
- printf \'\'
- )
- }
-
- case ${cfg.generateEtcHosts} in
- short)
- hostnames() { echo "$1"; }
- generate
- ;;
- long)
- hostnames() { echo "$1.${cfg.network}"; }
- generate
- ;;
- both)
- hostnames() { echo "$1.${cfg.network} $1"; }
- generate
- ;;
- *)
- echo '""'
- ;;
- esac > $out
- '');
-
-
- confDir = pkgs.runCommand "retiolum" {
- # TODO text
- executable = true;
- preferLocalBuild = true;
- } ''
- set -euf
-
- mkdir -p $out
-
- ln -s ${hosts} $out/hosts
-
- cat > $out/tinc.conf <<EOF
- Name = ${cfg.name}
- Device = /dev/net/tun
- Interface = ${cfg.network}
- ${concatStrings (map (c : "ConnectTo = " + c + "\n") cfg.connectTo)}
- PrivateKeyFile = ${cfg.privateKeyFile}
- EOF
-
- # source: krebscode/painload/retiolum/scripts/tinc_setup/tinc-up
- cat > $out/tinc-up <<EOF
- host=$out/hosts/${cfg.name}
- ${iproute}/sbin/ip link set \$INTERFACE up
-
- addr4=\$(sed -n 's|^ *Subnet *= *\(10[.][^ ]*\) *$|\1|p' \$host)
- if [ -n "\$addr4" ];then
- ${iproute}/sbin/ip -4 addr add \$addr4 dev \$INTERFACE
- ${iproute}/sbin/ip -4 route add 10.243.0.0/16 dev \$INTERFACE
- fi
- addr6=\$(sed -n 's|^ *Subnet *= *\(42[:][^ ]*\) *$|\1|p' \$host)
- ${iproute}/sbin/ip -6 addr add \$addr6 dev \$INTERFACE
- ${iproute}/sbin/ip -6 route add 42::/16 dev \$INTERFACE
- EOF
-
- chmod +x $out/tinc-up
- '';
-
-
- user = cfg.network + "-tinc";
-
-in
-
-{
- environment.systemPackages = [ tinc hosts iproute ];
-
- networking.extraHosts = retiolumExtraHosts;
-
- systemd.services.retiolum = {
- description = "Tinc daemon for Retiolum";
- after = [ "network.target" ];
- wantedBy = [ "multi-user.target" ];
- path = [ tinc iproute ];
- serviceConfig = {
- # TODO we cannot chroot (-R) b/c we use symlinks to hosts
- # and the private key.
- ExecStart = "${tinc}/sbin/tincd -c ${confDir} -d 0 -U ${user} -D";
- SyslogIdentifier = "retiolum-tincd";
- };
- };
-
- users.extraUsers = singleton {
- name = user;
- uid = 2961822815; # bin/genid retiolum-tinc
- };
-}
diff --git a/modules/tv/retiolum/default.nix b/modules/tv/retiolum/default.nix
deleted file mode 100644
index 93b0be097..000000000
--- a/modules/tv/retiolum/default.nix
+++ /dev/null
@@ -1,11 +0,0 @@
-arg@{ config, pkgs, lib, ... }:
-
-let
- cfg = config.tv.retiolum;
- arg' = arg // { inherit cfg; };
-in
-
-{
- options.tv.retiolum = import ./options.nix arg';
- config = lib.mkIf cfg.enable (import ./config.nix arg');
-}
diff --git a/modules/tv/retiolum/options.nix b/modules/tv/retiolum/options.nix
deleted file mode 100644
index a06cbecef..000000000
--- a/modules/tv/retiolum/options.nix
+++ /dev/null
@@ -1,87 +0,0 @@
-{ config, lib, pkgs, ... }:
-
-let
- inherit (lib) mkOption types;
-in
-
-{
- enable = mkOption {
- type = types.bool;
- default = false;
- description = "Enable tinc daemon for Retiolum.";
- };
-
- name = mkOption {
- type = types.string;
- default = config.networking.hostName;
- # Description stolen from tinc.conf(5).
- description = ''
- This is the name which identifies this tinc daemon. It must
- be unique for the virtual private network this daemon will
- connect to. The Name may only consist of alphanumeric and
- underscore characters. If Name starts with a $, then the
- contents of the environment variable that follows will be
- used. In that case, invalid characters will be converted to
- underscores. If Name is $HOST, but no such environment
- variable exist, the hostname will be read using the
- gethostnname() system call This is the name which identifies
- the this tinc daemon.
- '';
- };
-
- generateEtcHosts = mkOption {
- type = types.string;
- default = "both";
- description = ''
- If set to <literal>short</literal>, <literal>long</literal>, or <literal>both</literal>,
- then generate entries in <filename>/etc/hosts</filename> from subnets.
- '';
- };
-
- network = mkOption {
- type = types.string;
- default = "retiolum";
- description = ''
- The tinc network name.
- It is used to generate long host entries,
- derive the name of the user account under which tincd runs,
- and name the TUN device.
- '';
- };
-
- tincPackage = mkOption {
- type = types.package;
- default = pkgs.tinc;
- description = "Tincd package to use.";
- };
-
- hosts = mkOption {
- default = null;
- description = ''
- Hosts package or path to use.
- If a path is given, then it will be used to generate an ad-hoc package.
- '';
- };
-
- iproutePackage = mkOption {
- type = types.package;
- default = pkgs.iproute;
- description = "Iproute2 package to use.";
- };
-
-
- privateKeyFile = mkOption {
- # TODO if it's types.path then it gets copied to /nix/store with
- # bad unsafe permissions...
- type = types.string;
- default = "/etc/tinc/retiolum/rsa_key.priv";
- description = "Generate file with <literal>tincd -K</literal>.";
- };
-
- connectTo = mkOption {
- type = types.listOf types.string;
- default = [ "fastpoke" "pigstarter" "kheurop" ];
- description = "TODO describe me";
- };
-
-}