133 lines
4.8 KiB
Bash
Executable File
133 lines
4.8 KiB
Bash
Executable File
#!/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
|