summaryrefslogtreecommitdiffstats
path: root/retiolum/bin
diff options
context:
space:
mode:
authormakefu <github@syntax-fehler.de>2013-03-07 11:40:38 +0100
committermakefu <github@syntax-fehler.de>2013-03-07 11:40:38 +0100
commit7fa8fb85b072f612adb322f8a02617e1bd737020 (patch)
tree683df8268baae71451633518aa7ff7ea258a4aa8 /retiolum/bin
parentdbe2d838ba6834788265029162b2dd7d82473335 (diff)
parentef4eb3189363f5cd9a33b43693322a68d3142979 (diff)
Merge branch 'master' of github.com:krebscode/painload
Diffstat (limited to 'retiolum/bin')
-rwxr-xr-xretiolum/bin/find-supernodes21
-rwxr-xr-xretiolum/bin/list-known-public-addresses38
-rwxr-xr-xretiolum/bin/my-ip2
-rw-r--r--retiolum/bin/nodes-to-json.py37
-rwxr-xr-xretiolum/bin/patch-retiolum-hosts13
-rwxr-xr-xretiolum/bin/update-retiolum-hosts6
-rwxr-xr-xretiolum/bin/update_tinc_hosts8
7 files changed, 117 insertions, 8 deletions
diff --git a/retiolum/bin/find-supernodes b/retiolum/bin/find-supernodes
new file mode 100755
index 00000000..2c316d0e
--- /dev/null
+++ b/retiolum/bin/find-supernodes
@@ -0,0 +1,21 @@
+#! /bin/dash
+set -eu
+cd /etc/tinc/retiolum/hosts
+for name in `
+ grep '^[[:space:]]*Address[[:space:]]*=' * |
+ cut -d: -f1 | sort | uniq
+`; do
+ if eval "`sed -n '
+ s/[[:space:]]\+//g
+ s/^\(Address\|Port\)=\(.*\)/\1="\${\1+\$\1\n}\2"/p
+ ' $name`"; then
+ port=${Port-655}
+ for host in $Address; do
+ if nc -zw 2 $host $port 2>/dev/null; then
+ echo "$name [('$host', $port)]"
+ fi &
+ done
+ wait
+ fi &
+done
+wait
diff --git a/retiolum/bin/list-known-public-addresses b/retiolum/bin/list-known-public-addresses
new file mode 100755
index 00000000..21b1c389
--- /dev/null
+++ b/retiolum/bin/list-known-public-addresses
@@ -0,0 +1,38 @@
+#! /bin/sh
+#
+# printf '%s %s\n' hostname IP-address for each known public retiolum address
+#
+set -eu
+
+_list_hostname_address() {
+ cd /etc/tinc/retiolum/hosts
+ grep --with-filename '^Address' * |
+ sed -n '
+ s/: */ /
+ s/ *= */ /
+ s/ Address \([a-zA-Z0-9.:_]*\) \?.*/ \1/p'
+}
+_lookup_address() {
+ sed '
+ /:/!{/ [0-9.]*$/!{s/ / `dig +short /;s/$/` \&/}}
+ s/^/echo /
+ $s/$/\nwait/
+ ' | sh
+}
+_filter_public() {
+ sed '
+ # drop private IPv4 addresses
+ / 10\./d
+ / 172\.\(1[6-9]\|2[0-9]\|3[01]\)\./d
+ / 192\.168\./d
+ # TODO drop private IPv6 addresses
+ '
+}
+_filter_online() {
+ awk '
+ {print"nc -zw 2 "$2" 655 2>/dev/null && echo "$1" "$2" &"}
+ END {print"wait"}
+ ' | sh
+}
+
+_list_hostname_address | _lookup_address | _filter_public
diff --git a/retiolum/bin/my-ip b/retiolum/bin/my-ip
deleted file mode 100755
index fcfbba05..00000000
--- a/retiolum/bin/my-ip
+++ /dev/null
@@ -1,2 +0,0 @@
-#!/bin/sh
-curl http://euer.krebsco.de/live/ip.php
diff --git a/retiolum/bin/nodes-to-json.py b/retiolum/bin/nodes-to-json.py
new file mode 100644
index 00000000..ca9d3c8c
--- /dev/null
+++ b/retiolum/bin/nodes-to-json.py
@@ -0,0 +1,37 @@
+#!/usr/bin/python
+
+def parse_hosts_path(path="/etc/tinc/retiolum/hosts"):
+ import os
+ import re
+
+ needle_addr = re.compile("Subnet\s*=\s*(.*)/[0-9]+")
+ needle_port = re.compile("Port\s*=\s*(.*)")
+ for f in os.listdir(path):
+ with open(path+"/"+f) as of:
+ addrs = []
+ port = "655"
+
+ for line in of.readlines():
+
+ addr_found = needle_addr.match(line)
+ if addr_found:
+ addrs.append(addr_found.group(1))
+
+ port_found = needle_port.match(line)
+ if port_found:
+ port = port_found.group(1)
+
+ if addrs : yield (f ,[(addr ,int(port)) for addr in addrs])
+
+
+
+if __name__ == "__main__":
+ """
+ usage
+ """
+ import json
+ import sys
+ db={}
+ for host,addrs in parse_hosts_path(sys.argv[1] if len(sys.argv) > 2 else "/etc/tinc/retiolum/hosts"):
+ db[host] = addrs
+ print(json.dumps(db))
diff --git a/retiolum/bin/patch-retiolum-hosts b/retiolum/bin/patch-retiolum-hosts
new file mode 100755
index 00000000..69d7b92c
--- /dev/null
+++ b/retiolum/bin/patch-retiolum-hosts
@@ -0,0 +1,13 @@
+#! /bin/sh
+#
+# Apply custom retiolum hosts patches, if any.
+#
+# usage: patch-retiolum-hosts [--reverse]
+#
+set -euf
+
+patch=/etc/tinc/retiolum/hosts.patch
+
+if test -e $patch; then
+ patch -N -d /etc/tinc/retiolum/hosts -r - "$@" < $patch
+fi
diff --git a/retiolum/bin/update-retiolum-hosts b/retiolum/bin/update-retiolum-hosts
index 2a379459..214ac205 100755
--- a/retiolum/bin/update-retiolum-hosts
+++ b/retiolum/bin/update-retiolum-hosts
@@ -1,5 +1,5 @@
#! /bin/sh
-set -eu
+set -euf
if test "${nosudo-false}" != true -a `id -u` != 0; then
echo "we're going sudo..." >&2
@@ -11,6 +11,4 @@ fi
cd $(dirname $(readlink -f $0))/..
mkdir -p /etc/tinc/retiolum/hosts
-cp -v -r hosts/* /etc/tinc/retiolum/hosts
-pkill -HUP tincd
-pkill -ALRM tincd
+rsync -va --delete hosts/ /etc/tinc/retiolum/hosts/
diff --git a/retiolum/bin/update_tinc_hosts b/retiolum/bin/update_tinc_hosts
index 7be30c2a..ce1be497 100755
--- a/retiolum/bin/update_tinc_hosts
+++ b/retiolum/bin/update_tinc_hosts
@@ -7,8 +7,12 @@ if test "${nosudo-false}" != true -a `id -u` != 0; then
exit 23 # go to hell
fi
-DIRNAME=`dirname $0`
-export PATH="`readlink -f $DIRNAME`:$PATH"
+list_hosts="$(
+ basename="`readlink -f "$0"`"
+ bindir="`dirname "$basename"`"
+ echo "$bindir/hosts"
+)"
+hosts() { "$list_hosts"; }
hosts="${hosts-/etc/hosts}"