summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Monitoring/Makefile8
-rw-r--r--Monitoring/conf/extinfo.cfg9
-rw-r--r--Monitoring/conf/hostgroups_generic.cfg (renamed from Monitoring/conf/hostgroups_nagios2.cfg)19
-rw-r--r--Monitoring/conf/services.cfg26
-rw-r--r--Monitoring/conf/shack_contacts.cfg22
-rw-r--r--Monitoring/conf/shack_guests.cfg50
-rw-r--r--Monitoring/conf/shack_infrastructure.cfg41
-rw-r--r--Monitoring/conf/templates.cfg45
-rw-r--r--Monitoring/conf/timeperiods.cfg50
-rw-r--r--btcguild/index.js20
-rw-r--r--cobra/README33
-rw-r--r--cobra/hello/index.sh1
-rwxr-xr-xcobra/index.sh16
-rw-r--r--mining/CONFIGURE5
-rw-r--r--mining/Makefile18
-rw-r--r--mining/README9
-rw-r--r--mining/user/.config/autostart/startup.desktop6
-rwxr-xr-xmining/user/bin/ati_temper5
-rw-r--r--mining/user/mining.ovdr16
-rw-r--r--mining/user/startup.sh16
-rw-r--r--node/Makefile26
-rwxr-xr-xretiolum/bin/install18
-rw-r--r--temper/Makefile3
23 files changed, 422 insertions, 40 deletions
diff --git a/Monitoring/Makefile b/Monitoring/Makefile
index a42707e3..72269101 100644
--- a/Monitoring/Makefile
+++ b/Monitoring/Makefile
@@ -5,13 +5,17 @@ HTDOCS = /usr/share/nagios3/htdocs
.phony: debian
debian:
[ `which nagios3` ] || apt-get install nagios3
- rm $(NAGDIR)/conf.d/localhost_nagios2.cfg || true
- rm $(NAGDIR)/conf.d/host-gateway_nagios3.cfg || true
+ rm $(NAGDIR)/conf.d/* || true
cp -r conf/* $(NAGDIR)/conf.d/
htpasswd -bc htpasswd.users nagiosadmin krebs
htpasswd -b htpasswd.users shack shackit
sed -i 's/\(authorized_for_all_hosts=nagiosadmin\)$$/\1,shack/' $(NAGDIR)/cgi.cfg
+ sed -i 's/\(check_external_commands=\)0$$/\11/' $(NAGDIR)/nagios.cfg
sed -i 's/\(authorized_for_all_services=nagiosadmin\)$$/\1,shack/' $(NAGDIR)/cgi.cfg
cp -R htdocs/* $(HTDOCS)
cp -r plugins $(NAGLIBDIR)
/etc/init.d/nagios3 reload
+ chown nagios:www-data /var/lib/nagios3 || true
+ chown nagios:www-data /var/lib/nagios3/rw || true
+ chmod g+x /var/lib/nagios3 || true
+ chmod ug=rwx /var/lib/nagios3/rw/nagios.cmd || true
diff --git a/Monitoring/conf/extinfo.cfg b/Monitoring/conf/extinfo.cfg
new file mode 100644
index 00000000..e4300b72
--- /dev/null
+++ b/Monitoring/conf/extinfo.cfg
@@ -0,0 +1,9 @@
+define hostextinfo{
+ hostgroup_name debian-servers
+ notes Debian GNU/Linux servers
+# notes_url http://webserver.localhost.localdomain/hostinfo.pl?host=netware1
+ icon_image base/debian.png
+ icon_image_alt Debian GNU/Linux
+ vrml_image debian.png
+ statusmap_image base/debian.gd2
+ }
diff --git a/Monitoring/conf/hostgroups_nagios2.cfg b/Monitoring/conf/hostgroups_generic.cfg
index 63acbf50..4e3625c5 100644
--- a/Monitoring/conf/hostgroups_nagios2.cfg
+++ b/Monitoring/conf/hostgroups_generic.cfg
@@ -1,31 +1,28 @@
-# Some generic hostgroup definitions
-
# A simple wildcard hostgroup
define hostgroup {
hostgroup_name all
- alias All Servers
- members *
+ alias All Servers
+ members *
}
# A list of your Debian GNU/Linux servers
define hostgroup {
hostgroup_name debian-servers
- alias Debian GNU/Linux Servers
- members localhost
+ alias Debian GNU/Linux Servers
+ members localhost
}
# A list of your web servers
define hostgroup {
hostgroup_name http-servers
- alias HTTP servers
- members localhost
+ alias HTTP servers
+ members localhost
}
# A list of your ssh-accessible servers
define hostgroup {
hostgroup_name ssh-servers
- alias SSH servers
- members localhost
+ alias SSH servers
+ members localhost
}
-
diff --git a/Monitoring/conf/services.cfg b/Monitoring/conf/services.cfg
new file mode 100644
index 00000000..e3a61eb0
--- /dev/null
+++ b/Monitoring/conf/services.cfg
@@ -0,0 +1,26 @@
+# check that web services are running
+define service {
+ hostgroup_name http-servers
+ service_description HTTP
+ check_command check_http
+ use generic-service
+ notification_interval 0 ; set > 0 if you want to be renotified
+}
+
+# check that ssh services are running
+define service {
+ hostgroup_name ssh-servers
+ service_description SSH
+ check_command check_ssh
+ use generic-service
+ notification_interval 0 ; set > 0 if you want to be renotified
+}
+
+# check that ping-only hosts are up
+define service {
+# hostgroup_name ping-servers
+ service_description PING
+ check_command check_ping!100.0,20%!500.0,60%
+ use generic-service
+ notification_interval 0 ; set > 0 if you want to be renotified
+}
diff --git a/Monitoring/conf/shack_contacts.cfg b/Monitoring/conf/shack_contacts.cfg
new file mode 100644
index 00000000..832a215e
--- /dev/null
+++ b/Monitoring/conf/shack_contacts.cfg
@@ -0,0 +1,22 @@
+define contact{
+ contact_name makefu
+ alias makefu
+ service_notification_period 24x7
+ host_notification_period 24x7
+ service_notification_options w,u,c,r
+ host_notification_options d,u,r
+ service_notification_commands notify-service-by-email
+ host_notification_commands notify-host-by-email
+ email shack_nagios_notification@syntax-fehler.de
+ }
+define contactgroup{
+ contactgroup_name krebsminers
+ alias Krebsminers
+ members makefu
+ }
+
+define contactgroup{
+ contactgroup_name admins
+ alias admins
+ }
+
diff --git a/Monitoring/conf/shack_guests.cfg b/Monitoring/conf/shack_guests.cfg
index 75e92f17..45617461 100644
--- a/Monitoring/conf/shack_guests.cfg
+++ b/Monitoring/conf/shack_guests.cfg
@@ -6,31 +6,61 @@ define host{
host_name gauda0
parents shack-serverswitch
alias Gauda0 Bitcoin Mining Rig 0
- address 10.42.1.16
+ address 10.42.0.99
hostgroups bitcoin-miner
}
define host{
use generic-host
host_name gauda1
- parents shack-serverswitch
- alias Gauda0 Bitcoin Mining Rig 1
- address 10.42.1.20
+ parents shack-serverswitch2
+ alias Gauda1 Bitcoin Mining Rig 1
+ address 10.42.0.98
hostgroups bitcoin-miner
}
define host{
use generic-host
host_name gauda2
- parents shack-serverswitch
- alias Gauda0 Bitcoin Mining Rig 2
- address 10.42.1.17
+ parents shack-serverswitch2
+ alias Gauda2 Bitcoin Mining Rig 2
+ address 10.42.0.97
hostgroups bitcoin-miner
}
define host{
use generic-host
- host_name SaschaPC
+ host_name chinaman
+ parents shack-serverswitch2
+ alias Chinaman Bitcoin Mining Rig
+ address 10.42.0.96
+ _TINC_ADDRESS 10.7.7.6
+ hostgroups bitcoin-miner,tinc-nodes,ssh-servers
+ contact_groups krebsminers
+ }
+
+define host{
+ use generic-host
+ host_name Sascha privater Server
parents shack-serverswitch
- alias Saschas Bitcoin Miner
+ alias Sascha Server
address 10.42.23.100
- hostgroups bitcoin-miner
+ #hostgroups bitcoin-miner
+ }
+
+define host{
+ use generic-host
+ host_name Telefonzelle
+ parents shack-coreswitch
+ alias Telefonzelle
+ address 10.42.23.101
+ #hostgroups bitcoin-miner
+ }
+
+define host{
+ use generic-host
+ host_name shack-pnp
+ alias Shack Bestueckungsautomat
+ address 10.42.100.5
+ parents shack-coreswitch
+ #hostgroups shack-rz
}
+
diff --git a/Monitoring/conf/shack_infrastructure.cfg b/Monitoring/conf/shack_infrastructure.cfg
index 78c220b1..f404f3e4 100644
--- a/Monitoring/conf/shack_infrastructure.cfg
+++ b/Monitoring/conf/shack_infrastructure.cfg
@@ -63,6 +63,32 @@ define host{
address 10.0.10.2
hostgroups shack-rz
}
+#
+# Serverswitch 2
+#
+define host{
+ use generic-host
+ host_name shack-serverswitch2
+ parents shack-serverswitch
+ alias Shack switch Rack 2 (cisco 3524)
+ address 10.42.0.5
+ hostgroups shack-rz
+ }
+
+define service {
+ host_name shack-serverswitch2
+ service_description Telnet
+ use generic-service
+ check_command check_telnet
+ }
+
+define service {
+ host_name shack-serverswitch2
+ service_description Admin HTTP Terminal
+ use generic-service
+ check_command check_http
+ }
+
define service {
host_name shack-gw
@@ -88,14 +114,6 @@ define host{
define host{
use generic-host
- host_name shack-wlan-ap1
- parents shack-coreswitch
- alias Shack Wlan Access Point 1
- address 10.42.0.5
- hostgroups wlan-ap
- }
-define host{
- use generic-host
host_name shack-wlan-ap2
parents shack-coreswitch
alias Shack Wlan Access Point 2
@@ -145,10 +163,6 @@ define service{
check_command check_sip
}
-
-
-
-
#
# Shack DNS Server
#
@@ -222,3 +236,6 @@ define service {
check_command check_ldap!shammunity
}
+#
+# Random stuff (not necessary located in RZ)
+#
diff --git a/Monitoring/conf/templates.cfg b/Monitoring/conf/templates.cfg
new file mode 100644
index 00000000..41807e1c
--- /dev/null
+++ b/Monitoring/conf/templates.cfg
@@ -0,0 +1,45 @@
+# generic service template definition
+define service{
+ name generic-service ; The 'name' of this service template
+ active_checks_enabled 1 ; Active service checks are enabled
+ passive_checks_enabled 1 ; Passive service checks are enabled/accepted
+ parallelize_check 1 ; Active service checks should be parallelized (disabling this can lead to major performance problems)
+ obsess_over_service 1 ; We should obsess over this service (if necessary)
+ check_freshness 0 ; Default is to NOT check service 'freshness'
+ notifications_enabled 1 ; Service notifications are enabled
+ event_handler_enabled 1 ; Service event handler is enabled
+ flap_detection_enabled 1 ; Flap detection is enabled
+ failure_prediction_enabled 1 ; Failure prediction is enabled
+ process_perf_data 1 ; Process performance data
+ retain_status_information 1 ; Retain status information across program restarts
+ retain_nonstatus_information 1 ; Retain non-status information across program restarts
+ notification_interval 0 ; Only send notifications on status change by default.
+ is_volatile 0
+ check_period 24x7
+ normal_check_interval 5
+ retry_check_interval 1
+ max_check_attempts 4
+ notification_period 24x7
+ notification_options w,u,c,r
+ contact_groups admins
+ register 0 ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL SERVICE, JUST A TEMPLATE!
+ }
+# Generic host definition template - This is NOT a real host, just a template!
+
+define host{
+ name generic-host ; The name of this host template
+ notifications_enabled 1 ; Host notifications are enabled
+ event_handler_enabled 1 ; Host event handler is enabled
+ flap_detection_enabled 1 ; Flap detection is enabled
+ failure_prediction_enabled 1 ; Failure prediction is enabled
+ process_perf_data 1 ; Process performance data
+ retain_status_information 1 ; Retain status information across program restarts
+ retain_nonstatus_information 1 ; Retain non-status information across program restarts
+ check_command check-host-alive
+ max_check_attempts 10
+ notification_interval 0
+ notification_period 24x7
+ notification_options d,u,r
+ contact_groups admins
+ register 0 ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL HOST, JUST A TEMPLATE!
+ }
diff --git a/Monitoring/conf/timeperiods.cfg b/Monitoring/conf/timeperiods.cfg
new file mode 100644
index 00000000..55ecf9df
--- /dev/null
+++ b/Monitoring/conf/timeperiods.cfg
@@ -0,0 +1,50 @@
+###############################################################################
+# timeperiods.cfg
+###############################################################################
+
+# This defines a timeperiod where all times are valid for checks,
+# notifications, etc. The classic "24x7" support nightmare. :-)
+
+define timeperiod{
+ timeperiod_name 24x7
+ alias 24 Hours A Day, 7 Days A Week
+ sunday 00:00-24:00
+ monday 00:00-24:00
+ tuesday 00:00-24:00
+ wednesday 00:00-24:00
+ thursday 00:00-24:00
+ friday 00:00-24:00
+ saturday 00:00-24:00
+ }
+
+# Here is a slightly friendlier period during work hours
+define timeperiod{
+ timeperiod_name workhours
+ alias Standard Work Hours
+ monday 09:00-17:00
+ tuesday 09:00-17:00
+ wednesday 09:00-17:00
+ thursday 09:00-17:00
+ friday 09:00-17:00
+ }
+
+# The complement of workhours
+define timeperiod{
+ timeperiod_name nonworkhours
+ alias Non-Work Hours
+ sunday 00:00-24:00
+ monday 00:00-09:00,17:00-24:00
+ tuesday 00:00-09:00,17:00-24:00
+ wednesday 00:00-09:00,17:00-24:00
+ thursday 00:00-09:00,17:00-24:00
+ friday 00:00-09:00,17:00-24:00
+ saturday 00:00-24:00
+ }
+
+# This one is a favorite: never :)
+define timeperiod{
+ timeperiod_name never
+ alias Never
+ }
+
+# end of file
diff --git a/btcguild/index.js b/btcguild/index.js
new file mode 100644
index 00000000..1f33db06
--- /dev/null
+++ b/btcguild/index.js
@@ -0,0 +1,20 @@
+api_key = process.env.api_key;
+
+var options = {
+ host: 'www.btcguild.com',
+ port: 80,
+ path: '/api.php?api_key=' + api_key
+};
+
+http = require('http');
+http.get(options, function(res) {
+ var data = '';
+ res.on('data', function (chunk) {
+ data += chunk;
+ });
+ res.on('end', function () {
+ console.log(JSON.parse(data));
+ });
+}).on('error', function(e) {
+ console.error('Error: ' + e.message);
+});
diff --git a/cobra/README b/cobra/README
new file mode 100644
index 00000000..145ecd14
--- /dev/null
+++ b/cobra/README
@@ -0,0 +1,33 @@
+
+# usage
+cobra [target...]
+
+# description
+cobra tries to satisfies all specified targets and all of it dependencies.
+
+# targets
+targets can be a lot of different things, e.g. directories
+
+## dirctory targets
+try to do the right thing when the cobra search path contains a directory
+that contains an index.{js,sh,py,etc.} file.
+
+## cobra search path
+like your sh's PATH
+
+## example: cobra as some kind of make
+$ echo $COBRA_PATH
+.
+$ ls .
+foo/ bar/ baz/
+$ cat foo/cobra.json
+{ "deps": "bar", "baz" }
+$ cat bar/cobra.json
+No such file or directory
+$ cat baz/cobra.json
+No such file or directory
+$ cobra foo
+[cobra bar]
+[cobra baz]
+[cobra foo]
+$ exit
diff --git a/cobra/hello/index.sh b/cobra/hello/index.sh
new file mode 100644
index 00000000..df2dea7c
--- /dev/null
+++ b/cobra/hello/index.sh
@@ -0,0 +1 @@
+echo 'Hello, world!'
diff --git a/cobra/index.sh b/cobra/index.sh
new file mode 100755
index 00000000..1118a823
--- /dev/null
+++ b/cobra/index.sh
@@ -0,0 +1,16 @@
+#! /bin/sh
+set -euf
+trap "echo 'You are made of stupid!' >&2; exit 23" EXIT
+
+COBRA_PATH="${COBRA_PATH-$PWD}"
+
+## main
+for target; do
+ for path in $COBRA_PATH; do
+ if test -d "$path/$target"; then
+ if index="$path/$target/index.sh" && test -f "$index"; then
+ exec /bin/sh "$index"
+ fi
+ fi
+ done
+done
diff --git a/mining/CONFIGURE b/mining/CONFIGURE
new file mode 100644
index 00000000..6ddce386
--- /dev/null
+++ b/mining/CONFIGURE
@@ -0,0 +1,5 @@
+How to Configure
+===============
+
+1. change the mining-url in ~/startup.sh
+2. sudo /etc/init.d/gdm restart
diff --git a/mining/Makefile b/mining/Makefile
new file mode 100644
index 00000000..0fab7b1f
--- /dev/null
+++ b/mining/Makefile
@@ -0,0 +1,18 @@
+.PHONY: all format install
+select-target:
+ @echo "You are made of stupid!"
+ echo "look here"
+ @cat Makefile
+format:
+ cat README
+install:
+ apt-get install --yes lm-sensors
+ echo '#!/bin/bash' > /usr/bin/ati_license
+ echo '#!/bin/sh' > /etc/init.d/live-boot
+ echo 'wall "going down"' >> /etc/init.d/live-boot
+ chmod 755 /etc/init.d/live-boot
+ echo 'sudo tar xvf /opt/AMD-APP-SDK-v2.4-lnx64/icd-registration.tgz -C /' >> /usr/bin/ati_license
+ cp -r user /home
+configure:
+ sensors-detect
+ @cat CONFIGURE
diff --git a/mining/README b/mining/README
new file mode 100644
index 00000000..ad8c3468
--- /dev/null
+++ b/mining/README
@@ -0,0 +1,9 @@
+What to do:
+format the usb-stick:
+Device Boot Start End Blocks Id System
+/dev/sda1 * 1 254 976345 c W95 FAT32 (LBA)
+/dev/sda2 255 1017 2932972 83 Linux
+
+1. install coinlinux live system on sda1.
+2. mkfs.ext3 /dev/sda2 -L live-rw
+3. install grub on /dev/sda
diff --git a/mining/user/.config/autostart/startup.desktop b/mining/user/.config/autostart/startup.desktop
new file mode 100644
index 00000000..67c35ef8
--- /dev/null
+++ b/mining/user/.config/autostart/startup.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Name=LXDE Autostart
+Exec=/home/user/startup.sh
+Terminal=true
+Type=Application
+Categories=Configuration
diff --git a/mining/user/bin/ati_temper b/mining/user/bin/ati_temper
new file mode 100755
index 00000000..283a6024
--- /dev/null
+++ b/mining/user/bin/ati_temper
@@ -0,0 +1,5 @@
+#displays: CARD1TEMP CARD2TEMP CPUTEMP OUTSIDE
+echo -n "`DISPLAY=:0 aticonfig --adapter=1 --od-gettemperature | grep Temperature | sed -n 's/.*Temperature - \([0-9.]*\) C/\1/;p'` "
+echo -n "`DISPLAY=:0 aticonfig --adapter=2 --od-gettemperature | grep Temperature | sed -n 's/.*Temperature - \([0-9.]*\) C/\1/;p'` "
+echo -n "`sensors | grep temp1 | sed -e 's/temp1: *+\([0-9.]*\).*/\1/'` "
+echo "`temper`"
diff --git a/mining/user/mining.ovdr b/mining/user/mining.ovdr
new file mode 100644
index 00000000..d6cf6fec
--- /dev/null
+++ b/mining/user/mining.ovdr
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<OVERDRIVE_PROFILE>
+ <PERFORMANCE_LEVEL level="2" gpu="90000" mem="30000" voltage="1040"/>
+ <PERFORMANCE_LEVEL level="1" gpu="55000" mem="30000" voltage="1000"/>
+ <PERFORMANCE_LEVEL level="0" gpu="15700" mem="30000" voltage="950"/>
+ <FAN_SETTING percentage="AUTO"/>
+ <FAN_CTRL enabled="yes"/>
+ <FAN_CTRL_CURVE type="0"/>
+ <FAN_CTRL_POINT nr="0" temperature="2000" percentage="0"/>
+ <FAN_CTRL_POINT nr="1" temperature="3400" percentage="9300"/>
+ <FAN_CTRL_POINT nr="2" temperature="4800" percentage="10000"/>
+ <FAN_CTRL_POINT nr="3" temperature="7000" percentage="10100"/>
+ <FAN_CTRL_POINT nr="4" temperature="10000" percentage="10100"/>
+ <MONITOR_SAMPLE_TIME interval="10"/>
+ <COLOR_PROFILE enabled="no" longitude="-13.000000" latitude="52.000000" color_temp_day="0" color_temp_night="0" transition="30"/>
+</OVERDRIVE_PROFILE>
diff --git a/mining/user/startup.sh b/mining/user/startup.sh
new file mode 100644
index 00000000..eb2ce13a
--- /dev/null
+++ b/mining/user/startup.sh
@@ -0,0 +1,16 @@
+sudo pkill xscreensaver
+sudo pkill tmux
+sleep 1
+export DISPLAY=:0
+
+export URL="${URL-http://txgen_chinaman:lolwut@uk.btcguild.com:8332}"
+#export URL="http://txgen:qJrXefWX@bitcoinpool.com:8334"
+slock &
+tmux start-server
+tmux new-session -d -s mining -n mining
+printenv > /home/user/environment
+tmux new-window -t mining:1 'AMDOverdriveCtrl -i 0 mining.ovdr'
+tmux new-window -t mining:2 'AMDOverdriveCtrl -i 3 mining.ovdr'
+sleep 5
+tmux new-window -t mining:3 "cd /opt/miners/phoenix; while sleep 1; do sudo python phoenix.py -u $URL -k phatk DEVICE=0 VECTORS BFI_INT WORKSIZE=256 AGGRESSION=12 FASTLOOPS=false;done"
+tmux new-window -t mining:4 "cd /opt/miners/phoenix; while sleep 1;do sudo python phoenix.py -u $URL -k phatk DEVICE=1 VECTORS BFI_INT WORKSIZE=256 AGGRESSION=10 FASTLOOPS=false ; done"
diff --git a/node/Makefile b/node/Makefile
index 00e27b6f..20e15c70 100644
--- a/node/Makefile
+++ b/node/Makefile
@@ -1,8 +1,24 @@
-.PHONY: all
-all: node-v0.4.8
- cd $< && ./configure && make && make install
+.PHONY: all build install
-node-%:
- cur http://nodejs.org/dist/$@.tar.gz | tar zx
+all:
+ @echo "You are made of stupid!"; exit 23
+
+build: node node/build/default/node
+ cd node && ./configure && make
+
+install: build
+ cd node && make install
+
+node: node-git
+ ln -vsnf $< $@
+
+node-git:
+ git clone https://github.com/joyent/node node-git
+
+node-%: /usr/bin/curl
+ curl http://nodejs.org/dist/$@.tar.gz | tar zx
+
+/usr/bin/curl:
+ apt-get install --yes curl
diff --git a/retiolum/bin/install b/retiolum/bin/install
new file mode 100755
index 00000000..9e4459fb
--- /dev/null
+++ b/retiolum/bin/install
@@ -0,0 +1,18 @@
+#! /bin/sh
+#
+#
+#
+set -euf
+
+trap 'echo "${comment+$comment
+}You are made of stupid!">&2; exit 23' EXIT
+
+if ! test -e /usr/sbin/tincd; then
+ if grep -iq ubuntu /etc/issue; then
+ sudo apt-get install --yes tinc
+ else
+ comment='Install tinc to continue.' exit
+ fi
+fi
+
+trap - EXIT
diff --git a/temper/Makefile b/temper/Makefile
index 3ada08de..18165772 100644
--- a/temper/Makefile
+++ b/temper/Makefile
@@ -6,9 +6,12 @@ CFLAGS = -O2 -Wall
temper: temper.c
${CC} -DUNIT_TEST -o $@ $^ -lusb
chmod +s temper
+ install temper /usr/bin
clean:
rm -f temper *.o
rules-install: # must be superuser to do this
cp 99-tempsensor.rules /etc/udev/rules.d
+debian-prereq:
+ apt-get install libusb-dev