aboutsummaryrefslogtreecommitdiff
path: root/bin/install.sh
diff options
context:
space:
mode:
authorJakob Stendahl <jakob.stendahl@outlook.com>2021-10-21 09:56:22 +0200
committerJakob Stendahl <jakob.stendahl@outlook.com>2021-10-21 09:56:22 +0200
commit6b87d58cbd9501eb549fb3a164c61ac520b4e469 (patch)
tree619c5cdce096da290bf85b5f2c3152fa4755cdad /bin/install.sh
parent4aaf4a843f204252c7e91537151d25c175f7c20a (diff)
downloadLuxcena-Neo-6b87d58cbd9501eb549fb3a164c61ac520b4e469.tar.gz
Luxcena-Neo-6b87d58cbd9501eb549fb3a164c61ac520b4e469.zip
:boom: Remove CLI, and add seperate install/uninstall scripts
Diffstat (limited to 'bin/install.sh')
-rwxr-xr-xbin/install.sh170
1 files changed, 136 insertions, 34 deletions
diff --git a/bin/install.sh b/bin/install.sh
index a7b811b..cabd6bf 100755
--- a/bin/install.sh
+++ b/bin/install.sh
@@ -1,9 +1,7 @@
#!/bin/bash
-tput rev
-printf '%s\n' "Luxcena-neo Installer"
-tput sgr0
-printf '\e[93m%s\e[0m\n\n' "---------------------"
+printf "\e[37mLuxcena-\e[31mn\e[32me\e[34mo\e[0m\n"
+printf '\e[93m%s\e[0m' "-----------"
if [ "$EUID" -ne 0 ]; then
echo "You need to run this script as root."
@@ -18,51 +16,155 @@ function die() {
exit 1
}
+
+function TPUT() {
+ if [ -t 1 ]; then
+ if [ "$1" = "tput" ]; then
+ shift
+ fi
+ tput $@
+ fi
+}
+
+function header() {
+ TPUT setaf 3
+ if [ -t 1 ]; then
+ printf "\n[ ] $1"
+ else
+ printf "\n- $1"
+ fi
+ TPUT sgr0
+}
+
+function commandError() {
+ trap - 1
+ cat /tmp/luxcena-neo-update.log
+
+ TPUT setaf 1
+ printf "\n\nInstall failed.\n"
+ TPUT sgr0
+ TPUT cnorm
+ exit 1
+}
+
+function spinner() {
+ i=1
+ sp="/-\|"
+ while ps a | awk '{print $1}' | grep -q "$1"; do
+ TPUT cub $(tput cols)
+ TPUT cuf 1
+ printf "${sp:i++%${#sp}:1}"
+ TPUT cuf $(tput cols)
+ sleep 0.09
+ done
+
+ TPUT cub $(tput cols)
+ TPUT cuf 1
+}
+
+function execCommand() {
+ TPUT sc
+ TPUT setaf 4
+ if [ -t 1 ]; then
+ printf " ($1)"
+ else
+ printf "\n>> $1 "
+ fi
+ TPUT sgr0
+ bash -c "$1 > /tmp/luxcena-neo-update.log 2>&1" &
+
+ PID=$!
+
+ if [ -t 1 ]; then
+ spinner $PID
+ fi
+
+ wait $PID
+ commandSucc=$?
+ if [ $commandSucc -eq 0 ]; then
+ TPUT setaf 2
+ printf "✓"
+ TPUT sgr0
+ TPUT rc
+ TPUT el
+ else
+ TPUT setaf 1
+ printf "x"
+ TPUT sgr0
+ TPUT cuf $(tput cols)
+ printf "\n"
+ if [ $# -eq 1 ] || [ $2 -eq "0" ]; then
+ commandError
+ fi
+ fi
+}
+
+TPUT civis
+
# Create user 'luxcena-neo'
-tput setaf 8
-printf '%s\n' "- Creating user 'lux-neo'..."
-tput sgr0
+header "Creating user 'lux-neo'"
username="lux-neo"
egrep "^$username" /etc/passwd >/dev/null
if [ $? -eq 0 ]; then
- echo "User already exists, continuing..."
+ printf '\n%s\n' "User already exists, continuing..."
else
- useradd -m $username || die
+ execCommand "useradd -m $username"
fi
-usermod -a -G gpio $username
-usermod -a -G spi $username
+header "Add user to groups"
+execCommand "usermod -a -G gpio $username"
+execCommand "usermod -a -G spi $username"
# First we make our directories
-tput setaf 8
-printf '%s\n' "- Making directories..."
-tput sgr0
-[ -d "/opt/luxcena-neo/" ] && echo "Seems like luxcena-neo is already installed, please do update instead" && die
-mkdir -p "/opt/luxcena-neo" || die
-chown $username:$username "/opt/luxcena-neo" || die
-mkdir -p "/var/luxcena-neo" || die
-chown $username:$username "/var/luxcena-neo" || die
-mkdir -p "/etc/luxcena-neo" || die
-chown $username:$username "/etc/luxcena-neo" || die
-mkdir -p "/var/log/luxcena-neo" || die
-chown $username:$username "/var/log/luxcena-neo" || die
-
-printf '%s' "Which branch do you want to install (default: master)? "
+header "Making directories"
+[ -d "/opt/luxcena-neo/" ] && echo "\nSeems like luxcena-neo is already installed, please do update instead" && die
+execCommand "mkdir -p \"/opt/luxcena-neo\""
+execCommand "chown $username:$username \"/opt/luxcena-neo\""
+execCommand "mkdir -p \"/var/luxcena-neo\""
+execCommand "chown $username:$username \"/var/luxcena-neo\""
+execCommand "mkdir -p \"/etc/luxcena-neo\""
+execCommand "chown $username:$username \"/etc/luxcena-neo\""
+execCommand "mkdir -p \"/var/log/luxcena-neo\""
+execCommand "chown $username:$username \"/var/log/luxcena-neo\""
+
+# Choose branch to install
+printf '\n%s' "Which branch do you want to install (default: master)? "
read BRANCH
if [ -z "$BRANCH" ]; then
BRANCH="master"
fi
# Get source code
-tput setaf 8
-printf '%s\n' "- Fetch source code..."
-tput sgr0
-runuser -l $username -c "git clone -b $BRANCH https://github.com/jakobst1n/luxcena-neo /opt/luxcena-neo/" || die
+header "Fetch source code"
+execCommand "runuser -l $username -c \"git clone -b $BRANCH https://github.com/jakobst1n/luxcena-neo /opt/luxcena-neo/\""
+execCommand "chown -R lux-neo:lux-neo /opt/luxcena-neo"
+
+# Install dependencies
+header "Install dependencies"
+execCommand "wget -qO- https://deb.nodesource.com/setup_14.x | bash -"
+execCommand "apt -q update"
+execCommand "apt -qy install nodejs python3-pip"
+execCommand "pip3 install virtualenv"
+execCommand "runuser -l 'lux-neo' -c \"export NODE_ENV=development; npm --prefix /opt/luxcena-neo install /opt/luxcena-neo\""
+
+# Create virtualenv
+header "Create python virtualenv and install dependencies"
+execCommand "rm -rf /opt/luxcena-neo/NeoRuntime/Runtime/venv"
+execCommand "virtualenv -p /usr/bin/python3 /opt/luxcena-neo/NeoRuntime/Runtime/venv"
+execCommand "source /opt/luxcena-neo/NeoRuntime/Runtime/venv/bin/activate && pip install rpi_ws281x"
+
+# Build the source code
+header "Build source code"
+execCommand "runuser -l 'lux-neo' -c \"npm --prefix /opt/luxcena-neo run build:frontend\""
+execCommand "runuser -l 'lux-neo' -c \"npm --prefix /opt/luxcena-neo run build:fontawesome\""
+execCommand "runuser -l 'lux-neo' -c \"npm --prefix /opt/luxcena-neo run build:dialog-polyfill\""
-# Install all packages, build the app, and prepare everything
-tput setaf 8
-printf '%s\n' "- Running installer (updater) from newly fetched source code..."
-tput sgr0
-/opt/luxcena-neo/bin/luxcena-neo-cli.sh update || die
+# Install systemd service
+header "Install new systemd service"
+execCommand "cp /opt/luxcena-neo/bin/luxcena-neo.service /etc/systemd/system/luxcena-neo.service"
+execCommand "systemctl daemon-reload"
+execCommand "systemctl enable luxcena-neo"
+execCommand "systemctl start luxcena-neo"
# Installation is done!
printf '\n\e[5m%s\e[0m\n' "🎉Luxcena-Neo is now installed🎉"
+TPUT cnorm