view scripts/update_board.sh @ 415:947cb6ef73e7 prerelease

update_board creates remote folder tree
author Giulio Moro <giuliomoro@yahoo.it>
date Thu, 16 Jun 2016 02:01:05 +0100
parents d874b5696078
children 4fb06ca94e02
line wrap: on
line source
#!/bin/bash
#
# This script copies the core Bela files to the BeagleBone Black
# in preparation for building projects. It will remove any existing
# Bela directory before copying the files over

[ -z "$BBB_ADDRESS" ] && BBB_ADDRESS="root@192.168.7.2"
[ -z "$BBB_BELA_HOME" ] && BBB_BELA_HOME="/root/Bela/"

FILES_TO_COPY="core include Makefile libNE10.a libprussdrv.a examples Doxyfile"

# The following variables are manually copied from the Makefile.
# It is a bit nasty, but here we need to handle the case that the board may be 
# in any arbitrarily (bad) condition and try to handle it the best we can
BELA_IDE_SCREEN_NAME=IDE-Bela
SCREEN_NAME=Bela

function usage
{
    THIS_SCRIPT=`basename "$0"`
    echo "Usage: $THIS_SCRIPT [-b path-on-beaglebone] [--clean] [-y]"

    echo "
    This script updates the core Bela files on the BeagleBone, bringing it up
    to date with the files in the folder on the host computer.
    The script must be run once to initialize the board before running any of
    the other scripts in this directory. It must also be run every time you
    wish to update the core code.
    Running this script will discard all changes to the core code on the remote
    end.

Command line options:    
    -i arg : allows to set the username and IP address of the remote end (default: $BBB_ADDRESS)
    -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)
    --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.
    -y : does not prompt the user before deleting the remote files.
    "
}
trap "echo; exit" SIGINT SIGTERM

function error_handler {
 [ $1 -eq 0 ] && printf "done\n" || { [ -z "$2" ] && printf "\nAn error occurred. Is the board connected?\n" || printf "$2"; exit 1; }
}

OPTIND=1
ALWAYS_YES=0
RESET_BOARD=0
while [ "$1" != "" ]; do
  case $1 in
    -b)           
      shift
      BBB_BELA_HOME=$1
    ;;
    -i)
      shift
      BBB_ADDRESS=$1
    ;;
    --clean)
      RESET_BOARD=1
    ;;
    -y)          
       ALWAYS_YES=1
    ;;
    *)            
      usage
      exit 1
    ;;
  esac
  shift
done


# Find location of this script so we can locate the rest of the files
SCRIPTPATH=$(readlink "$0")
SCRIPTDIR=$(dirname "$SCRIPTPATH")
[ -z "$IDE_FOLDER" ] && IDE_FOLDER=$SCRIPTDIR/../../bela-ide/


ssh $BBB_ADDRESS "stat $BBB_BELA_HOME &>/dev/null" && DESTINATION_EMPTY=0 || DESTINATION_EMPTY=1

if [ $DESTINATION_EMPTY -eq 0 ];
then
  echo "Updating the Bela core code in $BBB_ADDRESS:$BBB_BELA_HOME"
  if [ $RESET_BOARD -eq 1 ];
  then
    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) "
  else
    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) "
  fi;
  if [ $ALWAYS_YES -eq 1 ];
  then
    printf "y\n"
  else 
    read REPLY;
    [ $REPLY !=  y ] && [ $REPLY != Y ] && { echo "Aborting..."; exit 1; }
  fi
else
  echo "Installing Bela core code in $BBB_ADDRESS:$BBB_BELA_HOME"
fi

echo "Updating Bela core files to remote folder $BBB_BELA_HOME"
# Stop Bela if running and remove all files
printf "Stopping Bela..." 
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";
error_handler $?

if [ $RESET_BOARD -eq 1 ];
then
  printf "Removing old files..."
  ssh $BBB_ADDRESS "rm -rf $BBB_BELA_HOME";
  error_handler $?
fi

#Check if rsync is available
[ -z `which rsync` ] && RSYNC_AVAILABLE=0 || RSYNC_AVAILABLE=1

cd $SCRIPTDIR/../
printf "Updating files..."
# Copy relevant files to BeagleBone Black
if [ $RSYNC_AVAILABLE -eq 1 ];
then
  [ -z `which sed` ] && FILTER=cat || FILTER="sed s/\\n// | sed s/^.*:/Updated\ files:\/g | tr \"\n\" \" \""
  rsync -ac --no-t --delete-after --stats $FILES_TO_COPY $BBB_ADDRESS:$BBB_BELA_HOME |grep -i "Number" | grep -i "files" | grep -i "transferred" | eval $FILTER &&\
  rsync -ac --no-t libpd.so $BBB_ADDRESS:/usr/lib
else
  # if rsync is not available, then clean the folders before copying the files
  ssh $BBB_ADDRESS "rm -rf $FILES_TO_COPY; mkdir -p $BBB_BELA_HOME" &&\
  scp -r -q $FILES_TO_COPY $BBB_ADDRESS:$BBB_BELA_HOME &&\
  scp -q libpd.so $BBB_ADDRESS:/usr/lib
fi
error_handler $?

# Create remaining directories needed for building
printf "Creating directory structure on BeagleBone..."
ssh $BBB_ADDRESS "mkdir -p $BBB_BELA_HOME/build/core $BBB_BELA_HOME/projects"
error_handler $?

printf "Generating on-board documentation..."
ssh $BBB_ADDRESS "cd $BBB_BELA_HOME; doxygen &>/dev/null"
error_handler $? "\nError while generating Doxygen documentation\n"

#-------------
#Installing IDE
stat $IDE_FOLDER/scripts/setup_IDE.sh &> /dev/null
if [ $? -eq 0 ]
then
  cd $IDE_FOLDER/scripts;
  ./setup_IDE.sh -y
  # run the IDE 
  ssh $BBB_ADDRESS "make -C $BBB_BELA_HOME --no-print-directory idestart"
else
  echo \
"Bela was installed on the board, but No IDE was found, so the IDE was not installed.
You can get a copy of the IDE files from https://github.com/LBDonovan/bela-ide"
fi;