summaryrefslogtreecommitdiffstats
path: root/elchos/root-image/krebs
diff options
context:
space:
mode:
authormakefu <github@syntax-fehler.de>2014-04-02 11:15:54 +0200
committermakefu <github@syntax-fehler.de>2014-04-02 11:15:54 +0200
commit732876299f4dccb4caa3a915879d2b5945bbdd42 (patch)
tree779db4d8f7cfb6223b6d47bd2f157143a48760f8 /elchos/root-image/krebs
parenteb83b606a5baadcf35353b5461d2a0e520ecba6c (diff)
filehooker is now elchOS
Diffstat (limited to 'elchos/root-image/krebs')
-rwxr-xr-xelchos/root-image/krebs/bin/add-reaktor-secret.sh24
-rwxr-xr-xelchos/root-image/krebs/bin/macid.sh2
-rwxr-xr-xelchos/root-image/krebs/bin/reaktor-shell.sh4
-rwxr-xr-xelchos/root-image/krebs/bin/refresh-shares.ship11
-rwxr-xr-xelchos/root-image/krebs/bin/set-hostname.sh5
-rwxr-xr-xelchos/root-image/krebs/bin/start-ncdc.ship23
-rwxr-xr-xelchos/root-image/krebs/bin/tor-get-hidden-service.sh2
-rwxr-xr-xelchos/root-image/krebs/bin/tor_configure_hidden_service.ship16
-rwxr-xr-xelchos/root-image/krebs/bin/tor_publish_ssh.ship12
-rwxr-xr-xelchos/root-image/krebs/bin/update-search.sh5
-rwxr-xr-xelchos/root-image/krebs/bin/vim_sane_defaults.ship10
-rw-r--r--elchos/root-image/krebs/etc/Reaktor/admin.lst0
-rw-r--r--elchos/root-image/krebs/etc/Reaktor/auth.lst0
-rwxr-xr-xelchos/root-image/krebs/etc/Reaktor/commands/ftpget58
-rwxr-xr-xelchos/root-image/krebs/etc/Reaktor/commands/identify22
-rwxr-xr-xelchos/root-image/krebs/etc/Reaktor/commands/io25
-rwxr-xr-xelchos/root-image/krebs/etc/Reaktor/commands/ips2
-rwxr-xr-xelchos/root-image/krebs/etc/Reaktor/commands/list_downloads8
-rwxr-xr-xelchos/root-image/krebs/etc/Reaktor/commands/onion3
-rwxr-xr-xelchos/root-image/krebs/etc/Reaktor/commands/reboot3
-rwxr-xr-xelchos/root-image/krebs/etc/Reaktor/commands/refresh_shares4
-rwxr-xr-xelchos/root-image/krebs/etc/Reaktor/commands/shares2
-rwxr-xr-xelchos/root-image/krebs/etc/Reaktor/commands/update-search3
-rw-r--r--elchos/root-image/krebs/etc/Reaktor/config.py60
-rw-r--r--elchos/root-image/krebs/etc/authorized_keys6
-rw-r--r--elchos/root-image/krebs/etc/vsftpd.conf12
-rw-r--r--elchos/root-image/krebs/lib/_punani_db57
-rw-r--r--elchos/root-image/krebs/lib/color7
-rw-r--r--elchos/root-image/krebs/lib/core80
-rw-r--r--elchos/root-image/krebs/lib/filehooker152
-rw-r--r--elchos/root-image/krebs/lib/iso7
-rw-r--r--elchos/root-image/krebs/lib/krebs16
-rw-r--r--elchos/root-image/krebs/lib/network100
-rw-r--r--elchos/root-image/krebs/lib/punani99
-rw-r--r--elchos/root-image/krebs/lib/retiolum99
-rw-r--r--elchos/root-image/krebs/lib/tahoe34
-rw-r--r--elchos/root-image/krebs/lib/tor19
-rw-r--r--elchos/root-image/krebs/lib/vim40
38 files changed, 1032 insertions, 0 deletions
diff --git a/elchos/root-image/krebs/bin/add-reaktor-secret.sh b/elchos/root-image/krebs/bin/add-reaktor-secret.sh
new file mode 100755
index 00000000..92681449
--- /dev/null
+++ b/elchos/root-image/krebs/bin/add-reaktor-secret.sh
@@ -0,0 +1,24 @@
+#!/bin/sh
+set -euf
+green='\e[0;32m'
+red='\e[0;31m'
+nc='\e[0m'
+black='\e[0;30m'
+
+printf "${green}Add a Reaktor Secret ${nc}\n"
+printf "${red}(no spaces in input plox)${nc}\n"
+
+nick=${1:-}
+while test -z "${nick:-}" ;do
+ printf "provide Nick Name:\n"
+ read nick
+done
+
+secret=${2:-}
+while test -z "${secret:-}" ;do
+ printf "provide Secret:$black\n"
+ read secret
+done
+
+echo "$nick $secret" >> /krebs/painload/Reaktor/admin.lst
+printf "${green}done${nc}"
diff --git a/elchos/root-image/krebs/bin/macid.sh b/elchos/root-image/krebs/bin/macid.sh
new file mode 100755
index 00000000..0fccc84b
--- /dev/null
+++ b/elchos/root-image/krebs/bin/macid.sh
@@ -0,0 +1,2 @@
+#!/bin/sh
+ip addr | grep ether | awk '{print $2}' | sort |md5sum | awk '{print $1}' | dd bs=1 count=6 2>/dev/null
diff --git a/elchos/root-image/krebs/bin/reaktor-shell.sh b/elchos/root-image/krebs/bin/reaktor-shell.sh
new file mode 100755
index 00000000..117c64f6
--- /dev/null
+++ b/elchos/root-image/krebs/bin/reaktor-shell.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+echo "IP Addresses:"
+/krebs/painload/Reaktor/commands/ips || echo "no IPs!"
+/krebs/bin/add-reaktor-secret.sh
diff --git a/elchos/root-image/krebs/bin/refresh-shares.ship b/elchos/root-image/krebs/bin/refresh-shares.ship
new file mode 100755
index 00000000..364d7758
--- /dev/null
+++ b/elchos/root-image/krebs/bin/refresh-shares.ship
@@ -0,0 +1,11 @@
+#!/bin/sh
+#TODO:
+#!/usr/bin/env ship
+set -euf
+#@include filehooker
+. /krebs/lib/filehooker
+ncdc_user="hooker"
+
+share_all_partitions
+systemctl restart hddtemp.service
+exit 0
diff --git a/elchos/root-image/krebs/bin/set-hostname.sh b/elchos/root-image/krebs/bin/set-hostname.sh
new file mode 100755
index 00000000..31101a18
--- /dev/null
+++ b/elchos/root-image/krebs/bin/set-hostname.sh
@@ -0,0 +1,5 @@
+#!/bin/sh
+hostn="elch_$(/krebs/bin/macid.sh)"
+hostnamectl set-hostname "$hostn"
+hostname $hostn
+echo "$hostn" > /etc/hostname
diff --git a/elchos/root-image/krebs/bin/start-ncdc.ship b/elchos/root-image/krebs/bin/start-ncdc.ship
new file mode 100755
index 00000000..1d47bcfb
--- /dev/null
+++ b/elchos/root-image/krebs/bin/start-ncdc.ship
@@ -0,0 +1,23 @@
+#!/usr/bin/env ship
+set -euf
+#@include filehooker
+. /krebs/lib/filehooker
+#@include network
+ncdc_user="hooker"
+
+useradd -m $ncdc_user ||:
+
+sudo -u $ncdc_user /usr/bin/tmux new-session -s dcpp -n ncdc -d ncdc 2>/dev/null || echo "ncdc is already running"
+
+nick=$(cat /etc/hostname)
+echo "using nick $nick"
+ncdc_configure_nick "$nick"
+sleep 1
+dc_hub="adcs://elchhub.nsupdate.info:2781"
+echo "connecting to $dc_hub"
+ncdc_configure_hub "$dc_hub" "elch"
+
+
+share_all_partitions
+
+exit 0
diff --git a/elchos/root-image/krebs/bin/tor-get-hidden-service.sh b/elchos/root-image/krebs/bin/tor-get-hidden-service.sh
new file mode 100755
index 00000000..c9946366
--- /dev/null
+++ b/elchos/root-image/krebs/bin/tor-get-hidden-service.sh
@@ -0,0 +1,2 @@
+#!/bin/sh
+cat /var/lib/tor/hidden_service/hostname
diff --git a/elchos/root-image/krebs/bin/tor_configure_hidden_service.ship b/elchos/root-image/krebs/bin/tor_configure_hidden_service.ship
new file mode 100755
index 00000000..1e026d26
--- /dev/null
+++ b/elchos/root-image/krebs/bin/tor_configure_hidden_service.ship
@@ -0,0 +1,16 @@
+#!/bin/sh
+#@include core
+. /krebs/lib/core
+#@include network
+. /krebs/lib/network
+#@include tor
+. /krebs/lib/tor
+
+sleep_time=5
+test -w "$torrc" || ( error "$torrc is not writable!"; exit 1 ) || exit 1
+
+configure_hidden_service
+test ! -e $hidden_service_dir/hostname && \
+ info "hidden service file does not exist, restarting tor" && \
+ systemctl restart tor && \
+ sleep 1
diff --git a/elchos/root-image/krebs/bin/tor_publish_ssh.ship b/elchos/root-image/krebs/bin/tor_publish_ssh.ship
new file mode 100755
index 00000000..2ecee9fb
--- /dev/null
+++ b/elchos/root-image/krebs/bin/tor_publish_ssh.ship
@@ -0,0 +1,12 @@
+#!/usr/bin/env ship
+#@include core
+. /krebs/lib/core
+#@include network
+. /krebs/lib/network
+#@include tor
+. /krebs/lib/tor
+
+test -w "$torrc" || ( error "$torrc is not writable!"; exit 1 ) || exit 1
+
+configure_hidden_service
+cat $hidden_service_dir/hostname | send_irc
diff --git a/elchos/root-image/krebs/bin/update-search.sh b/elchos/root-image/krebs/bin/update-search.sh
new file mode 100755
index 00000000..665f6543
--- /dev/null
+++ b/elchos/root-image/krebs/bin/update-search.sh
@@ -0,0 +1,5 @@
+#!/bin/sh
+for i in /media/vag*;do
+ updatedb -l 0 -o "$i/mlocate.db" -U "$i"
+done
+echo "update complete"
diff --git a/elchos/root-image/krebs/bin/vim_sane_defaults.ship b/elchos/root-image/krebs/bin/vim_sane_defaults.ship
new file mode 100755
index 00000000..fcc7ffcf
--- /dev/null
+++ b/elchos/root-image/krebs/bin/vim_sane_defaults.ship
@@ -0,0 +1,10 @@
+#!/bin/sh
+#@strict
+#@include core
+. /krebs/lib/core
+#@include vim
+. /krebs/lib/vim
+#@mainifyme
+touch $vimrc
+info "configuring vim"
+vim_conf_sane_defaults
diff --git a/elchos/root-image/krebs/etc/Reaktor/admin.lst b/elchos/root-image/krebs/etc/Reaktor/admin.lst
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/elchos/root-image/krebs/etc/Reaktor/admin.lst
diff --git a/elchos/root-image/krebs/etc/Reaktor/auth.lst b/elchos/root-image/krebs/etc/Reaktor/auth.lst
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/elchos/root-image/krebs/etc/Reaktor/auth.lst
diff --git a/elchos/root-image/krebs/etc/Reaktor/commands/ftpget b/elchos/root-image/krebs/etc/Reaktor/commands/ftpget
new file mode 100755
index 00000000..74e76f8e
--- /dev/null
+++ b/elchos/root-image/krebs/etc/Reaktor/commands/ftpget
@@ -0,0 +1,58 @@
+#!/bin/sh
+# usage: $0 [-d] uri sharename[/subdirs]
+exec 2>&1
+set -euf
+ncdc_user=hooker
+usage(){
+ cat <<EOF
+usage: $0 [-d] uri share[/subdirs]
+ -d -- uri is a directory to be mirrored
+ share -- vag[0-n]
+
+EOF
+}
+examples(){
+ cat <<EOF
+examples: ftpget -d http://ftp.mozilla.org/pub/mozilla.org/firefox/releases/0.8 vag0/firefox_releases
+ -> 0.8 directory is stored to /media/vag0/firefox_releases
+
+ ftpget -d http://speedtest.qsc.de/10MB.qsc vag0/
+ -> 10MB.qsc is stored to /media/vag0/10MB.qsc
+EOF
+}
+if test "${1:--h}" == '-h' -o "${1:-}" == '--help';then
+ usage
+ examples
+ exit 0
+fi
+if test ${1:-} == '-d' ;then
+ is_dir=true
+ shift
+fi
+
+target="${1:-}"
+if !( echo "$target" | egrep -q '^(ftps*://|https*://)' );then
+ exit 23
+fi
+
+share=$( printf "%s" "${2?provide share name}" |head -1 | sed 's#\.\./##')
+sharepath=/media/${share%%/*}
+realshare="/media/$share"
+test ! -e "$sharepath" && echo "$sharepath does not exist!" && exit 23
+
+sudo -u $ncdc_user /usr/bin/mkdir -p "$realshare"
+
+if test -z ${is_dir:-};then
+ cmd="lftpget \"$target\""
+else
+ cmd="lftp -e \"mirror;exit\" $target"
+fi
+
+ if ! sudo -u $ncdc_user /usr/bin/tmux has-session -t dl >/dev/null 2>&1 ;then
+ sudo -u $ncdc_user /usr/bin/tmux new-session -s dl -d -c "$realshare" "$cmd"
+ else
+ sudo -u $ncdc_user /usr/bin/tmux new-window -t dl -c "$realshare" "$cmd"
+ fi
+#sudo -u $ncdc_user /usr/bin/tmux new-window -t dl
+#cd "$realshare" ;sudo -u hooker /usr/bin/lftpget "$target"
+echo "download started, check with 'list_downloads'"
diff --git a/elchos/root-image/krebs/etc/Reaktor/commands/identify b/elchos/root-image/krebs/etc/Reaktor/commands/identify
new file mode 100755
index 00000000..c2fb2c58
--- /dev/null
+++ b/elchos/root-image/krebs/etc/Reaktor/commands/identify
@@ -0,0 +1,22 @@
+#!/usr/bin/env python
+import imp
+import os,sys
+
+def load_config(filename):
+ dirname = os.path.dirname(filename)
+ modname, ext = os.path.splitext(os.path.basename(filename))
+ file, pathname, description = imp.find_module(modname, [ dirname ])
+ return imp.load_module(modname, file, pathname, description)
+
+config = load_config(os.environ['config_filename'])
+
+with open(config.admin_file) as f:
+ for line in f:
+ nick,secret = line.split()
+ if sys.argv[1] == secret:
+ print("identified you as %s!"%nick)
+ with open(config.auth_file,'a+') as g:
+ g.write(os.environ['_prefix'] +"\n")
+ sys.exit(0)
+
+print("unable to identify you, sorry")
diff --git a/elchos/root-image/krebs/etc/Reaktor/commands/io b/elchos/root-image/krebs/etc/Reaktor/commands/io
new file mode 100755
index 00000000..eb04ae9b
--- /dev/null
+++ b/elchos/root-image/krebs/etc/Reaktor/commands/io
@@ -0,0 +1,25 @@
+#!/usr/bin/zsh
+printf '%-10s %-7s %-7s %-7s %-7s\n' IFACE rxkB/s txkB/s rxTotal txTotal
+sar -n DEV 1 3 | grep Average: | grep -v IFACE | grep -v ' lo ' | while read line;do
+ dev=$(echo $line | awk '{print $2}')
+ rxkb=$(echo $line | awk '{print $5}')
+ txkb=$(echo $line | awk '{print $6}')
+ total_bytes_r=$(cat /proc/net/dev | grep ${dev}: | awk '{print $2}')
+ total_bytes_t=$(cat /proc/net/dev | grep ${dev}: | awk '{print $10}')
+
+ printf '%-10s %-7s %-7s %-7s %-7s\n' $dev $rxkb $txkb $((total_bytes_r / (1024*1024))) $((total_bytes_t / (1024*1024)))
+done
+printf "%-10s %-7s %-7s\n" "DSK" "rxkB/s" "txkB/s"
+sar -p -d 1 3 | grep Average: | grep -v ' DEV ' |while read line;
+do
+ dsk=$(echo $line | awk '{print $2}')
+ rd_sec=$(echo $line | awk '{print $4}')
+ wr_sec=$(echo $line | awk '{print $5}')
+ if echo $dsk | egrep -q '(sd|hd|vd)';then
+ # TODO for some reason 0.00 can only be interpreted correctly as arithmetic
+ # expession by zsh
+ #
+ # rd is counted in blocks (which is 512 bytes)
+ printf "%-10s %-7.2f %-7.2f\n" "/dev/$dsk" "$((rd_sec*2))" "$((wr_sec*2))"
+ fi
+done
diff --git a/elchos/root-image/krebs/etc/Reaktor/commands/ips b/elchos/root-image/krebs/etc/Reaktor/commands/ips
new file mode 100755
index 00000000..17c39658
--- /dev/null
+++ b/elchos/root-image/krebs/etc/Reaktor/commands/ips
@@ -0,0 +1,2 @@
+#!/bin/sh
+ip addr | grep 'inet ' | awk '{print $2}' | grep -v 127.0.0.1 | grep .
diff --git a/elchos/root-image/krebs/etc/Reaktor/commands/list_downloads b/elchos/root-image/krebs/etc/Reaktor/commands/list_downloads
new file mode 100755
index 00000000..f53067d8
--- /dev/null
+++ b/elchos/root-image/krebs/etc/Reaktor/commands/list_downloads
@@ -0,0 +1,8 @@
+#!/bin/sh
+ncdc_user=hooker
+count=$(sudo -u $ncdc_user /usr/bin/tmux list-windows -t dl 2>/dev/null| wc -l)
+
+test $count -eq 0 && echo "no downloads running" && exit 0
+for i in $(seq 0 $(($count-1)));do
+ sudo -u $ncdc_user /usr/bin/tmux capture-pane -t dl:$i -p | grep -v '^$' | tail -n 1
+done
diff --git a/elchos/root-image/krebs/etc/Reaktor/commands/onion b/elchos/root-image/krebs/etc/Reaktor/commands/onion
new file mode 100755
index 00000000..1a202991
--- /dev/null
+++ b/elchos/root-image/krebs/etc/Reaktor/commands/onion
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+sudo -u tor /krebs/bin/tor-get-hidden-service.sh || echo "no hidden service configured"
diff --git a/elchos/root-image/krebs/etc/Reaktor/commands/reboot b/elchos/root-image/krebs/etc/Reaktor/commands/reboot
new file mode 100755
index 00000000..a264831a
--- /dev/null
+++ b/elchos/root-image/krebs/etc/Reaktor/commands/reboot
@@ -0,0 +1,3 @@
+#!/bin/sh
+echo "system is going down"
+sudo /usr/bin/reboot
diff --git a/elchos/root-image/krebs/etc/Reaktor/commands/refresh_shares b/elchos/root-image/krebs/etc/Reaktor/commands/refresh_shares
new file mode 100755
index 00000000..1005998b
--- /dev/null
+++ b/elchos/root-image/krebs/etc/Reaktor/commands/refresh_shares
@@ -0,0 +1,4 @@
+#!/bin/sh
+ncdc_user=hooker
+sudo /krebs/bin/refresh-shares.ship 2>&1
+sudo -u $ncdc_user /krebs/bin/update-search.sh 2>&1
diff --git a/elchos/root-image/krebs/etc/Reaktor/commands/shares b/elchos/root-image/krebs/etc/Reaktor/commands/shares
new file mode 100755
index 00000000..1601d584
--- /dev/null
+++ b/elchos/root-image/krebs/etc/Reaktor/commands/shares
@@ -0,0 +1,2 @@
+#!/bin/sh
+df -h | grep '/media/'
diff --git a/elchos/root-image/krebs/etc/Reaktor/commands/update-search b/elchos/root-image/krebs/etc/Reaktor/commands/update-search
new file mode 100755
index 00000000..1db1c1b2
--- /dev/null
+++ b/elchos/root-image/krebs/etc/Reaktor/commands/update-search
@@ -0,0 +1,3 @@
+#!/bin/sh
+ncdc_user=hooker
+sudo -u $ncdc_user /krebs/bin/update-search.sh
diff --git a/elchos/root-image/krebs/etc/Reaktor/config.py b/elchos/root-image/krebs/etc/Reaktor/config.py
new file mode 100644
index 00000000..5e07b659
--- /dev/null
+++ b/elchos/root-image/krebs/etc/Reaktor/config.py
@@ -0,0 +1,60 @@
+import socket
+
+debug = False
+
+name = socket.gethostname()
+
+irc_alarm_timeout = 300
+irc_hammer_interval = 10
+irc_kill_timeout = 360
+irc_nickname = name
+#irc_server = 'elchirc.nsupdate.info'
+irc_server = 'irc.freenode.net'
+irc_restart_timeout = 5
+irc_port = 6667
+irc_channels = [
+ '#filehooker'
+]
+
+admin_file='admin.lst'
+auth_file='auth.lst'
+
+def default_command(cmd):
+ return {
+ 'capname': cmd,
+ 'pattern': '^(?:' + name + '|\\*):\\s*' + cmd + '\\s*(?:\\s+(?P<args>.*))?$',
+ 'argv': [ 'commands/' + cmd ] }
+
+public_commands = [
+ default_command('caps'),
+ default_command('hello'),
+ default_command('search'),
+ default_command('list_downloads'),
+ default_command('badcommand'),
+ default_command('rev'),
+ default_command('io'),
+ default_command('ips'),
+ default_command('uptime'),
+ default_command('shares'),
+ default_command('onion'),
+ default_command('nocommand'),
+ # command not found
+ { 'pattern': '^(?:' + name + '|\\*):.*',
+ 'argv': [ 'commands/respond','You are made of stupid!'] },
+ # "highlight"
+ { 'pattern': '.*\\b' + name + '\\b.*',
+ 'argv': [ 'commands/say', 'I\'m famous' ] },
+ # identify via direct connect
+ { 'capname': 'identify',
+ 'pattern': 'identify' + '\\s*(?:\\s+(?P<args>.*))?$',
+ 'argv' : [ 'commands/identify' ]}
+
+]
+
+commands = [
+ default_command('reload'),
+ default_command('update-search'),
+ default_command('refresh_shares'),
+ default_command('ftpget'),
+ default_command('reboot')
+]
diff --git a/elchos/root-image/krebs/etc/authorized_keys b/elchos/root-image/krebs/etc/authorized_keys
new file mode 100644
index 00000000..f9446825
--- /dev/null
+++ b/elchos/root-image/krebs/etc/authorized_keys
@@ -0,0 +1,6 @@
+ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC7YrLdnXDRU2XEdZDu1BmgiT0Vaxplf3bfvSm+5o3g4AcR2yCv7h2D633c9uA0gq52EJ3V5m8B1ZcxqA0zqDptKwx+ZTMUGDls7StH5xpJyk9j5gf8DzyDLQPQG2IYszCH+8esKjo3BOFxfey8NaX+k6gvQsG3lyV0PjLvvIy4gDuMn6dPZfVAlwNYFOUNgwpku3W3A0d+UFyVjt3/sgZxM+8C3y6QE1gwT5/NfBbHM5vaEqjHcVq1ui+7a4iOXFGKkZDcd7EX6cQZSbCzZL7sZ0OmB1WpAsDCvIXfzX1YfNA0sso7ldSF6ZUGNgwEk1LootnQlCK/dfbM+i62SZ+1 tv@iiso
+ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCv9TTt4FkzT3jlQ0VS2tX/GpQO9Ef0wIQ+g96foe4qSniBwR667T1gIhURrod/p7N9oQcWRrNohjgmSBZRYA0kW6ZyqYJkLvRv54nXv6j/8Xq2nG/KVfDqL0kp8if+JGeFlQElpWJiAbGifYkopFy69QiLYU2ndR7aPbx+5qm/dcwPJ7K+n6dyePynCZadtcabm3PuBFUxGLdT9ImDXMOPfXxPMlN/3eb78byuEuHnhCIvIGLMBGx+8QTXvu7kHpZObvkbsF1xjVs9fDpwVLjh7GWdwf3BZ/agFlI24ffyqCPFnuaxUVyfUZeqf4twRsIZkTTB47lHDhYiVkyGe8gd root@pigstarter.de
+ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCl3RTOHd5DLiVeUbUr/GSiKoRWknXQnbkIf+uNiFO+XxiqZVojPlumQUVhasY8UzDzj9tSDruUKXpjut50FhIO5UFAgsBeMJyoZbgY/+R+QKU00Q19+IiUtxeFol/9dCO+F4o937MC0OpAC10LbOXN/9SYIXueYk3pJxIycXwUqhYmyEqtDdVh9Rx32LBVqlBoXRHpNGPLiswV2qNe0b5p919IGcslzf1XoUzfE3a3yjk/XbWh/59xnl4V7Oe7+iQheFxOT6rFA30WYwEygs5As//ZYtxvnn0gA02gOnXJsNjOW9irlxOUeP7IOU6Ye3WRKFRR0+7PS+w8IJLag2xb makefu@pornocauster
+ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAp83zynhIueJJsWlSEykVSBrrgBFKq38+vT8bRfa+csqyjZBl2SQFuCPo+Qbh49mwchpZRshBa9jQEIGqmXxv/PYdfBFQuOFgyUq9ZcTZUXqeynicg/SyOYFW86iiqYralIAkuGPfQ4howLPVyjTZtWeEeeEttom6p6LMY5Aumjz2em0FG0n9rRFY2fBzrdYAgk9C0N6ojCs/Gzknk9SGntA96MDqHJ1HXWFMfmwOLCnxtE5TY30MqSmkrJb7Fsejwjoqoe9Y/mCaR0LpG2cStC1+37GbHJNH0caCMaQCX8qdfgMVbWTVeFWtV6aWOaRgwLrPDYn4cHWQJqTfhtPrNQ== death@uriel
+ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQC/mUvSqIroFofp8a+nL6TBgAVvIk8IvFeOsHnRQsvhZX8ddk1+JICipsGwqsT2wRAk9rhcnLU/OdF+PXvykztNa1x4XxNACKnLfWBMk/VGadUkCwsdIwuu80nQfaEz5vNrjgNLfCaNoUa6sg0A2eyyuWH/vruPyfPJNDXA/ZQdXxJCSSfZUnIFW4qjAf4hZ+TK1CY7xECZQ3r+aqhJmSFe3T+ul5ZQLl6fmHP4oTf7sFNV4/fHY8RMxCPMztdyUJc3HB5MhI94VytjXuTSBDAgi5567bH1j1aBco4mAezfgHZy2eqeNVzYmFM/cVGEqyRIjokGYa72ZuGZ5Y58HjVDL8olweUVqOm11ref8+tBovyrHzjNKn6YiiMPYb0j03vBecqZYDA6n24s2WgEniL5WALhi5Y1NgUo1W9WDefhA2xC7p9xSy8kxs1UJH6g9U8SuHY2geJ/dYf3jixB3q/PwAfntejPkX1Pwy+rBVirA1vYIYgOWeifUyq6tYHxVo/kVEbyYkE1B6pBGwRdsWDwT3y02DO3OZFq9QX/0zkJtv2lkMR0LDk8WjZjilfqs1UivDCNY3ZQF+SOvUzeAkQFWSSU+yKlZOGPWcqNUVw8SQCw5/doIKjIclekWJ9KSD1VjTImx2oqYNqOa0kfvX+4cU+ECI1daCR6cjYiuizBIQ== pedro
+ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDTUWm/fISw/gbuHvf3kwxGEuk1aY5HrNNvr8QXCQv0khDdaYmZSELbtFQtE04WGTWmackNcLpld5mETVyCM0BjOgqMJYQNhtywxfYcodEY5xxHCuGgA3S1t94MZub+DRodXCfB0yUV85Wbb0sltkMTJufMwYmLEGxSLRukxAOcNsXdjlyro96csmYrIiV6R7+REnz8OcR7sKlI4tvKA1mbvWmjbDBd1MZ8Jc0Lwf+b0H/rH69wEQIcB5HRHHJIChoAk0t2azSjXagk1+4AebONZTCKvTHxs/D2wUBIzoxyjmh5S0aso/cKw8qpKcl/A2mZiIvW3KMlJAM5U+RQKMrr c1ko
diff --git a/elchos/root-image/krebs/etc/vsftpd.conf b/elchos/root-image/krebs/etc/vsftpd.conf
new file mode 100644
index 00000000..68e66fa1
--- /dev/null
+++ b/elchos/root-image/krebs/etc/vsftpd.conf
@@ -0,0 +1,12 @@
+anonymous_enable=YES
+dirmessage_enable=YES
+xferlog_enable=YES
+connect_from_port_20=YES
+ftpd_banner=Welcome to the Elch share, use dc++ if you can. This Instance has 10 slots
+listen=YES
+no_anon_password=YES
+anon_root=/media
+max_per_ip=2
+max_clients=10
+local_max_rate=1000000
+seccomp_sandbox=NO
diff --git a/elchos/root-image/krebs/lib/_punani_db b/elchos/root-image/krebs/lib/_punani_db
new file mode 100644
index 00000000..e5bf15b1
--- /dev/null
+++ b/elchos/root-image/krebs/lib/_punani_db
@@ -0,0 +1,57 @@
+_punanidb_pacman_=
+_punanidb_yum_=
+_punanidb_aptget_=
+
+_punanidb_pacman_git=git
+_punanidb_yum_git=git
+_punanidb_aptget_git=git-core
+
+_punanidb_pacman_python2=python2
+_punanidb_yum_python2=python
+_punanidb_aptget_python2=python
+
+_punanidb_pacman_python3=python
+_punanidb_aptget_python3=python3
+
+_punanidb_pacman_pip2=python2-pip
+_punanidb_aptget_pip2=python-pip
+
+_punanidb_pacman_virtualenv=python-virtualenv
+_punanidb_aptget_virtualenv=python-virtualenv
+
+_punanidb_pacman_gpp=g++
+_punanidb_aptget_gpp=gcc
+
+_punanidb_pacman_python2_dev=python2
+_punanidb_aptget_python2_dev=python-dev
+
+_punanidb_pacman_hostname=inetutils
+_punanidb_aptget_hostname=hostname
+
+_punanidb_pacman_hostname=inetutils
+_punanidb_aptget_hostname=hostname
+
+_punanidb_pacman_make=make
+_punanidb_yum_make=make
+_punanidb_aptget_make=make
+
+_punanidb_pacman_tinc=tinc
+_punanidb_yum_tinc=tinc
+_punanidb_aptget_tinc=tinc
+
+_punanidb_pacman_zsh=zsh
+_punanidb_yum_zsh=zsh
+_punanidb_aptget_zsh=zsh
+
+_punanidb_pacman_tor=tor
+_punanidb_yum_tor=tor
+_punanidb_aptget_tor=tor
+
+_punanidb_pacman_nano=nano
+_punanidb_yum_nano=nano
+_punanidb_aptget_nano=nano
+
+_punanidb_pacman_vim=vim
+_punanidb_yum_vim=vim-enhanced
+_punanidb_aptget_vim=vim
+
diff --git a/elchos/root-image/krebs/lib/color b/elchos/root-image/krebs/lib/color
new file mode 100644
index 00000000..cec2044e
--- /dev/null
+++ b/elchos/root-image/krebs/lib/color
@@ -0,0 +1,7 @@
+# superseed logging with color
+green='\e[0;32m'
+red='\e[0;31m'
+nc='\e[0m'
+msg() { printf "$*\n" >&2; }
+info() { msg "$green$*$nc"; }
+error() { msg "$green$*$nc"; }
diff --git a/elchos/root-image/krebs/lib/core b/elchos/root-image/krebs/lib/core
new file mode 100644
index 00000000..0c321525
--- /dev/null
+++ b/elchos/root-image/krebs/lib/core
@@ -0,0 +1,80 @@
+# logging
+msg() { echo "$*" >&2; }
+info() { msg "** $*"; }
+error() { msg "!! $*"; }
+## usage: die [REASON...]
+die() {
+ test $# -gt 0 && error "$*"
+ error 'Bailing out.'
+ exit 1
+}
+exists(){
+ type "$1" >/dev/null 2>/dev/null;
+}
+
+is_root(){
+ test $(id -u) -eq 0
+}
+
+defer(){
+ #close enough
+ trapstr="$1;${trapstr:-exit}"
+ trap "$trapstr" INT TERM EXIT KILL
+}
+
+esudo(){
+ # weaksauce esudo (expect sudo)
+ if ! is_root; then
+ # for the record:
+ # exec sudo -E "$0" "$@"
+ error "You are not root enough for this script"
+ exit 23 # go to hell
+ fi
+}
+
+get_hostname(){
+ # finds the current hostname
+ # if ENV HOSTN is set echo $HOSTN
+ # We try the following:
+ # $HOSTN
+ # $HOSTNAME
+ # hostname
+ # uci system.hostname
+ # /etc/hostname
+ # if everything fails, it returns 1 and prints 'unknown'
+
+ if [ -n "${HOSTN:-}" ] ; then printf "${HOSTN:-}"
+ elif [ -n "${HOSTNAME:-}" ] ;then printf "$HOSTNAME"
+ elif exists hostname ; then printf "$(hostname)"
+ elif exists uci ; then printf "$(uci get system.@system[0].hostname)"
+ elif [ -e /etc/hostname ] ;then printf "$(cat /etc/hostname)"
+ else printf "unknown"; return 1
+ fi
+ return 0
+}
+
+line_to_dot(){
+ while read line; do printf .; done;
+}
+
+get_os(){
+ # TODO: find all the release files
+ #if grep -q 'Linux' /etc/*release 2>/dev/null || grep -qe 'Linux' /etc/issue 2>/dev/null; then
+ if grep -q 'Linux' /etc/lsb-release 2>/dev/null || grep -q 'Linux' /etc/issue 2>/dev/null; then
+ echo 'linux'
+ elif test -e /etc/preferred-apps/google.xml; then
+ echo 'android'
+ elif test -e /etc/openwrt_release; then
+ echo 'openwrt'
+ elif uname -s | grep -qi 'darwin'; then
+ echo 'osx'
+ else
+ warn "Cannot determine your operating system, falling back to Linux"
+ echo 'linux'
+ fi
+}
+
+# user management
+has_user(){
+ egrep "^$1:" /etc/passwd >/dev/null
+}
diff --git a/elchos/root-image/krebs/lib/filehooker b/elchos/root-image/krebs/lib/filehooker
new file mode 100644
index 00000000..b3bef435
--- /dev/null
+++ b/elchos/root-image/krebs/lib/filehooker
@@ -0,0 +1,152 @@
+#@include core
+. /krebs/lib/core
+#@include network
+. /krebs/lib/network
+ncdc_user=${ncdc_user:-hooker}
+ncdc_bin=${ncdc_bin:-/usr/bin/ncdc}
+
+
+ncdc_config(){
+ # maybe we want to use the running ncdc process and communicate via tmux send-keys ?
+ txt="$(cat)"
+# printf "%s" "$txt"
+ ! sudo -u $ncdc_user /usr/bin/tmux has-session -t dcpp && echo "ncdc session must be running" && exit 1
+ sudo -u $ncdc_user /usr/bin/tmux send-keys -t dcpp:ncdc "$txt" C-m
+}
+
+ncdc_configure_netshare(){
+ : "${1?provide path to share}"
+ rnd=`hexdump -n 2 -e '/2 "%u"' /dev/urandom`
+ rnd_name="${2:-share_$rnd}"
+ info "removing old share $rnd_name"
+ (echo "/unshare $rnd_name" ) | ncdc_config
+ info "adding share $rnd_name ($1)"
+ (echo "/share $rnd_name $1") | ncdc_config
+}
+
+ncdc_configure_nick(){
+ nick=${1?nick must be provided}
+ info "configuring DC Nick: $nick"
+ echo "/nick $nick" | ncdc_config
+}
+ncdc_configure_hub(){
+ rnd=`hexdump -n 2 -e '/2 "%u"' /dev/urandom`
+ hub=${1?adcs://localhost:2781}
+ hubname="${2:-hub_$rnd}"
+ info "setting active as true"
+ (echo "/set active true") | ncdc_config
+ info "configuring DC Hub: $hub, activating autconnect"
+ (echo "/open ${hubname} ${hub}" ;
+ echo "/hset autoconnect true") | ncdc_config
+}
+
+ncdc_download(){
+install_dir="$(dirname "${ncdc_bin}")"
+info "installing ncdc to $install_dir"
+curl http://dev.yorhel.nl/download/ncdc-linux-x86_64-1.19.tar.gz | tar xz -C "$install_dir"
+}
+ncdc_install(){
+useradd -m $ncdc_user |