#!/bin/bash # Script for updating the marvin program in the initrd. # Variables - Default values # Local directory name containing the representation for the initrd ROBOT_LOCAL_DIR="./robot" # Remote directory in the initrd ROBOT_REMOTE_DIR="/robot" # Name of the script to launch the robot program ROBOT_START_SCRIPT="start.sh" # Build directory ROBOT_BUILD_DIR="." # Config directory ROBOT_CONF_DIR="$ROBOT_BUILD_DIR/../runtime" # Max size of the config directory ROBOT_CONF_MAX_SIZE="3000" check_rsync () { if [[ "x$(whereis rsync | cut -d ':' -f 2)" == "x" ]] then echo "Please install rsync" exit 1 fi } # Check the structure (directory robot and startup script) check_create_structure () { # Check the local directory exist if [[ ! -d $ROBOT_LOCAL_DIR ]] then mkdir $ROBOT_LOCAL_DIR fi # Check we have a start script if [[ ! -f $ROBOT_LOCAL_DIR/$ROBOT_START_SCRIPT ]] then # Create a default one echo -e \ "# Startup script launched when the PC104 boot.\n\ # It will be sourced by other script.\n\ # Example : \n\ # ./test_ai -z" > $ROBOT_LOCAL_DIR/$ROBOT_START_SCRIPT # Need to tune it by the user echo "Please tune your $ROBOT_LOCAL_DIR/$ROBOT_START_SCRIPT." # XXX vim it ? exit 2 fi } # Check that there is a line in the startup script for launchin a program and # a binary existing check_install_binary () { if [[ $(grep -cv "^#" $ROBOT_LOCAL_DIR/$ROBOT_START_SCRIPT) -eq 0 ]] then echo "No command found in your $ROBOT_LOCAL_DIR/$ROBOT_START_SCRIPT." exit 3 fi for line in "$(grep -v "^#" $ROBOT_LOCAL_DIR/$ROBOT_START_SCRIPT)" do bin="$(echo "$line" | cut -d ' ' -f 1)" if [[ ! -x $ROBOT_BUILD_DIR/$bin ]] then echo "Binary not found : $bin." exit 4 else # Copy the binary to the local dir install -m 777 $ROBOT_BUILD_DIR/$bin $ROBOT_LOCAL_DIR/ # Remove useless symbol strip $ROBOT_LOCAL_DIR/$bin fi done } # Install the configuration check_install_config () { # First we check the size if [[ $(du -bs $ROBOT_CONF_DIR | cut -f 1) -gt $ROBOT_CONF_MAX_SIZE ]] then echo "Config directory ($ROBOT_CONF_DIR) is too big." exit 5 fi # There is no way to know the files needed, so we rsync everything rsync -aq $ROBOT_CONF_DIR/ $ROBOT_LOCAL_DIR/rc } # TODO Send it to the initrd # Guiding steps : # 1. Try netcat on the robot # 1.a If it responding, we are in autonomous mode, wait that the PC104 mount # the real system for ssh # 2. Try ssh # 2.a Not responding, wrong robot/dns ? Too quick from 1 ? # 3. Backuper/rotater l'initrd # 4. Décompréssé l'initrd # 5. Le monter # 6. rsyncer # 7. Démonter # 8. Re-compresser # TODO Parameter check_rsync check_create_structure check_install_binary check_install_config