#!/bin/bash # # Open Rowing Monitor, https://github.com/JaapvanEkris/openrowingmonitor # # Installation script for Open Rowing Monitor, use at your own risk! # # treat unset variables as an error when substituting set -u # exit when a command fails set -e RED=$'\e[0;31m' YELLOW=$'\e[0;33m' PURPLE=$'\e[0;35m' NC=$'\e[0m' # No Color print() { echo "$@" } cancel() { print "$@" exit 1 } ask() { local prompt default reply if [[ ${2:-} = 'Y' ]]; then prompt='Y/n' default='Y' elif [[ ${2:-} = 'N' ]]; then prompt='y/N' default='N' else prompt='y/n' default='' fi while true; do echo -n "$1 [$prompt] " read -r reply /dev/null sudo hostnamectl set-hostname $TARGET_HOSTNAME sudo systemctl restart avahi-daemon fi fi INIT_SHARE=false if ask "Do you want to create a samba network share to simplify access to training data and configuration?" Y; then INIT_SHARE=true fi INIT_GUI=false if ask "Do you also want to run the Graphical User Interface on this device (requires attached screen)?" N; then INIT_GUI=true fi print print "Installing System dependencies..." sudo apt-get -y update sudo apt-get -y dist-upgrade sudo systemctl enable bluetooth sudo systemctl daemon-reload sudo systemctl start bluetooth sudo apt-get -y install bluetooth bluez libbluetooth-dev libudev-dev git sudo apt-get -y install pigpio # We disable the pigpio service explicity, as the JS wrapper is alergic to the deamon sudo systemctl mask pigpiod.service print print "Installing Node.js..." curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash - sudo apt-get install -y nodejs print print "Installing Open Rowing Monitor, branch $BRANCH..." if ! [[ -d "${INSTALL_DIR}" ]]; then sudo mkdir -p $INSTALL_DIR cd $INSTALL_DIR # get project code from repository sudo git init -q # older versions of git would use 'master' instead of 'main' for the default branch sudo git checkout -q -b $BRANCH sudo git config remote.origin.url $GIT_REMOTE sudo git config remote.origin.fetch +refs/heads/*:refs/remotes/origin/* # prevent altering line endings sudo git config core.autocrlf false sudo git fetch --force origin sudo git fetch --force --tags origin sudo git reset --hard origin/$BRANCH fi cd $INSTALL_DIR # add bin directory to the system path echo "export PATH=\"\$PATH:$INSTALL_DIR/bin\"" >> ~/.bashrc print print "Downloading and compiling Runtime dependencies..." sudo npm ci sudo npm run build if ! [[ -f "config/config.js" ]]; then sudo cp install/config.js config/ fi print print "Setting up GPIO 17 as input and enable the pull-up resistor..." if [[ $VERSION == "10 (buster)" ]] || [[ $VERSION == "11 (bullseye)" ]]; then echo -e "\n# configure GPIO 17 as input and enable the pull-up resistor for Open Rowing Monitor\ngpio=17=pu,ip" | sudo tee -a /boot/config.txt > /dev/null else # In Bookworm, this file has moved echo -e "\n# configure GPIO 17 as input and enable the pull-up resistor for Open Rowing Monitor\ngpio=17=pu,ip" | sudo tee -a /boot/firmware/config.txt > /dev/null fi print print "Setting up Open Rowing Monitor as autostarting system service..." sudo cp install/openrowingmonitor.service /lib/systemd/system/ sudo systemctl daemon-reload sudo systemctl enable openrowingmonitor sudo systemctl restart openrowingmonitor if $INIT_SHARE; then print print "Creating network share..." # set the installer selections via debconf-set-selections, otherwise installing samba will open # the wizard to manually set those settings echo "samba-common samba-common/workgroup string WORKGROUP" | sudo debconf-set-selections echo "samba-common samba-common/dhcp boolean true" | sudo debconf-set-selections echo "samba-common samba-common/do_debconf boolean true" | sudo debconf-set-selections sudo apt-get -y install samba samba-common-bin smbclient cifs-utils sudo cp -f install/smb.conf /etc/samba/smb.conf sudo systemctl restart smbd print print "Network share created" fi if $INIT_GUI; then print print "Installing Graphical User Interface..." if [[ $VERSION == "10 (buster)" ]] || [[ $VERSION == "11 (bullseye)" ]]; then sudo apt-get -y install --no-install-recommends xserver-xorg xserver-xorg-legacy x11-xserver-utils xinit openbox firefox sudo mkdir /home/pi/.cache sudo chown -R pi:pi /home/pi/.cache sudo gpasswd -a pi tty sudo sed -i 's/allowed_users=console/allowed_users=anybody\nneeds_root_rights=yes/' /etc/X11/Xwrapper.config sudo cp install/webbrowserkiosk.service /lib/systemd/system/ sudo systemctl daemon-reload sudo systemctl enable webbrowserkiosk sudo systemctl restart webbrowserkiosk print "sudo systemctl status webbrowserkiosk" sudo systemctl status webbrowserkiosk --no-pager else # ToDo: We aim to installs Wayland on Bookworm as Wayland has a better kiosk mode, as soon as we know how to do a decent Kiosk mode sudo apt-get -y install --no-install-recommends xserver-xorg xserver-xorg-legacy x11-xserver-utils xinit openbox firefox sudo mkdir /home/pi/.cache sudo chown -R pi:pi /home/pi/.cache sudo gpasswd -a pi tty sudo sed -i 's/allowed_users=console/allowed_users=anybody\nneeds_root_rights=yes/' /etc/X11/Xwrapper.config sudo cp install/webbrowserkiosk.service /lib/systemd/system/ sudo systemctl daemon-reload sudo systemctl enable webbrowserkiosk sudo systemctl restart webbrowserkiosk print "sudo systemctl status webbrowserkiosk" sudo systemctl status webbrowserkiosk --no-pager fi print print "Installation of Graphical User Interface finished." print "If the screen resolution or the screen borders are not correct, run 'sudo raspi-config' and modify the display options." fi print print "sudo systemctl status openrowingmonitor" sudo systemctl status openrowingmonitor --no-pager print print "Installation of Open Rowing Monitor finished." print "Open Rowing Monitor should now be up and running." print "You can now adjust the configuration in $INSTALL_DIR/config/config.js either via ssh or via the network share" print print "Please reboot the device for all features and settings to take effect." cd $CURRENT_DIR