From: Phil Howard Date: Wed, 10 Jul 2019 09:58:27 +0000 (+0100) Subject: Install improvements X-Git-Url: https://zdv2.bktei.com/gitweb/EVA-2020-02-2.git/commitdiff_plain/b96b7e0410b273b9ef5f459b254c6c8b2ce85002?ds=inline Install improvements --- diff --git a/install.sh b/install.sh index ad61036..b7ed9cc 100755 --- a/install.sh +++ b/install.sh @@ -4,18 +4,62 @@ CONFIG=/boot/config.txt DATESTAMP=`date "+%Y-%M-%d-%H-%M-%S"` CONFIG_BACKUP=false APT_HAS_UPDATED=false +USER_HOME=/home/$SUDO_USER +RESOURCES_TOP_DIR=$USER_HOME/Pimoroni +WD=`pwd` + +user_check() { + if [ $(id -u) -ne 0 ]; then + printf "Script must be run as root. Try 'sudo ./install.sh'\n" + exit 1 + fi +} -if [ $(id -u) -ne 0 ]; then - printf "Script must be run as root. Try 'sudo ./install.sh'\n" - exit 1 -fi +confirm() { + if [ "$FORCE" == '-y' ]; then + true + else + read -r -p "$1 [y/N] " response < /dev/tty + if [[ $response =~ ^(yes|y|Y)$ ]]; then + true + else + false + fi + fi +} + +prompt() { + read -r -p "$1 [y/N] " response < /dev/tty + if [[ $response =~ ^(yes|y|Y)$ ]]; then + true + else + false + fi +} + +success() { + echo -e "$(tput setaf 2)$1$(tput sgr0)" +} + +inform() { + echo -e "$(tput setaf 6)$1$(tput sgr0)" +} + +warning() { + echo -e "$(tput setaf 1)$1$(tput sgr0)" +} function do_config_backup { if [ ! $CONFIG_BACKUP == true ]; then CONFIG_BACKUP=true - FILENAME="/boot/config.preinstall-$LIBRARY_NAME-$DATESTAMP.txt" - printf "Backing up $CONFIG to $FILENAME\n" - cp $CONFIG $FILENAME + FILENAME="config.preinstall-$LIBRARY_NAME-$DATESTAMP.txt" + inform "Backing up $CONFIG to /boot/$FILENAME\n" + cp $CONFIG /boot/$FILENAME + mkdir -p $RESOURCES_TOP_DIR/config-backups/ + cp $CONFIG $RESOURCES_TOP_DIR/config-backups/$FILENAME + if [ -f "$UNINSTALLER" ]; then + echo "cp $RESOURCES_TOP_DIR/config-backups/$FILENAME $CONFIG" >> $UNINSTALLER + fi fi } @@ -33,14 +77,19 @@ function apt_pkg_install { PACKAGES="${PACKAGES[@]}" if ! [ "$PACKAGES" == "" ]; then echo "Installing missing packages: $PACKAGES" - if [ ! $APT_HAS_UPDATED ]; then - apt update - APT_HAS_UPDATED=true - fi + if [ ! $APT_HAS_UPDATED ]; then + apt update + APT_HAS_UPDATED=true + fi apt install -y $PACKAGES + if [ -f "$UNINSTALLER" ]; then + echo "apt uninstall -y $PACKAGES" + fi fi } +user_check + apt_pkg_install python-configparser CONFIG_VARS=`python - < $UNINSTALLER +printf "It's recommended you run these steps manually.\n" +printf "If you want to run the full script, open it in\n" +printf "an editor and remove 'exit 1' from below.\n" +exit 1 +EOF + printf "$LIBRARY_NAME $LIBRARY_VERSION Python Library: Installer\n\n" cd library printf "Installing for Python 2..\n" apt_pkg_install "${PY2_DEPS[@]}" -python setup.py install +python setup.py install > /dev/null +if [ $? -eq 0 ]; then + success "Done!\n" + echo "pip uninstall $LIBRARY_NAME" >> $UNINSTALLER +fi if [ -f "/usr/bin/python3" ]; then printf "Installing for Python 3..\n" apt_pkg_install "${PY3_DEPS[@]}" - python3 setup.py install + python3 setup.py install > /dev/null + if [ $? -eq 0 ]; then + success "Done!\n" + echo "pip3 uninstall $LIBRARY_NAME" >> $UNINSTALLER + fi fi -cd .. +cd $WD for ((i = 0; i < ${#SETUP_CMDS[@]}; i++)); do CMD="${SETUP_CMDS[$i]}" @@ -103,7 +170,7 @@ for ((i = 0; i < ${#CONFIG_TXT[@]}; i++)); do CONFIG_LINE="${CONFIG_TXT[$i]}" if ! [ "$CONFIG_LINE" == "" ]; then do_config_backup - printf "Adding $CONFIG_LINE to $CONFIG\n" + inform "Adding $CONFIG_LINE to $CONFIG\n" sed -i "s/^#$CONFIG_LINE/$CONFIG_LINE/" $CONFIG if ! grep -q "^$CONFIG_LINE" $CONFIG; then printf "$CONFIG_LINE\n" >> $CONFIG @@ -111,4 +178,15 @@ for ((i = 0; i < ${#CONFIG_TXT[@]}; i++)); do fi done -printf "Done!\n" +if [ -d "examples" ]; then + if confirm "Would you like to copy examples to $RESOURCES_DIR?"; then + inform "Copying examples to $RESOURCES_DIR" + mkdir -p $RESOURCES_DIR + cp -r examples/ $RESOURCES_DIR + echo "rm -r $RESOURCES_DIR" >> $UNINSTALLER + fi +fi + +success "\nAll done!" +inform "If this is your first time installing you should reboot for hardware changes to tkae effect.\n" +inform "Find uninstall steps in $UNINSTALLER\n"