#!/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="" prog=$(realpath $0) [ "$2" = "HA" ] && on_ha=1 [ -z "$what" ] && what="client" if [ -d /homeassistant ]; then echo "HA, running \"docker exec homeassistant $prog $@\"" docker exec homeassistant $prog $@ 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 ]; then echo "Installing under docker on Home Assistant OS, using /config/bin for executables and /config/venvs for virtual environments " 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 heartbeat $what" if [ "$venv" != "" ] && [ ! -d $venv/hbd ]; then set +e python3 -m pip --version > /dev/null 2>&1 rc=$? set -e arg="" if [ $rc -ne 0 ]; 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" &> /dev/null && echo "Installed" || echo "Not Installed") if [ "$have_venv" = "Not Installed" ]; then 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 echo "Installing heartbeat $what globally" else echo "Installing heartbeat $what in virtual environment $venv/hbd" . $venv/hbd/bin/activate fi if [ "$what" = "mini" ]; then echo "Installing hbc mini, which has no external dependencies and is meant for quick setup and testing. For the full client with all features, please run this script with the 'client' argument." 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 echo "Installing heartbeat $what, which includes the full client with all features. If you want to install the minimal client with no external dependencies, please run this script with the 'mini' argument." 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 [ "$what" = "server" ]; then rm -f $where/hbd ln -sf $(which hbd) $where/hbd echo "hbd installed, you can run it with \"$where/hbd\" or \"hbd\" if $where is in your PATH" elif [ "$what" = "client" ]; then hbc_path=$(which hbc) if [ -z "$hbc_path" ]; then echo "hbc not found in PATH, installation failed" exit 1 fi if [ "$hbc_path" != "$where/hbc" ]; then rm -f $where/hbc ln -sf $(which hbc) $where/hbc fi if [ "$prog" != "$where/hb_install.sh" ]; then cp "$prog" $where/hb_install.sh chmod +x $where/hb_install.sh fi if [ $on_ha -eq 1 ]; then echo "restarting hbc " job=$(grep run_hbc configuration.yaml | sed 's/run_hbc://') $job else echo "hbc installed, you can run it with \"$where/hbc\" or \"hbc\" if $where is in your PATH" fi elif [ "$what" = "mini" ]; then hbc_path=$(which hbc_mini) if [ "$hbc_path" != "$where/hbc_mini" ]; then ln -sf $hbc_path $where/hbc_mini fi echo "hbc mini installed, you can run it with \"$where/hbc_mini\" or \"hbc_mini\" if $where is in your PATH" fi