homeassistant (core) - first version to upgrade/change venv, pip and homeassistant itself
This commit is contained in:
6
seqs/homeassistant.cfg.example
Normal file
6
seqs/homeassistant.cfg.example
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
readonly sc_haUser="homeassistant"
|
||||||
|
readonly sc_haVenv="/srv/homeassistant"
|
||||||
|
# Additional pip packages (homeassistant already included)
|
||||||
|
readonly sc_haDeps=()
|
137
seqs/homeassistant.sh
Executable file
137
seqs/homeassistant.sh
Executable file
@@ -0,0 +1,137 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Homeassistant core
|
||||||
|
|
||||||
|
readonly toolName="homeassistant"
|
||||||
|
readonly toolService="home-assistant"
|
||||||
|
|
||||||
|
# Already defined by sequencer.sh, but may be overwritten
|
||||||
|
#readonly seq_configName="${sq_scriptName:?}.cfg"
|
||||||
|
#readonly seq_configTemplate="${seq_origin:?}/${sq_configName:?}.example"
|
||||||
|
|
||||||
|
sq_aptOpt=
|
||||||
|
sq_config=0
|
||||||
|
|
||||||
|
seq_config() {
|
||||||
|
## or to use sequencer api with global config file:
|
||||||
|
if ! initSeqConfig "${seq_configName:?}" "${seq_configTemplate:?}" ; then
|
||||||
|
# End if no configuration file exists
|
||||||
|
dry || return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
## Apt cmdline option to suppress user interaction
|
||||||
|
interactive || sq_aptOpt="-y"
|
||||||
|
|
||||||
|
## Return of non zero value will abort the sequence
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
step_4_info() { echo 'Create home-assistant venv'; }
|
||||||
|
step_4_alias() { echo 'venv'; }
|
||||||
|
step_4_options() { echo '[PYTHON BINARY]'; }
|
||||||
|
step_4() {
|
||||||
|
shift
|
||||||
|
local pyBin="python3"
|
||||||
|
[ -d "${sc_haVenv}" ] && die "${toolName} venv already exists"
|
||||||
|
[ -f "${1:-}" ] && pyBin="${1}"
|
||||||
|
exe mkdir -p "${sc_haVenv:?}"
|
||||||
|
exe chown "${sc_haUser}:" "${sc_haVenv}"
|
||||||
|
runAsHa createVenv "${pyBin}" "${sc_haVenv}"
|
||||||
|
}
|
||||||
|
|
||||||
|
# createVenv <PYTHON BINARY> <VENV LOCATION>
|
||||||
|
createVenv() {
|
||||||
|
cd "${2:?}" && "${1:?}" -m venv .
|
||||||
|
}
|
||||||
|
|
||||||
|
step_20_info() { echo "Upgrade pip"; }
|
||||||
|
step_20_alias() { echo 'upgradepip'; }
|
||||||
|
step_20() {
|
||||||
|
runAsHa updatePy "${sc_haVenv}" pip
|
||||||
|
endReturn "Could not upgrade pip"
|
||||||
|
}
|
||||||
|
|
||||||
|
step_21_info() { echo "Upgrade $toolName core installation"; }
|
||||||
|
step_21_alias() { echo "upgrade"; }
|
||||||
|
step_21() {
|
||||||
|
exe service "${toolService}" stop
|
||||||
|
endReturn "Could not stop ${toolName}"
|
||||||
|
runAsHa updatePy "${sc_haVenv}" homeassistant "${sc_haDeps[@]}"
|
||||||
|
endReturn "Could not upgrade ${toolName}"
|
||||||
|
exe service "${toolService}" start
|
||||||
|
}
|
||||||
|
|
||||||
|
# updateHa <HA VENV ROOT> [OPTIONAL PIP PACKAGE ...]
|
||||||
|
updatePy() {
|
||||||
|
source "${1:?}/bin/activate"
|
||||||
|
shift
|
||||||
|
pip3 install --upgrade "$@"
|
||||||
|
}
|
||||||
|
|
||||||
|
step_30_info() { echo 'Upgrade venv to new python version'; }
|
||||||
|
step_30_options() { echo '<PYTHON VERSION>'; }
|
||||||
|
step_30_alias() { echo 'upgradevenv'; }
|
||||||
|
step_30() {
|
||||||
|
shift
|
||||||
|
local pyVer="${1:-}"
|
||||||
|
local buDate="$(date +%Y%m%d-%H%M%S)"
|
||||||
|
endIfEmpty pyVer "No python version given"
|
||||||
|
exe service "${toolService}" stop
|
||||||
|
endReturn "Could not stop ${toolName}"
|
||||||
|
exe mv "${sc_haVenv}" "${sc_haVenv}_bu_${buDate}" 2>/dev/null || true
|
||||||
|
local pyBin="$(command -v "python${pyVer}")"
|
||||||
|
step venv "${pyBin}"
|
||||||
|
}
|
||||||
|
|
||||||
|
step_31_info() { echo "Install ${toolName} in venv"; }
|
||||||
|
step_31() {
|
||||||
|
runAsHa installHa "${sc_haVenv}" "${sc_haDeps[@]}"
|
||||||
|
}
|
||||||
|
|
||||||
|
installHa() {
|
||||||
|
cd "${1:?}" && source "bin/activate" || return 1
|
||||||
|
shift
|
||||||
|
python3 -m pip install wheel
|
||||||
|
pip3 install homeassistant "$@"
|
||||||
|
}
|
||||||
|
|
||||||
|
step_32_info() { echo "Start $toolName in new venv"; }
|
||||||
|
step_32() {
|
||||||
|
exe service "${toolService}" start
|
||||||
|
}
|
||||||
|
|
||||||
|
# runAsHa <FUNCTION> [ARGS...]
|
||||||
|
# Run given function as home-assistant user inside the virtual environment
|
||||||
|
runAsHa() {
|
||||||
|
local func="${1:?}"
|
||||||
|
shift
|
||||||
|
exe sudo -Hu "${sc_haUser}" bash -c "$(declare -f "${func}"); ${func} "'"$@"' "" "$@"
|
||||||
|
}
|
||||||
|
|
||||||
|
step_50_alias() { echo 'notes'; }
|
||||||
|
step_50() {
|
||||||
|
color green
|
||||||
|
cat <<NOTES_END
|
||||||
|
# Systemd service example
|
||||||
|
|
||||||
|
[Unit]
|
||||||
|
Description=Home Assistant
|
||||||
|
After=network-online.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
User=homeassistant
|
||||||
|
WorkingDirectory=/home/homeassistant/.homeassistant
|
||||||
|
ExecStart=${sc_haVenv:-"/srv/homeassistant"}/bin/hass -c "/home/homeassistant/.homeassistant"
|
||||||
|
RestartForceExitStatus=100
|
||||||
|
Restart=on-failure
|
||||||
|
RestartSec=5s
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
NOTES_END
|
||||||
|
}
|
||||||
|
|
||||||
|
# shellcheck disable=SC2034 # Appears unused
|
||||||
|
readonly sqr_minVersion=16
|
||||||
|
# shellcheck disable=SC1091 # Don't follow this source
|
||||||
|
. /usr/local/bin/sequencer.sh
|
Reference in New Issue
Block a user