annotate scripts/update_board @ 527:1c68ad13bbe4 API-update

stricthostchecking is added to each check_board_alive
author Giulio Moro <giuliomoro@yahoo.it>
date Thu, 23 Jun 2016 18:15:26 +0100
parents 4656f886175e
children fcf36d293458
rev   line source
giuliomoro@517 1 #!/bin/bash
andrewm@58 2 #
giuliomoro@377 3 # This script copies the core Bela files to the BeagleBone Black
andrewm@58 4 # in preparation for building projects. It will remove any existing
giuliomoro@377 5 # Bela directory before copying the files over
giuliomoro@447 6
giuliomoro@461 7 # Find location of this script so we can locate the rest of the files
giuliomoro@461 8 SCRIPTDIR=$(dirname "$0")
giuliomoro@461 9 [ -z $SCRIPTDIR ] && SCRIPTDIR="./" || SCRIPTDIR=$SCRIPTDIR/
giuliomoro@461 10 . $SCRIPTDIR.bela_common || { echo "You must be in Bela/scripts to run these scripts" | exit 1; }
giuliomoro@461 11
giuliomoro@461 12 [ -z "$IDE_FOLDER" ] && IDE_FOLDER=$SCRIPTDIR/../../bela-ide/
giuliomoro@413 13
giuliomoro@413 14 FILES_TO_COPY="core include Makefile libNE10.a libprussdrv.a examples Doxyfile"
giuliomoro@413 15
giuliomoro@413 16 # The following variables are manually copied from the Makefile.
giuliomoro@413 17 # It is a bit nasty, but here we need to handle the case that the board may be
giuliomoro@413 18 # in any arbitrarily (bad) condition and try to handle it the best we can
giuliomoro@413 19 BELA_IDE_SCREEN_NAME=IDE-Bela
giuliomoro@413 20 SCREEN_NAME=Bela
giuliomoro@413 21
giuliomoro@428 22 usage ()
andrewm@58 23 {
andrewm@58 24 THIS_SCRIPT=`basename "$0"`
giuliomoro@452 25 echo "Usage: $THIS_SCRIPT [--clean] [--no-frills] [-dy ] [-i user@ip] [-b /path/to/remote/Bela]"
andrewm@58 26
andrewm@58 27 echo "
giuliomoro@413 28 This script updates the core Bela files on the BeagleBone, bringing it up
giuliomoro@415 29 to date with the files in the folder on the host computer.
giuliomoro@413 30 The script must be run once to initialize the board before running any of
giuliomoro@413 31 the other scripts in this directory. It must also be run every time you
giuliomoro@413 32 wish to update the core code.
giuliomoro@413 33 Running this script will discard all changes to the core code on the remote
giuliomoro@413 34 end.
giuliomoro@413 35
giuliomoro@413 36 Command line options:
giuliomoro@413 37 -i arg : allows to set the username and IP address of the remote end (default: $BBB_ADDRESS)
giuliomoro@413 38 -b arg : allows to set the path to the Bela folder on the remote end. Use quotes if you use the \"~\" symbol (default: $BBB_BELA_HOME)
giuliomoro@413 39 --clean : removes all the files in the $BBB_BELA_HOME folder, INCLUDING any source code you may have in the $BBB_BELA_HOME/projects/ subdirectory.
giuliomoro@452 40 -d : skips re-generating Doxygen documentation on the board.
giuliomoro@484 41 -n : do not try to update the IDE.
giuliomoro@452 42 --no-frills : skips some optional commands.
giuliomoro@413 43 -y : does not prompt the user before deleting the remote files.
giuliomoro@413 44 "
andrewm@58 45 }
giuliomoro@412 46
giuliomoro@428 47 signal_handler ()
giuliomoro@428 48 {
giuliomoro@428 49 echo
giuliomoro@428 50 exit
giuliomoro@428 51 }
giuliomoro@428 52
giuliomoro@432 53 trap signal_handler 2
giuliomoro@428 54
giuliomoro@428 55 error_handler () {
giuliomoro@412 56 [ $1 -eq 0 ] && printf "done\n" || { [ -z "$2" ] && printf "\nAn error occurred. Is the board connected?\n" || printf "$2"; exit 1; }
giuliomoro@412 57 }
andrewm@58 58
giuliomoro@452 59 FULL=1
andrewm@58 60 OPTIND=1
giuliomoro@412 61 ALWAYS_YES=0
giuliomoro@413 62 RESET_BOARD=0
giuliomoro@452 63 DOXYGEN=1
giuliomoro@484 64 UPDATE_IDE=1
giuliomoro@413 65 while [ "$1" != "" ]; do
giuliomoro@413 66 case $1 in
giuliomoro@413 67 -b)
giuliomoro@413 68 shift
giuliomoro@413 69 BBB_BELA_HOME=$1
giuliomoro@413 70 ;;
giuliomoro@413 71 -i)
giuliomoro@413 72 shift
giuliomoro@413 73 BBB_ADDRESS=$1
giuliomoro@413 74 ;;
giuliomoro@413 75 --clean)
giuliomoro@413 76 RESET_BOARD=1
giuliomoro@413 77 ;;
giuliomoro@452 78 -d)
giuliomoro@452 79 DOXYGEN=0
giuliomoro@452 80 ;;
giuliomoro@484 81 -n)
giuliomoro@484 82 UPDATE_IDE=0
giuliomoro@484 83 ;;
giuliomoro@452 84 --no-frills)
giuliomoro@452 85 FULL=0
giuliomoro@452 86 ;;
giuliomoro@413 87 -y)
giuliomoro@413 88 ALWAYS_YES=1
giuliomoro@413 89 ;;
giuliomoro@413 90 *)
giuliomoro@413 91 usage
giuliomoro@413 92 exit 1
giuliomoro@413 93 ;;
giuliomoro@412 94 esac
giuliomoro@413 95 shift
andrewm@58 96 done
andrewm@58 97
andrewm@58 98
giuliomoro@527 99 echo $BBB_ADDRESS
giuliomoro@514 100 check_board_alive
giuliomoro@454 101 # Check if destination folder exists
giuliomoro@454 102 # the StrictHostKeyChecking no should prevent the unkown host prompt
giuliomoro@527 103 ssh $BBB_ADDRESS [ -d $BBB_BELA_HOME ] && DESTINATION_EMPTY=0 || DESTINATION_EMPTY=1
giuliomoro@452 104 # Set the date on the board
giuliomoro@452 105 [ $FULL -eq 1 ] && set_date
giuliomoro@413 106
giuliomoro@413 107 if [ $DESTINATION_EMPTY -eq 0 ];
andrewm@58 108 then
giuliomoro@413 109 echo "Updating the Bela core code in $BBB_ADDRESS:$BBB_BELA_HOME"
giuliomoro@413 110 if [ $RESET_BOARD -eq 1 ];
giuliomoro@413 111 then
giuliomoro@413 112 printf "DANGER: you are about to perform a HARD RESET, which will DELETE all the existing files from the folder $BBB_BELA_HOME on the BeagleBone Black.\nAre you sure you want to continue? (y/N) "
giuliomoro@413 113 else
giuliomoro@413 114 printf "All the changes to the CORE files in the remote folder $BBB_BELA_HOME will be LOST. The content of these files/folders will be lost:\n $FILES_TO_COPY \nYour projects stored in $BBB_BELA_HOME/projects should be safe (and surely you have already backed them up somewhere safe, haven't you?).\nAre you sure you want to continue? (y/N) "
giuliomoro@413 115 fi;
giuliomoro@413 116 if [ $ALWAYS_YES -eq 1 ];
giuliomoro@413 117 then
giuliomoro@413 118 printf "y\n"
giuliomoro@413 119 else
giuliomoro@413 120 read REPLY;
giuliomoro@439 121 [ -z "$REPLY" ] || { [ "$REPLY" != y ] && [ "$REPLY" != Y ]; } && { echo "Aborting..."; exit 1; }
giuliomoro@413 122 fi
giuliomoro@413 123 else
giuliomoro@413 124 echo "Installing Bela core code in $BBB_ADDRESS:$BBB_BELA_HOME"
giuliomoro@413 125 fi
giuliomoro@412 126
giuliomoro@452 127 echo "Updating Bela core files to remote folder $BBB_BELA_HOME"
giuliomoro@377 128 # Stop Bela if running and remove all files
giuliomoro@454 129 if [ $FULL -eq 1 ]
giuliomoro@454 130 then
giuliomoro@454 131 printf "Stopping Bela..."
giuliomoro@454 132 ssh $BBB_ADDRESS "make -C $BBB_BELA_HOME idestop stop &>/dev/null; screen -X -S Bela quit &>/dev/null; screen -X -S IDE-Bela quit &>/dev/null; true";
giuliomoro@454 133 error_handler $?
giuliomoro@454 134 fi
andrewm@58 135
giuliomoro@413 136 if [ $RESET_BOARD -eq 1 ];
giuliomoro@413 137 then
giuliomoro@413 138 printf "Removing old files..."
giuliomoro@413 139 ssh $BBB_ADDRESS "rm -rf $BBB_BELA_HOME";
giuliomoro@413 140 error_handler $?
giuliomoro@413 141 fi
giuliomoro@413 142
giuliomoro@413 143 #Check if rsync is available
giuliomoro@413 144 [ -z `which rsync` ] && RSYNC_AVAILABLE=0 || RSYNC_AVAILABLE=1
giuliomoro@413 145
giuliomoro@420 146 # cd to the home of the project to make the following lines less verbose
giuliomoro@420 147 RUN_FOLDER=`pwd`
giuliomoro@413 148 cd $SCRIPTDIR/../
giuliomoro@420 149
giuliomoro@413 150 printf "Updating files..."
andrewm@58 151 # Copy relevant files to BeagleBone Black
giuliomoro@413 152 if [ $RSYNC_AVAILABLE -eq 1 ];
giuliomoro@413 153 then
giuliomoro@413 154 [ -z `which sed` ] && FILTER=cat || FILTER="sed s/\\n// | sed s/^.*:/Updated\ files:\/g | tr \"\n\" \" \""
giuliomoro@461 155 rsync -ac --no-t --delete-after --stats $FILES_TO_COPY $BBB_ADDRESS:$BBB_BELA_HOME 2>/dev/null |grep -i "Number" | grep -i "files" | grep -i "transferred" | eval $FILTER &&\
giuliomoro@477 156 printf "..." && rsync -ac --no-t libpd.so $BBB_ADDRESS:/usr/lib
giuliomoro@413 157 else
giuliomoro@413 158 # if rsync is not available, then clean the folders before copying the files
giuliomoro@413 159 ssh $BBB_ADDRESS "rm -rf $FILES_TO_COPY; mkdir -p $BBB_BELA_HOME" &&\
giuliomoro@413 160 scp -r -q $FILES_TO_COPY $BBB_ADDRESS:$BBB_BELA_HOME &&\
giuliomoro@413 161 scp -q libpd.so $BBB_ADDRESS:/usr/lib
giuliomoro@413 162 fi
giuliomoro@412 163 error_handler $?
giuliomoro@420 164 # cd back to the original folder.
giuliomoro@420 165 cd "$RUN_FOLDER"
giuliomoro@412 166
giuliomoro@402 167 # Create remaining directories needed for building
giuliomoro@412 168 printf "Creating directory structure on BeagleBone..."
giuliomoro@415 169 ssh $BBB_ADDRESS "mkdir -p $BBB_BELA_HOME/build/core $BBB_BELA_HOME/projects"
giuliomoro@412 170 error_handler $?
giuliomoro@412 171
giuliomoro@452 172 if [ $DOXYGEN -eq 1 ]
giuliomoro@452 173 then
giuliomoro@452 174 printf "Generating on-board documentation..."
giuliomoro@452 175 ssh $BBB_ADDRESS "cd $BBB_BELA_HOME; doxygen &> /dev/null"
giuliomoro@452 176 error_handler $? "\nError while generating Doxygen documentation\n"
giuliomoro@452 177 fi
andrewm@58 178
giuliomoro@491 179 if [ $FULL -eq 1 ]
giuliomoro@491 180 then
giuliomoro@491 181 printf "Cleaning build environment..."
giuliomoro@491 182 ssh $BBB_ADDRESS "make -C $BBB_BELA_HOME --no-print-directory coreclean &>/dev/null"
giuliomoro@491 183 error_handler $? "\nError cleaning core\n"
giuliomoro@491 184 fi
l@451 185
giuliomoro@402 186 #-------------
giuliomoro@402 187 #Installing IDE
giuliomoro@484 188
giuliomoro@484 189 if [ $UPDATE_IDE -eq 1 ]
giuliomoro@402 190 then
giuliomoro@484 191 [ $ALWAYS_YES -eq 0 ] && ALWAYS_YES_FLAG= || ALWAYS_YES_FLAG="-y"
giuliomoro@484 192 ls $IDE_FOLDER/scripts/update_IDE >/dev/null 2>/dev/null
giuliomoro@484 193 if [ $? -eq 0 ]
giuliomoro@484 194 then
giuliomoro@484 195 export BBB_ADDRESS BBB_BELA_HOME
giuliomoro@504 196 cd $IDE_FOLDER/scripts && ./update_IDE $ALWAYS_YES_FLAG --no-frills
giuliomoro@504 197
giuliomoro@505 198 ssh $BBB_ADDRESS "make -C $BBB_BELA_HOME --no-print-directory idestart"
giuliomoro@484 199 else
giuliomoro@484 200 # run the IDE
giuliomoro@484 201 printf "\nThe Bela core files were updated on the board, but a valid IDE folder was not found in $IDE_FOLDER/, so the IDE was not updated.
giuliomoro@484 202 You can get a copy of the most up-to-date IDE files from https://github.com/LBDonovan/bela-ide\n"
giuliomoro@484 203 [ $FULL -eq 1 ] && printf "If there was an older version of the IDE on the board, it is being restarted.\n\n" &&\
giuliomoro@517 204 ssh $BBB_ADDRESS "make -C $BBB_BELA_HOME --no-print-directory idestart &> /dev/null"
giuliomoro@484 205 fi
giuliomoro@402 206 else
giuliomoro@484 207 echo "Not updating the IDE"
giuliomoro@419 208 fi
giuliomoro@477 209 [ $FULL -eq 1 ] && ssh $BBB_ADDRESS make -C $BBB_BELA_HOME --no-print-directory idestartup nostartup && printf "The board will now run the IDE at startup, but startup of the Bela program has been disabled.\nTo enable it, use the set_startup.sh script.\nTo control the ide use the ide.sh script\n"
giuliomoro@421 210
giuliomoro@504 211 [ $ALWAYS_YES -eq 1 ] && printf "\nCore setup complete.\n\n" || {
giuliomoro@477 212 printf '\nSetup complete, press any key to continue . . .\n\n'
giuliomoro@514 213 read -n 1
giuliomoro@437 214 }