LaFonera Software Heartbeat-dev
From DD-WRT Wiki
Revision as of 20:39, 19 December 2007 (edit) Aebas (Talk | contribs) m (→Installation) ← Previous diff |
Current revision (11:57, 14 May 2010) (edit) (undo) Glenn (Talk | contribs) (catspec Category:LaFonera (en)) |
||
(One intermediate revision not shown.) | |||
Line 323: | Line 323: | ||
= Help developing the code = | = Help developing the code = | ||
If you want to help developing the original dd-wrt LaFonera Heartbeat code just contact me (ben@wildblue.de) and/or make updates here and contact me. | If you want to help developing the original dd-wrt LaFonera Heartbeat code just contact me (ben@wildblue.de) and/or make updates here and contact me. | ||
+ | |||
+ | [[Category:LaFonera (en)]] |
Current revision
Contents |
[edit] The LaFonera Heartbeat Script
This work is based on the work of freddy (http://fon.freddy.eu.org), futejia (http://futejia.blogspot.com), krikkit (http://www.krikkit.net) and wildblue (www.wildblue.de)
[edit] Installation
Paste this into the Additional Cron Jobs box on the Admin > Management page then click Apply Settings.
*/5 * * * * root /tmp/simthefon/simthefon cron >/tmp/simthefon/simthefon.log
Paste this into the Commands box on the Admin > Commands page then click Save Startup.
#!/bin/sh mkdir /tmp/simthefon cat > "/tmp/simthefon/heartbeat" <<- EOT #!/bin/sh sleep 30 cd /tmp/simthefon /usr/bin/wget http://www.wildblue.de/fonera/heartbeat/key /usr/bin/wget http://www.wildblue.de/fonera/heartbeat/simthefon /usr/bin/wget http://www.wildblue.de/fonera/heartbeat/known_hosts cat /tmp/simthefon/known_hosts >> /tmp/root/.ssh/known_hosts chmod a+x /tmp/simthefon/simthefon ( /tmp/simthefon/simthefon cron >/tmp/simthefon/simthefon.log & ) & EOT cat > "/tmp/cron.d/heartbeat" <<- EOT SHELL=/bin/sh PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin HOME=/tmp/root */5 * * * * root /tmp/simthefon/simthefon cron >/tmp/simthefon/simthefon.log EOT chmod a+x /tmp/simthefon/heartbeat /tmp/simthefon/heartbeat stopservice cron && startservice cron
[edit] Code Reference
[edit] known_hosts file
download.fon.com ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAIEA0zJFtj5NtrVsj8+qG0dtPE8WpHHDpTXp5+d3vvtSS7Hx7vYHyrfN/8PBVrrYOgl4dySY65sGtq34EU04VN4a7xQHSKJBunDUSQ/2Xz+eyo53LCVeFy1zNRCmB6jrFlJQvl5yviLvXmMtOGxG8Z1dfu4qavfGtBxwtwxKPKuiyhs=
[edit] http://wildblue.de/fonera/heartbeat/simthefon
#!/bin/sh ########################################## # simthefon.sh # # # # simulate an active LaFonera with an # # alternative firmware on maps.fon.com # # # # First version made by # # fon.freddy.eu.org@freddy.eu.org # # http://fon.freddy.eu.org/ # # # # modified by futejia # # futejia.blog@gmail.com # # http://futejia.blogspot.com/ # # # # updated to work on dd-wrt (2007-02-02) # # http://www.krikkit.net/contact # # # # made it working (2007-02-05) # # MailTo ben@wildblue.de # # # # A step by step guide is available at # # www.wildblue.de/fonera/heartbeat/howto # # # ########################################## # version 2.0.0 (modified for DD-WRT) # # version 2.0.1 (autodetection MAC) # # version 2.0.2 (added cron mode) # # version 2.0.3 (changed MAC-retrival) # # version 2.0.4 (changed update freq.) # ########################################## echo "***********************************************************" echo "* simthefon - heartbeat script for the LaFonera *" echo "* This script makes your LaFonera active on maps.fon.com *" echo "* *" echo "* Version 2.0.4 *" echo "* This Version made by ben@wildblue.de *" echo "***********************************************************" WLMAC="$(nvram get ath0_hwaddr )" #the WLAN mac-adress MAC="$(nvram get et0macaddr)" #the WAN mac-adress FONREV=2 FIRMWARE=0.7.1 FONKEY=/tmp/simthefon/key #the path to the fon-public-key DEVICE="fonera" CHILLVER="1.0" THCLVER="1.0" echo echo "Your WLAN MAC is: " $WLMAC echo "Your Ethernet MAC is:" $MAC echo echo "* starting ..." echo "mode='start' wlmac='$WLMAC' mac='$MAC' fonrev='$FONREV' firmware='$FIRMWARE' chillver='$CHILLVER' thclver='$THCLVER' device='$DEVICE'" | dbclient -T -p 1937 -i $FONKEY openwrt@download.fon.com > startscript exec_every_mode () { echo "* making connection to fon" echo "mode='cron' wlmac='$WLMAC' mac='$MAC' fonrev='$FONREV' firmware='$FIRMWARE'" | dbclient -T -p 1937 -i $FONKEY openwrt@download.fon.com > newscript if cat newscript | grep http > /dev/null 2>&1 then echo "* downloading a new version" DWL_DATE=$(date +%Y%m%d-%H%M) FON_FILE=$DWL_DATE.fon wget -q -O $FON_FILE $(cat newscript | grep http | awk '{print $2}') rm newscript #begin untar package dd if=$FON_FILE of=VERSION_FILE bs=1 count=4 > /dev/null 2>&1 VERSION=$(cat VERSION_FILE) rm VERSION_FILE dd if=$FON_FILE of=OFFSET_FILE bs=1 count=3 skip=4 > /dev/null 2>&1 OFFSET=$(expr $(cat OFFSET_FILE)) rm OFFSET_FILE dd if=$FON_FILE of=SIGNATURE_FILE bs=1 count=$OFFSET skip=7 > /dev/null 2>&1 rm SIGNATURE_FILE TO_SKIP=$(expr $OFFSET + 7) dd if=$FON_FILE of=tar_file bs=1 skip=$TO_SKIP > /dev/null 2>&1 tar zx -f ./tar_file rm ./tar_file UPGRADE_FILE=$(cat upgrade | grep tar | awk '{print $3}') rm -f ./upgrade rm -f hotfix mkdir fon-firmware > /dev/null 2>&1 tar xzf $UPGRADE_FILE -C fon-firmware/ rm $UPGRADE_FILE #end untar package #begin get new versions FONREV=$(cat fon-firmware/etc/fon_revision) FIRMWARE=$(cat fon-firmware/etc/fon_version) echo "* Version is now $FIRMWARE, Revision is now $FONREV" #end get new versions else echo "* Can't find a new version"; fi } exec_cron_mode () { echo "* Cron Mode - repeating must be done with a cronjob!" echo exec_every_mode exit } exec_standard_mode () { while true; do echo "* Standard mode - Repeating is done with a sleep command!" echo exec_every_mode RANDOM_S=$((0x$(head -c2 /dev/urandom | hexdump | awk '$2 > 0 {print $2}') % 1800)) TIMTS=$(echo "`expr 1800 + $RANDOM_S`") echo "* going to sleep for $TIMTS seconds" sleep $TIMTS done; exit } case "$1" in cron) exec_cron_mode ;; *) exec_standard_mode exit esac
[edit] The Fon Key
http://www.wildblue.de/fonera/heartbeat/key or http://fon.freddy.eu.org/heartbeat/fonkey
[edit] Alternative Hotspot Script
Warning: The script may cause router to hang after a few days usage. I'm not sure why yet... But the web control panel will show no date / time info, and telnet commands will return "sh - cannot fork". Power cycling the router will solve the problem. I'm trying to figure out a fix or if it's just my router causing problems.
This is a modified version of freddy's thinclient script that uses cron to run and only downloads two files to the Fonera. To install, firstly create a cronjob for the heartbeat by adding the following to the Additional Cron Jobs box on the Admin > Management tab. Ensure you copy and paste, as the spaces between *'s must be tabs and you can't effiectively add these yourself on the web page (tabs don't work).
24,54 * * * * root /tmp/thinclient cron > /dev/null 2>&1 &
Click Apply Settings to save the cron job.
Now just copy and paste the following in to the commands box on the Administration > Commands tab in the web control panel, click Save Startup and reboot the router. If you think it will take longer for an internet connection to be established by the Fonera, just increase the sleep time (in seconds) that is currently set to 10 minutes (600 seconds).
#!/bin/sh # wait until net connection established sleep 600 # get heartbeat files cd /tmp wget http://www.inaudible.co.uk/perm/fonera/thinclient wget http://fon.freddy.eu.org/heartbeat/fonkey chmod 755 /tmp/thinclient
The script will download from my personal web server a modified version of Freddy's original thinclient script ( http://fon.freddy.eu.org/heartbeat/thinclient ) using additional information from wildblue's simthefon script to make it work with the La Fonera, and also downloads freddy's original fonkey file from freddy's webserver.
Changes include "/jffs" changed to "/tmp", FONREV and FIRMWARE changed to the La Fonera's, DEVICE="fonera" added with extra device variables in exec_start_mode, and "| logger" replaced by "> /dev/null 2>&1 &" to stop logging.
[edit] http://www.inaudible.co.uk/perm/fonera/thinclient
#!/bin/sh # #version 1.0.6F (modified by pepsi_max2k for la fonera) # THINCLIENTPATH="/tmp" # path of this file ROOTHOME="/tmp/root" # root's home dir SSHPATH="/usr/bin/ssh" # path to ssh KEY="/tmp/fonkey" # private key for fetching the info from the FON server THINCLIENTOUT="/tmp/.thinclient.sh" # output file THINCLIENTOUTDEFAULT="33" # default size of the output file THCLVER="1.0" CHILLVER="1.0-1" FONREV="5" # /etc/fon_revision FIRMWARE="0.7.1" # taken from /etc/banner (without Beta) DEVICE="fonera" USER="openwrt" SERVER="download.fon.com" PORT="1937" FONSIG="$SERVER ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAIEA0zJFtj5NtrVsj8+qG0dtPE8WpHHDpTXp5+d3vvtSS7Hx7vYHyrfN/8PBVrrYOgl4dySY65sGtq34EU04VN4a7xQHSKJBunDUSQ/2Xz+eyo53LCVeFy1zNRCmB6jrFlJQvl5yviLvXmMtOGxG8Z1dfu4qavfGtBxwtwxKPKuiyhs=" # gather information about this machine WLMAC="$(/usr/sbin/nvram get ath0_hwaddr)" ETMAC="$(/usr/sbin/nvram get et0macaddr)" MAC=`echo $WLMAC|tr A-Z a-z` check_env () { [ -d "$ROOTHOME/.ssh" ] || mkdir $ROOTHOME/.ssh [ -f "$ROOTHOME/.ssh/known_hosts" ] || touch $ROOTHOME/.ssh/known_hosts [ `grep -c $SERVER $ROOTHOME/.ssh/known_hosts` = "0" ] && echo $FONSIG >> $ROOTHOME/.ssh/known_hosts } exec_cron_mode () { check_env sleep "$((0x$(head /dev/urandom |hexdump |awk '$2 > 0 {print $2}'|head -n1) % 60))" echo "mode='cron' wlmac='$MAC' mac='$ETMAC' fonrev='$FONREV' firmware='$FIRMWARE'" | $SSHPATH -T ${PORT:+ -p $PORT}${KEY:+ -i $KEY} "${USER}@${SERVER}" > $THINCLIENTOUT echo "sent: mode='cron' wlmac='$MAC' mac='$ETMAC' fonrev='$FONREV' firmware='$FIRMWARE'" exec_check_thinclient } exec_start_mode () { sleep 60 # make sure WAN is up and crond is running check_env [ -f "/tmp/crontab" ] || touch /tmp/crontab [ `grep -c thinclient /tmp/crontab` = "0" ] && echo "24,54 * * * * root $THINCLIENTPATH/thinclient cron > /dev/null 2>&1 &" >> /tmp/crontab echo "mode='start' wlmac='$MAC' mac='$ETMAC' fonrev='$FONREV' firmware='$FIRMWARE' chillver='$CHILLVER' thclver='$THCLVER' device='$DEVICE'" | $SSHPATH -T ${PORT:+ -p $PORT}${KEY:+ -i $KEY} "${USER}@${SERVER}" > $THINCLIENTOUT echo "sent: mode='start' wlmac='$MAC' mac='$ETMAC' fonrev='$FONREV' firmware='$FIRMWARE' chillver='$CHILLVER' thclver='$THCLVER' device='$DEVICE'" exec_check_thinclient } exec_check_thinclient () { if [ -f $THINCLIENTOUT ] then THINSIZE="$(wc -c < $THINCLIENTOUT)" if [ $THINSIZE = "0" ] then echo "Something is wrong, $THINCLIENTOUT is empty" elif [ $THINSIZE != "33" ] then echo "Something is different in $THINCLIENTOUT:" cat $THINCLIENTOUT else echo "$THINCLIENTOUT is the default one, deleted" rm $THINCLIENTOUT fi else echo "Something is wrong, $THINCLIENTOUT does not exist!" fi } case "$1" in cron) exec_cron_mode ;; start) exec_start_mode ;; check) exec_check_thinclient ;; *) echo "Usage: `basename $0` {cron|start|check}" exit esac
[edit] Help developing the code
If you want to help developing the original dd-wrt LaFonera Heartbeat code just contact me (ben@wildblue.de) and/or make updates here and contact me.