From 052f5807f0e502478d2a491528a6f4c6c30887cf Mon Sep 17 00:00:00 2001 From: Harald Barth Date: Sat, 24 Sep 2022 23:32:24 +0200 Subject: [PATCH] installer shell script --- installer.sh | 101 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100755 installer.sh diff --git a/installer.sh b/installer.sh new file mode 100755 index 0000000..70a7858 --- /dev/null +++ b/installer.sh @@ -0,0 +1,101 @@ +#!/bin/bash + +# +# © 2022 Harald Barth +# +# This file is part of CommandStation-EX +# +# This is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# It is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with CommandStation. If not, see . +# +# +# Usage: mkdir DIRNAME ; cd DIRNAME ; ../installer.sh +# or from install directory ./installer.sh +# + +DCCEXGITURL="https://github.com/DCC-EX/CommandStation-EX" +ACLIINSTALL="https://raw.githubusercontent.com/arduino/arduino-cli/master/install.sh" +ACLI="./bin/arduino-cli" + +function need () { + type -p $1 > /dev/null && return + sudo apt-get install $1 + type -p $1 > /dev/null && return + echo "Could not install $1, abort" + exit 255 +} + + +need git +if test -d .git ; then + : assume we are right here + git pull +else + git clone "$DCCEXGITURL" + cd `basename "$DCCEXGITURL"` || exit 255 +fi +if test -f config.h ; then + : all well +else + # need to do this config better + cp -p config.example.h config.h +fi +need curl +if test -x "$ACLI" ; then + : all well +else + curl "$ACLIINSTALL" > acliinstall.sh + chmod +x acliinstall.sh + ./acliinstall.sh +fi + +$ACLI core update-index || exit 255 + +# Board discovery +BOARDS=/tmp/boards.$$ +$ACLI board list | grep serial > $BOARDS +if test x`< $BOARDS wc -l` = 'x1' ; then + LINE=`cat $BOARDS` +else + # ask user + echo "What board to use? (give line number)" + cat -n $BOARDS + echo -n "> " + LINE=`awk 'BEGIN {getline A < "/dev/tty"} ; A == NR {print}' $BOARDS` +fi +rm $BOARDS +PORT=`echo $LINE | cut -d" " -f1` +echo Will use port: $PORT + +# FQBN discovery +FQBN=`echo $LINE | egrep 'arduino:avr:[a-z][a-z]*' | sed 's/.*\(arduino:avr:[a-z][a-z]*\) .*/\1/1'` +if test x$FQBN = x ; then + # ask user + cat > /tmp/fqbn.$$ < " + FQBN=`awk 'BEGIN {getline A < "/dev/tty"} ; A == NR {print}' /tmp/fqbn.$$` +fi +rm /tmp/fqbn.$$ +echo FQBN is $FQBN + +# Install phase +$ACLI core install `echo $FQBN | sed 's,:[^:]*$,,1'` # remove last component to get package +$ACLI board attach -p $PORT --fqbn $FQBN $PWD +$ACLI compile --fqbn $FQBN $PWD +$ACLI upload -v -t -p $PORT $PWD