upload.sh 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. #!/bin/bash
  2. DEFMODE=main
  3. MODE=${2:-$DEFMODE}
  4. IAPPASS=rotekucn
  5. LOGIN=admin
  6. PASS=12345
  7. DB_FW=""
  8. #MAIN_FW=./output/RTPS_05502xx.bin
  9. MAIN_FW=./output/IBP.bin
  10. SERVICE_FW=./output/SERVICE_05502xx.bin
  11. function usage {
  12. echo -e "Usage: upload.sh {ip|mac} {full|main|db|service}\n\
  13. \tmain - update main firmware\n\
  14. \tdb - update doughter board firmware\n\
  15. \service - upload service firmware\n\
  16. \tfull - update both main and doughter boards firmware"
  17. }
  18. function wait_ip {
  19. while ! ping -c1 -W1 $IP > /dev/null
  20. do
  21. echo "Waiting IP.."
  22. sleep 1
  23. ((i++))
  24. if [ $i == 10 ]
  25. then
  26. echo -e "\r\nError. IP not found!"
  27. exit 1
  28. fi
  29. done
  30. }
  31. function need_login {
  32. curl -s --compressed -b /tmp/cookies.txt -c /tmp/cookies.txt http://$IP/index.html | grep -q "Авторизация"
  33. }
  34. function need_iap {
  35. curl -s --compressed -b /tmp/cookies.txt -c /tmp/cookies.txt http://$IP/index.html | grep -q "Параметры"
  36. }
  37. function log_out {
  38. curl -s -b /tmp/cookies.txt -c /tmp/cookies.txt http://$IP/logout.cgi > /dev/null
  39. }
  40. function log_in {
  41. curl -s -b /tmp/cookies.txt -c /tmp/cookies.txt -d "login=$LOGIN&password=$PASS" http://$IP/login.cgi > /dev/null
  42. }
  43. function boot_iap {
  44. curl -s -X GET -b /tmp/cookies.txt -c /tmp/cookies.txt http://$IP/fw_update.cgi > /dev/null
  45. }
  46. function upload_db_fw {
  47. echo $(curl --compressed http://$IP/upload.cgi -H 'Expect:' -F filedata=@$DB_FW --progress-bar)
  48. }
  49. function upload_main_fw {
  50. echo $(curl --compressed http://$IP/upload.cgi -H 'Expect:' -F filedata=@$MAIN_FW --progress-bar)
  51. }
  52. function upload_service_fw {
  53. TMP_FILE=$(mktemp -d /tmp/upload.XXXXX)/$(basename $MAIN_FW)
  54. cp $SERVICE_FW $TMP_FILE
  55. echo $(curl --compressed http://$IP/upload.cgi -H 'Expect:' -F filedata=@$TMP_FILE --progress-bar)
  56. }
  57. function goback {
  58. curl -s http://$IP/goback.cgi
  59. }
  60. if [ $# -lt 1 ]
  61. then
  62. echo "Error: Not enough parameters"
  63. usage
  64. exit 1
  65. fi
  66. #Check passed parameter
  67. if [[ "$1" =~ ^([a-fA-F0-9]{2}[:-]){5}[a-fA-F0-9]{2}$ ]]
  68. then
  69. #Passed MAC
  70. MAC=$(echo $1 | tr '[:upper:]' '[:lower:]' | tr '-' ':')
  71. IP=$(sudo arp-scan -l | grep $MAC | cut -d$'\t' -f1)
  72. elif [[ "$1" =~ ^([0-9]{1,3}\.){3}[0-9]{1,3}$ ]]
  73. then
  74. #Passed IP
  75. IP=$1
  76. else
  77. echo "Error: Invalid parameter"
  78. usage
  79. exit 1
  80. fi
  81. ping -c1 -W1 $IP 2>/dev/null 1>/dev/null
  82. if [ "$?" = 0 ]
  83. then
  84. echo "Host found ($IP)"
  85. else
  86. echo "Error: Host not found ($IP)"
  87. exit 1
  88. fi
  89. if need_login
  90. then
  91. echo "Logging in.."
  92. log_in
  93. fi
  94. if need_iap
  95. then
  96. echo "Reboot to IAP.."
  97. boot_iap
  98. sleep 10
  99. wait_ip
  100. fi
  101. if [[ $MODE = "full" || $MODE = "db" ]]
  102. then
  103. echo "Prog db firmware.."
  104. db_res=$(upload_db_fw)
  105. if [[ $db_res == "1" ]]
  106. then
  107. echo "OK"
  108. else
  109. echo "Error"
  110. echo "Update failed!"
  111. exit 1
  112. fi
  113. sleep 1
  114. fi
  115. if [[ $MODE = "db" ]]
  116. then
  117. goback
  118. echo "Successfully updated"
  119. exit 0
  120. fi
  121. if [[ $MODE = "full" || $MODE = "main" ]]
  122. then
  123. echo "Prog main firmware.."
  124. main_res=$(upload_main_fw)
  125. if [[ $main_res == "1" ]]
  126. then
  127. echo "OK"
  128. else
  129. echo "Error"
  130. echo "Update failed!"
  131. exit 1
  132. fi
  133. fi
  134. if [[ $MODE = "service" ]]
  135. then
  136. echo "Prog service firmware.."
  137. res=$(upload_service_fw)
  138. if [[ $res == "1" ]]
  139. then
  140. echo "OK"
  141. else
  142. echo "Error"
  143. echo "Update failed!"
  144. exit 1
  145. fi
  146. rm -rf $TMP_FILE
  147. fi
  148. echo "Successfully updated"
  149. exit 0