116 lines
4.2 KiB
Bash
Executable File
116 lines
4.2 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
|
|
# 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 command on that machine:"
|
|
echo " curl -s -o $where/hb_install.sh https://git.wrede.ca/andreas/heartbeat/raw/branch/master/scripts/hb_install.sh"
|
|
echo " and then run $where/hb_install.sh [mini|client]" |