From d827d42968da9da61a4c0ed266580b004061e351 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Sun, 5 Jan 2025 17:02:27 +0100 Subject: [PATCH] [Breaking] Update Zigbee2mqtt to v.2.0.0 (Read PR Description) (#1221) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Fix Zigbee2MQTT BreakingChange to Version 2.0.0 * Update zigbee2mqtt.sh * Fix Installation Zigbee2Mqtt 2.0.0 * Fix Zigbee2MQTT V.2.0.0 * Update zigbee2mqtt-install.sh * update script * Update install/zigbee2mqtt-install.sh Co-authored-by: Sébastiaan * add pnpm build * add pnpm build * update nodejs * Update ct/zigbee2mqtt.sh Co-authored-by: Sébastiaan --------- Co-authored-by: Sébastiaan --- ct/zigbee2mqtt.sh | 114 +++++++++------------------------ install/zigbee2mqtt-install.sh | 49 ++++++++------ 2 files changed, 59 insertions(+), 104 deletions(-) diff --git a/ct/zigbee2mqtt.sh b/ct/zigbee2mqtt.sh index 04f4646d..591e19bb 100644 --- a/ct/zigbee2mqtt.sh +++ b/ct/zigbee2mqtt.sh @@ -32,91 +32,35 @@ function update_script() { msg_error "No ${APP} Installation Found!" exit fi - if [[ "$(node -v | cut -d 'v' -f 2)" == "18."* ]]; then - if ! command -v npm >/dev/null 2>&1; then - echo "Installing NPM..." - apt-get install -y npm >/dev/null 2>&1 - echo "Installed NPM..." - fi + RELEASE=$(curl -s https://api.github.com/repos/Koenkk/zigbee2mqtt/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') + if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then + msg_info "Stopping Service" + systemctl stop zigbee2mqtt + msg_ok "Stopped Service" + + msg_info "Creating Backup" + mkdir -p /opt/z2m_backup + tar -czf /opt/z2m_backup/${APP}_backup_$(date +%Y%m%d%H%M%S).tar.gz -C /opt zigbee2mqtt &>/dev/null + mv /opt/zigbee2mqtt/data /opt/z2m_backup + msg_ok "Backup Created" + + msg_info "Updating ${APP} to v${RELEASE}" + cd /opt + wget -q "https://github.com/Koenkk/zigbee2mqtt/archive/refs/tags/${RELEASE}.zip" + unzip -q ${RELEASE}.zip + mv zigbee2mqtt-${RELEASE} /opt/zigbee2mqtt + rm -rf /opt/zigbee2mqtt/data + mv /opt/z2m_backup/data /opt/zigbee2mqtt + cd /opt/zigbee2mqtt + pnpm install --frozen-lockfile &>/dev/null + pnpm build &>/dev/null + msg_info "Starting Service" + systemctl start zigbee2mqtt + msg_ok "Started Service" + echo "${RELEASE}" >/opt/${APP}_version.txt + else + msg_ok "No update required. ${APP} is already at v${RELEASE}." fi - cd /opt/zigbee2mqtt - - stop_zigbee2mqtt() { - if which systemctl 2>/dev/null >/dev/null; then - echo "Shutting down Zigbee2MQTT..." - sudo systemctl stop zigbee2mqtt - else - echo "Skipped stopping Zigbee2MQTT, no systemctl found" - fi - } - - start_zigbee2mqtt() { - if which systemctl 2>/dev/null >/dev/null; then - echo "Starting Zigbee2MQTT..." - sudo systemctl start zigbee2mqtt - else - echo "Skipped starting Zigbee2MQTT, no systemctl found" - fi - } - - set -e - - if [ -d data-backup ]; then - echo "ERROR: Backup directory exists. May be previous restoring was failed?" - echo "1. Save 'data-backup' and 'data' dirs to safe location to make possibility to restore config later." - echo "2. Manually delete 'data-backup' dir and try again." - exit 1 - fi - - stop_zigbee2mqtt - - echo "Generating a backup of the configuration..." - cp -R data data-backup || { - echo "Failed to create backup." - exit 1 - } - - echo "Checking if any changes were made to package-lock.json..." - git checkout package-lock.json || { - echo "Failed to check package-lock.json." - exit 1 - } - - echo "Initiating update..." - if ! git pull; then - echo "Update failed, temporarily storing changes and trying again." - git stash && git pull || ( - echo "Update failed even after storing changes. Aborting." - exit 1 - ) - fi - - echo "Acquiring necessary components..." - npm ci || { - echo "Failed to install necessary components." - exit 1 - } - - echo "Building..." - npm run build || { - echo "Failed to build new version." - exit 1 - } - - echo "Restoring configuration..." - cp -R data-backup/* data || { - echo "Failed to restore configuration." - exit 1 - } - - rm -rf data-backup || { - echo "Failed to remove backup directory." - exit 1 - } - - start_zigbee2mqtt - - echo "Done!" exit } @@ -127,4 +71,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}:9442${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:9442${CL}" diff --git a/install/zigbee2mqtt-install.sh b/install/zigbee2mqtt-install.sh index 516fc3b0..bb012e99 100644 --- a/install/zigbee2mqtt-install.sh +++ b/install/zigbee2mqtt-install.sh @@ -14,21 +14,22 @@ network_check update_os msg_info "Installing Dependencies" -$STD apt-get install -y curl -$STD apt-get install -y sudo -$STD apt-get install -y mc -$STD apt-get install -y git -$STD apt-get install -y make -$STD apt-get install -y g++ -$STD apt-get install -y gcc -$STD apt-get install -y ca-certificates -$STD apt-get install -y gnupg +$STD apt-get install -y \ + curl \ + sudo \ + mc \ + git \ + make \ + g++ \ + gcc \ + ca-certificates \ + gnupg msg_ok "Installed Dependencies" msg_info "Setting up Node.js Repository" mkdir -p /etc/apt/keyrings curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg -echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main" >/etc/apt/sources.list.d/nodesource.list +echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_22.x nodistro main" >/etc/apt/sources.list.d/nodesource.list msg_ok "Set up Node.js Repository" msg_info "Installing Node.js" @@ -36,37 +37,47 @@ $STD apt-get update $STD apt-get install -y nodejs msg_ok "Installed Node.js" -msg_info "Setting up Zigbee2MQTT Repository" -$STD git clone --depth 1 https://github.com/Koenkk/zigbee2mqtt.git /opt/zigbee2mqtt -msg_ok "Set up Zigbee2MQTT Repository" +msg_info "Installing pnpm" +$STD npm install -g pnpm +msg_ok "Installed pnpm" -msg_info "Installing Zigbee2MQTT" +msg_info "Setting up Zigbee2MQTT" +cd /opt +$STD corepack enable +RELEASE=$(curl -s https://api.github.com/repos/Koenkk/zigbee2mqtt/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') +wget -q "https://github.com/Koenkk/zigbee2mqtt/archive/refs/tags/${RELEASE}.zip" +unzip -q ${RELEASE}.zip +mv zigbee2mqtt-${RELEASE} /opt/zigbee2mqtt +cd /opt/zigbee2mqtt/data +mv configuration.example.yaml configuration.yaml cd /opt/zigbee2mqtt -$STD npm ci +$STD pnpm install --frozen-lockfile +$STD pnpm build msg_ok "Installed Zigbee2MQTT" msg_info "Creating Service" -service_path="/etc/systemd/system/zigbee2mqtt.service" +cat </etc/systemd/system/zigbee2mqtt.service echo "[Unit] Description=zigbee2mqtt After=network.target [Service] Environment=NODE_ENV=production -ExecStart=/usr/bin/npm start +ExecStart=/usr/bin/pnpm start WorkingDirectory=/opt/zigbee2mqtt StandardOutput=inherit StandardError=inherit Restart=always User=root [Install] -WantedBy=multi-user.target" >$service_path -$STD systemctl enable zigbee2mqtt.service +EOF +systemctl enable -q --now zigbee2mqtt.service msg_ok "Created Service" motd_ssh customize msg_info "Cleaning up" +rm -rf /opt/${RELEASE}.zip $STD apt-get -y autoremove $STD apt-get -y autoclean msg_ok "Cleaned"