#!/bin/sh # Helper script to install the heartbeat tools. By default, it will only # install the heartbeat client, hbc. The server is installed when the arg 'server' is passed # to the script. The script will install the heartbeat tools in a python # virtual environment in ~/venvs/hbd. The hbd and hbc commands will be # installed from the wheel and symlinked to ~/bin/hbd and ~/bin/hbc, # respectively. If the virtual environment already exists, it will be # reused. The script will also remove any existing symlinks for hbd and hbc # in ~/bin before creating new ones. set -e what=$1 on_ha=0 where="" venv="" [ "$2" = "HA" ] && on_ha=1 [ -z "$what" ] && what="client" if [ -d /homeassistant ]; then # if running from HA command line echo "HA, running \"docker exec homeassistant /config/bin/hb_install.sh $@\"" docker exec homeassistant /config/bin/hb_install.sh $@ HA rc=$? if [ $rc -ne 0 ]; then echo "Failed to install heartbeat in HA, please check the logs for more details" exit 1 fi exit 0 fi if [ $on_ha -eq 1 ] || [ -r /.dockerenv ] && [ -d /config/bin ]; then # Installing under docker on Home Assistant OS, using /config/bin for executables and /config/venvs for virtual environments echo "Home Assistant OS detected, installing under docker" where="/config/bin" venv="/config/venvs" else if [ ! -d $HOME/.local/bin ] && [ ! -d $HOME/bin ]; then echo "No suitable bin directory found in PATH, please add either $HOME/.local/bin or $HOME/bin to your PATH" exit 1 fi for where in $HOME/bin $HOME/.local/bin notset ; do if echo ":$PATH:" | grep -q ":$where:" ; then break fi done if [ "$where" = "notset" ]; then echo "No suitable bin directory found in PATH, please add either $HOME/.local/bin or $HOME/bin to your PATH" exit 1 fi if [ "$what" = "mini" ]; then venv="" else venv="$HOME/venvs" fi fi echo "Installing $what to $where" if [ ! -z "$venv" ]; then echo "Using virtual environment at $venv/hbd" fi if [ "$venv" != "" ] && [ ! -d $venv/hbd ]; then arg="" have_pip=$(python3 -c "import pip" 2>/dev/null &> /dev/null && echo "Installed" || echo "Not Installed") if [ "$have_pip" = "Not Installed" ]; then # some systems do not have pip installed by default, so we need to fetch get-pip.py and install pip echo "pip is not installed, fetching get-pip.py and installing pip" arg="--without-pip" fi mkdir -p $venv have_venv=$(python3 -c "import venv" 2>/dev/null &> /dev/null && echo "Installed" || echo "Not Installed") if [ "$have_venv" = "Not Installed" ]; then if [ "$have_pip" = "Not Installed" ]; then echo "python has no venv, and no pip to install virtualenv, cannot continue" exit 1 fi echo "python venv module not found, installing virtualenv" python3 -m pip install --user virtualenv python3 -m virtualenv $venv/hbd --system-site-packages $arg else python3 -m venv $venv/hbd --system-site-packages $arg fi . $venv/hbd/bin/activate if [ -n "$arg" ]; then curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py && python3 get-pip.py fi deactivate fi if [ ! -z "$venv" ]; then . $venv/hbd/bin/activate fi if [ "$what" = "mini" ]; then curl -s -o $where/hbc_mini https://git.wrede.ca/andreas/heartbeat/raw/branch/master/scripts/hbc_mini.py chmod +x $where/hbc_mini else python3 -mpip install --upgrade --index-url https://git.wrede.ca/api/packages/andreas/pypi/simple/ --extra-index-url https://pypi.org/simple hbd[$what] fi if [ ! -z "$venv" ]; then echo "linking executables to $where" if [ "$what" = "server" ]; then rm -f $where/hbd ln -sf $(which hbd) $where/hbd elif [ "$what" = "client" ]; then rm -f $where/hbc ln -sf $(which hbc) $where/hbc fi rm -f $where/hb_install.sh ln -sf $(which hb_install.sh) $where/hb_install.sh fi echo "Installation complete. To upgrade, run the following:" echo " $where/hb_install.sh $what" echo "To install on another machine, run the following obtain the install script and run it:" echo "from https://git.wrede.ca/andreas/heartbeat/raw/branch/master/scripts/hb_install.sh" echo "and then run sh hb_install.sh [mini|client]"