From 66ab254fb288410834c53fd30b09c36261a0c928 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Tue, 24 Jun 2025 11:33:26 +0200 Subject: [PATCH] Refactor: ESPHome to uv based install (#5413) * Refactor: ESPHome to uv based install * fix curl --- ct/esphome.sh | 57 ++++++++++++++++++++++++++++++-------- install/esphome-install.sh | 26 ++++++++--------- 2 files changed, 59 insertions(+), 24 deletions(-) diff --git a/ct/esphome.sh b/ct/esphome.sh index f9b086a62..127a2d9a5 100644 --- a/ct/esphome.sh +++ b/ct/esphome.sh @@ -25,22 +25,57 @@ function update_script() { check_container_resources if [[ ! -f /etc/systemd/system/esphomeDashboard.service ]]; then msg_error "No ${APP} Installation Found!" - exit + exit 1 fi - msg_info "Stopping ESPHome" + + msg_info "Stopping ${APP}" systemctl stop esphomeDashboard - msg_ok "Stopped ESPHome" + msg_ok "Stopped ${APP}" - msg_info "Updating ESPHome" - if [[ -d /srv/esphome ]]; then - $STD source /srv/esphome/bin/activate + VENV_PATH="/opt/esphome/.venv" + ESPHOME_BIN="${VENV_PATH}/bin/esphome" + export PYTHON_VERSION="3.12" + + if [[ ! -d "$VENV_PATH" || ! -x "$ESPHOME_BIN" ]]; then + PYTHON_VERSION="3.12" setup_uv + msg_info "Migrating to uv/venv" + rm -rf "$VENV_PATH" + mkdir -p /opt/esphome + cd /opt/esphome + $STD uv venv "$VENV_PATH" + $STD "$VENV_PATH/bin/python" -m ensurepip --upgrade + $STD "$VENV_PATH/bin/python" -m pip install --upgrade pip + $STD "$VENV_PATH/bin/python" -m pip install esphome tornado esptool + msg_ok "Migrated to uv/venv" + else + msg_info "Updating ESPHome" + PYTHON_VERSION="3.12" setup_uv + $STD "$VENV_PATH/bin/python" -m pip install --upgrade esphome tornado esptool + msg_ok "Updated ESPHome" fi - $STD pip3 install -U esphome - msg_ok "Updated ESPHome" + SERVICE_FILE="/etc/systemd/system/esphomeDashboard.service" + if ! grep -q "${VENV_PATH}/bin/esphome" "$SERVICE_FILE"; then + msg_info "Updating systemd service" + cat <"$SERVICE_FILE" +[Unit] +Description=ESPHome Dashboard +After=network.target - msg_info "Starting ESPHome" +[Service] +ExecStart=${VENV_PATH}/bin/esphome dashboard /root/config/ +Restart=always +User=root + +[Install] +WantedBy=multi-user.target +EOF + $STD systemctl daemon-reload + msg_ok "Updated systemd service" + fi + + msg_info "Starting ${APP}" systemctl start esphomeDashboard - msg_ok "Started ESPHome" + msg_ok "Started ${APP}" msg_ok "Updated Successfully" exit } @@ -52,4 +87,4 @@ description msg_ok "Completed Successfully!\n" echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" echo -e "${INFO}${YW} Access it using the following URL:${CL}" -echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:6052${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:6052${CL}" diff --git a/install/esphome-install.sh b/install/esphome-install.sh index 37e2d71d0..8e8e022c5 100644 --- a/install/esphome-install.sh +++ b/install/esphome-install.sh @@ -17,34 +17,34 @@ msg_info "Installing Dependencies" $STD apt-get install -y git msg_ok "Installed Dependencies" -msg_info "Setup Python3" -$STD apt-get install -y \ - python3 \ - python3-dev \ - python3-pip \ - python3-venv -rm -rf /usr/lib/python3.*/EXTERNALLY-MANAGED -msg_ok "Setup Python3" +PYTHON_VERSION="3.12" setup_uv -msg_info "Installing ESPHome" -mkdir /root/config -$STD pip install esphome tornado esptool -msg_ok "Installed ESPHome" +msg_info "Setting up Virtual Environment" +mkdir -p /opt/esphome +mkdir -p /root/config +cd /opt/esphome +$STD uv venv /opt/esphome/.venv +$STD /opt/esphome/.venv/bin/python -m ensurepip --upgrade +$STD /opt/esphome/.venv/bin/python -m pip install --upgrade pip +$STD /opt/esphome/.venv/bin/python -m pip install esphome tornado esptool +msg_ok "Setup and Installed ESPHome" msg_info "Creating Service" +mkdir -p /root/config cat </etc/systemd/system/esphomeDashboard.service [Unit] Description=ESPHome Dashboard After=network.target [Service] -ExecStart=/usr/local/bin/esphome dashboard /root/config/ +ExecStart=/opt/esphome/.venv/bin/esphome dashboard /root/config/ Restart=always User=root [Install] WantedBy=multi-user.target EOF + systemctl enable -q --now esphomeDashboard msg_ok "Created Service"