From d7757aa5d174951aee6c85467062fd389e6032fd Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Mon, 14 Apr 2025 21:04:40 +0200 Subject: [PATCH 01/29] Omada: Increase RAM to 3GB and little improvements (#3885) --- ct/omada.sh | 21 +++++++++++---------- frontend/public/json/omada.json | 4 ++-- install/omada-install.sh | 24 ++++++++++-------------- 3 files changed, 23 insertions(+), 26 deletions(-) diff --git a/ct/omada.sh b/ct/omada.sh index 81035c2eb..10e37ba3f 100644 --- a/ct/omada.sh +++ b/ct/omada.sh @@ -8,7 +8,7 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV APP="Omada" var_tags="${var_tags:-tp-link;controller}" var_cpu="${var_cpu:-2}" -var_ram="${var_ram:-2048}" +var_ram="${var_ram:-3072}" var_disk="${var_disk:-8}" var_os="${var_os:-debian}" var_version="${var_version:-12}" @@ -53,17 +53,18 @@ function update_script() { fi msg_info "Updating Omada Controller" - latest_url=$(curl -fsSL "https://support.omadanetworks.com/en/download/software/omada-controller/" | grep -o 'https://static\.tp-link\.com/upload/software/[^"]*linux_x64[^"]*\.deb' | head -n 1) - latest_version=$(basename "$latest_url") - if [ -z "${latest_version}" ]; then - msg_error "It seems that the server (tp-link.com) might be down. Please try again at a later time." - exit + OMADA_URL=$(curl -fsSL "https://support.omadanetworks.com/en/download/software/omada-controller/" | + grep -o 'https://static\.tp-link\.com/upload/software/[^"]*linux_x64[^"]*\.deb' | + head -n1) + OMADA_PKG=$(basename "$OMADA_URL") + if [ -z "$OMADA_PKG" ]; then + msg_error "Could not retrieve Omada package – server may be down." + exit 1 fi - - curl -fsSL "${latest_url}" -O + curl -fsSL "$OMADA_URL" -o "$OMADA_PKG" export DEBIAN_FRONTEND=noninteractive - $STD dpkg -i ${latest_version} - rm -rf ${latest_version} + $STD dpkg -i "$OMADA_PKG" + rm -f "$OMADA_PKG" msg_ok "Updated Omada Controller" } diff --git a/frontend/public/json/omada.json b/frontend/public/json/omada.json index 26485cacf..0eccf6b02 100644 --- a/frontend/public/json/omada.json +++ b/frontend/public/json/omada.json @@ -19,7 +19,7 @@ "script": "ct/omada.sh", "resources": { "cpu": 2, - "ram": 2048, + "ram": 3072, "hdd": 8, "os": "debian", "version": "12" @@ -31,4 +31,4 @@ "password": null }, "notes": [] -} \ No newline at end of file +} diff --git a/install/omada-install.sh b/install/omada-install.sh index 92f02445e..546b6412e 100644 --- a/install/omada-install.sh +++ b/install/omada-install.sh @@ -19,20 +19,17 @@ msg_ok "Installed Dependencies" msg_info "Checking CPU Features" if lscpu | grep -q 'avx'; then - USE_AVX=true MONGODB_VERSION="7.0" msg_ok "AVX detected: Using MongoDB 7.0" else - USE_AVX=false - MONGODB_VERSION="4.4" msg_error "No AVX detected: TP-Link Canceled Support for Old MongoDB for Debian 12\n https://www.tp-link.com/baltic/support/faq/4160/" - exit 1 + exit 0 fi msg_info "Installing Azul Zulu Java" curl -fsSL "https://keyserver.ubuntu.com/pks/lookup?op=get&search=0xB1998361219BD9C9" -o "/etc/apt/trusted.gpg.d/zulu-repo.asc" -curl -fsSL "https://cdn.azul.com/zulu/bin/zulu-repo_1.0.0-3_all.deb" -o $(basename "https://cdn.azul.com/zulu/bin/zulu-repo_1.0.0-3_all.deb") -$STD dpkg -i zulu-repo_1.0.0-3_all.deb +curl -fsSL "https://cdn.azul.com/zulu/bin/zulu-repo_1.0.0-3_all.deb" -o zulu-repo.deb +$STD dpkg -i zulu-repo.deb $STD apt-get update $STD apt-get -y install zulu21-jre-headless msg_ok "Installed Azul Zulu Java" @@ -43,8 +40,6 @@ if ! dpkg -l | grep -q 'libssl1.1'; then $STD dpkg -i /tmp/libssl.deb rm -f /tmp/libssl.deb msg_ok "Installed libssl1.1" -else - msg_ok "libssl1.1 already installed" fi msg_info "Installing MongoDB $MONGODB_VERSION" @@ -55,18 +50,19 @@ $STD apt-get install -y mongodb-org msg_ok "Installed MongoDB $MONGODB_VERSION" msg_info "Installing Omada Controller" -latest_url=$(curl -fsSL "https://support.omadanetworks.com/en/download/software/omada-controller/" | grep -o 'https://static\.tp-link\.com/upload/software/[^"]*linux_x64[^"]*\.deb' | head -n 1) -latest_version=$(basename "$latest_url") - -curl -fsSL "${latest_url}" -O -$STD dpkg -i ${latest_version} +OMADA_URL=$(curl -fsSL "https://support.omadanetworks.com/en/download/software/omada-controller/" | + grep -o 'https://static\.tp-link\.com/upload/software/[^"]*linux_x64[^"]*\.deb' | + head -n1) +OMADA_PKG=$(basename "$OMADA_URL") +curl -fsSL "$OMADA_URL" -o "$OMADA_PKG" +$STD dpkg -i "$OMADA_PKG" msg_ok "Installed Omada Controller" motd_ssh customize msg_info "Cleaning up" -rm -rf ${latest_version} zulu-repo_1.0.0-3_all.deb +rm -rf "$OMADA_PKG" zulu-repo.deb $STD apt-get -y autoremove $STD apt-get -y autoclean msg_ok "Cleaned" From b25b823d694a2f847a0973654a731f3d3a9d3f9f Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Mon, 14 Apr 2025 21:04:59 +0200 Subject: [PATCH 02/29] Update versions.json (#3879) --- frontend/public/json/versions.json | 146 ++++++++++++++--------------- 1 file changed, 73 insertions(+), 73 deletions(-) diff --git a/frontend/public/json/versions.json b/frontend/public/json/versions.json index bcc32a47a..15f72e785 100644 --- a/frontend/public/json/versions.json +++ b/frontend/public/json/versions.json @@ -1,4 +1,69 @@ [ + { + "name": "Graylog2/graylog2-server", + "version": "6.2.0-rc.1", + "date": "2025-04-14T11:26:18Z" + }, + { + "name": "fhem/fhem-mirror", + "version": "6.2", + "date": "2025-04-14T10:36:18Z" + }, + { + "name": "bluenviron/mediamtx", + "version": "v1.12.0", + "date": "2025-04-14T10:36:04Z" + }, + { + "name": "Stirling-Tools/Stirling-PDF", + "version": "v0.45.5", + "date": "2025-04-14T09:57:39Z" + }, + { + "name": "open-webui/open-webui", + "version": "v0.6.5", + "date": "2025-04-14T09:13:36Z" + }, + { + "name": "zwave-js/zwave-js-ui", + "version": "v10.2.0", + "date": "2025-04-14T08:53:44Z" + }, + { + "name": "zabbix/zabbix", + "version": "6.0.40rc1", + "date": "2025-04-14T08:45:46Z" + }, + { + "name": "duplicati/duplicati", + "version": "v2.1.0.114-2.1.0.114_canary_2025-04-14", + "date": "2025-04-14T07:54:21Z" + }, + { + "name": "evcc-io/evcc", + "version": "0.203.1", + "date": "2025-04-14T07:23:02Z" + }, + { + "name": "morpheus65535/bazarr", + "version": "v1.5.1", + "date": "2025-01-01T16:15:52Z" + }, + { + "name": "Jackett/Jackett", + "version": "v0.22.1775", + "date": "2025-04-14T05:59:53Z" + }, + { + "name": "firefly-iii/firefly-iii", + "version": "v6.2.10", + "date": "2025-03-22T13:02:26Z" + }, + { + "name": "glanceapp/glance", + "version": "v0.7.12", + "date": "2025-04-14T00:16:15Z" + }, { "name": "ellite/Wallos", "version": "v2.49.1", @@ -14,11 +79,6 @@ "version": "v1.61.0", "date": "2025-04-13T21:14:40Z" }, - { - "name": "fhem/fhem-mirror", - "version": "6.2", - "date": "2025-04-13T20:28:55Z" - }, { "name": "Ombi-app/Ombi", "version": "v4.47.1", @@ -30,9 +90,14 @@ "date": "2025-04-13T18:31:13Z" }, { - "name": "glanceapp/glance", - "version": "v0.7.11", - "date": "2025-04-13T16:22:22Z" + "name": "runtipi/runtipi", + "version": "v3.10.0", + "date": "2025-03-15T14:38:16Z" + }, + { + "name": "keycloak/keycloak", + "version": "26.2.0", + "date": "2025-04-11T12:48:27Z" }, { "name": "karakeep-app/karakeep", @@ -44,11 +109,6 @@ "version": "v2.0.0-beta.9", "date": "2025-04-12T13:58:29Z" }, - { - "name": "evcc-io/evcc", - "version": "0.203.0", - "date": "2025-04-13T11:49:39Z" - }, { "name": "qbittorrent/qBittorrent", "version": "release-5.0.5", @@ -74,21 +134,6 @@ "version": "v5.21.1.9799", "date": "2025-03-24T15:52:12Z" }, - { - "name": "morpheus65535/bazarr", - "version": "v1.5.1", - "date": "2025-01-01T16:15:52Z" - }, - { - "name": "open-webui/open-webui", - "version": "v0.6.4", - "date": "2025-04-13T06:01:32Z" - }, - { - "name": "Jackett/Jackett", - "version": "v0.22.1773", - "date": "2025-04-13T05:56:23Z" - }, { "name": "slskd/slskd", "version": "0.22.4", @@ -124,11 +169,6 @@ "version": "0.18.0", "date": "2025-04-12T08:55:32Z" }, - { - "name": "runtipi/runtipi", - "version": "v3.10.0", - "date": "2025-03-15T14:38:16Z" - }, { "name": "Bubka/2FAuth", "version": "v5.5.2", @@ -144,11 +184,6 @@ "version": "v4.0.8", "date": "2025-04-03T05:11:15Z" }, - { - "name": "firefly-iii/firefly-iii", - "version": "v6.2.10", - "date": "2025-03-22T13:02:26Z" - }, { "name": "tailscale/tailscale", "version": "v1.82.4", @@ -159,16 +194,6 @@ "version": "v4.99.2", "date": "2025-04-11T17:57:47Z" }, - { - "name": "keycloak/keycloak", - "version": "26.2.0", - "date": "2025-04-11T12:48:27Z" - }, - { - "name": "duplicati/duplicati", - "version": "v2.1.0.113-2.1.0.113_canary_2025-04-11", - "date": "2025-04-11T16:57:07Z" - }, { "name": "TriliumNext/Notes", "version": "v0.0.0", @@ -199,11 +224,6 @@ "version": "4.5.1", "date": "2025-04-11T09:57:47Z" }, - { - "name": "Stirling-Tools/Stirling-PDF", - "version": "v0.45.4", - "date": "2025-04-11T08:45:04Z" - }, { "name": "home-assistant/operating-system", "version": "15.1", @@ -389,31 +409,16 @@ "version": "v1.10.0", "date": "2025-04-07T14:32:15Z" }, - { - "name": "Graylog2/graylog2-server", - "version": "6.2.0-beta.4", - "date": "2025-04-07T11:28:13Z" - }, { "name": "fallenbagel/jellyseerr", "version": "preview-back-to-axios", "date": "2025-04-07T09:23:08Z" }, - { - "name": "zwave-js/zwave-js-ui", - "version": "v10.1.5", - "date": "2025-04-07T09:19:35Z" - }, { "name": "redis/redis", "version": "8.0-rc1-int2", "date": "2025-04-02T19:05:08Z" }, - { - "name": "zabbix/zabbix", - "version": "7.4.0beta1", - "date": "2025-04-07T08:14:13Z" - }, { "name": "nzbgetcom/nzbget", "version": "v24.8", @@ -1004,11 +1009,6 @@ "version": "v0.15.0", "date": "2025-02-08T18:45:30Z" }, - { - "name": "bluenviron/mediamtx", - "version": "v1.11.3", - "date": "2025-02-07T19:29:19Z" - }, { "name": "apache/tika", "version": "2.9.3", From 4b275ae911dfd9ceec6db8fea93d2cb94a187a68 Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Mon, 14 Apr 2025 21:06:33 +0200 Subject: [PATCH 03/29] Update CHANGELOG.md (#3883) --- CHANGELOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ed11f62fc..ab712102f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,7 +18,8 @@ All LXC instances created using this repository come pre-installed with Midnight ### πŸ†• New Scripts - - Alpine-AdGuardHome [@MickLesk](https://github.com/MickLesk) ([#3875](https://github.com/community-scripts/ProxmoxVE/pull/3875)) + - openziti-controller ([#3880](https://github.com/community-scripts/ProxmoxVE/pull/3880)) +- Alpine-AdGuardHome [@MickLesk](https://github.com/MickLesk) ([#3875](https://github.com/community-scripts/ProxmoxVE/pull/3875)) ### πŸš€ Updated Scripts From e8e4748c966c5a8a3c38b0a2f3077a113cf2cb83 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Slavi=C5=A1a=20Are=C5=BEina?= <58952836+tremor021@users.noreply.github.com> Date: Tue, 15 Apr 2025 11:22:43 +0200 Subject: [PATCH 04/29] Fix update error caused by externaly managed message (#3892) --- ct/sabnzbd.sh | 49 +++++++++++++++++++++++++------------------------ 1 file changed, 25 insertions(+), 24 deletions(-) diff --git a/ct/sabnzbd.sh b/ct/sabnzbd.sh index fe84431db..b67a18407 100644 --- a/ct/sabnzbd.sh +++ b/ct/sabnzbd.sh @@ -20,29 +20,30 @@ color catch_errors function update_script() { - header_info - check_container_storage - check_container_resources - if [[ ! -d /opt/sabnzbd ]]; then - msg_error "No ${APP} Installation Found!" - exit - fi - RELEASE=$(curl -fsSL https://api.github.com/repos/sabnzbd/sabnzbd/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 "Updating $APP to ${RELEASE}" - systemctl stop sabnzbd.service - tar zxvf <(curl -fsSL https://github.com/sabnzbd/sabnzbd/releases/download/$RELEASE/SABnzbd-${RELEASE}-src.tar.gz) - cp -rf SABnzbd-${RELEASE}/* /opt/sabnzbd - rm -rf SABnzbd-${RELEASE} - cd /opt/sabnzbd - $STD python3 -m pip install -r requirements.txt - echo "${RELEASE}" >/opt/${APP}_version.txt - systemctl start sabnzbd.service - msg_ok "Updated ${APP} to ${RELEASE}" - else - msg_ok "No update required. ${APP} is already at ${RELEASE}" - fi - exit + header_info + check_container_storage + check_container_resources + if [[ ! -d /opt/sabnzbd ]]; then + msg_error "No ${APP} Installation Found!" + exit + fi + RELEASE=$(curl -fsSL https://api.github.com/repos/sabnzbd/sabnzbd/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 "Updating $APP to ${RELEASE}" + rm -rf /usr/lib/python3.*/EXTERNALLY-MANAGED + systemctl stop sabnzbd.service + tar zxvf <(curl -fsSL https://github.com/sabnzbd/sabnzbd/releases/download/$RELEASE/SABnzbd-${RELEASE}-src.tar.gz) + cp -rf SABnzbd-${RELEASE}/* /opt/sabnzbd + rm -rf SABnzbd-${RELEASE} + cd /opt/sabnzbd + $STD python3 -m pip install -r requirements.txt + echo "${RELEASE}" >/opt/${APP}_version.txt + systemctl start sabnzbd.service + msg_ok "Updated ${APP} to ${RELEASE}" + else + msg_ok "No update required. ${APP} is already at ${RELEASE}" + fi + exit } start @@ -52,4 +53,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}:7777${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:7777${CL}" From cabcdc272eaa7b8c151aa3980beacb7be6b5ed36 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Slavi=C5=A1a=20Are=C5=BEina?= <58952836+tremor021@users.noreply.github.com> Date: Tue, 15 Apr 2025 13:03:51 +0200 Subject: [PATCH 05/29] Installation and update fixes (#3895) --- ct/outline.sh | 81 ++++++++++++++++++++------------------ install/outline-install.sh | 14 ++++--- 2 files changed, 50 insertions(+), 45 deletions(-) diff --git a/ct/outline.sh b/ct/outline.sh index 68c06a215..9fc38bc7d 100644 --- a/ct/outline.sh +++ b/ct/outline.sh @@ -20,45 +20,48 @@ color catch_errors function update_script() { - header_info - check_container_storage - check_container_resources - if [[ ! -d /opt/outline ]]; then - msg_error "No ${APP} Installation Found!" - exit - fi - RELEASE=$(curl -fsSL https://api.github.com/repos/outline/outline/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') - if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then - msg_info "Stopping Services" - systemctl stop outline - msg_ok "Services Stopped" - - msg_info "Updating ${APP} to ${RELEASE}" - temp_file=$(mktemp) - rm -rf /opt/outline/node_modules -curl -fsSL "https://github.com/outline/outline/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file" - tar zxf $temp_file - cp -rf outline-${RELEASE}/* /opt/outline - cd /opt/outline - export NODE_OPTIONS="--max-old-space-size=3584" - $STD yarn install --frozen-lockfile - $STD yarn build - echo "${RELEASE}" >/opt/${APP}_version.txt - msg_ok "Updated ${APP}" - - msg_info "Starting Services" - systemctl start outline - msg_ok "Started Services" - - msg_info "Cleaning Up" - rm -rf $temp_file - rm -rf $HOME/outline-${RELEASE} - msg_ok "Cleaned" - msg_ok "Updated Successfully" - else - msg_ok "No update required. ${APP} is already at ${RELEASE}" - fi + header_info + check_container_storage + check_container_resources + if [[ ! -d /opt/outline ]]; then + msg_error "No ${APP} Installation Found!" exit + fi + RELEASE=$(curl -fsSL https://api.github.com/repos/outline/outline/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') + if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then + msg_info "Stopping Services" + systemctl stop outline + msg_ok "Services Stopped" + + msg_info "Updating ${APP} to ${RELEASE}" + temp_file=$(mktemp) + cp /opt/outline/.env /opt + rm -rf /opt/outline + curl -fsSL "https://github.com/outline/outline/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file" + tar zxf "$temp_file" + mv outline-"${RELEASE}" /opt/outline + cd /opt/outline || exit + export NODE_ENV=development + export NODE_OPTIONS="--max-old-space-size=3584" + $STD yarn install --frozen-lockfile + $STD yarn build + mv /opt/.env /opt/outline + echo "${RELEASE}" >/opt/${APP}_version.txt + msg_ok "Updated ${APP}" + + msg_info "Starting Services" + systemctl start outline + msg_ok "Started Services" + + msg_info "Cleaning Up" + rm -rf "$temp_file" + rm -rf "$HOME"/outline-"${RELEASE}" + msg_ok "Cleaned" + msg_ok "Updated Successfully" + else + msg_ok "No update required. ${APP} is already at ${RELEASE}" + fi + exit } start @@ -68,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}:3000${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}" diff --git a/install/outline-install.sh b/install/outline-install.sh index 236b7b14e..541b2e1d1 100644 --- a/install/outline-install.sh +++ b/install/outline-install.sh @@ -15,10 +15,10 @@ update_os msg_info "Installing Dependencies" $STD apt-get install -y \ - gnupg \ - mkcert \ - git \ - redis + gnupg \ + mkcert \ + git \ + redis msg_ok "Installed Dependencies" msg_info "Setting up Node.js Repository" @@ -43,7 +43,6 @@ $STD apt-get install -y postgresql-16 DB_NAME="outline" DB_USER="outline" DB_PASS="$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | cut -c1-13)" -SECRET_KEY="$(openssl rand -hex 32)" $STD sudo -u postgres psql -c "CREATE ROLE $DB_USER WITH LOGIN PASSWORD '$DB_PASS';" $STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME WITH OWNER $DB_USER ENCODING 'UTF8' TEMPLATE template0;" $STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET client_encoding TO 'utf8';" @@ -52,6 +51,7 @@ $STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET timezone TO 'UTC';" msg_ok "Set up PostgreSQL" msg_info "Setup Outline (Patience)" +SECRET_KEY="$(openssl rand -hex 32)" temp_file=$(mktemp) LOCAL_IP="$(hostname -I | awk '{print $1}')" RELEASE=$(curl -fsSL https://api.github.com/repos/outline/outline/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') @@ -60,6 +60,7 @@ tar zxf $temp_file mv outline-${RELEASE} /opt/outline cd /opt/outline cp .env.sample .env +export NODE_ENV=development sed -i 's/NODE_ENV=production/NODE_ENV=development/g' /opt/outline/.env sed -i "s/generate_a_new_key/${SECRET_KEY}/g" /opt/outline/.env sed -i "s/user:pass@postgres/${DB_USER}:${DB_PASS}@localhost/g" /opt/outline/.env @@ -70,6 +71,7 @@ $STD yarn install --frozen-lockfile export NODE_OPTIONS="--max-old-space-size=3584" $STD yarn build sed -i 's/NODE_ENV=development/NODE_ENV=production/g' /opt/outline/.env +export NODE_ENV=production echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt" msg_ok "Setup Outline" @@ -83,7 +85,7 @@ After=network.target Type=simple User=root WorkingDirectory=/opt/outline -ExecStart=/usr/bin/node ./build/server/index.js +ExecStart=/usr/bin/yarn start Restart=always EnvironmentFile=/opt/outline/.env From d557d01161206b263fb1edccb4087f2d4aa99792 Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Tue, 15 Apr 2025 13:22:15 +0200 Subject: [PATCH 06/29] Update CHANGELOG.md (#3894) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index ab712102f..9ac321e96 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,15 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit All LXC instances created using this repository come pre-installed with Midnight Commander, which is a command-line tool (`mc`) that offers a user-friendly file and directory management interface for the terminal environment. +## 2025-04-15 + +### πŸš€ Updated Scripts + + - #### 🐞 Bug Fixes + + - Outline: Installation and update fixes [@tremor021](https://github.com/tremor021) ([#3895](https://github.com/community-scripts/ProxmoxVE/pull/3895)) + - SABnzbd: Fix update error caused by externaly managed message [@tremor021](https://github.com/tremor021) ([#3892](https://github.com/community-scripts/ProxmoxVE/pull/3892)) + ## 2025-04-14 ### πŸ†• New Scripts From 30e8cbf5b43953aa18a6fdf8f01340777c911009 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Tue, 15 Apr 2025 15:20:46 +0200 Subject: [PATCH 07/29] [core] remove unneeded vars from shellcheck (#3899) * remove unneeded wars * Update alpine-wireguard-install.sh --------- Co-authored-by: Tobias <96661824+CrazyWolf13@users.noreply.github.com> --- ct/alpine-wireguard.sh | 2 +- ct/bookstack.sh | 2 +- ct/create_lxc.sh | 6 +- ct/fenrus.sh | 4 +- ct/gomft.sh | 2 +- ct/heimdall-dashboard.sh | 4 +- ct/hoarder.sh | 8 +- ct/karakeep.sh | 8 +- ct/kimai.sh | 2 +- ct/nginxproxymanager.sh | 6 +- ct/npmplus.sh | 35 ++--- ct/outline.sh | 2 +- ct/paymenter.sh | 2 +- ct/pelican-panel.sh | 4 +- ct/pterodactyl-panel.sh | 2 +- ct/snipeit.sh | 2 +- ct/tandoor.sh | 6 +- ct/zabbix.sh | 2 +- ct/zitadel.sh | 2 +- install/alpine-wireguard-install.sh | 4 +- install/heimdall-dashboard-install.sh | 2 +- install/karakeep-install.sh | 12 +- install/kimai-install.sh | 2 +- install/paperless-ngx-install.sh | 12 +- install/paymenter-install.sh | 2 +- install/pelican-panel-install.sh | 2 +- install/prowlarr-install.sh | 2 +- install/pterodactyl-panel-install.sh | 2 +- install/radarr-install.sh | 2 +- install/zabbix-install.sh | 2 +- misc/build.func | 4 +- tools/addon/add-netbird-lxc.sh | 4 +- tools/addon/add-tailscale-lxc.sh | 4 +- tools/addon/all-templates.sh | 8 +- tools/addon/webmin.sh | 2 +- ...iner-copy-data-home-assistant-container.sh | 6 +- ...container-copy-data-home-assistant-core.sh | 6 +- ...ntainer-copy-data-podman-home-assistant.sh | 6 +- ...core-copy-data-home-assistant-container.sh | 6 +- ...tant-core-copy-data-home-assistant-core.sh | 6 +- tools/copy-data/plex-copy-data-plex.sh | 6 +- ...tant-copy-data-home-assistant-container.sh | 6 +- tools/copy-data/z2m-copy-data-z2m.sh | 6 +- .../zwavejs2mqtt-copy-data-zwavejsui.sh | 6 +- tools/pve/clean-lxcs.sh | 4 +- tools/pve/frigate-support.sh | 2 +- tools/pve/fstrim.sh | 2 +- tools/pve/hw-acceleration.sh | 4 +- tools/pve/kernel-pin.sh | 6 +- tools/pve/lxc-delete.sh | 2 +- tools/pve/microcode.sh | 6 +- tools/pve/pbs_microcode.sh | 6 +- tools/pve/scaling-governor.sh | 4 +- tools/pve/update-lxcs.sh | 4 +- turnkey/turnkey.sh | 10 +- vm/archlinux-vm.sh | 21 ++- vm/debian-vm.sh | 20 +-- vm/docker-vm.sh | 22 +-- vm/haos-vm.sh | 32 ++-- vm/mikrotik-routeros.sh | 5 +- vm/nextcloud-vm.sh | 6 +- vm/openwrt.sh | 6 +- vm/opnsense-vm.sh | 145 +++++++++--------- vm/owncloud-vm.sh | 8 +- vm/pimox-haos-vm.sh | 12 +- vm/ubuntu2204-vm.sh | 18 +-- vm/ubuntu2404-vm.sh | 22 +-- vm/ubuntu2410-vm.sh | 20 +-- 68 files changed, 301 insertions(+), 307 deletions(-) diff --git a/ct/alpine-wireguard.sh b/ct/alpine-wireguard.sh index 48277edc7..a217aa457 100644 --- a/ct/alpine-wireguard.sh +++ b/ct/alpine-wireguard.sh @@ -31,7 +31,7 @@ function update_script() { if [[ -d /etc/wgdashboard/src ]]; then msg_info "update WGDashboard" - cd /etc/wgdashboard/src || exit + cd /etc/wgdashboard/src $STD echo "y" | ./wgd.sh update $STD ./wgd.sh start msg_ok "WGDashboard updated" diff --git a/ct/bookstack.sh b/ct/bookstack.sh index 384ec7d66..808419541 100644 --- a/ct/bookstack.sh +++ b/ct/bookstack.sh @@ -42,7 +42,7 @@ function update_script() { cp -r /opt/bookstack-backup/public/uploads/* /opt/bookstack/public/uploads/ || true cp -r /opt/bookstack-backup/storage/uploads/* /opt/bookstack/storage/uploads/ || true cp -r /opt/bookstack-backup/themes/* /opt/bookstack/themes/ || true - cd /opt/bookstack || exit + cd /opt/bookstack export COMPOSER_ALLOW_SUPERUSER=1 $STD composer install --no-dev $STD php artisan migrate --force diff --git a/ct/create_lxc.sh b/ct/create_lxc.sh index 53ae7a2bd..c969429ef 100644 --- a/ct/create_lxc.sh +++ b/ct/create_lxc.sh @@ -200,11 +200,11 @@ if qm status "$CTID" &>/dev/null || pct status "$CTID" &>/dev/null; then fi # Get template storage -TEMPLATE_STORAGE=$(select_storage template) || exit +TEMPLATE_STORAGE=$(select_storage template) msg_ok "Using ${BL}$TEMPLATE_STORAGE${CL} ${GN}for Template Storage." # Get container storage -CONTAINER_STORAGE=$(select_storage container) || exit +CONTAINER_STORAGE=$(select_storage container) msg_ok "Using ${BL}$CONTAINER_STORAGE${CL} ${GN}for Container Storage." # Update LXC template list @@ -279,4 +279,4 @@ if ! pct create "$CTID" "${TEMPLATE_STORAGE}:vztmpl/${TEMPLATE}" "${PCT_OPTIONS[ exit 209 fi fi -msg_ok "LXC Container ${BL}$CTID${CL} ${GN}was successfully created." \ No newline at end of file +msg_ok "LXC Container ${BL}$CTID${CL} ${GN}was successfully created." diff --git a/ct/fenrus.sh b/ct/fenrus.sh index 196b4ce75..e96d9ffe8 100644 --- a/ct/fenrus.sh +++ b/ct/fenrus.sh @@ -32,7 +32,7 @@ function update_script() { msg_info "Updating ${APP}" systemctl stop ${APP} git clone https://github.com/revenz/Fenrus.git - cd Fenrus || exit + cd Fenrus gitVersionNumber=$(git rev-parse HEAD) if [[ "${gitVersionNumber}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then @@ -66,4 +66,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}:5000${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:5000${CL}" diff --git a/ct/gomft.sh b/ct/gomft.sh index bfd8f39a3..10c1cce2d 100644 --- a/ct/gomft.sh +++ b/ct/gomft.sh @@ -50,7 +50,7 @@ function update_script() { curl -fsSL "https://github.com/StarFleetCPTN/GoMFT/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file" tar -xzf "$temp_file" cp -rf "GoMFT-${RELEASE}"/* /opt/gomft/ - cd /opt/gomft || exit + cd /opt/gomft rm -rf /opt/gomft/node_modules $STD npm ci $STD node build.js diff --git a/ct/heimdall-dashboard.sh b/ct/heimdall-dashboard.sh index 35d51b661..ca8251fdb 100644 --- a/ct/heimdall-dashboard.sh +++ b/ct/heimdall-dashboard.sh @@ -43,14 +43,14 @@ function update_script() { tar xzf "${RELEASE}".tar.gz VER=$(curl -fsSL https://api.github.com/repos/linuxserver/Heimdall/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') cp -R Heimdall-"${VER}"/* /opt/Heimdall - cd /opt/Heimdall || exit + cd /opt/Heimdall $STD apt-get install -y composer export COMPOSER_ALLOW_SUPERUSER=1 $STD composer dump-autoload echo "${RELEASE}" >/opt/${APP}_version.txt msg_ok "Updated Heimdall Dashboard to ${RELEASE}" msg_info "Restoring Data" - cd ~ || exit + cd ~ cp -R database-backup/* /opt/Heimdall/database cp -R public-backup/* /opt/Heimdall/public sleep 1 diff --git a/ct/hoarder.sh b/ct/hoarder.sh index 30bb91559..0695e1c87 100644 --- a/ct/hoarder.sh +++ b/ct/hoarder.sh @@ -40,7 +40,7 @@ function update_script() { if [[ "${PREV_RELEASE}" < 0.23.0 ]]; then $STD apt-get install -y graphicsmagick ghostscript fi - cd /opt || exit + cd /opt if [[ -f /opt/hoarder/.env ]] && [[ ! -f /etc/hoarder/hoarder.env ]]; then mkdir -p /etc/hoarder mv /opt/hoarder/.env /etc/hoarder/hoarder.env @@ -49,14 +49,14 @@ function update_script() { curl -fsSL "https://github.com/hoarder-app/hoarder/archive/refs/tags/v${RELEASE}.zip" -o "v${RELEASE}.zip" unzip -q v"${RELEASE}".zip mv karakeep-"${RELEASE}" /opt/hoarder - cd /opt/hoarder/apps/web || exit + cd /opt/hoarder/apps/web $STD pnpm install --frozen-lockfile $STD pnpm exec next build --experimental-build-mode compile cp -r /opt/hoarder/apps/web/.next/standalone/apps/web/server.js /opt/hoarder/apps/web - cd /opt/hoarder/apps/workers || exit + cd /opt/hoarder/apps/workers $STD pnpm install --frozen-lockfile export DATA_DIR=/opt/hoarder_data - cd /opt/hoarder/packages/db || exit + cd /opt/hoarder/packages/db $STD pnpm migrate sed -i "s/SERVER_VERSION=${PREV_RELEASE}/SERVER_VERSION=${RELEASE}/" /etc/hoarder/hoarder.env msg_ok "Updated ${APP} to v${RELEASE}" diff --git a/ct/karakeep.sh b/ct/karakeep.sh index 54f4d6582..0f3829cc5 100644 --- a/ct/karakeep.sh +++ b/ct/karakeep.sh @@ -40,7 +40,7 @@ function update_script() { if [[ "${PREV_RELEASE}" < 0.23.0 ]]; then $STD apt-get install -y graphicsmagick ghostscript fi - cd /opt || exit + cd /opt if [[ -f /opt/karakeep/.env ]] && [[ ! -f /etc/karakeep/karakeep.env ]]; then mkdir -p /etc/karakeep mv /opt/karakeep/.env /etc/karakeep/karakeep.env @@ -49,14 +49,14 @@ function update_script() { curl -fsSL "https://github.com/karakeep-app/karakeep/archive/refs/tags/v${RELEASE}.zip" -o "v${RELEASE}.zip" unzip -q "v${RELEASE}.zip" mv karakeep-"${RELEASE}" /opt/karakeep - cd /opt/karakeep/apps/web || exit + cd /opt/karakeep/apps/web $STD pnpm install --frozen-lockfile $STD pnpm exec next build --experimental-build-mode compile cp -r /opt/karakeep/apps/web/.next/standalone/apps/web/server.js /opt/karakeep/apps/web - cd /opt/karakeep/apps/workers || exit + cd /opt/karakeep/apps/workers $STD pnpm install --frozen-lockfile export DATA_DIR=/opt/karakeep_data - cd /opt/karakeep/packages/db || exit + cd /opt/karakeep/packages/db $STD pnpm migrate sed -i "s/SERVER_VERSION=${PREV_RELEASE}/SERVER_VERSION=${RELEASE}/" /etc/karakeep/karakeep.env msg_ok "Updated ${APP} to v${RELEASE}" diff --git a/ct/kimai.sh b/ct/kimai.sh index 6eec4c317..cfc0f01a7 100644 --- a/ct/kimai.sh +++ b/ct/kimai.sh @@ -66,7 +66,7 @@ function update_script() { [ -f "$BACKUP_DIR/.env" ] && cp "$BACKUP_DIR/.env" /opt/kimai/ [ -f "$BACKUP_DIR/local.yaml" ] && cp "$BACKUP_DIR/local.yaml" /opt/kimai/config/packages/ rm -rf "$BACKUP_DIR" - cd /opt/kimai || exit + cd /opt/kimai $STD composer install --no-dev --optimize-autoloader $STD bin/console kimai:update echo "${RELEASE}" >/opt/${APP}_version.txt diff --git a/ct/nginxproxymanager.sh b/ct/nginxproxymanager.sh index d5e013f6a..d5b2323be 100644 --- a/ct/nginxproxymanager.sh +++ b/ct/nginxproxymanager.sh @@ -52,7 +52,7 @@ function update_script() { msg_info "Downloading NPM v${RELEASE}" curl -fsSL "https://codeload.github.com/NginxProxyManager/nginx-proxy-manager/tar.gz/v${RELEASE}" | tar -xz - cd nginx-proxy-manager-"${RELEASE}" || exit + cd nginx-proxy-manager-"${RELEASE}" msg_ok "Downloaded NPM v${RELEASE}" msg_info "Setting up Enviroment" @@ -103,7 +103,7 @@ function update_script() { msg_ok "Setup Enviroment" msg_info "Building Frontend" - cd ./frontend || exit + cd ./frontend $STD pnpm install $STD pnpm upgrade $STD pnpm run build @@ -128,7 +128,7 @@ function update_script() { } EOF fi - cd /app || exit + cd /app $STD pnpm install msg_ok "Initialized Backend" diff --git a/ct/npmplus.sh b/ct/npmplus.sh index ab86ab8bf..d8f2c6248 100644 --- a/ct/npmplus.sh +++ b/ct/npmplus.sh @@ -28,27 +28,26 @@ function update_script() { header_info "$APP" case "$UPD" in - "1") - msg_info "Updating Alpine OS" - apk update && apk upgrade - msg_ok "System updated" - exit - ;; - "2") - msg_info "Updating NPMplus Container" - cd /opt || exit 1 - msg_info "Pulling latest container image" - $STD docker compose pull - msg_info "Recreating container" - $STD docker compose up -d - msg_ok "NPMplus container updated" - exit - ;; + "1") + msg_info "Updating Alpine OS" + apk update && apk upgrade + msg_ok "System updated" + exit + ;; + "2") + msg_info "Updating NPMplus Container" + cd /opt 1 + msg_info "Pulling latest container image" + $STD docker compose pull + msg_info "Recreating container" + $STD docker compose up -d + msg_ok "NPMplus container updated" + exit + ;; esac exit 0 } - start build_container description @@ -56,4 +55,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}https://${IP}:81${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}https://${IP}:81${CL}" diff --git a/ct/outline.sh b/ct/outline.sh index 9fc38bc7d..2593c65f1 100644 --- a/ct/outline.sh +++ b/ct/outline.sh @@ -40,7 +40,7 @@ function update_script() { curl -fsSL "https://github.com/outline/outline/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file" tar zxf "$temp_file" mv outline-"${RELEASE}" /opt/outline - cd /opt/outline || exit + cd /opt/outline export NODE_ENV=development export NODE_OPTIONS="--max-old-space-size=3584" $STD yarn install --frozen-lockfile diff --git a/ct/paymenter.sh b/ct/paymenter.sh index 87dc0ce5a..7efe7a2f2 100644 --- a/ct/paymenter.sh +++ b/ct/paymenter.sh @@ -47,7 +47,7 @@ function update_script() { if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then msg_info "Updating ${APP} to ${RELEASE}" echo "${RELEASE}" >/opt/${APP}_version.txt - cd /opt/paymenter || exit + cd /opt/paymenter $STD php artisan p:upgrade --no-interaction msg_ok "Updated Successfully" else diff --git a/ct/pelican-panel.sh b/ct/pelican-panel.sh index 2acf4c121..99357498c 100644 --- a/ct/pelican-panel.sh +++ b/ct/pelican-panel.sh @@ -27,7 +27,7 @@ function update_script() { msg_error "No ${APP} Installation Found!" exit fi - CURRENT_PHP=$(php -v 2>/dev/null | awk '/^PHP/{print $2}' | cut -d. -f1,2) + CURRENT_PHP=$(php -v 2>/dev/null | awk '/^PHP/{print $2}' | cut -d. -f1,2) if [[ "$CURRENT_PHP" != "8.4" ]]; then msg_info "Migrating PHP $CURRENT_PHP to 8.4" @@ -47,7 +47,7 @@ function update_script() { RELEASE=$(curl -fsSL https://api.github.com/repos/pelican-dev/panel/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then msg_info "Stopping Service" - cd /opt/pelican-panel || exit + cd /opt/pelican-panel $STD php artisan down msg_ok "Stopped Service" diff --git a/ct/pterodactyl-panel.sh b/ct/pterodactyl-panel.sh index 245290417..414d6cf95 100644 --- a/ct/pterodactyl-panel.sh +++ b/ct/pterodactyl-panel.sh @@ -47,7 +47,7 @@ function update_script() { RELEASE=$(curl -fsSL https://api.github.com/repos/pterodactyl/panel/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then msg_info "Stopping Service" - cd /opt/pterodactyl-panel || exit + cd /opt/pterodactyl-panel $STD php artisan down msg_ok "Stopped Service" diff --git a/ct/snipeit.sh b/ct/snipeit.sh index 456b4b74d..2ec54d03e 100644 --- a/ct/snipeit.sh +++ b/ct/snipeit.sh @@ -44,7 +44,7 @@ function update_script() { cp /opt/snipe-it-backup/.env /opt/snipe-it/.env cp -r /opt/snipe-it-backup/public/uploads/ /opt/snipe-it/public/uploads/ cp -r /opt/snipe-it-backup/storage/private_uploads /opt/snipe-it/storage/private_uploads - cd /opt/snipe-it/ || exit + cd /opt/snipe-it/ export COMPOSER_ALLOW_SUPERUSER=1 $STD composer install --no-dev --optimize-autoloader --no-interaction $STD composer dump-autoload diff --git a/ct/tandoor.sh b/ct/tandoor.sh index 91330bc74..085b28f17 100644 --- a/ct/tandoor.sh +++ b/ct/tandoor.sh @@ -36,15 +36,15 @@ function update_script() { else msg_info "Updating ${APP} (Patience)" export $(cat /opt/tandoor/.env | grep "^[^#]" | xargs) - cd /opt/tandoor/ || exit + cd /opt/tandoor/ $STD pip3 install -r requirements.txt $STD /usr/bin/python3 /opt/tandoor/manage.py migrate $STD /usr/bin/python3 /opt/tandoor/manage.py collectstatic --no-input $STD /usr/bin/python3 /opt/tandoor/manage.py collectstatic_js_reverse - cd /opt/tandoor/vue || exit + cd /opt/tandoor/vue $STD yarn install $STD yarn build - cd /opt/tandoor || exit + cd /opt/tandoor $STD python3 version.py systemctl restart gunicorn_tandoor msg_ok "Updated ${APP}" diff --git a/ct/zabbix.sh b/ct/zabbix.sh index 67fe93f2e..4da64371f 100644 --- a/ct/zabbix.sh +++ b/ct/zabbix.sh @@ -38,7 +38,7 @@ function update_script() { cp -R /usr/share/zabbix/ /opt/zabbix-backup/ #cp -R /usr/share/zabbix-* /opt/zabbix-backup/ Remove temporary rm -Rf /etc/apt/sources.list.d/zabbix.list - cd /tmp || exit + cd /tmp curl -fsSL "$(curl -fsSL https://repo.zabbix.com/zabbix/ | grep -oP '(?<=href=")[0-9]+\.[0-9]+(?=/")' | sort -V | tail -n1 | xargs -I{} echo "https://repo.zabbix.com/zabbix/{}/release/debian/pool/main/z/zabbix-release/zabbix-release_latest+debian12_all.deb")" \ diff --git a/ct/zitadel.sh b/ct/zitadel.sh index 0b6589466..55bb45637 100644 --- a/ct/zitadel.sh +++ b/ct/zitadel.sh @@ -34,7 +34,7 @@ function update_script() { msg_ok "Stopped $APP" msg_info "Updating $APP to ${RELEASE}" - cd /tmp || exit + cd /tmp curl -fsSL "https://github.com/zitadel/zitadel/releases/download/v$RELEASE/zitadel-linux-amd64.tar.gz" | tar -xz mv zitadel-linux-amd64/zitadel /usr/local/bin $STD zitadel setup --masterkeyFile /opt/zitadel/.masterkey --config /opt/zitadel/config.yaml --init-projections=true diff --git a/install/alpine-wireguard-install.sh b/install/alpine-wireguard-install.sh index 8ef7be7c4..fb770d542 100644 --- a/install/alpine-wireguard-install.sh +++ b/install/alpine-wireguard-install.sh @@ -61,7 +61,7 @@ if [[ "$INSTALL_WGD" =~ ^[Yy]$ ]]; then msg_ok "Installed additional dependencies for WGDashboard" msg_info "Installing WGDashboard" git clone -q https://github.com/donaldzou/WGDashboard.git /etc/wgdashboard - cd /etc/wgdashboard/src || exit + cd /etc/wgdashboard/src chmod u+x wgd.sh $STD ./wgd.sh install msg_ok "Installed WGDashboard" @@ -79,7 +79,7 @@ depend() { start() { ebegin "Starting WGDashboard" - cd /etc/wgdashboard/src/ || exit 1 + cd /etc/wgdashboard/src/ ./wgd.sh start & eend $? } diff --git a/install/heimdall-dashboard-install.sh b/install/heimdall-dashboard-install.sh index 50ef7f6b6..e2ba93829 100644 --- a/install/heimdall-dashboard-install.sh +++ b/install/heimdall-dashboard-install.sh @@ -27,7 +27,7 @@ tar xzf "${RELEASE}".tar.gz VER=$(curl -fsSL https://api.github.com/repos/linuxserver/Heimdall/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') rm -rf "${RELEASE}".tar.gz mv Heimdall-"${VER}" /opt/Heimdall -cd /opt/Heimdall || exit +cd /opt/Heimdall cp .env.example .env $STD php artisan key:generate msg_ok "Installed Heimdall Dashboard ${RELEASE}" diff --git a/install/karakeep-install.sh b/install/karakeep-install.sh index 118366c7b..991012261 100644 --- a/install/karakeep-install.sh +++ b/install/karakeep-install.sh @@ -34,7 +34,7 @@ chmod +x /usr/bin/yt-dlp msg_ok "Installed Additional Tools" msg_info "Installing Meilisearch" -cd /tmp || exit +cd /tmp curl -fsSL "https://github.com/meilisearch/meilisearch/releases/latest/download/meilisearch.deb" -o "meilisearch.deb" $STD dpkg -i meilisearch.deb curl -fsSL "https://raw.githubusercontent.com/meilisearch/meilisearch/latest/config.toml" -o "/etc/meilisearch.toml" @@ -59,21 +59,21 @@ $STD npm install -g corepack@0.31.0 msg_ok "Installed Node.js" msg_info "Installing karakeep" -cd /opt || exit +cd /opt RELEASE=$(curl -fsSL https://api.github.com/repos/karakeep-app/karakeep/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') curl -fsSL "https://github.com/karakeep-app/karakeep/archive/refs/tags/v${RELEASE}.zip" -o "v${RELEASE}.zip" unzip -q "v${RELEASE}.zip" mv karakeep-"${RELEASE}" /opt/karakeep -cd /opt/karakeep || exit +cd /opt/karakeep corepack enable export PUPPETEER_SKIP_DOWNLOAD="true" export NEXT_TELEMETRY_DISABLED=1 export CI="true" -cd /opt/karakeep/apps/web || exit +cd /opt/karakeep/apps/web $STD pnpm install --frozen-lockfile $STD pnpm exec next build --experimental-build-mode compile cp -r /opt/karakeep/apps/web/.next/standalone/apps/web/server.js /opt/karakeep/apps/web -cd /opt/karakeep/apps/workers || exit +cd /opt/karakeep/apps/workers $STD pnpm install --frozen-lockfile export DATA_DIR=/opt/karakeep_data @@ -103,7 +103,7 @@ msg_ok "Installed karakeep" msg_info "Running Database Migration" mkdir -p ${DATA_DIR} -cd /opt/karakeep/packages/db || exit +cd /opt/karakeep/packages/db $STD pnpm migrate msg_ok "Database Migration Completed" diff --git a/install/kimai-install.sh b/install/kimai-install.sh index 1d6459b0b..a65789f36 100644 --- a/install/kimai-install.sh +++ b/install/kimai-install.sh @@ -60,7 +60,7 @@ RELEASE=$(curl -fsSL https://api.github.com/repos/kimai/kimai/releases/latest | curl -fsSL "https://github.com/kimai/kimai/archive/refs/tags/${RELEASE}.zip" -o $(basename "https://github.com/kimai/kimai/archive/refs/tags/${RELEASE}.zip") unzip -q "${RELEASE}".zip mv kimai-"${RELEASE}" /opt/kimai -cd /opt/kimai || exit +cd /opt/kimai echo "export COMPOSER_ALLOW_SUPERUSER=1" >>~/.bashrc source ~/.bashrc $STD composer install --no-dev --optimize-autoloader --no-interaction diff --git a/install/paperless-ngx-install.sh b/install/paperless-ngx-install.sh index 787b9ad00..01daa7916 100644 --- a/install/paperless-ngx-install.sh +++ b/install/paperless-ngx-install.sh @@ -58,10 +58,10 @@ $STD apt-get install -y \ tesseract-ocr \ tesseract-ocr-eng -cd /tmp || exit +cd /tmp curl -fsSL "https://github.com/ArtifexSoftware/ghostpdl-downloads/releases/download/gs10040/ghostscript-10.04.0.tar.gz" -o $(basename "https://github.com/ArtifexSoftware/ghostpdl-downloads/releases/download/gs10040/ghostscript-10.04.0.tar.gz") $STD tar -xzf ghostscript-10.04.0.tar.gz -cd ghostscript-10.04.0 || exit +cd ghostscript-10.04.0 $STD ./configure $STD make $STD sudo make install @@ -69,7 +69,7 @@ msg_ok "Installed OCR Dependencies" msg_info "Installing JBIG2" $STD git clone https://github.com/ie13/jbig2enc /opt/jbig2enc -cd /opt/jbig2enc || exit +cd /opt/jbig2enc $STD bash ./autogen.sh $STD bash ./configure $STD make @@ -79,12 +79,12 @@ msg_ok "Installed JBIG2" msg_info "Installing Paperless-ngx (Patience)" Paperlessngx=$(curl -fsSL "https://github.com/paperless-ngx/paperless-ngx/releases/latest" | grep "title>Release" | cut -d " " -f 5) -cd /opt || exit +cd /opt $STD curl -fsSL "https://github.com/paperless-ngx/paperless-ngx/releases/download/$Paperlessngx/paperless-ngx-$Paperlessngx.tar.xz" -o "paperless-ngx-$Paperlessngx.tar.xz" $STD tar -xf "paperless-ngx-$Paperlessngx.tar.xz" -C /opt/ mv paperless-ngx paperless rm "paperless-ngx-$Paperlessngx.tar.xz" -cd /opt/paperless || exit +cd /opt/paperless $STD pip install --upgrade pip $STD pip install -r requirements.txt curl -fsSL "https://raw.githubusercontent.com/paperless-ngx/paperless-ngx/main/paperless.conf.example" -o /opt/paperless/paperless.conf @@ -121,7 +121,7 @@ sed -i -e "s|#PAPERLESS_DBNAME=paperless|PAPERLESS_DBNAME=$DB_NAME|" /opt/paperl sed -i -e "s|#PAPERLESS_DBUSER=paperless|PAPERLESS_DBUSER=$DB_USER|" /opt/paperless/paperless.conf sed -i -e "s|#PAPERLESS_DBPASS=paperless|PAPERLESS_DBPASS=$DB_PASS|" /opt/paperless/paperless.conf sed -i -e "s|#PAPERLESS_SECRET_KEY=change-me|PAPERLESS_SECRET_KEY=$SECRET_KEY|" /opt/paperless/paperless.conf -cd /opt/paperless/src || exit +cd /opt/paperless/src $STD python3 manage.py migrate msg_ok "Set up PostgreSQL database" diff --git a/install/paymenter-install.sh b/install/paymenter-install.sh index ebded291b..d2d17f857 100644 --- a/install/paymenter-install.sh +++ b/install/paymenter-install.sh @@ -47,7 +47,7 @@ msg_info "Installing Paymenter" RELEASE=$(curl -fsSL https://api.github.com/repos/paymenter/paymenter/releases/latest | grep '"tag_name"' | sed -E 's/.*"tag_name": "([^"]+)".*/\1/') echo "${RELEASE}" >/opt/"${APPLICATION}"_version.txt mkdir -p /opt/paymenter -cd /opt/paymenter || exit +cd /opt/paymenter curl -fsSL "https://github.com/paymenter/paymenter/releases/download/${RELEASE}/paymenter.tar.gz" -o paymenter.tar.gz $STD tar -xzvf paymenter.tar.gz chmod -R 755 storage/* bootstrap/cache/ diff --git a/install/pelican-panel-install.sh b/install/pelican-panel-install.sh index 1c7342dc3..2ddea5993 100644 --- a/install/pelican-panel-install.sh +++ b/install/pelican-panel-install.sh @@ -55,7 +55,7 @@ msg_ok "Set up MariaDB" msg_info "Installing Pelican Panel" RELEASE=$(curl -fsSL https://api.github.com/repos/pelican-dev/panel/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') mkdir /opt/pelican-panel -cd /opt/pelican-panel || exit +cd /opt/pelican-panel curl -fsSL "https://github.com/pelican-dev/panel/releases/download/v${RELEASE}/panel.tar.gz" -o $(basename "https://github.com/pelican-dev/panel/releases/download/v${RELEASE}/panel.tar.gz") tar -xzf "panel.tar.gz" $STD composer install --no-dev --optimize-autoloader --no-interaction diff --git a/install/prowlarr-install.sh b/install/prowlarr-install.sh index b4f12fa15..e9d084eab 100644 --- a/install/prowlarr-install.sh +++ b/install/prowlarr-install.sh @@ -21,7 +21,7 @@ msg_info "Installing Prowlarr" temp_file="$(mktemp)" mkdir -p /var/lib/prowlarr/ chmod 775 /var/lib/prowlarr/ -cd /var/lib/prowlarr/ || exit +cd /var/lib/prowlarr/ RELEASE=$(curl -fsSL https://api.github.com/repos/Prowlarr/Prowlarr/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') curl -fsSL "https://github.com/Prowlarr/Prowlarr/releases/download/v${RELEASE}/Prowlarr.master.${RELEASE}.linux-core-x64.tar.gz" -o "$temp_file" $STD tar -xvzf "$temp_file" diff --git a/install/pterodactyl-panel-install.sh b/install/pterodactyl-panel-install.sh index bb3cb11fd..30ae73078 100644 --- a/install/pterodactyl-panel-install.sh +++ b/install/pterodactyl-panel-install.sh @@ -60,7 +60,7 @@ read -p "Enter your Last Name: " NAME_LAST msg_info "Installing pterodactyl Panel" RELEASE=$(curl -fsSL https://api.github.com/repos/pterodactyl/panel/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') mkdir /opt/pterodactyl-panel -cd /opt/pterodactyl-panel || exit +cd /opt/pterodactyl-panel curl -fsSL "https://github.com/pterodactyl/panel/releases/download/v${RELEASE}/panel.tar.gz" -o $(basename "https://github.com/pterodactyl/panel/releases/download/v${RELEASE}/panel.tar.gz") tar -xzf "panel.tar.gz" cp .env.example .env diff --git a/install/radarr-install.sh b/install/radarr-install.sh index 1c9929967..816d61330 100644 --- a/install/radarr-install.sh +++ b/install/radarr-install.sh @@ -21,7 +21,7 @@ msg_info "Installing Radarr" temp_file="$(mktemp)" mkdir -p /var/lib/radarr/ chmod 775 /var/lib/radarr/ -cd /var/lib/radarr/ || exit +cd /var/lib/radarr/ RELEASE=$(curl -fsSL https://api.github.com/repos/Radarr/Radarr/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') curl -fsSL "https://github.com/Radarr/Radarr/releases/download/v${RELEASE}/Radarr.master.${RELEASE}.linux-core-x64.tar.gz" -o "$temp_file" $STD tar -xvzf "$temp_file" diff --git a/install/zabbix-install.sh b/install/zabbix-install.sh index 78693aa60..f8ae2ae5e 100644 --- a/install/zabbix-install.sh +++ b/install/zabbix-install.sh @@ -14,7 +14,7 @@ network_check update_os msg_info "Installing Zabbix" -cd /tmp || exit +cd /tmp curl -fsSL "$(curl -fsSL https://repo.zabbix.com/zabbix/ | grep -oP '(?<=href=")[0-9]+\.[0-9]+(?=/")' | sort -V | tail -n1 | xargs -I{} echo "https://repo.zabbix.com/zabbix/{}/release/debian/pool/main/z/zabbix-release/zabbix-release_latest+debian12_all.deb")" \ diff --git a/misc/build.func b/misc/build.func index dfc1ba1ca..485d8d45f 100644 --- a/misc/build.func +++ b/misc/build.func @@ -1333,7 +1333,7 @@ build_container() { $PW " # This executes create_lxc.sh and creates the container and .conf file - bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/create_lxc.sh)" || exit $? + bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/create_lxc.sh)" $? LXC_CONFIG=/etc/pve/lxc/${CTID}.conf if [ "$CT_TYPE" == "0" ]; then @@ -1395,7 +1395,7 @@ http://dl-cdn.alpinelinux.org/alpine/latest-stable/community EOF' pct exec "$CTID" -- ash -c "apk add bash >/dev/null" fi - lxc-attach -n "$CTID" -- bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/install/"$var_install".sh)" || exit $? + lxc-attach -n "$CTID" -- bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/install/"$var_install".sh)" $? } diff --git a/tools/addon/add-netbird-lxc.sh b/tools/addon/add-netbird-lxc.sh index 430ea63a0..0ca45f3ba 100644 --- a/tools/addon/add-netbird-lxc.sh +++ b/tools/addon/add-netbird-lxc.sh @@ -51,7 +51,7 @@ while [ -z "${CTID:+x}" ]; do CTID=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "Containers on $NODE" --radiolist \ "\nSelect a container to add NetBird to:\n" \ 16 $(($MSG_MAX_LENGTH + 23)) 6 \ - "${CTID_MENU[@]}" 3>&1 1>&2 2>&3) || exit + "${CTID_MENU[@]}" 3>&1 1>&2 2>&3) done LXC_STATUS=$(pct status "$CTID" | awk '{print $2}') @@ -84,7 +84,7 @@ curl -fsSL "https://pkgs.netbird.io/debian/public.key" | gpg --dearmor >/usr/sha echo "deb [signed-by=/usr/share/keyrings/netbird-archive-keyring.gpg] https://pkgs.netbird.io/debian stable main" >/etc/apt/sources.list.d/netbird.list apt-get update &>/dev/null apt-get install -y netbird-ui &>/dev/null -' || exit +' msg "\e[1;32m βœ” Installed NetBird.\e[0m" sleep 2 msg "\e[1;31m Reboot ${CTID} LXC to apply the changes, then run netbird up in the LXC console\e[0m" diff --git a/tools/addon/add-tailscale-lxc.sh b/tools/addon/add-tailscale-lxc.sh index 5183a5b4f..e2f0cf748 100644 --- a/tools/addon/add-tailscale-lxc.sh +++ b/tools/addon/add-tailscale-lxc.sh @@ -49,7 +49,7 @@ while [ -z "${CTID:+x}" ]; do CTID=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "Containers on $NODE" --radiolist \ "\nSelect a container to add Tailscale to:\n" \ 16 $(($MSG_MAX_LENGTH + 23)) 6 \ - "${CTID_MENU[@]}" 3>&1 1>&2 2>&3) || exit + "${CTID_MENU[@]}" 3>&1 1>&2 2>&3) done CTID_CONFIG_PATH=/etc/pve/lxc/${CTID}.conf @@ -66,7 +66,7 @@ curl -fsSL https://pkgs.tailscale.com/stable/$ID/$VER.noarmor.gpg | tee /usr/sha echo "deb [signed-by=/usr/share/keyrings/tailscale-archive-keyring.gpg] https://pkgs.tailscale.com/stable/$ID $VER main" >/etc/apt/sources.list.d/tailscale.list apt-get update &>/dev/null apt-get install -y tailscale &>/dev/null -' || exit +' TAGS=$(awk -F': ' '/^tags:/ {print $2}' /etc/pve/lxc/${CTID}.conf) TAGS="${TAGS:+$TAGS; }tailscale" pct set "$CTID" -tags "${TAGS}" diff --git a/tools/addon/all-templates.sh b/tools/addon/all-templates.sh index 80f8c807c..aba9741ee 100644 --- a/tools/addon/all-templates.sh +++ b/tools/addon/all-templates.sh @@ -58,7 +58,7 @@ fi header_info echo "Loading..." pveam update >/dev/null 2>&1 -whiptail --backtitle "Proxmox VE Helper Scripts" --title "All Templates" --yesno "This will allow for the creation of one of the many Template LXC Containers. Proceed?" 10 68 || exit +whiptail --backtitle "Proxmox VE Helper Scripts" --title "All Templates" --yesno "This will allow for the creation of one of the many Template LXC Containers. Proceed?" 10 68 TEMPLATE_MENU=() MSG_MAX_LENGTH=0 while read -r TAG ITEM; do @@ -66,7 +66,7 @@ while read -r TAG ITEM; do ((${#ITEM} + OFFSET > MSG_MAX_LENGTH)) && MSG_MAX_LENGTH=${#ITEM}+OFFSET TEMPLATE_MENU+=("$ITEM" "$TAG " "OFF") done < <(pveam available) -TEMPLATE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "All Template LXCs" --radiolist "\nSelect a Template LXC to create:\n" 16 $((MSG_MAX_LENGTH + 58)) 10 "${TEMPLATE_MENU[@]}" 3>&1 1>&2 2>&3 | tr -d '"') || exit +TEMPLATE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "All Template LXCs" --radiolist "\nSelect a Template LXC to create:\n" 16 $((MSG_MAX_LENGTH + 58)) 10 "${TEMPLATE_MENU[@]}" 3>&1 1>&2 2>&3 | tr -d '"') [ -z "$TEMPLATE" ] && { whiptail --backtitle "Proxmox VE Helper Scripts" --title "No Template LXC Selected" --msgbox "It appears that no Template LXC container was selected" 10 68 msg "Done" @@ -142,11 +142,11 @@ function select_storage() { } header_info # Get template storage -TEMPLATE_STORAGE=$(select_storage template) || exit +TEMPLATE_STORAGE=$(select_storage template) info "Using '$TEMPLATE_STORAGE' for template storage." # Get container storage -CONTAINER_STORAGE=$(select_storage container) || exit +CONTAINER_STORAGE=$(select_storage container) info "Using '$CONTAINER_STORAGE' for container storage." # Download template diff --git a/tools/addon/webmin.sh b/tools/addon/webmin.sh index 2502699ef..f62ded036 100644 --- a/tools/addon/webmin.sh +++ b/tools/addon/webmin.sh @@ -38,7 +38,7 @@ msg_ok() { header_info -whiptail --backtitle "Proxmox VE Helper Scripts" --title "Webmin Installer" --yesno "This Will Install Webmin on this LXC Container. Proceed?" 10 58 || exit +whiptail --backtitle "Proxmox VE Helper Scripts" --title "Webmin Installer" --yesno "This Will Install Webmin on this LXC Container. Proceed?" 10 58 msg_info "Installing Prerequisites" apt update &>/dev/null diff --git a/tools/copy-data/home-assistant-container-copy-data-home-assistant-container.sh b/tools/copy-data/home-assistant-container-copy-data-home-assistant-container.sh index 0b872b519..acf2b380a 100644 --- a/tools/copy-data/home-assistant-container-copy-data-home-assistant-container.sh +++ b/tools/copy-data/home-assistant-container-copy-data-home-assistant-container.sh @@ -74,13 +74,13 @@ while [ -z "${CTID_FROM:+x}" ]; do CTID_FROM=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "$TITLE" --radiolist \ "\nWhich HA LXC would you like to copy FROM?\n" \ 16 $(($MSG_MAX_LENGTH + 23)) 6 \ - "${CTID_MENU[@]}" 3>&1 1>&2 2>&3) || exit + "${CTID_MENU[@]}" 3>&1 1>&2 2>&3) done while [ -z "${CTID_TO:+x}" ]; do CTID_TO=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "$TITLE" --radiolist \ "\nWhich HA LXC would you like to copy TO?\n" \ 16 $(($MSG_MAX_LENGTH + 23)) 6 \ - "${CTID_MENU[@]}" 3>&1 1>&2 2>&3) || exit + "${CTID_MENU[@]}" 3>&1 1>&2 2>&3) done for i in ${!CTID_MENU[@]}; do [ "${CTID_MENU[$i]}" == "$CTID_FROM" ] && @@ -91,7 +91,7 @@ done whiptail --backtitle "Proxmox VE Helper Scripts" --defaultno --title "$TITLE" --yesno \ "Are you sure you want to copy data between the following LXCs? $CTID_FROM (${CTID_FROM_HOSTNAME}) -> $CTID_TO (${CTID_TO_HOSTNAME}) -Version: 2022.01.23" 13 50 || exit +Version: 2022.01.23" 13 50 info "Home Assistant Data from '$CTID_FROM' to '$CTID_TO'" if [ $(pct status "$CTID_TO" | sed 's/.* //') == 'running' ]; then msg "Stopping '$CTID_TO'..." diff --git a/tools/copy-data/home-assistant-container-copy-data-home-assistant-core.sh b/tools/copy-data/home-assistant-container-copy-data-home-assistant-core.sh index cafdc35d8..cea3814c8 100644 --- a/tools/copy-data/home-assistant-container-copy-data-home-assistant-core.sh +++ b/tools/copy-data/home-assistant-container-copy-data-home-assistant-core.sh @@ -72,13 +72,13 @@ while [ -z "${CTID_FROM:+x}" ]; do CTID_FROM=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "$TITLE" --radiolist \ "\nWhich HA Container LXC would you like to copy FROM?\n" \ 16 $(($MSG_MAX_LENGTH + 23)) 6 \ - "${CTID_MENU[@]}" 3>&1 1>&2 2>&3) || exit + "${CTID_MENU[@]}" 3>&1 1>&2 2>&3) done while [ -z "${CTID_TO:+x}" ]; do CTID_TO=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "$TITLE" --radiolist \ "\nWhich HA Core LXC would you like to copy TO?\n" \ 16 $(($MSG_MAX_LENGTH + 23)) 6 \ - "${CTID_MENU[@]}" 3>&1 1>&2 2>&3) || exit + "${CTID_MENU[@]}" 3>&1 1>&2 2>&3) done for i in ${!CTID_MENU[@]}; do [ "${CTID_MENU[$i]}" == "$CTID_FROM" ] && @@ -89,7 +89,7 @@ done whiptail --backtitle "Proxmox VE Helper Scripts" --defaultno --title "$TITLE" --yesno \ "Are you sure you want to copy data between the following LXCs? $CTID_FROM (${CTID_FROM_HOSTNAME}) -> $CTID_TO (${CTID_TO_HOSTNAME}) -Version: 2022.10.02" 13 50 || exit +Version: 2022.10.02" 13 50 info "Home Assistant Data from '$CTID_FROM' to '$CTID_TO'" if [ $(pct status $CTID_TO | sed 's/.* //') == 'running' ]; then msg "Stopping '$CTID_TO'..." diff --git a/tools/copy-data/home-assistant-container-copy-data-podman-home-assistant.sh b/tools/copy-data/home-assistant-container-copy-data-podman-home-assistant.sh index 1e46f0503..9f13acca6 100644 --- a/tools/copy-data/home-assistant-container-copy-data-podman-home-assistant.sh +++ b/tools/copy-data/home-assistant-container-copy-data-podman-home-assistant.sh @@ -74,13 +74,13 @@ while [ -z "${CTID_FROM:+x}" ]; do CTID_FROM=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "$TITLE" --radiolist \ "\nWhich HA LXC would you like to copy FROM?\n" \ 16 $(($MSG_MAX_LENGTH + 23)) 6 \ - "${CTID_MENU[@]}" 3>&1 1>&2 2>&3) || exit + "${CTID_MENU[@]}" 3>&1 1>&2 2>&3) done while [ -z "${CTID_TO:+x}" ]; do CTID_TO=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "$TITLE" --radiolist \ "\nWhich HA Podman LXC would you like to copy TO?\n" \ 16 $(($MSG_MAX_LENGTH + 23)) 6 \ - "${CTID_MENU[@]}" 3>&1 1>&2 2>&3) || exit + "${CTID_MENU[@]}" 3>&1 1>&2 2>&3) done for i in ${!CTID_MENU[@]}; do [ "${CTID_MENU[$i]}" == "$CTID_FROM" ] && @@ -91,7 +91,7 @@ done whiptail --backtitle "Proxmox VE Helper Scripts" --defaultno --title "$TITLE" --yesno \ "Are you sure you want to copy data between the following LXCs? $CTID_FROM (${CTID_FROM_HOSTNAME}) -> $CTID_TO (${CTID_TO_HOSTNAME}) -Version: 2022.02.12" 13 50 || exit +Version: 2022.02.12" 13 50 info "Home Assistant Data from '$CTID_FROM' to '$CTID_TO'" if [ $(pct status $CTID_TO | sed 's/.* //') == 'running' ]; then msg "Stopping '$CTID_TO'..." diff --git a/tools/copy-data/home-assistant-core-copy-data-home-assistant-container.sh b/tools/copy-data/home-assistant-core-copy-data-home-assistant-container.sh index 4cf019c5b..25591ae2d 100644 --- a/tools/copy-data/home-assistant-core-copy-data-home-assistant-container.sh +++ b/tools/copy-data/home-assistant-core-copy-data-home-assistant-container.sh @@ -72,13 +72,13 @@ while [ -z "${CTID_FROM:+x}" ]; do CTID_FROM=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "$TITLE" --radiolist \ "\nWhich HA Core LXC would you like to copy FROM?\n" \ 16 $(($MSG_MAX_LENGTH + 23)) 6 \ - "${CTID_MENU[@]}" 3>&1 1>&2 2>&3) || exit + "${CTID_MENU[@]}" 3>&1 1>&2 2>&3) done while [ -z "${CTID_TO:+x}" ]; do CTID_TO=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "$TITLE" --radiolist \ "\nWhich HA Container LXC would you like to copy TO?\n" \ 16 $(($MSG_MAX_LENGTH + 23)) 6 \ - "${CTID_MENU[@]}" 3>&1 1>&2 2>&3) || exit + "${CTID_MENU[@]}" 3>&1 1>&2 2>&3) done for i in ${!CTID_MENU[@]}; do [ "${CTID_MENU[$i]}" == "$CTID_FROM" ] && @@ -89,7 +89,7 @@ done whiptail --backtitle "Proxmox VE Helper Scripts" --defaultno --title "$TITLE" --yesno \ "Are you sure you want to copy data between the following LXCs? $CTID_FROM (${CTID_FROM_HOSTNAME}) -> $CTID_TO (${CTID_TO_HOSTNAME}) -Version: 2022.10.02" 13 50 || exit +Version: 2022.10.02" 13 50 info "Home Assistant Data from '$CTID_FROM' to '$CTID_TO'" if [ $(pct status $CTID_TO | sed 's/.* //') == 'running' ]; then msg "Stopping '$CTID_TO'..." diff --git a/tools/copy-data/home-assistant-core-copy-data-home-assistant-core.sh b/tools/copy-data/home-assistant-core-copy-data-home-assistant-core.sh index 64332c5e2..30347709a 100644 --- a/tools/copy-data/home-assistant-core-copy-data-home-assistant-core.sh +++ b/tools/copy-data/home-assistant-core-copy-data-home-assistant-core.sh @@ -67,13 +67,13 @@ while [ -z "${CTID_FROM:+x}" ]; do CTID_FROM=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "$TITLE" --radiolist \ "\nWhich HA Core LXC would you like to copy FROM?\n" \ 16 $(($MSG_MAX_LENGTH + 23)) 6 \ - "${CTID_MENU[@]}" 3>&1 1>&2 2>&3) || exit + "${CTID_MENU[@]}" 3>&1 1>&2 2>&3) done while [ -z "${CTID_TO:+x}" ]; do CTID_TO=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "$TITLE" --radiolist \ "\nWhich HA Core LXC would you like to copy TO?\n" \ 16 $(($MSG_MAX_LENGTH + 23)) 6 \ - "${CTID_MENU[@]}" 3>&1 1>&2 2>&3) || exit + "${CTID_MENU[@]}" 3>&1 1>&2 2>&3) done for i in ${!CTID_MENU[@]}; do [ "${CTID_MENU[$i]}" == "$CTID_FROM" ] && @@ -84,7 +84,7 @@ done whiptail --backtitle "Proxmox VE Helper Scripts" --defaultno --title "$TITLE" --yesno \ "Are you sure you want to copy data between the following LXCs? $CTID_FROM (${CTID_FROM_HOSTNAME}) -> $CTID_TO (${CTID_TO_HOSTNAME}) -Version: 2022.10.03" 13 50 || exit +Version: 2022.10.03" 13 50 info "Home Assistant Data from '$CTID_FROM' to '$CTID_TO'" if [ $(pct status $CTID_FROM | sed 's/.* //') == 'running' ]; then msg "Stopping '$CTID_FROM'..." diff --git a/tools/copy-data/plex-copy-data-plex.sh b/tools/copy-data/plex-copy-data-plex.sh index 3c8e85633..987eda933 100644 --- a/tools/copy-data/plex-copy-data-plex.sh +++ b/tools/copy-data/plex-copy-data-plex.sh @@ -74,13 +74,13 @@ while [ -z "${CTID_FROM:+x}" ]; do CTID_FROM=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "$TITLE" --radiolist \ "\nWhich Plex Media Server LXC would you like to copy FROM?\n" \ 16 $(($MSG_MAX_LENGTH + 23)) 6 \ - "${CTID_MENU[@]}" 3>&1 1>&2 2>&3) || exit + "${CTID_MENU[@]}" 3>&1 1>&2 2>&3) done while [ -z "${CTID_TO:+x}" ]; do CTID_TO=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "$TITLE" --radiolist \ "\nWhich Plex Media Server LXC would you like to copy TO?\n" \ 16 $(($MSG_MAX_LENGTH + 23)) 6 \ - "${CTID_MENU[@]}" 3>&1 1>&2 2>&3) || exit + "${CTID_MENU[@]}" 3>&1 1>&2 2>&3) done for i in ${!CTID_MENU[@]}; do [ "${CTID_MENU[$i]}" == "$CTID_FROM" ] && @@ -91,7 +91,7 @@ done whiptail --backtitle "Proxmox VE Helper Scripts" --defaultno --title "$TITLE" --yesno \ "Are you sure you want to copy data between the following LXCs? $CTID_FROM (${CTID_FROM_HOSTNAME}) -> $CTID_TO (${CTID_TO_HOSTNAME}) -Version: 2022.01.24" 13 50 || exit +Version: 2022.01.24" 13 50 info "Plex Media Server Data from '$CTID_FROM' to '$CTID_TO'" if [ $(pct status $CTID_TO | sed 's/.* //') == 'running' ]; then msg "Stopping '$CTID_TO'..." diff --git a/tools/copy-data/podman-home-assistant-copy-data-home-assistant-container.sh b/tools/copy-data/podman-home-assistant-copy-data-home-assistant-container.sh index 19c05ed84..a0aef23e8 100644 --- a/tools/copy-data/podman-home-assistant-copy-data-home-assistant-container.sh +++ b/tools/copy-data/podman-home-assistant-copy-data-home-assistant-container.sh @@ -74,13 +74,13 @@ while [ -z "${CTID_FROM:+x}" ]; do CTID_FROM=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "$TITLE" --radiolist \ "\nWhich HA Podman LXC would you like to copy FROM?\n" \ 16 $(($MSG_MAX_LENGTH + 23)) 6 \ - "${CTID_MENU[@]}" 3>&1 1>&2 2>&3) || exit + "${CTID_MENU[@]}" 3>&1 1>&2 2>&3) done while [ -z "${CTID_TO:+x}" ]; do CTID_TO=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "$TITLE" --radiolist \ "\nWhich HA LXC would you like to copy TO?\n" \ 16 $(($MSG_MAX_LENGTH + 23)) 6 \ - "${CTID_MENU[@]}" 3>&1 1>&2 2>&3) || exit + "${CTID_MENU[@]}" 3>&1 1>&2 2>&3) done for i in ${!CTID_MENU[@]}; do [ "${CTID_MENU[$i]}" == "$CTID_FROM" ] && @@ -91,7 +91,7 @@ done whiptail --backtitle "Proxmox VE Helper Scripts" --defaultno --title "$TITLE" --yesno \ "Are you sure you want to copy data between the following LXCs? $CTID_FROM (${CTID_FROM_HOSTNAME}) -> $CTID_TO (${CTID_TO_HOSTNAME}) -Version: 2022.03.31" 13 50 || exit +Version: 2022.03.31" 13 50 info "Home Assistant Data from '$CTID_FROM' to '$CTID_TO'" if [ $(pct status $CTID_TO | sed 's/.* //') == 'running' ]; then msg "Stopping '$CTID_TO'..." diff --git a/tools/copy-data/z2m-copy-data-z2m.sh b/tools/copy-data/z2m-copy-data-z2m.sh index d0cc4e271..785251bc0 100644 --- a/tools/copy-data/z2m-copy-data-z2m.sh +++ b/tools/copy-data/z2m-copy-data-z2m.sh @@ -74,13 +74,13 @@ while [ -z "${CTID_FROM:+x}" ]; do CTID_FROM=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "$TITLE" --radiolist \ "\nWhich Zigbee2MQTT LXC would you like to copy FROM?\n" \ 16 $(($MSG_MAX_LENGTH + 23)) 6 \ - "${CTID_MENU[@]}" 3>&1 1>&2 2>&3) || exit + "${CTID_MENU[@]}" 3>&1 1>&2 2>&3) done while [ -z "${CTID_TO:+x}" ]; do CTID_TO=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "$TITLE" --radiolist \ "\nWhich Zigbee2MQTT LXC would you like to copy TO?\n" \ 16 $(($MSG_MAX_LENGTH + 23)) 6 \ - "${CTID_MENU[@]}" 3>&1 1>&2 2>&3) || exit + "${CTID_MENU[@]}" 3>&1 1>&2 2>&3) done for i in ${!CTID_MENU[@]}; do [ "${CTID_MENU[$i]}" == "$CTID_FROM" ] && @@ -91,7 +91,7 @@ done whiptail --backtitle "Proxmox VE Helper Scripts" --defaultno --title "$TITLE" --yesno \ "Are you sure you want to copy data between the following LXCs? $CTID_FROM (${CTID_FROM_HOSTNAME}) -> $CTID_TO (${CTID_TO_HOSTNAME}) -Version: 2022.01.23" 13 50 || exit +Version: 2022.01.23" 13 50 info "Zigbee2MQTT Data from '$CTID_FROM' to '$CTID_TO'" if [ $(pct status $CTID_TO | sed 's/.* //') == 'running' ]; then msg "Stopping '$CTID_TO'..." diff --git a/tools/copy-data/zwavejs2mqtt-copy-data-zwavejsui.sh b/tools/copy-data/zwavejs2mqtt-copy-data-zwavejsui.sh index 9d675cb76..af39a58ff 100644 --- a/tools/copy-data/zwavejs2mqtt-copy-data-zwavejsui.sh +++ b/tools/copy-data/zwavejs2mqtt-copy-data-zwavejsui.sh @@ -75,13 +75,13 @@ while [ -z "${CTID_FROM:+x}" ]; do CTID_FROM=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "$TITLE" --radiolist \ "\nWhich Zwavejs2MQTT LXC would you like to copy FROM?\n" \ 16 $(($MSG_MAX_LENGTH + 23)) 6 \ - "${CTID_MENU[@]}" 3>&1 1>&2 2>&3) || exit + "${CTID_MENU[@]}" 3>&1 1>&2 2>&3) done while [ -z "${CTID_TO:+x}" ]; do CTID_TO=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "$TITLE" --radiolist \ "\nWhich Z-wave JS UI LXC would you like to copy TO?\n" \ 16 $(($MSG_MAX_LENGTH + 23)) 6 \ - "${CTID_MENU[@]}" 3>&1 1>&2 2>&3) || exit + "${CTID_MENU[@]}" 3>&1 1>&2 2>&3) done for i in ${!CTID_MENU[@]}; do [ "${CTID_MENU[$i]}" == "$CTID_FROM" ] && @@ -92,7 +92,7 @@ done whiptail --backtitle "Proxmox VE Helper Scripts" --defaultno --title "$TITLE" --yesno \ "Are you sure you want to copy data between the following LXCs? $CTID_FROM (${CTID_FROM_HOSTNAME}) -> $CTID_TO (${CTID_TO_HOSTNAME}) -Version: 2022.09.21" 13 50 || exit +Version: 2022.09.21" 13 50 info "Zwavejs2MQTT Data from '$CTID_FROM' to '$CTID_TO'" if [ $(pct status "$CTID_TO" | sed 's/.* //') == 'running' ]; then msg "Stopping '$CTID_TO'..." diff --git a/tools/pve/clean-lxcs.sh b/tools/pve/clean-lxcs.sh index 195210167..1c8cfe173 100644 --- a/tools/pve/clean-lxcs.sh +++ b/tools/pve/clean-lxcs.sh @@ -23,7 +23,7 @@ GN=$(echo "\033[1;92m") CL=$(echo "\033[m") header_info echo "Loading..." -whiptail --backtitle "Proxmox VE Helper Scripts" --title "Proxmox VE LXC Updater" --yesno "This Will Clean logs, cache and update apt lists on selected LXC Containers. Proceed?" 10 58 || exit +whiptail --backtitle "Proxmox VE Helper Scripts" --title "Proxmox VE LXC Updater" --yesno "This Will Clean logs, cache and update apt lists on selected LXC Containers. Proceed?" 10 58 NODE=$(hostname) EXCLUDE_MENU=() MSG_MAX_LENGTH=0 @@ -33,7 +33,7 @@ while read -r TAG ITEM; do EXCLUDE_MENU+=("$TAG" "$ITEM " "OFF") done < <(pct list | awk 'NR>1') excluded_containers=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "Containers on $NODE" --checklist "\nSelect containers to skip from cleaning:\n" \ - 16 $((MSG_MAX_LENGTH + 23)) 6 "${EXCLUDE_MENU[@]}" 3>&1 1>&2 2>&3 | tr -d '"') || exit + 16 $((MSG_MAX_LENGTH + 23)) 6 "${EXCLUDE_MENU[@]}" 3>&1 1>&2 2>&3 | tr -d '"') function clean_container() { container=$1 diff --git a/tools/pve/frigate-support.sh b/tools/pve/frigate-support.sh index 3ca5ae2ca..5c8ec6bff 100644 --- a/tools/pve/frigate-support.sh +++ b/tools/pve/frigate-support.sh @@ -74,7 +74,7 @@ while [ -z "${CTID:+x}" ]; do CTID=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "Containers on $NODE" --radiolist \ "\nSelect a container to add support:\n" \ 16 $(($MSG_MAX_LENGTH + 23)) 6 \ - "${CTID_MENU[@]}" 3>&1 1>&2 2>&3) || exit + "${CTID_MENU[@]}" 3>&1 1>&2 2>&3) done # Add autodev settings diff --git a/tools/pve/fstrim.sh b/tools/pve/fstrim.sh index 1e8fe3ffa..308ead01d 100644 --- a/tools/pve/fstrim.sh +++ b/tools/pve/fstrim.sh @@ -34,7 +34,7 @@ if [ "$ROOT_FS" != "ext4" ]; then fi whiptail --backtitle "Proxmox VE Helper Scripts" \ --title "Proxmox VE LXC Filesystem Trim" \ - --yesno "The LXC containers will undergo the fstrim command. Proceed?" 10 58 || exit + --yesno "The LXC containers will undergo the fstrim command. Proceed?" 10 58 NODE=$(hostname) EXCLUDE_MENU=() diff --git a/tools/pve/hw-acceleration.sh b/tools/pve/hw-acceleration.sh index 2a21fd39a..996fa1c53 100644 --- a/tools/pve/hw-acceleration.sh +++ b/tools/pve/hw-acceleration.sh @@ -49,7 +49,7 @@ if ! pveversion | grep -Eq "pve-manager/8\.[0-4](\.[0-9]+)*"; then exit fi -whiptail --backtitle "Proxmox VE Helper Scripts" --title "Add Intel HW Acceleration" --yesno "This Will Add Intel HW Acceleration to an existing LXC Container. Proceed?" 8 72 || exit +whiptail --backtitle "Proxmox VE Helper Scripts" --title "Add Intel HW Acceleration" --yesno "This Will Add Intel HW Acceleration to an existing LXC Container. Proceed?" 8 72 NODE=$(hostname) PREV_MENU=() MSG_MAX_LENGTH=0 @@ -66,7 +66,7 @@ while read -r TAG ITEM; do PREV_MENU+=("$TAG" "$ITEM " "OFF") done < <(echo "$privileged_containers") -privileged_container=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "Privileged Containers on $NODE" --checklist "\nSelect a Container To Add Intel HW Acceleration:\n" 16 $((MSG_MAX_LENGTH + 23)) 6 "${PREV_MENU[@]}" 3>&1 1>&2 2>&3 | tr -d '"') || exit +privileged_container=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "Privileged Containers on $NODE" --checklist "\nSelect a Container To Add Intel HW Acceleration:\n" 16 $((MSG_MAX_LENGTH + 23)) 6 "${PREV_MENU[@]}" 3>&1 1>&2 2>&3 | tr -d '"') header_info read -r -p "Verbose mode? " prompt if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then diff --git a/tools/pve/kernel-pin.sh b/tools/pve/kernel-pin.sh index 4ba86ae12..347e6fb0d 100644 --- a/tools/pve/kernel-pin.sh +++ b/tools/pve/kernel-pin.sh @@ -37,7 +37,7 @@ function msg_ok() { echo -e "${BFR} ${CM} ${GN}${msg}${CL}" } -whiptail --backtitle "Proxmox VE Helper Scripts" --title "Proxmox VE Kernel Pin" --yesno "This will Pin/Unpin Kernel Images, Proceed?" 10 68 || exit +whiptail --backtitle "Proxmox VE Helper Scripts" --title "Proxmox VE Kernel Pin" --yesno "This will Pin/Unpin Kernel Images, Proceed?" 10 68 KERNEL_MENU=() MSG_MAX_LENGTH=0 @@ -47,7 +47,7 @@ while read -r TAG ITEM; do KERNEL_MENU+=("$TAG" "$ITEM " "OFF") done < <(echo "$available_kernels") -pin_kernel=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "Current Kernel $current_kernel" --radiolist "\nSelect Kernel to pin:\nCancel to Unpin any Kernel" 16 $((MSG_MAX_LENGTH + 58)) 6 "${KERNEL_MENU[@]}" 3>&1 1>&2 2>&3 | tr -d '"') || exit +pin_kernel=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "Current Kernel $current_kernel" --radiolist "\nSelect Kernel to pin:\nCancel to Unpin any Kernel" 16 $((MSG_MAX_LENGTH + 58)) 6 "${KERNEL_MENU[@]}" 3>&1 1>&2 2>&3 | tr -d '"') [ -z "$pin_kernel" ] && { whiptail --backtitle "Proxmox VE Helper Scripts" --title "No Kernel Selected" --msgbox "It appears that no Kernel was selected\nUnpinning any pinned Kernel" 10 68 msg_info "Unpinning any Kernel" @@ -59,7 +59,7 @@ pin_kernel=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "Current K echo -e "${RD} REBOOT${CL}" exit } -whiptail --backtitle "Proxmox VE Helper Scripts" --title "Proxmox VE Kernel Pin" --yesno "Would you like to pin the $pin_kernel Kernel?" 10 68 || exit +whiptail --backtitle "Proxmox VE Helper Scripts" --title "Proxmox VE Kernel Pin" --yesno "Would you like to pin the $pin_kernel Kernel?" 10 68 msg_info "Pinning $pin_kernel" proxmox-boot-tool kernel pin $pin_kernel &>/dev/null diff --git a/tools/pve/lxc-delete.sh b/tools/pve/lxc-delete.sh index 99a7e0871..1dde1868e 100644 --- a/tools/pve/lxc-delete.sh +++ b/tools/pve/lxc-delete.sh @@ -40,7 +40,7 @@ CM="${TAB}βœ”οΈ${TAB}${CL}" header_info echo "Loading..." -whiptail --backtitle "Proxmox VE Helper Scripts" --title "Proxmox VE LXC Deletion" --yesno "This will delete LXC containers. Proceed?" 10 58 || exit +whiptail --backtitle "Proxmox VE Helper Scripts" --title "Proxmox VE LXC Deletion" --yesno "This will delete LXC containers. Proceed?" 10 58 NODE=$(hostname) containers=$(pct list | tail -n +2 | awk '{print $0 " " $4}') diff --git a/tools/pve/microcode.sh b/tools/pve/microcode.sh index 385eb88cf..de81af429 100644 --- a/tools/pve/microcode.sh +++ b/tools/pve/microcode.sh @@ -61,7 +61,7 @@ intel() { MICROCODE_MENU+=("$TAG" "$ITEM " "OFF") done < <(echo "$intel_microcode") - microcode=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "Current Microcode revision:${current_microcode}" --radiolist "\nSelect a microcode package to install:\n" 16 $((MSG_MAX_LENGTH + 58)) 6 "${MICROCODE_MENU[@]}" 3>&1 1>&2 2>&3 | tr -d '"') || exit + microcode=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "Current Microcode revision:${current_microcode}" --radiolist "\nSelect a microcode package to install:\n" 16 $((MSG_MAX_LENGTH + 58)) 6 "${MICROCODE_MENU[@]}" 3>&1 1>&2 2>&3 | tr -d '"') [ -z "$microcode" ] && { whiptail --backtitle "Proxmox VE Helper Scripts" --title "No Microcode Selected" --msgbox "It appears that no microcode packages were selected" 10 68 @@ -105,7 +105,7 @@ amd() { MICROCODE_MENU+=("$TAG" "$ITEM " "OFF") done < <(echo "$amd_microcode") - microcode=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "Current Microcode revision:${current_microcode}" --radiolist "\nSelect a microcode package to install:\n" 16 $((MSG_MAX_LENGTH + 58)) 6 "${MICROCODE_MENU[@]}" 3>&1 1>&2 2>&3 | tr -d '"') || exit + microcode=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "Current Microcode revision:${current_microcode}" --radiolist "\nSelect a microcode package to install:\n" 16 $((MSG_MAX_LENGTH + 58)) 6 "${MICROCODE_MENU[@]}" 3>&1 1>&2 2>&3 | tr -d '"') [ -z "$microcode" ] && { whiptail --backtitle "Proxmox VE Helper Scripts" --title "No Microcode Selected" --msgbox "It appears that no microcode packages were selected" 10 68 @@ -135,7 +135,7 @@ if ! command -v pveversion >/dev/null 2>&1; then exit fi -whiptail --backtitle "Proxmox VE Helper Scripts" --title "Proxmox VE Processor Microcode" --yesno "This will check for CPU microcode packages with the option to install. Proceed?" 10 58 || exit +whiptail --backtitle "Proxmox VE Helper Scripts" --title "Proxmox VE Processor Microcode" --yesno "This will check for CPU microcode packages with the option to install. Proceed?" 10 58 msg_info "Checking CPU Vendor" cpu=$(lscpu | grep -oP 'Vendor ID:\s*\K\S+' | head -n 1) diff --git a/tools/pve/pbs_microcode.sh b/tools/pve/pbs_microcode.sh index 694649e35..07f32b311 100644 --- a/tools/pve/pbs_microcode.sh +++ b/tools/pve/pbs_microcode.sh @@ -78,7 +78,7 @@ intel() { microcode=$(whiptail --backtitle "Proxmox Backup Server Helper Scripts" \ --title "Current Microcode Revision: ${current_microcode}" \ --radiolist "\nSelect a microcode package to install:\n" \ - 16 $((MSG_MAX_LENGTH + 58)) 6 "${MICROCODE_MENU[@]}" 3>&1 1>&2 2>&3 | tr -d '"') || exit + 16 $((MSG_MAX_LENGTH + 58)) 6 "${MICROCODE_MENU[@]}" 3>&1 1>&2 2>&3 | tr -d '"') [ -z "$microcode" ] && { whiptail --backtitle "Proxmox Backup Server Helper Scripts" --title "No Microcode Selected" --msgbox "No microcode package was selected." 10 68 @@ -125,7 +125,7 @@ amd() { microcode=$(whiptail --backtitle "Proxmox Backup Server Helper Scripts" \ --title "Current Microcode Revision: ${current_microcode}" \ --radiolist "\nSelect a microcode package to install:\n" \ - 16 $((MSG_MAX_LENGTH + 58)) 6 "${MICROCODE_MENU[@]}" 3>&1 1>&2 2>&3 | tr -d '"') || exit + 16 $((MSG_MAX_LENGTH + 58)) 6 "${MICROCODE_MENU[@]}" 3>&1 1>&2 2>&3 | tr -d '"') [ -z "$microcode" ] && { whiptail --backtitle "Proxmox Backup Server Helper Scripts" --title "No Microcode Selected" --msgbox "No microcode package was selected." 10 68 @@ -158,7 +158,7 @@ fi whiptail --backtitle "Proxmox Backup Server Helper Scripts" \ --title "Proxmox Backup Server Processor Microcode" \ - --yesno "This script searches for CPU microcode packages and offers the option to install them.\nProceed?" 10 68 || exit + --yesno "This script searches for CPU microcode packages and offers the option to install them.\nProceed?" 10 68 msg_info "Checking CPU vendor" cpu=$(lscpu | grep -oP 'Vendor ID:\s*\K\S+' | head -n 1) diff --git a/tools/pve/scaling-governor.sh b/tools/pve/scaling-governor.sh index 29cff8d76..86b4a9b57 100644 --- a/tools/pve/scaling-governor.sh +++ b/tools/pve/scaling-governor.sh @@ -15,7 +15,7 @@ header_info() { EOF } header_info -whiptail --backtitle "Proxmox VE Helper Scripts" --title "CPU Scaling Governors" --yesno "View/Change CPU Scaling Governors. Proceed?" 10 58 || exit +whiptail --backtitle "Proxmox VE Helper Scripts" --title "CPU Scaling Governors" --yesno "View/Change CPU Scaling Governors. Proceed?" 10 58 current_governor=$(cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor) GOVERNORS_MENU=() MSG_MAX_LENGTH=0 @@ -24,7 +24,7 @@ while read -r TAG ITEM; do ((${#ITEM} + OFFSET > MSG_MAX_LENGTH)) && MSG_MAX_LENGTH=${#ITEM}+OFFSET GOVERNORS_MENU+=("$TAG" "$ITEM " "OFF") done < <(cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors | tr ' ' '\n' | grep -v "$current_governor") -scaling_governor=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "Current CPU Scaling Governor is set to $current_governor" --checklist "\nSelect the Scaling Governor to use:\n" 16 $((MSG_MAX_LENGTH + 58)) 6 "${GOVERNORS_MENU[@]}" 3>&1 1>&2 2>&3 | tr -d '"') || exit +scaling_governor=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "Current CPU Scaling Governor is set to $current_governor" --checklist "\nSelect the Scaling Governor to use:\n" 16 $((MSG_MAX_LENGTH + 58)) 6 "${GOVERNORS_MENU[@]}" 3>&1 1>&2 2>&3 | tr -d '"') [ -z "$scaling_governor" ] && { whiptail --backtitle "Proxmox VE Helper Scripts" --title "No CPU Scaling Governor Selected" --msgbox "It appears that no CPU Scaling Governor was selected" 10 68 clear diff --git a/tools/pve/update-lxcs.sh b/tools/pve/update-lxcs.sh index 973e5973d..4aa41b1ac 100644 --- a/tools/pve/update-lxcs.sh +++ b/tools/pve/update-lxcs.sh @@ -26,7 +26,7 @@ GN=$(echo "\033[1;92m") CL=$(echo "\033[m") header_info echo "Loading..." -whiptail --backtitle "Proxmox VE Helper Scripts" --title "Proxmox VE LXC Updater" --yesno "This Will Update LXC Containers. Proceed?" 10 58 || exit +whiptail --backtitle "Proxmox VE Helper Scripts" --title "Proxmox VE LXC Updater" --yesno "This Will Update LXC Containers. Proceed?" 10 58 NODE=$(hostname) EXCLUDE_MENU=() MSG_MAX_LENGTH=0 @@ -35,7 +35,7 @@ while read -r TAG ITEM; do ((${#ITEM} + OFFSET > MSG_MAX_LENGTH)) && MSG_MAX_LENGTH=${#ITEM}+OFFSET EXCLUDE_MENU+=("$TAG" "$ITEM " "OFF") done < <(pct list | awk 'NR>1') -excluded_containers=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "Containers on $NODE" --checklist "\nSelect containers to skip from updates:\n" 16 $((MSG_MAX_LENGTH + 23)) 6 "${EXCLUDE_MENU[@]}" 3>&1 1>&2 2>&3 | tr -d '"') || exit +excluded_containers=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "Containers on $NODE" --checklist "\nSelect containers to skip from updates:\n" 16 $((MSG_MAX_LENGTH + 23)) 6 "${EXCLUDE_MENU[@]}" 3>&1 1>&2 2>&3 | tr -d '"') function needs_reboot() { local container=$1 diff --git a/turnkey/turnkey.sh b/turnkey/turnkey.sh index 0e71dcad3..594a07f30 100644 --- a/turnkey/turnkey.sh +++ b/turnkey/turnkey.sh @@ -56,7 +56,7 @@ if systemctl is-active -q ping-instances.service; then systemctl stop ping-instances.service fi header_info -whiptail --backtitle "Proxmox VE Helper Scripts" --title "TurnKey LXCs" --yesno "This will allow for the creation of one of the many TurnKey LXC Containers. Proceed?" 10 68 || exit +whiptail --backtitle "Proxmox VE Helper Scripts" --title "TurnKey LXCs" --yesno "This will allow for the creation of one of the many TurnKey LXC Containers. Proceed?" 10 68 TURNKEY_MENU=() MSG_MAX_LENGTH=0 while read -r TAG ITEM; do @@ -88,7 +88,7 @@ wordpress Wordpress zoneminder ZoneMinder EOF ) -turnkey=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "TurnKey LXCs" --radiolist "\nSelect a TurnKey LXC to create:\n" 16 $((MSG_MAX_LENGTH + 58)) 6 "${TURNKEY_MENU[@]}" 3>&1 1>&2 2>&3 | tr -d '"') || exit +turnkey=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "TurnKey LXCs" --radiolist "\nSelect a TurnKey LXC to create:\n" 16 $((MSG_MAX_LENGTH + 58)) 6 "${TURNKEY_MENU[@]}" 3>&1 1>&2 2>&3 | tr -d '"') [ -z "$turnkey" ] && { whiptail --backtitle "Proxmox VE Helper Scripts" --title "No TurnKey LXC Selected" --msgbox "It appears that no TurnKey LXC container was selected" 10 68 msg "Done" @@ -163,11 +163,11 @@ function select_storage() { } # Get template storage -TEMPLATE_STORAGE=$(select_storage template) || exit +TEMPLATE_STORAGE=$(select_storage template) info "Using '$TEMPLATE_STORAGE' for template storage." # Get container storage -CONTAINER_STORAGE=$(select_storage container) || exit +CONTAINER_STORAGE=$(select_storage container) info "Using '$CONTAINER_STORAGE' for container storage." # Update LXC template list @@ -238,4 +238,4 @@ info "Proceed to the LXC console to complete the setup." echo info "login: root" info "password: $PASS" -echo \ No newline at end of file +echo diff --git a/vm/archlinux-vm.sh b/vm/archlinux-vm.sh index 0c7b4bdb1..b56921021 100644 --- a/vm/archlinux-vm.sh +++ b/vm/archlinux-vm.sh @@ -6,7 +6,6 @@ source /dev/stdin <<<$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/api.func) - function header_info { clear cat <<"EOF" @@ -65,7 +64,7 @@ THIN="discard=on,ssd=1," set -e trap 'error_handler $LINENO "$BASH_COMMAND"' ERR trap cleanup EXIT -trap 'post_update_to_api "failed" "INTERRUPTED"' SIGINT +trap 'post_update_to_api "failed" "INTERRUPTED"' SIGINT trap 'post_update_to_api "failed" "TERMINATED"' SIGTERM function error_handler() { local exit_code="$?" @@ -94,7 +93,7 @@ pushd $TEMP_DIR >/dev/null if whiptail --backtitle "Proxmox VE Helper Scripts" --title "Arch Linux VM" --yesno "This will create a New Arch Linux VM. Proceed?" 10 58; then : else - header_info && echo -e "${CROSS}${RD}User exited script${CL}\n" && exit + header_info && echo -e "${CROSS}${RD}User exited script${CL}\n" && exit fi function msg_info() { @@ -123,7 +122,7 @@ function check_root() { } function pve_check() { - if ! pveversion | grep -Eq "pve-manager/8\.[1-4](\.[0-9]+)*"; then + if ! pveversion | grep -Eq "pve-manager/8\.[1-4](\.[0-9]+)*"; then msg_error "${CROSS}${RD}This version of Proxmox Virtual Environment is not supported" echo -e "Requires Proxmox Virtual Environment Version 8.1 or later." echo -e "Exiting..." @@ -228,7 +227,7 @@ function advanced_settings() { else exit-script fi - + if DISK_SIZE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Disk Size in GiB (e.g., 10, 20)" 8 58 "$DISK_SIZE" --title "DISK SIZE" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then DISK_SIZE=$(echo "$DISK_SIZE" | tr -d ' ') if [[ "$DISK_SIZE" =~ ^[0-9]+$ ]]; then @@ -243,7 +242,7 @@ function advanced_settings() { else exit-script fi - + if DISK_CACHE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "DISK CACHE" --radiolist "Choose" --cancel-button Exit-Script 10 58 2 \ "0" "None (Default)" ON \ "1" "Write Through" OFF \ @@ -416,7 +415,7 @@ else STORAGE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "Storage Pools" --radiolist \ "Which storage pool you would like to use for ${HN}?\nTo make a selection, use the Spacebar.\n" \ 16 $(($MSG_MAX_LENGTH + 23)) 6 \ - "${STORAGE_MENU[@]}" 3>&1 1>&2 2>&3) || exit + "${STORAGE_MENU[@]}" 3>&1 1>&2 2>&3) done fi msg_ok "Using ${CL}${BL}$STORAGE${CL} ${GN}for Storage Location." @@ -495,11 +494,11 @@ EOF ) qm set "$VMID" -description "$DESCRIPTION" >/dev/null if [ -n "$DISK_SIZE" ]; then - msg_info "Resizing disk to $DISK_SIZE GB" - qm resize $VMID scsi0 ${DISK_SIZE} >/dev/null + msg_info "Resizing disk to $DISK_SIZE GB" + qm resize $VMID scsi0 ${DISK_SIZE} >/dev/null else - msg_info "Using default disk size of $DEFAULT_DISK_SIZE GB" - qm resize $VMID scsi0 ${DEFAULT_DISK_SIZE} >/dev/null + msg_info "Using default disk size of $DEFAULT_DISK_SIZE GB" + qm resize $VMID scsi0 ${DEFAULT_DISK_SIZE} >/dev/null fi msg_ok "Created a Arch Linux VM ${CL}${BL}(${HN})" diff --git a/vm/debian-vm.sh b/vm/debian-vm.sh index 17cf64f77..5fabee6fe 100644 --- a/vm/debian-vm.sh +++ b/vm/debian-vm.sh @@ -63,7 +63,7 @@ THIN="discard=on,ssd=1," set -e trap 'error_handler $LINENO "$BASH_COMMAND"' ERR trap cleanup EXIT -trap 'post_update_to_api "failed" "INTERRUPTED"' SIGINT +trap 'post_update_to_api "failed" "INTERRUPTED"' SIGINT trap 'post_update_to_api "failed" "TERMINATED"' SIGTERM function error_handler() { local exit_code="$?" @@ -93,7 +93,7 @@ pushd $TEMP_DIR >/dev/null if whiptail --backtitle "Proxmox VE Helper Scripts" --title "Debian 12 VM" --yesno "This will create a New Debian 12 VM. Proceed?" 10 58; then : else - header_info && echo -e "${CROSS}${RD}User exited script${CL}\n" && exit + header_info && echo -e "${CROSS}${RD}User exited script${CL}\n" && exit fi function msg_info() { @@ -122,7 +122,7 @@ function check_root() { } function pve_check() { - if ! pveversion | grep -Eq "pve-manager/8\.[1-4](\.[0-9]+)*"; then + if ! pveversion | grep -Eq "pve-manager/8\.[1-4](\.[0-9]+)*"; then msg_error "${CROSS}${RD}This version of Proxmox Virtual Environment is not supported" echo -e "Requires Proxmox Virtual Environment Version 8.1 or later." echo -e "Exiting..." @@ -227,7 +227,7 @@ function advanced_settings() { else exit-script fi - + if DISK_SIZE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Disk Size in GiB (e.g., 10, 20)" 8 58 "$DISK_SIZE" --title "DISK SIZE" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then DISK_SIZE=$(echo "$DISK_SIZE" | tr -d ' ') if [[ "$DISK_SIZE" =~ ^[0-9]+$ ]]; then @@ -416,7 +416,7 @@ else STORAGE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "Storage Pools" --radiolist \ "Which storage pool you would like to use for ${HN}?\nTo make a selection, use the Spacebar.\n" \ 16 $(($MSG_MAX_LENGTH + 23)) 6 \ - "${STORAGE_MENU[@]}" 3>&1 1>&2 2>&3) || exit + "${STORAGE_MENU[@]}" 3>&1 1>&2 2>&3) done fi msg_ok "Using ${CL}${BL}$STORAGE${CL} ${GN}for Storage Location." @@ -494,12 +494,12 @@ EOF ) qm set "$VMID" -description "$DESCRIPTION" >/dev/null if [ -n "$DISK_SIZE" ]; then - msg_info "Resizing disk to $DISK_SIZE GB" - qm resize $VMID scsi0 ${DISK_SIZE} >/dev/null + msg_info "Resizing disk to $DISK_SIZE GB" + qm resize $VMID scsi0 ${DISK_SIZE} >/dev/null else - msg_info "Using default disk size of $DEFAULT_DISK_SIZE GB" - qm resize $VMID scsi0 ${DEFAULT_DISK_SIZE} >/dev/null -fi + msg_info "Using default disk size of $DEFAULT_DISK_SIZE GB" + qm resize $VMID scsi0 ${DEFAULT_DISK_SIZE} >/dev/null +fi msg_ok "Created a Debian 12 VM ${CL}${BL}(${HN})" if [ "$START_VM" == "yes" ]; then diff --git a/vm/docker-vm.sh b/vm/docker-vm.sh index eaecdd4f7..ffc3c2937 100644 --- a/vm/docker-vm.sh +++ b/vm/docker-vm.sh @@ -44,7 +44,7 @@ THIN="discard=on,ssd=1," set -e trap 'error_handler $LINENO "$BASH_COMMAND"' ERR trap cleanup EXIT -trap 'post_update_to_api "failed" "INTERRUPTED"' SIGINT +trap 'post_update_to_api "failed" "INTERRUPTED"' SIGINT trap 'post_update_to_api "failed" "TERMINATED"' SIGTERM function error_handler() { local exit_code="$?" @@ -102,13 +102,13 @@ function check_root() { } function pve_check() { - if ! pveversion | grep -Eq "pve-manager/8\.[1-4](\.[0-9]+)*"; then + if ! pveversion | grep -Eq "pve-manager/8\.[1-4](\.[0-9]+)*"; then msg_error "This version of Proxmox Virtual Environment is not supported" echo -e "Requires Proxmox Virtual Environment Version 8.1 or later." echo -e "Exiting..." sleep 2 exit -fi + fi } function arch_check() { @@ -379,7 +379,7 @@ else STORAGE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "Storage Pools" --radiolist \ "Which storage pool you would like to use for ${HN}?\nTo make a selection, use the Spacebar.\n" \ 16 $(($MSG_MAX_LENGTH + 23)) 6 \ - "${STORAGE_MENU[@]}" 3>&1 1>&2 2>&3) || exit + "${STORAGE_MENU[@]}" 3>&1 1>&2 2>&3) done fi msg_ok "Using ${CL}${BL}$STORAGE${CL} ${GN}for Storage Location." @@ -421,14 +421,13 @@ msg_ok "Installed libguestfs-tools successfully" msg_info "Adding Docker and Docker Compose Plugin to Debian 12 Qcow2 Disk Image" virt-customize -q -a "${FILE}" --install qemu-guest-agent,apt-transport-https,ca-certificates,curl,gnupg,software-properties-common,lsb-release >/dev/null && -virt-customize -q -a "${FILE}" --run-command "mkdir -p /etc/apt/keyrings && curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg" >/dev/null && -virt-customize -q -a "${FILE}" --run-command "echo 'deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian bookworm stable' > /etc/apt/sources.list.d/docker.list" >/dev/null && -virt-customize -q -a "${FILE}" --run-command "apt-get update -qq && apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin" >/dev/null && -virt-customize -q -a "${FILE}" --run-command "systemctl enable docker" >/dev/null && -virt-customize -q -a "${FILE}" --run-command "echo -n > /etc/machine-id" >/dev/null + virt-customize -q -a "${FILE}" --run-command "mkdir -p /etc/apt/keyrings && curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg" >/dev/null && + virt-customize -q -a "${FILE}" --run-command "echo 'deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian bookworm stable' > /etc/apt/sources.list.d/docker.list" >/dev/null && + virt-customize -q -a "${FILE}" --run-command "apt-get update -qq && apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin" >/dev/null && + virt-customize -q -a "${FILE}" --run-command "systemctl enable docker" >/dev/null && + virt-customize -q -a "${FILE}" --run-command "echo -n > /etc/machine-id" >/dev/null msg_ok "Added Docker and Docker Compose Plugin to Debian 12 Qcow2 Disk Image successfully" - msg_info "Creating a Docker VM" qm create $VMID -agent 1${MACHINE} -tablet 0 -localtime 1 -bios ovmf${CPU_TYPE} -cores $CORE_COUNT -memory $RAM_SIZE \ -name $HN -tags community-script,debian12,docker -net0 virtio,bridge=$BRG,macaddr=$MAC$VLAN$MTU -onboot 1 -ostype l26 -scsihw virtio-scsi-pci @@ -442,7 +441,8 @@ qm set $VMID \ qm resize $VMID scsi0 8G >/dev/null qm set $VMID --agent enabled=1 >/dev/null - DESCRIPTION=$(cat < Logo diff --git a/vm/haos-vm.sh b/vm/haos-vm.sh index 5f01a7e07..6832cdcc9 100644 --- a/vm/haos-vm.sh +++ b/vm/haos-vm.sh @@ -7,7 +7,6 @@ source /dev/stdin <<<$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/api.func) - function header_info { clear cat <<"EOF" @@ -51,11 +50,11 @@ SPINNER_PID="" set -Eeuo pipefail trap 'error_handler $LINENO "$BASH_COMMAND"' ERR trap cleanup EXIT -trap 'post_update_to_api "failed" "INTERRUPTED"' SIGINT +trap 'post_update_to_api "failed" "INTERRUPTED"' SIGINT trap 'post_update_to_api "failed" "TERMINATED"' SIGTERM function error_handler() { - if [ -n "$SPINNER_PID" ] && ps -p $SPINNER_PID > /dev/null; then kill $SPINNER_PID > /dev/null; fi + if [ -n "$SPINNER_PID" ] && ps -p $SPINNER_PID >/dev/null; then kill $SPINNER_PID >/dev/null; fi printf "\e[?25h" local exit_code="$?" local line_number="$1" @@ -87,13 +86,13 @@ else fi function spinner() { - local chars="/-\|" - local spin_i=0 - printf "\e[?25l" - while true; do - printf "\r \e[36m%s\e[0m" "${chars:spin_i++%${#chars}:1}" - sleep 0.1 - done + local chars="/-\|" + local spin_i=0 + printf "\e[?25l" + while true; do + printf "\r \e[36m%s\e[0m" "${chars:spin_i++%${#chars}:1}" + sleep 0.1 + done } function msg_info() { @@ -104,14 +103,14 @@ function msg_info() { } function msg_ok() { - if [ -n "$SPINNER_PID" ] && ps -p $SPINNER_PID > /dev/null; then kill $SPINNER_PID > /dev/null; fi + if [ -n "$SPINNER_PID" ] && ps -p $SPINNER_PID >/dev/null; then kill $SPINNER_PID >/dev/null; fi printf "\e[?25h" local msg="$1" echo -e "${BFR} ${CM} ${GN}${msg}${CL}" } function msg_error() { - if [ -n "$SPINNER_PID" ] && ps -p $SPINNER_PID > /dev/null; then kill $SPINNER_PID > /dev/null; fi + if [ -n "$SPINNER_PID" ] && ps -p $SPINNER_PID >/dev/null; then kill $SPINNER_PID >/dev/null; fi printf "\e[?25h" local msg="$1" echo -e "${BFR} ${CROSS} ${RD}${msg}${CL}" @@ -134,7 +133,7 @@ function pve_check() { echo -e "Exiting..." sleep 2 exit -fi + fi } function arch_check() { @@ -393,7 +392,6 @@ pve_check ssh_check start_script - post_to_api_vm msg_info "Validating Storage" @@ -416,12 +414,12 @@ elif [ $((${#STORAGE_MENU[@]} / 3)) -eq 1 ]; then STORAGE=${STORAGE_MENU[0]} else while [ -z "${STORAGE:+x}" ]; do - if [ -n "$SPINNER_PID" ] && ps -p $SPINNER_PID > /dev/null; then kill $SPINNER_PID > /dev/null; fi + if [ -n "$SPINNER_PID" ] && ps -p $SPINNER_PID >/dev/null; then kill $SPINNER_PID >/dev/null; fi printf "\e[?25h" STORAGE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "Storage Pools" --radiolist \ "Which storage pool you would like to use for ${HN}?\nTo make a selection, use the Spacebar.\n" \ 16 $(($MSG_MAX_LENGTH + 23)) 6 \ - "${STORAGE_MENU[@]}" 3>&1 1>&2 2>&3) || exit + "${STORAGE_MENU[@]}" 3>&1 1>&2 2>&3) done fi msg_ok "Using ${CL}${BL}$STORAGE${CL} ${GN}for Storage Location." @@ -485,5 +483,3 @@ if [ "$START_VM" == "yes" ]; then fi post_update_to_api "done" "none" msg_ok "Completed Successfully!\n" - - diff --git a/vm/mikrotik-routeros.sh b/vm/mikrotik-routeros.sh index 16533bdc0..fa05bd0cd 100644 --- a/vm/mikrotik-routeros.sh +++ b/vm/mikrotik-routeros.sh @@ -7,7 +7,6 @@ source /dev/stdin <<<$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/api.func) - function header_info { cat <<"EOF" __ ____ __ __ _ __ ____ __ ____ _____ ________ ______ @@ -50,7 +49,7 @@ shopt -s expand_aliases alias die='EXIT=$? LINE=$LINENO error_exit' trap die ERR trap cleanup EXIT -trap 'post_update_to_api "failed" "INTERRUPTED"' SIGINT +trap 'post_update_to_api "failed" "INTERRUPTED"' SIGINT trap 'post_update_to_api "failed" "TERMINATED"' SIGTERM function error_exit() { trap - ERR @@ -244,7 +243,7 @@ else STORAGE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "Storage Pools" --radiolist \ "Which storage pool you would like to use for the Mikrotik RouterOS CHR VM?\n\n" \ 16 $(($MSG_MAX_LENGTH + 23)) 6 \ - "${STORAGE_MENU[@]}" 3>&1 1>&2 2>&3) || exit + "${STORAGE_MENU[@]}" 3>&1 1>&2 2>&3) done fi msg_ok "Using ${CL}${BL}$STORAGE${CL} ${GN}for Storage Location." diff --git a/vm/nextcloud-vm.sh b/vm/nextcloud-vm.sh index 3eb8fe911..1a93ac36d 100644 --- a/vm/nextcloud-vm.sh +++ b/vm/nextcloud-vm.sh @@ -46,7 +46,7 @@ THIN="discard=on,ssd=1" set -e trap 'error_handler $LINENO "$BASH_COMMAND"' ERR trap cleanup EXIT -trap 'post_update_to_api "failed" "INTERRUPTED"' SIGINT +trap 'post_update_to_api "failed" "INTERRUPTED"' SIGINT trap 'post_update_to_api "failed" "TERMINATED"' SIGTERM function error_handler() { local exit_code="$?" @@ -110,7 +110,7 @@ function pve_check() { echo -e "Exiting..." sleep 2 exit -fi + fi } function arch_check() { @@ -380,7 +380,7 @@ else STORAGE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "Storage Pools" --radiolist \ "Which storage pool you would like to use for ${HN}?\nTo make a selection, use the Spacebar.\n" \ 16 $(($MSG_MAX_LENGTH + 23)) 6 \ - "${STORAGE_MENU[@]}" 3>&1 1>&2 2>&3) || exit + "${STORAGE_MENU[@]}" 3>&1 1>&2 2>&3) done fi msg_ok "Using ${CL}${BL}$STORAGE${CL} ${GN}for Storage Location." diff --git a/vm/openwrt.sh b/vm/openwrt.sh index 0b4ceccc5..0fac01d64 100644 --- a/vm/openwrt.sh +++ b/vm/openwrt.sh @@ -49,7 +49,7 @@ CROSS="${RD}βœ—${CL}" set -Eeo pipefail trap 'error_handler $LINENO "$BASH_COMMAND"' ERR trap cleanup EXIT -trap 'post_update_to_api "failed" "INTERRUPTED"' SIGINT +trap 'post_update_to_api "failed" "INTERRUPTED"' SIGINT trap 'post_update_to_api "failed" "TERMINATED"' SIGTERM function error_handler() { local exit_code="$?" @@ -176,7 +176,7 @@ function pve_check() { echo -e "Exiting..." sleep 2 exit -fi + fi } function arch_check() { @@ -440,7 +440,7 @@ else STORAGE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "Storage Pools" --radiolist \ "Which storage pool you would like to use for the OpenWrt VM?\n\n" \ 16 $(($MSG_MAX_LENGTH + 23)) 6 \ - "${STORAGE_MENU[@]}" 3>&1 1>&2 2>&3) || exit + "${STORAGE_MENU[@]}" 3>&1 1>&2 2>&3) done fi msg_ok "Using ${CL}${BL}$STORAGE${CL} ${GN}for Storage Location." diff --git a/vm/opnsense-vm.sh b/vm/opnsense-vm.sh index 8ec543388..44f7bae69 100644 --- a/vm/opnsense-vm.sh +++ b/vm/opnsense-vm.sh @@ -8,7 +8,7 @@ source /dev/stdin <<<$(curl -fsSL https://raw.githubusercontent.com/community-sc function header_info { clear - cat <<"EOF" + cat <<"EOF" ____ ____ _ __ / __ \/ __ \/ | / /_______ ____ ________ / / / / /_/ / |/ / ___/ _ \/ __ \/ ___/ _ \ @@ -230,8 +230,8 @@ function default_settings() { echo -e "${DGN}Allocated Cores: ${BGN}${CORE_COUNT}${CL}" echo -e "${DGN}Allocated RAM: ${BGN}${RAM_SIZE}${CL}" if ! grep -q "^iface ${BRG}" /etc/network/interfaces; then - msg_error "Bridge '${BRG}' does not exist in /etc/network/interfaces" - exit + msg_error "Bridge '${BRG}' does not exist in /etc/network/interfaces" + exit else echo -e "${DGN}Using LAN Bridge: ${BGN}${BRG}${CL}" fi @@ -518,7 +518,7 @@ else STORAGE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "Storage Pools" --radiolist \ "Which storage pool you would like to use for ${HN}?\nTo make a selection, use the Spacebar.\n" \ 16 $(($MSG_MAX_LENGTH + 23)) 6 \ - "${STORAGE_MENU[@]}" 3>&1 1>&2 2>&3) || exit + "${STORAGE_MENU[@]}" 3>&1 1>&2 2>&3) done fi msg_ok "Using ${CL}${BL}$STORAGE${CL} ${GN}for Storage Location." @@ -530,7 +530,7 @@ msg_ok "${CL}${BL}${URL}${CL}" curl -f#SL -o "$(basename "$URL")" "$URL" echo -en "\e[1A\e[0K" FILE=Fressbsd.qcow2 -unxz -cv $(basename $URL) > ${FILE} +unxz -cv $(basename $URL) >${FILE} msg_ok "Downloaded ${CL}${BL}${FILE}${CL}" STORAGE_TYPE=$(pvesm status -storage $STORAGE | awk 'NR>1 {print $2}') @@ -564,10 +564,11 @@ qm set $VMID \ -efidisk0 ${DISK0_REF}${FORMAT} \ -scsi0 ${DISK1_REF},${DISK_CACHE}${THIN}size=2G \ -boot order=scsi0 \ - -serial0 socket >/dev/null \ - -tags community-script + -serial0 socket \ + -tags community-script >/dev/null qm resize $VMID scsi0 10G >/dev/null - DESCRIPTION=$(cat < Logo @@ -596,76 +597,76 @@ qm resize $VMID scsi0 10G >/dev/null EOF ) - qm set "$VMID" -description "$DESCRIPTION" >/dev/null +qm set "$VMID" -description "$DESCRIPTION" >/dev/null msg_info "Bridge interfaces are being added." qm set $VMID \ -net0 virtio,bridge=${BRG},macaddr=${MAC}${VLAN}${MTU} 2>/dev/null msg_ok "Bridge interfaces have been successfully added." - -msg_ok "Created a OPNsense VM ${CL}${BL}(${HN})" - msg_ok "Starting OPNsense VM (Patience this takes 20-30 minutes)" - qm start $VMID - sleep 90 - send_line_to_vm "root" - send_line_to_vm "fetch https://raw.githubusercontent.com/opnsense/update/master/src/bootstrap/opnsense-bootstrap.sh.in" - qm set $VMID \ - -net1 virtio,bridge=${WAN_BRG},macaddr=${WAN_MAC} &>/dev/null - sleep 10 - send_line_to_vm "sh ./opnsense-bootstrap.sh.in -y -f -r 25.1" - msg_ok "OPNsense VM is being installed, do not close the terminal, or the installation will fail." - #We need to wait for the OPNsense build proccess to finish, this takes a few minutes - sleep 1000 - send_line_to_vm "root" - send_line_to_vm "opnsense" - send_line_to_vm "2" - if [ "$IP_ADDR" != "" ]; then - send_line_to_vm "1" - send_line_to_vm "n" - send_line_to_vm "${IP_ADDR}" - send_line_to_vm "${NETMASK}" - send_line_to_vm "${LAN_GW}" - send_line_to_vm "n" - send_line_to_vm " " - send_line_to_vm "n" - send_line_to_vm "n" - send_line_to_vm " " - send_line_to_vm "n" - send_line_to_vm "n" - send_line_to_vm "n" - send_line_to_vm "n" - send_line_to_vm "n" - else - send_line_to_vm "1" - send_line_to_vm "y" - send_line_to_vm "n" - send_line_to_vm "n" - send_line_to_vm " " - send_line_to_vm "n" - send_line_to_vm "n" - send_line_to_vm "n" - fi - #we need to wait for the Config changes to be saved - sleep 20 - if [ "$WAN_IP_ADDR" != "" ]; then - send_line_to_vm "2" - send_line_to_vm "2" - send_line_to_vm "n" - send_line_to_vm "${WAN_IP_ADDR}" - send_line_to_vm "${NETMASK}" - send_line_to_vm "${LAN_GW}" - send_line_to_vm "n" - send_line_to_vm " " - send_line_to_vm "n" - send_line_to_vm " " - send_line_to_vm "n" - send_line_to_vm "n" - send_line_to_vm "n" - fi - sleep 10 - send_line_to_vm "0" - msg_ok "Started OPNsense VM" +msg_ok "Created a OPNsense VM ${CL}${BL}(${HN})" +msg_ok "Starting OPNsense VM (Patience this takes 20-30 minutes)" +qm start $VMID +sleep 90 +send_line_to_vm "root" +send_line_to_vm "fetch https://raw.githubusercontent.com/opnsense/update/master/src/bootstrap/opnsense-bootstrap.sh.in" +qm set $VMID \ + -net1 virtio,bridge=${WAN_BRG},macaddr=${WAN_MAC} &>/dev/null +sleep 10 +send_line_to_vm "sh ./opnsense-bootstrap.sh.in -y -f -r 25.1" +msg_ok "OPNsense VM is being installed, do not close the terminal, or the installation will fail." +#We need to wait for the OPNsense build proccess to finish, this takes a few minutes +sleep 1000 +send_line_to_vm "root" +send_line_to_vm "opnsense" +send_line_to_vm "2" + +if [ "$IP_ADDR" != "" ]; then + send_line_to_vm "1" + send_line_to_vm "n" + send_line_to_vm "${IP_ADDR}" + send_line_to_vm "${NETMASK}" + send_line_to_vm "${LAN_GW}" + send_line_to_vm "n" + send_line_to_vm " " + send_line_to_vm "n" + send_line_to_vm "n" + send_line_to_vm " " + send_line_to_vm "n" + send_line_to_vm "n" + send_line_to_vm "n" + send_line_to_vm "n" + send_line_to_vm "n" +else + send_line_to_vm "1" + send_line_to_vm "y" + send_line_to_vm "n" + send_line_to_vm "n" + send_line_to_vm " " + send_line_to_vm "n" + send_line_to_vm "n" + send_line_to_vm "n" +fi +#we need to wait for the Config changes to be saved +sleep 20 +if [ "$WAN_IP_ADDR" != "" ]; then + send_line_to_vm "2" + send_line_to_vm "2" + send_line_to_vm "n" + send_line_to_vm "${WAN_IP_ADDR}" + send_line_to_vm "${NETMASK}" + send_line_to_vm "${LAN_GW}" + send_line_to_vm "n" + send_line_to_vm " " + send_line_to_vm "n" + send_line_to_vm " " + send_line_to_vm "n" + send_line_to_vm "n" + send_line_to_vm "n" +fi +sleep 10 +send_line_to_vm "0" +msg_ok "Started OPNsense VM" msg_ok "Completed Successfully!\n" if [ "$IP_ADDR" != "" ]; then diff --git a/vm/owncloud-vm.sh b/vm/owncloud-vm.sh index 9a05d0481..933507ece 100644 --- a/vm/owncloud-vm.sh +++ b/vm/owncloud-vm.sh @@ -46,7 +46,7 @@ THIN="discard=on,ssd=1" set -e trap 'error_handler $LINENO "$BASH_COMMAND"' ERR trap cleanup EXIT -trap 'post_update_to_api "failed" "INTERRUPTED"' SIGINT +trap 'post_update_to_api "failed" "INTERRUPTED"' SIGINT trap 'post_update_to_api "failed" "TERMINATED"' SIGTERM function error_handler() { local exit_code="$?" @@ -104,13 +104,13 @@ function check_root() { } function pve_check() { -if ! pveversion | grep -Eq "pve-manager/8\.[1-4](\.[0-9]+)*"; then + if ! pveversion | grep -Eq "pve-manager/8\.[1-4](\.[0-9]+)*"; then msg_error "This version of Proxmox Virtual Environment is not supported" echo -e "Requires Proxmox Virtual Environment Version 8.1 or later." echo -e "Exiting..." sleep 2 exit -fi + fi } function arch_check() { @@ -380,7 +380,7 @@ else STORAGE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "Storage Pools" --radiolist \ "Which storage pool you would like to use for ${HN}?\nTo make a selection, use the Spacebar.\n" \ 16 $(($MSG_MAX_LENGTH + 23)) 6 \ - "${STORAGE_MENU[@]}" 3>&1 1>&2 2>&3) || exit + "${STORAGE_MENU[@]}" 3>&1 1>&2 2>&3) done fi msg_ok "Using ${CL}${BL}$STORAGE${CL} ${GN}for Storage Location." diff --git a/vm/pimox-haos-vm.sh b/vm/pimox-haos-vm.sh index cf0c18453..b4d3911d9 100644 --- a/vm/pimox-haos-vm.sh +++ b/vm/pimox-haos-vm.sh @@ -58,7 +58,7 @@ shopt -s expand_aliases alias die='EXIT=$? LINE=$LINENO error_exit' trap die ERR trap cleanup EXIT -trap 'post_update_to_api "failed" "INTERRUPTED"' SIGINT +trap 'post_update_to_api "failed" "INTERRUPTED"' SIGINT trap 'post_update_to_api "failed" "TERMINATED"' SIGTERM function error_exit() { trap - ERR @@ -84,10 +84,10 @@ function cleanup() { } TEMP_DIR=$(mktemp -d) pushd $TEMP_DIR >/dev/null -if ! command -v whiptail &> /dev/null; then - echo "Installing whiptail..." - apt-get update &>/dev/null - apt-get install -y whiptail &>/dev/null +if ! command -v whiptail &>/dev/null; then + echo "Installing whiptail..." + apt-get update &>/dev/null + apt-get install -y whiptail &>/dev/null fi if (whiptail --backtitle "Proxmox VE Helper Scripts" --title "PiMox HAOS VM" --yesno "This will create a New PiMox HAOS VM. Proceed?" 10 58); then echo "User selected Yes" @@ -287,7 +287,7 @@ else STORAGE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "Storage Pools" --radiolist \ "Which storage pool you would like to use for the HAOS VM?\n\n" \ 16 $(($MSG_MAX_LENGTH + 23)) 6 \ - "${STORAGE_MENU[@]}" 3>&1 1>&2 2>&3) || exit + "${STORAGE_MENU[@]}" 3>&1 1>&2 2>&3) done fi msg_ok "Using ${CL}${BL}$STORAGE${CL} ${GN}for Storage Location." diff --git a/vm/ubuntu2204-vm.sh b/vm/ubuntu2204-vm.sh index b9b5ad8d0..a941bc30e 100644 --- a/vm/ubuntu2204-vm.sh +++ b/vm/ubuntu2204-vm.sh @@ -63,7 +63,7 @@ THIN="discard=on,ssd=1," set -e trap 'error_handler $LINENO "$BASH_COMMAND"' ERR trap cleanup EXIT -trap 'post_update_to_api "failed" "INTERRUPTED"' SIGINT +trap 'post_update_to_api "failed" "INTERRUPTED"' SIGINT trap 'post_update_to_api "failed" "TERMINATED"' SIGTERM function error_handler() { local exit_code="$?" @@ -92,7 +92,7 @@ pushd $TEMP_DIR >/dev/null if whiptail --backtitle "Proxmox VE Helper Scripts" --title "Ubuntu 22.04 VM" --yesno "This will create a New Ubuntu 22.04 VM. Proceed?" 10 58; then : else - header_info && echo -e "${CROSS}${RD}User exited script${CL}\n" && exit + header_info && echo -e "${CROSS}${RD}User exited script${CL}\n" && exit fi function msg_info() { @@ -226,7 +226,7 @@ function advanced_settings() { else exit-script fi - + if DISK_SIZE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Disk Size in GiB (e.g., 10, 20)" 8 58 "$DISK_SIZE" --title "DISK SIZE" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then DISK_SIZE=$(echo "$DISK_SIZE" | tr -d ' ') if [[ "$DISK_SIZE" =~ ^[0-9]+$ ]]; then @@ -241,7 +241,7 @@ function advanced_settings() { else exit-script fi - + if DISK_CACHE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "DISK CACHE" --radiolist "Choose" --cancel-button Exit-Script 10 58 2 \ "0" "None (Default)" ON \ "1" "Write Through" OFF \ @@ -414,7 +414,7 @@ else STORAGE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "Storage Pools" --radiolist \ "Which storage pool you would like to use for ${HN}?\nTo make a selection, use the Spacebar.\n" \ 16 $(($MSG_MAX_LENGTH + 23)) 6 \ - "${STORAGE_MENU[@]}" 3>&1 1>&2 2>&3) || exit + "${STORAGE_MENU[@]}" 3>&1 1>&2 2>&3) done fi msg_ok "Using ${CL}${BL}$STORAGE${CL} ${GN}for Storage Location." @@ -493,11 +493,11 @@ EOF ) qm set "$VMID" -description "$DESCRIPTION" >/dev/null if [ -n "$DISK_SIZE" ]; then - msg_info "Resizing disk to $DISK_SIZE GB" - qm resize $VMID scsi0 ${DISK_SIZE} >/dev/null + msg_info "Resizing disk to $DISK_SIZE GB" + qm resize $VMID scsi0 ${DISK_SIZE} >/dev/null else - msg_info "Using default disk size of $DEFAULT_DISK_SIZE GB" - qm resize $VMID scsi0 ${DEFAULT_DISK_SIZE} >/dev/null + msg_info "Using default disk size of $DEFAULT_DISK_SIZE GB" + qm resize $VMID scsi0 ${DEFAULT_DISK_SIZE} >/dev/null fi msg_ok "Created a Ubuntu 22.04 VM ${CL}${BL}(${HN})" diff --git a/vm/ubuntu2404-vm.sh b/vm/ubuntu2404-vm.sh index 2feb00928..62709aab3 100644 --- a/vm/ubuntu2404-vm.sh +++ b/vm/ubuntu2404-vm.sh @@ -29,7 +29,7 @@ var_os="ubuntu" var_version="2404" YW=$(echo "\033[33m") -BL=$(echo "\033[36m") +BL=$(echo "\033[36m") RD=$(echo "\033[01;31m") BGN=$(echo "\033[4;92m") GN=$(echo "\033[1;92m") @@ -64,7 +64,7 @@ THIN="discard=on,ssd=1," set -e trap 'error_handler $LINENO "$BASH_COMMAND"' ERR trap cleanup EXIT -trap 'post_update_to_api "failed" "INTERRUPTED"' SIGINT +trap 'post_update_to_api "failed" "INTERRUPTED"' SIGINT trap 'post_update_to_api "failed" "TERMINATED"' SIGTERM function error_handler() { local exit_code="$?" @@ -93,7 +93,7 @@ pushd $TEMP_DIR >/dev/null if whiptail --backtitle "Proxmox VE Helper Scripts" --title "Ubuntu 24.04 VM" --yesno "This will create a New Ubuntu 24.04 VM. Proceed?" 10 58; then : else - header_info && echo -e "${CROSS}${RD}User exited script${CL}\n" && exit + header_info && echo -e "${CROSS}${RD}User exited script${CL}\n" && exit fi function msg_info() { @@ -122,7 +122,7 @@ function check_root() { } function pve_check() { - if ! pveversion | grep -Eq "pve-manager/8\.[1-4](\.[0-9]+)*"; then + if ! pveversion | grep -Eq "pve-manager/8\.[1-4](\.[0-9]+)*"; then msg_error "${CROSS}${RD}This version of Proxmox Virtual Environment is not supported" echo -e "Requires Proxmox Virtual Environment Version 8.1 or later." echo -e "Exiting..." @@ -227,7 +227,7 @@ function advanced_settings() { else exit-script fi - + if DISK_SIZE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Disk Size in GiB (e.g., 10, 20)" 8 58 "$DISK_SIZE" --title "DISK SIZE" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then DISK_SIZE=$(echo "$DISK_SIZE" | tr -d ' ') if [[ "$DISK_SIZE" =~ ^[0-9]+$ ]]; then @@ -242,7 +242,7 @@ function advanced_settings() { else exit-script fi - + if DISK_CACHE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "DISK CACHE" --radiolist "Choose" --cancel-button Exit-Script 10 58 2 \ "0" "None (Default)" ON \ "1" "Write Through" OFF \ @@ -414,7 +414,7 @@ else STORAGE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "Storage Pools" --radiolist \ "Which storage pool you would like to use for ${HN}?\nTo make a selection, use the Spacebar.\n" \ 16 $(($MSG_MAX_LENGTH + 23)) 6 \ - "${STORAGE_MENU[@]}" 3>&1 1>&2 2>&3) || exit + "${STORAGE_MENU[@]}" 3>&1 1>&2 2>&3) done fi msg_ok "Using ${CL}${BL}$STORAGE${CL} ${GN}for Storage Location." @@ -493,11 +493,11 @@ EOF ) qm set "$VMID" -description "$DESCRIPTION" >/dev/null if [ -n "$DISK_SIZE" ]; then - msg_info "Resizing disk to $DISK_SIZE GB" - qm resize $VMID scsi0 ${DISK_SIZE} >/dev/null + msg_info "Resizing disk to $DISK_SIZE GB" + qm resize $VMID scsi0 ${DISK_SIZE} >/dev/null else - msg_info "Using default disk size of $DEFAULT_DISK_SIZE GB" - qm resize $VMID scsi0 ${DEFAULT_DISK_SIZE} >/dev/null + msg_info "Using default disk size of $DEFAULT_DISK_SIZE GB" + qm resize $VMID scsi0 ${DEFAULT_DISK_SIZE} >/dev/null fi msg_ok "Created a Ubuntu 24.04 VM ${CL}${BL}(${HN})" diff --git a/vm/ubuntu2410-vm.sh b/vm/ubuntu2410-vm.sh index d3230110a..d705393ef 100644 --- a/vm/ubuntu2410-vm.sh +++ b/vm/ubuntu2410-vm.sh @@ -63,7 +63,7 @@ THIN="discard=on,ssd=1," set -e trap 'error_handler $LINENO "$BASH_COMMAND"' ERR trap cleanup EXIT -trap 'post_update_to_api "failed" "INTERRUPTED"' SIGINT +trap 'post_update_to_api "failed" "INTERRUPTED"' SIGINT trap 'post_update_to_api "failed" "TERMINATED"' SIGTERM function error_handler() { local exit_code="$?" @@ -92,7 +92,7 @@ pushd $TEMP_DIR >/dev/null if whiptail --backtitle "Proxmox VE Helper Scripts" --title "Ubuntu 24.10 VM" --yesno "This will create a New Ubuntu 24.10 VM. Proceed?" 10 58; then : else - header_info && echo -e "${CROSS}${RD}User exited script${CL}\n" && exit + header_info && echo -e "${CROSS}${RD}User exited script${CL}\n" && exit fi function msg_info() { @@ -121,7 +121,7 @@ function check_root() { } function pve_check() { - if ! pveversion | grep -Eq "pve-manager/8\.[1-4](\.[0-9]+)*"; then + if ! pveversion | grep -Eq "pve-manager/8\.[1-4](\.[0-9]+)*"; then msg_error "${CROSS}${RD}This version of Proxmox Virtual Environment is not supported" echo -e "Requires Proxmox Virtual Environment Version 8.1 or later." echo -e "Exiting..." @@ -226,7 +226,7 @@ function advanced_settings() { else exit-script fi - + if DISK_SIZE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Disk Size in GiB (e.g., 10, 20)" 8 58 "$DISK_SIZE" --title "DISK SIZE" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then DISK_SIZE=$(echo "$DISK_SIZE" | tr -d ' ') if [[ "$DISK_SIZE" =~ ^[0-9]+$ ]]; then @@ -241,7 +241,7 @@ function advanced_settings() { else exit-script fi - + if DISK_CACHE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "DISK CACHE" --radiolist "Choose" --cancel-button Exit-Script 10 58 2 \ "0" "None (Default)" ON \ "1" "Write Through" OFF \ @@ -414,7 +414,7 @@ else STORAGE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "Storage Pools" --radiolist \ "Which storage pool you would like to use for ${HN}?\nTo make a selection, use the Spacebar.\n" \ 16 $(($MSG_MAX_LENGTH + 23)) 6 \ - "${STORAGE_MENU[@]}" 3>&1 1>&2 2>&3) || exit + "${STORAGE_MENU[@]}" 3>&1 1>&2 2>&3) done fi msg_ok "Using ${CL}${BL}$STORAGE${CL} ${GN}for Storage Location." @@ -493,11 +493,11 @@ EOF ) qm set "$VMID" -description "$DESCRIPTION" >/dev/null if [ -n "$DISK_SIZE" ]; then - msg_info "Resizing disk to $DISK_SIZE GB" - qm resize $VMID scsi0 ${DISK_SIZE} >/dev/null + msg_info "Resizing disk to $DISK_SIZE GB" + qm resize $VMID scsi0 ${DISK_SIZE} >/dev/null else - msg_info "Using default disk size of $DEFAULT_DISK_SIZE GB" - qm resize $VMID scsi0 ${DEFAULT_DISK_SIZE} >/dev/null + msg_info "Using default disk size of $DEFAULT_DISK_SIZE GB" + qm resize $VMID scsi0 ${DEFAULT_DISK_SIZE} >/dev/null fi msg_ok "Created a Ubuntu 24.10 VM ${CL}${BL}(${HN})" From aec596a18a3d81ba2709adad871322c24454300c Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Tue, 15 Apr 2025 15:24:45 +0200 Subject: [PATCH 08/29] Update CHANGELOG.md (#3900) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9ac321e96..2cbb0e299 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,8 @@ All LXC instances created using this repository come pre-installed with Midnight ### πŸš€ Updated Scripts + - [core] remove unneeded vars from shellcheck [@MickLesk](https://github.com/MickLesk) ([#3899](https://github.com/community-scripts/ProxmoxVE/pull/3899)) + - #### 🐞 Bug Fixes - Outline: Installation and update fixes [@tremor021](https://github.com/tremor021) ([#3895](https://github.com/community-scripts/ProxmoxVE/pull/3895)) From 13a505df7ab1f47f99b4673b3522663b07434b8d Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Tue, 15 Apr 2025 15:41:18 +0200 Subject: [PATCH 09/29] quickfix spelling issue --- ct/npmplus.sh | 2 +- ct/peanut.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ct/npmplus.sh b/ct/npmplus.sh index d8f2c6248..d0b2dbe10 100644 --- a/ct/npmplus.sh +++ b/ct/npmplus.sh @@ -36,7 +36,7 @@ function update_script() { ;; "2") msg_info "Updating NPMplus Container" - cd /opt 1 + cd /opt msg_info "Pulling latest container image" $STD docker compose pull msg_info "Recreating container" diff --git a/ct/peanut.sh b/ct/peanut.sh index 7aa8e171d..b38aaba6d 100644 --- a/ct/peanut.sh +++ b/ct/peanut.sh @@ -32,7 +32,7 @@ function update_script() { msg_info "Updating $APP to ${RELEASE}" systemctl stop peanut curl -fsSL "https://api.github.com/repos/Brandawg93/PeaNUT/tarball/${RELEASE}" -o "peanut.tar.gz" - tar -xzf peanut.tar.gz -C /opt/peanut --strip-components 1 + tar -xzf peanut.tar.gz -C /opt/peanut --strip-components rm peanut.tar.gz cd /opt/peanut $STD pnpm i From c04167ccac67d582232e478b836dc89f4a00147c Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Tue, 15 Apr 2025 15:58:05 +0200 Subject: [PATCH 10/29] ignore vscode/settings.json --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 84f6d1c71..9701f0ea1 100644 --- a/.gitignore +++ b/.gitignore @@ -74,3 +74,4 @@ json/.vscode/ # Ignore repository metadata or Git itself .git/ .gitignore +.vscode/settings.json From 0acfc2f7d11058ca2f01c2411063539d26274649 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Tue, 15 Apr 2025 22:18:16 +0200 Subject: [PATCH 11/29] shrink & minimalize report templates (#3902) --- .../DISCUSSION_TEMPLATE/request-script.yml | 2 +- .github/ISSUE_TEMPLATE/bug_report.yml | 27 +++++++++---------- .github/ISSUE_TEMPLATE/config.yml | 6 ++--- .github/ISSUE_TEMPLATE/feature_request.yml | 2 +- .github/pull_request_template.md | 18 +++---------- 5 files changed, 21 insertions(+), 34 deletions(-) diff --git a/.github/DISCUSSION_TEMPLATE/request-script.yml b/.github/DISCUSSION_TEMPLATE/request-script.yml index 44ed9b147..2498b677c 100644 --- a/.github/DISCUSSION_TEMPLATE/request-script.yml +++ b/.github/DISCUSSION_TEMPLATE/request-script.yml @@ -1,4 +1,4 @@ -title: "[Script request] " +title: "[Script request]: " labels: ["enhancement"] body: - type: input diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index c3dae1a96..a9e0b9b49 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -5,16 +5,15 @@ body: - type: markdown attributes: value: | - # 🐞 **Script Issue Report** - Thank you for taking the time to report an issue! Please provide as much detail as possible to help us address the problem efficiently. - ## ⚠️ **IMPORTANT - READ FIRST** - πŸ” **Search first:** Before submitting, check if the issue has already been reported or resolved in [closed issues](https://github.com/community-scripts/ProxmoxVE/issues?q=is%3Aissue+is%3Aclosed). If found, comment on that issue instead of creating a new one. Alternatively, check the **[Discussions](https://github.com/community-scripts/ProxmoxVE/discussions)** under the *"Announcement"* or *"Guide"* categories for relevant information. - - πŸ› οΈ **Supported environments only:** Ensure you are using a default Linux distribution. Custom setups may not be supported. - πŸ”Ž If you encounter `[ERROR] in line 23: exit code *: while executing command "$@" > /dev/null 2>&1`, rerun the script with verbose mode before submitting the issue. - - πŸ’‘ For general questions, feature requests, or suggestions, use the [Discussions section](https://github.com/community-scripts/ProxmoxVE/discussions). - + - πŸ“œ **Read the script:** Familiarize yourself with the script's content and its purpose. This will help you understand the issue better and provide more relevant information + + Thank you for taking the time to report an issue! Please provide as much detail as possible to help us address the problem efficiently. + + - type: input id: guidelines attributes: @@ -35,14 +34,7 @@ body: id: script_command attributes: label: πŸ“‚ What was the exact command used to execute the script? - placeholder: "e.g., bash -c \"$(wget -qLO - https://github.com/community-scripts/ProxmoxVE/raw/main/ct/zigbee2mqtt.sh)\" or \"update\"" - validations: - required: true - - - type: textarea - id: issue_description - attributes: - label: πŸ“ Provide a clear and concise description of the issue. + placeholder: "e.g., bash -c \"$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/zigbee2mqtt.sh)\" or \"update\"" validations: required: true @@ -75,6 +67,13 @@ body: validations: required: true + - type: textarea + id: issue_description + attributes: + label: πŸ“ Provide a clear and concise description of the issue. + validations: + required: true + - type: textarea id: steps_to_reproduce attributes: diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index 3715f849f..00fcb8ed4 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -1,11 +1,11 @@ blank_issues_enabled: false contact_links: - - name: πŸ€” Questions and Help - url: https://github.com/community-scripts/ProxmoxVE/discussions - about: For suggestions or questions, please use the Discussions section. - name: 🌟 new Script request url: https://github.com/community-scripts/ProxmoxVE/discussions/new?category=request-script about: For feature/script requests, please use the Discussions section. + - name: πŸ€” Questions and Help + url: https://github.com/community-scripts/ProxmoxVE/discussions + about: For suggestions or questions, please use the Discussions section. - name: πŸ’» Discord url: https://discord.gg/jsYVk5JBxq about: Join our Discord server to chat with other users in the Proxmox Helper Scripts community. diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml index 7f065275f..036904e38 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.yml +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -1,5 +1,5 @@ name: "✨ Feature Request" -description: "Suggest a new feature or enhancement." +description: "Suggest a new feature or enhancement. (not for script requests)" labels: ["enhancement"] body: - type: markdown diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 89b9bc47e..82aabf27f 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -1,8 +1,7 @@ - - + ## ✍️ Description - + ## πŸ”— Related PR / Issue @@ -13,7 +12,6 @@ Link: # - [ ] **Self-review completed** – Code follows project standards. - [ ] **Tested thoroughly** – Changes work as expected. -- [ ] **No breaking changes** – Existing functionality remains intact. - [ ] **No security risks** – No hardcoded secrets, unnecessary privilege escalations, or permission issues. --- @@ -27,13 +25,3 @@ Link: # - [ ] 🌍 **Website update** – Changes to website-related JSON files or metadata. - [ ] πŸ”§ **Refactoring / Code Cleanup** – Improves readability or maintainability without changing functionality. - [ ] πŸ“ **Documentation update** – Changes to `README`, `AppName.md`, `CONTRIBUTING.md`, or other docs. - ---- - -## πŸ” Code & Security Review (**X** in brackets) - -- [ ] **Follows `Code_Audit.md` & `CONTRIBUTING.md` guidelines** - - -## πŸ“‹ Additional Information (optional) - From af7d8bac670d50dee7596928eacfaf9a4a7efea2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 15 Apr 2025 22:21:08 +0200 Subject: [PATCH 12/29] Bump golang.org/x/crypto from 0.32.0 to 0.35.0 in /api (#3887) Bumps [golang.org/x/crypto](https://github.com/golang/crypto) from 0.32.0 to 0.35.0. - [Commits](https://github.com/golang/crypto/compare/v0.32.0...v0.35.0) --- updated-dependencies: - dependency-name: golang.org/x/crypto dependency-version: 0.35.0 dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- api/go.mod | 27 +++++++++------------------ api/go.sum | 47 ++++++++++------------------------------------- 2 files changed, 19 insertions(+), 55 deletions(-) diff --git a/api/go.mod b/api/go.mod index 0297b1a4f..9a800e283 100644 --- a/api/go.mod +++ b/api/go.mod @@ -2,31 +2,22 @@ module proxmox-api go 1.23.2 -require go.mongodb.org/mongo-driver v1.17.2 +require ( + github.com/gorilla/mux v1.8.1 + github.com/joho/godotenv v1.5.1 + github.com/rs/cors v1.11.1 + go.mongodb.org/mongo-driver v1.17.2 +) require ( - filippo.io/edwards25519 v1.1.0 // indirect - github.com/go-sql-driver/mysql v1.8.1 // indirect github.com/golang/snappy v0.0.4 // indirect - github.com/gorilla/mux v1.8.1 // indirect - github.com/jackc/pgpassfile v1.0.0 // indirect - github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 // indirect - github.com/jackc/pgx/v5 v5.7.2 // indirect - github.com/jackc/puddle/v2 v2.2.2 // indirect - github.com/jinzhu/inflection v1.0.0 // indirect - github.com/jinzhu/now v1.1.5 // indirect - github.com/joho/godotenv v1.5.1 // indirect github.com/klauspost/compress v1.16.7 // indirect github.com/montanaflynn/stats v0.7.1 // indirect - github.com/rs/cors v1.11.1 // indirect github.com/xdg-go/pbkdf2 v1.0.0 // indirect github.com/xdg-go/scram v1.1.2 // indirect github.com/xdg-go/stringprep v1.0.4 // indirect github.com/youmark/pkcs8 v0.0.0-20240726163527-a2c0da244d78 // indirect - golang.org/x/crypto v0.32.0 // indirect - golang.org/x/sync v0.10.0 // indirect - golang.org/x/text v0.21.0 // indirect - gorm.io/driver/mysql v1.5.7 // indirect - gorm.io/driver/postgres v1.5.11 // indirect - gorm.io/gorm v1.25.12 // indirect + golang.org/x/crypto v0.35.0 // indirect + golang.org/x/sync v0.11.0 // indirect + golang.org/x/text v0.22.0 // indirect ) diff --git a/api/go.sum b/api/go.sum index ea649ff6b..f0a92be40 100644 --- a/api/go.sum +++ b/api/go.sum @@ -1,37 +1,19 @@ -filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA= -filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/go-sql-driver/mysql v1.7.0/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI= -github.com/go-sql-driver/mysql v1.8.1 h1:LedoTUt/eveggdHS9qUFC1EFSa8bU2+1pZjSRpvNJ1Y= -github.com/go-sql-driver/mysql v1.8.1/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqwuVSjsCm7DZg= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY= github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ= -github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM= -github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg= -github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 h1:iCEnooe7UlwOQYpKFhBabPMi4aNAfoODPEFNiAnClxo= -github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761/go.mod h1:5TJZWKEWniPve33vlWYSoGYefn3gLQRzjfDlhSJ9ZKM= -github.com/jackc/pgx/v5 v5.7.2 h1:mLoDLV6sonKlvjIEsV56SkWNCnuNv531l94GaIzO+XI= -github.com/jackc/pgx/v5 v5.7.2/go.mod h1:ncY89UGWxg82EykZUwSpUKEfccBGGYq1xjrOpsbsfGQ= -github.com/jackc/puddle/v2 v2.2.2 h1:PR8nw+E/1w0GLuRFSmiioY6UooMp6KJv0/61nB7icHo= -github.com/jackc/puddle/v2 v2.2.2/go.mod h1:vriiEXHvEE654aYKXXjOvZM39qJ0q+azkZFrfEOc3H4= -github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E= -github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc= -github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ= -github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0= github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4= github.com/klauspost/compress v1.16.7 h1:2mk3MPGNzKyxErAw8YaohYh69+pa4sIQSC0fPGCFR9I= github.com/klauspost/compress v1.16.7/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= github.com/montanaflynn/stats v0.7.1 h1:etflOAAHORrCC44V+aR6Ftzort912ZU+YLiSTuV8eaE= github.com/montanaflynn/stats v0.7.1/go.mod h1:etXPPgVO6n31NxCd9KQUMvCM+ve0ruNzt6R8Bnaayow= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/rs/cors v1.11.1 h1:eU3gRzXLRK57F5rKMGMZURNdIG4EoAmX8k94r9wXWHA= github.com/rs/cors v1.11.1/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/xdg-go/pbkdf2 v1.0.0 h1:Su7DPu48wXMwC3bs7MCNG+z4FhcyEuz5dlvchbq0B0c= github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI= github.com/xdg-go/scram v1.1.2 h1:FHX5I5B4i4hKRVRBCFRxq1iQRej7WO3hhBuJf+UUySY= @@ -45,16 +27,16 @@ go.mongodb.org/mongo-driver v1.17.2 h1:gvZyk8352qSfzyZ2UMWcpDpMSGEr1eqE4T793Sqyh go.mongodb.org/mongo-driver v1.17.2/go.mod h1:Hy04i7O2kC4RS06ZrhPRqj/u4DTYkFDAAccj+rVKqgQ= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.32.0 h1:euUpcYgM8WcP71gNpTqQCn6rC2t6ULUPiOzfWaXVVfc= -golang.org/x/crypto v0.32.0/go.mod h1:ZnnJkOaASj8g0AjIduWNlq2NRxL0PlBrbKVyZ6V/Ugc= +golang.org/x/crypto v0.35.0 h1:b15kiHdrGCHrP6LvwaQ3c03kgNhhiMgvlhxHQhmg2Xs= +golang.org/x/crypto v0.35.0/go.mod h1:dy7dXNW32cAb/6/PRuTNsix8T+vJAqvuIy5Bli/x0YQ= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ= -golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.11.0 h1:GGz8+XQP4FvTTrjZPzNKTMFtSXH80RAzG+5ghFPgK9w= +golang.org/x/sync v0.11.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -66,18 +48,9 @@ golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= -golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= -golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= +golang.org/x/text v0.22.0 h1:bofq7m3/HAFvbF51jz3Q9wLg3jkvSPuiZu/pD1XwgtM= +golang.org/x/text v0.22.0/go.mod h1:YRoo4H8PVmsu+E3Ou7cqLVH8oXWIHVoX0jqUWALQhfY= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gorm.io/driver/mysql v1.5.7 h1:MndhOPYOfEp2rHKgkZIhJ16eVUIRf2HmzgoPmh7FCWo= -gorm.io/driver/mysql v1.5.7/go.mod h1:sEtPWMiqiN1N1cMXoXmBbd8C6/l+TESwriotuRRpkDM= -gorm.io/driver/postgres v1.5.11 h1:ubBVAfbKEUld/twyKZ0IYn9rSQh448EdelLYk9Mv314= -gorm.io/driver/postgres v1.5.11/go.mod h1:DX3GReXH+3FPWGrrgffdvCk3DQ1dwDPdmbenSkweRGI= -gorm.io/gorm v1.25.7/go.mod h1:hbnx/Oo0ChWMn1BIhpy1oYozzpM15i4YPuHDmfYtwg8= -gorm.io/gorm v1.25.12 h1:I0u8i2hWQItBq1WfE0o2+WuL9+8L21K9e2HHSTE/0f8= -gorm.io/gorm v1.25.12/go.mod h1:xh7N7RHfYlNc5EmcI/El95gXusucDrQnHXe0+CgWcLQ= From 9871de48d61af881b4267cf28426e4277687e658 Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Tue, 15 Apr 2025 22:21:11 +0200 Subject: [PATCH 13/29] Update CHANGELOG.md (#3904) --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2cbb0e299..ddb0b2edd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -25,6 +25,12 @@ All LXC instances created using this repository come pre-installed with Midnight - Outline: Installation and update fixes [@tremor021](https://github.com/tremor021) ([#3895](https://github.com/community-scripts/ProxmoxVE/pull/3895)) - SABnzbd: Fix update error caused by externaly managed message [@tremor021](https://github.com/tremor021) ([#3892](https://github.com/community-scripts/ProxmoxVE/pull/3892)) +### 🧰 Maintenance + + - #### πŸ“‚ Github + + - shrink & minimalize report templates [@MickLesk](https://github.com/MickLesk) ([#3902](https://github.com/community-scripts/ProxmoxVE/pull/3902)) + ## 2025-04-14 ### πŸ†• New Scripts From 56c358cbdbf0e8aaeaf760847e2120ef063baaf8 Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Tue, 15 Apr 2025 22:21:28 +0200 Subject: [PATCH 14/29] Update versions.json (#3889) Co-authored-by: GitHub Actions[bot] --- frontend/public/json/versions.json | 240 ++++++++++++++--------------- 1 file changed, 120 insertions(+), 120 deletions(-) diff --git a/frontend/public/json/versions.json b/frontend/public/json/versions.json index 15f72e785..aa51e1f7c 100644 --- a/frontend/public/json/versions.json +++ b/frontend/public/json/versions.json @@ -1,14 +1,129 @@ [ + { + "name": "fhem/fhem-mirror", + "version": "6.2", + "date": "2025-04-15T10:34:54Z" + }, + { + "name": "n8n-io/n8n", + "version": "n8n@1.86.1", + "date": "2025-04-09T09:20:55Z" + }, + { + "name": "wazuh/wazuh", + "version": "coverity-w16-4.12.0", + "date": "2025-04-15T08:25:08Z" + }, + { + "name": "mattermost/mattermost", + "version": "v10.6.2", + "date": "2025-04-15T08:14:23Z" + }, + { + "name": "Jackett/Jackett", + "version": "v0.22.1778", + "date": "2025-04-15T06:26:21Z" + }, + { + "name": "slskd/slskd", + "version": "0.22.5", + "date": "2025-04-15T02:52:26Z" + }, + { + "name": "blakeblackshear/frigate", + "version": "v0.14.1", + "date": "2024-08-29T22:32:51Z" + }, + { + "name": "esphome/esphome", + "version": "2025.3.3", + "date": "2025-03-31T22:07:05Z" + }, + { + "name": "moghtech/komodo", + "version": "v1.17.1", + "date": "2025-04-14T22:35:13Z" + }, + { + "name": "influxdata/influxdb", + "version": "v3.0.0", + "date": "2025-04-14T22:16:28Z" + }, + { + "name": "Kareadita/Kavita", + "version": "v0.8.6", + "date": "2025-04-14T22:09:30Z" + }, + { + "name": "keycloak/keycloak", + "version": "26.2.0", + "date": "2025-04-11T12:48:27Z" + }, + { + "name": "paperless-ngx/paperless-ngx", + "version": "v2.15.2", + "date": "2025-04-14T20:48:52Z" + }, + { + "name": "semaphoreui/semaphore", + "version": "v2.13.13", + "date": "2025-04-11T10:15:13Z" + }, + { + "name": "netbox-community/netbox", + "version": "v4.2.7", + "date": "2025-04-10T20:08:13Z" + }, + { + "name": "duplicati/duplicati", + "version": "v2.1.0.115-2.1.0.115_canary_2025-04-14", + "date": "2025-04-14T18:03:36Z" + }, + { + "name": "OliveTin/OliveTin", + "version": "2025.4.14", + "date": "2025-04-14T16:53:53Z" + }, + { + "name": "msgbyte/tianji", + "version": "v1.20.0", + "date": "2025-04-14T16:19:23Z" + }, + { + "name": "home-assistant/operating-system", + "version": "15.2", + "date": "2025-04-14T15:37:12Z" + }, + { + "name": "Checkmk/checkmk", + "version": "v2.4.0b5-rc1", + "date": "2025-04-14T15:29:21Z" + }, + { + "name": "stackblitz-labs/bolt.diy", + "version": "v0.0.7-hf1", + "date": "2025-03-10T20:49:39Z" + }, + { + "name": "zabbix/zabbix", + "version": "7.2.6rc1", + "date": "2025-04-14T15:00:15Z" + }, + { + "name": "rabbitmq/rabbitmq-server", + "version": "v4.0.9", + "date": "2025-04-14T14:40:34Z" + }, + { + "name": "AdguardTeam/AdGuardHome", + "version": "v0.107.60", + "date": "2025-04-14T11:46:19Z" + }, { "name": "Graylog2/graylog2-server", "version": "6.2.0-rc.1", "date": "2025-04-14T11:26:18Z" }, - { - "name": "fhem/fhem-mirror", - "version": "6.2", - "date": "2025-04-14T10:36:18Z" - }, { "name": "bluenviron/mediamtx", "version": "v1.12.0", @@ -29,16 +144,6 @@ "version": "v10.2.0", "date": "2025-04-14T08:53:44Z" }, - { - "name": "zabbix/zabbix", - "version": "6.0.40rc1", - "date": "2025-04-14T08:45:46Z" - }, - { - "name": "duplicati/duplicati", - "version": "v2.1.0.114-2.1.0.114_canary_2025-04-14", - "date": "2025-04-14T07:54:21Z" - }, { "name": "evcc-io/evcc", "version": "0.203.1", @@ -49,11 +154,6 @@ "version": "v1.5.1", "date": "2025-01-01T16:15:52Z" }, - { - "name": "Jackett/Jackett", - "version": "v0.22.1775", - "date": "2025-04-14T05:59:53Z" - }, { "name": "firefly-iii/firefly-iii", "version": "v6.2.10", @@ -94,11 +194,6 @@ "version": "v3.10.0", "date": "2025-03-15T14:38:16Z" }, - { - "name": "keycloak/keycloak", - "version": "26.2.0", - "date": "2025-04-11T12:48:27Z" - }, { "name": "karakeep-app/karakeep", "version": "mcp/v0.23.4", @@ -134,11 +229,6 @@ "version": "v5.21.1.9799", "date": "2025-03-24T15:52:12Z" }, - { - "name": "slskd/slskd", - "version": "0.22.4", - "date": "2025-04-13T00:14:13Z" - }, { "name": "Tautulli/Tautulli", "version": "v2.15.2", @@ -149,11 +239,6 @@ "version": "v0.2.11", "date": "2025-04-12T21:13:08Z" }, - { - "name": "semaphoreui/semaphore", - "version": "v2.14.0-beta1", - "date": "2025-04-12T20:14:09Z" - }, { "name": "MediaBrowser/Emby.Releases", "version": "4.8.11.0", @@ -179,11 +264,6 @@ "version": "v1.16.0", "date": "2025-04-11T19:15:24Z" }, - { - "name": "rabbitmq/rabbitmq-server", - "version": "v4.0.8", - "date": "2025-04-03T05:11:15Z" - }, { "name": "tailscale/tailscale", "version": "v1.82.4", @@ -224,11 +304,6 @@ "version": "4.5.1", "date": "2025-04-11T09:57:47Z" }, - { - "name": "home-assistant/operating-system", - "version": "15.1", - "date": "2025-03-31T13:42:20Z" - }, { "name": "outline/outline", "version": "v0.83.0", @@ -244,11 +319,6 @@ "version": "2.2.8", "date": "2025-04-10T20:30:49Z" }, - { - "name": "netbox-community/netbox", - "version": "v4.2.7", - "date": "2025-04-10T20:08:13Z" - }, { "name": "gristlabs/grist-core", "version": "v1.5.1", @@ -279,21 +349,11 @@ "version": "v2.35.0", "date": "2025-04-10T13:45:22Z" }, - { - "name": "n8n-io/n8n", - "version": "n8n@1.86.1", - "date": "2025-04-09T09:20:55Z" - }, { "name": "mongodb/mongo", "version": "r8.0.5-rc2", "date": "2025-04-09T22:37:52Z" }, - { - "name": "paperless-ngx/paperless-ngx", - "version": "v2.15.1", - "date": "2025-04-09T22:26:39Z" - }, { "name": "jupyter/notebook", "version": "v7.4.0", @@ -324,16 +384,6 @@ "version": "debian/12.0.14", "date": "2025-04-09T10:09:00Z" }, - { - "name": "esphome/esphome", - "version": "2025.3.3", - "date": "2025-03-31T22:07:05Z" - }, - { - "name": "OliveTin/OliveTin", - "version": "2025.4.8", - "date": "2025-04-08T22:02:50Z" - }, { "name": "minio/minio", "version": "RELEASE.2025-04-08T15-41-24Z", @@ -344,21 +394,11 @@ "version": "version/2025.2.4", "date": "2025-04-08T18:39:57Z" }, - { - "name": "influxdata/influxdb", - "version": "v1.12.0rc1", - "date": "2025-04-08T17:35:21Z" - }, { "name": "jenkinsci/jenkins", "version": "jenkins-2.505", "date": "2025-04-08T15:46:42Z" }, - { - "name": "AdguardTeam/AdGuardHome", - "version": "v0.107.59", - "date": "2025-03-21T11:11:39Z" - }, { "name": "element-hq/synapse", "version": "v1.128.0", @@ -394,16 +434,6 @@ "version": "v1.23.7", "date": "2025-04-07T19:27:52Z" }, - { - "name": "Checkmk/checkmk", - "version": "v2.4.0b4", - "date": "2025-04-07T19:14:53Z" - }, - { - "name": "wazuh/wazuh", - "version": "coverity-w15-4.12.0", - "date": "2025-04-07T17:50:14Z" - }, { "name": "thomiceli/opengist", "version": "v1.10.0", @@ -424,11 +454,6 @@ "version": "v24.8", "date": "2025-03-18T07:33:51Z" }, - { - "name": "mattermost/mattermost", - "version": "server/public/v0.1.11", - "date": "2025-03-28T14:04:31Z" - }, { "name": "Dolibarr/dolibarr", "version": "21.0.1", @@ -449,16 +474,6 @@ "version": "1.5.34", "date": "2025-03-27T16:17:38Z" }, - { - "name": "stackblitz-labs/bolt.diy", - "version": "v0.0.7-hf1", - "date": "2025-03-10T20:49:39Z" - }, - { - "name": "msgbyte/tianji", - "version": "v1.19.7", - "date": "2025-04-06T14:22:44Z" - }, { "name": "TechnitiumSoftware/DnsServer", "version": "v13.5.0", @@ -729,11 +744,6 @@ "version": "v2.5.307", "date": "2025-03-24T01:33:31Z" }, - { - "name": "moghtech/komodo", - "version": "v1.17.0", - "date": "2025-03-24T00:46:32Z" - }, { "name": "nicolargo/glances", "version": "v4.3.1", @@ -789,11 +799,6 @@ "version": "v2.20.0", "date": "2025-03-17T22:44:56Z" }, - { - "name": "Kareadita/Kavita", - "version": "v0.8.5.11", - "date": "2025-03-17T19:25:25Z" - }, { "name": "Sonarr/Sonarr", "version": "v4.0.14.2939", @@ -1004,11 +1009,6 @@ "version": "1.33.2", "date": "2025-02-09T17:54:59Z" }, - { - "name": "blakeblackshear/frigate", - "version": "v0.15.0", - "date": "2025-02-08T18:45:30Z" - }, { "name": "apache/tika", "version": "2.9.3", From 6cdda0924fd355a68a776db02e31530167a31616 Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Tue, 15 Apr 2025 22:22:11 +0200 Subject: [PATCH 15/29] Update CHANGELOG.md (#3905) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index ddb0b2edd..8d0b6c03f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -27,6 +27,10 @@ All LXC instances created using this repository come pre-installed with Midnight ### 🧰 Maintenance + - #### πŸ“‘ API + + - Bump golang.org/x/crypto from 0.32.0 to 0.35.0 in /api [@dependabot[bot]](https://github.com/dependabot[bot]) ([#3887](https://github.com/community-scripts/ProxmoxVE/pull/3887)) + - #### πŸ“‚ Github - shrink & minimalize report templates [@MickLesk](https://github.com/MickLesk) ([#3902](https://github.com/community-scripts/ProxmoxVE/pull/3902)) From 85a5bf2a55baef3bc11657bd07de1d08a819d6e1 Mon Sep 17 00:00:00 2001 From: Jordan Patton Date: Thu, 17 Apr 2025 02:49:55 -0400 Subject: [PATCH 16/29] updated word order in several scripts (#3921) --- ct/create_lxc.sh | 2 +- tools/addon/all-templates.sh | 2 +- turnkey/turnkey.sh | 2 +- vm/archlinux-vm.sh | 2 +- vm/debian-vm.sh | 2 +- vm/docker-vm.sh | 2 +- vm/haos-vm.sh | 2 +- vm/mikrotik-routeros.sh | 2 +- vm/nextcloud-vm.sh | 2 +- vm/openwrt.sh | 2 +- vm/opnsense-vm.sh | 2 +- vm/owncloud-vm.sh | 2 +- vm/pimox-haos-vm.sh | 2 +- vm/ubuntu2204-vm.sh | 2 +- vm/ubuntu2404-vm.sh | 2 +- vm/ubuntu2410-vm.sh | 2 +- 16 files changed, 16 insertions(+), 16 deletions(-) diff --git a/ct/create_lxc.sh b/ct/create_lxc.sh index c969429ef..7d0779919 100644 --- a/ct/create_lxc.sh +++ b/ct/create_lxc.sh @@ -147,7 +147,7 @@ function select_storage() { local STORAGE while [ -z "${STORAGE:+x}" ]; do STORAGE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "Storage Pools" --radiolist \ - "Which storage pool you would like to use for the ${CONTENT_LABEL,,}?\nTo make a selection, use the Spacebar.\n" \ + "Which storage pool would you like to use for the ${CONTENT_LABEL,,}?\nTo make a selection, use the Spacebar.\n" \ 16 $(($MSG_MAX_LENGTH + 23)) 6 \ "${MENU[@]}" 3>&1 1>&2 2>&3) || { msg_error "Menu aborted." diff --git a/tools/addon/all-templates.sh b/tools/addon/all-templates.sh index aba9741ee..fd7cc288c 100644 --- a/tools/addon/all-templates.sh +++ b/tools/addon/all-templates.sh @@ -133,7 +133,7 @@ function select_storage() { local STORAGE while [ -z "${STORAGE:+x}" ]; do STORAGE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "Storage Pools" --radiolist \ - "Which storage pool you would like to use for the ${CONTENT_LABEL,,}?\n\n" \ + "Which storage pool would you like to use for the ${CONTENT_LABEL,,}?\n\n" \ 16 $(($MSG_MAX_LENGTH + 23)) 6 \ "${MENU[@]}" 3>&1 1>&2 2>&3) || die "Menu aborted." done diff --git a/turnkey/turnkey.sh b/turnkey/turnkey.sh index 594a07f30..71cfca81d 100644 --- a/turnkey/turnkey.sh +++ b/turnkey/turnkey.sh @@ -154,7 +154,7 @@ function select_storage() { local STORAGE while [ -z "${STORAGE:+x}" ]; do STORAGE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "Storage Pools" --radiolist \ - "Which storage pool you would like to use for the ${CONTENT_LABEL,,}?\n\n" \ + "Which storage pool would you like to use for the ${CONTENT_LABEL,,}?\n\n" \ 16 $(($MSG_MAX_LENGTH + 23)) 6 \ "${MENU[@]}" 3>&1 1>&2 2>&3) || die "Menu aborted." done diff --git a/vm/archlinux-vm.sh b/vm/archlinux-vm.sh index b56921021..e749c49f3 100644 --- a/vm/archlinux-vm.sh +++ b/vm/archlinux-vm.sh @@ -413,7 +413,7 @@ elif [ $((${#STORAGE_MENU[@]} / 3)) -eq 1 ]; then else while [ -z "${STORAGE:+x}" ]; do STORAGE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "Storage Pools" --radiolist \ - "Which storage pool you would like to use for ${HN}?\nTo make a selection, use the Spacebar.\n" \ + "Which storage pool would you like to use for ${HN}?\nTo make a selection, use the Spacebar.\n" \ 16 $(($MSG_MAX_LENGTH + 23)) 6 \ "${STORAGE_MENU[@]}" 3>&1 1>&2 2>&3) done diff --git a/vm/debian-vm.sh b/vm/debian-vm.sh index 5fabee6fe..6242346f1 100644 --- a/vm/debian-vm.sh +++ b/vm/debian-vm.sh @@ -414,7 +414,7 @@ elif [ $((${#STORAGE_MENU[@]} / 3)) -eq 1 ]; then else while [ -z "${STORAGE:+x}" ]; do STORAGE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "Storage Pools" --radiolist \ - "Which storage pool you would like to use for ${HN}?\nTo make a selection, use the Spacebar.\n" \ + "Which storage pool would you like to use for ${HN}?\nTo make a selection, use the Spacebar.\n" \ 16 $(($MSG_MAX_LENGTH + 23)) 6 \ "${STORAGE_MENU[@]}" 3>&1 1>&2 2>&3) done diff --git a/vm/docker-vm.sh b/vm/docker-vm.sh index ffc3c2937..bbac79ebd 100644 --- a/vm/docker-vm.sh +++ b/vm/docker-vm.sh @@ -377,7 +377,7 @@ elif [ $((${#STORAGE_MENU[@]} / 3)) -eq 1 ]; then else while [ -z "${STORAGE:+x}" ]; do STORAGE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "Storage Pools" --radiolist \ - "Which storage pool you would like to use for ${HN}?\nTo make a selection, use the Spacebar.\n" \ + "Which storage pool would you like to use for ${HN}?\nTo make a selection, use the Spacebar.\n" \ 16 $(($MSG_MAX_LENGTH + 23)) 6 \ "${STORAGE_MENU[@]}" 3>&1 1>&2 2>&3) done diff --git a/vm/haos-vm.sh b/vm/haos-vm.sh index 6832cdcc9..5055591a4 100644 --- a/vm/haos-vm.sh +++ b/vm/haos-vm.sh @@ -417,7 +417,7 @@ else if [ -n "$SPINNER_PID" ] && ps -p $SPINNER_PID >/dev/null; then kill $SPINNER_PID >/dev/null; fi printf "\e[?25h" STORAGE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "Storage Pools" --radiolist \ - "Which storage pool you would like to use for ${HN}?\nTo make a selection, use the Spacebar.\n" \ + "Which storage pool would you like to use for ${HN}?\nTo make a selection, use the Spacebar.\n" \ 16 $(($MSG_MAX_LENGTH + 23)) 6 \ "${STORAGE_MENU[@]}" 3>&1 1>&2 2>&3) done diff --git a/vm/mikrotik-routeros.sh b/vm/mikrotik-routeros.sh index fa05bd0cd..730a74c28 100644 --- a/vm/mikrotik-routeros.sh +++ b/vm/mikrotik-routeros.sh @@ -241,7 +241,7 @@ elif [ $((${#STORAGE_MENU[@]} / 3)) -eq 1 ]; then else while [ -z "${STORAGE:+x}" ]; do STORAGE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "Storage Pools" --radiolist \ - "Which storage pool you would like to use for the Mikrotik RouterOS CHR VM?\n\n" \ + "Which storage pool would you like to use for the Mikrotik RouterOS CHR VM?\n\n" \ 16 $(($MSG_MAX_LENGTH + 23)) 6 \ "${STORAGE_MENU[@]}" 3>&1 1>&2 2>&3) done diff --git a/vm/nextcloud-vm.sh b/vm/nextcloud-vm.sh index 1a93ac36d..8bbbb5c5d 100644 --- a/vm/nextcloud-vm.sh +++ b/vm/nextcloud-vm.sh @@ -378,7 +378,7 @@ elif [ $((${#STORAGE_MENU[@]} / 3)) -eq 1 ]; then else while [ -z "${STORAGE:+x}" ]; do STORAGE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "Storage Pools" --radiolist \ - "Which storage pool you would like to use for ${HN}?\nTo make a selection, use the Spacebar.\n" \ + "Which storage pool would you like to use for ${HN}?\nTo make a selection, use the Spacebar.\n" \ 16 $(($MSG_MAX_LENGTH + 23)) 6 \ "${STORAGE_MENU[@]}" 3>&1 1>&2 2>&3) done diff --git a/vm/openwrt.sh b/vm/openwrt.sh index 0fac01d64..26a747647 100644 --- a/vm/openwrt.sh +++ b/vm/openwrt.sh @@ -438,7 +438,7 @@ elif [ $((${#STORAGE_MENU[@]} / 3)) -eq 1 ]; then else while [ -z "${STORAGE:+x}" ]; do STORAGE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "Storage Pools" --radiolist \ - "Which storage pool you would like to use for the OpenWrt VM?\n\n" \ + "Which storage pool would you like to use for the OpenWrt VM?\n\n" \ 16 $(($MSG_MAX_LENGTH + 23)) 6 \ "${STORAGE_MENU[@]}" 3>&1 1>&2 2>&3) done diff --git a/vm/opnsense-vm.sh b/vm/opnsense-vm.sh index 44f7bae69..1f811da0e 100644 --- a/vm/opnsense-vm.sh +++ b/vm/opnsense-vm.sh @@ -516,7 +516,7 @@ elif [ $((${#STORAGE_MENU[@]} / 3)) -eq 1 ]; then else while [ -z "${STORAGE:+x}" ]; do STORAGE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "Storage Pools" --radiolist \ - "Which storage pool you would like to use for ${HN}?\nTo make a selection, use the Spacebar.\n" \ + "Which storage pool would you like to use for ${HN}?\nTo make a selection, use the Spacebar.\n" \ 16 $(($MSG_MAX_LENGTH + 23)) 6 \ "${STORAGE_MENU[@]}" 3>&1 1>&2 2>&3) done diff --git a/vm/owncloud-vm.sh b/vm/owncloud-vm.sh index 933507ece..29b0e34eb 100644 --- a/vm/owncloud-vm.sh +++ b/vm/owncloud-vm.sh @@ -378,7 +378,7 @@ elif [ $((${#STORAGE_MENU[@]} / 3)) -eq 1 ]; then else while [ -z "${STORAGE:+x}" ]; do STORAGE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "Storage Pools" --radiolist \ - "Which storage pool you would like to use for ${HN}?\nTo make a selection, use the Spacebar.\n" \ + "Which storage pool would you like to use for ${HN}?\nTo make a selection, use the Spacebar.\n" \ 16 $(($MSG_MAX_LENGTH + 23)) 6 \ "${STORAGE_MENU[@]}" 3>&1 1>&2 2>&3) done diff --git a/vm/pimox-haos-vm.sh b/vm/pimox-haos-vm.sh index b4d3911d9..ab9a9e43b 100644 --- a/vm/pimox-haos-vm.sh +++ b/vm/pimox-haos-vm.sh @@ -285,7 +285,7 @@ elif [ $((${#STORAGE_MENU[@]} / 3)) -eq 1 ]; then else while [ -z "${STORAGE:+x}" ]; do STORAGE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "Storage Pools" --radiolist \ - "Which storage pool you would like to use for the HAOS VM?\n\n" \ + "Which storage pool would you like to use for the HAOS VM?\n\n" \ 16 $(($MSG_MAX_LENGTH + 23)) 6 \ "${STORAGE_MENU[@]}" 3>&1 1>&2 2>&3) done diff --git a/vm/ubuntu2204-vm.sh b/vm/ubuntu2204-vm.sh index a941bc30e..a71754ebf 100644 --- a/vm/ubuntu2204-vm.sh +++ b/vm/ubuntu2204-vm.sh @@ -412,7 +412,7 @@ elif [ $((${#STORAGE_MENU[@]} / 3)) -eq 1 ]; then else while [ -z "${STORAGE:+x}" ]; do STORAGE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "Storage Pools" --radiolist \ - "Which storage pool you would like to use for ${HN}?\nTo make a selection, use the Spacebar.\n" \ + "Which storage pool would you like to use for ${HN}?\nTo make a selection, use the Spacebar.\n" \ 16 $(($MSG_MAX_LENGTH + 23)) 6 \ "${STORAGE_MENU[@]}" 3>&1 1>&2 2>&3) done diff --git a/vm/ubuntu2404-vm.sh b/vm/ubuntu2404-vm.sh index 62709aab3..ee42c6b92 100644 --- a/vm/ubuntu2404-vm.sh +++ b/vm/ubuntu2404-vm.sh @@ -412,7 +412,7 @@ elif [ $((${#STORAGE_MENU[@]} / 3)) -eq 1 ]; then else while [ -z "${STORAGE:+x}" ]; do STORAGE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "Storage Pools" --radiolist \ - "Which storage pool you would like to use for ${HN}?\nTo make a selection, use the Spacebar.\n" \ + "Which storage pool would you like to use for ${HN}?\nTo make a selection, use the Spacebar.\n" \ 16 $(($MSG_MAX_LENGTH + 23)) 6 \ "${STORAGE_MENU[@]}" 3>&1 1>&2 2>&3) done diff --git a/vm/ubuntu2410-vm.sh b/vm/ubuntu2410-vm.sh index d705393ef..e02e92af7 100644 --- a/vm/ubuntu2410-vm.sh +++ b/vm/ubuntu2410-vm.sh @@ -412,7 +412,7 @@ elif [ $((${#STORAGE_MENU[@]} / 3)) -eq 1 ]; then else while [ -z "${STORAGE:+x}" ]; do STORAGE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "Storage Pools" --radiolist \ - "Which storage pool you would like to use for ${HN}?\nTo make a selection, use the Spacebar.\n" \ + "Which storage pool would you like to use for ${HN}?\nTo make a selection, use the Spacebar.\n" \ 16 $(($MSG_MAX_LENGTH + 23)) 6 \ "${STORAGE_MENU[@]}" 3>&1 1>&2 2>&3) done From 3c909cabb656b1a271c574057a142a5d39fd5db1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Slavi=C5=A1a=20Are=C5=BEina?= <58952836+tremor021@users.noreply.github.com> Date: Thu, 17 Apr 2025 15:09:07 +0200 Subject: [PATCH 17/29] Fix install and update process (final time) (#3922) --- ct/gomft.sh | 7 ++----- install/gomft-install.sh | 20 +++++++------------- 2 files changed, 9 insertions(+), 18 deletions(-) diff --git a/ct/gomft.sh b/ct/gomft.sh index 10c1cce2d..b16388217 100644 --- a/ct/gomft.sh +++ b/ct/gomft.sh @@ -51,11 +51,8 @@ function update_script() { tar -xzf "$temp_file" cp -rf "GoMFT-${RELEASE}"/* /opt/gomft/ cd /opt/gomft - rm -rf /opt/gomft/node_modules - $STD npm ci - $STD node build.js - $STD go mod download - $STD go get -u github.com/a-h/templ + $STD npm install + $STD npm run build $STD "$HOME"/go/bin/templ generate export CGO_ENABLED=1 export GOOS=linux diff --git a/install/gomft-install.sh b/install/gomft-install.sh index d0b72b59e..878365376 100644 --- a/install/gomft-install.sh +++ b/install/gomft-install.sh @@ -47,19 +47,13 @@ msg_ok "Installed Node.js" msg_info "Setup ${APPLICATION} (Patience)" temp_file=$(mktemp) RELEASE=$(curl -fsSL https://api.github.com/repos/StarFleetCPTN/GoMFT/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') -curl -fsSL "https://github.com/StarFleetCPTN/GoMFT/archive/refs/tags/v${RELEASE}.tar.gz" -o $temp_file -tar -xzf $temp_file -mv GoMFT-${RELEASE}/ /opt/gomft +curl -fsSL "https://github.com/StarFleetCPTN/GoMFT/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file" +tar -xzf "$temp_file" +mv GoMFT-"${RELEASE}"/ /opt/gomft cd /opt/gomft -$STD npm ci -$STD node build.js -$STD go mod download $STD go install github.com/a-h/templ/cmd/templ@latest -$STD go get -u github.com/a-h/templ -$STD $HOME/go/bin/templ generate -export CGO_ENABLED=1 -export GOOS=linux -$STD go build -o gomft +$STD "$HOME"/go/bin/templ generate +$STD go build -o gomft main.go chmod +x /opt/gomft/gomft JWT_SECRET_KEY=$(openssl rand -base64 24 | tr -d '/+=') @@ -83,7 +77,7 @@ EMAIL_USERNAME=smtp_username EMAIL_PASSWORD=smtp_password EOF -echo "${RELEASE}" >/opt/${APPLICATION}_version.txt +echo "${RELEASE}" >/opt/"${APPLICATION}"_version.txt msg_ok "Setup ${APPLICATION}" msg_info "Creating Service" @@ -109,7 +103,7 @@ motd_ssh customize msg_info "Cleaning up" -rm -f $temp_file +rm -f "$temp_file" $STD apt-get -y autoremove $STD apt-get -y autoclean msg_ok "Cleaned" From 5dcb75a1210edf629f7e8c31d07dcbf7093fff96 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Slavi=C5=A1a=20Are=C5=BEina?= <58952836+tremor021@users.noreply.github.com> Date: Thu, 17 Apr 2025 15:09:18 +0200 Subject: [PATCH 18/29] Fix tar command (#3925) --- ct/peanut.sh | 2 +- install/peanut-install.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ct/peanut.sh b/ct/peanut.sh index b38aaba6d..8439dc246 100644 --- a/ct/peanut.sh +++ b/ct/peanut.sh @@ -32,7 +32,7 @@ function update_script() { msg_info "Updating $APP to ${RELEASE}" systemctl stop peanut curl -fsSL "https://api.github.com/repos/Brandawg93/PeaNUT/tarball/${RELEASE}" -o "peanut.tar.gz" - tar -xzf peanut.tar.gz -C /opt/peanut --strip-components + tar -xzf peanut.tar.gz -C /opt/peanut --strip-components=1 rm peanut.tar.gz cd /opt/peanut $STD pnpm i diff --git a/install/peanut-install.sh b/install/peanut-install.sh index d319afab8..950ba7b05 100644 --- a/install/peanut-install.sh +++ b/install/peanut-install.sh @@ -34,7 +34,7 @@ msg_info "Installing Peanut" RELEASE=$(curl -fsSL https://api.github.com/repos/Brandawg93/PeaNUT/releases/latest | grep '"tag_name":' | cut -d'"' -f4) curl -fsSL "https://api.github.com/repos/Brandawg93/PeaNUT/tarball/${RELEASE}" -o "peanut.tar.gz" mkdir -p /opt/peanut -tar -xzf peanut.tar.gz -C /opt/peanut --strip-components 1 +tar -xzf peanut.tar.gz -C /opt/peanut --strip-components=1 rm peanut.tar.gz cd /opt/peanut $STD npm install -g pnpm From 8cf9658efbf94271e43db2c4adc6cc756ee6f0f7 Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Thu, 17 Apr 2025 15:12:46 +0200 Subject: [PATCH 19/29] Update CHANGELOG.md (#3923) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8d0b6c03f..17acce335 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,17 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit All LXC instances created using this repository come pre-installed with Midnight Commander, which is a command-line tool (`mc`) that offers a user-friendly file and directory management interface for the terminal environment. +## 2025-04-17 + +### πŸš€ Updated Scripts + + - fix minor grammatical error in several scripts [@jordanpatton](https://github.com/jordanpatton) ([#3921](https://github.com/community-scripts/ProxmoxVE/pull/3921)) + + - #### 🐞 Bug Fixes + + - PeaNUT: Fix tar command [@tremor021](https://github.com/tremor021) ([#3925](https://github.com/community-scripts/ProxmoxVE/pull/3925)) + - GoMFT: Fix install and update process (final time) [@tremor021](https://github.com/tremor021) ([#3922](https://github.com/community-scripts/ProxmoxVE/pull/3922)) + ## 2025-04-15 ### πŸš€ Updated Scripts From 5cfeb8a0bc21ba8dfea65fd8764c07a6dc636fab Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Thu, 17 Apr 2025 20:21:53 +0200 Subject: [PATCH 20/29] Update versions.json (#3908) --- frontend/public/json/versions.json | 330 ++++++++++++++--------------- 1 file changed, 165 insertions(+), 165 deletions(-) diff --git a/frontend/public/json/versions.json b/frontend/public/json/versions.json index aa51e1f7c..14576e916 100644 --- a/frontend/public/json/versions.json +++ b/frontend/public/json/versions.json @@ -1,28 +1,183 @@ [ + { + "name": "runtipi/runtipi", + "version": "v3.10.0-beta.9", + "date": "2025-04-17T11:46:08Z" + }, + { + "name": "prometheus-pve/prometheus-pve-exporter", + "version": "v3.5.3", + "date": "2025-04-17T10:40:47Z" + }, { "name": "fhem/fhem-mirror", "version": "6.2", - "date": "2025-04-15T10:34:54Z" + "date": "2025-04-17T10:34:25Z" + }, + { + "name": "karakeep-app/karakeep", + "version": "mcp/v0.23.6", + "date": "2025-04-17T10:33:10Z" + }, + { + "name": "traefik/traefik", + "version": "v2.11.23", + "date": "2025-04-17T10:14:21Z" + }, + { + "name": "IceWhaleTech/CasaOS", + "version": "v0.4.15", + "date": "2024-12-19T03:19:49Z" + }, + { + "name": "morpheus65535/bazarr", + "version": "v1.5.1", + "date": "2025-01-01T16:15:52Z" + }, + { + "name": "Jackett/Jackett", + "version": "v0.22.1788", + "date": "2025-04-17T05:53:12Z" + }, + { + "name": "ollama/ollama", + "version": "v0.6.6-rc1", + "date": "2025-04-17T01:56:29Z" + }, + { + "name": "esphome/esphome", + "version": "2025.4.0", + "date": "2025-04-17T00:55:34Z" + }, + { + "name": "dgtlmoon/changedetection.io", + "version": "0.49.14", + "date": "2025-04-16T21:32:22Z" + }, + { + "name": "influxdata/influxdb", + "version": "v3.0.0", + "date": "2025-04-16T21:21:04Z" + }, + { + "name": "moghtech/komodo", + "version": "v1.17.1", + "date": "2025-04-14T22:35:13Z" + }, + { + "name": "docmost/docmost", + "version": "v0.10.2", + "date": "2025-04-16T20:43:40Z" + }, + { + "name": "keycloak/keycloak", + "version": "26.2.0", + "date": "2025-04-11T12:48:27Z" + }, + { + "name": "ellite/Wallos", + "version": "v2.50.1", + "date": "2025-04-16T19:31:56Z" + }, + { + "name": "forgejo/forgejo", + "version": "v11.0.0", + "date": "2025-04-16T19:25:53Z" + }, + { + "name": "openobserve/openobserve", + "version": "v0.14.6-rc4", + "date": "2025-04-16T18:28:51Z" + }, + { + "name": "element-hq/synapse", + "version": "v1.129.0rc1", + "date": "2025-04-16T15:18:13Z" + }, + { + "name": "nzbgetcom/nzbget", + "version": "v24.8", + "date": "2025-03-18T07:33:51Z" + }, + { + "name": "pocket-id/pocket-id", + "version": "v0.47.0", + "date": "2025-04-16T14:32:31Z" }, { "name": "n8n-io/n8n", "version": "n8n@1.86.1", "date": "2025-04-09T09:20:55Z" }, + { + "name": "jenkinsci/jenkins", + "version": "jenkins-2.506", + "date": "2025-04-15T15:40:50Z" + }, { "name": "wazuh/wazuh", "version": "coverity-w16-4.12.0", "date": "2025-04-15T08:25:08Z" }, + { + "name": "pocketbase/pocketbase", + "version": "v0.27.0", + "date": "2025-04-16T04:54:37Z" + }, + { + "name": "icereed/paperless-gpt", + "version": "v0.15.0", + "date": "2025-04-16T03:58:02Z" + }, + { + "name": "HabitRPG/habitica", + "version": "v5.35.3", + "date": "2025-04-15T19:32:17Z" + }, + { + "name": "Checkmk/checkmk", + "version": "v2.4.0b5", + "date": "2025-04-15T17:59:06Z" + }, + { + "name": "MediaBrowser/Emby.Releases", + "version": "4.8.11.0", + "date": "2025-03-10T06:39:11Z" + }, + { + "name": "rabbitmq/rabbitmq-server", + "version": "v4.1.0", + "date": "2025-04-15T16:18:29Z" + }, + { + "name": "Brandawg93/PeaNUT", + "version": "v5.7.2", + "date": "2025-04-15T15:44:49Z" + }, + { + "name": "WordPress/WordPress", + "version": "6.8", + "date": "2025-04-15T15:41:16Z" + }, + { + "name": "Stirling-Tools/Stirling-PDF", + "version": "v0.45.6", + "date": "2025-04-15T14:16:52Z" + }, + { + "name": "prometheus/prometheus", + "version": "v0.303.0", + "date": "2025-04-15T13:30:05Z" + }, { "name": "mattermost/mattermost", "version": "v10.6.2", "date": "2025-04-15T08:14:23Z" }, { - "name": "Jackett/Jackett", - "version": "v0.22.1778", - "date": "2025-04-15T06:26:21Z" + "name": "zabbix/zabbix", + "version": "7.0.12rc1", + "date": "2025-04-15T08:00:11Z" }, { "name": "slskd/slskd", @@ -34,31 +189,11 @@ "version": "v0.14.1", "date": "2024-08-29T22:32:51Z" }, - { - "name": "esphome/esphome", - "version": "2025.3.3", - "date": "2025-03-31T22:07:05Z" - }, - { - "name": "moghtech/komodo", - "version": "v1.17.1", - "date": "2025-04-14T22:35:13Z" - }, - { - "name": "influxdata/influxdb", - "version": "v3.0.0", - "date": "2025-04-14T22:16:28Z" - }, { "name": "Kareadita/Kavita", "version": "v0.8.6", "date": "2025-04-14T22:09:30Z" }, - { - "name": "keycloak/keycloak", - "version": "26.2.0", - "date": "2025-04-11T12:48:27Z" - }, { "name": "paperless-ngx/paperless-ngx", "version": "v2.15.2", @@ -94,26 +229,11 @@ "version": "15.2", "date": "2025-04-14T15:37:12Z" }, - { - "name": "Checkmk/checkmk", - "version": "v2.4.0b5-rc1", - "date": "2025-04-14T15:29:21Z" - }, { "name": "stackblitz-labs/bolt.diy", "version": "v0.0.7-hf1", "date": "2025-03-10T20:49:39Z" }, - { - "name": "zabbix/zabbix", - "version": "7.2.6rc1", - "date": "2025-04-14T15:00:15Z" - }, - { - "name": "rabbitmq/rabbitmq-server", - "version": "v4.0.9", - "date": "2025-04-14T14:40:34Z" - }, { "name": "AdguardTeam/AdGuardHome", "version": "v0.107.60", @@ -129,11 +249,6 @@ "version": "v1.12.0", "date": "2025-04-14T10:36:04Z" }, - { - "name": "Stirling-Tools/Stirling-PDF", - "version": "v0.45.5", - "date": "2025-04-14T09:57:39Z" - }, { "name": "open-webui/open-webui", "version": "v0.6.5", @@ -149,11 +264,6 @@ "version": "0.203.1", "date": "2025-04-14T07:23:02Z" }, - { - "name": "morpheus65535/bazarr", - "version": "v1.5.1", - "date": "2025-01-01T16:15:52Z" - }, { "name": "firefly-iii/firefly-iii", "version": "v6.2.10", @@ -164,11 +274,6 @@ "version": "v0.7.12", "date": "2025-04-14T00:16:15Z" }, - { - "name": "ellite/Wallos", - "version": "v2.49.1", - "date": "2025-04-13T22:36:24Z" - }, { "name": "rogerfar/rdt-client", "version": "v2.0.108", @@ -184,21 +289,6 @@ "version": "v4.47.1", "date": "2025-01-05T21:14:23Z" }, - { - "name": "pocket-id/pocket-id", - "version": "v0.46.0", - "date": "2025-04-13T18:31:13Z" - }, - { - "name": "runtipi/runtipi", - "version": "v3.10.0", - "date": "2025-03-15T14:38:16Z" - }, - { - "name": "karakeep-app/karakeep", - "version": "mcp/v0.23.4", - "date": "2025-04-13T14:09:19Z" - }, { "name": "syncthing/syncthing", "version": "v2.0.0-beta.9", @@ -239,11 +329,6 @@ "version": "v0.2.11", "date": "2025-04-12T21:13:08Z" }, - { - "name": "MediaBrowser/Emby.Releases", - "version": "4.8.11.0", - "date": "2025-03-10T06:39:11Z" - }, { "name": "home-assistant/core", "version": "2025.4.2", @@ -289,16 +374,6 @@ "version": "release-1.23.0rc2", "date": "2025-04-11T13:24:25Z" }, - { - "name": "docmost/docmost", - "version": "v0.10.1", - "date": "2025-04-11T12:42:08Z" - }, - { - "name": "dgtlmoon/changedetection.io", - "version": "0.49.13", - "date": "2025-04-11T11:48:06Z" - }, { "name": "sabnzbd/sabnzbd", "version": "4.5.1", @@ -309,11 +384,6 @@ "version": "v0.83.0", "date": "2025-04-11T03:53:10Z" }, - { - "name": "openobserve/openobserve", - "version": "v0.14.6-rc3", - "date": "2025-04-11T03:08:28Z" - }, { "name": "Luligu/matterbridge", "version": "2.2.8", @@ -359,21 +429,11 @@ "version": "v7.4.0", "date": "2025-04-09T17:36:14Z" }, - { - "name": "Brandawg93/PeaNUT", - "version": "v5.7.1", - "date": "2025-04-09T15:06:49Z" - }, { "name": "glpi-project/glpi", "version": "10.0.18", "date": "2025-02-12T11:07:02Z" }, - { - "name": "HabitRPG/habitica", - "version": "v5.35.2", - "date": "2025-04-09T13:46:58Z" - }, { "name": "zitadel/zitadel", "version": "v2.69.10", @@ -394,26 +454,11 @@ "version": "version/2025.2.4", "date": "2025-04-08T18:39:57Z" }, - { - "name": "jenkinsci/jenkins", - "version": "jenkins-2.505", - "date": "2025-04-08T15:46:42Z" - }, - { - "name": "element-hq/synapse", - "version": "v1.128.0", - "date": "2025-04-08T14:27:55Z" - }, { "name": "linkwarden/linkwarden", "version": "v2.10.0", "date": "2025-04-08T12:33:57Z" }, - { - "name": "prometheus/prometheus", - "version": "v0.303.0-rc.1", - "date": "2025-04-07T04:39:38Z" - }, { "name": "pelican-dev/panel", "version": "v1.0.0-beta19", @@ -449,11 +494,6 @@ "version": "8.0-rc1-int2", "date": "2025-04-02T19:05:08Z" }, - { - "name": "nzbgetcom/nzbget", - "version": "v24.8", - "date": "2025-03-18T07:33:51Z" - }, { "name": "Dolibarr/dolibarr", "version": "21.0.1", @@ -489,11 +529,6 @@ "version": "0.17.10", "date": "2025-04-06T05:31:49Z" }, - { - "name": "ollama/ollama", - "version": "v0.6.5", - "date": "2025-04-06T00:15:39Z" - }, { "name": "jellyfin/jellyfin", "version": "v10.10.7", @@ -539,11 +574,6 @@ "version": "5.7.0", "date": "2025-04-04T18:10:16Z" }, - { - "name": "icereed/paperless-gpt", - "version": "v0.14.4", - "date": "2025-04-04T14:18:53Z" - }, { "name": "apache/tomcat", "version": "9.0.104", @@ -599,16 +629,16 @@ "version": "v2.2.0", "date": "2025-03-31T21:31:48Z" }, - { - "name": "traefik/traefik", - "version": "v3.3.5", - "date": "2025-03-31T08:55:12Z" - }, { "name": "documenso/documenso", "version": "v1.10.0-rc.4", "date": "2025-03-31T09:02:22Z" }, + { + "name": "mysql/mysql-server", + "version": "mysql-cluster-9.3.0", + "date": "2025-03-31T07:42:45Z" + }, { "name": "louislam/dockge", "version": "1.5.0", @@ -629,11 +659,6 @@ "version": "4.3.4", "date": "2025-03-30T13:32:38Z" }, - { - "name": "pocketbase/pocketbase", - "version": "v0.26.6", - "date": "2025-03-30T08:02:19Z" - }, { "name": "aceberg/WatchYourLAN", "version": "2.1.2-alpine", @@ -689,11 +714,6 @@ "version": "2025.2", "date": "2025-03-27T19:21:13Z" }, - { - "name": "forgejo/forgejo", - "version": "v12.0.0-dev", - "date": "2025-03-26T09:58:55Z" - }, { "name": "sct/overseerr", "version": "v1.34.0", @@ -885,7 +905,7 @@ "date": "2025-03-05T21:41:29Z" }, { - "name": "snipe/snipe-it", + "name": "grokability/snipe-it", "version": "v8.0.4", "date": "2025-03-05T17:12:03Z" }, @@ -949,11 +969,6 @@ "version": "v1.1.05", "date": "2025-02-24T11:53:12Z" }, - { - "name": "prometheus-pve/prometheus-pve-exporter", - "version": "v3.5.2", - "date": "2025-02-18T16:43:41Z" - }, { "name": "typesense/typesense", "version": "v28.0", @@ -994,11 +1009,6 @@ "version": "mariadb-11.7.2", "date": "2025-02-13T04:13:46Z" }, - { - "name": "WordPress/WordPress", - "version": "6.7.2", - "date": "2025-02-11T16:13:18Z" - }, { "name": "homebridge/homebridge", "version": "v1.9.0", @@ -1079,16 +1089,6 @@ "version": "v0.24.6", "date": "2024-12-22T20:24:35Z" }, - { - "name": "IceWhaleTech/CasaOS", - "version": "v0.4.15", - "date": "2024-12-19T03:19:49Z" - }, - { - "name": "mysql/mysql-server", - "version": "mysql-cluster-7.6.33", - "date": "2024-12-16T11:55:50Z" - }, { "name": "ArchiveBox/ArchiveBox", "version": "v0.7.3", From 5723abb81f2c582a4e5f48822e7ae6e3cd895cc9 Mon Sep 17 00:00:00 2001 From: uSlackr Date: Fri, 18 Apr 2025 03:14:08 -0400 Subject: [PATCH 21/29] VaultWarden: Update json with additonal information (#3929) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Update vaultwarden.json Add description of issue if web sited accessed without proxy & cert in an attempt to limit support issues * Update frontend/public/json/vaultwarden.json --------- Co-authored-by: SlaviΕ‘a AreΕΎina <58952836+tremor021@users.noreply.github.com> --- frontend/public/json/vaultwarden.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/public/json/vaultwarden.json b/frontend/public/json/vaultwarden.json index 7c703a602..10f93adc8 100644 --- a/frontend/public/json/vaultwarden.json +++ b/frontend/public/json/vaultwarden.json @@ -43,7 +43,7 @@ }, "notes": [ { - "text": "Vaultwarden needs to be behind a proxy (Nginx Proxy Manager) to obtain HTTPS and to allow clients to connect.", + "text": "Vaultwarden needs to be behind a proxy (Nginx Proxy Manager, Caddy, etc) to obtain HTTPS and to allow clients to connect. If you try to open the web page directly on the new container, the web site will not load", "type": "warning" }, { From 1f93341311782c45df7d235d92421a26841d19c9 Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Fri, 18 Apr 2025 09:21:40 +0200 Subject: [PATCH 22/29] Update CHANGELOG.md (#3931) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 17acce335..23d595fab 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,14 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit All LXC instances created using this repository come pre-installed with Midnight Commander, which is a command-line tool (`mc`) that offers a user-friendly file and directory management interface for the terminal environment. +## 2025-04-18 + +### 🌐 Website + + - #### πŸ“ Script Information + + - VaultWarden: Update json with additonal information [@uSlackr](https://github.com/uSlackr) ([#3929](https://github.com/community-scripts/ProxmoxVE/pull/3929)) + ## 2025-04-17 ### πŸš€ Updated Scripts From 4be3bca2e39dca0bf9a6ef06dd2fb0bd0cc923c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Slavi=C5=A1a=20Are=C5=BEina?= <58952836+tremor021@users.noreply.github.com> Date: Fri, 18 Apr 2025 17:18:20 +0200 Subject: [PATCH 23/29] Increase connection timeout for older systems (#3935) --- install/changedetection-install.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/install/changedetection-install.sh b/install/changedetection-install.sh index cc54b0a35..2f8c65285 100644 --- a/install/changedetection-install.sh +++ b/install/changedetection-install.sh @@ -137,6 +137,7 @@ cat </etc/systemd/system/browserless.service Description=browserless service After=network.target [Service] +Environment=CONNECTION_TIMEOUT=60000 WorkingDirectory=/opt/browserless ExecStart=/opt/browserless/scripts/start.sh SyslogIdentifier=browserless From 2450baffc0d283a447d8dba0538054de0fff8ac3 Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Fri, 18 Apr 2025 20:08:10 +0200 Subject: [PATCH 24/29] Update CHANGELOG.md (#3939) --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 23d595fab..56bd3dd5a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,12 @@ All LXC instances created using this repository come pre-installed with Midnight ## 2025-04-18 +### πŸš€ Updated Scripts + + - #### 🐞 Bug Fixes + + - Changedetection: Increase connection timeout for older systems [@tremor021](https://github.com/tremor021) ([#3935](https://github.com/community-scripts/ProxmoxVE/pull/3935)) + ### 🌐 Website - #### πŸ“ Script Information From 432c6837e7e7a2f2c89f79645ac3813ece106d75 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Slavi=C5=A1a=20Are=C5=BEina?= <58952836+tremor021@users.noreply.github.com> Date: Sat, 19 Apr 2025 19:59:29 +0200 Subject: [PATCH 25/29] seelf: Add missing gpg dependency (#3953) --- install/seelf-install.sh | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/install/seelf-install.sh b/install/seelf-install.sh index e4cb6e19f..f38c5d930 100644 --- a/install/seelf-install.sh +++ b/install/seelf-install.sh @@ -16,7 +16,8 @@ update_os msg_info "Installing Dependencies" $STD apt-get install -y \ make \ - gcc + gcc \ + gpg msg_ok "Installed Dependencies" msg_info "Installing Golang" @@ -43,8 +44,8 @@ msg_ok "Installed Node.js" msg_info "Setting up seelf. Patience" RELEASE=$(curl -fsSL https://api.github.com/repos/YuukanOO/seelf/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') curl -fsSL "https://github.com/YuukanOO/seelf/archive/refs/tags/v${RELEASE}.tar.gz" -o $(basename "https://github.com/YuukanOO/seelf/archive/refs/tags/v${RELEASE}.tar.gz") -tar -xzf v${RELEASE}.tar.gz -mv seelf-${RELEASE}/ /opt/seelf +tar -xzf v"${RELEASE}".tar.gz +mv seelf-"${RELEASE}"/ /opt/seelf cd /opt/seelf $STD make build PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13) @@ -84,11 +85,11 @@ customize # Cleanup msg_info "Cleaning up" -rm -f ~/v${RELEASE}.tar.gz -rm -f $temp_file +rm -f ~/v"${RELEASE}".tar.gz +rm -f "$temp_file" $STD apt-get -y autoremove $STD apt-get -y autoclean msg_ok "Cleaned" motd_ssh -customize \ No newline at end of file +customize From 96fc1ea91d859a52dc716db1660c3911ade88ecd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Slavi=C5=A1a=20Are=C5=BEina?= <58952836+tremor021@users.noreply.github.com> Date: Sat, 19 Apr 2025 19:59:54 +0200 Subject: [PATCH 26/29] Clarify tailscale script instruction (#3952) --- frontend/public/json/add-tailscale-lxc.json | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/frontend/public/json/add-tailscale-lxc.json b/frontend/public/json/add-tailscale-lxc.json index b0943772b..5a919d7e8 100644 --- a/frontend/public/json/add-tailscale-lxc.json +++ b/frontend/public/json/add-tailscale-lxc.json @@ -1,7 +1,9 @@ { "name": "Tailscale", "slug": "add-tailscale-lxc", - "categories": [1], + "categories": [ + 1 + ], "date_created": "2024-05-02", "type": "addon", "updateable": false, @@ -38,7 +40,7 @@ "type": "info" }, { - "text": "Execute within the Proxmox shell", + "text": "Execute within the Proxmox host shell", "type": "info" } ] From 1ae420eef50e0f559cb0481c7794ec7f055169da Mon Sep 17 00:00:00 2001 From: Desert Gamer <44316028+DesertGamer@users.noreply.github.com> Date: Sat, 19 Apr 2025 23:00:43 +0500 Subject: [PATCH 27/29] LXC Iptag (#3531) --- misc/add-iptag.sh | 867 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 867 insertions(+) create mode 100644 misc/add-iptag.sh diff --git a/misc/add-iptag.sh b/misc/add-iptag.sh new file mode 100644 index 000000000..c3bf88cf9 --- /dev/null +++ b/misc/add-iptag.sh @@ -0,0 +1,867 @@ +#!/usr/bin/env bash + +# Copyright (c) 2021-2025 community-scripts ORG +# Author: MickLesk (Canbiz) && Desert_Gamer +# License: MIT +# Source: https://github.com/gitsang/iptag + +function header_info { + clear + cat <<"EOF" + ___ ____ _____ +|_ _| _ \ _ |_ _|_ _ __ _ + | || |_) (_) | |/ _` |/ _` | + | || __/ _ | | (_| | (_| | +|___|_| (_) |_|\__,_|\__, | + |___/ +EOF +} + +clear +header_info +APP="IP-Tag" +hostname=$(hostname) + +# Farbvariablen +YW=$(echo "\033[33m") +GN=$(echo "\033[1;92m") +RD=$(echo "\033[01;31m") +CL=$(echo "\033[m") +BFR="\\r\\033[K" +HOLD=" " +CM=" βœ”οΈ ${CL}" +CROSS=" βœ–οΈ ${CL}" + +# This function enables error handling in the script by setting options and defining a trap for the ERR signal. +catch_errors() { + set -Eeuo pipefail + trap 'error_handler $LINENO "$BASH_COMMAND"' ERR +} + +# This function is called when an error occurs. It receives the exit code, line number, and command that caused the error, and displays an error message. +error_handler() { + if [ -n "$SPINNER_PID" ] && ps -p $SPINNER_PID >/dev/null; then + kill $SPINNER_PID >/dev/null + fi + printf "\e[?25h" + local exit_code="$?" + local line_number="$1" + local command="$2" + local error_message="${RD}[ERROR]${CL} in line ${RD}$line_number${CL}: exit code ${RD}$exit_code${CL}: while executing command ${YW}$command${CL}" + echo -e "\n$error_message\n" +} + +# This function displays a spinner. +spinner() { + local frames=('β ‹' 'β ™' 'β Ή' 'β Έ' 'β Ό' 'β ΄' 'β ¦' 'β §' 'β ‡' '⠏') + local spin_i=0 + local interval=0.1 + printf "\e[?25l" + + local color="${YWB}" + + while true; do + printf "\r ${color}%s${CL}" "${frames[spin_i]}" + spin_i=$(((spin_i + 1) % ${#frames[@]})) + sleep "$interval" + done +} + +# This function displays an informational message with a yellow color. +msg_info() { + local msg="$1" + echo -ne "${TAB}${YW}${HOLD}${msg}${HOLD}" + spinner & + SPINNER_PID=$! +} + +# This function displays a success message with a green color. +msg_ok() { + if [ -n "$SPINNER_PID" ] && ps -p $SPINNER_PID >/dev/null; then + kill $SPINNER_PID >/dev/null + fi + printf "\e[?25h" + local msg="$1" + echo -e "${BFR}${CM}${GN}${msg}${CL}" +} + +# This function displays a error message with a red color. +msg_error() { + if [ -n "$SPINNER_PID" ] && ps -p $SPINNER_PID >/dev/null; then + kill $SPINNER_PID >/dev/null + fi + printf "\e[?25h" + local msg="$1" + echo -e "${BFR}${CROSS}${RD}${msg}${CL}" +} + +# Check if service exists +check_service_exists() { + if systemctl is-active --quiet iptag.service; then + return 0 + else + return 1 + fi +} + +# Migrate configuration from old path to new +migrate_config() { + local old_config="/opt/lxc-iptag" + local new_config="/opt/iptag/iptag.conf" + + if [[ -f "$old_config" ]]; then + msg_info "Migrating configuration from old path" + if cp "$old_config" "$new_config" &>/dev/null; then + rm -rf "$old_config" &>/dev/null + msg_ok "Configuration migrated and old config removed" + else + msg_error "Failed to migrate configuration" + fi + fi +} + +# Update existing installation +update_installation() { + msg_info "Updating IP-Tag Scripts" + systemctl stop iptag.service &>/dev/null + + # Create directory if it doesn't exist + if [[ ! -d "/opt/iptag" ]]; then + mkdir -p /opt/iptag + fi + + # Migrate config if needed + migrate_config + + # Update main script + cat <<'EOF' >/opt/iptag/iptag +#!/bin/bash +# =============== CONFIGURATION =============== # +readonly CONFIG_FILE="/opt/iptag/iptag.conf" +readonly DEFAULT_TAG_FORMAT="full" +readonly DEFAULT_CHECK_INTERVAL=60 + +# Load the configuration file if it exists +if [ -f "$CONFIG_FILE" ]; then + # shellcheck source=./iptag.conf + source "$CONFIG_FILE" +fi + +# Convert IP to integer for comparison +ip_to_int() { + local ip="$1" + local a b c d + IFS=. read -r a b c d <<< "${ip}" + echo "$((a << 24 | b << 16 | c << 8 | d))" +} + +# Check if IP is in CIDR +ip_in_cidr() { + local ip="$1" cidr="$2" + ipcalc -c "$ip" "$cidr" >/dev/null 2>&1 || return 1 + + local network prefix ip_parts net_parts + network=$(echo "$cidr" | cut -d/ -f1) + prefix=$(echo "$cidr" | cut -d/ -f2) + IFS=. read -r -a ip_parts <<< "$ip" + IFS=. read -r -a net_parts <<< "$network" + + case $prefix in + 8) [[ "${ip_parts[0]}" == "${net_parts[0]}" ]] ;; + 16) [[ "${ip_parts[0]}.${ip_parts[1]}" == "${net_parts[0]}.${net_parts[1]}" ]] ;; + 24) [[ "${ip_parts[0]}.${ip_parts[1]}.${ip_parts[2]}" == "${net_parts[0]}.${net_parts[1]}.${net_parts[2]}" ]] ;; + 32) [[ "$ip" == "$network" ]] ;; + *) return 1 ;; + esac +} + +# Format IP address according to the configuration +format_ip_tag() { + local ip="$1" + local format="${TAG_FORMAT:-$DEFAULT_TAG_FORMAT}" + + case "$format" in + "last_octet") echo "${ip##*.}" ;; + "last_two_octets") echo "${ip#*.*.}" ;; + *) echo "$ip" ;; + esac +} + +# Check if IP is in any CIDRs +ip_in_cidrs() { + local ip="$1" cidrs="$2" + [[ -z "$cidrs" ]] && return 1 + local IFS=' ' + for cidr in $cidrs; do ip_in_cidr "$ip" "$cidr" && return 0; done + return 1 +} + +# Check if IP is valid +is_valid_ipv4() { + local ip="$1" + [[ "$ip" =~ ^([0-9]{1,3}\.){3}[0-9]{1,3}$ ]] || return 1 + + local IFS='.' parts + read -ra parts <<< "$ip" + for part in "${parts[@]}"; do + (( part >= 0 && part <= 255 )) || return 1 + done + return 0 +} + +lxc_status_changed() { + current_lxc_status=$(pct list 2>/dev/null) + if [ "${last_lxc_status}" == "${current_lxc_status}" ]; then + return 1 + else + last_lxc_status="${current_lxc_status}" + return 0 + fi +} + +vm_status_changed() { + current_vm_status=$(qm list 2>/dev/null) + if [ "${last_vm_status}" == "${current_vm_status}" ]; then + return 1 + else + last_vm_status="${current_vm_status}" + return 0 + fi +} + +fw_net_interface_changed() { + current_net_interface=$(ifconfig | grep "^fw") + if [ "${last_net_interface}" == "${current_net_interface}" ]; then + return 1 + else + last_net_interface="${current_net_interface}" + return 0 + fi +} + +# Get VM IPs using MAC addresses and ARP table +get_vm_ips() { + local vmid=$1 ips="" macs found_ip=false + qm status "$vmid" 2>/dev/null | grep -q "status: running" || return + + macs=$(qm config "$vmid" 2>/dev/null | grep -E 'net[0-9]+' | grep -oE '[a-fA-F0-9]{2}(:[a-fA-F0-9]{2}){5}') + [[ -z "$macs" ]] && return + + for mac in $macs; do + local ip + ip=$(arp -an 2>/dev/null | grep -i "$mac" | grep -oE '([0-9]{1,3}\.){3}[0-9]{1,3}') + [[ -n "$ip" ]] && { ips+="$ip "; found_ip=true; } + done + + if ! $found_ip; then + local agent_ip + agent_ip=$(qm agent "$vmid" network-get-interfaces 2>/dev/null | grep -oE '([0-9]{1,3}\.){3}[0-9]{1,3}' || true) + [[ -n "$agent_ip" ]] && ips+="$agent_ip " + fi + + echo "${ips% }" +} + +# Update tags +update_tags() { + local type="$1" vmid="$2" config_cmd="pct" + [[ "$type" == "vm" ]] && config_cmd="qm" + + local current_ips_full + if [[ "$type" == "lxc" ]]; then + current_ips_full=$(lxc-info -n "${vmid}" -i 2>/dev/null | grep -E "^IP:" | awk '{print $2}') + else + current_ips_full=$(get_vm_ips "${vmid}") + fi + [[ -z "$current_ips_full" ]] && return + + local current_tags=() next_tags=() current_ip_tags=() + mapfile -t current_tags < <($config_cmd config "${vmid}" 2>/dev/null | grep tags | awk '{print $2}' | sed 's/;/\n/g') + + # Separate IP and non-IP tags + for tag in "${current_tags[@]}"; do + if is_valid_ipv4 "${tag}" || [[ "$tag" =~ ^[0-9]+(\.[0-9]+)*$ ]]; then + current_ip_tags+=("${tag}") + else + next_tags+=("${tag}") + fi + done + + local formatted_ips=() needs_update=false added_ips=() + for ip in ${current_ips_full}; do + if is_valid_ipv4 "$ip" && ip_in_cidrs "$ip" "${CIDR_LIST[*]}"; then + local formatted_ip=$(format_ip_tag "$ip") + formatted_ips+=("$formatted_ip") + if [[ ! " ${current_ip_tags[*]} " =~ " ${formatted_ip} " ]]; then + needs_update=true + added_ips+=("$formatted_ip") + next_tags+=("$formatted_ip") + fi + fi + done + + [[ ${#formatted_ips[@]} -eq 0 ]] && return + + # Add existing IP tags that are still valid + for tag in "${current_ip_tags[@]}"; do + if [[ " ${formatted_ips[*]} " =~ " ${tag} " ]]; then + if [[ ! " ${next_tags[*]} " =~ " ${tag} " ]]; then + next_tags+=("$tag") + fi + fi + done + + if [[ "$needs_update" == true ]]; then + echo "${type^} ${vmid}: adding IP tags: ${added_ips[*]}" + $config_cmd set "${vmid}" -tags "$(IFS=';'; echo "${next_tags[*]}")" &>/dev/null + elif [[ ${#current_ip_tags[@]} -gt 0 ]]; then + echo "${type^} ${vmid}: IP tags already set: ${current_ip_tags[*]}" + else + echo "${type^} ${vmid}: setting initial IP tags: ${formatted_ips[*]}" + $config_cmd set "${vmid}" -tags "$(IFS=';'; echo "${formatted_ips[*]}")" &>/dev/null + fi +} + +# Check if status changed +check_status() { + local type="$1" current + case "$type" in + "lxc") current=$(pct list 2>/dev/null | grep -v VMID) ;; + "vm") current=$(qm list 2>/dev/null | grep -v VMID) ;; + "fw") current=$(ifconfig 2>/dev/null | grep "^fw") ;; + esac + local last_var="last_${type}_status" + [[ "${!last_var}" == "$current" ]] && return 1 + eval "$last_var='$current'" + return 0 +} + +# Update all instances +update_all() { + local type="$1" list_cmd="pct" vmids count=0 + [[ "$type" == "vm" ]] && list_cmd="qm" + + vmids=$($list_cmd list 2>/dev/null | grep -v VMID | awk '{print $1}') + for vmid in $vmids; do ((count++)); done + + echo "Found ${count} running ${type}s" + [[ $count -eq 0 ]] && return + + for vmid in $vmids; do + update_tags "$type" "$vmid" + done +} + +# Main check function +check() { + local current_time changes_detected=false + current_time=$(date +%s) + + for type in "lxc" "vm"; do + local interval_var="${type^^}_STATUS_CHECK_INTERVAL" + local last_check_var="last_${type}_check_time" + local last_update_var="last_update_${type}_time" + + if [[ "${!interval_var}" -gt 0 ]] && (( current_time - ${!last_check_var} >= ${!interval_var} )); then + echo "Checking ${type^^} status..." + eval "${last_check_var}=\$current_time" + if check_status "$type"; then + changes_detected=true + update_all "$type" + eval "${last_update_var}=\$current_time" + fi + fi + + if (( current_time - ${!last_update_var} >= FORCE_UPDATE_INTERVAL )); then + echo "Force updating ${type} tags..." + changes_detected=true + update_all "$type" + eval "${last_update_var}=\$current_time" + fi + done + + if [[ "${FW_NET_INTERFACE_CHECK_INTERVAL}" -gt 0 ]] && \ + (( current_time - last_fw_check_time >= FW_NET_INTERFACE_CHECK_INTERVAL )); then + echo "Checking network interfaces..." + last_fw_check_time=$current_time + if check_status "fw"; then + changes_detected=true + update_all "lxc" + update_all "vm" + last_update_lxc_time=$current_time + last_update_vm_time=$current_time + fi + fi + + $changes_detected || echo "No changes detected in system status" +} + +# Initialize time variables +declare -g last_lxc_status="" last_vm_status="" last_fw_status="" +declare -g last_lxc_check_time=0 last_vm_check_time=0 last_fw_check_time=0 +declare -g last_update_lxc_time=0 last_update_vm_time=0 + +# Main loop +main() { + while true; do + check + sleep "${LOOP_INTERVAL:-$DEFAULT_CHECK_INTERVAL}" + done +} + +main +EOF + chmod +x /opt/iptag/iptag + + # Update service file + cat </lib/systemd/system/iptag.service +[Unit] +Description=IP-Tag service +After=network.target + +[Service] +Type=simple +ExecStart=/opt/iptag/iptag +Restart=always + +[Install] +WantedBy=multi-user.target +EOF + + systemctl daemon-reload &>/dev/null + systemctl enable -q --now iptag.service &>/dev/null + msg_ok "Updated IP-Tag Scripts" +} + +# Main installation process +if check_service_exists; then + while true; do + read -p "IP-Tag service is already installed. Do you want to update it? (y/n): " yn + case $yn in + [Yy]*) + update_installation + exit 0 + ;; + [Nn]*) + msg_error "Installation cancelled." + exit 0 + ;; + *) + msg_error "Please answer yes or no." + ;; + esac + done +fi + +while true; do + read -p "This will install ${APP} on ${hostname}. Proceed? (y/n): " yn + case $yn in + [Yy]*) + break + ;; + [Nn]*) + msg_error "Installation cancelled." + exit + ;; + *) + msg_error "Please answer yes or no." + ;; + esac +done + +if ! pveversion | grep -Eq "pve-manager/8\.[0-4](\.[0-9]+)*"; then + msg_error "This version of Proxmox Virtual Environment is not supported" + msg_error "⚠️ Requires Proxmox Virtual Environment Version 8.0 or later." + msg_error "Exiting..." + sleep 2 + exit +fi + +FILE_PATH="/usr/local/bin/iptag" +if [[ -f "$FILE_PATH" ]]; then + msg_info "The file already exists: '$FILE_PATH'. Skipping installation." + exit 0 +fi + +msg_info "Installing Dependencies" +apt-get update &>/dev/null +apt-get install -y ipcalc net-tools &>/dev/null +msg_ok "Installed Dependencies" + +msg_info "Setting up IP-Tag Scripts" +mkdir -p /opt/iptag +msg_ok "Setup IP-Tag Scripts" + +# Migrate config if needed +migrate_config + +msg_info "Setup Default Config" +if [[ ! -f /opt/iptag/iptag.conf ]]; then + cat </opt/iptag/iptag.conf +# Configuration file for LXC IP tagging + +# List of allowed CIDRs +CIDR_LIST=( + 192.168.0.0/16 + 172.16.0.0/12 + 10.0.0.0/8 + 100.64.0.0/10 +) + +# Tag format options: +# - "full": full IP address (e.g., 192.168.0.100) +# - "last_octet": only the last octet (e.g., 100) +# - "last_two_octets": last two octets (e.g., 0.100) +TAG_FORMAT="full" + +# Interval settings (in seconds) +LOOP_INTERVAL=60 +VM_STATUS_CHECK_INTERVAL=60 +FW_NET_INTERFACE_CHECK_INTERVAL=60 +LXC_STATUS_CHECK_INTERVAL=60 +FORCE_UPDATE_INTERVAL=1800 +EOF + msg_ok "Setup default config" +else + msg_ok "Default config already exists" +fi + +msg_info "Setup Main Function" +if [[ ! -f /opt/iptag/iptag ]]; then + cat <<'EOF' >/opt/iptag/iptag +#!/bin/bash +# =============== CONFIGURATION =============== # +CONFIG_FILE="/opt/iptag/iptag.conf" + +# Load the configuration file if it exists +if [ -f "$CONFIG_FILE" ]; then + # shellcheck source=./iptag.conf + source "$CONFIG_FILE" +fi + +# Convert IP to integer for comparison +ip_to_int() { + local ip="$1" + local a b c d + IFS=. read -r a b c d <<< "${ip}" + echo "$((a << 24 | b << 16 | c << 8 | d))" +} + +# Check if IP is in CIDR +ip_in_cidr() { + local ip="$1" + local cidr="$2" + + # Use ipcalc with the -c option (check), which returns 0 if the IP is in the network + if ipcalc -c "$ip" "$cidr" >/dev/null 2>&1; then + # Get network address and mask from CIDR + local network prefix + network=$(echo "$cidr" | cut -d/ -f1) + prefix=$(echo "$cidr" | cut -d/ -f2) + + # Check if IP is in the network + local ip_a ip_b ip_c ip_d net_a net_b net_c net_d + IFS=. read -r ip_a ip_b ip_c ip_d <<< "$ip" + IFS=. read -r net_a net_b net_c net_d <<< "$network" + + # Check octets match based on prefix length + local result=0 + if (( prefix >= 8 )); then + [[ "$ip_a" != "$net_a" ]] && result=1 + fi + if (( prefix >= 16 )); then + [[ "$ip_b" != "$net_b" ]] && result=1 + fi + if (( prefix >= 24 )); then + [[ "$ip_c" != "$net_c" ]] && result=1 + fi + + return $result + fi + + return 1 +} + +# Format IP address according to the configuration +format_ip_tag() { + local ip="$1" + local format="${TAG_FORMAT:-full}" + + case "$format" in + "last_octet") + echo "${ip##*.}" + ;; + "last_two_octets") + echo "${ip#*.*.}" + ;; + *) + echo "$ip" + ;; + esac +} + +# Check if IP is in any CIDRs +ip_in_cidrs() { + local ip="$1" + local cidrs="$2" + + # Check that cidrs is not empty + [[ -z "$cidrs" ]] && return 1 + + local IFS=' ' + for cidr in $cidrs; do + ip_in_cidr "$ip" "$cidr" && return 0 + done + return 1 +} + +# Check if IP is valid +is_valid_ipv4() { + local ip="$1" + [[ "$ip" =~ ^([0-9]{1,3}\.){3}[0-9]{1,3}$ ]] || return 1 + local IFS='.' + read -ra parts <<< "$ip" + for part in "${parts[@]}"; do + [[ "$part" =~ ^[0-9]+$ ]] && ((part >= 0 && part <= 255)) || return 1 + done + return 0 +} + +lxc_status_changed() { + current_lxc_status=$(pct list 2>/dev/null) + if [ "${last_lxc_status}" == "${current_lxc_status}" ]; then + return 1 + else + last_lxc_status="${current_lxc_status}" + return 0 + fi +} + +vm_status_changed() { + current_vm_status=$(qm list 2>/dev/null) + if [ "${last_vm_status}" == "${current_vm_status}" ]; then + return 1 + else + last_vm_status="${current_vm_status}" + return 0 + fi +} + +fw_net_interface_changed() { + current_net_interface=$(ifconfig | grep "^fw") + if [ "${last_net_interface}" == "${current_net_interface}" ]; then + return 1 + else + last_net_interface="${current_net_interface}" + return 0 + fi +} + +# Get VM IPs using MAC addresses and ARP table +get_vm_ips() { + local vmid=$1 + local ips="" + + # Check if VM is running + qm status "$vmid" 2>/dev/null | grep -q "status: running" || return + + # Get MAC addresses from VM configuration + local macs + macs=$(qm config "$vmid" 2>/dev/null | grep -E 'net[0-9]+' | grep -o -E '[a-fA-F0-9]{2}(:[a-fA-F0-9]{2}){5}') + + # Look up IPs from ARP table using MAC addresses + for mac in $macs; do + local ip + ip=$(arp -an 2>/dev/null | grep -i "$mac" | grep -o -E '([0-9]{1,3}\.){3}[0-9]{1,3}') + if [ -n "$ip" ]; then + ips+="$ip " + fi + done + + echo "$ips" +} + +# Update tags for container or VM +update_tags() { + local type="$1" + local vmid="$2" + local config_cmd="pct" + [[ "$type" == "vm" ]] && config_cmd="qm" + + # Get current IPs + local current_ips_full + if [[ "$type" == "lxc" ]]; then + # Redirect error output to suppress AppArmor warnings + current_ips_full=$(lxc-info -n "${vmid}" -i 2>/dev/null | grep -E "^IP:" | awk '{print $2}') + else + current_ips_full=$(get_vm_ips "${vmid}") + fi + + # Parse current tags and get valid IPs + local current_tags=() + local next_tags=() + mapfile -t current_tags < <($config_cmd config "${vmid}" 2>/dev/null | grep tags | awk '{print $2}' | sed 's/;/\n/g') + + for tag in "${current_tags[@]}"; do + # Skip tag if it looks like an IP (full or partial) + if ! is_valid_ipv4 "${tag}" && ! [[ "$tag" =~ ^[0-9]+(\.[0-9]+)*$ ]]; then + next_tags+=("${tag}") + fi + done + + # Add valid IPs to tags + local added_ips=() + local skipped_ips=() + + for ip in ${current_ips_full}; do + if is_valid_ipv4 "${ip}"; then + if ip_in_cidrs "${ip}" "${CIDR_LIST[*]}"; then + local formatted_ip=$(format_ip_tag "$ip") + next_tags+=("${formatted_ip}") + added_ips+=("${formatted_ip}") + else + skipped_ips+=("${ip}") + fi + fi + done + + # Log only if there are changes + if [ ${#added_ips[@]} -gt 0 ]; then + echo "${type^} ${vmid}: added IP tags: ${added_ips[*]}" + fi + + # Update if changed + if [[ "$(IFS=';'; echo "${current_tags[*]}")" != "$(IFS=';'; echo "${next_tags[*]}")" ]]; then + $config_cmd set "${vmid}" -tags "$(IFS=';'; echo "${next_tags[*]}")" &>/dev/null + fi +} + +# Check if status changed +check_status_changed() { + local type="$1" + local current_status + + case "$type" in + "lxc") + current_status=$(pct list 2>/dev/null | grep -v VMID) + [[ "${last_lxc_status}" == "${current_status}" ]] && return 1 + last_lxc_status="${current_status}" + ;; + "vm") + current_status=$(qm list 2>/dev/null | grep -v VMID) + [[ "${last_vm_status}" == "${current_status}" ]] && return 1 + last_vm_status="${current_status}" + ;; + "fw") + current_status=$(ifconfig 2>/dev/null | grep "^fw") + [[ "${last_net_interface}" == "${current_status}" ]] && return 1 + last_net_interface="${current_status}" + ;; + esac + return 0 +} + +check() { + current_time=$(date +%s) + + # Check LXC status + time_since_last_lxc_status_check=$((current_time - last_lxc_status_check_time)) + if [[ "${LXC_STATUS_CHECK_INTERVAL}" -gt 0 ]] \ + && [[ "${time_since_last_lxc_status_check}" -ge "${LXC_STATUS_CHECK_INTERVAL}" ]]; then + echo "Checking LXC status..." + last_lxc_status_check_time=${current_time} + if check_status_changed "lxc"; then + update_all_tags "lxc" + last_update_lxc_time=${current_time} + fi + fi + + # Check VM status + time_since_last_vm_status_check=$((current_time - last_vm_status_check_time)) + if [[ "${VM_STATUS_CHECK_INTERVAL}" -gt 0 ]] \ + && [[ "${time_since_last_vm_status_check}" -ge "${VM_STATUS_CHECK_INTERVAL}" ]]; then + echo "Checking VM status..." + last_vm_status_check_time=${current_time} + if check_status_changed "vm"; then + update_all_tags "vm" + last_update_vm_time=${current_time} + fi + fi + + # Check network interface changes + time_since_last_fw_net_interface_check=$((current_time - last_fw_net_interface_check_time)) + if [[ "${FW_NET_INTERFACE_CHECK_INTERVAL}" -gt 0 ]] \ + && [[ "${time_since_last_fw_net_interface_check}" -ge "${FW_NET_INTERFACE_CHECK_INTERVAL}" ]]; then + echo "Checking network interfaces..." + last_fw_net_interface_check_time=${current_time} + if check_status_changed "fw"; then + update_all_tags "lxc" + update_all_tags "vm" + last_update_lxc_time=${current_time} + last_update_vm_time=${current_time} + fi + fi + + # Force update if needed + for type in "lxc" "vm"; do + local last_update_var="last_update_${type}_time" + local time_since_last_update=$((current_time - ${!last_update_var})) + if [ ${time_since_last_update} -ge ${FORCE_UPDATE_INTERVAL} ]; then + echo "Force updating ${type} tags..." + update_all_tags "$type" + eval "${last_update_var}=${current_time}" + fi + done +} + +# Initialize time variables +last_lxc_status_check_time=0 +last_vm_status_check_time=0 +last_fw_net_interface_check_time=0 +last_update_lxc_time=0 +last_update_vm_time=0 + +# main: Set the IP tags for all LXC containers and VMs +main() { + while true; do + check + sleep "${LOOP_INTERVAL}" + done +} + +main +EOF + msg_ok "Setup Main Function" +else + msg_ok "Main Function already exists" +fi +chmod +x /opt/iptag/iptag + +msg_info "Creating Service" +if [[ ! -f /lib/systemd/system/iptag.service ]]; then + cat </lib/systemd/system/iptag.service +[Unit] +Description=IP-Tag service +After=network.target + +[Service] +Type=simple +ExecStart=/opt/iptag/iptag +Restart=always + +[Install] +WantedBy=multi-user.target +EOF + msg_ok "Created Service" +else + msg_ok "Service already exists." +fi + +msg_ok "Setup IP-Tag Scripts" + +msg_info "Starting Service" +systemctl daemon-reload &>/dev/null +systemctl enable -q --now iptag.service &>/dev/null +msg_ok "Started Service" +SPINNER_PID="" +echo -e "\n${APP} installation completed successfully! ${CL}\n" From 73a42eaaaed22d69431f953856a7035060cfe610 Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Sat, 19 Apr 2025 20:02:15 +0200 Subject: [PATCH 28/29] Update CHANGELOG.md (#3954) --- CHANGELOG.md | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 56bd3dd5a..4f0209237 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,24 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit All LXC instances created using this repository come pre-installed with Midnight Commander, which is a command-line tool (`mc`) that offers a user-friendly file and directory management interface for the terminal environment. +## 2025-04-19 + +### πŸ†• New Scripts + + - LXC Iptag [@DesertGamer](https://github.com/DesertGamer) ([#3531](https://github.com/community-scripts/ProxmoxVE/pull/3531)) + +### πŸš€ Updated Scripts + + - #### 🐞 Bug Fixes + + - seelf: Add missing gpg dependency [@tremor021](https://github.com/tremor021) ([#3953](https://github.com/community-scripts/ProxmoxVE/pull/3953)) + +### 🌐 Website + + - #### πŸ“ Script Information + + - Tailscale: Clarify tailscale script instruction on website [@tremor021](https://github.com/tremor021) ([#3952](https://github.com/community-scripts/ProxmoxVE/pull/3952)) + ## 2025-04-18 ### πŸš€ Updated Scripts From 05fda7e56a660865176b8e88d669c95be04ec847 Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Sun, 20 Apr 2025 20:59:26 +0200 Subject: [PATCH 29/29] Update versions.json (#3956) Co-authored-by: GitHub Actions[bot] --- frontend/public/json/versions.json | 376 ++++++++++++++--------------- 1 file changed, 188 insertions(+), 188 deletions(-) diff --git a/frontend/public/json/versions.json b/frontend/public/json/versions.json index 14576e916..412566a15 100644 --- a/frontend/public/json/versions.json +++ b/frontend/public/json/versions.json @@ -1,43 +1,98 @@ [ - { - "name": "runtipi/runtipi", - "version": "v3.10.0-beta.9", - "date": "2025-04-17T11:46:08Z" - }, - { - "name": "prometheus-pve/prometheus-pve-exporter", - "version": "v3.5.3", - "date": "2025-04-17T10:40:47Z" - }, { "name": "fhem/fhem-mirror", "version": "6.2", - "date": "2025-04-17T10:34:25Z" + "date": "2025-04-20T10:33:19Z" }, { "name": "karakeep-app/karakeep", - "version": "mcp/v0.23.6", - "date": "2025-04-17T10:33:10Z" + "version": "extension/v1.2.5", + "date": "2025-04-20T10:19:06Z" }, { - "name": "traefik/traefik", - "version": "v2.11.23", - "date": "2025-04-17T10:14:21Z" + "name": "firefly-iii/firefly-iii", + "version": "v6.2.11", + "date": "2025-04-20T06:28:44Z" }, { - "name": "IceWhaleTech/CasaOS", - "version": "v0.4.15", - "date": "2024-12-19T03:19:49Z" + "name": "MediaBrowser/Emby.Releases", + "version": "4.8.11.0", + "date": "2025-03-10T06:39:11Z" }, { "name": "morpheus65535/bazarr", "version": "v1.5.1", "date": "2025-01-01T16:15:52Z" }, + { + "name": "Readarr/Readarr", + "version": "v2.0.0.4645", + "date": "2017-03-07T18:56:06Z" + }, + { + "name": "Radarr/Radarr", + "version": "v5.21.1.9799", + "date": "2025-03-24T15:52:12Z" + }, { "name": "Jackett/Jackett", - "version": "v0.22.1788", - "date": "2025-04-17T05:53:12Z" + "version": "v0.22.1797", + "date": "2025-04-20T05:53:57Z" + }, + { + "name": "paperless-ngx/paperless-ngx", + "version": "v2.15.3", + "date": "2025-04-19T23:02:17Z" + }, + { + "name": "semaphoreui/semaphore", + "version": "v2.13.14", + "date": "2025-04-19T20:39:23Z" + }, + { + "name": "ellite/Wallos", + "version": "v2.52.0", + "date": "2025-04-19T20:36:50Z" + }, + { + "name": "msgbyte/tianji", + "version": "v1.20.7", + "date": "2025-04-19T20:35:09Z" + }, + { + "name": "TasmoAdmin/TasmoAdmin", + "version": "v4.2.3", + "date": "2025-02-09T23:07:48Z" + }, + { + "name": "cross-seed/cross-seed", + "version": "v6.11.2", + "date": "2025-02-26T14:54:49Z" + }, + { + "name": "YunoHost/yunohost", + "version": "debian/12.1.5", + "date": "2025-04-19T15:39:18Z" + }, + { + "name": "theonedev/onedev", + "version": "v11.8.7", + "date": "2025-04-19T11:19:29Z" + }, + { + "name": "home-assistant/core", + "version": "2025.4.3", + "date": "2025-04-19T10:23:38Z" + }, + { + "name": "runtipi/runtipi", + "version": "v3.10.0-beta.9", + "date": "2025-04-17T11:46:08Z" + }, + { + "name": "moghtech/komodo", + "version": "v1.17.2", + "date": "2025-04-19T06:56:25Z" }, { "name": "ollama/ollama", @@ -45,29 +100,69 @@ "date": "2025-04-17T01:56:29Z" }, { - "name": "esphome/esphome", - "version": "2025.4.0", - "date": "2025-04-17T00:55:34Z" + "name": "caddyserver/caddy", + "version": "v2.10.0", + "date": "2025-04-18T20:46:28Z" + }, + { + "name": "homarr-labs/homarr", + "version": "v1.17.0", + "date": "2025-04-18T19:14:57Z" + }, + { + "name": "pocket-id/pocket-id", + "version": "v0.48.0", + "date": "2025-04-18T16:34:56Z" + }, + { + "name": "Paymenter/Paymenter", + "version": "v1.0.4", + "date": "2025-04-18T16:08:02Z" + }, + { + "name": "prometheus/prometheus", + "version": "v3.3.0", + "date": "2025-04-18T13:46:38Z" }, { "name": "dgtlmoon/changedetection.io", - "version": "0.49.14", - "date": "2025-04-16T21:32:22Z" + "version": "0.49.15", + "date": "2025-04-18T12:58:26Z" }, { - "name": "influxdata/influxdb", - "version": "v3.0.0", - "date": "2025-04-16T21:21:04Z" + "name": "traefik/traefik", + "version": "v3.3.6", + "date": "2025-04-18T09:28:22Z" }, { - "name": "moghtech/komodo", - "version": "v1.17.1", - "date": "2025-04-14T22:35:13Z" + "name": "Kareadita/Kavita", + "version": "v0.8.6.1", + "date": "2025-04-18T12:30:53Z" }, { - "name": "docmost/docmost", - "version": "v0.10.2", - "date": "2025-04-16T20:43:40Z" + "name": "TandoorRecipes/recipes", + "version": "1.5.34", + "date": "2025-03-27T16:17:38Z" + }, + { + "name": "Luligu/matterbridge", + "version": "2.2.9", + "date": "2025-04-18T10:05:52Z" + }, + { + "name": "HabitRPG/habitica", + "version": "v5.35.4", + "date": "2025-04-17T21:18:55Z" + }, + { + "name": "tailscale/tailscale", + "version": "v1.82.5", + "date": "2025-04-17T20:59:15Z" + }, + { + "name": "TriliumNext/Notes", + "version": "v0.93.0", + "date": "2025-04-17T20:05:25Z" }, { "name": "keycloak/keycloak", @@ -75,9 +170,64 @@ "date": "2025-04-11T12:48:27Z" }, { - "name": "ellite/Wallos", - "version": "v2.50.1", - "date": "2025-04-16T19:31:56Z" + "name": "AdguardTeam/AdGuardHome", + "version": "v0.107.60", + "date": "2025-04-14T11:46:19Z" + }, + { + "name": "coder/code-server", + "version": "v4.99.3", + "date": "2025-04-17T18:33:11Z" + }, + { + "name": "VictoriaMetrics/VictoriaMetrics", + "version": "v1.19.0-victorialogs", + "date": "2025-04-17T18:26:31Z" + }, + { + "name": "duplicati/duplicati", + "version": "v2.1.0.116-2.1.0.116_canary_2025-04-17", + "date": "2025-04-17T17:52:31Z" + }, + { + "name": "benzino77/tasmocompiler", + "version": "v12.6.1", + "date": "2025-04-17T17:35:02Z" + }, + { + "name": "docker/compose", + "version": "v2.35.1", + "date": "2025-04-17T14:29:11Z" + }, + { + "name": "influxdata/influxdb", + "version": "v3.0.1", + "date": "2025-04-17T14:06:09Z" + }, + { + "name": "documenso/documenso", + "version": "v1.10.0-rc.5", + "date": "2025-04-17T13:01:43Z" + }, + { + "name": "prometheus-pve/prometheus-pve-exporter", + "version": "v3.5.3", + "date": "2025-04-17T10:40:47Z" + }, + { + "name": "IceWhaleTech/CasaOS", + "version": "v0.4.15", + "date": "2024-12-19T03:19:49Z" + }, + { + "name": "esphome/esphome", + "version": "2025.4.0", + "date": "2025-04-17T00:55:34Z" + }, + { + "name": "docmost/docmost", + "version": "v0.10.2", + "date": "2025-04-16T20:43:40Z" }, { "name": "forgejo/forgejo", @@ -99,11 +249,6 @@ "version": "v24.8", "date": "2025-03-18T07:33:51Z" }, - { - "name": "pocket-id/pocket-id", - "version": "v0.47.0", - "date": "2025-04-16T14:32:31Z" - }, { "name": "n8n-io/n8n", "version": "n8n@1.86.1", @@ -129,21 +274,11 @@ "version": "v0.15.0", "date": "2025-04-16T03:58:02Z" }, - { - "name": "HabitRPG/habitica", - "version": "v5.35.3", - "date": "2025-04-15T19:32:17Z" - }, { "name": "Checkmk/checkmk", "version": "v2.4.0b5", "date": "2025-04-15T17:59:06Z" }, - { - "name": "MediaBrowser/Emby.Releases", - "version": "4.8.11.0", - "date": "2025-03-10T06:39:11Z" - }, { "name": "rabbitmq/rabbitmq-server", "version": "v4.1.0", @@ -164,11 +299,6 @@ "version": "v0.45.6", "date": "2025-04-15T14:16:52Z" }, - { - "name": "prometheus/prometheus", - "version": "v0.303.0", - "date": "2025-04-15T13:30:05Z" - }, { "name": "mattermost/mattermost", "version": "v10.6.2", @@ -189,41 +319,16 @@ "version": "v0.14.1", "date": "2024-08-29T22:32:51Z" }, - { - "name": "Kareadita/Kavita", - "version": "v0.8.6", - "date": "2025-04-14T22:09:30Z" - }, - { - "name": "paperless-ngx/paperless-ngx", - "version": "v2.15.2", - "date": "2025-04-14T20:48:52Z" - }, - { - "name": "semaphoreui/semaphore", - "version": "v2.13.13", - "date": "2025-04-11T10:15:13Z" - }, { "name": "netbox-community/netbox", "version": "v4.2.7", "date": "2025-04-10T20:08:13Z" }, - { - "name": "duplicati/duplicati", - "version": "v2.1.0.115-2.1.0.115_canary_2025-04-14", - "date": "2025-04-14T18:03:36Z" - }, { "name": "OliveTin/OliveTin", "version": "2025.4.14", "date": "2025-04-14T16:53:53Z" }, - { - "name": "msgbyte/tianji", - "version": "v1.20.0", - "date": "2025-04-14T16:19:23Z" - }, { "name": "home-assistant/operating-system", "version": "15.2", @@ -234,11 +339,6 @@ "version": "v0.0.7-hf1", "date": "2025-03-10T20:49:39Z" }, - { - "name": "AdguardTeam/AdGuardHome", - "version": "v0.107.60", - "date": "2025-04-14T11:46:19Z" - }, { "name": "Graylog2/graylog2-server", "version": "6.2.0-rc.1", @@ -264,11 +364,6 @@ "version": "0.203.1", "date": "2025-04-14T07:23:02Z" }, - { - "name": "firefly-iii/firefly-iii", - "version": "v6.2.10", - "date": "2025-03-22T13:02:26Z" - }, { "name": "glanceapp/glance", "version": "v0.7.12", @@ -304,21 +399,11 @@ "version": "v2.10.3.4602", "date": "2025-03-23T11:00:37Z" }, - { - "name": "Readarr/Readarr", - "version": "v2.0.0.4645", - "date": "2017-03-07T18:56:06Z" - }, { "name": "Prowlarr/Prowlarr", "version": "v1.33.3.5008", "date": "2025-04-09T17:58:37Z" }, - { - "name": "Radarr/Radarr", - "version": "v5.21.1.9799", - "date": "2025-03-24T15:52:12Z" - }, { "name": "Tautulli/Tautulli", "version": "v2.15.2", @@ -329,11 +414,6 @@ "version": "v0.2.11", "date": "2025-04-12T21:13:08Z" }, - { - "name": "home-assistant/core", - "version": "2025.4.2", - "date": "2025-04-12T09:46:22Z" - }, { "name": "readeck/readeck", "version": "0.18.0", @@ -344,26 +424,6 @@ "version": "v5.5.2", "date": "2025-04-11T22:00:06Z" }, - { - "name": "homarr-labs/homarr", - "version": "v1.16.0", - "date": "2025-04-11T19:15:24Z" - }, - { - "name": "tailscale/tailscale", - "version": "v1.82.4", - "date": "2025-04-11T17:58:09Z" - }, - { - "name": "coder/code-server", - "version": "v4.99.2", - "date": "2025-04-11T17:57:47Z" - }, - { - "name": "TriliumNext/Notes", - "version": "v0.0.0", - "date": "2025-04-11T14:18:00Z" - }, { "name": "emqx/emqx", "version": "e5.9.0-beta.3", @@ -384,11 +444,6 @@ "version": "v0.83.0", "date": "2025-04-11T03:53:10Z" }, - { - "name": "Luligu/matterbridge", - "version": "2.2.8", - "date": "2025-04-10T20:30:49Z" - }, { "name": "gristlabs/grist-core", "version": "v1.5.1", @@ -399,26 +454,11 @@ "version": "cassandra-5.0.4", "date": "2025-04-10T16:32:00Z" }, - { - "name": "VictoriaMetrics/VictoriaMetrics", - "version": "v1.18.0-victorialogs", - "date": "2025-04-10T15:05:20Z" - }, { "name": "NodeBB/NodeBB", "version": "v4.2.1", "date": "2025-04-10T14:03:47Z" }, - { - "name": "Paymenter/Paymenter", - "version": "v1.0.3", - "date": "2025-04-10T13:57:39Z" - }, - { - "name": "docker/compose", - "version": "v2.35.0", - "date": "2025-04-10T13:45:22Z" - }, { "name": "mongodb/mongo", "version": "r8.0.5-rc2", @@ -439,11 +479,6 @@ "version": "v2.69.10", "date": "2025-04-09T12:16:51Z" }, - { - "name": "YunoHost/yunohost", - "version": "debian/12.0.14", - "date": "2025-04-09T10:09:00Z" - }, { "name": "minio/minio", "version": "RELEASE.2025-04-08T15-41-24Z", @@ -509,11 +544,6 @@ "version": "2.0.3", "date": "2025-04-06T17:35:41Z" }, - { - "name": "TandoorRecipes/recipes", - "version": "1.5.34", - "date": "2025-03-27T16:17:38Z" - }, { "name": "TechnitiumSoftware/DnsServer", "version": "v13.5.0", @@ -609,11 +639,6 @@ "version": "v2.31.0", "date": "2025-04-01T18:12:45Z" }, - { - "name": "theonedev/onedev", - "version": "v11.8.6", - "date": "2025-04-01T13:52:03Z" - }, { "name": "neo4j/neo4j", "version": "5.26.5", @@ -629,11 +654,6 @@ "version": "v2.2.0", "date": "2025-03-31T21:31:48Z" }, - { - "name": "documenso/documenso", - "version": "v1.10.0-rc.4", - "date": "2025-03-31T09:02:22Z" - }, { "name": "mysql/mysql-server", "version": "mysql-cluster-9.3.0", @@ -679,11 +699,6 @@ "version": "v1.6.1", "date": "2025-03-15T17:29:17Z" }, - { - "name": "TasmoAdmin/TasmoAdmin", - "version": "v4.2.3", - "date": "2025-02-09T23:07:48Z" - }, { "name": "grocy/grocy", "version": "v4.5.0", @@ -744,11 +759,6 @@ "version": "v1.6.8", "date": "2025-03-25T13:33:10Z" }, - { - "name": "caddyserver/caddy", - "version": "v2.9.1", - "date": "2025-01-08T15:22:53Z" - }, { "name": "ZoeyVid/NPMplus", "version": "2025-03-24-r2", @@ -929,11 +939,6 @@ "version": "v1.5.7", "date": "2025-02-27T20:04:08Z" }, - { - "name": "cross-seed/cross-seed", - "version": "v6.11.2", - "date": "2025-02-26T14:54:49Z" - }, { "name": "silverbulletmd/silverbullet", "version": "0.10.4", @@ -944,11 +949,6 @@ "version": "v0.25.1", "date": "2025-02-25T17:30:48Z" }, - { - "name": "benzino77/tasmocompiler", - "version": "v12.5.0", - "date": "2025-02-25T14:55:50Z" - }, { "name": "schlagmichdoch/PairDrop", "version": "v1.11.2",