summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xretiolum/scripts/tinc_setup/new_install.sh492
1 files changed, 248 insertions, 244 deletions
diff --git a/retiolum/scripts/tinc_setup/new_install.sh b/retiolum/scripts/tinc_setup/new_install.sh
index 76ed9e70..226e7c1b 100755
--- a/retiolum/scripts/tinc_setup/new_install.sh
+++ b/retiolum/scripts/tinc_setup/new_install.sh
@@ -1,281 +1,193 @@
#!/bin/sh
+main(){
-#get sudo
-if test "${nosudo-false}" != true -a `id -u` != 0; then
- echo "we're going sudo..." >&2
- exec sudo -E "$0" "$@"
- exit 23 # go to hell
-fi
-set -euf
-#
-SUBNET4=${SUBNET4:-10.243}
-SUBNET6=${SUBNET6:-42}
-TEMPDIR=${TEMPDIR:-auto}
-TINCDIR=${TINCDIR:-auto}
-exists() { type "$1" >/dev/null 2>/dev/null; }
-
-if exists hostname ;then SYSHOSTN=${HOSTNAME:-$(hostname)}
-elif exists uci ;then SYSHOSTN=$(uci get system.@system[0].hostname)
-elif [ -e /etc/hostname ] ;then SYSHOSTN=$(cat /etc/hostname)
-else SYSHOSTN="unknown"
-fi
-
-#overwrite `found` hostname
-HOSTN=${HOSTN:-$SYSHOSTN}
-NETNAME=${NETNAME:-retiolum}
-MASK4=${MASK4:-16}
-MASK6=${MASK6:-16}
-RMASK=${RMASK:-255.255.0.0}
-URL=${URL:-http://euer.krebsco.de/retiolum/hosts.tar.gz}
-SURL=${SURL:-http://euer.krebsco.de/retiolum/supernodes.tar.gz}
-
-IRCCHANNEL=${IRCCHANNEL:-"#krebs_incoming"}
-IRCSERVER=${IRCSERVER:-"irc.freenode.net"}
-IRCPORT=${IRCPORT:-6667}
-
-OS=${OS:-0}
-TELNET=${TELNET:-}
-
-IP4=${IP4:-0}
-IP6=${IP6:-0}
-
-RAND4=1
-RAND6=1
+ #get sudo
+ if test "${nosudo-false}" != true -a `id -u` != 0; then
+ echo "we're going sudo..." >&2
+ exec sudo -E "$0" "$@"
+ exit 23 # go to hell
+ fi
+ set -euf
+ #
+ SUBNET4=${SUBNET4:-10.243}
+ SUBNET6=${SUBNET6:-42}
+ TEMPDIR=${TEMPDIR:-auto}
+ TINCDIR=${TINCDIR:-auto}
+ exists() { type "$1" >/dev/null 2>/dev/null; }
+
+ if exists hostname ;then SYSHOSTN=${HOSTNAME:-$(hostname)}
+ elif exists uci ;then SYSHOSTN=$(uci get system.@system[0].hostname)
+ elif [ -e /etc/hostname ] ;then SYSHOSTN=$(cat /etc/hostname)
+ else SYSHOSTN="unknown"
+ fi
-#convert hostmask to subnetmask only version 4
-host2subnet()
-{
- NEEDDOTSINSUB=$(expr 3 - $( echo $SUBNET4 | tr -C -d . | wc -c))
- case $NEEDDOTSINSUB in
- 3) FULLSUBNET=$SUBNET4.0.0.0 ;;
- 2) FULLSUBNET=$SUBNET4.0.0 ;;
- 1) FULLSUBNET=$SUBNET4.0 ;;
- 0) FULLSUBNET=$SUBNET4 ;;
- *) echo "cannot read subnet" && exit 1;;
- esac
-}
+ #overwrite `found` hostname
+ HOSTN=${HOSTN:-$SYSHOSTN}
+ NETNAME=${NETNAME:-retiolum}
+ MASK4=${MASK4:-16}
+ MASK6=${MASK6:-16}
+ RMASK=${RMASK:-255.255.0.0}
+ URL=${URL:-http://euer.krebsco.de/retiolum/hosts.tar.gz}
+ SURL=${SURL:-http://euer.krebsco.de/retiolum/supernodes.tar.gz}
-#check if ip is valid ipv4 function
-check_ip_valid4()
-{
- if [ "$(echo $1 | awk -F"\." ' $0 ~ /^([0-9]{1,3}\.){3}[0-9]{1,3}$/ && $1 <=255 && $2 <= 255 && $3 <= 255 && $4 <= 255 ' 2>/dev/null)" == "$1" ] && [ ${1:0:${#SUBNET4}} == $SUBNET4 ]
- then
- return 0
- else
- return 1
- fi
-}
+ IRCCHANNEL=${IRCCHANNEL:-"#krebs_incoming"}
+ IRCSERVER=${IRCSERVER:-"irc.freenode.net"}
+ IRCPORT=${IRCPORT:-6667}
-#check if ip is valid ipv6 function
-check_ip_valid6()
-{
- if [ "$(echo $1 | awk -F"." ' $0 ~ /^([0-9a-fA-F]{1,4}\:){7}[0-9a-fA-F]{1,4}$/' 2>/dev/null)" == $1 ] && [ ${1:0:${#SUBNET6}} == $SUBNET6 ]
- then
- return 0
- else
- return 1
- fi
-}
+ OS=${OS:-0}
+ TELNET=${TELNET:-}
-#check if ip is taken function
-check_ip_taken()
-{
- if grep -q -r -E "$1(#|/)" $TEMPDIR/hosts/ ;then
- return 1
- else
- return 0
- fi
-}
-
-#if hostname is taken, count upwards until it isn't taken function
-get_hostname()
-{
- TSTFILE=$TEMPDIR/hosts/$1
- LCOUNTER=0
- if test -e $TSTFILE; then
- while test -e $TSTFILE; do
- : $((LCOUNTER+=1))
- TSTFILE=$TEMPDIR/hosts/$1$LCOUNTER
- done
- HOSTN=$1$LCOUNTER
- else
- HOSTN=$1
- fi
-}
+ IP4=${IP4:-0}
+ IP6=${IP6:-0}
-#os autodetection
-find_os()
-{
- if grep -qe 'Linux' /etc/*release 2>/dev/null || grep -qe 'Linux' /etc/issue 2>/dev/null; then
- OS='linux'
- elif exists getprop ; then
- OS='android'
- elif test -e /etc/openwrt_release; then
- OS='openwrt'
- elif uname -s | grep -qi 'darwin'; then
- OS='osx'
- else
- echo "Cannot determine your operating system, falling back to Linux"
- OS='linux'
- fi
-}
+ RAND4=1
+ RAND6=1
-find_telnet(){
- if exists telnet >/dev/null;then
- TELNET="`command -v telnet`"
- elif exists busybox >/dev/null;then
- TELNET="`command -v busybox` telnet"
- else
- echo "cannot find telnet binary, please install either telnet-client or busybox"
- echo "bailing out!"
- exit 1
- fi
-}
-if [ $IP4 -eq 0 ]; then
+ if [ $IP4 -eq 0 ]; then
RAND4=1
-elif ! check_ip_valid4 $IP4; then
+ elif ! check_ip_valid4 $IP4; then
echo 'ip4 is invalid'
exit 1
-fi
-if [ $IP6 -eq 0 ]; then
+ fi
+ if [ $IP6 -eq 0 ]; then
RAND6=1
-elif ! check_ip_valid6 $IP6; then
+ elif ! check_ip_valid6 $IP6; then
echo 'ip6 is invalid'
exit 1
-fi
+ fi
-#find OS
-if [ $OS -eq 0 ]; then
+ #find OS
+ if [ $OS -eq 0 ]; then
find_os
-fi
-if [ -z "$TELNET" ]; then
- find_telnet
-fi
-#check if everything is installed
-if ! exists awk ; then
+ fi
+ if [ -z "$TELNET" ]; then
+ find_telnet
+ fi
+ #check if everything is installed
+ if ! exists awk ; then
echo "Please install awk"
exit 1
-fi
+ fi
-if ! exists curl ; then
+ if ! exists curl ; then
if ! exists wget ; then
- echo "Please install curl or wget"
- exit 1
+ echo "Please install curl or wget"
+ exit 1
else
- LOADER='wget -O-'
- HEAD_LOADER="$LOADER --spider"
+ LOADER='wget -O-'
+ HEAD_LOADER="$LOADER --spider"
fi
-else
+ else
LOADER=curl
HEAD_LOADER="$LOADER -I"
-fi
+ fi
-if ! $HEAD_LOADER $SURL >/dev/null 2>/dev/null ;then
+ if ! $HEAD_LOADER $SURL >/dev/null 2>/dev/null ;then
echo "Cannot find supernode package, check if your internet is working"
exit 1
-fi
+ fi
-#check if everything is installed
-if [ $OS = 'android' ]; then
+ #check if everything is installed
+ if [ $OS = 'android' ]; then
if ! test -e /data/data/org.poirsouille.tinc_gui/files/tincd; then
- echo "Please install tinc-gui"
- exit 1
+ echo "Please install tinc-gui"
+ exit 1
else
- TINCBIN=/data/data/org.poirsouille.tinc_gui/files/tincd
- DEV="/dev/tun"
- if [ $TINCDIR = 'auto' ]; then TINCDIR="/usr/local/etc/tinc" ;fi
- if [ $TEMPDIR = 'auto' ]; then TEMPDIR="/storage/sdcard0/tinc-fu" ;fi
- mount -o remount,rw /
- mount -o remount,rw /system
+ TINCBIN=/data/data/org.poirsouille.tinc_gui/files/tincd
+ DEV="/dev/tun"
+ if [ $TINCDIR = 'auto' ]; then TINCDIR="/usr/local/etc/tinc" ;fi
+ if [ $TEMPDIR = 'auto' ]; then TEMPDIR="/storage/sdcard0/tinc-fu" ;fi
+ mount -o remount,rw /
+ mount -o remount,rw /system
fi
-elif [ $OS = 'osx' ]; then
+ elif [ $OS = 'osx' ]; then
if ! exists tincd >/dev/null; then
- echo "Please install tinc"
- exit 1
+ echo "Please install tinc"
+ exit 1
else
- TINCBIN=tincd
- DEV="/dev/net/tun"
- if [ $TINCDIR = 'auto' ]; then TINCDIR="/usr/local/etc/tinc" ;fi
- if [ $TEMPDIR = 'auto' ]; then TEMPDIR="/tmp/tinc-install-fu" ;fi
+ TINCBIN=tincd
+ DEV="/dev/net/tun"
+ if [ $TINCDIR = 'auto' ]; then TINCDIR="/usr/local/etc/tinc" ;fi
+ if [ $TEMPDIR = 'auto' ]; then TEMPDIR="/tmp/tinc-install-fu" ;fi
fi
-else
+ else
if ! exists tincd >/dev/null; then
- echo "Please install tinc"
- exit 1
+ echo "Please install tinc"
+ exit 1
else
- TINCBIN=tincd
- DEV="/dev/net/tun"
- if [ $TINCDIR = 'auto' ]; then TINCDIR="/etc/tinc" ;fi
- if [ $TEMPDIR = 'auto' ]; then TEMPDIR="/tmp/tinc-install-fu" ;fi
+ TINCBIN=tincd
+ DEV="/dev/net/tun"
+ if [ $TINCDIR = 'auto' ]; then TINCDIR="/etc/tinc" ;fi
+ if [ $TEMPDIR = 'auto' ]; then TEMPDIR="/tmp/tinc-install-fu" ;fi
fi
-fi
+ fi
-#generate full subnet information for v4
+ #generate full subnet information for v4
-#test if tinc directory already exists
-if test -e $TINCDIR/$NETNAME; then
+ #test if tinc directory already exists
+ if test -e $TINCDIR/$NETNAME; then
echo "tinc config directory $TINCDIR/$NETNAME does already exist. (backup and) delete config directory and restart"
exit 1
-fi
+ fi
-#get tinc-hostfiles
-mkdir -p $TEMPDIR/hosts
-$LOADER $URL | tar zx -C $TEMPDIR/hosts/
+ #get tinc-hostfiles
+ mkdir -p $TEMPDIR/hosts
+ $LOADER $URL | tar zx -C $TEMPDIR/hosts/
-#check for free ip
-#version 4
-until check_ip_taken $IP4; do
+ #check for free ip
+ #version 4
+ until check_ip_taken $IP4; do
if [ $RAND4 -eq 1 ]; then
- IP4="$SUBNET4.$(( $(head /dev/urandom | tr -dc "123456789" | head -c3) %255)).$(( $(head /dev/urandom | tr -dc "123456789" | head -c3) %255))"
+ IP4="$SUBNET4.$(( $(head /dev/urandom | tr -dc "123456789" | head -c3) %255)).$(( $(head /dev/urandom | tr -dc "123456789" | head -c3) %255))"
else
- printf 'choose new ip: '
+ printf 'choose new ip: '
+ read IP4
+ while ! check_ip_valid4 $IP4; do
+ printf 'the ip is invalid, retard, choose a valid ip: '
read IP4
- while ! check_ip_valid4 $IP4; do
- printf 'the ip is invalid, retard, choose a valid ip: '
- read IP4
- done
+ done
fi
-done
+ done
-#version 6
-until check_ip_taken $IP6; do
+ #version 6
+ until check_ip_taken $IP6; do
if [ $RAND6 -eq 1 ]; then
- NETLENGTH=$(expr $(expr 128 - $MASK6) / 4)
- IP6="$SUBNET6$(head /dev/urandom | tr -dc "0123456789abcdef" | head -c$NETLENGTH | sed 's/..../:&/g')" #todo: generate ip length from hostmask
+ NETLENGTH=$(expr $(expr 128 - $MASK6) / 4)
+ IP6="$SUBNET6$(head /dev/urandom | tr -dc "0123456789abcdef" | head -c$NETLENGTH | sed 's/..../:&/g')" #todo: generate ip length from hostmask
else
- printf 'ip taken, choose new ip: '
+ printf 'ip taken, choose new ip: '
+ read IP6
+ while ! check_ip_valid6 $IP6; do
+ printf 'the ip is invalid, retard, choose a valid ip: '
read IP6
- while ! check_ip_valid6 $IP6; do
- printf 'the ip is invalid, retard, choose a valid ip: '
- read IP6
- done
+ done
fi
-done
+ done
-#check for free hostname
-get_hostname $HOSTN
+ #check for free hostname
+ get_hostname $HOSTN
-#create the configs
-mkdir -p $TINCDIR/$NETNAME
-cd $TINCDIR/$NETNAME
+ #create the configs
+ mkdir -p $TINCDIR/$NETNAME
+ cd $TINCDIR/$NETNAME
-if [ $OS = 'openwrt' ]; then
+ if [ $OS = 'openwrt' ]; then
mkdir hosts
$LOADER $SURL | tar xz -C hosts/
-else
+ else
mv $TEMPDIR/hosts ./
-fi
+ fi
-rm -r $TEMPDIR || echo "$TEMPDIR does not exist, skipping removal"
+ rm -r $TEMPDIR || echo "$TEMPDIR does not exist, skipping removal"
-echo "Subnet = $IP4" > hosts/$HOSTN
-echo "Subnet = $IP6" >> hosts/$HOSTN
+ echo "Subnet = $IP4" > hosts/$HOSTN
+ echo "Subnet = $IP6" >> hosts/$HOSTN
-cat>tinc.conf<<EOF
+ cat>tinc.conf<<EOF
Name = $HOSTN
Device = $DEV
@@ -289,10 +201,10 @@ ConnectTo = pigstarter
ConnectTo = pico
EOF
-host2subnet $MASK4
-
-#check if ip is installed
-if exists ip >/dev/null; then
+ host2subnet $MASK4
+
+ #check if ip is installed
+ if exists ip >/dev/null; then
echo 'dirname="`dirname "$0"`"' > tinc-up
echo '' >> tinc-up
echo 'conf=$dirname/tinc.conf' >> tinc-up
@@ -310,7 +222,7 @@ if exists ip >/dev/null; then
echo "addr6=\$(sed -n \"s|^ *Subnet *= *\\($SUBNET6[:][^ ]*\\) *\$|\\\\1|p\" \$host)" >> tinc-up
echo 'ip -6 addr add $addr6 dev $INTERFACE' >> tinc-up
echo "ip -6 route add $SUBNET6::/$MASK6 dev \$INTERFACE" >> tinc-up
-else
+ else
echo 'dirname="`dirname "$0"`"' > tinc-up
echo '' >> tinc-up
echo 'conf=$dirname/tinc.conf' >> tinc-up
@@ -322,37 +234,129 @@ else
echo "addr4=\$(sed -n \"s|^ *Subnet *= *\\($SUBNET4[.][^ ]*\\) *$|\\\\1|p\" \$host)" >> tinc-up
echo 'ifconfig $INTERFACE $addr4' >> tinc-up
echo "route add -net $FULLSUBNET netmask $RMASK dev \$INTERFACE " >> tinc-up
-fi
-
-#fix permissions
-chmod +x tinc-up
-chown -R 0:0 .
-
-#generate keys with tinc
-if exists tincctl ; then
- yes | tincctl -n $NETNAME generate-keys
- cat rsa_key.pub >> hosts/$HOSTN
-else
+ fi
+
+ #fix permissions
+ chmod +x tinc-up
+ chown -R 0:0 .
+
+ #generate keys with tinc
+ if exists tinc ; then
+ yes | tinc -n $NETNAME generate-keys
+ else
yes | $TINCBIN -n $NETNAME -K
-fi
-
-if [ $OS = 'android' ]; then
+ fi
+
+ if [ $OS = 'android' ]; then
mkdir /etc/tinc
cd /
mv $TINCDIR/$NETNAME /etc/tinc/
cd /etc/tinc/$NETNAME
-fi
-#write to irc-channel
-NICK="${HOSTN}_$(head /dev/urandom | tr -dc "0123456789" | head -c3)"
+ fi
+ #write to irc-channel
+ NICK="${HOSTN}_$(head /dev/urandom | tr -dc "0123456789" | head -c3)"
+
+ ( echo "NICK $NICK";
+ echo "USER $NICK $IRCSERVER bla : $NICK";
+ echo "JOIN $IRCCHANNEL";
+ sleep 23;
+ echo "PRIVMSG $IRCCHANNEL : This is $HOSTN";
+ sed "s/^\(.*\)/PRIVMSG $IRCCHANNEL : \1/" hosts/$HOSTN;
+ sleep 5; ) | $TELNET $IRCSERVER $IRCPORT
+
+
+ # finish what you have begun!
+ tincd -n $NETNAME
+}
-( echo "NICK $NICK";
- echo "USER $NICK $IRCSERVER bla : $NICK";
- echo "JOIN $IRCCHANNEL";
- sleep 23;
- echo "PRIVMSG $IRCCHANNEL : This is $HOSTN";
- sed "s/^\(.*\)/PRIVMSG $IRCCHANNEL : \1/" hosts/$HOSTN;
- sleep 5; ) | $TELNET $IRCSERVER $IRCPORT
+#convert hostmask to subnetmask only version 4
+host2subnet()
+{
+ NEEDDOTSINSUB=$(expr 3 - $( echo $SUBNET4 | tr -C -d . | wc -c))
+ case $NEEDDOTSINSUB in
+ 3) FULLSUBNET=$SUBNET4.0.0.0 ;;
+ 2) FULLSUBNET=$SUBNET4.0.0 ;;
+ 1) FULLSUBNET=$SUBNET4.0 ;;
+ 0) FULLSUBNET=$SUBNET4 ;;
+ *) echo "cannot read subnet" && exit 1;;
+ esac
+}
-# finish what you have begun!
-tincd -n $NETNAME
+#check if ip is valid ipv4 function
+check_ip_valid4()
+{
+ if [ "$(echo $1 | awk -F"\." ' $0 ~ /^([0-9]{1,3}\.){3}[0-9]{1,3}$/ && $1 <=255 && $2 <= 255 && $3 <= 255 && $4 <= 255 ' 2>/dev/null)" == "$1" ] && [ ${1:0:${#SUBNET4}} == $SUBNET4 ]
+ then
+ return 0
+ else
+ return 1
+ fi
+}
+
+#check if ip is valid ipv6 function
+check_ip_valid6()
+{
+ if [ "$(echo $1 | awk -F"." ' $0 ~ /^([0-9a-fA-F]{1,4}\:){7}[0-9a-fA-F]{1,4}$/' 2>/dev/null)" == $1 ] && [ ${1:0:${#SUBNET6}} == $SUBNET6 ]
+ then
+ return 0
+ else
+ return 1
+ fi
+}
+
+#check if ip is taken function
+check_ip_taken()
+{
+ if grep -q -r -E "$1(#|/)" $TEMPDIR/hosts/ ;then
+ return 1
+ else
+ return 0
+ fi
+}
+
+#if hostname is taken, count upwards until it isn't taken function
+get_hostname()
+{
+ TSTFILE=$TEMPDIR/hosts/$1
+ LCOUNTER=0
+ if test -e $TSTFILE; then
+ while test -e $TSTFILE; do
+ : $((LCOUNTER+=1))
+ TSTFILE=$TEMPDIR/hosts/$1$LCOUNTER
+ done
+ HOSTN=$1$LCOUNTER
+ else
+ HOSTN=$1
+ fi
+}
+
+#os autodetection
+find_os()
+{
+ if grep -qe 'Linux' /etc/*release 2>/dev/null || grep -qe 'Linux' /etc/issue 2>/dev/null; then
+ OS='linux'
+ elif exists getprop ; then
+ OS='android'
+ elif test -e /etc/openwrt_release; then
+ OS='openwrt'
+ elif uname -s | grep -qi 'darwin'; then
+ OS='osx'
+ else
+ echo "Cannot determine your operating system, falling back to Linux"
+ OS='linux'
+ fi
+}
+
+find_telnet(){
+ if exists telnet >/dev/null;then
+ TELNET="`command -v telnet`"
+ elif exists busybox >/dev/null;then
+ TELNET="`command -v busybox` telnet"
+ else
+ echo "cannot find telnet binary, please install either telnet-client or busybox"
+ echo "bailing out!"
+ exit 1
+ fi
+}
+main