From 2c0328f36de9318aff0a26ce2277a28a77a07baa Mon Sep 17 00:00:00 2001 From: Andreas Wrede Date: Sun, 12 Apr 2026 16:39:14 -0400 Subject: [PATCH] update install.sh to handle missing venv module --- scripts/install.sh | 53 ++++++++++++++++++++++++++++++++++------------ 1 file changed, 39 insertions(+), 14 deletions(-) diff --git a/scripts/install.sh b/scripts/install.sh index 0d1e121..9b65546 100755 --- a/scripts/install.sh +++ b/scripts/install.sh @@ -14,6 +14,8 @@ set -e what=$1 +on_ha=0 +[ -z "$what" ] && what="client" if [ -d /homeassistant ]; then echo "cannot install in HA, run \"docker exec -it homeassistant $0 $@\"" @@ -23,39 +25,62 @@ if [ -d /config ]; then echo "Installing on HA" where="/config/bin" venv="/config/venvs" + on_ha=1 else - if [ ! -d ~/.local/bin ] && [ ! -d ~/bin ]; then - echo "No suitable bin directory found in PATH, please add either ~/.local/bin or ~/bin to your PATH" + 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 ~/bin ~/.local/bin; do + for where in $HOME/bin $HOME/.local/bin notset ; do if echo ":$PATH:" | grep -q ":$where:" ; then break fi done - venv="~/venvs" + 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 + venv="$HOME/venvs" fi -if [ "$what" = "server" ]; then - echo "Installing heartbeat server (hbd)" -else - what="client" - echo "Installing heartbeat client (hbc)" -fi +echo "Installing heartbeat $what" + if [ ! -d $venv/hbd ]; then + python3 -m pip --version > /dev/null 2>&1 + if [ $? -ne 0 ]; then + # truenas does 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 - python3 -m venv $venv/hbd --system-site-packages --without-pip + 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 - curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py && python3 get-pip.py + if [ -n "$arg" ]; then + curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py && python3 get-pip.py + fi deactivate -# python3 -m pip --version > /dev/null 2>&1 || { echo "pip is not installed, please install pip for python3"; exit 1; } fi . $venv/hbd/bin/activate pip install --upgrade --index-url https://git.wrede.ca/api/packages/andreas/pypi/simple/ --extra-index-url https://pypi.org/simple hbd[$what] if [ "$what" = "server" ]; then - rm -f ~$where/hbd + 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" else rm -f $where/hbc ln -sf $(which hbc) $where/hbc + 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 fi