summaryrefslogtreecommitdiff
path: root/i/pc104/initrd/update.sh
diff options
context:
space:
mode:
Diffstat (limited to 'i/pc104/initrd/update.sh')
-rwxr-xr-xi/pc104/initrd/update.sh107
1 files changed, 107 insertions, 0 deletions
diff --git a/i/pc104/initrd/update.sh b/i/pc104/initrd/update.sh
new file mode 100755
index 0000000..9cb9059
--- /dev/null
+++ b/i/pc104/initrd/update.sh
@@ -0,0 +1,107 @@
+#!/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