diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 000000000..713f73309 Binary files /dev/null and b/.gitattributes differ diff --git a/.github/CONTRIBUTOR_AND_GUIDES/ct/AppName.md b/.github/CONTRIBUTOR_AND_GUIDES/ct/AppName.md index be6c6f848..7c527b7b6 100644 --- a/.github/CONTRIBUTOR_AND_GUIDES/ct/AppName.md +++ b/.github/CONTRIBUTOR_AND_GUIDES/ct/AppName.md @@ -52,7 +52,7 @@ source <(curl -s https://raw.githubusercontent.com/[USER]/[REPO]/refs/heads/[BRA Final script: ```bash -source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) ``` > [!CAUTION] diff --git a/.github/CONTRIBUTOR_AND_GUIDES/ct/AppName.sh b/.github/CONTRIBUTOR_AND_GUIDES/ct/AppName.sh index b61262bb1..066a1c5f9 100644 --- a/.github/CONTRIBUTOR_AND_GUIDES/ct/AppName.sh +++ b/.github/CONTRIBUTOR_AND_GUIDES/ct/AppName.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2025 community-scripts ORG # Author: [YourUserName] # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -9,7 +9,7 @@ source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/m APP="[APP_NAME]" # Name of the app (e.g. Google, Adventurelog, Apache-Guacamole" var_tags="[TAGS]" -# Tags for Proxmox VE, maximum 2 pcs., no spaces allowed, separated by a semicolon ; (e.g. database | adblock;dhcp) +# Tags for Proxmox VE, maximum 2 pcs., no spaces allowed, separated by a semicolon ; (e.g. database | adblock;dhcp) var_cpu="[CPU]" # Number of cores (1-X) (e.g. 4) - default are 2 var_ram="[RAM]" @@ -83,4 +83,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}:[PORT]${CL}" +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:[PORT]${CL}" \ No newline at end of file diff --git a/.github/CONTRIBUTOR_AND_GUIDES/install/AppName-install.sh b/.github/CONTRIBUTOR_AND_GUIDES/install/AppName-install.sh index 5b3d6833b..fe506913a 100644 --- a/.github/CONTRIBUTOR_AND_GUIDES/install/AppName-install.sh +++ b/.github/CONTRIBUTOR_AND_GUIDES/install/AppName-install.sh @@ -45,10 +45,10 @@ msg_ok "Set up Database" # Setup App msg_info "Setup ${APPLICATION}" -RELEASE=$(curl -s https://api.github.com/repos/[REPO]/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') -wget -q "https://github.com/[REPO]/archive/refs/tags/${RELEASE}.zip" -unzip -q ${RELEASE}.zip -mv ${APPLICATION}-${RELEASE}/ /opt/${APPLICATION} +RELEASE=$(curl -fsSL https://api.github.com/repos/[REPO]/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') +curl -fsSL -o "${RELEASE}.zip" "https://github.com/[REPO]/archive/refs/tags/${RELEASE}.zip" +unzip -q "${RELEASE}.zip" +mv "${APPLICATION}-${RELEASE}/" "/opt/${APPLICATION}" # # # @@ -69,7 +69,7 @@ Restart=always [Install] WantedBy=multi-user.target EOF -systemctl enable -q --now ${APPLICATION}.service +systemctl enable -q --now ${APPLICATION} msg_ok "Created Service" motd_ssh diff --git a/.vscode/extensions.json b/.vscode/extensions.json index 1949e6fc5..cbdc210f0 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -2,7 +2,8 @@ "recommendations": [ "bmalehorn.shell-syntax", "timonwong.shellcheck", - "foxundermoon.shell-format" + "foxundermoon.shell-format", + "editorconfig.editorconfig" ], "unwantedRecommendations": [] } diff --git a/.vscode/settings.json b/.vscode/settings.json index be834d99a..cfc399377 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,5 +1,11 @@ { "files.associations": { "*.func": "shellscript" + }, + "files.eol": "\n", + "files.insertFinalNewline": true, + "editor.formatOnSave": true, + "editor.codeActionsOnSave": { + "source.fixAll": "explicit" } -} \ No newline at end of file +} diff --git a/CHANGELOG.md b/CHANGELOG.md index 867739c82..c8b674c2b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,249 @@ 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-07 + +### 🆕 New Scripts + + - Breaking: Hoarder > Karakeep [@MickLesk](https://github.com/MickLesk) ([#3699](https://github.com/community-scripts/ProxmoxVE/pull/3699)) + +### 🚀 Updated Scripts + + - Actual: Increase RAM and add heap-space var for nodejs [@MickLesk](https://github.com/MickLesk) ([#3713](https://github.com/community-scripts/ProxmoxVE/pull/3713)) + + - #### 🐞 Bug Fixes + + - Alpine-MariaDB: Fix Install Service startup [@MickLesk](https://github.com/MickLesk) ([#3701](https://github.com/community-scripts/ProxmoxVE/pull/3701)) + - Zitadel: Fix release tarball crawling [@tremor021](https://github.com/tremor021) ([#3716](https://github.com/community-scripts/ProxmoxVE/pull/3716)) + + - #### ✨ New Features + + - Kimai: bump php to 8.4 [@MickLesk](https://github.com/MickLesk) ([#3724](https://github.com/community-scripts/ProxmoxVE/pull/3724)) + + - #### 🔧 Refactor + + - Refactor: Zabbix, get always latest version [@MickLesk](https://github.com/MickLesk) ([#3720](https://github.com/community-scripts/ProxmoxVE/pull/3720)) + +### 🌐 Website + + - #### 📝 Script Information + + - Changed the category of Channels DVR and NextPVR [@johnsturgeon](https://github.com/johnsturgeon) ([#3729](https://github.com/community-scripts/ProxmoxVE/pull/3729)) + +## 2025-04-06 + +### 🚀 Updated Scripts + + - #### 🐞 Bug Fixes + + - Actual: Add git dependency & change yarn commands [@MickLesk](https://github.com/MickLesk) ([#3703](https://github.com/community-scripts/ProxmoxVE/pull/3703)) + - Pelican-Panel: Fix PHP 8.4 Repository [@MickLesk](https://github.com/MickLesk) ([#3700](https://github.com/community-scripts/ProxmoxVE/pull/3700)) + +### 🌐 Website + + - #### 🐞 Bug Fixes + + - Implement FAQ component and integrate it into the main page [@BramSuurdje](https://github.com/BramSuurdje) ([#3709](https://github.com/community-scripts/ProxmoxVE/pull/3709)) + +## 2025-04-05 + +### 🌐 Website + + - Bump vite from 6.2.4 to 6.2.5 in /frontend [@dependabot[bot]](https://github.com/dependabot[bot]) ([#3668](https://github.com/community-scripts/ProxmoxVE/pull/3668)) + +## 2025-04-04 + +### 🆕 New Scripts + + - meilisearch [@MickLesk](https://github.com/MickLesk) ([#3638](https://github.com/community-scripts/ProxmoxVE/pull/3638)) + +### 🚀 Updated Scripts + + - #### 🐞 Bug Fixes + + - Pelican Panel: Bump php to 8.4 [@bvdberg01](https://github.com/bvdberg01) ([#3669](https://github.com/community-scripts/ProxmoxVE/pull/3669)) + - Pterodactyl: Bump php to 8.4 [@MickLesk](https://github.com/MickLesk) ([#3655](https://github.com/community-scripts/ProxmoxVE/pull/3655)) + + - #### ✨ New Features + + - Caddy: add git for xcaddy [@MickLesk](https://github.com/MickLesk) ([#3657](https://github.com/community-scripts/ProxmoxVE/pull/3657)) + +### 🧰 Maintenance + + - #### 💾 Core + + - core: fix raw path [@MickLesk](https://github.com/MickLesk) ([#3656](https://github.com/community-scripts/ProxmoxVE/pull/3656)) + +## 2025-04-03 + +### 🚀 Updated Scripts + + - #### 🐞 Bug Fixes + + - Prowlarr: Fix Typo in URL (update_function) [@ribera96](https://github.com/ribera96) ([#3640](https://github.com/community-scripts/ProxmoxVE/pull/3640)) + - Prowlarr: Fix typo in release URL [@tremor021](https://github.com/tremor021) ([#3636](https://github.com/community-scripts/ProxmoxVE/pull/3636)) + - GoMFT: Fix the node_modules deletion command [@tremor021](https://github.com/tremor021) ([#3624](https://github.com/community-scripts/ProxmoxVE/pull/3624)) + - BookStack: Fix path to downloaded release file [@tremor021](https://github.com/tremor021) ([#3627](https://github.com/community-scripts/ProxmoxVE/pull/3627)) + + - #### ✨ New Features + + - VM: show progress bar while downloading [@MickLesk](https://github.com/MickLesk) ([#3634](https://github.com/community-scripts/ProxmoxVE/pull/3634)) + - *Arr: Move Arr apps to github release crawling and provide update functionality [@tremor021](https://github.com/tremor021) ([#3625](https://github.com/community-scripts/ProxmoxVE/pull/3625)) + +### 🧰 Maintenance + + - #### 📂 Github + + - Correct URL in contributing docs [@verbumfeit](https://github.com/verbumfeit) ([#3648](https://github.com/community-scripts/ProxmoxVE/pull/3648)) + +### 🌐 Website + + - Bump next from 15.2.3 to 15.2.4 in /frontend [@dependabot[bot]](https://github.com/dependabot[bot]) ([#3628](https://github.com/community-scripts/ProxmoxVE/pull/3628)) + + - #### 📝 Script Information + + - slskd: fix typo for config note [@MickLesk](https://github.com/MickLesk) ([#3633](https://github.com/community-scripts/ProxmoxVE/pull/3633)) + +## 2025-04-02 + +### 🆕 New Scripts + + - openziti-tunnel [@emoscardini](https://github.com/emoscardini) ([#3610](https://github.com/community-scripts/ProxmoxVE/pull/3610)) +- Alpine-Wireguard [@MickLesk](https://github.com/MickLesk) ([#3611](https://github.com/community-scripts/ProxmoxVE/pull/3611)) + +### 🚀 Updated Scripts + + - #### 🐞 Bug Fixes + + - Authelia: fix incorrect rights for email.txt [@MickLesk](https://github.com/MickLesk) ([#3612](https://github.com/community-scripts/ProxmoxVE/pull/3612)) + - Photoprism: harmonize curl [@MickLesk](https://github.com/MickLesk) ([#3601](https://github.com/community-scripts/ProxmoxVE/pull/3601)) + - Fix link in clean-lxcs.sh [@thalatamsainath](https://github.com/thalatamsainath) ([#3593](https://github.com/community-scripts/ProxmoxVE/pull/3593)) + - Fileflows: Add ImageMagick dependecy [@tremor021](https://github.com/tremor021) ([#3589](https://github.com/community-scripts/ProxmoxVE/pull/3589)) + - General fixes for several scripts [@tremor021](https://github.com/tremor021) ([#3587](https://github.com/community-scripts/ProxmoxVE/pull/3587)) + +### 🧰 Maintenance + + - #### 💾 Core + + - UI-Fix: verbose without useless space in header [@MickLesk](https://github.com/MickLesk) ([#3598](https://github.com/community-scripts/ProxmoxVE/pull/3598)) + +## 2025-04-01 + +### 🆕 New Scripts + + - Alpine Prometheus [@MickLesk](https://github.com/MickLesk) ([#3547](https://github.com/community-scripts/ProxmoxVE/pull/3547)) + +### 🚀 Updated Scripts + + - #### 🐞 Bug Fixes + + - Flaresolverr: Fix curl command [@tremor021](https://github.com/tremor021) ([#3583](https://github.com/community-scripts/ProxmoxVE/pull/3583)) + - Authentik - Fix YQ_LATEST regex [@ceres-c](https://github.com/ceres-c) ([#3565](https://github.com/community-scripts/ProxmoxVE/pull/3565)) + - Fileflows: Fix update dependencies [@tremor021](https://github.com/tremor021) ([#3577](https://github.com/community-scripts/ProxmoxVE/pull/3577)) + - CheckMK: Increase Disk size [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#3559](https://github.com/community-scripts/ProxmoxVE/pull/3559)) + - switch arr lxc's (lidarr,-prowlarr,-radarr,-readarr,-whisparr) to curl -fsSL [@MickLesk](https://github.com/MickLesk) ([#3554](https://github.com/community-scripts/ProxmoxVE/pull/3554)) + + - #### 💥 Breaking Changes + + - Replace wget with curl -fsSL, normalize downloads, and prep for IPv6 [@MickLesk](https://github.com/MickLesk) ([#3455](https://github.com/community-scripts/ProxmoxVE/pull/3455)) + + - #### 🔧 Refactor + + - Fixes and standard enforcement [@tremor021](https://github.com/tremor021) ([#3564](https://github.com/community-scripts/ProxmoxVE/pull/3564)) + +### 🌐 Website + + - Update metadata inside layout.tsx for better SEO [@BramSuurdje](https://github.com/BramSuurdje) ([#3570](https://github.com/community-scripts/ProxmoxVE/pull/3570)) +- Bump vite from 5.4.14 to 5.4.16 in /frontend [@dependabot[bot]](https://github.com/dependabot[bot]) ([#3549](https://github.com/community-scripts/ProxmoxVE/pull/3549)) + + - #### ✨ New Features + + - Refactor ScriptItem and Buttons components to enhance layout and integrate dropdown for links. Update InterFaces component for improved styling and structure. [@BramSuurdje](https://github.com/BramSuurdje) ([#3567](https://github.com/community-scripts/ProxmoxVE/pull/3567)) + +## 2025-03-31 + +### 🆕 New Scripts + + - slskd [@vhsdream](https://github.com/vhsdream) ([#3516](https://github.com/community-scripts/ProxmoxVE/pull/3516)) + +### 🚀 Updated Scripts + + - #### 🐞 Bug Fixes + + - The Lounge: Fix sqlite3 failing to build [@tremor021](https://github.com/tremor021) ([#3542](https://github.com/community-scripts/ProxmoxVE/pull/3542)) + - 2FAuth: Update PHP to 8.3 [@BrockHumblet](https://github.com/BrockHumblet) ([#3510](https://github.com/community-scripts/ProxmoxVE/pull/3510)) + - GoMFT: Update Curl Path [@MickLesk](https://github.com/MickLesk) ([#3537](https://github.com/community-scripts/ProxmoxVE/pull/3537)) + - slskd: fix broken curl for soularr [@MickLesk](https://github.com/MickLesk) ([#3533](https://github.com/community-scripts/ProxmoxVE/pull/3533)) + - Docmost: Bump NodeJS to 22 & fixed pnpm [@MickLesk](https://github.com/MickLesk) ([#3521](https://github.com/community-scripts/ProxmoxVE/pull/3521)) + - Tianji: Bump NodeJS to V22 [@MickLesk](https://github.com/MickLesk) ([#3519](https://github.com/community-scripts/ProxmoxVE/pull/3519)) + + - #### ✨ New Features + + - NPMPlus: update function & better create handling (user/password) [@MickLesk](https://github.com/MickLesk) ([#3520](https://github.com/community-scripts/ProxmoxVE/pull/3520)) + + - #### 🔧 Refactor + + - Remove old `.jar` versions of Stirling-PDF [@JcMinarro](https://github.com/JcMinarro) ([#3512](https://github.com/community-scripts/ProxmoxVE/pull/3512)) + +### 🧰 Maintenance + + - #### 💾 Core + + - core: fix empty header if header in repo exist [@MickLesk](https://github.com/MickLesk) ([#3536](https://github.com/community-scripts/ProxmoxVE/pull/3536)) + +### 🌐 Website + + - #### ✨ New Features + + - Change Frontend Version Info [@MickLesk](https://github.com/MickLesk) ([#3527](https://github.com/community-scripts/ProxmoxVE/pull/3527)) + + - #### 📝 Script Information + + - HomeAssistant (Container): Better Portainer explanation [@MickLesk](https://github.com/MickLesk) ([#3518](https://github.com/community-scripts/ProxmoxVE/pull/3518)) + +## 2025-03-30 + +### 🚀 Updated Scripts + + - #### 🐞 Bug Fixes + + - Open WebUI: Fix Ollama update logic [@tremor021](https://github.com/tremor021) ([#3506](https://github.com/community-scripts/ProxmoxVE/pull/3506)) + - GoMFT: Add frontend build procedure [@tremor021](https://github.com/tremor021) ([#3499](https://github.com/community-scripts/ProxmoxVE/pull/3499)) + + - #### ✨ New Features + + - Open WebUI: Add Ollama update check [@tremor021](https://github.com/tremor021) ([#3478](https://github.com/community-scripts/ProxmoxVE/pull/3478)) + +## 2025-03-29 + +### 🆕 New Scripts + + - Alpine MariaDB [@MickLesk](https://github.com/MickLesk) ([#3456](https://github.com/community-scripts/ProxmoxVE/pull/3456)) + +### 🚀 Updated Scripts + + - #### 🐞 Bug Fixes + + - Komodo: Fix wrong sed text [@tremor021](https://github.com/tremor021) ([#3491](https://github.com/community-scripts/ProxmoxVE/pull/3491)) + - GoMFT: Fix release archive naming [@tremor021](https://github.com/tremor021) ([#3483](https://github.com/community-scripts/ProxmoxVE/pull/3483)) + - Homepage: Fix release parsing [@tremor021](https://github.com/tremor021) ([#3484](https://github.com/community-scripts/ProxmoxVE/pull/3484)) + - Netdata: Fix debian-keyring dependency missing [@tremor021](https://github.com/tremor021) ([#3477](https://github.com/community-scripts/ProxmoxVE/pull/3477)) + - ErsatzTV: Fix temp file reference [@tremor021](https://github.com/tremor021) ([#3476](https://github.com/community-scripts/ProxmoxVE/pull/3476)) + - Komodo: Fix compose.env [@tremor021](https://github.com/tremor021) ([#3466](https://github.com/community-scripts/ProxmoxVE/pull/3466)) + +## 2025-03-28 + +### 🆕 New Scripts + + - Alpine Node-RED [@MickLesk](https://github.com/MickLesk) ([#3457](https://github.com/community-scripts/ProxmoxVE/pull/3457)) + +### 🚀 Updated Scripts + + - #### 🐞 Bug Fixes + + - GoMFT: Fix release grep [@tremor021](https://github.com/tremor021) ([#3462](https://github.com/community-scripts/ProxmoxVE/pull/3462)) + - ErsatzTV: Fix path in update function [@tremor021](https://github.com/tremor021) ([#3463](https://github.com/community-scripts/ProxmoxVE/pull/3463)) + ## 2025-03-27 ### 🚀 Updated Scripts @@ -2435,7 +2678,7 @@ All LXC instances created using this repository come pre-installed with Midnight - **Automatic Update of Repository:** The update function now uses the new repository `community-scripts/ProxmoxVE` for Debian/Ubuntu LXC containers. ```bash - bash -c "$(wget -qLO - https://github.com/community-scripts/ProxmoxVE/raw/main/misc/update-repo.sh)" + bash -c "$(curl -fsSL https://github.com/community-scripts/ProxmoxVE/raw/main/misc/update-repo.sh)" ## 2024-10-31 diff --git a/ct/2fauth.sh b/ct/2fauth.sh index 6a88d6a9e..89a0ade64 100644 --- a/ct/2fauth.sh +++ b/ct/2fauth.sh @@ -31,7 +31,7 @@ function update_script() { fi # Crawling the new version and checking whether an update is required - RELEASE=$(curl -s https://api.github.com/repos/Bubka/2FAuth/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') + RELEASE=$(curl -fsSL https://api.github.com/repos/Bubka/2FAuth/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') if [[ "${RELEASE}" != "$(cat /opt/2fauth_version.txt)" ]] || [[ ! -f /opt/2fauth_version.txt ]]; then msg_info "Updating $APP to ${RELEASE}" @@ -41,12 +41,27 @@ function update_script() { # Creating Backup msg_info "Creating Backup" mv "/opt/2fauth" "/opt/2fauth-backup" + if ! dpkg -l | grep -q 'php8.3'; then + cp /etc/nginx/conf.d/2fauth.conf /etc/nginx/conf.d/2fauth.conf.bak + fi msg_ok "Backup Created" + # Upgrade PHP + if ! dpkg -l | grep -q 'php8.3'; then + $STD apt-get install -y \ + lsb-release \ + gpg + curl -fsSL https://packages.sury.org/php/apt.gpg | gpg --dearmor -o /usr/share/keyrings/deb.sury.org-php.gpg + echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list + $STD apt-get update + $STD apt-get install -y php8.3-{bcmath,common,ctype,curl,fileinfo,fpm,gd,mbstring,mysql,xml,cli,intl} + sed -i 's/php8.2/php8.3/g' /etc/nginx/conf.d/2fauth.conf + fi + # Execute Update - wget -q "https://github.com/Bubka/2FAuth/archive/refs/tags/${RELEASE}.zip" + curl -fsSL -o "${RELEASE}.zip" "https://github.com/Bubka/2FAuth/archive/refs/tags/${RELEASE}.zip" unzip -q "${RELEASE}.zip" - mv "2FAuth-${RELEASE//v}/" "/opt/2fauth" + mv "2FAuth-${RELEASE//v/}/" "/opt/2fauth" mv "/opt/2fauth-backup/.env" "/opt/2fauth/.env" mv "/opt/2fauth-backup/storage" "/opt/2fauth/storage" cd "/opt/2fauth" || return @@ -59,9 +74,14 @@ function update_script() { php artisan 2fauth:install + $STD systemctl restart nginx + # Cleaning up msg_info "Cleaning Up" rm -rf "v${RELEASE}.zip" + if dpkg -l | grep -q 'php8.2'; then + $STD apt-get remove --purge -y php8.2* + fi $STD apt-get -y autoremove $STD apt-get -y autoclean msg_ok "Cleanup Completed" @@ -82,4 +102,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}:80${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:80${CL}" diff --git a/ct/actualbudget.sh b/ct/actualbudget.sh index acdf97dca..a20a695d6 100644 --- a/ct/actualbudget.sh +++ b/ct/actualbudget.sh @@ -8,8 +8,8 @@ source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/b APP="Actual Budget" var_tags="finance" var_cpu="2" -var_ram="2048" -var_disk="4" +var_ram="8192" +var_disk="7" var_os="debian" var_version="12" var_unprivileged="1" @@ -20,52 +20,59 @@ color catch_errors function update_script() { - header_info - check_container_storage - check_container_resources + header_info + check_container_storage + check_container_resources - if [[ ! -d /opt/actualbudget ]]; then - msg_error "No ${APP} Installation Found!" - exit + if [[ ! -d /opt/actualbudget ]]; then + msg_error "No ${APP} Installation Found!" + exit + fi + + RELEASE=$(curl -fsSL https://api.github.com/repos/actualbudget/actual/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') + if [[ ! -f /opt/actualbudget_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/actualbudget_version.txt)" ]]; then + msg_info "Stopping ${APP}" + systemctl stop actualbudget + msg_ok "${APP} Stopped" + + if ! command -v git &>/dev/null; then + msg_info "Installing git" + $STD apt-get update + $STD apt-get install -y git + msg_ok "Installed git" fi - RELEASE=$(curl -s https://api.github.com/repos/actualbudget/actual/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') - if [[ ! -f /opt/actualbudget_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/actualbudget_version.txt)" ]]; then - msg_info "Stopping ${APP}" - systemctl stop actualbudget - msg_ok "${APP} Stopped" + msg_info "Updating ${APP} to ${RELEASE}" + cd /tmp || exit + curl -fsSL "https://github.com/actualbudget/actual/archive/refs/tags/v${RELEASE}.tar.gz" -o "v${RELEASE}.tar.gz" - msg_info "Updating ${APP} to ${RELEASE}" - cd /tmp - wget -q https://github.com/actualbudget/actual/archive/refs/tags/v${RELEASE}.tar.gz + mv /opt/actualbudget /opt/actualbudget_bak + tar -xzf "v${RELEASE}.tar.gz" + mv "actual-${RELEASE}" /opt/actualbudget - mv /opt/actualbudget /opt/actualbudget_bak - tar -xzf "v${RELEASE}.tar.gz" - mv actual-${RELEASE} /opt/actualbudget + mkdir -p /opt/actualbudget-data/{server-files,upload,migrate,user-files,migrations,config} + for dir in server-files .migrate user-files migrations; do + if [[ -d /opt/actualbudget_bak/$dir ]]; then + mv /opt/actualbudget_bak/$dir/* /opt/actualbudget-data/$dir/ || true + fi + done + if [[ -f /opt/actualbudget-data/migrate/.migrations ]]; then + sed -i 's/null/1732656575219/g' /opt/actualbudget-data/migrate/.migrations + sed -i 's/null/1732656575220/g' /opt/actualbudget-data/migrate/.migrations + fi + if [[ -f /opt/actualbudget/server-files/account.sqlite ]] && [[ ! -f /opt/actualbudget-data/server-files/account.sqlite ]]; then + mv /opt/actualbudget/server-files/account.sqlite /opt/actualbudget-data/server-files/account.sqlite + fi - mkdir -p /opt/actualbudget-data/{server-files,upload,migrate,user-files,migrations,config} - for dir in server-files .migrate user-files migrations; do - if [[ -d /opt/actualbudget_bak/$dir ]]; then - mv /opt/actualbudget_bak/$dir/* /opt/actualbudget-data/$dir/ || true - fi - done - if [[ -f /opt/actualbudget-data/migrate/.migrations ]]; then - sed -i 's/null/1732656575219/g' /opt/actualbudget-data/migrate/.migrations - sed -i 's/null/1732656575220/g' /opt/actualbudget-data/migrate/.migrations - fi - if [[ -f /opt/actualbudget/server-files/account.sqlite ]] && [[ ! -f /opt/actualbudget-data/server-files/account.sqlite ]]; then - mv /opt/actualbudget/server-files/account.sqlite /opt/actualbudget-data/server-files/account.sqlite - fi + if [[ -f /opt/actualbudget_bak/selfhost.key ]]; then + mv /opt/actualbudget_bak/selfhost.key /opt/actualbudget/selfhost.key + mv /opt/actualbudget_bak/selfhost.crt /opt/actualbudget/selfhost.crt + fi - if [[ -f /opt/actualbudget_bak/selfhost.key ]]; then - mv /opt/actualbudget_bak/selfhost.key /opt/actualbudget/selfhost.key - mv /opt/actualbudget_bak/selfhost.crt /opt/actualbudget/selfhost.crt - fi - - if [[ -f /opt/actualbudget_bak/.env ]]; then - mv /opt/actualbudget_bak/.env /opt/actualbudget-data/.env - else - cat </opt/actualbudget-data/.env + if [[ -f /opt/actualbudget_bak/.env ]]; then + mv /opt/actualbudget_bak/.env /opt/actualbudget-data/.env + else + cat </opt/actualbudget-data/.env ACTUAL_UPLOAD_DIR=/opt/actualbudget-data/upload ACTUAL_DATA_DIR=/opt/actualbudget-data ACTUAL_SERVER_FILES_DIR=/opt/actualbudget-data/server-files @@ -75,14 +82,17 @@ ACTUAL_TRUSTED_PROXIES="10.0.0.0/8,172.16.0.0/12,192.168.0.0/16,127.0.0.1/32,::1 ACTUAL_HTTPS_KEY=/opt/actualbudget/selfhost.key ACTUAL_HTTPS_CERT=/opt/actualbudget/selfhost.crt EOF - fi - cd /opt/actualbudget - $STD yarn workspaces focus @actual-app/sync-server --production - echo "${RELEASE}" >/opt/actualbudget_version.txt - msg_ok "Updated ${APP}" + fi + cd /opt/actualbudget || exit + export NODE_OPTIONS="--max_old_space_size=4096" + $STD yarn install + $STD yarn run build:server + #$STD yarn workspaces focus @actual-app/sync-server --production + echo "${RELEASE}" >/opt/actualbudget_version.txt + msg_ok "Updated ${APP}" - msg_info "Starting ${APP}" - cat </etc/systemd/system/actualbudget.service + msg_info "Starting ${APP}" + cat </etc/systemd/system/actualbudget.service [Unit] Description=Actual Budget Service After=network.target @@ -101,19 +111,19 @@ RestartSec=10 WantedBy=multi-user.target EOF - systemctl daemon-reload - systemctl start actualbudget - msg_ok "Started ${APP}" + systemctl daemon-reload + systemctl start actualbudget + msg_ok "Started ${APP}" - msg_info "Cleaning Up" - rm -rf /opt/actualbudget_bak - rm -rf "/tmp/v${RELEASE}.tar.gz" - msg_ok "Cleaned" - msg_ok "Updated Successfully" - else - msg_ok "No update required. ${APP} is already at ${RELEASE}" - fi - exit + msg_info "Cleaning Up" + rm -rf /opt/actualbudget_bak + rm -rf "/tmp/v${RELEASE}.tar.gz" + msg_ok "Cleaned" + msg_ok "Updated Successfully" + else + msg_ok "No update required. ${APP} is already at ${RELEASE}" + fi + exit } start diff --git a/ct/adventurelog.sh b/ct/adventurelog.sh index 8136ee204..8ee2080af 100644 --- a/ct/adventurelog.sh +++ b/ct/adventurelog.sh @@ -27,7 +27,7 @@ function update_script() { msg_error "No ${APP} Installation Found!" exit fi - RELEASE=$(curl -s https://api.github.com/repos/seanmorley15/AdventureLog/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') + RELEASE=$(curl -fsSL https://api.github.com/repos/seanmorley15/AdventureLog/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 adventurelog-backend @@ -36,7 +36,7 @@ function update_script() { msg_info "Updating ${APP} to ${RELEASE}" mv /opt/adventurelog/ /opt/adventurelog-backup/ - wget -qO /opt/v${RELEASE}.zip "https://github.com/seanmorley15/AdventureLog/archive/refs/tags/v${RELEASE}.zip" + curl -fsSL -o /opt/v${RELEASE}.zip "https://github.com/seanmorley15/AdventureLog/archive/refs/tags/v${RELEASE}.zip" unzip -q /opt/v${RELEASE}.zip -d /opt/ mv /opt/AdventureLog-${RELEASE} /opt/adventurelog diff --git a/ct/agentdvr.sh b/ct/agentdvr.sh index 2c6766c1a..166536320 100644 --- a/ct/agentdvr.sh +++ b/ct/agentdvr.sh @@ -38,4 +38,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}:8090${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8090${CL}" diff --git a/ct/alpine-gitea.sh b/ct/alpine-gitea.sh index 47c402bd8..e15541ad7 100644 --- a/ct/alpine-gitea.sh +++ b/ct/alpine-gitea.sh @@ -42,4 +42,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}" +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}" \ No newline at end of file diff --git a/ct/alpine-it-tools.sh b/ct/alpine-it-tools.sh index 40d9d087c..e107c2d4f 100644 --- a/ct/alpine-it-tools.sh +++ b/ct/alpine-it-tools.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2025 community-scripts ORG # Author: nicedevil007 (NiceDevil) # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -24,28 +24,28 @@ function update_script() { check_container_storage check_container_resources -if [ ! -d /usr/share/nginx/html ]; then - msg_error "No ${APP} Installation Found!" - exit 1 -fi + if [ ! -d /usr/share/nginx/html ]; then + msg_error "No ${APP} Installation Found!" + exit 1 + fi -RELEASE=$(curl -s https://api.github.com/repos/CorentinTh/it-tools/releases/latest | grep '"tag_name":' | cut -d '"' -f4) -if [ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ] || [ ! -f /opt/${APP}_version.txt ]; then - DOWNLOAD_URL="https://github.com/CorentinTh/it-tools/releases/download/${RELEASE}/it-tools-${RELEASE#v}.zip" - msg_info "Updating ${APP} LXC" - curl -fsSL -o it-tools.zip "$DOWNLOAD_URL" - mkdir -p /usr/share/nginx/html - rm -rf /usr/share/nginx/html/* - unzip -q it-tools.zip -d /tmp/it-tools - cp -r /tmp/it-tools/dist/* /usr/share/nginx/html - rm -rf /tmp/it-tools - rm -f it-tools.zip - msg_ok "Updated Successfully" -else - msg_ok "No update required. ${APP} is already at ${RELEASE}" -fi + RELEASE=$(curl -fsSL https://api.github.com/repos/CorentinTh/it-tools/releases/latest | grep '"tag_name":' | cut -d '"' -f4) + if [ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ] || [ ! -f /opt/${APP}_version.txt ]; then + DOWNLOAD_URL="https://github.com/CorentinTh/it-tools/releases/download/${RELEASE}/it-tools-${RELEASE#v}.zip" + msg_info "Updating ${APP} LXC" + curl -fsSL -o it-tools.zip "$DOWNLOAD_URL" + mkdir -p /usr/share/nginx/html + rm -rf /usr/share/nginx/html/* + unzip -q it-tools.zip -d /tmp/it-tools + cp -r /tmp/it-tools/dist/* /usr/share/nginx/html + rm -rf /tmp/it-tools + rm -f it-tools.zip + msg_ok "Updated Successfully" + else + msg_ok "No update required. ${APP} is already at ${RELEASE}" + fi -exit 0 + exit 0 } start @@ -55,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 IP:${CL}" -echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}" +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}" \ No newline at end of file diff --git a/ct/alpine-mariadb.sh b/ct/alpine-mariadb.sh new file mode 100644 index 000000000..aa6337283 --- /dev/null +++ b/ct/alpine-mariadb.sh @@ -0,0 +1,46 @@ +#!/usr/bin/env bash +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +# Copyright (c) 2021-2025 community-scripts ORG +# Author: MickLesk (CanbiZ) +# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE +# Source: https://mariadb.org + +APP="Alpine-MariaDB" +var_tags="${var_tags:-alpine;database}" +var_cpu="${var_cpu:-1}" +var_ram="${var_ram:-256}" +var_disk="${var_disk:-1}" +var_os="${var_os:-alpine}" +var_version="${var_version:-3.21}" +var_unprivileged="${var_unprivileged:-1}" + +header_info "$APP" +variables +color +catch_errors + +function update_script() { + msg_info "Updating Alpine Packages" + $STD apk update + $STD apk upgrade + msg_ok "Updated Alpine Packages" + + msg_info "Updating MariaDB" + $STD apk upgrade mariadb mariadb-client + msg_ok "Updated MariaDB" + + msg_info "Restarting MariaDB" + $STD rc-service mariadb restart + msg_ok "Restarted MariaDB" + + exit 0 +} + +start +build_container +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 IP:${CL}" +echo -e "${TAB}${GATEWAY}${BGN}${IP}:3306${CL}" diff --git a/ct/alpine-nextcloud.sh b/ct/alpine-nextcloud.sh index 0335cea69..a3b5413a3 100644 --- a/ct/alpine-nextcloud.sh +++ b/ct/alpine-nextcloud.sh @@ -14,7 +14,7 @@ var_os="alpine" var_version="3.21" var_unprivileged="1" -header_info "$APP" +header_info "$APP" variables color catch_errors @@ -28,10 +28,10 @@ function update_script() { apk add -q newt fi while true; do - CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "SUPPORT" --radiolist --cancel-button Exit-Script "Spacebar = Select" 11 58 3 \ + CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "SUPPORT" --radiolist --cancel-button Exit-Script "Spacebar = Select" 11 58 3 \ "1" "Nextcloud Login Credentials" ON \ "2" "Renew Self-signed Certificate" OFF \ - 3>&1 1>&2 2>&3) + 3>&1 1>&2 2>&3) exit_status=$? if [ $exit_status == 1 ]; then clear @@ -44,7 +44,7 @@ function update_script() { exit ;; 2) - openssl req -x509 -nodes -days 365 -newkey rsa:4096 -keyout /etc/ssl/private/nextcloud-selfsigned.key -out /etc/ssl/certs/nextcloud-selfsigned.crt -subj "/C=US/O=Nextcloud/OU=Domain Control Validated/CN=nextcloud.local" > /dev/null 2>&1 + openssl req -x509 -nodes -days 365 -newkey rsa:4096 -keyout /etc/ssl/private/nextcloud-selfsigned.key -out /etc/ssl/certs/nextcloud-selfsigned.crt -subj "/C=US/O=Nextcloud/OU=Domain Control Validated/CN=nextcloud.local" >/dev/null 2>&1 rc-service nginx restart exit ;; diff --git a/ct/alpine-node-red.sh b/ct/alpine-node-red.sh new file mode 100644 index 000000000..c9afc6888 --- /dev/null +++ b/ct/alpine-node-red.sh @@ -0,0 +1,50 @@ +#!/usr/bin/env bash +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +# Copyright (c) 2021-2025 community-scripts ORG +# Author: MickLesk (CanbiZ) +# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE +# Source: https://nodered.org + +APP="Alpine-Node-RED" +var_tags="${var_tags:-alpine;automation}" +var_cpu="${var_cpu:-1}" +var_ram="${var_ram:-256}" +var_disk="${var_disk:-1}" +var_os="${var_os:-alpine}" +var_version="${var_version:-3.21}" +var_unprivileged="${var_unprivileged:-1}" + +header_info "$APP" +variables +color +catch_errors + +function update_script() { + msg_info "Updating Alpine Packages" + $STD apk update + $STD apk upgrade + msg_ok "Updated Alpine Packages" + + msg_info "Updating Node.js and npm" + $STD apk upgrade nodejs npm + msg_ok "Updated Node.js and npm" + + msg_info "Updating Node-RED" + $STD npm install -g --unsafe-perm node-red + msg_ok "Updated Node-RED" + + msg_info "Restarting Node-RED" + $STD rc-service nodered restart + msg_ok "Restarted Node-RED" + + exit 0 +} + +start +build_container +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}:1880${CL}" diff --git a/ct/alpine-prometheus.sh b/ct/alpine-prometheus.sh new file mode 100644 index 000000000..bb3066edc --- /dev/null +++ b/ct/alpine-prometheus.sh @@ -0,0 +1,46 @@ +#!/usr/bin/env bash +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +# Copyright (c) 2021-2025 community-scripts ORG +# Author: MickLesk (CanbiZ) +# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE +# Source: https://prometheus.io/ + +APP="Alpine-Prometheus" +var_tags="${var_tags:-alpine;monitoring}" +var_cpu="${var_cpu:-1}" +var_ram="${var_ram:-256}" +var_disk="${var_disk:-1}" +var_os="${var_os:-alpine}" +var_version="${var_version:-3.21}" +var_unprivileged="${var_unprivileged:-1}" + +header_info "$APP" +variables +color +catch_errors + +function update_script() { + msg_info "Updating Alpine Packages" + $STD apk update + $STD apk upgrade + msg_ok "Updated Alpine Packages" + + msg_info "Updating Prometheus" + $STD apk upgrade prometheus + msg_ok "Updated Prometheus" + + msg_info "Restarting Prometheus" + $STD rc-service prometheus restart + msg_ok "Restarted Prometheus" + + exit 0 +} + +start +build_container +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}:9090${CL}" diff --git a/ct/alpine-redis.sh b/ct/alpine-redis.sh index 2080461ca..256e0223a 100644 --- a/ct/alpine-redis.sh +++ b/ct/alpine-redis.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2025 community-scripts ORG # Author: MickLesk (CanbiZ) # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE diff --git a/ct/alpine-wireguard.sh b/ct/alpine-wireguard.sh new file mode 100644 index 000000000..48277edc7 --- /dev/null +++ b/ct/alpine-wireguard.sh @@ -0,0 +1,50 @@ +#!/usr/bin/env bash +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +# Copyright (c) 2021-2025 community-scripts ORG +# Author: MickLesk (CanbiZ) +# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE +# Source: https://www.wireguard.com/ + +APP="Alpine-Wireguard" +var_tags="${var_tags:-alpine;vpn}" +var_cpu="${var_cpu:-1}" +var_ram="${var_ram:-256}" +var_disk="${var_disk:-1}" +var_os="${var_os:-alpine}" +var_version="${var_version:-3.21}" +var_unprivileged="${var_unprivileged:-1}" + +header_info "$APP" +variables +color +catch_errors + +function update_script() { + msg_info "Updating Alpine Packages" + $STD apk update + $STD apk upgrade + msg_ok "Updated Alpine Packages" + + msg_info "update wireguard-tools" + $STD apk add --no-cache --upgrade wireguard-tools + msg_ok "wireguard-tools updated" + + if [[ -d /etc/wgdashboard/src ]]; then + msg_info "update WGDashboard" + cd /etc/wgdashboard/src || exit + $STD echo "y" | ./wgd.sh update + $STD ./wgd.sh start + msg_ok "WGDashboard updated" + fi + + exit 0 +} + +start +build_container +description + +msg_ok "Completed Successfully!\n" +echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" +echo -e "${INFO}${YW} WGDashboard Access it using the following URL:${CL}" +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:10086${CL}" diff --git a/ct/apache-cassandra.sh b/ct/apache-cassandra.sh index d2134f929..07ce22976 100644 --- a/ct/apache-cassandra.sh +++ b/ct/apache-cassandra.sh @@ -14,7 +14,6 @@ var_os="debian" var_version="12" var_unprivileged="1" - header_info "$APP" variables color @@ -37,4 +36,4 @@ build_container description msg_ok "Completed Successfully!\n" -echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" \ No newline at end of file +echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" diff --git a/ct/apache-guacamole.sh b/ct/apache-guacamole.sh index 9fa7a7161..45b87fc47 100644 --- a/ct/apache-guacamole.sh +++ b/ct/apache-guacamole.sh @@ -39,4 +39,3 @@ 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}:8080/guacamole${CL}" - diff --git a/ct/apache-tika.sh b/ct/apache-tika.sh index 98dbf266e..d9a902254 100755 --- a/ct/apache-tika.sh +++ b/ct/apache-tika.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2025 community-scripts ORG # Author: Andy Grunwald (andygrunwald) # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -27,7 +27,7 @@ function update_script() { msg_error "No ${APP} Installation Found!" exit fi - RELEASE="$(wget -qO- https://dlcdn.apache.org/tika/ | grep -oP '(?<=href=")[0-9]+\.[0-9]+\.[0-9]+(?=/")' | sort -V | tail -n1)" + RELEASE="$(curl -fsSL https://dlcdn.apache.org/tika/ | grep -oP '(?<=href=")[0-9]+\.[0-9]+\.[0-9]+(?=/")' | sort -V | tail -n1)" if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then msg_info "Stopping ${APP}" systemctl stop apache-tika @@ -35,7 +35,7 @@ function update_script() { msg_info "Updating ${APP} to v${RELEASE}" cd /opt/apache-tika - wget -q "https://dlcdn.apache.org/tika/${RELEASE}/tika-server-standard-${RELEASE}.jar" + curl -fsSL -o tika-server-standard-${RELEASE}.jar "https://dlcdn.apache.org/tika/${RELEASE}/tika-server-standard-${RELEASE}.jar" mv --force tika-server-standard.jar tika-server-standard-prev-version.jar mv tika-server-standard-${RELEASE}.jar tika-server-standard.jar echo "${RELEASE}" >/opt/${APP}_version.txt diff --git a/ct/apache-tomcat.sh b/ct/apache-tomcat.sh index 799b48cf4..eea276e5a 100644 --- a/ct/apache-tomcat.sh +++ b/ct/apache-tomcat.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2025 community-scripts ORG # Author: MickLesk (Canbiz) # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -38,4 +38,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}:8080${CL}" +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8080${CL}" \ No newline at end of file diff --git a/ct/authelia.sh b/ct/authelia.sh index de6eb07ca..11d3acb05 100644 --- a/ct/authelia.sh +++ b/ct/authelia.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2025 community-scripts ORG # Author: thost96 (thost96) # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -25,13 +25,16 @@ function update_script() { header_info check_container_storage check_container_resources - if [[ ! -d "/etc/authelia/" ]]; then msg_error "No ${APP} Installation Found!"; exit; fi - RELEASE=$(curl -s https://api.github.com/repos/authelia/authelia/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') - if [[ "${RELEASE}" != "$(/usr/bin/authelia -v | awk '{print substr($3, 2, length($2)) }' )" ]]; then + if [[ ! -d "/etc/authelia/" ]]; then + msg_error "No ${APP} Installation Found!" + exit + fi + RELEASE=$(curl -fsSL https://api.github.com/repos/authelia/authelia/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') + if [[ "${RELEASE}" != "$(/usr/bin/authelia -v | awk '{print substr($3, 2, length($2)) }')" ]]; then msg_info "Updating $APP to ${RELEASE}" $STD apt-get update $STD apt-get -y upgrade - wget -q "https://github.com/authelia/authelia/releases/download/${RELEASE}/authelia_${RELEASE}_amd64.deb" + curl -fsSL "https://github.com/authelia/authelia/releases/download/${RELEASE}/authelia_${RELEASE}_amd64.deb" -o $(basename "https://github.com/authelia/authelia/releases/download/${RELEASE}/authelia_${RELEASE}_amd64.deb") $STD dpkg -i "authelia_${RELEASE}_amd64.deb" msg_info "Cleaning Up" rm -f "authelia_${RELEASE}_amd64.deb" diff --git a/ct/authentik.sh b/ct/authentik.sh index 18e7cc365..64682929f 100644 --- a/ct/authentik.sh +++ b/ct/authentik.sh @@ -27,7 +27,7 @@ function update_script() { msg_error "No ${APP} Installation Found!" exit fi - RELEASE=$(curl -s https://api.github.com/repos/goauthentik/authentik/releases/latest | grep "tarball_url" | awk '{print substr($2, 2, length($2)-3)}') + RELEASE=$(curl -fsSL https://api.github.com/repos/goauthentik/authentik/releases/latest | grep "tarball_url" | awk '{print substr($2, 2, length($2)-3)}') if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then msg_info "Stopping ${APP}" systemctl stop authentik-server @@ -36,7 +36,7 @@ function update_script() { msg_info "Building ${APP} website" mkdir -p /opt/authentik - wget -qO authentik.tar.gz "${RELEASE}" + curl -fsSL "${RELEASE}" -o "authentik.tar.gz" tar -xzf authentik.tar.gz -C /opt/authentik --strip-components 1 --overwrite rm -rf authentik.tar.gz cd /opt/authentik/website diff --git a/ct/autobrr.sh b/ct/autobrr.sh index 421526bc0..d526e0bf1 100644 --- a/ct/autobrr.sh +++ b/ct/autobrr.sh @@ -33,7 +33,7 @@ function update_script() { msg_info "Updating ${APP} LXC" rm -rf /usr/local/bin/* - wget -q $(curl -s https://api.github.com/repos/autobrr/autobrr/releases/latest | grep download | grep linux_x86_64 | cut -d\" -f4) + curl -fsSL "$(curl -fsSL https://api.github.com/repos/autobrr/autobrr/releases/latest | grep download | grep linux_x86_64 | cut -d\" -f4)" -o $(basename "$(curl -fsSL https://api.github.com/repos/autobrr/autobrr/releases/latest | grep download | grep linux_x86_64 | cut -d\" -f4)") tar -C /usr/local/bin -xzf autobrr*.tar.gz rm -rf autobrr*.tar.gz msg_ok "Updated ${APP} LXC" @@ -52,4 +52,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}:7474${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:7474${CL}" diff --git a/ct/baikal.sh b/ct/baikal.sh index c9bac41e0..92fed5849 100644 --- a/ct/baikal.sh +++ b/ct/baikal.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2025 community-scripts ORG # Author: bvdberg01 # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -27,7 +27,7 @@ function update_script() { msg_error "No ${APP} Installation Found!" exit fi - RELEASE=$(curl -s https://api.github.com/repos/sabre-io/Baikal/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') + RELEASE=$(curl -fsSL https://api.github.com/repos/sabre-io/Baikal/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then msg_info "Stopping Service" systemctl stop apache2 @@ -35,7 +35,7 @@ function update_script() { msg_info "Updating ${APP} to v${RELEASE}" cd /opt - wget -q "https://github.com/sabre-io/baikal/releases/download/${RELEASE}/baikal-${RELEASE}.zip" + curl -fsSL "https://github.com/sabre-io/baikal/releases/download/${RELEASE}/baikal-${RELEASE}.zip" -o $(basename "https://github.com/sabre-io/baikal/releases/download/${RELEASE}/baikal-${RELEASE}.zip") mv /opt/baikal /opt/baikal-backup unzip -o -q "baikal-${RELEASE}.zip" cp -r /opt/baikal-backup/config/baikal.yaml /opt/baikal/config/ diff --git a/ct/barcode-buddy.sh b/ct/barcode-buddy.sh index 3b6d36e0a..306610d31 100644 --- a/ct/barcode-buddy.sh +++ b/ct/barcode-buddy.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2025 community-scripts ORG # Author: bvdberg01 # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -27,7 +27,7 @@ function update_script() { msg_error "No ${APP} Installation Found!" exit fi - RELEASE=$(curl -s https://api.github.com/repos/Forceu/barcodebuddy/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') + RELEASE=$(curl -fsSL https://api.github.com/repos/Forceu/barcodebuddy/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" systemctl stop apache2 @@ -37,7 +37,7 @@ function update_script() { msg_info "Updating ${APP} to v${RELEASE}" cd /opt mv /opt/barcodebuddy/ /opt/barcodebuddy-backup - wget -q "https://github.com/Forceu/barcodebuddy/archive/refs/tags/v${RELEASE}.zip" + curl -fsSL "https://github.com/Forceu/barcodebuddy/archive/refs/tags/v${RELEASE}.zip" -o $(basename "https://github.com/Forceu/barcodebuddy/archive/refs/tags/v${RELEASE}.zip") unzip -q "v${RELEASE}.zip" mv "/opt/barcodebuddy-${RELEASE}" /opt/barcodebuddy cp -r /opt/barcodebuddy-backup/data/. /opt/barcodebuddy/data diff --git a/ct/bazarr.sh b/ct/bazarr.sh old mode 100755 new mode 100644 index b329fadcd..903694ecd --- a/ct/bazarr.sh +++ b/ct/bazarr.sh @@ -14,7 +14,7 @@ var_os="debian" var_version="12" var_unprivileged="1" -header_info "$APP" +header_info "$APP" variables color catch_errors @@ -23,12 +23,15 @@ function update_script() { header_info check_container_storage check_container_resources - if [[ ! -d /var/lib/bazarr/ ]]; then msg_error "No ${APP} Installation Found!"; exit; fi + if [[ ! -d /var/lib/bazarr/ ]]; then + msg_error "No ${APP} Installation Found!" + exit + fi msg_info "Updating $APP LXC" $STD apt-get update $STD apt-get -y upgrade msg_ok "Updated $APP LXC" -exit + exit } start @@ -38,4 +41,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}:6767${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:6767${CL}" diff --git a/ct/beszel.sh b/ct/beszel.sh index 4d08fe947..1ffb37599 100644 --- a/ct/beszel.sh +++ b/ct/beszel.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) community-scripts ORG # Author: Michelle Zitzerman (Sinofage) # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -30,11 +30,11 @@ function update_script() { msg_info "Stopping $APP" systemctl stop beszel-hub msg_ok "Stopped $APP" - + msg_info "Updating $APP" $STD /opt/beszel/beszel update msg_ok "Updated $APP" - + msg_info "Starting $APP" systemctl start beszel-hub msg_ok "Successfully started $APP" @@ -49,4 +49,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 IP:${CL}" -echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8090${CL}" +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8090${CL}" \ No newline at end of file diff --git a/ct/blocky.sh b/ct/blocky.sh index 84e480779..70d91ce91 100644 --- a/ct/blocky.sh +++ b/ct/blocky.sh @@ -14,7 +14,7 @@ var_os="debian" var_version="12" var_unprivileged="1" -header_info "$APP" +header_info "$APP" variables color catch_errors @@ -23,11 +23,14 @@ function update_script() { header_info check_container_storage check_container_resources - if [[ ! -d /var ]]; then msg_error "No ${APP} Installation Found!"; exit; fi - msg_info "Updating $APP LXC" - $STD apt-get update - $STD apt-get -y upgrade - msg_ok "Updated $APP LXC" + if [[ ! -d /var ]]; then + msg_error "No ${APP} Installation Found!" + exit + fi + msg_info "Updating $APP LXC" + $STD apt-get update + $STD apt-get -y upgrade + msg_ok "Updated $APP LXC" exit } @@ -38,4 +41,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}:4000${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:4000${CL}" diff --git a/ct/boltdiy.sh b/ct/boltdiy.sh index 931eed883..12e383b7f 100644 --- a/ct/boltdiy.sh +++ b/ct/boltdiy.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2025 community-scripts ORG # Author: Slaviša Arežina (tremor021) # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -27,7 +27,7 @@ function update_script() { msg_error "No ${APP} Installation Found!" exit fi - RELEASE=$(curl -s https://api.github.com/repos/stackblitz-labs/bolt.diy/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') + RELEASE=$(curl -fsSL https://api.github.com/repos/stackblitz-labs/bolt.diy/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') if [[ "${RELEASE}" != "$(cat /opt/boltdiy_version.txt)" ]] || [[ ! -f /opt/boltdiy_version.txt ]]; then msg_info "Stopping $APP" systemctl stop boltdiy @@ -37,7 +37,7 @@ function update_script() { temp_dir=$(mktemp -d) temp_file=$(mktemp) cd $temp_dir - wget -q "https://github.com/stackblitz-labs/bolt.diy/archive/refs/tags/v${RELEASE}.tar.gz" -O $temp_file +curl -fsSL "https://github.com/stackblitz-labs/bolt.diy/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file" tar xzf $temp_file cp -rf bolt.diy-${RELEASE}/* /opt/bolt.diy cd /opt/bolt.diy @@ -68,4 +68,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}:5173${CL}" +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:5173${CL}" \ No newline at end of file diff --git a/ct/bookstack.sh b/ct/bookstack.sh index 65631d7bf..ab1832deb 100644 --- a/ct/bookstack.sh +++ b/ct/bookstack.sh @@ -27,7 +27,7 @@ function update_script() { msg_error "No ${APP} Installation Found!" exit fi - RELEASE=$(curl -s https://api.github.com/repos/BookStackApp/BookStack/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') + RELEASE=$(curl -fsSL https://api.github.com/repos/BookStackApp/BookStack/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 Apache2" systemctl stop apache2 @@ -35,15 +35,15 @@ function update_script() { msg_info "Updating ${APP} to v${RELEASE}" mv /opt/bookstack /opt/bookstack-backup - wget -q --directory-prefix=/opt "https://github.com/BookStackApp/BookStack/archive/refs/tags/v${RELEASE}.zip" - unzip -q /opt/v${RELEASE}.zip -d /opt - mv /opt/BookStack-${RELEASE} /opt/bookstack + curl -fsSL "https://github.com/BookStackApp/BookStack/archive/refs/tags/v${RELEASE}.zip" -o "/opt/BookStack-${RELEASE}.zip" + unzip -q "/opt/BookStack-${RELEASE}.zip" -d /opt + mv "/opt/BookStack-${RELEASE}" /opt/bookstack cp /opt/bookstack-backup/.env /opt/bookstack/.env 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 - export COMPOSER_ALLOW_SUPERUSER=1 + cd /opt/bookstack || exit + export COMPOSER_ALLOW_SUPERUSER=1 $STD composer install --no-dev $STD php artisan migrate --force chown www-data:www-data -R /opt/bookstack /opt/bookstack/bootstrap/cache /opt/bookstack/public/uploads /opt/bookstack/storage @@ -59,7 +59,7 @@ function update_script() { msg_info "Cleaning Up" rm -rf /opt/bookstack-backup - rm -rf /opt/v${RELEASE}.zip + rm -rf "/opt/BookStack-${RELEASE}.zip" msg_ok "Cleaned" msg_ok "Updated Successfully" else diff --git a/ct/bunkerweb.sh b/ct/bunkerweb.sh index b8c9da4cc..84a4ea5b6 100644 --- a/ct/bunkerweb.sh +++ b/ct/bunkerweb.sh @@ -14,7 +14,7 @@ var_os="debian" var_version="12" var_unprivileged="1" -header_info "$APP" +header_info "$APP" variables color catch_errors @@ -23,26 +23,29 @@ function update_script() { header_info check_container_storage check_container_resources - if [[ ! -d /etc/bunkerweb ]]; then msg_error "No ${APP} Installation Found!"; exit; fi - RELEASE=$(curl -s https://api.github.com/repos/bunkerity/bunkerweb/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') + if [[ ! -d /etc/bunkerweb ]]; then + msg_error "No ${APP} Installation Found!" + exit + fi + RELEASE=$(curl -fsSL https://api.github.com/repos/bunkerity/bunkerweb/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 "Updating ${APP} to ${RELEASE}" - cat </etc/apt/preferences.d/bunkerweb + msg_info "Updating ${APP} to ${RELEASE}" + cat </etc/apt/preferences.d/bunkerweb Package: bunkerweb Pin: version ${RELEASE} Pin-Priority: 1001 EOF - apt-get update - apt-get install -y nginx=1.26.3* - apt-get install -y bunkerweb=${RELEASE} - echo "${RELEASE}" >/opt/${APP}_version.txt - msg_ok "Updated ${APP} to ${RELEASE}" + apt-get update + apt-get install -y nginx=1.26.3* + apt-get install -y bunkerweb=${RELEASE} + echo "${RELEASE}" >/opt/${APP}_version.txt + msg_ok "Updated ${APP} to ${RELEASE}" -else - msg_ok "No update required. ${APP} is already at ${RELEASE}" -fi -exit + else + msg_ok "No update required. ${APP} is already at ${RELEASE}" + fi + exit } start @@ -52,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}http://${IP}/setup${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}/setup${CL}" diff --git a/ct/bytestash.sh b/ct/bytestash.sh index 52384e2c4..c68bcf2ba 100644 --- a/ct/bytestash.sh +++ b/ct/bytestash.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2025 community-scripts ORG # Author: Slaviša Arežina (tremor021) # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -27,7 +27,7 @@ function update_script() { msg_error "No ${APP} Installation Found!" exit fi - RELEASE=$(curl -s https://api.github.com/repos/jordan-dalby/ByteStash/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') + RELEASE=$(curl -fsSL https://api.github.com/repos/jordan-dalby/ByteStash/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 bytestash-backend @@ -36,7 +36,7 @@ function update_script() { msg_info "Updating ${APP} to ${RELEASE}" temp_file=$(mktemp) - wget -q "https://github.com/jordan-dalby/ByteStash/archive/refs/tags/v${RELEASE}.tar.gz" -O $temp_file +curl -fsSL "https://github.com/jordan-dalby/ByteStash/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file" tar zxf $temp_file rm -rf /opt/bytestash/server/node_modules rm -rf /opt/bytestash/client/node_modules @@ -70,4 +70,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}" +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}" \ No newline at end of file diff --git a/ct/calibre-web.sh b/ct/calibre-web.sh index 535711da6..361a5846f 100644 --- a/ct/calibre-web.sh +++ b/ct/calibre-web.sh @@ -36,13 +36,13 @@ function update_script() { rm -rf kepubify-linux-64bit curl -fsSLO https://github.com/pgaskin/kepubify/releases/latest/download/kepubify-linux-64bit chmod +x kepubify-linux-64bit - menu_array=("1" "Enables gdrive as storage backend for your ebooks" OFF \ - "2" "Enables sending emails via a googlemail account without enabling insecure apps" OFF \ - "3" "Enables displaying of additional author infos on the authors page" OFF \ - "4" "Enables login via LDAP server" OFF \ - "5" "Enables login via google or github oauth" OFF \ - "6" "Enables extracting of metadata from epub, fb2, pdf files, and also extraction of covers from cbr, cbz, cbt files" OFF \ - "7" "Enables extracting of metadata from cbr, cbz, cbt files" OFF \ + menu_array=("1" "Enables gdrive as storage backend for your ebooks" OFF + "2" "Enables sending emails via a googlemail account without enabling insecure apps" OFF + "3" "Enables displaying of additional author infos on the authors page" OFF + "4" "Enables login via LDAP server" OFF + "5" "Enables login via google or github oauth" OFF + "6" "Enables extracting of metadata from epub, fb2, pdf files, and also extraction of covers from cbr, cbz, cbt files" OFF + "7" "Enables extracting of metadata from cbr, cbz, cbt files" OFF "8" "Enables syncing with your kobo reader" OFF) if [ -f "/opt/calibre-web/options.txt" ]; then cps_options="$(cat /opt/calibre-web/options.txt)" diff --git a/ct/casaos.sh b/ct/casaos.sh index d6b3f96a1..c37f7b93f 100644 --- a/ct/casaos.sh +++ b/ct/casaos.sh @@ -41,4 +41,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}${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}" diff --git a/ct/channels.sh b/ct/channels.sh index 218122708..6ef707d75 100644 --- a/ct/channels.sh +++ b/ct/channels.sh @@ -38,4 +38,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}:8089${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8089${CL}" diff --git a/ct/checkmk.sh b/ct/checkmk.sh index d7daba209..73b99ccaf 100644 --- a/ct/checkmk.sh +++ b/ct/checkmk.sh @@ -9,7 +9,7 @@ APP="checkmk" var_tags="monitoring" var_cpu="2" var_ram="2048" -var_disk="4" +var_disk="6" var_os="debian" var_version="12" var_unprivileged="1" @@ -27,16 +27,16 @@ function update_script() { msg_error "No ${APP} Installation Found!" exit fi - RELEASE=$(curl -fsSL https://api.github.com/repos/checkmk/checkmk/tags | grep "name" | awk '{print substr($2, 3, length($2)-4) }' | tr ' ' '\n' | grep -v '\-rc' | sort -V | tail -n 1) + RELEASE=$(curl -fsSL https://api.github.com/repos/checkmk/checkmk/tags | grep "name" | awk '{print substr($2, 3, length($2)-4) }' | tr ' ' '\n' | grep -v '\-rc' | sort -V | tail -n 1) if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then msg_info "Updating ${APP} to v${RELEASE}" $STD omd stop monitoring $STD omd cp monitoring monitoringbackup - wget -q https://download.checkmk.com/checkmk/${RELEASE}/check-mk-raw-${RELEASE}_0.bookworm_amd64.deb -O /opt/checkmk.deb +curl -fsSL "https://download.checkmk.com/checkmk/${RELEASE}/check-mk-raw-${RELEASE}_0.bookworm_amd64.deb" -o "/opt/checkmk.deb" $STD apt-get install -y /opt/checkmk.deb $STD omd --force -V ${RELEASE}.cre update --conflict=install monitoring $STD omd start monitoring - $STD omd -f rm monitoringbackup + $STD omd -f rm monitoringbackup $STD omd cleanup rm -rf /opt/checkmk.deb msg_ok "Updated ${APP} to v${RELEASE}" diff --git a/ct/cloudflared.sh b/ct/cloudflared.sh index 1a3665009..5b559a3bd 100644 --- a/ct/cloudflared.sh +++ b/ct/cloudflared.sh @@ -39,4 +39,4 @@ build_container description msg_ok "Completed Successfully!\n" -echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" \ No newline at end of file +echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" diff --git a/ct/cockpit.sh b/ct/cockpit.sh index e3e61a7b1..fd8623f89 100644 --- a/ct/cockpit.sh +++ b/ct/cockpit.sh @@ -51,7 +51,7 @@ function update_script() { $STD apt-get install -y gawk msg_ok "Installed dependencies" msg_info "Installing Cockpit file sharing" - wget -q $(curl -s https://api.github.com/repos/45Drives/cockpit-file-sharing/releases/latest | grep download | grep focal_all.deb | cut -d\" -f4) + curl -fsSL "$(curl -fsSL https://api.github.com/repos/45Drives/cockpit-file-sharing/releases/latest | grep download | grep focal_all.deb | cut -d\" -f4)" -o $(basename "$(curl -fsSL https://api.github.com/repos/45Drives/cockpit-file-sharing/releases/latest | grep download | grep focal_all.deb | cut -d\" -f4)") $STD dpkg -i cockpit-file-sharing_*focal_all.deb rm cockpit-file-sharing_*focal_all.deb msg_ok "Installed Cockpit file sharing" @@ -64,7 +64,7 @@ function update_script() { $STD apt-get install -y samba-common-bin msg_ok "Installed dependencies" msg_info "Installing Cockpit identities" - wget -q $(curl -s https://api.github.com/repos/45Drives/cockpit-identities/releases/latest | grep download | grep focal_all.deb | cut -d\" -f4) + curl -fsSL "$(curl -fsSL https://api.github.com/repos/45Drives/cockpit-identities/releases/latest | grep download | grep focal_all.deb | cut -d\" -f4)" -o $(basename "$(curl -fsSL https://api.github.com/repos/45Drives/cockpit-identities/releases/latest | grep download | grep focal_all.deb | cut -d\" -f4)") $STD dpkg -i cockpit-identities_*focal_all.deb rm cockpit-identities_*focal_all.deb msg_ok "Installed Cockpit identities" @@ -76,7 +76,7 @@ function update_script() { $STD apt-get install -y zip msg_ok "Installed dependencies" msg_info "Installing Cockpit navigator" - wget -q $(curl -s https://api.github.com/repos/45Drives/cockpit-navigator/releases/latest | grep download | grep focal_all.deb | cut -d\" -f4) + curl -fsSL "$(curl -fsSL https://api.github.com/repos/45Drives/cockpit-navigator/releases/latest | grep download | grep focal_all.deb | cut -d\" -f4)" -o $(basename "$(curl -fsSL https://api.github.com/repos/45Drives/cockpit-navigator/releases/latest | grep download | grep focal_all.deb | cut -d\" -f4)") $STD dpkg -i cockpit-navigator_*focal_all.deb rm cockpit-navigator_*focal_all.deb msg_ok "Installed Cockpit navigator" @@ -91,4 +91,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}:9090${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:9090${CL}" diff --git a/ct/commafeed.sh b/ct/commafeed.sh index dbb0f868c..4e6b2095f 100644 --- a/ct/commafeed.sh +++ b/ct/commafeed.sh @@ -27,17 +27,17 @@ function update_script() { msg_error "No ${APP} Installation Found!" exit fi - RELEASE=$(curl -sL https://api.github.com/repos/Athou/commafeed/releases/latest | grep '"tag_name":' | cut -d'"' -f4) + RELEASE=$(curl -fsSL https://api.github.com/repos/Athou/commafeed/releases/latest | grep '"tag_name":' | cut -d'"' -f4) if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then msg_info "Stopping ${APP}" systemctl stop commafeed msg_ok "Stopped ${APP}" msg_info "Updating ${APP} to ${RELEASE}" - wget -q https://github.com/Athou/commafeed/releases/download/${RELEASE}/commafeed-${RELEASE}-h2-jvm.zip - unzip -q commafeed-${RELEASE}-h2-jvm.zip - rsync -a --exclude 'data/' commafeed-${RELEASE}-h2/ /opt/commafeed/ - rm -rf commafeed-${RELEASE}-h2 commafeed-${RELEASE}-h2-jvm.zip + curl -fsSL "https://github.com/Athou/commafeed/releases/download/${RELEASE}/commafeed-${RELEASE}-h2-jvm.zip" -o $(basename "https://github.com/Athou/commafeed/releases/download/${RELEASE}/commafeed-${RELEASE}-h2-jvm.zip") + unzip -q commafeed-"${RELEASE}"-h2-jvm.zip + rsync -a --exclude 'data/' commafeed-"${RELEASE}"-h2/ /opt/commafeed/ + rm -rf commafeed-"${RELEASE}"-h2 commafeed-"${RELEASE}"-h2-jvm.zip echo "${RELEASE}" >/opt/${APP}_version.txt msg_ok "Updated ${APP} to ${RELEASE}" diff --git a/ct/cosmos.sh b/ct/cosmos.sh index 381a50b9d..5ef502848 100644 --- a/ct/cosmos.sh +++ b/ct/cosmos.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2025 community-scripts ORG # Author: Michel Roegl-Brunner (michelroegl-brunner) # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -37,4 +37,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}${CL}" +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}" \ No newline at end of file diff --git a/ct/crafty-controller.sh b/ct/crafty-controller.sh index 336a3d8f2..ce4058676 100644 --- a/ct/crafty-controller.sh +++ b/ct/crafty-controller.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2025 community-scripts # Author: CrazyWolf13 # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -20,61 +20,60 @@ color catch_errors function update_script() { - header_info - check_container_storage - check_container_resources - if [[ ! -d /opt/crafty-controller ]]; then - msg_error "No ${APP} Installation Found!" - exit - fi - - RELEASE=$(curl -s "https://gitlab.com/api/v4/projects/20430749/releases" | grep -o '"tag_name":"v[^"]*"' | head -n 1 | sed 's/"tag_name":"v//;s/"//') - if [[ ! -f /opt/crafty-controller_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/crafty-controller_version.txt)" ]]; then - - msg_info "Stopping Crafty-Controller" - systemctl stop crafty-controller - msg_ok "Stopped Crafty-Controller" + header_info + check_container_storage + check_container_resources + if [[ ! -d /opt/crafty-controller ]]; then + msg_error "No ${APP} Installation Found!" + exit + fi - msg_info "Creating Backup of config" - cp -a /opt/crafty-controller/crafty/crafty-4/app/config/. /opt/crafty-controller/backup - rm /opt/crafty-controller/backup/version.json - rm /opt/crafty-controller/backup/credits.json - rm /opt/crafty-controller/backup/logging.json - rm /opt/crafty-controller/backup/default.json.example - rm /opt/crafty-controller/backup/motd_format.json - msg_ok "Backup Created" - - msg_info "Updating Crafty-Controller to v${RELEASE}" - wget -q "https://gitlab.com/crafty-controller/crafty-4/-/archive/v${RELEASE}/crafty-4-v${RELEASE}.zip" - unzip -q crafty-4-v${RELEASE}.zip - cp -a crafty-4-v${RELEASE}/. /opt/crafty-controller/crafty/crafty-4/ - rm -rf crafty-4-v${RELEASE} - cd /opt/crafty-controller/crafty/crafty-4 - sudo -u crafty bash -c ' + RELEASE=$(curl -fsSL "https://gitlab.com/api/v4/projects/20430749/releases" | grep -o '"tag_name":"v[^"]*"' | head -n 1 | sed 's/"tag_name":"v//;s/"//') + if [[ ! -f /opt/crafty-controller_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/crafty-controller_version.txt)" ]]; then + + msg_info "Stopping Crafty-Controller" + systemctl stop crafty-controller + msg_ok "Stopped Crafty-Controller" + + msg_info "Creating Backup of config" + cp -a /opt/crafty-controller/crafty/crafty-4/app/config/. /opt/crafty-controller/backup + rm /opt/crafty-controller/backup/version.json + rm /opt/crafty-controller/backup/credits.json + rm /opt/crafty-controller/backup/logging.json + rm /opt/crafty-controller/backup/default.json.example + rm /opt/crafty-controller/backup/motd_format.json + msg_ok "Backup Created" + + msg_info "Updating Crafty-Controller to v${RELEASE}" + curl -fsSL "https://gitlab.com/crafty-controller/crafty-4/-/archive/v${RELEASE}/crafty-4-v${RELEASE}.zip" -o $(basename "https://gitlab.com/crafty-controller/crafty-4/-/archive/v${RELEASE}/crafty-4-v${RELEASE}.zip") + unzip -q crafty-4-v${RELEASE}.zip + cp -a crafty-4-v${RELEASE}/. /opt/crafty-controller/crafty/crafty-4/ + rm -rf crafty-4-v${RELEASE} + cd /opt/crafty-controller/crafty/crafty-4 + sudo -u crafty bash -c ' source /opt/crafty-controller/crafty/.venv/bin/activate pip3 install --no-cache-dir -r requirements.txt ' &>/dev/null - echo "${RELEASE}" >"/opt/crafty-controller_version.txt" - msg_ok "Updated Crafty-Controller to v${RELEASE}" + echo "${RELEASE}" >"/opt/crafty-controller_version.txt" + msg_ok "Updated Crafty-Controller to v${RELEASE}" - msg_info "Restoring Backup of config" - cp -a /opt/crafty-controller/backup/. /opt/crafty-controller/crafty/crafty-4/app/config - rm -rf /opt/crafty-controller/backup - chown -R crafty:crafty /opt/crafty-controller/ - msg_ok "Backup Restored" + msg_info "Restoring Backup of config" + cp -a /opt/crafty-controller/backup/. /opt/crafty-controller/crafty/crafty-4/app/config + rm -rf /opt/crafty-controller/backup + chown -R crafty:crafty /opt/crafty-controller/ + msg_ok "Backup Restored" - msg_info "Starting Crafty-Controller" - systemctl start crafty-controller - msg_ok "Started Crafty-Controller" + msg_info "Starting Crafty-Controller" + systemctl start crafty-controller + msg_ok "Started Crafty-Controller" - msg_ok "Updated Successfully" - exit + msg_ok "Updated Successfully" + exit else msg_ok "No update required. Crafty-Controller is already at v${RELEASE}." fi } - start build_container description diff --git a/ct/create_lxc.sh b/ct/create_lxc.sh index df493ed10..7c1c2d4bf 100644 --- a/ct/create_lxc.sh +++ b/ct/create_lxc.sh @@ -297,4 +297,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." +msg_ok "LXC Container ${BL}$CTID${CL} ${GN}was successfully created." \ No newline at end of file diff --git a/ct/cronicle.sh b/ct/cronicle.sh index 43584a199..08e49c683 100644 --- a/ct/cronicle.sh +++ b/ct/cronicle.sh @@ -53,7 +53,7 @@ function update_script() { echo "Installed NPM..." fi fi - LATEST=$(curl -sL https://api.github.com/repos/jhuckaby/Cronicle/releases/latest | grep '"tag_name":' | cut -d'"' -f4) + LATEST=$(curl -fsSL https://api.github.com/repos/jhuckaby/Cronicle/releases/latest | grep '"tag_name":' | cut -d'"' -f4) IP=$(hostname -I | awk '{print $1}') msg_info "Installing Dependencies" @@ -100,4 +100,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}:3012${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3012${CL}" diff --git a/ct/cross-seed.sh b/ct/cross-seed.sh index 0a2337acf..f6be7c13a 100644 --- a/ct/cross-seed.sh +++ b/ct/cross-seed.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2025 community-scripts ORG # Author: Jakub Matraszek (jmatraszek) # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -24,7 +24,7 @@ function update_script() { check_container_storage check_container_resources - if command -v cross-seed &> /dev/null; then + if command -v cross-seed &>/dev/null; then current_version=$(cross-seed --version) latest_version=$(npm show cross-seed version) if [ "$current_version" != "$latest_version" ]; then @@ -49,4 +49,4 @@ description msg_ok "Completed Successfully!\n" echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" echo -e "${INFO}${YW} Access cross-seed API using the following URL:${CL}" -echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:2468${CL}" +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:2468${CL}" \ No newline at end of file diff --git a/ct/cryptpad.sh b/ct/cryptpad.sh index cb849a296..7b7173a15 100644 --- a/ct/cryptpad.sh +++ b/ct/cryptpad.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2025 community-scripts ORG # Author: Slaviša Arežina (tremor021) # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -28,7 +28,7 @@ function update_script() { msg_error "No ${APP} Installation Found!" exit fi - RELEASE=$(curl -s https://api.github.com/repos/cryptpad/cryptpad/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') + RELEASE=$(curl -fsSL https://api.github.com/repos/cryptpad/cryptpad/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then msg_info "Stopping $APP" systemctl stop cryptpad @@ -37,10 +37,10 @@ function update_script() { msg_info "Updating $APP to ${RELEASE}" temp_dir=$(mktemp -d) cp -f /opt/cryptpad/config/config.js /opt/config.js - wget -q "https://github.com/cryptpad/cryptpad/archive/refs/tags/${RELEASE}.tar.gz" -P $temp_dir - cd $temp_dir - tar zxf $RELEASE.tar.gz - cp -rf cryptpad-$RELEASE/* /opt/cryptpad + curl -fsSL "https://github.com/cryptpad/cryptpad/archive/refs/tags/${RELEASE}.tar.gz" -o "$temp_dir/cryptpad-${RELEASE}.tar.gz" + cd "$temp_dir" + tar zxf "cryptpad-${RELEASE}.tar.gz" + cp -rf "cryptpad-${RELEASE}"/* /opt/cryptpad cd /opt/cryptpad $STD npm ci $STD npm run install:components diff --git a/ct/daemonsync.sh b/ct/daemonsync.sh index c65d08cdd..bb75bf384 100644 --- a/ct/daemonsync.sh +++ b/ct/daemonsync.sh @@ -41,4 +41,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}:8084${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8084${CL}" diff --git a/ct/dashy.sh b/ct/dashy.sh index 4ad34cce5..ffd858f36 100644 --- a/ct/dashy.sh +++ b/ct/dashy.sh @@ -28,7 +28,7 @@ function update_script() { exit fi - RELEASE=$(curl -sL https://api.github.com/repos/Lissy93/dashy/releases/latest | grep '"tag_name":' | cut -d'"' -f4) + RELEASE=$(curl -fsSL https://api.github.com/repos/Lissy93/dashy/releases/latest | grep '"tag_name":' | cut -d'"' -f4) if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then msg_info "Stopping ${APP}" systemctl stop dashy @@ -46,7 +46,7 @@ function update_script() { msg_info "Updating ${APP} to ${RELEASE}" rm -rf /opt/dashy mkdir -p /opt/dashy - wget -qO- https://github.com/Lissy93/dashy/archive/refs/tags/${RELEASE}.tar.gz | tar -xz -C /opt/dashy --strip-components=1 + curl -fsSL "https://github.com/Lissy93/dashy/archive/refs/tags/${RELEASE}.tar.gz" | tar -xz -C /opt/dashy --strip-components=1 cd /opt/dashy npm install npm run build @@ -79,4 +79,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}:4000${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:4000${CL}" diff --git a/ct/debian.sh b/ct/debian.sh index 0c12a60bc..aeae47b61 100644 --- a/ct/debian.sh +++ b/ct/debian.sh @@ -39,4 +39,4 @@ build_container description msg_ok "Completed Successfully!\n" -echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" \ No newline at end of file +echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" diff --git a/ct/deconz.sh b/ct/deconz.sh index 57023b6a2..28b16cc4e 100644 --- a/ct/deconz.sh +++ b/ct/deconz.sh @@ -41,4 +41,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}${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}" diff --git a/ct/deluge.sh b/ct/deluge.sh index effa41a91..152ca2408 100644 --- a/ct/deluge.sh +++ b/ct/deluge.sh @@ -41,4 +41,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}:8112${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8112${CL}" diff --git a/ct/docker.sh b/ct/docker.sh index 8a49cadfe..bfa940057 100644 --- a/ct/docker.sh +++ b/ct/docker.sh @@ -39,4 +39,4 @@ build_container description msg_ok "Completed Successfully!\n" -echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" \ No newline at end of file +echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" diff --git a/ct/dockge.sh b/ct/dockge.sh index d3b77466d..69b827511 100644 --- a/ct/dockge.sh +++ b/ct/dockge.sh @@ -42,4 +42,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}:5001${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:5001${CL}" diff --git a/ct/docmost.sh b/ct/docmost.sh index 443e7007e..47b96f60f 100644 --- a/ct/docmost.sh +++ b/ct/docmost.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2025 community-scripts ORG # Author: MickLesk (CanbiZ) # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -26,7 +26,24 @@ function update_script() { msg_error "No ${APP} Installation Found!" exit fi - RELEASE=$(curl -s https://api.github.com/repos/docmost/docmost/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') + if command -v node >/dev/null; then + NODE_MAJOR=$(/usr/bin/env node -v | grep -oP '^v\K[0-9]+') + if [[ "$NODE_MAJOR" != "22" ]]; then + $STD apt-get purge -y nodejs + rm -f /etc/apt/sources.list.d/nodesource.list + rm -f /etc/apt/keyrings/nodesource.gpg + else + return + fi + fi + mkdir -p /etc/apt/keyrings + curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg + echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_22.x nodistro main" >/etc/apt/sources.list.d/nodesource.list + $STD apt-get update + $STD apt-get install -y nodejs + $STD npm install -g pnpm@10.4.0 + export NODE_OPTIONS="--max_old_space_size=4096" + RELEASE=$(curl -fsSL https://api.github.com/repos/docmost/docmost/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 ${APP}" systemctl stop docmost @@ -37,7 +54,7 @@ function update_script() { cp -r /opt/docmost/data /opt/ rm -rf /opt/docmost temp_file=$(mktemp) - wget -q "https://github.com/docmost/docmost/archive/refs/tags/v${RELEASE}.tar.gz" -O "$temp_file" + curl -fsSL "https://github.com/docmost/docmost/archive/refs/tags/v${RELEASE}.tar.gz" -o ""$temp_file"" tar -xzf "$temp_file" mv docmost-${RELEASE} /opt/docmost cd /opt/docmost diff --git a/ct/dolibarr.sh b/ct/dolibarr.sh index ab8ef73ea..0fdf86000 100644 --- a/ct/dolibarr.sh +++ b/ct/dolibarr.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2025 community-scripts ORG # Author: Slaviša Arežina (tremor021) # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -38,4 +38,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}/dolibarr/install${CL}" +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}/dolibarr/install${CL}" \ No newline at end of file diff --git a/ct/duplicati.sh b/ct/duplicati.sh index 845b012b1..0596c9c80 100644 --- a/ct/duplicati.sh +++ b/ct/duplicati.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2025 community-scripts ORG # Author: tremor021 # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -27,13 +27,13 @@ function update_script() { msg_error "No ${APP} Installation Found!" exit fi - RELEASE=$(curl -s https://api.github.com/repos/duplicati/duplicati/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4)}') + RELEASE=$(curl -fsSL https://api.github.com/repos/duplicati/duplicati/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4)}') if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then msg_info "Stopping $APP" systemctl stop duplicati msg_ok "Stopped $APP" msg_info "Updating $APP to v${RELEASE}" - wget -q "https://github.com/duplicati/duplicati/releases/download/v${RELEASE}/duplicati-${RELEASE}-linux-x64-gui.deb" + curl -fsSL "https://github.com/duplicati/duplicati/releases/download/v${RELEASE}/duplicati-${RELEASE}-linux-x64-gui.deb" -o $(basename "https://github.com/duplicati/duplicati/releases/download/v${RELEASE}/duplicati-${RELEASE}-linux-x64-gui.deb") $STD dpkg -i duplicati-${RELEASE}-linux-x64-gui.deb echo "${RELEASE}" >/opt/${APP}_version.txt msg_ok "Updated $APP to v${RELEASE}" diff --git a/ct/elementsynapse.sh b/ct/elementsynapse.sh index 64057fa4d..d021db518 100644 --- a/ct/elementsynapse.sh +++ b/ct/elementsynapse.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2025 community-scripts ORG # Author: tremor021 # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -14,7 +14,7 @@ var_os="debian" var_version="12" var_unprivileged="1" -header_info "$APP" +header_info "$APP" variables color catch_errors @@ -23,7 +23,7 @@ function update_script() { header_info check_container_storage check_container_resources - if [[ ! -d /etc/matrix-synapse ]]; then + if [[ ! -d /etc/matrix-synapse ]]; then msg_error "No ${APP} Installation Found!" exit fi diff --git a/ct/emby.sh b/ct/emby.sh index 0a9e9f575..ea8c0e179 100644 --- a/ct/emby.sh +++ b/ct/emby.sh @@ -20,29 +20,29 @@ color catch_errors function update_script() { - header_info - check_container_storage - check_container_resources - if [[ ! -d /opt/emby-server ]]; then - msg_error "No ${APP} Installation Found!" - exit - fi - LATEST=$(curl -sL https://api.github.com/repos/MediaBrowser/Emby.Releases/releases/latest | grep '"tag_name":' | cut -d'"' -f4) - msg_info "Stopping ${APP}" - systemctl stop emby-server - msg_ok "Stopped ${APP}" - - msg_info "Updating ${APP}" - $STD wget https://github.com/MediaBrowser/Emby.Releases/releases/download/${LATEST}/emby-server-deb_${LATEST}_amd64.deb - $STD dpkg -i emby-server-deb_${LATEST}_amd64.deb - rm emby-server-deb_${LATEST}_amd64.deb - msg_ok "Updated ${APP}" - - msg_info "Starting ${APP}" - systemctl start emby-server - msg_ok "Started ${APP}" - msg_ok "Updated Successfully" + header_info + check_container_storage + check_container_resources + if [[ ! -d /opt/emby-server ]]; then + msg_error "No ${APP} Installation Found!" exit + fi + LATEST=$(curl -fsSL https://api.github.com/repos/MediaBrowser/Emby.Releases/releases/latest | grep '"tag_name":' | cut -d'"' -f4) + msg_info "Stopping ${APP}" + systemctl stop emby-server + msg_ok "Stopped ${APP}" + + msg_info "Updating ${APP}" + $STD curl -fsSL "https://github.com/MediaBrowser/Emby.Releases/releases/download/${LATEST}/emby-server-deb_${LATEST}_amd64.deb" -o "emby-server-deb_${LATEST}_amd64.deb" + $STD dpkg -i "emby-server-deb_${LATEST}_amd64.deb" + rm "emby-server-deb_${LATEST}_amd64.deb" + msg_ok "Updated ${APP}" + + msg_info "Starting ${APP}" + systemctl start emby-server + msg_ok "Started ${APP}" + msg_ok "Updated Successfully" + exit } start diff --git a/ct/ersatztv.sh b/ct/ersatztv.sh index 81918f109..aec5ed3b1 100644 --- a/ct/ersatztv.sh +++ b/ct/ersatztv.sh @@ -19,15 +19,15 @@ variables color catch_errors function update_script() { - header_info - check_container_storage - check_container_resources - if [[ ! -d /opt/ErsatzTV ]]; then - msg_error "No ${APP} Installation Found!" - exit - fi - RELEASE=$(curl -s https://api.github.com/repos/ErsatzTV/ErsatzTV/releases | grep -oP '"tag_name": "\K[^"]+' | head -n 1) - if [[ ! -f /opt/${APP}_version.txt && $(echo "x.x.x" > /opt/${APP}_version.txt) || "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then + header_info + check_container_storage + check_container_resources + if [[ ! -d /opt/ErsatzTV ]]; then + msg_error "No ${APP} Installation Found!" + exit + fi + RELEASE=$(curl -fsSL https://api.github.com/repos/ErsatzTV/ErsatzTV/releases | grep -oP '"tag_name": "\K[^"]+' | head -n 1) + if [[ ! -f /opt/${APP}_version.txt && $(echo "x.x.x" >/opt/${APP}_version.txt) || "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then msg_info "Stopping ErsatzTV" systemctl stop ersatzTV msg_ok "Stopped ErsatzTV" @@ -37,9 +37,9 @@ function update_script() { rm ErsatzTV-backup/ErsatzTV rm -rf /opt/ErsatzTV temp_file=$(mktemp) - wget -qO- https://github.com/ErsatzTV/ErsatzTV/releases/download/${RELEASE}/ErsatzTV-${RELEASE}-linux-x64.tar.gz -O "$temp_file" + curl -fsSL "https://github.com/ErsatzTV/ErsatzTV/releases/download/${RELEASE}/ErsatzTV-${RELEASE}-linux-x64.tar.gz" -o "$temp_file" tar -xzf "$temp_file" - mv /opt/ErsatzTV-${RELEASE}-linux-x64 /opt/ErsatzTV + mv ErsatzTV-${RELEASE}-linux-x64 /opt/ErsatzTV cp -R ErsatzTV-backup/* /opt/ErsatzTV/ rm -rf ErsatzTV-backup echo "${RELEASE}" >/opt/${APP}_version.txt @@ -59,7 +59,6 @@ function update_script() { exit } - start build_container description @@ -67,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}:8409${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8409${CL}" diff --git a/ct/esphome.sh b/ct/esphome.sh index aaeca7e2b..17d8ad57a 100644 --- a/ct/esphome.sh +++ b/ct/esphome.sh @@ -52,4 +52,4 @@ description msg_ok "Completed Successfully!\n" echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" echo -e "${INFO}${YW} Access it using the following URL:${CL}" -echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:6052${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:6052${CL}" diff --git a/ct/evcc.sh b/ct/evcc.sh index 154555fd3..5f74c1bac 100644 --- a/ct/evcc.sh +++ b/ct/evcc.sh @@ -41,4 +41,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}:7070${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:7070${CL}" diff --git a/ct/excalidraw.sh b/ct/excalidraw.sh index c1347b41c..8bb7d19e5 100644 --- a/ct/excalidraw.sh +++ b/ct/excalidraw.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2025 community-scripts ORG # Author: Slaviša Arežina (tremor021) # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -29,7 +29,7 @@ function update_script() { exit fi - RELEASE=$(curl -s https://api.github.com/repos/excalidraw/excalidraw/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') + RELEASE=$(curl -fsSL https://api.github.com/repos/excalidraw/excalidraw/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') if [[ "${RELEASE}" != "$(cat /opt/excalidraw_version.txt)" ]] || [[ ! -f /opt/excalidraw_version.txt ]]; then msg_info "Stopping $APP" systemctl stop excalidraw @@ -38,7 +38,7 @@ function update_script() { msg_info "Updating $APP to v${RELEASE}" cd /tmp temp_file=$(mktemp) - wget -q "https://github.com/excalidraw/excalidraw/archive/refs/tags/v${RELEASE}.tar.gz" -O $temp_file +curl -fsSL "https://github.com/excalidraw/excalidraw/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file" tar xzf $temp_file rm -rf /opt/excalidraw mv excalidraw-${RELEASE} /opt/excalidraw @@ -69,4 +69,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}" +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}" \ No newline at end of file diff --git a/ct/fhem.sh b/ct/fhem.sh index b3dd23968..d4a4a3ff5 100644 --- a/ct/fhem.sh +++ b/ct/fhem.sh @@ -41,4 +41,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}:8083${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8083${CL}" diff --git a/ct/fileflows.sh b/ct/fileflows.sh index fe0c82f86..a58207f5c 100644 --- a/ct/fileflows.sh +++ b/ct/fileflows.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2025 community-scripts ORG # Author: kkroboth # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -28,8 +28,12 @@ function update_script() { msg_error "No ${APP} Installation Found!" exit fi + if ! [[ $(dpkg -s jq 2>/dev/null) ]]; then + $STD apt-get update + $STD apt-get install -y jq + fi - update_available=$(curl -s -X 'GET' "http://localhost:19200/api/status/update-available" -H 'accept: application/json' | jq .UpdateAvailable) + update_available=$(curl -fsSL -X 'GET' "http://localhost:19200/api/status/update-available" -H 'accept: application/json' | jq .UpdateAvailable) if [[ "${update_available}" == "true" ]]; then msg_info "Stopping $APP" systemctl stop fileflows @@ -37,13 +41,13 @@ function update_script() { msg_info "Creating Backup" backup_filename="/opt/${APP}_backup_$(date +%F).tar.gz" - tar -czf $backup_filename -C /opt/fileflows Data + tar -czf "$backup_filename" -C /opt/fileflows Data msg_ok "Backup Created" msg_info "Updating $APP to latest version" temp_file=$(mktemp) - curl -fsSL https://fileflows.com/downloads/zip -o $temp_file - unzip -oq -d /opt/fileflows $temp_file + curl -fsSL https://fileflows.com/downloads/zip -o "$temp_file" + unzip -oq -d /opt/fileflows "$temp_file" msg_ok "Updated $APP to latest version" msg_info "Starting $APP" @@ -51,8 +55,8 @@ function update_script() { msg_ok "Started $APP" msg_info "Cleaning Up" - rm -rf $temp_file - rm -rf $backup_filename + rm -rf "$temp_file" + rm -rf "$backup_filename" msg_ok "Cleanup Completed" msg_ok "Update Successful" diff --git a/ct/firefly.sh b/ct/firefly.sh index 2f86e668c..103977d9a 100644 --- a/ct/firefly.sh +++ b/ct/firefly.sh @@ -20,15 +20,15 @@ color catch_errors function update_script() { -header_info -check_container_storage -check_container_resources + header_info + check_container_storage + check_container_resources if [[ ! -d /opt/firefly ]]; then msg_error "No ${APP} Installation Found!" exit fi - RELEASE=$(curl -s https://api.github.com/repos/firefly-iii/firefly-iii/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4)}') + RELEASE=$(curl -fsSL https://api.github.com/repos/firefly-iii/firefly-iii/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 Apache2" systemctl stop apache2 @@ -38,11 +38,11 @@ check_container_resources cp /opt/firefly/.env /opt/.env cp -r /opt/firefly/storage /opt/storage cd /opt - wget -q "https://github.com/firefly-iii/firefly-iii/releases/download/v${RELEASE}/FireflyIII-v${RELEASE}.tar.gz" + curl -fsSL "https://github.com/firefly-iii/firefly-iii/releases/download/v${RELEASE}/FireflyIII-v${RELEASE}.tar.gz" -o $(basename "https://github.com/firefly-iii/firefly-iii/releases/download/v${RELEASE}/FireflyIII-v${RELEASE}.tar.gz") tar -xzf FireflyIII-v${RELEASE}.tar.gz -C /opt/firefly --exclude='storage' cp /opt/.env /opt/firefly/.env cp -r /opt/storage /opt/firefly/storage - cd /opt/firefly + cd /opt/firefly chown -R www-data:www-data /opt/firefly chmod -R 775 /opt/firefly/storage $STD php artisan migrate --seed --force diff --git a/ct/flaresolverr.sh b/ct/flaresolverr.sh index d4f0ed8b3..7b92abc01 100644 --- a/ct/flaresolverr.sh +++ b/ct/flaresolverr.sh @@ -27,11 +27,11 @@ function update_script() { msg_error "No ${APP} Installation Found!" exit fi - RELEASE=$(wget -q https://github.com/FlareSolverr/FlareSolverr/releases/latest -O - | grep "title>Release" | cut -d " " -f 4) + RELEASE=$(curl -fsSL https://github.com/FlareSolverr/FlareSolverr/releases/latest | grep "title>Release" | cut -d " " -f 4) if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then msg_info "Updating $APP LXC" systemctl stop flaresolverr - wget -q https://github.com/FlareSolverr/FlareSolverr/releases/download/$RELEASE/flaresolverr_linux_x64.tar.gz + curl -fsSL "https://github.com/FlareSolverr/FlareSolverr/releases/download/$RELEASE/flaresolverr_linux_x64.tar.gz" -o $(basename "https://github.com/FlareSolverr/FlareSolverr/releases/download/$RELEASE/flaresolverr_linux_x64.tar.gz") tar -xzf flaresolverr_linux_x64.tar.gz -C /opt rm flaresolverr_linux_x64.tar.gz systemctl start flaresolverr @@ -50,4 +50,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}:8191${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8191${CL}" diff --git a/ct/flowiseai.sh b/ct/flowiseai.sh index aed68964f..75a5bdd53 100644 --- a/ct/flowiseai.sh +++ b/ct/flowiseai.sh @@ -42,4 +42,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/ct/fluid-calendar.sh b/ct/fluid-calendar.sh index beb7deae5..bea903d30 100644 --- a/ct/fluid-calendar.sh +++ b/ct/fluid-calendar.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2025 community-scripts ORG # Author: vhsdream # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -29,7 +29,7 @@ function update_script() { exit fi - RELEASE=$(curl -s https://api.github.com/repos/dotnetfactory/fluid-calendar/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') + RELEASE=$(curl -fsSL https://api.github.com/repos/dotnetfactory/fluid-calendar/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then msg_info "Stopping $APP" systemctl stop fluid-calendar.service @@ -39,7 +39,7 @@ function update_script() { cp /opt/fluid-calendar/.env /opt/fluid.env rm -rf /opt/fluid-calendar tmp_file=$(mktemp) - wget -q "https://github.com/dotnetfactory/fluid-calendar/archive/refs/tags/v${RELEASE}.zip" -O $tmp_file +curl -fsSL "https://github.com/dotnetfactory/fluid-calendar/archive/refs/tags/v${RELEASE}.zip" -o "$tmp_file" unzip -q $tmp_file mv ${APP}-${RELEASE}/ /opt/fluid-calendar mv /opt/fluid.env /opt/fluid-calendar/.env @@ -74,4 +74,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}" +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}" \ No newline at end of file diff --git a/ct/forgejo.sh b/ct/forgejo.sh index ce7280fc1..cce8c0818 100644 --- a/ct/forgejo.sh +++ b/ct/forgejo.sh @@ -32,8 +32,8 @@ function update_script() { msg_ok "Stopped ${APP}" msg_info "Updating ${APP}" - RELEASE=$(curl -s https://codeberg.org/api/v1/repos/forgejo/forgejo/releases/latest | grep -oP '"tag_name":\s*"\K[^"]+' | sed 's/^v//') - wget -qO forgejo-$RELEASE-linux-amd64 "https://codeberg.org/forgejo/forgejo/releases/download/v${RELEASE}/forgejo-${RELEASE}-linux-amd64" + RELEASE=$(curl -fsSL https://codeberg.org/api/v1/repos/forgejo/forgejo/releases/latest | grep -oP '"tag_name":\s*"\K[^"]+' | sed 's/^v//') +curl -fsSL "https://codeberg.org/forgejo/forgejo/releases/download/v${RELEASE}/forgejo-${RELEASE}-linux-amd64" -o "forgejo-$RELEASE-linux-amd64" rm -rf /opt/forgejo/* cp -r forgejo-$RELEASE-linux-amd64 /opt/forgejo/forgejo-$RELEASE-linux-amd64 chmod +x /opt/forgejo/forgejo-$RELEASE-linux-amd64 @@ -58,4 +58,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/ct/freshrss.sh b/ct/freshrss.sh index ef7d11d29..c9057df46 100644 --- a/ct/freshrss.sh +++ b/ct/freshrss.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2025 community-scripts ORG # Author: bvdberg01 # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -38,4 +38,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}${CL}" +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}" \ No newline at end of file diff --git a/ct/frigate.sh b/ct/frigate.sh index dcb9b3fd3..7f4b3267f 100644 --- a/ct/frigate.sh +++ b/ct/frigate.sh @@ -38,4 +38,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/gitea.sh b/ct/gitea.sh index 5b7bdd4e3..78e8ede2c 100644 --- a/ct/gitea.sh +++ b/ct/gitea.sh @@ -27,9 +27,9 @@ function update_script() { msg_error "No ${APP} Installation Found!" exit fi - RELEASE=$(wget -q https://github.com/go-gitea/gitea/releases/latest -O - | grep "title>Release" | cut -d " " -f 4 | sed 's/^v//') + RELEASE=$(curl -fsSL https://github.com/go-gitea/gitea/releases/latest | grep "title>Release" | cut -d " " -f 4 | sed 's/^v//') msg_info "Updating $APP to ${RELEASE}" - wget -q https://github.com/go-gitea/gitea/releases/download/v$RELEASE/gitea-$RELEASE-linux-amd64 + curl -fsSL "https://github.com/go-gitea/gitea/releases/download/v$RELEASE/gitea-$RELEASE-linux-amd64" -o $(basename "https://github.com/go-gitea/gitea/releases/download/v$RELEASE/gitea-$RELEASE-linux-amd64") systemctl stop gitea rm -rf /usr/local/bin/gitea mv gitea* /usr/local/bin/gitea diff --git a/ct/glance.sh b/ct/glance.sh index 94bc5b5ed..8e9f1cf0b 100644 --- a/ct/glance.sh +++ b/ct/glance.sh @@ -29,7 +29,7 @@ function update_script() { exit fi - RELEASE=$(curl -s https://api.github.com/repos/glanceapp/glance/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') + RELEASE=$(curl -fsSL https://api.github.com/repos/glanceapp/glance/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" systemctl stop glance @@ -37,7 +37,7 @@ function update_script() { msg_info "Updating ${APP} to v${RELEASE}" cd /opt - wget -q https://github.com/glanceapp/glance/releases/download/v${RELEASE}/glance-linux-amd64.tar.gz + curl -fsSL "https://github.com/glanceapp/glance/releases/download/v${RELEASE}/glance-linux-amd64.tar.gz" -o $(basename "https://github.com/glanceapp/glance/releases/download/v${RELEASE}/glance-linux-amd64.tar.gz") rm -rf /opt/glance/glance tar -xzf glance-linux-amd64.tar.gz -C /opt/glance echo "${RELEASE}" >"/opt/${APP}_version.txt" diff --git a/ct/glpi.sh b/ct/glpi.sh index de03f7dd9..b0a5c7519 100644 --- a/ct/glpi.sh +++ b/ct/glpi.sh @@ -28,7 +28,7 @@ function update_script() { msg_error "No ${APP} Installation Found!" exit fi - RELEASE=$(curl -s https://api.github.com/repos/glpi-project/glpi/releases/latest | grep '"tag_name"' | sed -E 's/.*"tag_name": "([^"]+)".*/\1/') + RELEASE=$(curl -fsSL https://api.github.com/repos/glpi-project/glpi/releases/latest | grep '"tag_name"' | sed -E 's/.*"tag_name": "([^"]+)".*/\1/') if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then msg_error "Currently we don't provide an update function for this ${APP}." else diff --git a/ct/go2rtc.sh b/ct/go2rtc.sh index 6d78cb3a7..067d908f0 100644 --- a/ct/go2rtc.sh +++ b/ct/go2rtc.sh @@ -31,7 +31,7 @@ function update_script() { systemctl stop go2rtc cd /opt/go2rtc rm go2rtc_linux_amd64 - wget -q https://github.com/AlexxIT/go2rtc/releases/latest/download/go2rtc_linux_amd64 + curl -fsSL "https://github.com/AlexxIT/go2rtc/releases/latest/download/go2rtc_linux_amd64" -o $(basename "https://github.com/AlexxIT/go2rtc/releases/latest/download/go2rtc_linux_amd64") chmod +x go2rtc_linux_amd64 systemctl start go2rtc msg_ok "Updated $APP" @@ -45,4 +45,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}:1984${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:1984${CL}" diff --git a/ct/gomft.sh b/ct/gomft.sh index a274d2977..75355712f 100644 --- a/ct/gomft.sh +++ b/ct/gomft.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2025 community-scripts ORG # Author: Slaviša Arežina (tremor021) # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -28,11 +28,17 @@ function update_script() { msg_error "No ${APP} Installation Found!" exit fi - RELEASE=$(curl -s https://api.github.com/repos/StarFleetCPTN/GoMFT/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') if ! dpkg -l | grep -q "^ii.*build-essential"; then $STD apt-get install -y build-essential fi - + if [[ ! -f "/usr/bin/node" ]]; then + mkdir -p /etc/apt/keyrings + curl -fsSL "https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key" | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg + echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_22.x nodistro main" >/etc/apt/sources.list.d/nodesource.list + $STD apt-get update + $STD apt-get install -y nodejs + fi + RELEASE=$(curl -fsSL "https://api.github.com/repos/StarFleetCPTN/GoMFT/releases/latest" | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then msg_info "Stopping $APP" systemctl stop gomft @@ -41,13 +47,16 @@ function update_script() { msg_info "Updating $APP to ${RELEASE}" rm -f /opt/gomft/gomft temp_file=$(mktemp) - wget -q "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 + 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 + rm -rf /opt/gomft/node_modules + $STD npm ci + $STD node build.js $STD go mod download - $STD go install github.com/a-h/templ/cmd/templ@latest - $STD $HOME/go/bin/templ generate + $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 @@ -56,8 +65,8 @@ function update_script() { msg_ok "Updated $APP to ${RELEASE}" msg_info "Cleaning Up" - rm -f $temp_file - rm -rf GoMFT-${RELEASE} + rm -f "$temp_file" + rm -rf "$HOME/GoMFT-v.${RELEASE}/" msg_ok "Cleanup Complete" msg_info "Starting $APP" diff --git a/ct/gotify.sh b/ct/gotify.sh index 5b5fc1204..78d0d8ed4 100644 --- a/ct/gotify.sh +++ b/ct/gotify.sh @@ -28,7 +28,7 @@ function update_script() { exit fi - RELEASE=$(curl -s https://api.github.com/repos/gotify/server/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') + RELEASE=$(curl -fsSL https://api.github.com/repos/gotify/server/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 ${APP}" systemctl stop gotify @@ -36,7 +36,7 @@ function update_script() { msg_info "Updating ${APP} to ${RELEASE}" cd /opt/gotify - wget -q https://github.com/gotify/server/releases/download/v${RELEASE}/gotify-linux-amd64.zip + curl -fsSL "https://github.com/gotify/server/releases/download/v${RELEASE}/gotify-linux-amd64.zip" -o $(basename "https://github.com/gotify/server/releases/download/v${RELEASE}/gotify-linux-amd64.zip") unzip -oq gotify-linux-amd64.zip rm -rf gotify-linux-amd64.zip chmod +x gotify-linux-amd64 diff --git a/ct/grafana.sh b/ct/grafana.sh index 37afd4496..07b8baa57 100644 --- a/ct/grafana.sh +++ b/ct/grafana.sh @@ -41,4 +41,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/ct/graylog.sh b/ct/graylog.sh index 5beed3753..35743a048 100644 --- a/ct/graylog.sh +++ b/ct/graylog.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2025 community-scripts ORG # Author: Slaviša Arežina (tremor021) # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -54,4 +54,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}:9000${CL}" +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:9000${CL}" \ No newline at end of file diff --git a/ct/grist.sh b/ct/grist.sh index 217bcba78..3733de7a6 100644 --- a/ct/grist.sh +++ b/ct/grist.sh @@ -28,7 +28,7 @@ function update_script() { exit fi - RELEASE=$(curl -s https://api.github.com/repos/gristlabs/grist-core/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') + RELEASE=$(curl -fsSL https://api.github.com/repos/gristlabs/grist-core/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 ${APP} Service" @@ -40,7 +40,7 @@ function update_script() { cd /opt rm -rf grist_bak mv grist grist_bak - wget -q https://github.com/gristlabs/grist-core/archive/refs/tags/v${RELEASE}.zip + curl -fsSL "https://github.com/gristlabs/grist-core/archive/refs/tags/v${RELEASE}.zip" -o $(basename "https://github.com/gristlabs/grist-core/archive/refs/tags/v${RELEASE}.zip") unzip -q v$RELEASE.zip mv grist-core-${RELEASE} grist diff --git a/ct/grocy.sh b/ct/grocy.sh index 31ec35ca6..4be2f7df8 100644 --- a/ct/grocy.sh +++ b/ct/grocy.sh @@ -30,7 +30,7 @@ function update_script() { php_version=$(php -v | head -n 1 | awk '{print $2}') if [[ ! $php_version == "8.3"* ]]; then msg_info "Updating PHP" - curl -sSLo /usr/share/keyrings/deb.sury.org-php.gpg https://packages.sury.org/php/apt.gpg + curl -fsSLo /usr/share/keyrings/deb.sury.org-php.gpg https://packages.sury.org/php/apt.gpg echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ bookworm main" >/etc/apt/sources.list.d/php.list apt-get update apt-get install -y php8.3 php8.3-cli php8.3-{bz2,curl,mbstring,intl,sqlite3,fpm,gd,zip,xml} @@ -51,4 +51,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}${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}" diff --git a/ct/habitica.sh b/ct/habitica.sh index a85a973ef..195876fa8 100644 --- a/ct/habitica.sh +++ b/ct/habitica.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2025 community-scripts ORG # Author: Slaviša Arežina (tremor021) # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -28,7 +28,7 @@ function update_script() { msg_error "No ${APP} Installation Found!" exit fi - RELEASE=$(curl -s https://api.github.com/repos/HabitRPG/habitica/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') + RELEASE=$(curl -fsSL https://api.github.com/repos/HabitRPG/habitica/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then msg_info "Stopping $APP" systemctl stop habitica-mongodb @@ -38,7 +38,7 @@ function update_script() { msg_info "Updating $APP to ${RELEASE}" temp_file=$(mktemp) - wget -q "https://github.com/HabitRPG/habitica/archive/refs/tags/v${RELEASE}.tar.gz" -O $temp_file +curl -fsSL "https://github.com/HabitRPG/habitica/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file" tar zxf $temp_file cp -rf habitica-${RELEASE}/* /opt/habitica cd /opt/habitica @@ -71,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}:8080${CL}" +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8080${CL}" \ No newline at end of file diff --git a/ct/headers/alpine-mariadb b/ct/headers/alpine-mariadb new file mode 100644 index 000000000..1279f836a --- /dev/null +++ b/ct/headers/alpine-mariadb @@ -0,0 +1,6 @@ + ___ __ _ __ ___ _ ____ ____ + / | / /___ (_)___ ___ / |/ /___ ______(_)___ _/ __ \/ __ ) + / /| | / / __ \/ / __ \/ _ \______/ /|_/ / __ `/ ___/ / __ `/ / / / __ | + / ___ |/ / /_/ / / / / / __/_____/ / / / /_/ / / / / /_/ / /_/ / /_/ / +/_/ |_/_/ .___/_/_/ /_/\___/ /_/ /_/\__,_/_/ /_/\__,_/_____/_____/ + /_/ diff --git a/ct/headers/alpine-node-red b/ct/headers/alpine-node-red new file mode 100644 index 000000000..ef7b8a85a --- /dev/null +++ b/ct/headers/alpine-node-red @@ -0,0 +1,6 @@ + ___ __ _ _ __ __ ____ __________ + / | / /___ (_)___ ___ / | / /___ ____/ /__ / __ \/ ____/ __ \ + / /| | / / __ \/ / __ \/ _ \______/ |/ / __ \/ __ / _ \______/ /_/ / __/ / / / / + / ___ |/ / /_/ / / / / / __/_____/ /| / /_/ / /_/ / __/_____/ _, _/ /___/ /_/ / +/_/ |_/_/ .___/_/_/ /_/\___/ /_/ |_/\____/\__,_/\___/ /_/ |_/_____/_____/ + /_/ diff --git a/ct/headers/alpine-prometheus b/ct/headers/alpine-prometheus new file mode 100644 index 000000000..5934057fb --- /dev/null +++ b/ct/headers/alpine-prometheus @@ -0,0 +1,6 @@ + ___ __ _ ____ __ __ + / | / /___ (_)___ ___ / __ \_________ ____ ___ ___ / /_/ /_ ___ __ _______ + / /| | / / __ \/ / __ \/ _ \______/ /_/ / ___/ __ \/ __ `__ \/ _ \/ __/ __ \/ _ \/ / / / ___/ + / ___ |/ / /_/ / / / / / __/_____/ ____/ / / /_/ / / / / / / __/ /_/ / / / __/ /_/ (__ ) +/_/ |_/_/ .___/_/_/ /_/\___/ /_/ /_/ \____/_/ /_/ /_/\___/\__/_/ /_/\___/\__,_/____/ + /_/ diff --git a/ct/headers/alpine-wireguard b/ct/headers/alpine-wireguard new file mode 100644 index 000000000..0d4c1bf88 --- /dev/null +++ b/ct/headers/alpine-wireguard @@ -0,0 +1,6 @@ + ___ __ _ _ ___ __ + / | / /___ (_)___ ___ | | / (_)_______ ____ ___ ______ __________/ / + / /| | / / __ \/ / __ \/ _ \_____| | /| / / / ___/ _ \/ __ `/ / / / __ `/ ___/ __ / + / ___ |/ / /_/ / / / / / __/_____/ |/ |/ / / / / __/ /_/ / /_/ / /_/ / / / /_/ / +/_/ |_/_/ .___/_/_/ /_/\___/ |__/|__/_/_/ \___/\__, /\__,_/\__,_/_/ \__,_/ + /_/ /____/ diff --git a/ct/headers/karakeep b/ct/headers/karakeep new file mode 100644 index 000000000..926024d89 --- /dev/null +++ b/ct/headers/karakeep @@ -0,0 +1,6 @@ + __ __ + / /______ __________ _/ /_____ ___ ____ + / //_/ __ `/ ___/ __ `/ //_/ _ \/ _ \/ __ \ + / ,< / /_/ / / / /_/ / ,< / __/ __/ /_/ / +/_/|_|\__,_/_/ \__,_/_/|_|\___/\___/ .___/ + /_/ diff --git a/ct/headers/meilisearch b/ct/headers/meilisearch new file mode 100644 index 000000000..955aaae38 --- /dev/null +++ b/ct/headers/meilisearch @@ -0,0 +1,6 @@ + __ ___ _ ___ __ + / |/ /__ (_) (_)_______ ____ ___________/ /_ + / /|_/ / _ \/ / / / ___/ _ \/ __ `/ ___/ ___/ __ \ + / / / / __/ / / (__ ) __/ /_/ / / / /__/ / / / +/_/ /_/\___/_/_/_/____/\___/\__,_/_/ \___/_/ /_/ + diff --git a/ct/headers/openziti-tunnel b/ct/headers/openziti-tunnel new file mode 100644 index 000000000..a908abd8f --- /dev/null +++ b/ct/headers/openziti-tunnel @@ -0,0 +1,6 @@ + _ __ _ __ __ + ____ ____ ___ ____ ____ (_) /_(_) / /___ ______ ____ ___ / / + / __ \/ __ \/ _ \/ __ \/_ / / / __/ /_____/ __/ / / / __ \/ __ \/ _ \/ / +/ /_/ / /_/ / __/ / / / / /_/ / /_/ /_____/ /_/ /_/ / / / / / / / __/ / +\____/ .___/\___/_/ /_/ /___/_/\__/_/ \__/\__,_/_/ /_/_/ /_/\___/_/ + /_/ diff --git a/ct/headers/slskd b/ct/headers/slskd new file mode 100644 index 000000000..6ebb289ea --- /dev/null +++ b/ct/headers/slskd @@ -0,0 +1,6 @@ + __ __ __ + _____/ /____/ /______/ / + / ___/ / ___/ //_/ __ / + (__ ) (__ ) ,< / /_/ / +/____/_/____/_/|_|\__,_/ + diff --git a/ct/headscale.sh b/ct/headscale.sh index df66dabf9..2cce3c7d9 100644 --- a/ct/headscale.sh +++ b/ct/headscale.sh @@ -27,14 +27,14 @@ function update_script() { msg_error "No ${APP} Installation Found!" exit fi - RELEASE=$(curl -s https://api.github.com/repos/juanfont/headscale/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') + RELEASE=$(curl -fsSL https://api.github.com/repos/juanfont/headscale/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then msg_info "Stopping ${APP}" systemctl stop headscale msg_ok "Stopped ${APP}" msg_info "Updating $APP to v${RELEASE}" - wget -q https://github.com/juanfont/headscale/releases/download/v${RELEASE}/headscale_${RELEASE}_linux_amd64.deb + curl -fsSL "https://github.com/juanfont/headscale/releases/download/v${RELEASE}/headscale_${RELEASE}_linux_amd64.deb" -o $(basename "https://github.com/juanfont/headscale/releases/download/v${RELEASE}/headscale_${RELEASE}_linux_amd64.deb") dpkg -i headscale_${RELEASE}_linux_amd64.deb rm headscale_${RELEASE}_linux_amd64.deb echo "${RELEASE}" >/opt/${APP}_version.txt diff --git a/ct/heimdall-dashboard.sh b/ct/heimdall-dashboard.sh index a074c212f..28196bc99 100644 --- a/ct/heimdall-dashboard.sh +++ b/ct/heimdall-dashboard.sh @@ -27,7 +27,7 @@ function update_script() { msg_error "No ${APP} Installation Found!" exit fi - RELEASE=$(curl -sX GET "https://api.github.com/repos/linuxserver/Heimdall/releases/latest" | awk '/tag_name/{print $4;exit}' FS='[""]') + RELEASE=$(curl -fsSL "https://api.github.com/repos/linuxserver/Heimdall/releases/latest" | awk '/tag_name/{print $4;exit}' FS='[""]') if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then msg_info "Stopping ${APP}" systemctl stop heimdall @@ -39,24 +39,24 @@ function update_script() { sleep 1 msg_ok "Backed up Data" msg_info "Updating Heimdall Dashboard to ${RELEASE}" - wget -q https://github.com/linuxserver/Heimdall/archive/${RELEASE}.tar.gz - tar xzf ${RELEASE}.tar.gz - VER=$(curl -s 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 + curl -fsSL "https://github.com/linuxserver/Heimdall/archive/${RELEASE}.tar.gz" -o $(basename "https://github.com/linuxserver/Heimdall/archive/${RELEASE}.tar.gz") + 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 $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 ~ + cd ~ || exit cp -R database-backup/* /opt/Heimdall/database cp -R public-backup/* /opt/Heimdall/public sleep 1 msg_ok "Restored Data" msg_info "Cleanup" - rm -rf {${RELEASE}.tar.gz,Heimdall-${VER},public-backup,database-backup,Heimdall} + rm -rf {"${RELEASE}".tar.gz,Heimdall-"${VER}",public-backup,database-backup,Heimdall} sleep 1 msg_ok "Cleaned" msg_info "Starting ${APP}" @@ -77,4 +77,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}:7990${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:7990${CL}" diff --git a/ct/hev-socks5-server.sh b/ct/hev-socks5-server.sh index 84e9bd287..1b5da660c 100644 --- a/ct/hev-socks5-server.sh +++ b/ct/hev-socks5-server.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2025 community-scripts ORG # Author: miviro # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -29,7 +29,7 @@ function update_script() { exit fi - RELEASE=$(curl -s https://api.github.com/repos/heiher/${APP}/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') + RELEASE=$(curl -fsSL https://api.github.com/repos/heiher/${APP}/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then msg_info "Stopping $APP" systemctl stop $APP @@ -61,4 +61,4 @@ msg_ok "Completed Successfully!\n" echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" echo -e "${INFO}${YW} Access it with a SOCKS5 client using the following URL:${CL}" echo -e "${TAB}${GATEWAY}${BGN}${IP}:1080${CL}" -echo -e "${INFO}${YW} and the credentials stored at /root/hev.creds${CL}" +echo -e "${INFO}${YW} and the credentials stored at /root/hev.creds${CL}" \ No newline at end of file diff --git a/ct/hivemq.sh b/ct/hivemq.sh index 52ecea72b..b9fde1667 100644 --- a/ct/hivemq.sh +++ b/ct/hivemq.sh @@ -36,4 +36,4 @@ build_container description msg_ok "Completed Successfully!\n" -echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" \ No newline at end of file +echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" diff --git a/ct/hoarder.sh b/ct/hoarder.sh index 14b1dad22..0b455da98 100644 --- a/ct/hoarder.sh +++ b/ct/hoarder.sh @@ -27,7 +27,7 @@ function update_script() { msg_error "No ${APP} Installation Found!" exit fi - RELEASE=$(curl -s https://api.github.com/repos/hoarder-app/hoarder/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') + RELEASE=$(curl -fsSL https://api.github.com/repos/hoarder-app/hoarder/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') PREV_RELEASE=$(cat /opt/${APP}_version.txt) if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "${PREV_RELEASE}" ]]; then msg_info "Stopping Services" @@ -38,25 +38,25 @@ function update_script() { $STD npm install -g corepack@0.31.0 fi if [[ "${PREV_RELEASE}" < 0.23.0 ]]; then - $STD apt-get install -y graphicsmagick ghostscript + $STD apt-get install -y graphicsmagick ghostscript fi - cd /opt + cd /opt || exit if [[ -f /opt/hoarder/.env ]] && [[ ! -f /etc/hoarder/hoarder.env ]]; then mkdir -p /etc/hoarder mv /opt/hoarder/.env /etc/hoarder/hoarder.env fi rm -rf /opt/hoarder - wget -q "https://github.com/hoarder-app/hoarder/archive/refs/tags/v${RELEASE}.zip" - unzip -q v${RELEASE}.zip - mv hoarder-${RELEASE} /opt/hoarder - cd /opt/hoarder/apps/web + 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 $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 + cd /opt/hoarder/apps/workers || exit $STD pnpm install --frozen-lockfile export DATA_DIR=/opt/hoarder_data - cd /opt/hoarder/packages/db + cd /opt/hoarder/packages/db || exit $STD pnpm migrate sed -i "s/SERVER_VERSION=${PREV_RELEASE}/SERVER_VERSION=${RELEASE}/" /etc/hoarder/hoarder.env msg_ok "Updated ${APP} to v${RELEASE}" @@ -65,7 +65,7 @@ function update_script() { systemctl start hoarder-browser hoarder-workers hoarder-web msg_ok "Started Services" msg_info "Cleaning up" - rm -R /opt/v${RELEASE}.zip + rm -R /opt/v"${RELEASE}".zip echo "${RELEASE}" >/opt/${APP}_version.txt msg_ok "Cleaned" msg_ok "Updated Successfully" diff --git a/ct/homarr.sh b/ct/homarr.sh index ae61b19f2..fe87f0b27 100644 --- a/ct/homarr.sh +++ b/ct/homarr.sh @@ -28,20 +28,20 @@ function update_script() { msg_error "No ${APP} Installation Found!" exit fi -if [[ -f /opt/homarr/database/db.sqlite ]]; then + if [[ -f /opt/homarr/database/db.sqlite ]]; then msg_error "Old Homarr detected due to existing database file (/opt/homarr/database/db.sqlite)." msg_error "Update not supported. Refer to:" msg_error " - https://github.com/community-scripts/ProxmoxVE/discussions/1551" msg_error " - https://homarr.dev/docs/getting-started/after-the-installation/#importing-a-zip-from-version-before-100" exit 1 -fi -if [[ ! -f /opt/run_homarr.sh ]]; then - msg_info "Detected outdated and missing service files" - msg_error "Warning - The port of homarr changed from 3000 to 7575" - $STD apt-get install -y nginx gettext openssl gpg - sed -i '/^NODE_ENV=/d' /opt/homarr/.env && echo "NODE_ENV='production'" >> /opt/homarr/.env - sed -i '/^DB_DIALECT=/d' /opt/homarr/.env && echo "DB_DIALECT='sqlite'" >> /opt/homarr/.env - cat <<'EOF' >/opt/run_homarr.sh + fi + if [[ ! -f /opt/run_homarr.sh ]]; then + msg_info "Detected outdated and missing service files" + msg_error "Warning - The port of homarr changed from 3000 to 7575" + $STD apt-get install -y nginx gettext openssl gpg + sed -i '/^NODE_ENV=/d' /opt/homarr/.env && echo "NODE_ENV='production'" >>/opt/homarr/.env + sed -i '/^DB_DIALECT=/d' /opt/homarr/.env && echo "DB_DIALECT='sqlite'" >>/opt/homarr/.env + cat <<'EOF' >/opt/run_homarr.sh #!/bin/bash set -a source /opt/homarr/.env @@ -63,9 +63,9 @@ node apps/websocket/wssServer.cjs & node apps/nextjs/server.js & PID=$! wait $PID EOF - chmod +x /opt/run_homarr.sh - rm /etc/systemd/system/homarr.service - cat </etc/systemd/system/homarr.service + chmod +x /opt/run_homarr.sh + rm /etc/systemd/system/homarr.service + cat </etc/systemd/system/homarr.service [Unit] Description=Homarr Service After=network.target @@ -77,10 +77,10 @@ ExecStart=/opt/run_homarr.sh [Install] WantedBy=multi-user.target EOF - msg_ok "Updated Services" - systemctl daemon-reload -fi - RELEASE=$(curl -s https://api.github.com/repos/homarr-labs/homarr/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') + msg_ok "Updated Services" + systemctl daemon-reload + fi + RELEASE=$(curl -fsSL https://api.github.com/repos/homarr-labs/homarr/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 (Patience)" @@ -117,7 +117,7 @@ node apps/nextjs/server.js & PID=$! wait $PID EOF chmod +x /opt/run_homarr.sh - wget -q "https://github.com/homarr-labs/homarr/archive/refs/tags/v${RELEASE}.zip" +curl -fsSL "https://github.com/homarr-labs/homarr/archive/refs/tags/v${RELEASE}.zip" -o $(basename "https://github.com/homarr-labs/homarr/archive/refs/tags/v${RELEASE}.zip") unzip -q v${RELEASE}.zip rm -rf v${RELEASE}.zip rm -rf /opt/homarr @@ -138,9 +138,9 @@ EOF mkdir -p /opt/homarr/apps/cli cp /opt/homarr/packages/cli/cli.cjs /opt/homarr/apps/cli/cli.cjs - echo $'#!/bin/bash\ncd /opt/homarr/apps/cli && node ./cli.cjs "$@"' > /usr/bin/homarr + echo $'#!/bin/bash\ncd /opt/homarr/apps/cli && node ./cli.cjs "$@"' >/usr/bin/homarr chmod +x /usr/bin/homarr - + mkdir /opt/homarr/build cp ./node_modules/better-sqlite3/build/Release/better_sqlite3.node ./build/better_sqlite3.node echo "${RELEASE}" >/opt/${APP}_version.txt diff --git a/ct/homeassistant-core.sh b/ct/homeassistant-core.sh index ccfd0859c..4c04882a0 100644 --- a/ct/homeassistant-core.sh +++ b/ct/homeassistant-core.sh @@ -100,7 +100,7 @@ function update_script() { msg_ok "Installed FileBrowser" msg_info "Creating Service" - cat < /etc/systemd/system/filebrowser.service + cat </etc/systemd/system/filebrowser.service [Unit] Description=Filebrowser After=network-online.target @@ -131,4 +131,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}:8123${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8123${CL}" diff --git a/ct/homeassistant.sh b/ct/homeassistant.sh index 07751f4fe..f43d30903 100644 --- a/ct/homeassistant.sh +++ b/ct/homeassistant.sh @@ -91,7 +91,7 @@ ExecStart=/usr/local/bin/filebrowser -r / [Install] WantedBy=default.target" >$service_path - $STD systemctl enable --now filebrowser.service + $STD systemctl enable --now filebrowser msg_ok "Created Service" msg_ok "Completed Successfully!\n" diff --git a/ct/homebox.sh b/ct/homebox.sh index a9806c2ad..575d4bc53 100644 --- a/ct/homebox.sh +++ b/ct/homebox.sh @@ -26,7 +26,7 @@ function update_script() { msg_error "No ${APP} Installation Found!" exit fi - RELEASE=$(curl -s https://api.github.com/repos/sysadminsmedia/homebox/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') + RELEASE=$(curl -fsSL https://api.github.com/repos/sysadminsmedia/homebox/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then msg_info "Stopping ${APP}" systemctl stop homebox @@ -37,7 +37,7 @@ function update_script() { rm -rf homebox_bak rm -rf /tmp/homebox.tar.gz mv homebox homebox_bak - wget -qO /tmp/homebox.tar.gz https://github.com/sysadminsmedia/homebox/releases/download/${RELEASE}/homebox_Linux_x86_64.tar.gz +curl -fsSL "https://github.com/sysadminsmedia/homebox/releases/download/${RELEASE}/homebox_Linux_x86_64.tar.gz" -o "/tmp/homebox.tar.gz" tar -xzf /tmp/homebox.tar.gz -C /opt chmod +x /opt/homebox echo "${RELEASE}" >/opt/${APP}_version.txt @@ -61,4 +61,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}:7745${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:7745${CL}" diff --git a/ct/homebridge.sh b/ct/homebridge.sh index b71758812..39ce41116 100644 --- a/ct/homebridge.sh +++ b/ct/homebridge.sh @@ -41,4 +41,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}:8581${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8581${CL}" diff --git a/ct/homepage.sh b/ct/homepage.sh index ca50bb143..426a905b1 100644 --- a/ct/homepage.sh +++ b/ct/homepage.sh @@ -36,11 +36,11 @@ function update_script() { fi fi LOCAL_IP=$(hostname -I | awk '{print $1}') - RELEASE=$(curl -s https://api.github.com/repos/gethomepage/homepage/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') + RELEASE=$(curl -fsSL https://api.github.com/repos/gethomepage/homepage/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then msg_info "Updating Homepage to v${RELEASE} (Patience)" systemctl stop homepage - wget -q https://github.com/gethomepage/homepage/archive/refs/tags/v${RELEASE}.tar.gz + curl -fsSL "https://github.com/gethomepage/homepage/archive/refs/tags/v${RELEASE}.tar.gz" -o $(basename "https://github.com/gethomepage/homepage/archive/refs/tags/v${RELEASE}.tar.gz") tar -xzf v${RELEASE}.tar.gz rm -rf v${RELEASE}.tar.gz cp -r homepage-${RELEASE}/* /opt/homepage/ @@ -53,7 +53,7 @@ function update_script() { export NEXT_TELEMETRY_DISABLED=1 $STD pnpm build if [[ ! -f /opt/homepage/.env ]]; then - echo "HOMEPAGE_ALLOWED_HOSTS=localhost:3000,${LOCAL_IP}:3000" > /opt/homepage/.env + echo "HOMEPAGE_ALLOWED_HOSTS=localhost:3000,${LOCAL_IP}:3000" >/opt/homepage/.env fi systemctl start homepage echo "${RELEASE}" >/opt/${APP}_version.txt diff --git a/ct/homer.sh b/ct/homer.sh index 950c04cd1..193e5b166 100644 --- a/ct/homer.sh +++ b/ct/homer.sh @@ -40,7 +40,7 @@ function update_script() { msg_info "Updating ${APP}" rm -rf /opt/homer/* cd /opt/homer - wget -q https://github.com/bastienwirtz/homer/releases/latest/download/homer.zip + curl -fsSL "https://github.com/bastienwirtz/homer/releases/latest/download/homer.zip" -o $(basename "https://github.com/bastienwirtz/homer/releases/latest/download/homer.zip") $STD unzip homer.zip msg_ok "Updated ${APP}" @@ -67,4 +67,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}:8010${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8010${CL}" diff --git a/ct/hyperhdr.sh b/ct/hyperhdr.sh index f59a1f36f..46eab2007 100644 --- a/ct/hyperhdr.sh +++ b/ct/hyperhdr.sh @@ -41,4 +41,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}:8090${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8090${CL}" diff --git a/ct/hyperion.sh b/ct/hyperion.sh index 870690be9..8d831c2b5 100644 --- a/ct/hyperion.sh +++ b/ct/hyperion.sh @@ -41,4 +41,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}:8090${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8090${CL}" diff --git a/ct/inspircd.sh b/ct/inspircd.sh index a5e057c79..a9cc2bd7d 100644 --- a/ct/inspircd.sh +++ b/ct/inspircd.sh @@ -27,7 +27,7 @@ function update_script() { msg_error "No ${APP} Installation Found!" exit fi - RELEASE=$(curl -s https://api.github.com/repos/inspircd/inspircd/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') + RELEASE=$(curl -fsSL https://api.github.com/repos/inspircd/inspircd/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" systemctl stop inspircd @@ -35,7 +35,7 @@ function update_script() { msg_info "Updating ${APP} to v${RELEASE}" cd /opt - wget -q https://github.com/inspircd/inspircd/releases/download/v${RELEASE}/inspircd_${RELEASE}.deb12u1_amd64.deb + curl -fsSL "https://github.com/inspircd/inspircd/releases/download/v${RELEASE}/inspircd_${RELEASE}.deb12u1_amd64.deb" -o $(basename "https://github.com/inspircd/inspircd/releases/download/v${RELEASE}/inspircd_${RELEASE}.deb12u1_amd64.deb") $STD apt-get install "./inspircd_${RELEASE}.deb12u1_amd64.deb" -y echo "${RELEASE}" >"/opt/${APP}_version.txt" msg_ok "Updated ${APP} to v${RELEASE}" @@ -61,4 +61,4 @@ description msg_ok "Completed Successfully!\n" echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" echo -e "${INFO}${YW} Server-Acces it using the following URL:${CL}" -echo -e "${TAB}${GATEWAY}${BGN}${IP}:6667${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}${IP}:6667${CL}" diff --git a/ct/inventree.sh b/ct/inventree.sh index b8a6a7e67..f300b10ed 100644 --- a/ct/inventree.sh +++ b/ct/inventree.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2025 community-scripts ORG # Author: Slaviša Arežina (tremor021) # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -42,4 +42,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}${CL}" +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}" \ No newline at end of file diff --git a/ct/iobroker.sh b/ct/iobroker.sh index 73d25ee5b..8977bf404 100644 --- a/ct/iobroker.sh +++ b/ct/iobroker.sh @@ -41,4 +41,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}:8081${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8081${CL}" diff --git a/ct/iventoy.sh b/ct/iventoy.sh index dc6bd05dd..83b6d4ae5 100644 --- a/ct/iventoy.sh +++ b/ct/iventoy.sh @@ -38,4 +38,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}:26000${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:26000${CL}" diff --git a/ct/jackett.sh b/ct/jackett.sh index 93fabd3c0..752202870 100644 --- a/ct/jackett.sh +++ b/ct/jackett.sh @@ -27,10 +27,10 @@ function update_script() { msg_error "No ${APP} Installation Found!" exit fi - RELEASE=$(wget -q https://github.com/Jackett/Jackett/releases/latest -O - | grep "title>Release" | cut -d " " -f 4) + RELEASE=$(curl -fsSL https://github.com/Jackett/Jackett/releases/latest | grep "title>Release" | cut -d " " -f 4) if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then msg_info "Updating ${APP}" - wget -q https://github.com/Jackett/Jackett/releases/download/$RELEASE/Jackett.Binaries.LinuxAMDx64.tar.gz + curl -fsSL "https://github.com/Jackett/Jackett/releases/download/$RELEASE/Jackett.Binaries.LinuxAMDx64.tar.gz" -o $(basename "https://github.com/Jackett/Jackett/releases/download/$RELEASE/Jackett.Binaries.LinuxAMDx64.tar.gz") systemctl stop jackett rm -rf /opt/Jackett tar -xzf Jackett.Binaries.LinuxAMDx64.tar.gz -C /opt diff --git a/ct/jellyseerr.sh b/ct/jellyseerr.sh index cfae7a323..39f6a4407 100644 --- a/ct/jellyseerr.sh +++ b/ct/jellyseerr.sh @@ -14,7 +14,7 @@ var_os="debian" var_version="12" var_unprivileged="1" -header_info "$APP" +header_info "$APP" variables color catch_errors @@ -24,7 +24,7 @@ function update_script() { check_container_storage check_container_resources - if [[ ! -d /opt/jellyseerr ]]; then + if [[ ! -d /opt/jellyseerr ]]; then msg_error "No ${APP} Installation Found!" exit fi @@ -38,7 +38,7 @@ function update_script() { $STD apt-get update $STD apt-get -y upgrade msg_ok "Updating Packages" - + msg_info "Cleaning up" apt-get -y autoremove apt-get -y autoclean @@ -50,11 +50,11 @@ function update_script() { pnpm_current=$(pnpm --version 2>/dev/null) pnpm_desired=$(grep -Po '"pnpm":\s*"\K[^"]+' /opt/jellyseerr/package.json) - + if [ -z "$pnpm_current" ]; then msg_error "pnpm not found. Installing version $pnpm_desired..." $STD npm install -g pnpm@"$pnpm_desired" - elif ! node -e "const semver = require('semver'); process.exit(semver.satisfies('$pnpm_current', '$pnpm_desired') ? 0 : 1)" ; then + elif ! node -e "const semver = require('semver'); process.exit(semver.satisfies('$pnpm_current', '$pnpm_desired') ? 0 : 1)"; then msg_error "Updating pnpm from version $pnpm_current to $pnpm_desired..." $STD npm install -g pnpm@"$pnpm_desired" else diff --git a/ct/jupyternotebook.sh b/ct/jupyternotebook.sh index 3e7641fb1..6a8a415b7 100644 --- a/ct/jupyternotebook.sh +++ b/ct/jupyternotebook.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2025 community-scripts ORG # Author: Dave-code-creater (Tan Dat, Ta) # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -23,7 +23,7 @@ function update_script() { header_info check_container_storage check_container_resources - + msg_info "Updating ${APP} LXC" $STD apt-get update $STD apt-get install -y upgrade @@ -39,4 +39,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}:8888${CL}" +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8888${CL}" \ No newline at end of file diff --git a/ct/karakeep.sh b/ct/karakeep.sh new file mode 100644 index 000000000..ff35b946f --- /dev/null +++ b/ct/karakeep.sh @@ -0,0 +1,85 @@ +#!/usr/bin/env bash +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +# Copyright (c) 2021-2025 tteck +# Author: MickLesk (Canbiz) & vhsdream +# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE +# Source: https://karakeep.app/ + +APP="karakeep" +var_tags="bookmark" +var_cpu="2" +var_ram="4096" +var_disk="10" +var_os="debian" +var_version="12" +var_unprivileged="1" + +header_info "$APP" +variables +color +catch_errors + +function update_script() { + header_info + check_container_storage + check_container_resources + if [[ ! -d /opt/karakeep ]]; then + msg_error "No ${APP} Installation Found!" + exit + fi + RELEASE=$(curl -fsSL https://api.github.com/repos/karakeep-app/karakeep/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') + PREV_RELEASE=$(cat /opt/${APP}_version.txt) + if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "${PREV_RELEASE}" ]]; then + msg_info "Stopping Services" + systemctl stop karakeep-web karakeep-workers karakeep-browser + msg_ok "Stopped Services" + msg_info "Updating ${APP} to v${RELEASE}" + if [[ $(corepack -v) < "0.31.0" ]]; then + $STD npm install -g corepack@0.31.0 + fi + if [[ "${PREV_RELEASE}" < 0.23.0 ]]; then + $STD apt-get install -y graphicsmagick ghostscript + fi + cd /opt || exit + if [[ -f /opt/karakeep/.env ]] && [[ ! -f /etc/karakeep/karakeep.env ]]; then + mkdir -p /etc/karakeep + mv /opt/karakeep/.env /etc/karakeep/karakeep.env + fi + rm -rf /opt/karakeep + 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 + $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 + $STD pnpm install --frozen-lockfile + export DATA_DIR=/opt/karakeep_data + cd /opt/karakeep/packages/db || exit + $STD pnpm migrate + sed -i "s/SERVER_VERSION=${PREV_RELEASE}/SERVER_VERSION=${RELEASE}/" /etc/karakeep/karakeep.env + msg_ok "Updated ${APP} to v${RELEASE}" + + msg_info "Starting Services" + systemctl start karakeep-browser karakeep-workers karakeep-web + msg_ok "Started Services" + msg_info "Cleaning up" + rm -R /opt/v"${RELEASE}".zip + echo "${RELEASE}" >/opt/${APP}_version.txt + msg_ok "Cleaned" + msg_ok "Updated Successfully" + else + msg_ok "No update required. ${APP} is already at ${RELEASE}." + fi + exit +} + +start +build_container +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}" diff --git a/ct/kavita.sh b/ct/kavita.sh index 00ce169bf..06e46c240 100644 --- a/ct/kavita.sh +++ b/ct/kavita.sh @@ -29,7 +29,7 @@ function update_script() { fi msg_info "Updating $APP LXC" systemctl stop kavita - RELEASE=$(curl -s https://api.github.com/repos/Kareadita/Kavita/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') + RELEASE=$(curl -fsSL https://api.github.com/repos/Kareadita/Kavita/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') $STD tar -xvzf <(curl -fsSL https://github.com/Kareadita/Kavita/releases/download/$RELEASE/kavita-linux-x64.tar.gz) --no-same-owner rm -rf Kavita/config cp -r Kavita/* /opt/Kavita @@ -46,4 +46,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/keycloak.sh b/ct/keycloak.sh index 7a492c1ca..8e209d242 100644 --- a/ct/keycloak.sh +++ b/ct/keycloak.sh @@ -33,10 +33,10 @@ function update_script() { $STD apt-get update $STD apt-get -y upgrade - RELEASE=$(curl -s https://api.github.com/repos/keycloak/keycloak/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') + RELEASE=$(curl -fsSL https://api.github.com/repos/keycloak/keycloak/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') msg_info "Updating Keycloak to v$RELEASE" cd /opt - wget -q https://github.com/keycloak/keycloak/releases/download/$RELEASE/keycloak-$RELEASE.tar.gz + curl -fsSL "https://github.com/keycloak/keycloak/releases/download/$RELEASE/keycloak-$RELEASE.tar.gz" -o $(basename "https://github.com/keycloak/keycloak/releases/download/$RELEASE/keycloak-$RELEASE.tar.gz") mv keycloak keycloak.old tar -xzf keycloak-$RELEASE.tar.gz cp -r keycloak.old/conf keycloak-$RELEASE diff --git a/ct/kimai.sh b/ct/kimai.sh index 351833a40..ba95f13e2 100644 --- a/ct/kimai.sh +++ b/ct/kimai.sh @@ -20,64 +20,79 @@ color catch_errors function update_script() { - header_info - check_container_storage - check_container_resources - if [[ ! -d /opt/kimai ]]; then - msg_error "No ${APP} Installation Found!" - exit - fi - RELEASE=$(curl -s https://api.github.com/repos/kimai/kimai/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') - BACKUP_DIR="/opt/kimai_backup" - - if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then - msg_info "Stopping Apache2" - systemctl stop apache2 - msg_ok "Stopped Apache2" - - msg_info "Backing up Kimai configuration and var directory" - mkdir -p "$BACKUP_DIR" - [ -d /opt/kimai/var ] && cp -r /opt/kimai/var "$BACKUP_DIR/" - [ -f /opt/kimai/.env ] && cp /opt/kimai/.env "$BACKUP_DIR/" - [ -f /opt/kimai/config/packages/local.yaml ] && cp /opt/kimai/config/packages/local.yaml "$BACKUP_DIR/" - msg_ok "Backup completed" - - msg_info "Updating ${APP} to ${RELEASE}" - rm -rf /opt/kimai - wget -q "https://github.com/kimai/kimai/archive/refs/tags/${RELEASE}.zip" - unzip -q ${RELEASE}.zip - mv kimai-${RELEASE} /opt/kimai - [ -d "$BACKUP_DIR/var" ] && cp -r "$BACKUP_DIR/var" /opt/kimai/ - [ -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 - $STD composer install --no-dev --optimize-autoloader - $STD bin/console kimai:update - echo "${RELEASE}" >/opt/${APP}_version.txt - msg_ok "Updated ${APP} to ${RELEASE}" - - msg_info "Starting Apache2" - systemctl start apache2 - msg_ok "Started Apache2" - - msg_info "Setup Permissions" - chown -R :www-data /opt/* - chmod -R g+r /opt/* - chmod -R g+rw /opt/* - chown -R www-data:www-data /opt/* - chmod -R 777 /opt/* - msg_ok "Setup Permissions" - - msg_info "Cleaning Up" - rm -rf ${RELEASE}.zip - rm -rf "$BACKUP_DIR" - 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/kimai ]]; then + msg_error "No ${APP} Installation Found!" exit + fi + 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" + $STD curl -fsSLo /tmp/debsuryorg-archive-keyring.deb https://packages.sury.org/debsuryorg-archive-keyring.deb + $STD dpkg -i /tmp/debsuryorg-archive-keyring.deb + $STD sh -c 'echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list' + $STD apt-get update + $STD apt-get remove -y php"${CURRENT_PHP//./}"* + $STD apt-get install -y \ + php8.4 \ + php8.4-{gd,mysql,mbstring,bcmath,xml,curl,zip,intl} \ + libapache2-mod-php8.4 + msg_ok "Migrated PHP $CURRENT_PHP to 8.4" + fi + + RELEASE=$(curl -fsSL https://api.github.com/repos/kimai/kimai/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') + BACKUP_DIR="/opt/kimai_backup" + + if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then + msg_info "Stopping Apache2" + systemctl stop apache2 + msg_ok "Stopped Apache2" + + msg_info "Backing up Kimai configuration and var directory" + mkdir -p "$BACKUP_DIR" + [ -d /opt/kimai/var ] && cp -r /opt/kimai/var "$BACKUP_DIR/" + [ -f /opt/kimai/.env ] && cp /opt/kimai/.env "$BACKUP_DIR/" + [ -f /opt/kimai/config/packages/local.yaml ] && cp /opt/kimai/config/packages/local.yaml "$BACKUP_DIR/" + msg_ok "Backup completed" + + msg_info "Updating ${APP} to ${RELEASE}" + rm -rf /opt/kimai + 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 + [ -d "$BACKUP_DIR/var" ] && cp -r "$BACKUP_DIR/var" /opt/kimai/ + [ -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 + $STD composer install --no-dev --optimize-autoloader + $STD bin/console kimai:update + echo "${RELEASE}" >/opt/${APP}_version.txt + msg_ok "Updated ${APP} to ${RELEASE}" + + msg_info "Starting Apache2" + systemctl start apache2 + msg_ok "Started Apache2" + + msg_info "Setup Permissions" + chown -R :www-data /opt/* + chmod -R g+r /opt/* + chmod -R g+rw /opt/* + chown -R www-data:www-data /opt/* + chmod -R 777 /opt/* + msg_ok "Setup Permissions" + + msg_info "Cleaning Up" + rm -rf "${RELEASE}".zip + rm -rf "$BACKUP_DIR" + msg_ok "Cleaned" + msg_ok "Updated Successfully" + else + msg_ok "No update required. ${APP} is already at ${RELEASE}" + fi + exit } start diff --git a/ct/koillection.sh b/ct/koillection.sh index 31af04542..c25730954 100644 --- a/ct/koillection.sh +++ b/ct/koillection.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2025 community-scripts ORG # Author: bvdberg01 # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -27,7 +27,7 @@ function update_script() { msg_error "No ${APP} Installation Found!" exit fi - RELEASE=$(curl -s https://api.github.com/repos/benjaminjonard/koillection/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') + RELEASE=$(curl -fsSL https://api.github.com/repos/benjaminjonard/koillection/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then msg_info "Stopping Service" systemctl stop apache2 @@ -36,7 +36,7 @@ function update_script() { msg_info "Updating ${APP} to v${RELEASE}" cd /opt mv /opt/koillection/ /opt/koillection-backup - wget -q "https://github.com/benjaminjonard/koillection/archive/refs/tags/${RELEASE}.zip" + curl -fsSL "https://github.com/benjaminjonard/koillection/archive/refs/tags/${RELEASE}.zip" -o $(basename "https://github.com/benjaminjonard/koillection/archive/refs/tags/${RELEASE}.zip") unzip -q "${RELEASE}.zip" mv "/opt/koillection-${RELEASE}" /opt/koillection cd /opt/koillection diff --git a/ct/kometa.sh b/ct/kometa.sh index 757ad69db..a77e6a778 100644 --- a/ct/kometa.sh +++ b/ct/kometa.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2025 community-scripts ORG # Author: Slaviša Arežina (tremor021) # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -28,7 +28,7 @@ function update_script() { msg_error "No ${APP} Installation Found!" exit fi - RELEASE=$(curl -s https://api.github.com/repos/Kometa-Team/Kometa/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') + RELEASE=$(curl -fsSL https://api.github.com/repos/Kometa-Team/Kometa/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') if [[ "${RELEASE}" != "$(cat /opt/kometa_version.txt)" ]] || [[ ! -f /opt/kometa_version.txt ]]; then msg_info "Updating $APP" msg_info "Stopping $APP" @@ -38,8 +38,8 @@ function update_script() { msg_info "Updating $APP to ${RELEASE}" cd /tmp temp_file=$(mktemp) - RELEASE=$(curl -s https://api.github.com/repos/Kometa-Team/Kometa/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') - wget -q "https://github.com/Kometa-Team/Kometa/archive/refs/tags/v${RELEASE}.tar.gz" -O "$temp_file" + RELEASE=$(curl -fsSL https://api.github.com/repos/Kometa-Team/Kometa/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') +curl -fsSL "https://github.com/Kometa-Team/Kometa/archive/refs/tags/v${RELEASE}.tar.gz" -o ""$temp_file"" tar -xzf "$temp_file" cp /opt/kometa/config/config.yml /opt rm -rf /opt/kometa diff --git a/ct/komga.sh b/ct/komga.sh index 2f04c7758..e33333ccd 100644 --- a/ct/komga.sh +++ b/ct/komga.sh @@ -28,14 +28,14 @@ function update_script() { exit fi msg_info "Updating ${APP}" - RELEASE=$(curl -s https://api.github.com/repos/gotson/komga/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') + RELEASE=$(curl -fsSL https://api.github.com/repos/gotson/komga/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then msg_info "Stopping ${APP}" systemctl stop komga msg_ok "Stopped ${APP}" msg_info "Updating ${APP} to ${RELEASE}" - wget -q "https://github.com/gotson/komga/releases/download/${RELEASE}/komga-${RELEASE}.jar" + curl -fsSL "https://github.com/gotson/komga/releases/download/${RELEASE}/komga-${RELEASE}.jar" -o $(basename "https://github.com/gotson/komga/releases/download/${RELEASE}/komga-${RELEASE}.jar") rm -rf /opt/komga/komga.jar mv -f komga-${RELEASE}.jar /opt/komga/komga.jar echo "${RELEASE}" >/opt/${APP}_version.txt diff --git a/ct/komodo.sh b/ct/komodo.sh index 2b59b6117..8f8f0b552 100644 --- a/ct/komodo.sh +++ b/ct/komodo.sh @@ -48,11 +48,11 @@ function update_script() { } GITHUB_URL="https://raw.githubusercontent.com/mbecker20/komodo/main/compose/${COMPOSE_FILE}" - wget -q -O "/opt/komodo/${COMPOSE_FILE}" "$GITHUB_URL" || { + if ! curl -fsSL "$GITHUB_URL" -o "/opt/komodo/${COMPOSE_FILE}"; then msg_error "Failed to download ${COMPOSE_FILE} from GitHub!" - mv "/opt/komodo/${BACKUP_FILE}" "/opt/komodo/${COMPOSE_FILE}" + mv "/opt/komodo/${BACKUP_FILE}" "/opt/komodo/${COMPOSE_FILE}" exit 1 - } + fi $STD docker compose -p komodo -f "/opt/komodo/$COMPOSE_FILE" --env-file /opt/komodo/compose.env up -d msg_ok "Updated ${APP}" diff --git a/ct/kubo.sh b/ct/kubo.sh index 0a3bac10a..16b68a4c1 100644 --- a/ct/kubo.sh +++ b/ct/kubo.sh @@ -27,12 +27,12 @@ function update_script() { msg_error "No ${APP} Installation Found!" exit fi - RELEASE=$(wget -q https://github.com/ipfs/kubo/releases/latest -O - | grep "title>Release" | cut -d " " -f 4) + RELEASE=$(curl -fsSL https://github.com/ipfs/kubo/releases/latest | grep "title>Release" | cut -d " " -f 4) if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then msg_info "Updating $APP LXC" $STD apt-get update $STD apt-get -y upgrade - wget -q "https://github.com/ipfs/kubo/releases/download/${RELEASE}/kubo_${RELEASE}_linux-amd64.tar.gz" + curl -fsSL "https://github.com/ipfs/kubo/releases/download/${RELEASE}/kubo_${RELEASE}_linux-amd64.tar.gz" -o $(basename "https://github.com/ipfs/kubo/releases/download/${RELEASE}/kubo_${RELEASE}_linux-amd64.tar.gz") tar -xzf "kubo_${RELEASE}_linux-amd64.tar.gz" -C /usr/local systemctl restart ipfs.service echo "${RELEASE}" >/opt/${APP}_version.txt @@ -51,4 +51,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}:5001/webui${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:5001/webui${CL}" diff --git a/ct/lazylibrarian.sh b/ct/lazylibrarian.sh index f648b2748..4e2cfec9f 100644 --- a/ct/lazylibrarian.sh +++ b/ct/lazylibrarian.sh @@ -50,4 +50,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}:5299${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:5299${CL}" diff --git a/ct/lidarr.sh b/ct/lidarr.sh index f0878246b..219d0ab9f 100644 --- a/ct/lidarr.sh +++ b/ct/lidarr.sh @@ -20,18 +20,29 @@ color catch_errors function update_script() { - header_info - check_container_storage - check_container_resources - if [[ ! -d /var/lib/lidarr/ ]]; then - msg_error "No ${APP} Installation Found!" - exit - fi - msg_info "Updating $APP LXC" - $STD apt-get update - $STD apt-get -y upgrade - msg_ok "Updated $APP LXC" + header_info + check_container_storage + check_container_resources + + if [[ ! -d /var/lib/lidarr/ ]]; then + msg_error "No ${APP} Installation Found!" exit + fi + + msg_info "Updating $APP LXC" + temp_file="$(mktemp)" + rm -rf /opt/Lidarr + RELEASE=$(curl -fsSL https://api.github.com/repos/Lidarr/Lidarr/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') + curl -fsSL "https://github.com/Lidarr/Lidarr/releases/download/v${RELEASE}/Lidarr.master.${RELEASE}.linux-core-x64.tar.gz" -o "$temp_file" + $STD tar -xvzf "$temp_file" + mv Lidarr /opt + chmod 775 /opt/Lidarr + msg_ok "Updated $APP LXC" + + msg_info "Cleaning up" + rm -rf "$temp_file" + msg_ok "Cleaned up" + exit } start @@ -41,4 +52,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}:8686${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8686${CL}" diff --git a/ct/linkwarden.sh b/ct/linkwarden.sh index d8ae54934..962bc3715 100644 --- a/ct/linkwarden.sh +++ b/ct/linkwarden.sh @@ -26,7 +26,7 @@ function update_script() { msg_error "No ${APP} Installation Found!" exit fi - RELEASE=$(curl -s https://api.github.com/repos/linkwarden/linkwarden/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') + RELEASE=$(curl -fsSL https://api.github.com/repos/linkwarden/linkwarden/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then msg_info "Stopping ${APP}" systemctl stop linkwarden @@ -36,7 +36,7 @@ function update_script() { $STD apt-get install -y build-essential $STD curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y source $HOME/.cargo/env - echo 'export PATH=/usr/local/cargo/bin:$PATH' >> /etc/profile + echo 'export PATH=/usr/local/cargo/bin:$PATH' >>/etc/profile source /etc/profile $STD cargo install monolith msg_ok "Updated Rust" @@ -45,8 +45,8 @@ function update_script() { cd /opt mv /opt/linkwarden/.env /opt/.env rm -rf /opt/linkwarden - RELEASE=$(curl -s https://api.github.com/repos/linkwarden/linkwarden/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') - wget -q "https://github.com/linkwarden/linkwarden/archive/refs/tags/${RELEASE}.zip" + RELEASE=$(curl -fsSL https://api.github.com/repos/linkwarden/linkwarden/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') + curl -fsSL "https://github.com/linkwarden/linkwarden/archive/refs/tags/${RELEASE}.zip" -o $(basename "https://github.com/linkwarden/linkwarden/archive/refs/tags/${RELEASE}.zip") unzip -q ${RELEASE}.zip mv linkwarden-${RELEASE:1} /opt/linkwarden cd /opt/linkwarden diff --git a/ct/listmonk.sh b/ct/listmonk.sh index e95f7e3f8..489017129 100644 --- a/ct/listmonk.sh +++ b/ct/listmonk.sh @@ -28,7 +28,7 @@ function update_script() { exit fi - RELEASE=$(curl -s https://api.github.com/repos/knadh/listmonk/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') + RELEASE=$(curl -fsSL https://api.github.com/repos/knadh/listmonk/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 ${APP}" systemctl stop listmonk @@ -38,7 +38,7 @@ function update_script() { cd /opt mv /opt/listmonk/ /opt/listmonk-backup mkdir /opt/listmonk/ - wget -q "https://github.com/knadh/listmonk/releases/download/v${RELEASE}/listmonk_${RELEASE}_linux_amd64.tar.gz" + curl -fsSL "https://github.com/knadh/listmonk/releases/download/v${RELEASE}/listmonk_${RELEASE}_linux_amd64.tar.gz" -o $(basename "https://github.com/knadh/listmonk/releases/download/v${RELEASE}/listmonk_${RELEASE}_linux_amd64.tar.gz") tar -xzf "listmonk_${RELEASE}_linux_amd64.tar.gz" -C /opt/listmonk mv /opt/listmonk-backup/config.toml /opt/listmonk/config.toml mv /opt/listmonk-backup/uploads /opt/listmonk/uploads @@ -69,4 +69,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}:9000${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:9000${CL}" diff --git a/ct/lldap.sh b/ct/lldap.sh index 5103569c6..883035ae8 100644 --- a/ct/lldap.sh +++ b/ct/lldap.sh @@ -41,4 +41,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}:17170${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:17170${CL}" diff --git a/ct/lubelogger.sh b/ct/lubelogger.sh index 08954784d..84cbdb073 100644 --- a/ct/lubelogger.sh +++ b/ct/lubelogger.sh @@ -27,7 +27,7 @@ function update_script() { msg_error "No ${APP} Installation Found!" exit fi - RELEASE=$(curl -s https://api.github.com/repos/hargata/lubelog/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') + RELEASE=$(curl -fsSL https://api.github.com/repos/hargata/lubelog/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') RELEASE_TRIMMED=$(echo "${RELEASE}" | tr -d ".") if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then msg_info "Stopping Service" @@ -36,7 +36,7 @@ function update_script() { msg_info "Updating ${APP} to v${RELEASE}" cd /opt - wget -q https://github.com/hargata/lubelog/releases/download/v${RELEASE}/LubeLogger_v${RELEASE_TRIMMED}_linux_x64.zip + curl -fsSL "https://github.com/hargata/lubelog/releases/download/v${RELEASE}/LubeLogger_v${RELEASE_TRIMMED}_linux_x64.zip" -o $(basename "https://github.com/hargata/lubelog/releases/download/v${RELEASE}/LubeLogger_v${RELEASE_TRIMMED}_linux_x64.zip") mkdir -p /tmp/lubeloggerData/data cp /opt/lubelogger/appsettings.json /tmp/lubeloggerData/appsettings.json cp -r /opt/lubelogger/data/ /tmp/lubeloggerData/ diff --git a/ct/mafl.sh b/ct/mafl.sh index f293bb48f..5f5e13055 100644 --- a/ct/mafl.sh +++ b/ct/mafl.sh @@ -27,10 +27,10 @@ function update_script() { msg_error "No ${APP} Installation Found!" exit fi - RELEASE=$(curl -s https://api.github.com/repos/hywax/mafl/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') + RELEASE=$(curl -fsSL https://api.github.com/repos/hywax/mafl/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') msg_info "Updating Mafl to v${RELEASE} (Patience)" systemctl stop mafl - wget -q https://github.com/hywax/mafl/archive/refs/tags/v${RELEASE}.tar.gz + curl -fsSL "https://github.com/hywax/mafl/archive/refs/tags/v${RELEASE}.tar.gz" -o $(basename "https://github.com/hywax/mafl/archive/refs/tags/v${RELEASE}.tar.gz") tar -xzf v${RELEASE}.tar.gz cp -r mafl-${RELEASE}/* /opt/mafl/ rm -rf mafl-${RELEASE} @@ -49,4 +49,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/ct/magicmirror.sh b/ct/magicmirror.sh index 67ec9b0ce..c758d2463 100644 --- a/ct/magicmirror.sh +++ b/ct/magicmirror.sh @@ -27,7 +27,7 @@ function update_script() { msg_error "No ${APP} Installation Found!" exit fi - RELEASE=$(curl -s https://api.github.com/repos/MagicMirrorOrg/MagicMirror/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') + RELEASE=$(curl -fsSL https://api.github.com/repos/MagicMirrorOrg/MagicMirror/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') if [[ ! -f /opt/${APP}_version.txt ]]; then touch /opt/${APP}_version.txt; fi if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then msg_info "Stopping Service" @@ -45,7 +45,7 @@ function update_script() { fi cp -r /opt/magicmirror/modules /opt/magicmirror-backup temp_file=$(mktemp) - wget -q "https://github.com/MagicMirrorOrg/MagicMirror/archive/refs/tags/v${RELEASE}.tar.gz" -O "$temp_file" +curl -fsSL "https://github.com/MagicMirrorOrg/MagicMirror/archive/refs/tags/v${RELEASE}.tar.gz" -o ""$temp_file"" tar -xzf "$temp_file" rm -rf /opt/magicmirror mv MagicMirror-${RELEASE} /opt/magicmirror diff --git a/ct/mariadb.sh b/ct/mariadb.sh index 76be07d9c..73a21a88f 100644 --- a/ct/mariadb.sh +++ b/ct/mariadb.sh @@ -41,4 +41,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 IP:${CL}" -echo -e "${TAB}${GATEWAY}${BGN}${IP}:3306${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}${IP}:3306${CL}" diff --git a/ct/matterbridge.sh b/ct/matterbridge.sh index d130b7c6a..477f59557 100644 --- a/ct/matterbridge.sh +++ b/ct/matterbridge.sh @@ -1,4 +1,4 @@ -#!/usr/bin/env bash + #!/usr/bin/env bash source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func) # Copyright (c) 2021-2025 tteck # Author: MickLesk (Canbiz) @@ -38,4 +38,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}:8283${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8283${CL}" diff --git a/ct/mattermost.sh b/ct/mattermost.sh index 910d00bd2..8ca535d24 100644 --- a/ct/mattermost.sh +++ b/ct/mattermost.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2025 community-scripts ORG # Author: Kaedon Cleland-Host (dracentis) # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -41,4 +41,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}:8065${CL}" +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8065${CL}" \ No newline at end of file diff --git a/ct/mediamtx.sh b/ct/mediamtx.sh index f6022fc41..d63051a99 100644 --- a/ct/mediamtx.sh +++ b/ct/mediamtx.sh @@ -36,4 +36,4 @@ build_container description msg_ok "Completed Successfully!\n" -echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" \ No newline at end of file +echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" diff --git a/ct/medusa.sh b/ct/medusa.sh index a6babad50..d2f330795 100644 --- a/ct/medusa.sh +++ b/ct/medusa.sh @@ -53,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}:8081${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8081${CL}" diff --git a/ct/meilisearch.sh b/ct/meilisearch.sh new file mode 100644 index 000000000..3cc5b2c52 --- /dev/null +++ b/ct/meilisearch.sh @@ -0,0 +1,95 @@ +#!/usr/bin/env bash +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +# Copyright (c) 2021-2025 community-scripts ORG +# Author: MickLesk (CanbiZ) +# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE +# Source: https://www.meilisearch.com/ + +APP="Meilisearch" +var_tags="${var_tags:-full-text-search}" +var_cpu="${var_cpu:-2}" +var_ram="${var_ram:-4096}" +var_disk="${var_disk:-7}" +var_os="${var_os:-debian}" +var_version="${var_version:-12}" +var_unprivileged="${var_unprivileged:-1}" + +header_info "$APP" +variables +color +catch_errors + +function update_script() { + header_info + check_container_storage + check_container_resources + + if [[ ! -f /opt/Meilisearch_version.txt ]]; then + msg_error "No Meilisearch Installation Found!" + exit + fi + UPD=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "Meilisearch Update" --radiolist --cancel-button Exit-Script "Spacebar = Select" 10 58 2 \ + "1" "Update Meilisearch" ON \ + "2" "Update Meilisearch-UI" OFF \ + 3>&1 1>&2 2>&3) + + if [ "$UPD" == "1" ]; then + msg_info "Stopping Meilisearch" + systemctl stop meilisearch + msg_ok "Stopped Meilisearch" + + msg_info "Updating Meilisearch" + tmp_file=$(mktemp) + RELEASE=$(curl -s https://api.github.com/repos/meilisearch/meilisearch/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') + curl -fsSL https://github.com/meilisearch/meilisearch/releases/latest/download/meilisearch.deb -o $tmp_file + $STD dpkg -i $tmp_file + echo "$RELEASE" >/opt/meilisearch_version.txt + msg_ok "Updated Meilisearch" + + msg_info "Starting Meilisearch" + systemctl start meilisearch + msg_ok "Started Meilisearch" + exit + fi + + if [ "$UPD" == "2" ]; then + if [[ ! -f /opt/Meilisearch-ui_version.txt ]]; then + msg_error "No Meilisearch-UI Installation Found!" + exit + fi + msg_info "Stopping Meilisearch-UI" + systemctl stop meilisearch-ui + msg_ok "Stopped Meilisearch-UI" + + msg_info "Updating Meilisearch-UI" + tmp_file=$(mktemp) + tmp_dir=$(mktemp -d) + RELEASE_UI=$(curl -s https://api.github.com/repos/riccox/meilisearch-ui/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') + cp /opt/meilisearch-ui/.env.local /tmp/.env.local.bak + rm -rf /opt/meilisearch-ui + mkdir -p /opt/meilisearch-ui + curl -fsSL "https://github.com/riccox/meilisearch-ui/archive/refs/tags/${RELEASE_UI}.zip" -o $tmp_file + unzip -q "$tmp_file" -d "$tmp_dir" + mv "$tmp_dir"/*/* /opt/meilisearch-ui/ + cd /opt/meilisearch-ui + sed -i 's|const hash = execSync("git rev-parse HEAD").toString().trim();|const hash = "unknown";|' /opt/meilisearch-ui/vite.config.ts + mv /tmp/.env.local.bak /opt/meilisearch-ui/.env.local + $STD pnpm install + echo "$RELEASE_UI" >/opt/meilisearch-ui_version.txt + msg_ok "Updated Meilisearch-UI" + + msg_info "Starting Meilisearch-UI" + systemctl start meilisearch-ui + msg_ok "Started Meilisearch-UI" + exit + fi +} + +start +build_container +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}meilisearch: http://${IP}:7700$ | meilisearch-ui: http://${IP}:24900${CL}" diff --git a/ct/meshcentral.sh b/ct/meshcentral.sh index d945c021e..9b8f902fd 100644 --- a/ct/meshcentral.sh +++ b/ct/meshcentral.sh @@ -41,4 +41,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}${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}" diff --git a/ct/metube.sh b/ct/metube.sh index c6b838e92..da8b9d17c 100644 --- a/ct/metube.sh +++ b/ct/metube.sh @@ -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}:8081${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8081${CL}" diff --git a/ct/minio.sh b/ct/minio.sh index 754fd9f20..08a5fbec3 100644 --- a/ct/minio.sh +++ b/ct/minio.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2025 community-scripts ORG # Author: MickLesk (CanbiZ) # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -27,7 +27,7 @@ function update_script() { msg_error "No ${APP} Installation Found!" exit fi - RELEASE=$(curl -s https://api.github.com/repos/minio/minio/releases/latest | grep '"tag_name"' | awk -F '"' '{print $4}') + RELEASE=$(curl -fsSL https://api.github.com/repos/minio/minio/releases/latest | grep '"tag_name"' | awk -F '"' '{print $4}') if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then msg_info "Stopping ${APP}" systemctl stop minio @@ -35,7 +35,7 @@ function update_script() { msg_info "Updating ${APP} to ${RELEASE}" mv /usr/local/bin/minio /usr/local/bin/minio_bak - wget -q https://dl.min.io/server/minio/release/linux-amd64/minio + curl -fsSL "https://dl.min.io/server/minio/release/linux-amd64/minio" -o $(basename "https://dl.min.io/server/minio/release/linux-amd64/minio") mv minio /usr/local/bin/ chmod +x /usr/local/bin/minio echo "${RELEASE}" >/opt/${APP}_version.txt diff --git a/ct/monica.sh b/ct/monica.sh index 7c84f2197..17d861682 100644 --- a/ct/monica.sh +++ b/ct/monica.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2025 community-scripts ORG # Author: bvdberg01 # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -27,7 +27,7 @@ function update_script() { msg_error "No ${APP} Installation Found!" exit fi - RELEASE=$(curl -s https://api.github.com/repos/monicahq/monica/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') + RELEASE=$(curl -fsSL https://api.github.com/repos/monicahq/monica/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" systemctl stop apache2 @@ -36,7 +36,7 @@ function update_script() { msg_info "Updating ${APP} to v${RELEASE}" cd /opt mv /opt/monica/ /opt/monica-backup - wget -q "https://github.com/monicahq/monica/releases/download/v${RELEASE}/monica-v${RELEASE}.tar.bz2" + curl -fsSL "https://github.com/monicahq/monica/releases/download/v${RELEASE}/monica-v${RELEASE}.tar.bz2" -o $(basename "https://github.com/monicahq/monica/releases/download/v${RELEASE}/monica-v${RELEASE}.tar.bz2") tar -xjf "monica-v${RELEASE}.tar.bz2" mv "/opt/monica-v${RELEASE}" /opt/monica cd /opt/monica/ diff --git a/ct/motioneye.sh b/ct/motioneye.sh index 43fc6e242..0b4e0e5ae 100644 --- a/ct/motioneye.sh +++ b/ct/motioneye.sh @@ -40,4 +40,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}:8765${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8765${CL}" diff --git a/ct/mqtt.sh b/ct/mqtt.sh index 327f3da04..93c4e3810 100644 --- a/ct/mqtt.sh +++ b/ct/mqtt.sh @@ -41,4 +41,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 IP:${CL}" -echo -e "${TAB}${GATEWAY}${BGN}${IP}:1883${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}${IP}:1883${CL}" diff --git a/ct/mylar3.sh b/ct/mylar3.sh index d957659a7..f7dcd24af 100644 --- a/ct/mylar3.sh +++ b/ct/mylar3.sh @@ -25,11 +25,11 @@ function update_script() { msg_error "No ${APP} Installation Found!" exit fi - RELEASE=$(curl -s https://api.github.com/repos/mylar3/mylar3/releases/latest | jq -r '.tag_name') + RELEASE=$(curl -fsSL https://api.github.com/repos/mylar3/mylar3/releases/latest | jq -r '.tag_name') if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then msg_info "Updating ${APP} to ${RELEASE}" rm -rf /opt/mylar3/* /opt/mylar3/.* - wget -qO- https://github.com/mylar3/mylar3/archive/refs/tags/${RELEASE}.tar.gz | tar -xz --strip-components=1 -C /opt/mylar3 +curl -fsSL "https://github.com/mylar3/mylar3/archive/refs/tags/${RELEASE}.tar.gz" | tar -xz --strip-components=1 -C /opt/mylar3 systemctl restart mylar3 echo "${RELEASE}" >/opt/${APP}_version.txt msg_ok "Updated ${APP} to ${RELEASE}" @@ -46,4 +46,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}:8090${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8090${CL}" diff --git a/ct/myspeed.sh b/ct/myspeed.sh index 371389c63..4cec536e1 100644 --- a/ct/myspeed.sh +++ b/ct/myspeed.sh @@ -27,7 +27,7 @@ function update_script() { msg_error "No ${APP} Installation Found!" exit fi - RELEASE=$(wget -q https://github.com/gnmyt/myspeed/releases/latest -O - | grep "title>Release" | cut -d " " -f 5) + RELEASE=$(curl -fsSL https://github.com/gnmyt/myspeed/releases/latest | grep "title>Release" | cut -d " " -f 5) if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then msg_info "Stopping ${APP} Service" @@ -38,7 +38,7 @@ function update_script() { cd /opt rm -rf myspeed_bak mv myspeed myspeed_bak - wget -q https://github.com/gnmyt/myspeed/releases/download/v$RELEASE/MySpeed-$RELEASE.zip + curl -fsSL "https://github.com/gnmyt/myspeed/releases/download/v$RELEASE/MySpeed-$RELEASE.zip" -o $(basename "https://github.com/gnmyt/myspeed/releases/download/v$RELEASE/MySpeed-$RELEASE.zip") unzip -q MySpeed-$RELEASE.zip -d myspeed cd myspeed $STD npm install @@ -67,4 +67,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}:5216${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:5216${CL}" diff --git a/ct/n8n.sh b/ct/n8n.sh index 9182dc4f1..da8eee7e8 100644 --- a/ct/n8n.sh +++ b/ct/n8n.sh @@ -48,4 +48,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}:5678${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:5678${CL}" diff --git a/ct/navidrome.sh b/ct/navidrome.sh index e5099be4b..afc40259f 100644 --- a/ct/navidrome.sh +++ b/ct/navidrome.sh @@ -27,14 +27,14 @@ function update_script() { msg_error "No ${APP} Installation Found!" exit fi - RELEASE=$(curl -s https://api.github.com/repos/navidrome/navidrome/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') + RELEASE=$(curl -fsSL https://api.github.com/repos/navidrome/navidrome/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') msg_info "Stopping ${APP}" systemctl stop navidrome msg_ok "Stopped Navidrome" msg_info "Updating to v${RELEASE}" cd /opt - wget -q https://github.com/navidrome/navidrome/releases/download/v${RELEASE}/navidrome_${RELEASE}_linux_amd64.tar.gz -O Navidrome.tar.gz +curl -fsSL "https://github.com/navidrome/navidrome/releases/download/v${RELEASE}/navidrome_${RELEASE}_linux_amd64.tar.gz" -o "Navidrome.tar.gz" $STD tar -xvzf Navidrome.tar.gz -C /opt/navidrome/ chmod +x /opt/navidrome/navidrome msg_ok "Updated ${APP}" diff --git a/ct/neo4j.sh b/ct/neo4j.sh index 9ef98ecea..1ee63a8b4 100644 --- a/ct/neo4j.sh +++ b/ct/neo4j.sh @@ -41,4 +41,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}:7474${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:7474${CL}" diff --git a/ct/netbox.sh b/ct/netbox.sh index f5ca61120..493399de1 100644 --- a/ct/netbox.sh +++ b/ct/netbox.sh @@ -28,7 +28,7 @@ function update_script() { exit fi - RELEASE=$(curl -s https://api.github.com/repos/netbox-community/netbox/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') + RELEASE=$(curl -fsSL https://api.github.com/repos/netbox-community/netbox/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 ${APP}" @@ -38,7 +38,7 @@ function update_script() { msg_info "Updating $APP to v${RELEASE}" mv /opt/netbox/ /opt/netbox-backup cd /opt - wget -q "https://github.com/netbox-community/netbox/archive/refs/tags/v${RELEASE}.zip" + curl -fsSL "https://github.com/netbox-community/netbox/archive/refs/tags/v${RELEASE}.zip" -o $(basename "https://github.com/netbox-community/netbox/archive/refs/tags/v${RELEASE}.zip") unzip -q "v${RELEASE}.zip" mv /opt/netbox-${RELEASE}/ /opt/netbox/ @@ -82,4 +82,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}${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}https://${IP}${CL}" diff --git a/ct/nextcloudpi.sh b/ct/nextcloudpi.sh index 69d5fa070..7b2a37fe1 100644 --- a/ct/nextcloudpi.sh +++ b/ct/nextcloudpi.sh @@ -41,4 +41,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}${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}" diff --git a/ct/nextpvr.sh b/ct/nextpvr.sh index 36b38b27b..aba3d0f33 100644 --- a/ct/nextpvr.sh +++ b/ct/nextpvr.sh @@ -38,7 +38,7 @@ function update_script() { msg_info "Updating ${APP}" cd /opt - wget -q https://nextpvr.com/nextpvr-helper.deb + curl -fsSL "https://nextpvr.com/nextpvr-helper.deb" -o $(basename "https://nextpvr.com/nextpvr-helper.deb") $STD dpkg -i nextpvr-helper.deb msg_ok "Updated ${APP}" @@ -60,4 +60,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}:8866${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8866${CL}" diff --git a/ct/nginxproxymanager.sh b/ct/nginxproxymanager.sh index 26b37ca79..18364e758 100644 --- a/ct/nginxproxymanager.sh +++ b/ct/nginxproxymanager.sh @@ -14,7 +14,7 @@ var_os="debian" var_version="12" var_unprivileged="1" -header_info "$APP" +header_info "$APP" variables color catch_errors @@ -27,13 +27,13 @@ function update_script() { msg_error "No ${APP} Installation Found!" exit fi - if ! command -v pnpm &> /dev/null; then + if ! command -v pnpm &>/dev/null; then msg_info "Installing pnpm" #export NODE_OPTIONS=--openssl-legacy-provider $STD npm install -g pnpm@8.15 msg_ok "Installed pnpm" fi - RELEASE=$(curl -s https://api.github.com/repos/NginxProxyManager/nginx-proxy-manager/releases/latest | + RELEASE=$(curl -fsSL https://api.github.com/repos/NginxProxyManager/nginx-proxy-manager/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') msg_info "Stopping Services" @@ -47,12 +47,12 @@ function update_script() { /etc/nginx \ /var/log/nginx \ /var/lib/nginx \ - $STD /var/cache/nginx + "$STD" /var/cache/nginx msg_ok "Cleaned Old Files" msg_info "Downloading NPM v${RELEASE}" - wget -q https://codeload.github.com/NginxProxyManager/nginx-proxy-manager/tar.gz/v${RELEASE} -O - | tar -xz - cd nginx-proxy-manager-${RELEASE} + curl -fsSL "https://codeload.github.com/NginxProxyManager/nginx-proxy-manager/tar.gz/v${RELEASE}" | tar -xz + cd nginx-proxy-manager-"${RELEASE}" || exit msg_ok "Downloaded NPM v${RELEASE}" msg_info "Setting up Enviroment" @@ -62,8 +62,6 @@ function update_script() { ln -sf /usr/local/openresty/nginx/ /etc/nginx sed -i "s|\"version\": \"0.0.0\"|\"version\": \"$RELEASE\"|" backend/package.json sed -i "s|\"version\": \"0.0.0\"|\"version\": \"$RELEASE\"|" frontend/package.json - sed -i 's|"fork-me": ".*"|"fork-me": "Proxmox VE Helper-Scripts"|' frontend/js/i18n/messages.json - sed -i "s|https://github.com.*source=nginx-proxy-manager|https://helper-scripts.com|g" frontend/js/app/ui/footer/main.ejs sed -i 's+^daemon+#daemon+g' docker/rootfs/etc/nginx/nginx.conf NGINX_CONFS=$(find "$(pwd)" -type f -name "*.conf") for NGINX_CONF in $NGINX_CONFS; do @@ -105,7 +103,7 @@ function update_script() { msg_ok "Setup Enviroment" msg_info "Building Frontend" - cd ./frontend + cd ./frontend || exit $STD pnpm install $STD pnpm upgrade $STD pnpm run build @@ -130,7 +128,7 @@ function update_script() { } EOF fi - cd /app + cd /app || exit $STD pnpm install msg_ok "Initialized Backend" diff --git a/ct/nocodb.sh b/ct/nocodb.sh index 28a2d303a..2178ea9e5 100644 --- a/ct/nocodb.sh +++ b/ct/nocodb.sh @@ -31,7 +31,7 @@ function update_script() { systemctl stop nocodb.service cd /opt/nocodb rm -rf nocodb - curl -s http://get.nocodb.com/linux-x64 -o nocodb -L + curl -fsSL http://get.nocodb.com/linux-x64 -o nocodb -L chmod +x nocodb systemctl start nocodb.service msg_ok "Updated Successfully" @@ -45,4 +45,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}:8080/dashboard${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8080/dashboard${CL}" diff --git a/ct/node-red.sh b/ct/node-red.sh index dcb1ab380..bc00fe58c 100644 --- a/ct/node-red.sh +++ b/ct/node-red.sh @@ -99,4 +99,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}:1880${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:1880${CL}" diff --git a/ct/nodebb.sh b/ct/nodebb.sh index 4b79273a8..48cbec402 100644 --- a/ct/nodebb.sh +++ b/ct/nodebb.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2025 community-scripts ORG # Author: MickLesk (Canbiz) # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -31,7 +31,7 @@ function update_script() { exit fi - RELEASE=$(curl -s https://api.github.com/repos/NodeBB/NodeBB/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') + RELEASE=$(curl -fsSL https://api.github.com/repos/NodeBB/NodeBB/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then msg_info "Stopping ${APP}" systemctl stop nodebb @@ -60,4 +60,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}:4567${CL}" +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:4567${CL}" \ No newline at end of file diff --git a/ct/notifiarr.sh b/ct/notifiarr.sh index 64e037b57..1d344cea6 100644 --- a/ct/notifiarr.sh +++ b/ct/notifiarr.sh @@ -41,4 +41,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}:5454${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:5454${CL}" diff --git a/ct/npmplus.sh b/ct/npmplus.sh index cbc4682ed..2da9a49f0 100644 --- a/ct/npmplus.sh +++ b/ct/npmplus.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2025 community-scripts ORG # Author: MickLesk (CanbiZ) # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -20,17 +20,35 @@ color catch_errors function update_script() { - UPD=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "SUPPORT" --radiolist --cancel-button Exit-Script "Spacebar = Select" 11 58 1 \ - "1" "Check for Alpine Updates" ON \ + UPD=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "UPDATE MODE" --radiolist --cancel-button Exit-Script "Spacebar = Select" 14 60 2 \ + "1" "Check for Alpine Updates" OFF \ + "2" "Update NPMplus Docker Container" ON \ 3>&1 1>&2 2>&3) - header_info - if [ "$UPD" == "1" ]; then - apk update && apk upgrade - exit - fi + 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 + ;; + esac + exit 0 } + start build_container description @@ -38,4 +56,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}" +echo -e "${TAB}${GATEWAY}${BGN}https://${IP}:81${CL}" \ No newline at end of file diff --git a/ct/ntfy.sh b/ct/ntfy.sh index f66dbe96a..aafba9200 100644 --- a/ct/ntfy.sh +++ b/ct/ntfy.sh @@ -41,4 +41,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}${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}" diff --git a/ct/nxwitness.sh b/ct/nxwitness.sh index ebcbe69cd..9477bad19 100644 --- a/ct/nxwitness.sh +++ b/ct/nxwitness.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2025 community-scripts ORG # Author: MickLesk (CanbiZ) # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -28,8 +28,8 @@ function update_script() { exit fi BASE_URL="https://updates.networkoptix.com/default/index.html" - RELEASE=$(curl -s "$BASE_URL" | grep -oP '(?<=)[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+(?=)' | head -n 1) - DETAIL_PAGE=$(curl -s "$BASE_URL#note_$RELEASE") + RELEASE=$(curl -fsSL "$BASE_URL" | grep -oP '(?<=)[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+(?=)' | head -n 1) + DETAIL_PAGE=$(curl -fsSL "$BASE_URL#note_$RELEASE") DOWNLOAD_URL=$(echo "$DETAIL_PAGE" | grep -oP "https://updates.networkoptix.com/default/$RELEASE/linux/nxwitness-server-[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+-linux_x64\.deb" | head -n 1) if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then msg_info "Stopping ${APP}" @@ -38,7 +38,7 @@ function update_script() { msg_info "Updating ${APP} to ${RELEASE}" cd /tmp - wget -q "$DOWNLOAD_URL" -O "nxwitness-server-$RELEASE-linux_x64.deb" +curl -fsSL "$DOWNLOAD_URL" -o ""nxwitness-server-$RELEASE-linux_x64.deb"" export DEBIAN_FRONTEND=noninteractive export DEBCONF_NOWARNINGS=yes $STD dpkg -i nxwitness-server-$RELEASE-linux_x64.deb @@ -67,4 +67,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}:7001/${CL}" +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:7001/${CL}" \ No newline at end of file diff --git a/ct/nzbget.sh b/ct/nzbget.sh index c6beadcba..6381ba7f7 100644 --- a/ct/nzbget.sh +++ b/ct/nzbget.sh @@ -41,4 +41,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}:6789${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:6789${CL}" diff --git a/ct/octoprint.sh b/ct/octoprint.sh index 43363f594..4e4ffc437 100644 --- a/ct/octoprint.sh +++ b/ct/octoprint.sh @@ -50,4 +50,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/ollama.sh b/ct/ollama.sh index d591edbde..9c225754f 100644 --- a/ct/ollama.sh +++ b/ct/ollama.sh @@ -40,4 +40,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}:14434${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:14434${CL}" diff --git a/ct/omada.sh b/ct/omada.sh index ddca06c7f..c9805799e 100644 --- a/ct/omada.sh +++ b/ct/omada.sh @@ -33,10 +33,10 @@ function update_script() { if ! lscpu | grep -q 'avx'; then 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 1 fi - wget -qO- https://www.mongodb.org/static/pgp/server-${MONGODB_VERSION}.asc | gpg --dearmor >/usr/share/keyrings/mongodb-server-${MONGODB_VERSION}.gpg + curl -fsSL "https://www.mongodb.org/static/pgp/server-${MONGODB_VERSION}.asc" | gpg --dearmor >/usr/share/keyrings/mongodb-server-${MONGODB_VERSION}.gpg echo "deb [signed-by=/usr/share/keyrings/mongodb-server-${MONGODB_VERSION}.gpg] http://repo.mongodb.org/apt/debian $(grep '^VERSION_CODENAME=' /etc/os-release | cut -d'=' -f2)/mongodb-org/${MONGODB_VERSION} main" >/etc/apt/sources.list.d/mongodb-org-${MONGODB_VERSION}.list $STD apt-get update $STD apt-get install -y --only-upgrade mongodb-org @@ -45,24 +45,24 @@ function update_script() { msg_info "Checking if right Azul Zulu Java is installed" java_version=$(java -version 2>&1 | awk -F[\"_] '/version/ {print $2}') if [[ "$java_version" =~ ^1\.8\.* ]]; then - $STD apt-get remove --purge -y zulu8-jdk - $STD apt-get -y install zulu21-jre-headless - msg_ok "Updated Azul Zulu Java to 21" + $STD apt-get remove --purge -y zulu8-jdk + $STD apt-get -y install zulu21-jre-headless + msg_ok "Updated Azul Zulu Java to 21" else - msg_ok "Azul Zulu Java 21 already installed" + msg_ok "Azul Zulu Java 21 already installed" fi msg_info "Updating Omada Controller" - latest_url=$(curl -s "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_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 fi - wget -qL ${latest_url} + curl -fsSL "${latest_url}" -O export DEBIAN_FRONTEND=noninteractive - $STD dpkg -i ${latest_version} + $STD dpkg -i ${latest_version} rm -rf ${latest_version} msg_ok "Updated Omada Controller" } diff --git a/ct/ombi.sh b/ct/ombi.sh index 46fb0c55d..701f94cd8 100644 --- a/ct/ombi.sh +++ b/ct/ombi.sh @@ -27,14 +27,14 @@ function update_script() { msg_error "No ${APP} Installation Found!" exit fi - RELEASE=$(curl -sL https://api.github.com/repos/Ombi-app/Ombi/releases/latest | grep '"tag_name":' | cut -d'"' -f4) + RELEASE=$(curl -fsSL https://api.github.com/repos/Ombi-app/Ombi/releases/latest | grep '"tag_name":' | cut -d'"' -f4) if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then msg_info "Stopping ${APP}" systemctl stop ombi msg_ok "Stopped ${APP}" msg_info "Updating ${APP} to ${RELEASE}" - wget -q https://github.com/Ombi-app/Ombi/releases/download/${RELEASE}/linux-x64.tar.gz + curl -fsSL "https://github.com/Ombi-app/Ombi/releases/download/${RELEASE}/linux-x64.tar.gz" -o $(basename "https://github.com/Ombi-app/Ombi/releases/download/${RELEASE}/linux-x64.tar.gz") tar -xzf linux-x64.tar.gz -C /opt/ombi rm -rf linux-x64.tar.gz echo "${RELEASE}" >/opt/${APP}_version.txt @@ -57,4 +57,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/omv.sh b/ct/omv.sh index 1df48a1d5..b8006678d 100644 --- a/ct/omv.sh +++ b/ct/omv.sh @@ -41,4 +41,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}${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}" diff --git a/ct/onedev.sh b/ct/onedev.sh index 1b6289575..b141bba4e 100644 --- a/ct/onedev.sh +++ b/ct/onedev.sh @@ -27,7 +27,7 @@ function update_script() { msg_error "No ${APP} Installation Found!" exit fi - GITHUB_RELEASE=$(curl -s https://api.github.com/repos/theonedev/onedev/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') + GITHUB_RELEASE=$(curl -fsSL https://api.github.com/repos/theonedev/onedev/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${GITHUB_RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then msg_info "Stopping Service" systemctl stop onedev @@ -35,7 +35,7 @@ function update_script() { msg_info "Updating ${APP} to v${GITHUB_RELEASE}" cd /opt - wget -q https://code.onedev.io/onedev/server/~site/onedev-latest.tar.gz + curl -fsSL "https://code.onedev.io/onedev/server/~site/onedev-latest.tar.gz" -o $(basename "https://code.onedev.io/onedev/server/~site/onedev-latest.tar.gz") tar -xzf onedev-latest.tar.gz $STD /opt/onedev-latest/bin/upgrade.sh /opt/onedev RELEASE=$(cat /opt/onedev/release.properties | grep "version" | cut -d'=' -f2) @@ -64,4 +64,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}:6610${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:6610${CL}" diff --git a/ct/opengist.sh b/ct/opengist.sh index d49ffda65..79c2f204b 100644 --- a/ct/opengist.sh +++ b/ct/opengist.sh @@ -27,18 +27,18 @@ function update_script() { msg_error "No ${APP} Installation Found!" exit fi - RELEASE=$(curl -s https://api.github.com/repos/thomiceli/opengist/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') + RELEASE=$(curl -fsSL https://api.github.com/repos/thomiceli/opengist/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" systemctl stop opengist.service msg_ok "Stopped Service" - + msg_info "Updating ${APP} to v${RELEASE}" $STD apt-get update $STD apt-get -y upgrade cd /opt mv /opt/opengist /opt/opengist-backup - wget -q "https://github.com/thomiceli/opengist/releases/download/v${RELEASE}/opengist${RELEASE}-linux-arm64.tar.gz" + curl -fsSL "https://github.com/thomiceli/opengist/releases/download/v${RELEASE}/opengist${RELEASE}-linux-arm64.tar.gz" -o $(basename "https://github.com/thomiceli/opengist/releases/download/v${RELEASE}/opengist${RELEASE}-linux-arm64.tar.gz") tar -xzf opengist${RELEASE}-linux-arm64.tar.gz mv /opt/opengist-backup/config.yml /opt/opengist/config.yml chmod +x /opt/opengist/opengist @@ -50,7 +50,7 @@ function update_script() { msg_ok "Started Service" msg_info "Cleaning up" - rm -rf /opt/opengist${RELEASE}-linux-amd64.tar.gz + rm -rf /opt/opengist${RELEASE}-linux-arm64.tar.gz rm -rf /opt/opengist-backup $STD apt-get -y autoremove $STD apt-get -y autoclean diff --git a/ct/openobserve.sh b/ct/openobserve.sh index 5ccf7a863..56257c9d9 100644 --- a/ct/openobserve.sh +++ b/ct/openobserve.sh @@ -29,7 +29,7 @@ function update_script() { fi msg_info "Updating $APP" systemctl stop openobserve - LATEST=$(curl -sL https://api.github.com/repos/openobserve/openobserve/releases/latest | grep '"tag_name":' | cut -d'"' -f4) + LATEST=$(curl -fsSL https://api.github.com/repos/openobserve/openobserve/releases/latest | grep '"tag_name":' | cut -d'"' -f4) tar zxvf <(curl -fsSL https://github.com/openobserve/openobserve/releases/download/$LATEST/openobserve-${LATEST}-linux-amd64.tar.gz) -C /opt/openobserve systemctl start openobserve msg_ok "Updated $APP" @@ -43,4 +43,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}:5080${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:5080${CL}" diff --git a/ct/openwebui.sh b/ct/openwebui.sh index 87975c40d..ef858541a 100644 --- a/ct/openwebui.sh +++ b/ct/openwebui.sh @@ -27,6 +27,21 @@ function update_script() { msg_error "No ${APP} Installation Found!" exit fi + + if [ -x "/usr/bin/ollama" ]; then + msg_info "Updating Ollama" + OLLAMA_VERSION=$(ollama -v | awk '{print $NF}') + RELEASE=$(curl -s https://api.github.com/repos/ollama/ollama/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4)}') + if [ "$OLLAMA_VERSION" != "$RELEASE" ]; then + curl -fsSLO https://ollama.com/download/ollama-linux-amd64.tgz + tar -C /usr -xzf ollama-linux-amd64.tgz + rm -rf ollama-linux-amd64.tgz + msg_ok "Ollama updated to version $RELEASE" + else + msg_ok "Ollama is already up to date." + fi + fi + msg_info "Updating ${APP} (Patience)" cd /opt/open-webui mkdir -p /opt/open-webui-backup diff --git a/ct/openziti-tunnel.sh b/ct/openziti-tunnel.sh new file mode 100644 index 000000000..bc36cde86 --- /dev/null +++ b/ct/openziti-tunnel.sh @@ -0,0 +1,44 @@ +#!/usr/bin/env bash +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +# Copyright (c) 2021-2025 community-scripts ORG +# Author: emoscardini +# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE +# Source: https://github.com/openziti/ziti + +APP="openziti-tunnel" +var_tags="${var_tags:-network;openziti-tunnel}" +var_cpu="${var_cpu:-1}" +var_ram="${var_ram:-512}" +var_disk="${var_disk:-2}" +var_os="${var_os:-ubuntu}" +var_version="${var_version:-24.04}" +var_unprivileged="${var_unprivileged:-1}" + +header_info "$APP" +variables +color +catch_errors + +function update_script() { + header_info + check_container_storage + check_container_resources + if [[ ! -d /opt/openziti ]]; then + msg_error "No ${APP} Installation Found!" + exit + fi + msg_info "Updating $APP LXC" + $STD apt-get update + $STD apt-get -y upgrade + msg_ok "Updated $APP LXC" + exit +} + +start +build_container +description + +msg_ok "Completed Successfully!\n" +echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" +echo -e "${INFO}${YW} Application was assigned the following IP:${CL}" +echo -e "${TAB}${GATEWAY}${BGN}Address: ${IP}${CL}" \ No newline at end of file diff --git a/ct/outline.sh b/ct/outline.sh index a303be7e9..7d4817fc9 100644 --- a/ct/outline.sh +++ b/ct/outline.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2025 community-scripts ORG # Author: Slaviša Arežina (tremor021) # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -27,7 +27,7 @@ function update_script() { msg_error "No ${APP} Installation Found!" exit fi - RELEASE=$(curl -s https://api.github.com/repos/outline/outline/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') + 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 @@ -36,7 +36,7 @@ function update_script() { msg_info "Updating ${APP} to ${RELEASE}" temp_file=$(mktemp) rm -rf /opt/outline/node_modules - wget -q "https://github.com/outline/outline/archive/refs/tags/v${RELEASE}.tar.gz" -O $temp_file +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 @@ -68,4 +68,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}" +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}" \ No newline at end of file diff --git a/ct/overseerr.sh b/ct/overseerr.sh index ee30d7553..f6f3fbbe9 100644 --- a/ct/overseerr.sh +++ b/ct/overseerr.sh @@ -51,4 +51,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}:5055${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:5055${CL}" diff --git a/ct/owncast.sh b/ct/owncast.sh index 6bca61e23..2183c02f0 100644 --- a/ct/owncast.sh +++ b/ct/owncast.sh @@ -41,4 +41,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}:8080/admin${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8080/admin${CL}" diff --git a/ct/pairdrop.sh b/ct/pairdrop.sh index 63eb913d7..8642d531c 100644 --- a/ct/pairdrop.sh +++ b/ct/pairdrop.sh @@ -44,4 +44,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/ct/paperless-ai.sh b/ct/paperless-ai.sh index 60cd99faf..2f1ebda43 100644 --- a/ct/paperless-ai.sh +++ b/ct/paperless-ai.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2025 community-scripts ORG # Author: MickLesk (CanbiZ) # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -27,7 +27,7 @@ function update_script() { msg_error "No ${APP} Installation Found!" exit fi - RELEASE=$(curl -s https://api.github.com/repos/clusterzx/paperless-ai/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') + RELEASE=$(curl -fsSL https://api.github.com/repos/clusterzx/paperless-ai/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then msg_info "Stopping $APP" systemctl stop paperless-ai @@ -36,7 +36,7 @@ function update_script() { msg_info "Updating $APP to v${RELEASE}" cd /opt mv /opt/paperless-ai /opt/paperless-ai_bak - wget -q "https://github.com/clusterzx/paperless-ai/archive/refs/tags/v${RELEASE}.zip" + curl -fsSL "https://github.com/clusterzx/paperless-ai/archive/refs/tags/v${RELEASE}.zip" -o $(basename "https://github.com/clusterzx/paperless-ai/archive/refs/tags/v${RELEASE}.zip") unzip -q v${RELEASE}.zip mv paperless-ai-${RELEASE} /opt/paperless-ai mkdir -p /opt/paperless-ai/data diff --git a/ct/paperless-gpt.sh b/ct/paperless-gpt.sh index be6760ba9..7fe592801 100644 --- a/ct/paperless-gpt.sh +++ b/ct/paperless-gpt.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2025 community-scripts ORG # Author: MickLesk (CanbiZ) # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -27,7 +27,7 @@ function update_script() { msg_error "No Paperless-GPT installation found!" exit 1 fi - RELEASE=$(curl -s https://api.github.com/repos/icereed/paperless-gpt/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') + RELEASE=$(curl -fsSL https://api.github.com/repos/icereed/paperless-gpt/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" systemctl stop paperless-gpt @@ -35,7 +35,7 @@ function update_script() { msg_info "Updating Paperless-GPT to ${RELEASE}" temp_file=$(mktemp) - wget -q "https://github.com/icereed/paperless-gpt/archive/refs/tags/v${RELEASE}.tar.gz" -O $temp_file +curl -fsSL "https://github.com/icereed/paperless-gpt/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file" tar zxf $temp_file rm -rf /opt/paperless-gpt mv paperless-gpt-${RELEASE} /opt/paperless-gpt @@ -71,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}:8080${CL}" +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8080${CL}" \ No newline at end of file diff --git a/ct/paperless-ngx.sh b/ct/paperless-ngx.sh index 429cfa0a6..0a00a82d5 100644 --- a/ct/paperless-ngx.sh +++ b/ct/paperless-ngx.sh @@ -24,7 +24,7 @@ function update_script() { msg_error "No ${APP} Installation Found!" exit fi - RELEASE=$(curl -s https://api.github.com/repos/paperless-ngx/paperless-ngx/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') + RELEASE=$(curl -fsSL https://api.github.com/repos/paperless-ngx/paperless-ngx/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') UPD=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "SUPPORT" --radiolist --cancel-button Exit-Script "Spacebar = Select" 11 58 2 \ "1" "Update Paperless-ngx to $RELEASE" ON \ @@ -38,7 +38,7 @@ function update_script() { if [[ "$(gs --version 2>/dev/null)" != "10.04.0" ]]; then msg_info "Updating Ghostscript (Patience)" cd /tmp - wget -q https://github.com/ArtifexSoftware/ghostpdl-downloads/releases/download/gs10040/ghostscript-10.04.0.tar.gz + 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") tar -xzf ghostscript-10.04.0.tar.gz cd ghostscript-10.04.0 $STD ./configure @@ -53,7 +53,7 @@ function update_script() { msg_info "Updating to ${RELEASE}" cd ~ - wget -q https://github.com/paperless-ngx/paperless-ngx/releases/download/$RELEASE/paperless-ngx-$RELEASE.tar.xz + curl -fsSL "https://github.com/paperless-ngx/paperless-ngx/releases/download/$RELEASE/paperless-ngx-$RELEASE.tar.xz" -o $(basename "https://github.com/paperless-ngx/paperless-ngx/releases/download/$RELEASE/paperless-ngx-$RELEASE.tar.xz") tar -xf paperless-ngx-$RELEASE.tar.xz cp -r /opt/paperless/paperless.conf paperless-ngx/ cp -r paperless-ngx/* /opt/paperless/ @@ -93,4 +93,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}:8000${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8000${CL}" diff --git a/ct/part-db.sh b/ct/part-db.sh index 16fe9d720..cf8c622cf 100644 --- a/ct/part-db.sh +++ b/ct/part-db.sh @@ -27,7 +27,7 @@ function update_script() { msg_error "No ${APP} Installation Found!" exit fi - RELEASE=$(curl -s https://api.github.com/repos/Part-DB/Part-DB-server/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') + RELEASE=$(curl -fsSL https://api.github.com/repos/Part-DB/Part-DB-server/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" systemctl stop apache2 @@ -36,7 +36,7 @@ function update_script() { msg_info "Updating $APP to v${RELEASE}" cd /opt mv /opt/partdb/ /opt/partdb-backup - wget -q "https://github.com/Part-DB/Part-DB-server/archive/refs/tags/v${RELEASE}.zip" + curl -fsSL "https://github.com/Part-DB/Part-DB-server/archive/refs/tags/v${RELEASE}.zip" -o $(basename "https://github.com/Part-DB/Part-DB-server/archive/refs/tags/v${RELEASE}.zip") unzip -q "v${RELEASE}.zip" mv /opt/Part-DB-server-${RELEASE}/ /opt/partdb diff --git a/ct/paymenter.sh b/ct/paymenter.sh index 9bab05f48..5fda4a92b 100644 --- a/ct/paymenter.sh +++ b/ct/paymenter.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2025 community-scripts ORG # Author: Nícolas Pastorello (opastorello) # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -28,7 +28,7 @@ function update_script() { msg_error "No ${APP} Installation Found!" exit fi - RELEASE=$(curl -s https://api.github.com/repos/paymenter/paymenter/releases/latest | grep '"tag_name"' | sed -E 's/.*"tag_name": "([^"]+)".*/\1/') + RELEASE=$(curl -fsSL https://api.github.com/repos/paymenter/paymenter/releases/latest | grep '"tag_name"' | sed -E 's/.*"tag_name": "([^"]+)".*/\1/') 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 @@ -48,4 +48,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}:80${CL}" +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:80${CL}" \ No newline at end of file diff --git a/ct/peanut.sh b/ct/peanut.sh index 3d4a28c26..bb948bec5 100644 --- a/ct/peanut.sh +++ b/ct/peanut.sh @@ -27,11 +27,11 @@ function update_script() { msg_error "No ${APP} Installation Found!" exit fi - RELEASE=$(curl -sL https://api.github.com/repos/Brandawg93/PeaNUT/releases/latest | grep '"tag_name":' | cut -d'"' -f4) + RELEASE=$(curl -fsSL https://api.github.com/repos/Brandawg93/PeaNUT/releases/latest | grep '"tag_name":' | cut -d'"' -f4) if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then msg_info "Updating $APP to ${RELEASE}" systemctl stop peanut - wget -qO peanut.tar.gz https://api.github.com/repos/Brandawg93/PeaNUT/tarball/${RELEASE} + 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 rm peanut.tar.gz cd /opt/peanut @@ -56,4 +56,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/ct/pelican-panel.sh b/ct/pelican-panel.sh index bb7467511..15a3908de 100644 --- a/ct/pelican-panel.sh +++ b/ct/pelican-panel.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2025 community-scripts ORG # Author: bvdberg01 # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -27,17 +27,34 @@ function update_script() { msg_error "No ${APP} Installation Found!" exit fi - RELEASE=$(curl -s https://api.github.com/repos/pelican-dev/panel/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') + 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" + $STD curl -fsSLo /tmp/debsuryorg-archive-keyring.deb https://packages.sury.org/debsuryorg-archive-keyring.deb + $STD dpkg -i /tmp/debsuryorg-archive-keyring.deb + $STD sh -c 'echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list' + $STD apt-get update + $STD apt-get remove -y php"${CURRENT_PHP//./}"* + $STD apt-get install -y \ + php8.4 \ + php8.4-{gd,mysql,mbstring,bcmath,xml,curl,zip,intl,fpm} \ + libapache2-mod-php8.4 + + msg_ok "Migrated PHP $CURRENT_PHP to 8.4" + fi + + 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 + cd /opt/pelican-panel || exit $STD php artisan down msg_ok "Stopped Service" msg_info "Updating ${APP} to v${RELEASE}" cp -r /opt/pelican-panel/.env /opt/ rm -rf * .* - wget -q "https://github.com/pelican-dev/panel/releases/download/v${RELEASE}/panel.tar.gz" + 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" mv /opt/.env /opt/pelican-panel/ $STD composer install --no-dev --optimize-autoloader --no-interaction diff --git a/ct/pelican-wings.sh b/ct/pelican-wings.sh index ff871626a..35b0f46fd 100644 --- a/ct/pelican-wings.sh +++ b/ct/pelican-wings.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2025 community-scripts ORG # Author: bvdberg01 # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -27,7 +27,7 @@ function update_script() { msg_error "No ${APP} Installation Found!" exit fi - RELEASE=$(curl -s https://api.github.com/repos/pelican-dev/wings/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') + RELEASE=$(curl -fsSL https://api.github.com/repos/pelican-dev/wings/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" systemctl stop wings @@ -35,7 +35,7 @@ function update_script() { msg_info "Updating ${APP} to v${RELEASE}" rm /usr/local/bin/wings - wget -q -O /usr/local/bin/wings "https://github.com/pelican-dev/wings/releases/download/v${RELEASE}/wings_linux_amd64" +curl -fsSL "https://github.com/pelican-dev/wings/releases/download/v${RELEASE}/wings_linux_amd64" -o "/usr/local/bin/wings" chmod u+x /usr/local/bin/wings echo "${RELEASE}" >/opt/${APP}_version.txt msg_ok "Updated $APP to v${RELEASE}" diff --git a/ct/petio.sh b/ct/petio.sh index 22be7222f..773ec627e 100644 --- a/ct/petio.sh +++ b/ct/petio.sh @@ -28,7 +28,7 @@ function update_script() { fi msg_info "Updating $APP" systemctl stop petio.service - wget https://petio.tv/releases/latest -O petio-latest.zip + curl -fsSL https://petio.tv/releases/latest -o petio-latest.zip unzip petio-latest.zip -d /opt/Petio systemctl start petio.service msg_ok "Updated $APP" @@ -42,4 +42,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}" diff --git a/ct/pf2etools.sh b/ct/pf2etools.sh index 937e4d767..c7d7afcf0 100644 --- a/ct/pf2etools.sh +++ b/ct/pf2etools.sh @@ -29,7 +29,7 @@ function update_script() { exit fi - RELEASE=$(curl -s https://api.github.com/repos/Pf2eToolsOrg/Pf2eTools/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') + RELEASE=$(curl -fsSL https://api.github.com/repos/Pf2eToolsOrg/Pf2eTools/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f "/opt/${APP}_version.txt" ]]; then msg_info "Updating System" $STD apt-get update @@ -38,7 +38,7 @@ function update_script() { msg_info "Updating ${APP}" cd /opt - wget -q "https://github.com/Pf2eToolsOrg/Pf2eTools/archive/refs/tags/${RELEASE}.zip" + curl -fsSL "https://github.com/Pf2eToolsOrg/Pf2eTools/archive/refs/tags/${RELEASE}.zip" -o $(basename "https://github.com/Pf2eToolsOrg/Pf2eTools/archive/refs/tags/${RELEASE}.zip") unzip -q ${RELEASE}.zip rm -rf "/opt/${APP}" mv ${APP}-${RELEASE:1} /opt/${APP} diff --git a/ct/photoprism.sh b/ct/photoprism.sh index 1d3e2ba2d..414d345e3 100644 --- a/ct/photoprism.sh +++ b/ct/photoprism.sh @@ -33,7 +33,7 @@ function update_script() { msg_info "Updating PhotoPrism" $STD apt-get install -y libvips42 - wget -q -cO - https://dl.photoprism.app/pkg/linux/amd64.tar.gz | tar -xzf - -C /opt/photoprism --strip-components=1 + curl -fsSL https://dl.photoprism.app/pkg/linux/amd64.tar.gz | tar -xzf - -C /opt/photoprism --strip-components=1 msg_ok "Updated PhotoPrism" msg_info "Starting PhotoPrism" @@ -50,4 +50,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}:2342${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:2342${CL}" diff --git a/ct/phpipam.sh b/ct/phpipam.sh index c1b85f940..237a27fe9 100644 --- a/ct/phpipam.sh +++ b/ct/phpipam.sh @@ -27,7 +27,7 @@ function update_script() { msg_error "No ${APP} Installation Found!" exit fi - RELEASE=$(curl -s https://api.github.com/repos/phpipam/phpipam/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') + RELEASE=$(curl -fsSL https://api.github.com/repos/phpipam/phpipam/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" systemctl stop apache2 @@ -36,7 +36,7 @@ function update_script() { msg_info "Updating ${APP} to v${RELEASE}" cd /opt mv /opt/phpipam/ /opt/phpipam-backup - wget -q "https://github.com/phpipam/phpipam/releases/download/v${RELEASE}/phpipam-v${RELEASE}.zip" + curl -fsSL "https://github.com/phpipam/phpipam/releases/download/v${RELEASE}/phpipam-v${RELEASE}.zip" -o $(basename "https://github.com/phpipam/phpipam/releases/download/v${RELEASE}/phpipam-v${RELEASE}.zip") unzip -q "phpipam-v${RELEASE}.zip" cp /opt/phpipam-backup/config.php /opt/phpipam echo "${RELEASE}" >/opt/${APP}_version.txt diff --git a/ct/pialert.sh b/ct/pialert.sh index 27ecb891b..d14532ba5 100644 --- a/ct/pialert.sh +++ b/ct/pialert.sh @@ -27,7 +27,7 @@ function update_script() { msg_error "No ${APP} Installation Found!" exit fi - bash -c "$(wget -qLO - https://github.com/leiweibau/Pi.Alert/raw/main/install/pialert_update.sh)" -s --lxc + bash -c "$(curl -fsSL https://github.com/leiweibau/Pi.Alert/raw/main/install/pialert_update.sh)" -s --lxc msg_ok "Updated $APP" exit } @@ -39,4 +39,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}/pialert${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}/pialert${CL}" diff --git a/ct/pingvin.sh b/ct/pingvin.sh index dbc7937a4..ea4269740 100644 --- a/ct/pingvin.sh +++ b/ct/pingvin.sh @@ -20,50 +20,49 @@ color catch_errors function update_script() { - header_info - check_container_storage - check_container_resources - if [[ ! -d /opt/pingvin-share ]]; then - msg_error "No ${APP} Installation Found!" - exit - fi - - RELEASE=$(curl -s https://api.github.com/repos/stonith404/pingvin-share/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') - if [[ ! -f /opt/pingvin_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/pingvin_version.txt)" ]]; then - - msg_info "Stopping Pingvin Share" - systemctl stop pm2-root.service - msg_ok "Stopped Pingvin Share" - - msg_info "Updating Pingvin Share to v${RELEASE}" - cd /opt - wget -q "https://github.com/stonith404/pingvin-share/archive/refs/tags/v${RELEASE}.zip" - unzip -q v${RELEASE}.zip - cp -rf pingvin-share-${RELEASE}/* /opt/pingvin-share - cd /opt/pingvin-share - cd backend - $STD npm install - $STD npm run build - cd ../frontend - $STD npm install - $STD npm run build - echo "${RELEASE}" >"/opt/pingvin_version.txt" - rm -rf /opt/v${RELEASE}.zip - rm -rf /opt/pingvin-share-${RELEASE} - msg_ok "Updated Pingvin Share to v${RELEASE}" + header_info + check_container_storage + check_container_resources + if [[ ! -d /opt/pingvin-share ]]; then + msg_error "No ${APP} Installation Found!" + exit + fi - msg_info "Starting Pingvin Share" - systemctl start pm2-root.service - msg_ok "Started Pingvin Share" + RELEASE=$(curl -fsSL https://api.github.com/repos/stonith404/pingvin-share/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') + if [[ ! -f /opt/pingvin_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/pingvin_version.txt)" ]]; then - msg_ok "Updated Successfully" - exit + msg_info "Stopping Pingvin Share" + systemctl stop pm2-root.service + msg_ok "Stopped Pingvin Share" + + msg_info "Updating Pingvin Share to v${RELEASE}" + cd /opt + curl -fsSL "https://github.com/stonith404/pingvin-share/archive/refs/tags/v${RELEASE}.zip" -o $(basename "https://github.com/stonith404/pingvin-share/archive/refs/tags/v${RELEASE}.zip") + unzip -q v${RELEASE}.zip + cp -rf pingvin-share-${RELEASE}/* /opt/pingvin-share + cd /opt/pingvin-share + cd backend + $STD npm install + $STD npm run build + cd ../frontend + $STD npm install + $STD npm run build + echo "${RELEASE}" >"/opt/pingvin_version.txt" + rm -rf /opt/v${RELEASE}.zip + rm -rf /opt/pingvin-share-${RELEASE} + msg_ok "Updated Pingvin Share to v${RELEASE}" + + msg_info "Starting Pingvin Share" + systemctl start pm2-root.service + msg_ok "Started Pingvin Share" + + msg_ok "Updated Successfully" + exit else msg_ok "No update required. Pingvin Share is already at v${RELEASE}." fi } - start build_container description diff --git a/ct/plant-it.sh b/ct/plant-it.sh index c95e12ba9..4e2ebddd6 100644 --- a/ct/plant-it.sh +++ b/ct/plant-it.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2025 community-scripts ORG # Author: MickLesk (CanbiZ) # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -29,16 +29,16 @@ function update_script() { exit fi - RELEASE=$(curl -s https://api.github.com/repos/MDeLuise/plant-it/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') + RELEASE=$(curl -fsSL https://api.github.com/repos/MDeLuise/plant-it/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then msg_info "Stopping $APP" systemctl stop plant-it msg_ok "Stopped $APP" msg_info "Updating $APP to v${RELEASE}" - wget -q -O /opt/plant-it/server.jar "https://github.com/MDeLuise/plant-it/releases/download/${RELEASE}/server.jar" + curl -fsSL "https://github.com/MDeLuise/plant-it/releases/download/${RELEASE}/server.jar" -o "/opt/plant-it/server.jar" cd /opt/plant-it/frontend - wget -q https://github.com/MDeLuise/plant-it/releases/download/${RELEASE}/client.tar.gz + curl -fsSL "https://github.com/MDeLuise/plant-it/releases/download/${RELEASE}/client.tar.gz" -o $(basename "https://github.com/MDeLuise/plant-it/releases/download/${RELEASE}/client.tar.gz") tar -xzf client.tar.gz rm -f client.tar.gz echo "${RELEASE}" >/opt/${APP}_version.txt diff --git a/ct/plex.sh b/ct/plex.sh index 4e2a5cce1..0b240f0e1 100644 --- a/ct/plex.sh +++ b/ct/plex.sh @@ -40,7 +40,7 @@ function update_script() { fi if [ "$UPD" == "2" ]; then set +e - bash -c "$(wget -qO - https://raw.githubusercontent.com/mrworf/plexupdate/master/extras/installer.sh)" + bash -c "$(curl -fsSL https://raw.githubusercontent.com/mrworf/plexupdate/master/extras/installer.sh)" exit fi } diff --git a/ct/pocketid.sh b/ct/pocketid.sh index d4d20b6e5..11a106b0a 100755 --- a/ct/pocketid.sh +++ b/ct/pocketid.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2025 community-scripts ORG # Author: Snarkenfaugister # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -45,12 +45,12 @@ function update_script() { cp /opt/pocket-id/backend/.env /opt/backend.env cp /opt/pocket-id/frontend/.env /opt/frontend.env rm -r /opt/pocket-id - wget -q "https://github.com/pocket-id/pocket-id/archive/refs/tags/v${RELEASE}.zip" + curl -fsSL "https://github.com/pocket-id/pocket-id/archive/refs/tags/v${RELEASE}.zip" -o $(basename "https://github.com/pocket-id/pocket-id/archive/refs/tags/v${RELEASE}.zip") unzip -q v${RELEASE}.zip mv pocket-id-${RELEASE} /opt/pocket-id mv /opt/data /opt/pocket-id/backend/data - mv /opt/backend.env /opt/pocket-id/backend/.env - mv /opt/frontend.env /opt/pocket-id/frontend/.env + mv /opt/backend.env /opt/pocket-id/backend/.env + mv /opt/frontend.env /opt/pocket-id/frontend/.env cd /opt/pocket-id/backend/cmd go build -o ../pocket-id-backend diff --git a/ct/podman-homeassistant.sh b/ct/podman-homeassistant.sh index 0354924c1..1f9669435 100644 --- a/ct/podman-homeassistant.sh +++ b/ct/podman-homeassistant.sh @@ -14,66 +14,69 @@ var_os="debian" var_version="12" var_unprivileged="1" -header_info "$APP" +header_info "$APP" variables color catch_errors function update_script() { -header_info -check_container_storage -check_container_resources - if [[ ! -f /etc/systemd/system/homeassistant.service ]]; then msg_error "No ${APP} Installation Found!"; exit; fi + header_info + check_container_storage + check_container_resources + if [[ ! -f /etc/systemd/system/homeassistant.service ]]; then + msg_error "No ${APP} Installation Found!" + exit + fi UPD=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "UPDATE" --radiolist --cancel-button Exit-Script "Spacebar = Select" 11 58 4 \ - "1" "Update system and containers" ON \ - "2" "Install HACS" OFF \ - "3" "Install FileBrowser" OFF \ - "4" "Remove ALL Unused Images" OFF \ - 3>&1 1>&2 2>&3) + "1" "Update system and containers" ON \ + "2" "Install HACS" OFF \ + "3" "Install FileBrowser" OFF \ + "4" "Remove ALL Unused Images" OFF \ + 3>&1 1>&2 2>&3) -if [ "$UPD" == "1" ]; then - msg_info "Updating ${APP} LXC" - $STD apt-get update - $STD apt-get -y upgrade - msg_ok "Updated Successfully" + if [ "$UPD" == "1" ]; then + msg_info "Updating ${APP} LXC" + $STD apt-get update + $STD apt-get -y upgrade + msg_ok "Updated Successfully" - msg_info "Updating All Containers\n" - CONTAINER_LIST="${1:-$(podman ps -q)}" - for container in ${CONTAINER_LIST}; do - CONTAINER_IMAGE="$(podman inspect --format "{{.Config.Image}}" --type container ${container})" - RUNNING_IMAGE="$(podman inspect --format "{{.Image}}" --type container "${container}")" - podman pull "${CONTAINER_IMAGE}" - LATEST_IMAGE="$(podman inspect --format "{{.Id}}" --type image "${CONTAINER_IMAGE}")" - if [[ "${RUNNING_IMAGE}" != "${LATEST_IMAGE}" ]]; then - echo "Updating ${container} image ${CONTAINER_IMAGE}" - systemctl restart homeassistant - fi - done - msg_ok "All containers updated." - exit -fi -if [ "$UPD" == "2" ]; then - msg_info "Installing Home Assistant Community Store (HACS)" - $STD apt update - $STD apt install unzip - cd /var/lib/containers/storage/volumes/hass_config/_data - $STD bash <(curl -fsSL https://get.hacs.xyz) - msg_ok "Installed Home Assistant Community Store (HACS)" - echo -e "\n Reboot Home Assistant and clear browser cache then Add HACS integration.\n" - exit -fi -if [ "$UPD" == "3" ]; then - IP=$(hostname -I | awk '{print $1}') - msg_info "Installing FileBrowser" - $STD curl -fsSL https://raw.githubusercontent.com/filebrowser/get/master/get.sh | bash - $STD filebrowser config init -a '0.0.0.0' - $STD filebrowser config set -a '0.0.0.0' - $STD filebrowser users add admin helper-scripts.com --perm.admin - msg_ok "Installed FileBrowser" + msg_info "Updating All Containers\n" + CONTAINER_LIST="${1:-$(podman ps -q)}" + for container in ${CONTAINER_LIST}; do + CONTAINER_IMAGE="$(podman inspect --format "{{.Config.Image}}" --type container ${container})" + RUNNING_IMAGE="$(podman inspect --format "{{.Image}}" --type container "${container}")" + podman pull "${CONTAINER_IMAGE}" + LATEST_IMAGE="$(podman inspect --format "{{.Id}}" --type image "${CONTAINER_IMAGE}")" + if [[ "${RUNNING_IMAGE}" != "${LATEST_IMAGE}" ]]; then + echo "Updating ${container} image ${CONTAINER_IMAGE}" + systemctl restart homeassistant + fi + done + msg_ok "All containers updated." + exit + fi + if [ "$UPD" == "2" ]; then + msg_info "Installing Home Assistant Community Store (HACS)" + $STD apt update + $STD apt install unzip + cd /var/lib/containers/storage/volumes/hass_config/_data + $STD bash <(curl -fsSL https://get.hacs.xyz) + msg_ok "Installed Home Assistant Community Store (HACS)" + echo -e "\n Reboot Home Assistant and clear browser cache then Add HACS integration.\n" + exit + fi + if [ "$UPD" == "3" ]; then + IP=$(hostname -I | awk '{print $1}') + msg_info "Installing FileBrowser" + $STD curl -fsSL https://raw.githubusercontent.com/filebrowser/get/master/get.sh | bash + $STD filebrowser config init -a '0.0.0.0' + $STD filebrowser config set -a '0.0.0.0' + $STD filebrowser users add admin helper-scripts.com --perm.admin + msg_ok "Installed FileBrowser" - msg_info "Creating Service" - service_path="/etc/systemd/system/filebrowser.service" - echo "[Unit] + msg_info "Creating Service" + service_path="/etc/systemd/system/filebrowser.service" + echo "[Unit] Description=Filebrowser After=network-online.target [Service] @@ -83,20 +86,20 @@ if [ "$UPD" == "3" ]; then [Install] WantedBy=default.target" >$service_path - $STD systemctl enable --now filebrowser.service + $STD systemctl enable --now filebrowser msg_ok "Created Service" msg_ok "Completed Successfully!\n" echo -e "FileBrowser should be reachable by going to the following URL. ${BL}http://$IP:8080${CL} admin|helper-scripts.com\n" - exit -fi -if [ "$UPD" == "4" ]; then - msg_info "Removing ALL Unused Images" - podman image prune -a -f - msg_ok "Removed ALL Unused Images" - exit -fi + exit + fi + if [ "$UPD" == "4" ]; then + msg_info "Removing ALL Unused Images" + podman image prune -a -f + msg_ok "Removed ALL Unused Images" + exit + fi } @@ -107,4 +110,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}:8123${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8123${CL}" diff --git a/ct/podman.sh b/ct/podman.sh index 1f98b13fd..fef876ed9 100644 --- a/ct/podman.sh +++ b/ct/podman.sh @@ -39,4 +39,4 @@ build_container description msg_ok "Completed Successfully!\n" -echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" \ No newline at end of file +echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" diff --git a/ct/postgresql.sh b/ct/postgresql.sh index cc9c63541..2849992ec 100644 --- a/ct/postgresql.sh +++ b/ct/postgresql.sh @@ -41,4 +41,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 IP:${CL}" -echo -e "${TAB}${GATEWAY}${BGN}${IP}:5432${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}${IP}:5432${CL}" diff --git a/ct/privatebin.sh b/ct/privatebin.sh index d44d99897..81eefab40 100644 --- a/ct/privatebin.sh +++ b/ct/privatebin.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2025 community-scripts ORG # Author: Nícolas Pastorello (opastorello) # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -27,12 +27,12 @@ function update_script() { msg_error "No ${APP} Installation Found!" exit fi - RELEASE=$(curl -s https://api.github.com/repos/PrivateBin/PrivateBin/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') + RELEASE=$(curl -fsSL https://api.github.com/repos/PrivateBin/PrivateBin/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 v${RELEASE}" echo "${RELEASE}" >/opt/${APP}_version.txt cp -f /opt/privatebin/cfg/conf.php /tmp/privatebin_conf.bak - wget -q "https://github.com/PrivateBin/PrivateBin/archive/refs/tags/${RELEASE}.zip" + curl -fsSL "https://github.com/PrivateBin/PrivateBin/archive/refs/tags/${RELEASE}.zip" -o $(basename "https://github.com/PrivateBin/PrivateBin/archive/refs/tags/${RELEASE}.zip") unzip -q ${RELEASE}.zip rm -rf /opt/privatebin/* mv PrivateBin-${RELEASE}/* /opt/privatebin/ diff --git a/ct/projectsend.sh b/ct/projectsend.sh index bf8e3d91b..b40465d43 100644 --- a/ct/projectsend.sh +++ b/ct/projectsend.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2025 community-scripts ORG # Author: bvdberg01 # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -27,7 +27,7 @@ function update_script() { msg_error "No ${APP} Installation Found!" exit fi - RELEASE=$(curl -s https://api.github.com/repos/projectsend/projectsend/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') + RELEASE=$(curl -fsSL https://api.github.com/repos/projectsend/projectsend/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" systemctl stop apache2 @@ -35,7 +35,7 @@ function update_script() { msg_info "Updating ${APP} to v${RELEASE}" cd /opt - wget -q "https://github.com/projectsend/projectsend/releases/download/r${RELEASE}/projectsend-r${RELEASE}.zip" + curl -fsSL "https://github.com/projectsend/projectsend/releases/download/r${RELEASE}/projectsend-r${RELEASE}.zip" -o $(basename "https://github.com/projectsend/projectsend/releases/download/r${RELEASE}/projectsend-r${RELEASE}.zip") unzip -o -q "projectsend-r${RELEASE}.zip" -d projectsend chown -R www-data:www-data /opt/projectsend chmod -R 775 /opt/projectsend diff --git a/ct/prometheus-alertmanager.sh b/ct/prometheus-alertmanager.sh old mode 100755 new mode 100644 index c6c7009b3..e37ceef19 --- a/ct/prometheus-alertmanager.sh +++ b/ct/prometheus-alertmanager.sh @@ -27,7 +27,7 @@ function update_script() { msg_error "No ${APP} Installation Found!" exit fi - RELEASE=$(curl -s https://api.github.com/repos/prometheus/alertmanager/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') + RELEASE=$(curl -fsSL https://api.github.com/repos/prometheus/alertmanager/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 ${APP}" systemctl stop prometheus-alertmanager @@ -35,7 +35,7 @@ function update_script() { msg_info "Updating ${APP} to v${RELEASE}" cd /opt - wget -q https://github.com/prometheus/alertmanager/releases/download/v${RELEASE}/alertmanager-${RELEASE}.linux-amd64.tar.gz + curl -fsSL "https://github.com/prometheus/alertmanager/releases/download/v${RELEASE}/alertmanager-${RELEASE}.linux-amd64.tar.gz" -o $(basename "https://github.com/prometheus/alertmanager/releases/download/v${RELEASE}/alertmanager-${RELEASE}.linux-amd64.tar.gz") tar -xf alertmanager-${RELEASE}.linux-amd64.tar.gz cp -rf alertmanager-${RELEASE}.linux-amd64/alertmanager alertmanager-${RELEASE}.linux-amd64/amtool /usr/local/bin/ rm -rf alertmanager-${RELEASE}.linux-amd64 alertmanager-${RELEASE}.linux-amd64.tar.gz @@ -59,4 +59,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}:9093${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:9093${CL}" diff --git a/ct/prometheus-paperless-ngx-exporter.sh b/ct/prometheus-paperless-ngx-exporter.sh index e01a79e70..96b4dc0c7 100755 --- a/ct/prometheus-paperless-ngx-exporter.sh +++ b/ct/prometheus-paperless-ngx-exporter.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2025 community-scripts ORG # Author: Andy Grunwald (andygrunwald) # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -27,7 +27,7 @@ function update_script() { msg_error "No ${APP} Installation Found!" exit fi - RELEASE=$(curl -s https://api.github.com/repos/hansmi/prometheus-paperless-exporter/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') + RELEASE=$(curl -fsSL https://api.github.com/repos/hansmi/prometheus-paperless-exporter/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 ${APP}" systemctl stop prometheus-paperless-ngx-exporter @@ -35,7 +35,7 @@ function update_script() { msg_info "Updating ${APP} to v${RELEASE}" cd /opt - wget -q https://github.com/hansmi/prometheus-paperless-exporter/releases/download/v${RELEASE}/prometheus-paperless-exporter_${RELEASE}_linux_amd64.tar.gz + curl -fsSL "https://github.com/hansmi/prometheus-paperless-exporter/releases/download/v${RELEASE}/prometheus-paperless-exporter_${RELEASE}_linux_amd64.tar.gz" -o $(basename "https://github.com/hansmi/prometheus-paperless-exporter/releases/download/v${RELEASE}/prometheus-paperless-exporter_${RELEASE}_linux_amd64.tar.gz") tar -xf prometheus-paperless-exporter_${RELEASE}_linux_amd64.tar.gz cp -rf prometheus-paperless-exporter_${RELEASE}_linux_amd64/prometheus-paperless-exporter /usr/local/bin/ rm -rf prometheus-paperless-exporter_${RELEASE}_linux_amd64/ prometheus-paperless-exporter_${RELEASE}_linux_amd64.tar.gz @@ -59,4 +59,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}:8081/metrics${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8081/metrics${CL}" diff --git a/ct/prometheus-pve-exporter.sh b/ct/prometheus-pve-exporter.sh index 78b034aa3..c21a08aef 100644 --- a/ct/prometheus-pve-exporter.sh +++ b/ct/prometheus-pve-exporter.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2025 community-scripts ORG # Author: Andy Grunwald (andygrunwald) # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE diff --git a/ct/prometheus.sh b/ct/prometheus.sh index bee687517..4290a1140 100644 --- a/ct/prometheus.sh +++ b/ct/prometheus.sh @@ -27,7 +27,7 @@ function update_script() { msg_error "No ${APP} Installation Found!" exit fi - RELEASE=$(curl -s https://api.github.com/repos/prometheus/prometheus/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') + RELEASE=$(curl -fsSL https://api.github.com/repos/prometheus/prometheus/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 ${APP}" systemctl stop prometheus @@ -35,7 +35,7 @@ function update_script() { msg_info "Updating ${APP} to v${RELEASE}" cd /opt - wget -q https://github.com/prometheus/prometheus/releases/download/v${RELEASE}/prometheus-${RELEASE}.linux-amd64.tar.gz + curl -fsSL "https://github.com/prometheus/prometheus/releases/download/v${RELEASE}/prometheus-${RELEASE}.linux-amd64.tar.gz" -o $(basename "https://github.com/prometheus/prometheus/releases/download/v${RELEASE}/prometheus-${RELEASE}.linux-amd64.tar.gz") tar -xf prometheus-${RELEASE}.linux-amd64.tar.gz cp -rf prometheus-${RELEASE}.linux-amd64/prometheus prometheus-${RELEASE}.linux-amd64/promtool /usr/local/bin/ rm -rf prometheus-${RELEASE}.linux-amd64 prometheus-${RELEASE}.linux-amd64.tar.gz @@ -59,4 +59,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}:9090${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:9090${CL}" diff --git a/ct/prowlarr.sh b/ct/prowlarr.sh index 85d371574..6eb941cb8 100644 --- a/ct/prowlarr.sh +++ b/ct/prowlarr.sh @@ -20,15 +20,29 @@ color catch_errors function update_script() { - header_info - check_container_storage - check_container_resources - if [[ ! -d /var/lib/prowlarr/ ]]; then - msg_error "No ${APP} Installation Found!" - exit - fi - msg_error "Currently we don't provide an update function for this ${APP}." + header_info + check_container_storage + check_container_resources + + if [[ ! -d /var/lib/prowlarr/ ]]; then + msg_error "No ${APP} Installation Found!" exit + fi + + msg_info "Updating $APP LXC" + temp_file="$(mktemp)" + rm -rf /opt/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" + mv Prowlarr /opt + chmod 775 /opt/Prowlarr + msg_ok "Updated $APP LXC" + + msg_info "Cleaning up" + rm -f "$temp_file" + msg_ok "Cleaned up" + exit } start @@ -38,4 +52,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}:9696${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:9696${CL}" diff --git a/ct/proxmox-backup-server.sh b/ct/proxmox-backup-server.sh index f81185acc..486f53fd0 100644 --- a/ct/proxmox-backup-server.sh +++ b/ct/proxmox-backup-server.sh @@ -23,11 +23,14 @@ function update_script() { header_info check_container_storage check_container_resources - if [[ ! -e /usr/sbin/proxmox-backup-manager ]]; then msg_error "No ${APP} Installation Found!"; exit; fi - msg_info "Updating $APP LXC" - $STD apt-get update - $STD apt-get -y upgrade - msg_ok "Updated $APP LXC" + if [[ ! -e /usr/sbin/proxmox-backup-manager ]]; then + msg_error "No ${APP} Installation Found!" + exit + fi + msg_info "Updating $APP LXC" + $STD apt-get update + $STD apt-get -y upgrade + msg_ok "Updated $APP LXC" exit } diff --git a/ct/proxmox-datacenter-manager.sh b/ct/proxmox-datacenter-manager.sh index 4ae89d055..c4b3792a4 100644 --- a/ct/proxmox-datacenter-manager.sh +++ b/ct/proxmox-datacenter-manager.sh @@ -23,11 +23,14 @@ function update_script() { header_info check_container_storage check_container_resources - if [[ ! -e /usr/sbin/proxmox-datacenter-manager-admin ]]; then msg_error "No ${APP} Installation Found!"; exit; fi - msg_info "Updating $APP LXC" - $STD apt-get update - $STD apt-get -y upgrade - msg_ok "Updated $APP LXC" + if [[ ! -e /usr/sbin/proxmox-datacenter-manager-admin ]]; then + msg_error "No ${APP} Installation Found!" + exit + fi + msg_info "Updating $APP LXC" + $STD apt-get update + $STD apt-get -y upgrade + msg_ok "Updated $APP LXC" exit } diff --git a/ct/proxmox-mail-gateway.sh b/ct/proxmox-mail-gateway.sh index 30b1656a3..07f66ba4a 100644 --- a/ct/proxmox-mail-gateway.sh +++ b/ct/proxmox-mail-gateway.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2025 community-scripts ORG # Author: thost96 (thost96) # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -23,7 +23,10 @@ function update_script() { header_info check_container_storage check_container_resources - if [[ ! -e /usr/bin/pmgproxy ]]; then msg_error "No ${APP} Installation Found!"; exit; fi + if [[ ! -e /usr/bin/pmgproxy ]]; then + msg_error "No ${APP} Installation Found!" + exit + fi msg_info "Updating ${APP}" $STD apt-get update $STD apt-get -y upgrade @@ -38,4 +41,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}:8006/${CL}" +echo -e "${TAB}${GATEWAY}${BGN}https://${IP}:8006/${CL}" \ No newline at end of file diff --git a/ct/ps5-mqtt.sh b/ct/ps5-mqtt.sh index c963e5b98..9a1006740 100644 --- a/ct/ps5-mqtt.sh +++ b/ct/ps5-mqtt.sh @@ -29,7 +29,7 @@ function update_script() { exit fi - RELEASE=$(curl -s https://api.github.com/repos/FunkeyFlo/ps5-mqtt/releases/latest | jq -r '.tag_name') + RELEASE=$(curl -fsSL https://api.github.com/repos/FunkeyFlo/ps5-mqtt/releases/latest | jq -r '.tag_name') if [[ "${RELEASE}" != "$(cat /opt/ps5-mqtt_version.txt)" ]]; then msg_info "Stopping service" @@ -37,12 +37,12 @@ function update_script() { msg_ok "Stopped service" msg_info "Updating PS5-MQTT to ${RELEASE}" - wget -P /tmp -q https://github.com/FunkeyFlo/ps5-mqtt/archive/refs/tags/${RELEASE}.tar.gz + curl -fsSL https://github.com/FunkeyFlo/ps5-mqtt/archive/refs/tags/${RELEASE}.tar.gz -o /tmp/${RELEASE}.tar.gz rm -rf /opt/ps5-mqtt tar zxf /tmp/${RELEASE}.tar.gz -C /opt mv /opt/ps5-mqtt-* /opt/ps5-mqtt rm /tmp/${RELEASE}.tar.gz - echo ${RELEASE} > /opt/ps5-mqtt_version.txt + echo ${RELEASE} >/opt/ps5-mqtt_version.txt msg_ok "Updated PS5-MQTT" msg_info "Building new PS5-MQTT version" @@ -55,7 +55,7 @@ function update_script() { systemctl start ps5-mqtt msg_ok "Started service" else - msg_ok "No update required. ${APP} is already at ${RELEASE}" + msg_ok "No update required. ${APP} is already at ${RELEASE}" fi exit diff --git a/ct/pterodactyl-panel.sh b/ct/pterodactyl-panel.sh index b637f083d..322d060b4 100644 --- a/ct/pterodactyl-panel.sh +++ b/ct/pterodactyl-panel.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2025 community-scripts ORG # Author: bvdberg01 # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -27,17 +27,34 @@ function update_script() { msg_error "No ${APP} Installation Found!" exit fi - RELEASE=$(curl -s https://api.github.com/repos/pterodactyl/panel/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') + 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" + $STD curl -fsSLo /tmp/debsuryorg-archive-keyring.deb https://packages.sury.org/debsuryorg-archive-keyring.deb + $STD dpkg -i /tmp/debsuryorg-archive-keyring.deb + $STD sh -c 'echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list' + $STD apt-get update + $STD apt-get remove -y php"${CURRENT_PHP//./}"* + $STD apt-get install -y \ + php8.4 \ + php8.4-{gd,mysql,mbstring,bcmath,xml,curl,zip,intl,fpm} \ + libapache2-mod-php8.4 + + msg_ok "Migrated PHP $CURRENT_PHP to 8.4" + fi + + 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 + cd /opt/pterodactyl-panel || exit $STD php artisan down msg_ok "Stopped Service" msg_info "Updating ${APP} to v${RELEASE}" cp -r /opt/pterodactyl-panel/.env /opt/ rm -rf * .* - wget -q "https://github.com/pterodactyl/panel/releases/download/v${RELEASE}/panel.tar.gz" + 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" mv /opt/.env /opt/pterodactyl-panel/ $STD composer install --no-dev --optimize-autoloader --no-interaction diff --git a/ct/pterodactyl-wings.sh b/ct/pterodactyl-wings.sh index 509d3bdb4..72142827e 100644 --- a/ct/pterodactyl-wings.sh +++ b/ct/pterodactyl-wings.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2025 community-scripts ORG # Author: bvdberg01 # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -27,7 +27,7 @@ function update_script() { msg_error "No ${APP} Installation Found!" exit fi - RELEASE=$(curl -s https://api.github.com/repos/pterodactyl/wings/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') + RELEASE=$(curl -fsSL https://api.github.com/repos/pterodactyl/wings/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" systemctl stop wings @@ -35,7 +35,7 @@ function update_script() { msg_info "Updating ${APP} to v${RELEASE}" rm /usr/local/bin/wings - wget -q -O /usr/local/bin/wings "https://github.com/pterodactyl/wings/releases/download/v${RELEASE}/wings_linux_amd64" + curl -fsSL "https://github.com/pterodactyl/wings/releases/download/v${RELEASE}/wings_linux_amd64" -o "/usr/local/bin/wings" chmod u+x /usr/local/bin/wings echo "${RELEASE}" >/opt/${APP}_version.txt msg_ok "Updated $APP to v${RELEASE}" diff --git a/ct/qbittorrent.sh b/ct/qbittorrent.sh index 4777db96e..680cdfeea 100644 --- a/ct/qbittorrent.sh +++ b/ct/qbittorrent.sh @@ -36,7 +36,7 @@ function update_script() { sed -i 's@ExecStart=/usr/bin/qbittorrent-nox@ExecStart=/opt/qbittorrent/qbittorrent-nox@g' /etc/systemd/system/qbittorrent-nox.service systemctl daemon-reload fi - FULLRELEASE=$(curl -s https://api.github.com/repos/userdocs/qbittorrent-nox-static/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') + FULLRELEASE=$(curl -fsSL https://api.github.com/repos/userdocs/qbittorrent-nox-static/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') RELEASE=$(echo $FULLRELEASE | cut -c 9-13) if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then msg_info "Stopping Service" diff --git a/ct/rabbitmq.sh b/ct/rabbitmq.sh index a9fa9d71f..ab8df3eff 100644 --- a/ct/rabbitmq.sh +++ b/ct/rabbitmq.sh @@ -49,4 +49,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}:15672${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:15672${CL}" diff --git a/ct/radarr.sh b/ct/radarr.sh index b76b21e9d..4b867b9e8 100644 --- a/ct/radarr.sh +++ b/ct/radarr.sh @@ -20,15 +20,29 @@ color catch_errors function update_script() { - header_info - check_container_storage - check_container_resources - if [[ ! -d /var/lib/radarr/ ]]; then - msg_error "No ${APP} Installation Found!" - exit - fi - msg_error "Currently we don't provide an update function for this ${APP}." + header_info + check_container_storage + check_container_resources + + if [[ ! -d /var/lib/radarr/ ]]; then + msg_error "No ${APP} Installation Found!" exit + fi + + msg_info "Updating $APP LXC" + temp_file="$(mktemp)" + rm -rf /opt/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" + mv Radarr /opt + chmod 775 /opt/Radarr + msg_ok "Updated $APP LXC" + + msg_info "Cleaning up" + rm -rf "$temp_file" + msg_ok "Cleaned up" + exit } start @@ -38,4 +52,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}:7878${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:7878${CL}" diff --git a/ct/radicale.sh b/ct/radicale.sh index 5589abbf9..d34b8dd8c 100644 --- a/ct/radicale.sh +++ b/ct/radicale.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2025 community-scripts ORG # Author: tremor021 # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE diff --git a/ct/rdtclient.sh b/ct/rdtclient.sh old mode 100755 new mode 100644 index d7806ae2f..3b96c6272 --- a/ct/rdtclient.sh +++ b/ct/rdtclient.sh @@ -38,7 +38,7 @@ function update_script() { fi mkdir -p rdtc-backup cp -R /opt/rdtc/appsettings.json rdtc-backup/ - wget -q https://github.com/rogerfar/rdt-client/releases/latest/download/RealDebridClient.zip + curl -fsSL "https://github.com/rogerfar/rdt-client/releases/latest/download/RealDebridClient.zip" -o $(basename "https://github.com/rogerfar/rdt-client/releases/latest/download/RealDebridClient.zip") unzip -oqq RealDebridClient.zip -d /opt/rdtc cp -R rdtc-backup/appsettings.json /opt/rdtc/ msg_ok "Updated ${APP}" @@ -61,4 +61,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}:6500${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:6500${CL}" diff --git a/ct/readarr.sh b/ct/readarr.sh index 4225ac9d4..806185b0c 100644 --- a/ct/readarr.sh +++ b/ct/readarr.sh @@ -41,4 +41,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}:8787${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8787${CL}" diff --git a/ct/readeck.sh b/ct/readeck.sh index b2562cf97..6f1882df8 100644 --- a/ct/readeck.sh +++ b/ct/readeck.sh @@ -28,11 +28,11 @@ function update_script() { exit fi msg_info "Updating ${APP}" - LATEST=$(curl -s https://codeberg.org/readeck/readeck/releases/ | grep -oP '(?<=Version )\d+\.\d+\.\d+' | head -1) + LATEST=$(curl -fsSL https://codeberg.org/readeck/readeck/releases/ | grep -oP '(?<=Version )\d+\.\d+\.\d+' | head -1) systemctl stop readeck.service rm -rf /opt/readeck/readeck cd /opt/readeck - wget -q -O readeck https://codeberg.org/readeck/readeck/releases/download/${LATEST}/readeck-${LATEST}-linux-amd64 +curl -fsSL "https://codeberg.org/readeck/readeck/releases/download/${LATEST}/readeck-${LATEST}-linux-amd64" -o "readeck" chmod a+x readeck systemctl start readeck.service msg_ok "Updated ${APP}" @@ -46,4 +46,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}:8000${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8000${CL}" diff --git a/ct/recyclarr.sh b/ct/recyclarr.sh index 0b5f8cc92..64d96b2a4 100644 --- a/ct/recyclarr.sh +++ b/ct/recyclarr.sh @@ -29,7 +29,7 @@ function update_script() { fi msg_info "Updating ${APP}" - wget -q $(curl -s https://api.github.com/repos/recyclarr/recyclarr/releases/latest | grep download | grep linux-x64 | cut -d\" -f4) + curl -fsSL "$(curl -fsSL https://api.github.com/repos/recyclarr/recyclarr/releases/latest | grep download | grep linux-x64 | cut -d\" -f4)" -o $(basename "$(curl -fsSL https://api.github.com/repos/recyclarr/recyclarr/releases/latest | grep download | grep linux-x64 | cut -d\" -f4)") tar -C /usr/local/bin -xJf recyclarr*.tar.xz rm -rf recyclarr*.tar.xz msg_ok "Updated ${APP}" @@ -45,4 +45,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 IP:${CL}" -echo -e "${TAB}${GATEWAY}${BGN}${IP}${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}${IP}${CL}" diff --git a/ct/redis.sh b/ct/redis.sh index 3fe232b4e..6aa2ca171 100644 --- a/ct/redis.sh +++ b/ct/redis.sh @@ -38,4 +38,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 IP:${CL}" -echo -e "${TAB}${GATEWAY}${BGN}${IP}:6379${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}${IP}:6379${CL}" diff --git a/ct/revealjs.sh b/ct/revealjs.sh index 5870d581c..ac7247255 100644 --- a/ct/revealjs.sh +++ b/ct/revealjs.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2025 community-scripts ORG # Author: Slaviša Arežina (tremor021) # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -28,7 +28,7 @@ function update_script() { msg_error "No ${APP} Installation Found!" exit fi - RELEASE=$(curl -s https://api.github.com/repos/hakimel/reveal.js/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') + RELEASE=$(curl -fsSL https://api.github.com/repos/hakimel/reveal.js/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then msg_info "Stopping $APP" systemctl stop revealjs @@ -36,10 +36,10 @@ function update_script() { msg_info "Updating $APP to ${RELEASE}" temp_file=$(mktemp) - wget -q "https://github.com/hakimel/reveal.js/archive/refs/tags/${RELEASE}.tar.gz" -O $temp_file +curl -fsSL "https://github.com/hakimel/reveal.js/archive/refs/tags/${RELEASE}.tar.gz" -o "$temp_file" tar zxf $temp_file rm -rf /opt/revealjs/node_modules/* - cp /opt/revealjs/index.html /opt + cp /opt/revealjs/index.html /opt cp -rf reveal.js-${RELEASE}/* /opt/revealjs cd /opt/revealjs $STD npm install @@ -71,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}:8000${CL}" +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8000${CL}" \ No newline at end of file diff --git a/ct/rtsptoweb.sh b/ct/rtsptoweb.sh index 8d2a3fdec..ee21ca570 100644 --- a/ct/rtsptoweb.sh +++ b/ct/rtsptoweb.sh @@ -41,4 +41,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}:8083${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8083${CL}" diff --git a/ct/runtipi.sh b/ct/runtipi.sh index d25f4dd4f..e817e48f0 100644 --- a/ct/runtipi.sh +++ b/ct/runtipi.sh @@ -38,4 +38,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}${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}" diff --git a/ct/rustdeskserver.sh b/ct/rustdeskserver.sh index 64eb375fb..9b0f818bb 100644 --- a/ct/rustdeskserver.sh +++ b/ct/rustdeskserver.sh @@ -28,7 +28,7 @@ function update_script() { msg_error "No ${APP} Installation Found!" exit fi - RELEASE=$(curl -s https://api.github.com/repos/rustdesk/rustdesk-server/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') + RELEASE=$(curl -fsSL https://api.github.com/repos/rustdesk/rustdesk-server/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') if [[ "${RELEASE}" != "$(cat /opt/rustdesk_version.txt)" ]] || [[ ! -f /opt/rustdesk_version.txt ]]; then msg_info "Stopping $APP" systemctl stop rustdesk-hbbr @@ -37,9 +37,12 @@ function update_script() { msg_info "Updating $APP to v${RELEASE}" TEMPDIR=$(mktemp -d) - wget -q "https://github.com/rustdesk/rustdesk-server/releases/download/${RELEASE}/rustdesk-server-hbbr_${RELEASE}_arm64.deb" -P $TEMPDIR - wget -q "https://github.com/rustdesk/rustdesk-server/releases/download/${RELEASE}/rustdesk-server-hbbs_${RELEASE}_arm64.deb" -P $TEMPDIR - wget -q "https://github.com/rustdesk/rustdesk-server/releases/download/${RELEASE}/rustdesk-server-utils_${RELEASE}_arm64.deb" -P $TEMPDIR + curl -fsSL "https://github.com/rustdesk/rustdesk-server/releases/download/${RELEASE}/rustdesk-server-hbbr_${RELEASE}_arm64.deb" \ + -o "${TEMPDIR}/rustdesk-server-hbbr_${RELEASE}_arm64.deb" + curl -fsSL "https://github.com/rustdesk/rustdesk-server/releases/download/${RELEASE}/rustdesk-server-hbbs_${RELEASE}_arm64.deb" \ + -o "${TEMPDIR}/rustdesk-server-hbbs_${RELEASE}_arm64.deb" + curl -fsSL "https://github.com/rustdesk/rustdesk-server/releases/download/${RELEASE}/rustdesk-server-utils_${RELEASE}_arm64.deb" \ + -o "${TEMPDIR}/rustdesk-server-utils_${RELEASE}_arm64.deb" $STD dpkg -i $TEMPDIR/*.deb msg_ok "Updated $APP to v${RELEASE}" diff --git a/ct/sabnzbd.sh b/ct/sabnzbd.sh index ff884bbaa..1650a4664 100644 --- a/ct/sabnzbd.sh +++ b/ct/sabnzbd.sh @@ -27,7 +27,7 @@ function update_script() { msg_error "No ${APP} Installation Found!" exit fi - RELEASE=$(curl -s https://api.github.com/repos/sabnzbd/sabnzbd/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') + 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 diff --git a/ct/seafile.sh b/ct/seafile.sh index d6d13a737..e3faf1c29 100644 --- a/ct/seafile.sh +++ b/ct/seafile.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2025 tteck # Author: dave-yap (dave-yap) # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE diff --git a/ct/searxng.sh b/ct/searxng.sh index 769aa3497..4596f67d8 100644 --- a/ct/searxng.sh +++ b/ct/searxng.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2025 community-scripts ORG # Author: MickLesk (Canbiz) # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -27,7 +27,7 @@ function update_script() { msg_error "No ${APP} Installation Found!" exit fi - if cd /usr/local/searxng/searxng-src && git pull | grep -q 'Already up to date'; then + if cd /usr/local/searxng/searxng-src && git pull | grep -q 'Already up to date'; then msg_ok "There is currently no update available." fi exit @@ -39,4 +39,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}:8888${CL}" +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8888${CL}" \ No newline at end of file diff --git a/ct/seelf.sh b/ct/seelf.sh index 40d0a47a0..a27f57e9d 100644 --- a/ct/seelf.sh +++ b/ct/seelf.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2025 community-scripts ORG # Author: tremor021 # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -29,7 +29,7 @@ function update_script() { exit fi - RELEASE=$(curl -s https://api.github.com/repos/YuukanOO/seelf/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') + RELEASE=$(curl -fsSL https://api.github.com/repos/YuukanOO/seelf/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then msg_info "Updating $APP" @@ -40,7 +40,7 @@ function update_script() { msg_info "Updating $APP to v${RELEASE}. Patience" export PATH=$PATH:/usr/local/go/bin source ~/.bashrc - wget -q "https://github.com/YuukanOO/seelf/archive/refs/tags/v${RELEASE}.tar.gz" + 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 cp -r seelf-${RELEASE}/ /opt/seelf cd /opt/seelf @@ -72,4 +72,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}:8080${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8080${CL}" diff --git a/ct/semaphore.sh b/ct/semaphore.sh index 1524f4d82..67fcbb4ff 100644 --- a/ct/semaphore.sh +++ b/ct/semaphore.sh @@ -28,7 +28,7 @@ function update_script() { msg_error "No ${APP} Installation Found!" exit fi - RELEASE=$(curl -s https://api.github.com/repos/semaphoreui/semaphore/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') + RELEASE=$(curl -fsSL https://api.github.com/repos/semaphoreui/semaphore/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" systemctl stop semaphore @@ -36,7 +36,7 @@ function update_script() { msg_info "Updating ${APP} to v${RELEASE}" cd /opt - wget -q https://github.com/semaphoreui/semaphore/releases/download/v${RELEASE}/semaphore_${RELEASE}_linux_amd64.deb + curl -fsSL "https://github.com/semaphoreui/semaphore/releases/download/v${RELEASE}/semaphore_${RELEASE}_linux_amd64.deb" -o $(basename "https://github.com/semaphoreui/semaphore/releases/download/v${RELEASE}/semaphore_${RELEASE}_linux_amd64.deb") $STD dpkg -i semaphore_${RELEASE}_linux_amd64.deb echo "${RELEASE}" >"/opt/${APP}_version.txt" msg_ok "Updated ${APP} to v${RELEASE}" @@ -62,4 +62,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/ct/sftpgo.sh b/ct/sftpgo.sh index 6dc2ccc13..41c77d57a 100644 --- a/ct/sftpgo.sh +++ b/ct/sftpgo.sh @@ -41,4 +41,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}:8080/web/admin${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8080/web/admin${CL}" diff --git a/ct/shinobi.sh b/ct/shinobi.sh index 65edf345a..c5d44f257 100644 --- a/ct/shinobi.sh +++ b/ct/shinobi.sh @@ -44,4 +44,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}:8080/super${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8080/super${CL}" diff --git a/ct/silverbullet.sh b/ct/silverbullet.sh index 5d11d0ad5..04733e75b 100644 --- a/ct/silverbullet.sh +++ b/ct/silverbullet.sh @@ -22,15 +22,18 @@ function update_script() { header_info check_container_storage check_container_resources - if [[ ! -d /opt/silverbullet ]]; then msg_error "No ${APP} Installation Found!"; exit; fi - RELEASE=$(curl -s https://api.github.com/repos/silverbulletmd/silverbullet/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') + if [[ ! -d /opt/silverbullet ]]; then + msg_error "No ${APP} Installation Found!" + exit + fi + RELEASE=$(curl -fsSL https://api.github.com/repos/silverbulletmd/silverbullet/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') if [[ ! -f "/opt/${APP}_version.txt" || "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then msg_info "Stopping ${APP}" systemctl stop silverbullet msg_ok "Stopped ${APP}" msg_info "Updating ${APP} to v${RELEASE}" - wget -q https://github.com/silverbulletmd/silverbullet/releases/download/${RELEASE}/silverbullet-server-linux-x86_64.zip + curl -fsSL "https://github.com/silverbulletmd/silverbullet/releases/download/${RELEASE}/silverbullet-server-linux-x86_64.zip" -o $(basename "https://github.com/silverbulletmd/silverbullet/releases/download/${RELEASE}/silverbullet-server-linux-x86_64.zip") unzip -q silverbullet-server-linux-x86_64.zip mv silverbullet /opt/silverbullet/bin/ chmod +x /opt/silverbullet/bin/silverbullet diff --git a/ct/slskd.sh b/ct/slskd.sh new file mode 100644 index 000000000..5b1f322a4 --- /dev/null +++ b/ct/slskd.sh @@ -0,0 +1,80 @@ +#!/usr/bin/env bash +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +# Copyright (c) 2021-2025 community-scripts ORG +# Author: vhsdream +# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE +# Source: https://github.com/slskd/slskd, https://soularr.net + +APP="slskd" +var_tags="${var_tags:-arr;p2p}" +var_cpu="${var_cpu:-1}" +var_ram="${var_ram:-512}" +var_disk="${var_disk:-4}" +var_os="${var_os:-debian}" +var_version="${var_version:-12}" +var_unprivileged="${var_unprivileged:-1}" + +header_info "$APP" +variables +color +catch_errors + +function update_script() { + header_info + check_container_storage + check_container_resources + + if [[ ! -d /opt/slskd ]] || [[ ! -d /opt/soularr ]]; then + msg_error "No ${APP} Installation Found!" + exit + fi + + RELEASE=$(curl -s https://api.github.com/repos/slskd/slskd/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') + if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then + msg_info "Stopping $APP and Soularr" + systemctl stop slskd soularr.timer soularr.service + msg_ok "Stopped $APP and Soularr" + + msg_info "Updating $APP to v${RELEASE}" + tmp_file=$(mktemp) + curl -fsSL "https://github.com/slskd/slskd/releases/download/${RELEASE}/slskd-${RELEASE}-linux-x64.zip" -o $tmp_file + unzip -q -oj $tmp_file slskd -d /opt/${APP} + echo "${RELEASE}" >/opt/${APP}_version.txt + msg_ok "Updated $APP to v${RELEASE}" + + msg_info "Updating Soularr" + cp /opt/soularr/config.ini /opt/config.ini.bak + cp /opt/soularr/run.sh /opt/run.sh.bak + cd /tmp + rm -rf /opt/soularr + curl -fsSL https://github.com/mrusse/soularr/archive/refs/heads/main.zip + unzip -q main.zip + mv soularr-main /opt/soularr + cd /opt/soularr + $STD pip install -r requirements.txt + mv /opt/config.ini.bak /opt/soularr/config.ini + mv /opt/run.sh.bak /opt/soularr/run.sh + msg_ok "Soularr updated" + msg_info "Starting $APP and Soularr" + systemctl start slskd soularr.timer + msg_ok "Started $APP and Soularr" + + msg_info "Cleaning Up" + rm -rf $tmp_file + rm -rf /tmp/main.zip + msg_ok "Cleanup Completed" + + else + msg_ok "No update required. ${APP} is already at v${RELEASE}" + fi + exit +} + +start +build_container +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}:5030${CL}" diff --git a/ct/smokeping.sh b/ct/smokeping.sh index ee53f0a35..38618c518 100644 --- a/ct/smokeping.sh +++ b/ct/smokeping.sh @@ -42,4 +42,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}/smokeping${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}/smokeping${CL}" diff --git a/ct/snipeit.sh b/ct/snipeit.sh index a5a76db49..9cfc1d5a9 100644 --- a/ct/snipeit.sh +++ b/ct/snipeit.sh @@ -27,27 +27,24 @@ function update_script() { msg_error "No ${APP} Installation Found!" exit fi - RELEASE=$(curl -s https://api.github.com/repos/snipe/snipe-it/releases/latest | grep '"tag_name"' | sed -E 's/.*"tag_name": "v([^"]+).*/\1/') + RELEASE=$(curl -fsSL https://api.github.com/repos/snipe/snipe-it/releases/latest | grep '"tag_name"' | sed -E 's/.*"tag_name": "v([^"]+).*/\1/') if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then msg_info "Stopping Services" systemctl stop nginx msg_ok "Services Stopped" - + msg_info "Updating ${APP} to v${RELEASE}" $STD apt-get update $STD apt-get -y upgrade mv /opt/snipe-it /opt/snipe-it-backup temp_file=$(mktemp) - wget -q "https://github.com/snipe/snipe-it/archive/refs/tags/v${RELEASE}.tar.gz" -O $temp_file - tar zxf $temp_file - mv snipe-it-${RELEASE} /opt/snipe-it - $STD wget -q "https://github.com/snipe/snipe-it/archive/refs/tags/v${RELEASE}.zip" - unzip -q v${RELEASE}.zip - mv snipe-it-${RELEASE} /opt/snipe-it + curl -fsSL "https://github.com/snipe/snipe-it/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file" + tar zxf "$temp_file" + mv "snipe-it-${RELEASE}" /opt/snipe-it 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/ + cd /opt/snipe-it/ || exit export COMPOSER_ALLOW_SUPERUSER=1 $STD composer install --no-dev --optimize-autoloader --no-interaction $STD composer dump-autoload @@ -58,10 +55,10 @@ function update_script() { $STD php artisan view:clear chown -R www-data: /opt/snipe-it chmod -R 755 /opt/snipe-it - rm -rf /opt/v${RELEASE}.zip + rm -rf "$temp_file" rm -rf /opt/snipe-it-backup msg_ok "Updated ${APP}" - + msg_info "Starting Service" systemctl start nginx msg_ok "Started Service" diff --git a/ct/sonarr.sh b/ct/sonarr.sh index 44180785c..c164dab7f 100644 --- a/ct/sonarr.sh +++ b/ct/sonarr.sh @@ -29,7 +29,7 @@ function update_script() { fi msg_info "Updating $APP v4" systemctl stop sonarr.service - wget -q -O SonarrV4.tar.gz 'https://services.sonarr.tv/v1/download/main/latest?version=4&os=linux&arch=arm64' + curl -fsSL "https://services.sonarr.tv/v1/download/main/latest?version=4&os=linux&arch=arm64" -o "SonarrV4.tar.gz" tar -xzf SonarrV4.tar.gz rm -rf /opt/Sonarr mv Sonarr /opt diff --git a/ct/spoolman.sh b/ct/spoolman.sh index 5527ce9a9..e81db6b0a 100644 --- a/ct/spoolman.sh +++ b/ct/spoolman.sh @@ -27,7 +27,7 @@ function update_script() { msg_error "No ${APP} Installation Found!" exit fi - RELEASE=$(wget -q https://github.com/Donkie/Spoolman/releases/latest -O - | grep "title>Release" | cut -d " " -f 4) + RELEASE=$(curl -fsSL https://github.com/Donkie/Spoolman/releases/latest | grep "title>Release" | cut -d " " -f 4) if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then msg_info "Stopping ${APP} Service" @@ -38,11 +38,11 @@ function update_script() { cd /opt rm -rf spoolman_bak mv spoolman spoolman_bak - wget -q https://github.com/Donkie/Spoolman/releases/download/${RELEASE}/spoolman.zip + curl -fsSL "https://github.com/Donkie/Spoolman/releases/download/${RELEASE}/spoolman.zip" -o $(basename "https://github.com/Donkie/Spoolman/releases/download/${RELEASE}/spoolman.zip") unzip -q spoolman.zip -d spoolman cd spoolman $STD pip3 install -r requirements.txt - wget -q https://raw.githubusercontent.com/Donkie/Spoolman/master/.env.example -O .env + curl -fsSL "https://raw.githubusercontent.com/Donkie/Spoolman/master/.env.example" -o ".env" echo "${RELEASE}" >/opt/${APP}_version.txt msg_ok "Updated ${APP} to ${RELEASE}" @@ -68,4 +68,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}:7912${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:7912${CL}" diff --git a/ct/sqlserver2022.sh b/ct/sqlserver2022.sh index bf5d2c74d..7b76c7037 100644 --- a/ct/sqlserver2022.sh +++ b/ct/sqlserver2022.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2025 community-scripts ORG # Author: Kristian Skov # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -41,4 +41,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 IP:${CL}" -echo -e "${TAB}${GATEWAY}${BGN}${IP}:1433${CL}" +echo -e "${TAB}${GATEWAY}${BGN}${IP}:1433${CL}" \ No newline at end of file diff --git a/ct/stirling-pdf.sh b/ct/stirling-pdf.sh index ea9429f9d..1cd546e53 100644 --- a/ct/stirling-pdf.sh +++ b/ct/stirling-pdf.sh @@ -33,12 +33,13 @@ function update_script() { $STD apt-get remove -y ocrmypdf $STD apt-get install -y qpdf fi - RELEASE=$(curl -s https://api.github.com/repos/Stirling-Tools/Stirling-PDF/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') - wget -q https://github.com/Stirling-Tools/Stirling-PDF/archive/refs/tags/v$RELEASE.tar.gz + RELEASE=$(curl -fsSL https://api.github.com/repos/Stirling-Tools/Stirling-PDF/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') + curl -fsSL "https://github.com/Stirling-Tools/Stirling-PDF/archive/refs/tags/v$RELEASE.tar.gz" -o $(basename "https://github.com/Stirling-Tools/Stirling-PDF/archive/refs/tags/v$RELEASE.tar.gz") tar -xzf v$RELEASE.tar.gz cd Stirling-PDF-$RELEASE chmod +x ./gradlew $STD ./gradlew build + rm -rf /opt/Stirling-PDF/Stirling-PDF-*.jar cp -r ./build/libs/Stirling-PDF-*.jar /opt/Stirling-PDF/ cp -r scripts /opt/Stirling-PDF/ cd ~ @@ -56,4 +57,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}:8080${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8080${CL}" diff --git a/ct/suwayomiserver.sh b/ct/suwayomiserver.sh index 3d3c7b809..271f2af9a 100644 --- a/ct/suwayomiserver.sh +++ b/ct/suwayomiserver.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2025 community-scripts ORG # Author: tremor021 # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -28,7 +28,7 @@ function update_script() { msg_error "No ${APP} Installation Found!" exit fi - RELEASE=$(curl -s https://api.github.com/repos/Suwayomi/Suwayomi-Server/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') + RELEASE=$(curl -fsSL https://api.github.com/repos/Suwayomi/Suwayomi-Server/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') if [[ "${RELEASE}" != "$(cat /opt/suwayomi-server_version.txt)" ]] || [[ ! -f /opt/suwayomi-server_version.txt ]]; then msg_info "Updating $APP" msg_info "Stopping $APP" @@ -36,8 +36,8 @@ function update_script() { msg_ok "Stopped $APP" msg_info "Updating $APP to v${RELEASE}" cd /tmp - URL=$(curl -s https://api.github.com/repos/Suwayomi/Suwayomi-Server/releases/latest | grep "browser_download_url" | awk '{print substr($2, 2, length($2)-2) }' | tail -n+2 | head -n 1) - wget -q $URL + URL=$(curl -fsSL https://api.github.com/repos/Suwayomi/Suwayomi-Server/releases/latest | grep "browser_download_url" | awk '{print substr($2, 2, length($2)-2) }' | tail -n+2 | head -n 1) + curl -fsSL "$URL" -o $(basename "$URL") $STD dpkg -i /tmp/*.deb msg_ok "Updated $APP to v${RELEASE}" msg_info "Starting $APP" diff --git a/ct/syncthing.sh b/ct/syncthing.sh index 900e92729..0a3d994c8 100644 --- a/ct/syncthing.sh +++ b/ct/syncthing.sh @@ -41,4 +41,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}:8384${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8384${CL}" diff --git a/ct/tasmoadmin.sh b/ct/tasmoadmin.sh index 23bd7eb5c..1ecf00882 100644 --- a/ct/tasmoadmin.sh +++ b/ct/tasmoadmin.sh @@ -41,4 +41,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}:9999${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:9999${CL}" diff --git a/ct/tasmocompiler.sh b/ct/tasmocompiler.sh index 6bbc0b498..066d4f049 100644 --- a/ct/tasmocompiler.sh +++ b/ct/tasmocompiler.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2025 community-scripts ORG # Author: Slaviša Arežina (tremor021) # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -27,7 +27,7 @@ function update_script() { msg_error "No ${APP} Installation Found!" exit fi - RELEASE=$(curl -s https://api.github.com/repos/benzino77/tasmocompiler/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') + RELEASE=$(curl -fsSL https://api.github.com/repos/benzino77/tasmocompiler/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 $APP" systemctl stop tasmocompiler @@ -35,8 +35,8 @@ function update_script() { msg_info "Updating $APP to v${RELEASE}" cd /opt rm -rf /opt/tasmocompiler - RELEASE=$(curl -s https://api.github.com/repos/benzino77/tasmocompiler/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') - wget -q https://github.com/benzino77/tasmocompiler/archive/refs/tags/v${RELEASE}.tar.gz + RELEASE=$(curl -fsSL https://api.github.com/repos/benzino77/tasmocompiler/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') + curl -fsSL "https://github.com/benzino77/tasmocompiler/archive/refs/tags/v${RELEASE}.tar.gz" -o $(basename "https://github.com/benzino77/tasmocompiler/archive/refs/tags/v${RELEASE}.tar.gz") tar xzf v${RELEASE}.tar.gz mv tasmocompiler-${RELEASE}/ /opt/tasmocompiler/ cd /opt/tasmocompiler diff --git a/ct/tautulli.sh b/ct/tautulli.sh index 11c6c8f90..135eae7cf 100644 --- a/ct/tautulli.sh +++ b/ct/tautulli.sh @@ -41,4 +41,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}:8181${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8181${CL}" diff --git a/ct/tdarr.sh b/ct/tdarr.sh index e0cf0c480..a8a440b54 100644 --- a/ct/tdarr.sh +++ b/ct/tdarr.sh @@ -41,4 +41,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}:8265${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8265${CL}" diff --git a/ct/technitiumdns.sh b/ct/technitiumdns.sh index 5bdb26719..17441aee8 100644 --- a/ct/technitiumdns.sh +++ b/ct/technitiumdns.sh @@ -30,7 +30,7 @@ function update_script() { msg_info "Updating ${APP}" if ! dpkg -s aspnetcore-runtime-8.0 >/dev/null 2>&1; then - wget -q https://packages.microsoft.com/config/debian/12/packages-microsoft-prod.deb + curl -fsSL "https://packages.microsoft.com/config/debian/12/packages-microsoft-prod.deb" -o $(basename "https://packages.microsoft.com/config/debian/12/packages-microsoft-prod.deb") $STD dpkg -i packages-microsoft-prod.deb $STD apt-get update $STD apt-get install -y aspnetcore-runtime-8.0 @@ -48,4 +48,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}:5380${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:5380${CL}" diff --git a/ct/teddycloud.sh b/ct/teddycloud.sh index 180227104..b59b0ee21 100644 --- a/ct/teddycloud.sh +++ b/ct/teddycloud.sh @@ -22,8 +22,11 @@ function update_script() { header_info check_container_storage check_container_resources - if [[ ! -d /opt/teddycloud ]]; then msg_error "No ${APP} Installation Found!"; exit; fi - RELEASE="$(curl -s https://api.github.com/repos/toniebox-reverse-engineering/teddycloud/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')" + if [[ ! -d /opt/teddycloud ]]; then + msg_error "No ${APP} Installation Found!" + exit + fi + RELEASE="$(curl -fsSL https://api.github.com/repos/toniebox-reverse-engineering/teddycloud/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')" VERSION="${RELEASE#tc_v}" if [[ ! -f "/opt/${APP}_version.txt" || "${VERSION}" != "$(cat /opt/${APP}_version.txt)" ]]; then msg_info "Stopping ${APP}" @@ -33,7 +36,7 @@ function update_script() { msg_info "Updating ${APP} to v${VERSION}" cd /opt mv /opt/teddycloud /opt/teddycloud_bak - wget -q "https://github.com/toniebox-reverse-engineering/teddycloud/releases/download/${RELEASE}/teddycloud.amd64.release_v${VERSION}.zip" + curl -fsSL "https://github.com/toniebox-reverse-engineering/teddycloud/releases/download/${RELEASE}/teddycloud.amd64.release_v${VERSION}.zip" -o $(basename "https://github.com/toniebox-reverse-engineering/teddycloud/releases/download/${RELEASE}/teddycloud.amd64.release_v${VERSION}.zip") unzip -q -d /opt/teddycloud teddycloud.amd64.release_v${VERSION}.zip cp -R /opt/teddycloud_bak/certs /opt/teddycloud_bak/config /opt/teddycloud_bak/data /opt/teddycloud echo "${VERSION}" >"/opt/${APP}_version.txt" diff --git a/ct/the-lounge.sh b/ct/the-lounge.sh index 6ec2eab9e..55a8aab9e 100644 --- a/ct/the-lounge.sh +++ b/ct/the-lounge.sh @@ -27,7 +27,14 @@ function update_script() { msg_error "No ${APP} Installation Found!" exit fi - RELEASE=$(curl -s https://api.github.com/repos/thelounge/thelounge-deb/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') + if ! dpkg -l build-essential >/dev/null 2>&1; then + $STD apt-get update + $STD apt-get install -y build-essential + fi + if ! npm list -g node-gyp >/dev/null 2>&1; then + $STD npm install -g node-gyp + fi + RELEASE=$(curl -fsSL https://api.github.com/repos/thelounge/thelounge-deb/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" systemctl stop thelounge @@ -36,7 +43,7 @@ function update_script() { msg_info "Updating ${APP} to v${RELEASE}" $STD apt-get install --only-upgrade nodejs cd /opt - wget -q https://github.com/thelounge/thelounge-deb/releases/download/v${RELEASE}/thelounge_${RELEASE}_all.deb + curl -fsSL "https://github.com/thelounge/thelounge-deb/releases/download/v${RELEASE}/thelounge_${RELEASE}_all.deb" -o $(basename "https://github.com/thelounge/thelounge-deb/releases/download/v${RELEASE}/thelounge_${RELEASE}_all.deb") dpkg -i ./thelounge_${RELEASE}_all.deb msg_ok "Updated ${APP} to v${RELEASE}" @@ -61,4 +68,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}:9000${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:9000${CL}" diff --git a/ct/threadfin.sh b/ct/threadfin.sh index 180cad262..b55487621 100644 --- a/ct/threadfin.sh +++ b/ct/threadfin.sh @@ -29,7 +29,7 @@ function update_script() { fi msg_info "Updating $APP" systemctl stop threadfin.service - wget -q -O /opt/threadfin/threadfin 'https://github.com/Threadfin/Threadfin/releases/latest/download/Threadfin_linux_amd64' + curl -fsSL "https://github.com/Threadfin/Threadfin/releases/latest/download/Threadfin_linux_amd64" -o "/opt/threadfin/threadfin" chmod +x /opt/threadfin/threadfin systemctl start threadfin.service msg_ok "Updated $APP" @@ -43,4 +43,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}:34400/web${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:34400/web${CL}" diff --git a/ct/tianji.sh b/ct/tianji.sh index 628bd47e0..d2cd8724c 100644 --- a/ct/tianji.sh +++ b/ct/tianji.sh @@ -26,17 +26,33 @@ function update_script() { msg_error "No ${APP} Installation Found!" exit fi - RELEASE=$(curl -s https://api.github.com/repos/msgbyte/tianji/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') + if command -v node >/dev/null; then + NODE_MAJOR=$(/usr/bin/env node -v | grep -oP '^v\K[0-9]+') + if [[ "$NODE_MAJOR" != "22" ]]; then + $STD apt-get purge -y nodejs + rm -f /etc/apt/sources.list.d/nodesource.list + rm -f /etc/apt/keyrings/nodesource.gpg + else + return + fi + fi + mkdir -p /etc/apt/keyrings + curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg + echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_22.x nodistro main" >/etc/apt/sources.list.d/nodesource.list + $STD apt-get update + $STD apt-get install -y nodejs + $STD npm install -g pnpm@9.7.1 + RELEASE=$(curl -fsSL https://api.github.com/repos/msgbyte/tianji/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 ${APP} Service" systemctl stop tianji msg_ok "Stopped ${APP} Service" - + msg_info "Updating ${APP} to v${RELEASE}" cd /opt cp /opt/tianji/src/server/.env /opt/.env mv /opt/tianji /opt/tianji_bak - wget -q "https://github.com/msgbyte/tianji/archive/refs/tags/v${RELEASE}.zip" + curl -fsSL "https://github.com/msgbyte/tianji/archive/refs/tags/v${RELEASE}.zip" -o $(basename "https://github.com/msgbyte/tianji/archive/refs/tags/v${RELEASE}.zip") unzip -q v${RELEASE}.zip mv tianji-${RELEASE} /opt/tianji cd tianji @@ -52,11 +68,11 @@ function update_script() { $STD pnpm db:migrate:apply echo "${RELEASE}" >/opt/${APP}_version.txt msg_ok "Updated ${APP} to v${RELEASE}" - + msg_info "Starting ${APP}" systemctl start tianji msg_ok "Started ${APP}" - + msg_info "Cleaning up" rm -R /opt/v${RELEASE}.zip rm -rf /opt/tianji_bak diff --git a/ct/traccar.sh b/ct/traccar.sh index ad7db8c4b..a6d9d9d49 100644 --- a/ct/traccar.sh +++ b/ct/traccar.sh @@ -38,4 +38,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}:8082${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8082${CL}" diff --git a/ct/traefik.sh b/ct/traefik.sh index 27d1e2cad..5e7a87fa3 100644 --- a/ct/traefik.sh +++ b/ct/traefik.sh @@ -27,10 +27,10 @@ function update_script() { msg_error "No ${APP} Installation Found!" exit fi - RELEASE=$(curl -s https://api.github.com/repos/traefik/traefik/releases | grep -oP '"tag_name":\s*"v\K[\d.]+?(?=")' | sort -V | tail -n 1) + RELEASE=$(curl -fsSL https://api.github.com/repos/traefik/traefik/releases | grep -oP '"tag_name":\s*"v\K[\d.]+?(?=")' | sort -V | tail -n 1) msg_info "Updating $APP LXC" if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then - wget -q https://github.com/traefik/traefik/releases/download/v${RELEASE}/traefik_v${RELEASE}_linux_arm64.tar.gz + curl -fsSL "https://github.com/traefik/traefik/releases/download/v${RELEASE}/traefik_v${RELEASE}_linux_arm64.tar.gz" -o $(basename "https://github.com/traefik/traefik/releases/download/v${RELEASE}/traefik_v${RELEASE}_linux_arm64.tar.gz") tar -C /tmp -xzf traefik*.tar.gz mv /tmp/traefik /usr/bin/ rm -rf traefik*.tar.gz diff --git a/ct/transmission.sh b/ct/transmission.sh index bc0376c85..4cdd17af9 100644 --- a/ct/transmission.sh +++ b/ct/transmission.sh @@ -41,4 +41,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}:9091/transmission${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:9091/transmission${CL}" diff --git a/ct/trilium.sh b/ct/trilium.sh index ecfa1bde6..e6c4c7089 100644 --- a/ct/trilium.sh +++ b/ct/trilium.sh @@ -20,16 +20,16 @@ color catch_errors function update_script() { - header_info - check_container_storage - check_container_resources - if [[ ! -d /opt/trilium ]]; then - msg_error "No ${APP} Installation Found!" - exit - fi - if [[ ! -f /opt/${APP}_version.txt ]]; then touch /opt/${APP}_version.txt; fi - RELEASE=$(curl -s https://api.github.com/repos/TriliumNext/Notes/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') - if [[ "v${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then + header_info + check_container_storage + check_container_resources + if [[ ! -d /opt/trilium ]]; then + msg_error "No ${APP} Installation Found!" + exit + fi + if [[ ! -f /opt/${APP}_version.txt ]]; then touch /opt/${APP}_version.txt; fi + RELEASE=$(curl -fsSL https://api.github.com/repos/TriliumNext/Notes/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') + if [[ "v${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then msg_info "Stopping ${APP}" systemctl stop trilium sleep 1 @@ -40,7 +40,7 @@ function update_script() { mv /opt/trilium/{db,dump-db} /opt/trilium_backup/ rm -rf /opt/trilium cd /tmp - wget -q https://github.com/TriliumNext/Notes/releases/download/v${RELEASE}/TriliumNextNotes-Server-v${RELEASE}-linux-x64.tar.xz + curl -fsSL "https://github.com/TriliumNext/Notes/releases/download/v${RELEASE}/TriliumNextNotes-Server-v${RELEASE}-linux-x64.tar.xz" -o $(basename "https://github.com/TriliumNext/Notes/releases/download/v${RELEASE}/TriliumNextNotes-Server-v${RELEASE}-linux-x64.tar.xz") tar -xf TriliumNextNotes-Server-v${RELEASE}-linux-x64.tar.xz mv TriliumNextNotes-Server-$RELEASE-linux-x64 /opt/trilium cp -r /opt/trilium_backup/{db,dump-db} /opt/trilium/ diff --git a/ct/typesense.sh b/ct/typesense.sh index 8aed10a67..010928940 100644 --- a/ct/typesense.sh +++ b/ct/typesense.sh @@ -27,7 +27,7 @@ function update_script() { msg_error "No ${APP} Installation Found!" exit fi - RELEASE=$(curl -s https://api.github.com/repos/typesense/typesense/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') + RELEASE=$(curl -fsSL https://api.github.com/repos/typesense/typesense/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 "Updating ${APP} LXC" $STD apt-get update diff --git a/ct/ubuntu.sh b/ct/ubuntu.sh index 3e089012e..2c02bdb87 100644 --- a/ct/ubuntu.sh +++ b/ct/ubuntu.sh @@ -39,4 +39,4 @@ build_container description msg_ok "Completed Successfully!\n" -echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" \ No newline at end of file +echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" diff --git a/ct/umami.sh b/ct/umami.sh index 161363a86..cddb410e9 100644 --- a/ct/umami.sh +++ b/ct/umami.sh @@ -54,4 +54,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/ct/umbrel.sh b/ct/umbrel.sh index 2b5758d73..ef1612e9d 100644 --- a/ct/umbrel.sh +++ b/ct/umbrel.sh @@ -37,4 +37,4 @@ description msg_ok "Completed Successfully!\n" echo -e "${CREATING}${GN}${APP} setup has been successfully initialized! (manual reboot is required!)${CL}" echo -e "${INFO}${YW} Access it using the following URL:${CL}" -echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}" diff --git a/ct/unbound.sh b/ct/unbound.sh index 448dbb2c2..1d8cbbec3 100644 --- a/ct/unbound.sh +++ b/ct/unbound.sh @@ -41,4 +41,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}:5335${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:5335${CL}" diff --git a/ct/unmanic.sh b/ct/unmanic.sh index c488a39c9..d80f5c825 100644 --- a/ct/unmanic.sh +++ b/ct/unmanic.sh @@ -41,4 +41,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}:8888${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8888${CL}" diff --git a/ct/uptimekuma.sh b/ct/uptimekuma.sh index c1660497a..5726b848b 100644 --- a/ct/uptimekuma.sh +++ b/ct/uptimekuma.sh @@ -34,7 +34,7 @@ function update_script() { echo "Installed NPM..." fi fi - LATEST=$(curl -sL https://api.github.com/repos/louislam/uptime-kuma/releases/latest | grep '"tag_name":' | cut -d'"' -f4) + LATEST=$(curl -fsSL https://api.github.com/repos/louislam/uptime-kuma/releases/latest | grep '"tag_name":' | cut -d'"' -f4) msg_info "Stopping ${APP}" $STD sudo systemctl stop uptime-kuma msg_ok "Stopped ${APP}" diff --git a/ct/urbackupserver.sh b/ct/urbackupserver.sh index d60372faf..798b38ccf 100644 --- a/ct/urbackupserver.sh +++ b/ct/urbackupserver.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2025 community-scripts ORG # Author: Kristian Skov # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -44,4 +44,4 @@ pct reboot $CTID 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 IP:${CL}" -echo -e "${TAB}${GATEWAY}${BGN}${IP}:55414${CL}" +echo -e "${TAB}${GATEWAY}${BGN}${IP}:55414${CL}" \ No newline at end of file diff --git a/ct/vaultwarden.sh b/ct/vaultwarden.sh index 928a2f13f..dab3ff332 100644 --- a/ct/vaultwarden.sh +++ b/ct/vaultwarden.sh @@ -28,10 +28,10 @@ function update_script() { exit fi - VAULT=$(curl -s https://api.github.com/repos/dani-garcia/vaultwarden/releases/latest | + VAULT=$(curl -fsSL https://api.github.com/repos/dani-garcia/vaultwarden/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') - WVRELEASE=$(curl -s https://api.github.com/repos/dani-garcia/bw_web_builds/releases/latest | + WVRELEASE=$(curl -fsSL https://api.github.com/repos/dani-garcia/bw_web_builds/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') diff --git a/ct/victoriametrics.sh b/ct/victoriametrics.sh index 10ef77c40..1939b2585 100644 --- a/ct/victoriametrics.sh +++ b/ct/victoriametrics.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2025 community-scripts ORG # Author: Slaviša Arežina (tremor021) # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -14,7 +14,7 @@ var_os="debian" var_version="12" var_unprivileged="1" -header_info "$APP" +header_info "$APP" variables color catch_errors @@ -27,35 +27,35 @@ function update_script() { msg_error "No ${APP} Installation Found!" exit fi - RELEASE=$(curl -s https://api.github.com/repos/VictoriaMetrics/VictoriaMetrics/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') + RELEASE=$(curl -fsSL https://api.github.com/repos/VictoriaMetrics/VictoriaMetrics/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 $APP" systemctl stop victoriametrics msg_ok "Stopped $APP" - + msg_info "Updating ${APP} to v${RELEASE}" temp_dir=$(mktemp -d) cd $temp_dir - wget -q https://github.com/VictoriaMetrics/VictoriaMetrics/releases/download/v${RELEASE}/victoria-metrics-linux-amd64-v${RELEASE}.tar.gz - wget -q https://github.com/VictoriaMetrics/VictoriaMetrics/releases/download/v${RELEASE}/vmutils-linux-amd64-v${RELEASE}.tar.gz + curl -fsSL "https://github.com/VictoriaMetrics/VictoriaMetrics/releases/download/v${RELEASE}/victoria-metrics-linux-amd64-v${RELEASE}.tar.gz" -o $(basename "https://github.com/VictoriaMetrics/VictoriaMetrics/releases/download/v${RELEASE}/victoria-metrics-linux-amd64-v${RELEASE}.tar.gz") + curl -fsSL "https://github.com/VictoriaMetrics/VictoriaMetrics/releases/download/v${RELEASE}/vmutils-linux-amd64-v${RELEASE}.tar.gz" -o $(basename "https://github.com/VictoriaMetrics/VictoriaMetrics/releases/download/v${RELEASE}/vmutils-linux-amd64-v${RELEASE}.tar.gz") find /opt/victoriametrics -maxdepth 1 -type f -executable -delete tar -xf victoria-metrics-linux-amd64-v${RELEASE}.tar.gz -C /opt/victoriametrics tar -xf vmutils-linux-amd64-v${RELEASE}.tar.gz -C /opt/victoriametrics chmod +x /opt/victoriametrics/* echo "${RELEASE}" >/opt/${APP}_version.txt msg_ok "Updated $APP to v${RELEASE}" - + msg_info "Starting $APP" systemctl start victoriametrics msg_ok "Started $APP" - + msg_info "Cleaning Up" rm -rf $temp_dir msg_ok "Cleaned" msg_ok "Updated Successfully" - else + else msg_ok "No update required. ${APP} is already at ${RELEASE}" - fi + fi exit } diff --git a/ct/vikunja.sh b/ct/vikunja.sh index b7aaac3b0..2ca00946b 100644 --- a/ct/vikunja.sh +++ b/ct/vikunja.sh @@ -27,7 +27,7 @@ function update_script() { msg_error "No ${APP} Installation Found!" exit fi - RELEASE=$(curl -s https://dl.vikunja.io/vikunja/ | grep -oP 'href="/vikunja/\K[0-9]+\.[0-9]+\.[0-9]+' | sort -V | tail -n 1) + RELEASE=$(curl -fsSL https://dl.vikunja.io/vikunja/ | grep -oP 'href="/vikunja/\K[0-9]+\.[0-9]+\.[0-9]+' | sort -V | tail -n 1) if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then msg_info "Stopping ${APP}" systemctl stop vikunja @@ -36,7 +36,7 @@ function update_script() { msg_info "Updating ${APP} to ${RELEASE}" cd /opt rm -rf /opt/vikunja/vikunja - wget -q "https://dl.vikunja.io/vikunja/$RELEASE/vikunja-$RELEASE-amd64.deb" + curl -fsSL "https://dl.vikunja.io/vikunja/$RELEASE/vikunja-$RELEASE-amd64.deb" -o $(basename "https://dl.vikunja.io/vikunja/$RELEASE/vikunja-$RELEASE-amd64.deb") export DEBIAN_FRONTEND=noninteractive $STD dpkg -i vikunja-$RELEASE-amd64.deb echo "${RELEASE}" >/opt/${APP}_version.txt diff --git a/ct/wallos.sh b/ct/wallos.sh index 5407cd6ef..b079bf6a4 100644 --- a/ct/wallos.sh +++ b/ct/wallos.sh @@ -27,11 +27,11 @@ function update_script() { msg_error "No ${APP} Installation Found!" exit fi - RELEASE=$(curl -s https://api.github.com/repos/ellite/Wallos/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') + RELEASE=$(curl -fsSL https://api.github.com/repos/ellite/Wallos/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 "Updating ${APP} to ${RELEASE}" cd /opt - wget -q "https://github.com/ellite/Wallos/archive/refs/tags/v${RELEASE}.zip" + curl -fsSL "https://github.com/ellite/Wallos/archive/refs/tags/v${RELEASE}.zip" -o $(basename "https://github.com/ellite/Wallos/archive/refs/tags/v${RELEASE}.zip") mkdir -p /opt/logos mv /opt/wallos/db/wallos.db /opt/wallos.db mv /opt/wallos/images/uploads/logos /opt/logos/ @@ -69,4 +69,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}${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}" diff --git a/ct/wastebin.sh b/ct/wastebin.sh index 4106c6c58..9cb96b76d 100644 --- a/ct/wastebin.sh +++ b/ct/wastebin.sh @@ -27,7 +27,7 @@ function update_script() { msg_error "No ${APP} Installation Found!" exit fi - RELEASE=$(curl -s https://api.github.com/repos/matze/wastebin/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') + RELEASE=$(curl -fsSL https://api.github.com/repos/matze/wastebin/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') # Dirty-Fix 03/2025 for missing APP_version.txt on old installations, set to pre-latest release msg_info "Running Migration" if [[ ! -f /opt/${APP}_version.txt ]]; then @@ -64,7 +64,7 @@ EOF msg_info "Updating Wastebin" temp_file=$(mktemp) - wget -q https://github.com/matze/wastebin/releases/download/${RELEASE}/wastebin_${RELEASE}_x86_64-unknown-linux-musl.zip -O $temp_file +curl -fsSL "https://github.com/matze/wastebin/releases/download/${RELEASE}/wastebin_${RELEASE}_x86_64-unknown-linux-musl.zip" -o "$temp_file" unzip -o -q $temp_file cp -f wastebin /opt/wastebin/ chmod +x /opt/wastebin/wastebin diff --git a/ct/watcharr.sh b/ct/watcharr.sh index 73daf7fc3..973f577bb 100644 --- a/ct/watcharr.sh +++ b/ct/watcharr.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2025 community-scripts ORG # Author: Slaviša Arežina (tremor021) # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -27,7 +27,7 @@ function update_script() { msg_error "No ${APP} Installation Found!" exit fi - RELEASE=$(curl -s https://api.github.com/repos/sbondCo/Watcharr/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') + RELEASE=$(curl -fsSL https://api.github.com/repos/sbondCo/Watcharr/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then msg_info "Updating $APP" @@ -38,7 +38,7 @@ function update_script() { msg_info "Updating $APP to v${RELEASE}" temp_file=$(mktemp) temp_folder=$(mktemp -d) - wget -q "https://github.com/sbondCo/Watcharr/archive/refs/tags/v${RELEASE}.tar.gz" -O "$temp_file" + curl -fsSL "https://github.com/sbondCo/Watcharr/archive/refs/tags/v${RELEASE}.tar.gz" -o ""$temp_file"" tar -xzf "$temp_file" -C "$temp_folder" rm -f /opt/watcharr/server/watcharr rm -rf /opt/watcharr/server/ui diff --git a/ct/watchyourlan.sh b/ct/watchyourlan.sh index b7a8cbfe5..25d800982 100644 --- a/ct/watchyourlan.sh +++ b/ct/watchyourlan.sh @@ -30,13 +30,13 @@ function update_script() { msg_info "Updating $APP" systemctl stop watchyourlan.service cp -R /data/config.yaml config.yaml - RELEASE=$(curl -s https://api.github.com/repos/aceberg/WatchYourLAN/releases/latest | grep -o '"tag_name": *"[^"]*"' | cut -d '"' -f 4) - wget -q https://github.com/aceberg/WatchYourLAN/releases/download/$RELEASE/watchyourlan_${RELEASE}_linux_amd64.deb + RELEASE=$(curl -fsSL https://api.github.com/repos/aceberg/WatchYourLAN/releases/latest | grep -o '"tag_name": *"[^"]*"' | cut -d '"' -f 4) + curl -fsSL "https://github.com/aceberg/WatchYourLAN/releases/download/$RELEASE/watchyourlan_${RELEASE}_linux_amd64.deb" -o $(basename "https://github.com/aceberg/WatchYourLAN/releases/download/$RELEASE/watchyourlan_${RELEASE}_linux_amd64.deb") dpkg -i watchyourlan_${RELEASE}_linux_amd64.deb cp -R config.yaml /data/config.yaml sed -i 's|/etc/watchyourlan/config.yaml|/data/config.yaml|' /lib/systemd/system/watchyourlan.service rm watchyourlan_${RELEASE}_linux_amd64.deb config.yaml - systemctl enable -q --now watchyourlan.service + systemctl enable -q --now watchyourlan msg_ok "Updated $APP" exit } @@ -48,4 +48,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}:8840${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8840${CL}" diff --git a/ct/wavelog.sh b/ct/wavelog.sh index 94c29d231..f39880d2b 100644 --- a/ct/wavelog.sh +++ b/ct/wavelog.sh @@ -27,7 +27,7 @@ function update_script() { msg_error "No ${APP} Installation Found!" exit fi - RELEASE=$(curl -s https://api.github.com/repos/wavelog/wavelog/releases/latest | grep "tag_name" | cut -d '"' -f 4) + RELEASE=$(curl -fsSL https://api.github.com/repos/wavelog/wavelog/releases/latest | grep "tag_name" | cut -d '"' -f 4) if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then msg_info "Stopping Services" systemctl stop apache2 @@ -40,7 +40,7 @@ function update_script() { if [[ -f /opt/wavelog/assets/js/sections/custom.js ]]; then cp /opt/wavelog/assets/js/sections/custom.js /opt/custom.js fi - wget -q "https://github.com/wavelog/wavelog/archive/refs/tags/${RELEASE}.zip" + curl -fsSL "https://github.com/wavelog/wavelog/archive/refs/tags/${RELEASE}.zip" -o $(basename "https://github.com/wavelog/wavelog/archive/refs/tags/${RELEASE}.zip") unzip -q ${RELEASE}.zip rm -rf /opt/wavelog mv wavelog-${RELEASE}/ /opt/wavelog @@ -79,4 +79,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}${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}" diff --git a/ct/wazuh.sh b/ct/wazuh.sh index f139028a9..18c34ea5d 100644 --- a/ct/wazuh.sh +++ b/ct/wazuh.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2025 community-scripts ORG # Author: Omar Minaya # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -41,4 +41,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}:443${CL}" +echo -e "${TAB}${GATEWAY}${BGN}https://${IP}:443${CL}" \ No newline at end of file diff --git a/ct/web-check.sh b/ct/web-check.sh index fe4428fd4..f9a8391ba 100644 --- a/ct/web-check.sh +++ b/ct/web-check.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2025 community-scripts ORG # Author: CrazyWolf13 # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -38,4 +38,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}" +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}" \ No newline at end of file diff --git a/ct/wger.sh b/ct/wger.sh index 09f92918f..bcf885068 100644 --- a/ct/wger.sh +++ b/ct/wger.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2025 community-scripts ORG # Author: Slaviša Arežina (tremor021) # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -27,7 +27,7 @@ function update_script() { msg_error "No ${APP} Installation Found!" exit fi - RELEASE=$(curl -s https://api.github.com/repos/wger-project/wger/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3)}') + RELEASE=$(curl -fsSL https://api.github.com/repos/wger-project/wger/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3)}') if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then msg_info "Stopping $APP" systemctl stop wger @@ -36,7 +36,7 @@ function update_script() { msg_info "Updating $APP to v${RELEASE}" temp_file=$(mktemp) cd $temp_file - wget -q "https://github.com/wger-project/wger/archive/refs/tags/$RELEASE.tar.gz" -O $temp_file +curl -fsSL "https://github.com/wger-project/wger/archive/refs/tags/$RELEASE.tar.gz" -o "$temp_file" tar xzf $temp_file cp -rf wger-$RELEASE/* /home/wger/src cd /home/wger/src @@ -69,4 +69,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}" +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}" \ No newline at end of file diff --git a/ct/whisparr.sh b/ct/whisparr.sh index e128d3d5b..71e56c26a 100644 --- a/ct/whisparr.sh +++ b/ct/whisparr.sh @@ -41,4 +41,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}:6969${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:6969${CL}" diff --git a/ct/whoogle.sh b/ct/whoogle.sh index 2b21b8dcf..cd019d1d6 100644 --- a/ct/whoogle.sh +++ b/ct/whoogle.sh @@ -41,4 +41,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/wikijs.sh b/ct/wikijs.sh index f61e4b7f5..ecf72a1c9 100644 --- a/ct/wikijs.sh +++ b/ct/wikijs.sh @@ -27,7 +27,7 @@ function update_script() { msg_error "No ${APP} Installation Found!" exit fi - RELEASE=$(curl -s https://api.github.com/repos/Requarks/wiki/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') + RELEASE=$(curl -fsSL https://api.github.com/repos/Requarks/wiki/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then msg_info "Verifying whether ${APP}' new release is v3.x+ and current install uses SQLite." SQLITE_INSTALL=$([ -f /opt/wikijs/db.sqlite ] && echo "true" || echo "false") @@ -50,7 +50,7 @@ function update_script() { msg_info "Updating ${APP}" rm -rf /opt/wikijs/* cd /opt/wikijs - wget -q "https://github.com/requarks/wiki/releases/download/v${RELEASE}/wiki-js.tar.gz" + curl -fsSL "https://github.com/requarks/wiki/releases/download/v${RELEASE}/wiki-js.tar.gz" -o $(basename "https://github.com/requarks/wiki/releases/download/v${RELEASE}/wiki-js.tar.gz") tar -xzf wiki-js.tar.gz msg_ok "Updated ${APP}" @@ -81,4 +81,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/ct/wordpress.sh b/ct/wordpress.sh index c6672d516..6ff6dab2c 100644 --- a/ct/wordpress.sh +++ b/ct/wordpress.sh @@ -14,7 +14,7 @@ var_ram="2048" var_os="debian" var_version="12" -header_info "$APP" +header_info "$APP" variables color catch_errors @@ -38,4 +38,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}/${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}/${CL}" diff --git a/ct/yt-dlp-webui.sh b/ct/yt-dlp-webui.sh index 30141d49f..e0a1db71f 100644 --- a/ct/yt-dlp-webui.sh +++ b/ct/yt-dlp-webui.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2025 community-scripts ORG # Author: CrazyWolf13 # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -31,16 +31,16 @@ function update_script() { msg_info "Updating yt-dlp" $STD yt-dlp -U msg_ok "Updated yt-dlp" - RELEASE=$(curl -s https://api.github.com/repos/marcopiovanello/yt-dlp-web-ui/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') + RELEASE=$(curl -fsSL https://api.github.com/repos/marcopiovanello/yt-dlp-web-ui/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') if [[ "${RELEASE}" != "$(cat /opt/yt-dlp-webui_version.txt)" ]] || [[ ! -f /opt/yt-dlp-webui_version.txt ]]; then - + msg_info "Stopping $APP" systemctl stop yt-dlp-webui msg_ok "Stopped $APP" msg_info "Updating $APP to v${RELEASE}" rm -rf /usr/local/bin/yt-dlp-webui - wget -q "https://github.com/marcopiovanello/yt-dlp-web-ui/releases/download/v${RELEASE}/yt-dlp-webui_linux-amd64" -O /usr/local/bin/yt-dlp-webui +curl -fsSL "https://github.com/marcopiovanello/yt-dlp-web-ui/releases/download/v${RELEASE}/yt-dlp-webui_linux-amd64" -o "/usr/local/bin/yt-dlp-webui" chmod +x /usr/local/bin/yt-dlp-webui msg_ok "Updated $APP LXC" @@ -60,4 +60,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}:3033${CL}" +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3033${CL}" \ No newline at end of file diff --git a/ct/yunohost.sh b/ct/yunohost.sh index ad7d7583d..c4e21a460 100644 --- a/ct/yunohost.sh +++ b/ct/yunohost.sh @@ -41,4 +41,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}${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}" diff --git a/ct/zabbix.sh b/ct/zabbix.sh index bac537bd2..3b17751d5 100644 --- a/ct/zabbix.sh +++ b/ct/zabbix.sh @@ -20,40 +20,43 @@ color catch_errors function update_script() { - header_info - check_container_storage - check_container_resources - if [[ ! -f /etc/zabbix/zabbix_server.conf ]]; then - msg_error "No ${APP} Installation Found!" - exit - fi - msg_info "Stopping ${APP} Services" - systemctl stop zabbix-server zabbix-agent2 - msg_ok "Stopped ${APP} Services" - - msg_info "Updating $APP LXC" - mkdir -p /opt/zabbix-backup/ - cp /etc/zabbix/zabbix_server.conf /opt/zabbix-backup/ - cp /etc/apache2/conf-enabled/zabbix.conf /opt/zabbix-backup/ - 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 - wget -q https://repo.zabbix.com/zabbix/7.2/release/debian/pool/main/z/zabbix-release/zabbix-release_latest+debian12_all.deb - $STD dpkg -i zabbix-release_latest+debian12_all.deb - $STD apt-get update - $STD apt-get install --only-upgrade zabbix-server-pgsql zabbix-frontend-php zabbix-agent2 zabbix-agent2-plugin-* - - msg_info "Starting ${APP} Services" - systemctl start zabbix-server zabbix-agent2 - systemctl restart apache2 - msg_ok "Started ${APP} Services" - - msg_info "Cleaning Up" - rm -rf /tmp/zabbix-release_latest+debian12_all.deb - msg_ok "Cleaned" - msg_ok "Updated Successfully" + header_info + check_container_storage + check_container_resources + if [[ ! -f /etc/zabbix/zabbix_server.conf ]]; then + msg_error "No ${APP} Installation Found!" exit + fi + msg_info "Stopping ${APP} Services" + systemctl stop zabbix-server zabbix-agent2 + msg_ok "Stopped ${APP} Services" + + msg_info "Updating $APP LXC" + mkdir -p /opt/zabbix-backup/ + cp /etc/zabbix/zabbix_server.conf /opt/zabbix-backup/ + cp /etc/apache2/conf-enabled/zabbix.conf /opt/zabbix-backup/ + 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 + 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")" \ + -o /tmp/zabbix-release_latest+debian12_all.deb + $STD dpkg -i zabbix-release_latest+debian12_all.deb + $STD apt-get update + $STD apt-get install --only-upgrade zabbix-server-pgsql zabbix-frontend-php zabbix-agent2 zabbix-agent2-plugin-* + + msg_info "Starting ${APP} Services" + systemctl start zabbix-server zabbix-agent2 + systemctl restart apache2 + msg_ok "Started ${APP} Services" + + msg_info "Cleaning Up" + rm -rf /tmp/zabbix-release_latest+debian12_all.deb + msg_ok "Cleaned" + msg_ok "Updated Successfully" + exit } start diff --git a/ct/zammad.sh b/ct/zammad.sh index 3e3e355b4..219f2ac89 100644 --- a/ct/zammad.sh +++ b/ct/zammad.sh @@ -48,4 +48,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}${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}" diff --git a/ct/zerotier-one.sh b/ct/zerotier-one.sh index ecbd8ac0e..d9f104ea8 100644 --- a/ct/zerotier-one.sh +++ b/ct/zerotier-one.sh @@ -1,11 +1,10 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2025 community-scripts ORG # Author: tremor021 # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE # Source: https://www.zerotier.com/ - APP="Zerotier-One" var_tags="networking" var_cpu="1" @@ -50,4 +49,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 IP:${CL}" -echo -e "${TAB}${GATEWAY}${BGN}https://${IP}:3443${CL}" +echo -e "${TAB}${GATEWAY}${BGN}https://${IP}:3443${CL}" \ No newline at end of file diff --git a/ct/zigbee2mqtt.sh b/ct/zigbee2mqtt.sh index b45f34eee..39117f6d3 100644 --- a/ct/zigbee2mqtt.sh +++ b/ct/zigbee2mqtt.sh @@ -27,7 +27,7 @@ function update_script() { msg_error "No ${APP} Installation Found!" exit fi - RELEASE=$(curl -s https://api.github.com/repos/Koenkk/zigbee2mqtt/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') + RELEASE=$(curl -fsSL https://api.github.com/repos/Koenkk/zigbee2mqtt/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then msg_info "Stopping Service" systemctl stop zigbee2mqtt @@ -38,32 +38,32 @@ function update_script() { msg_ok "Updated pnpm" msg_info "Creating Backup" - rm -rf /opt/${APP}_backup*.tar.gz - mkdir -p /opt/z2m_backup - $STD tar -czf /opt/z2m_backup/${APP}_backup_$(date +%Y%m%d%H%M%S).tar.gz -C /opt zigbee2mqtt - mv /opt/zigbee2mqtt/data /opt/z2m_backup + rm -rf /opt/${APP}_backup*.tar.gz + mkdir -p /opt/z2m_backup + $STD tar -czf /opt/z2m_backup/${APP}_backup_$(date +%Y%m%d%H%M%S).tar.gz -C /opt zigbee2mqtt + mv /opt/zigbee2mqtt/data /opt/z2m_backup msg_ok "Backup Created" msg_info "Updating ${APP} to v${RELEASE}" - cd /opt - wget -q "https://github.com/Koenkk/zigbee2mqtt/archive/refs/tags/${RELEASE}.zip" - unzip -q ${RELEASE}.zip - rm -rf /opt/zigbee2mqtt - mv zigbee2mqtt-${RELEASE} /opt/zigbee2mqtt - rm -rf /opt/zigbee2mqtt/data - mv /opt/z2m_backup/data /opt/zigbee2mqtt - cd /opt/zigbee2mqtt - $STD pnpm install --frozen-lockfile - $STD pnpm build + cd /opt + curl -fsSL "https://github.com/Koenkk/zigbee2mqtt/archive/refs/tags/${RELEASE}.zip" -o $(basename "https://github.com/Koenkk/zigbee2mqtt/archive/refs/tags/${RELEASE}.zip") + unzip -q ${RELEASE}.zip + rm -rf /opt/zigbee2mqtt + mv zigbee2mqtt-${RELEASE} /opt/zigbee2mqtt + rm -rf /opt/zigbee2mqtt/data + mv /opt/z2m_backup/data /opt/zigbee2mqtt + cd /opt/zigbee2mqtt + $STD pnpm install --frozen-lockfile + $STD pnpm build msg_ok "Updated Zigbee2MQTT" msg_info "Starting Service" - systemctl start zigbee2mqtt + systemctl start zigbee2mqtt msg_ok "Started Service" msg_info "Cleaning up" - rm -rf /opt/z2m_backup - rm -rf /opt/${RELEASE}.zip + rm -rf /opt/z2m_backup + rm -rf /opt/${RELEASE}.zip msg_ok "Cleaned up" echo "${RELEASE}" >/opt/${APP}_version.txt else diff --git a/ct/zipline.sh b/ct/zipline.sh index 11a86a390..a5d828bef 100644 --- a/ct/zipline.sh +++ b/ct/zipline.sh @@ -26,13 +26,13 @@ function update_script() { msg_error "No ${APP} Installation Found!" exit fi - if ! command -v pnpm &>/dev/null; then + if ! command -v pnpm &>/dev/null; then msg_info "Installing pnpm" #export NODE_OPTIONS=--openssl-legacy-provider $STD npm install -g pnpm@latest msg_ok "Installed pnpm" fi - RELEASE=$(curl -s https://api.github.com/repos/diced/zipline/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') + RELEASE=$(curl -fsSL https://api.github.com/repos/diced/zipline/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 ${APP}" systemctl stop zipline @@ -41,7 +41,7 @@ function update_script() { msg_info "Updating ${APP} to ${RELEASE}" cp /opt/zipline/.env /opt/ rm -R /opt/zipline - wget -q "https://github.com/diced/zipline/archive/refs/tags/v${RELEASE}.zip" + curl -fsSL "https://github.com/diced/zipline/archive/refs/tags/v${RELEASE}.zip" -o $(basename "https://github.com/diced/zipline/archive/refs/tags/v${RELEASE}.zip") unzip -q v${RELEASE}.zip mv zipline-${RELEASE} /opt/zipline cd /opt/zipline diff --git a/ct/zitadel.sh b/ct/zitadel.sh index f3f99c361..2b0b2ef6b 100644 --- a/ct/zitadel.sh +++ b/ct/zitadel.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2025 community-scripts ORG # Author: dave-yap (dave-yap) # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -20,39 +20,39 @@ color catch_errors function update_script() { - header_info - check_container_storage - check_container_resources - if [[ ! -f /etc/systemd/system/zitadel.service ]]; then - msg_error "No ${APP} Installation Found!" - exit - fi - RELEASE=$(curl -si https://github.com/zitadel/zitadel/releases/latest | grep location: | cut -d '/' -f 8 | tr -d '\r') - if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt | grep -oP '\d+\.\d+\.\d+')" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then - msg_info "Stopping $APP" - systemctl stop zitadel - msg_ok "Stopped $APP" - - msg_info "Updating $APP to ${RELEASE}" - cd /tmp - wget -qc https://github.com/zitadel/zitadel/releases/download/$RELEASE/zitadel-linux-amd64.tar.gz -O - | 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 - echo "${RELEASE}" >/opt/${APP}_version.txt - msg_ok "Updated $APP to ${RELEASE}" - - msg_info "Starting $APP" - systemctl start zitadel - msg_ok "Started $APP" - - msg_info "Cleaning Up" - rm -rf /tmp/zitadel-linux-amd64 - msg_ok "Cleanup Completed" - msg_ok "Update Successful" - else - msg_ok "No update required. ${APP} is already at ${RELEASE}" - fi + header_info + check_container_storage + check_container_resources + if [[ ! -f /etc/systemd/system/zitadel.service ]]; then + msg_error "No ${APP} Installation Found!" exit + fi + RELEASE=$(curl -fsSL https://api.github.com/repos/zitadel/zitadel/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') + if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt | grep -oP '\d+\.\d+\.\d+')" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then + msg_info "Stopping $APP" + systemctl stop zitadel + msg_ok "Stopped $APP" + + msg_info "Updating $APP to ${RELEASE}" + cd /tmp || exit + 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 + echo "${RELEASE}" >/opt/${APP}_version.txt + msg_ok "Updated $APP to ${RELEASE}" + + msg_info "Starting $APP" + systemctl start zitadel + msg_ok "Started $APP" + + msg_info "Cleaning Up" + rm -rf /tmp/zitadel-linux-amd64 + msg_ok "Cleanup Completed" + msg_ok "Update Successful" + else + msg_ok "No update required. ${APP} is already at ${RELEASE}" + fi + exit } start diff --git a/ct/zoraxy.sh b/ct/zoraxy.sh index ee16c7c80..a7029457b 100644 --- a/ct/zoraxy.sh +++ b/ct/zoraxy.sh @@ -27,11 +27,11 @@ function update_script() { msg_error "No ${APP} Installation Found!" exit fi - RELEASE=$(curl -s https://api.github.com/repos/tobychui/zoraxy/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') + RELEASE=$(curl -fsSL https://api.github.com/repos/tobychui/zoraxy/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 zoraxy - wget -q "https://github.com/tobychui/zoraxy/releases/download/${RELEASE}/zoraxy_linux_amd64" + curl -fsSL "https://github.com/tobychui/zoraxy/releases/download/${RELEASE}/zoraxy_linux_amd64" -o $(basename "https://github.com/tobychui/zoraxy/releases/download/${RELEASE}/zoraxy_linux_amd64") rm -rf /opt/zoraxy/zoraxy mv zoraxy_linux_amd64 /opt/zoraxy/zoraxy chmod +x /opt/zoraxy/zoraxy @@ -51,4 +51,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}:8000${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8000${CL}" diff --git a/ct/zwave-js-ui.sh b/ct/zwave-js-ui.sh index 83407d3e1..cd4f844e6 100644 --- a/ct/zwave-js-ui.sh +++ b/ct/zwave-js-ui.sh @@ -27,7 +27,7 @@ function update_script() { msg_error "No ${APP} Installation Found!" exit fi - RELEASE=$(curl -s https://api.github.com/repos/zwave-js/zwave-js-ui/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') + RELEASE=$(curl -fsSL https://api.github.com/repos/zwave-js/zwave-js-ui/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then msg_info "Stopping Service" systemctl stop zwave-js-ui @@ -36,7 +36,7 @@ function update_script() { msg_info "Updating Z-Wave JS UI" rm -rf /opt/zwave-js-ui/* cd /opt/zwave-js-ui - wget -q https://github.com/zwave-js/zwave-js-ui/releases/download/${RELEASE}/zwave-js-ui-${RELEASE}-linux.zip + curl -fsSL "https://github.com/zwave-js/zwave-js-ui/releases/download/${RELEASE}/zwave-js-ui-${RELEASE}-linux.zip" -o $(basename "https://github.com/zwave-js/zwave-js-ui/releases/download/${RELEASE}/zwave-js-ui-${RELEASE}-linux.zip") unzip -q zwave-js-ui-${RELEASE}-linux.zip msg_ok "Updated Z-Wave JS UI" @@ -62,4 +62,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}:8091${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8091${CL}" diff --git a/frontend/package-lock.json b/frontend/package-lock.json index d4d35bfd3..cedcbd1bd 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -9,70 +9,71 @@ "version": "1.0.0", "license": "MIT", "dependencies": { - "@radix-ui/react-accordion": "^1.1.2", - "@radix-ui/react-dialog": "^1.0.5", - "@radix-ui/react-dropdown-menu": "^2.0.6", - "@radix-ui/react-icons": "^1.3.1", - "@radix-ui/react-label": "^2.1.0", - "@radix-ui/react-navigation-menu": "^1.1.4", - "@radix-ui/react-popover": "^1.1.2", - "@radix-ui/react-select": "^2.1.2", - "@radix-ui/react-separator": "^1.1.0", - "@radix-ui/react-slot": "^1.1.0", - "@radix-ui/react-switch": "^1.1.1", - "@radix-ui/react-tabs": "^1.1.0", - "@radix-ui/react-tooltip": "^1.1.2", - "@vercel/analytics": "^1.2.2", - "chart.js": "^4.4.1", + "@radix-ui/react-accordion": "^1.2.3", + "@radix-ui/react-dialog": "^1.1.6", + "@radix-ui/react-dropdown-menu": "^2.1.6", + "@radix-ui/react-icons": "^1.3.2", + "@radix-ui/react-label": "^2.1.2", + "@radix-ui/react-navigation-menu": "^1.2.5", + "@radix-ui/react-popover": "^1.1.6", + "@radix-ui/react-select": "^2.1.6", + "@radix-ui/react-separator": "^1.1.2", + "@radix-ui/react-slot": "^1.1.2", + "@radix-ui/react-switch": "^1.1.3", + "@radix-ui/react-tabs": "^1.1.3", + "@radix-ui/react-tooltip": "^1.1.8", + "@tanstack/react-query": "^5.71.1", + "chart.js": "^4.4.8", "chartjs-plugin-datalabels": "^2.2.0", - "class-variance-authority": "^0.7.0", + "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", - "cmdk": "^1.0.0", + "cmdk": "^1.1.1", "date-fns": "^4.1.0", - "framer-motion": "^11.11.11", - "fuse.js": "^7.0.0", + "framer-motion": "^11.18.2", + "fuse.js": "^7.1.0", "lucide-react": "^0.453.0", "mini-svg-data-uri": "^1.4.4", - "next": "15.2.3", + "next": "15.2.4", "next-themes": "^0.3.0", - "nuqs": "^2.1.1", - "pocketbase": "^0.21.4", + "nuqs": "^2.4.1", + "pocketbase": "^0.21.5", "prettier-plugin-organize-imports": "^4.1.0", - "react": "19.0.0-rc-02c0e824-20241028", + "react": "19.0.0", "react-chartjs-2": "^5.3.0", "react-code-blocks": "^0.1.6", "react-datepicker": "^7.6.0", "react-day-picker": "8.10.1", - "react-dom": "19.0.0-rc-02c0e824-20241028", - "react-icons": "^5.1.0", + "react-dom": "19.0.0", + "react-icons": "^5.5.0", "react-simple-typewriter": "^5.0.1", "sharp": "^0.33.5", - "simple-icons": "^13.5.0", - "sonner": "^1.5.0", - "tailwind-merge": "^2.3.0", - "zod": "^3.23.8" + "simple-icons": "^13.21.0", + "sonner": "^1.7.4", + "tailwind-merge": "^2.6.0", + "zod": "^3.24.2" }, "devDependencies": { + "@tanstack/eslint-plugin-query": "^5.68.0", "@testing-library/dom": "^10.4.0", - "@testing-library/react": "^16.0.1", - "@types/node": "^22", + "@testing-library/react": "^16.2.0", + "@types/node": "^22.13.16", "@types/react": "npm:types-react@19.0.0-rc.1", "@types/react-dom": "npm:types-react-dom@19.0.0-rc.1", - "@typescript-eslint/eslint-plugin": "^8.8.1", - "@typescript-eslint/parser": "^8.8.1", + "@typescript-eslint/eslint-plugin": "^8.29.0", + "@typescript-eslint/parser": "^8.29.0", "@vitejs/plugin-react": "^4.3.4", - "eslint": "^9.13.0", + "eslint": "^9.23.0", "eslint-config-next": "15.0.2", "jsdom": "^25.0.1", - "postcss": "^8", - "prettier": "^3.2.5", - "prettier-plugin-tailwindcss": "^0.6.5", - "tailwindcss": "^3.4.9", + "postcss": "^8.5.3", + "prettier": "^3.5.3", + "prettier-plugin-tailwindcss": "^0.6.11", + "tailwindcss": "^3.4.17", "tailwindcss-animate": "^1.0.7", "tailwindcss-animated": "^1.1.2", - "typescript": "^5", - "vite-tsconfig-paths": "^5.1.3", - "vitest": "^2.1.9" + "typescript": "^5.8.2", + "vite-tsconfig-paths": "^5.1.4", + "vitest": "^3.1.1" } }, "node_modules/@alloc/quick-lru": { @@ -308,27 +309,27 @@ } }, "node_modules/@babel/helpers": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.0.tgz", - "integrity": "sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.0.tgz", + "integrity": "sha512-U5eyP/CTFPuNE3qk+WZMxFkp/4zUzdceQlfzf7DdGdhp+Fezd7HD+i8Y24ZuTMKX3wQBld449jijbGq6OdGNQg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/template": "^7.25.9", - "@babel/types": "^7.26.0" + "@babel/template": "^7.27.0", + "@babel/types": "^7.27.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.26.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.2.tgz", - "integrity": "sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.0.tgz", + "integrity": "sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.26.0" + "@babel/types": "^7.27.0" }, "bin": { "parser": "bin/babel-parser.js" @@ -382,15 +383,15 @@ } }, "node_modules/@babel/template": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.9.tgz", - "integrity": "sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.0.tgz", + "integrity": "sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.25.9", - "@babel/parser": "^7.25.9", - "@babel/types": "^7.25.9" + "@babel/code-frame": "^7.26.2", + "@babel/parser": "^7.27.0", + "@babel/types": "^7.27.0" }, "engines": { "node": ">=6.9.0" @@ -426,9 +427,9 @@ } }, "node_modules/@babel/types": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.0.tgz", - "integrity": "sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.0.tgz", + "integrity": "sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==", "dev": true, "license": "MIT", "dependencies": { @@ -471,9 +472,9 @@ "license": "MIT" }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", - "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.2.tgz", + "integrity": "sha512-wCIboOL2yXZym2cgm6mlA742s9QeJ8DjGVaL39dLN4rRwrOgOyYSnOaFPhKZGLb2ngj4EyfAFjsNJwPXZvseag==", "cpu": [ "ppc64" ], @@ -484,13 +485,13 @@ "aix" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/android-arm": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", - "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.2.tgz", + "integrity": "sha512-NQhH7jFstVY5x8CKbcfa166GoV0EFkaPkCKBQkdPJFvo5u+nGXLEH/ooniLb3QI8Fk58YAx7nsPLozUWfCBOJA==", "cpu": [ "arm" ], @@ -501,13 +502,13 @@ "android" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/android-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", - "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.2.tgz", + "integrity": "sha512-5ZAX5xOmTligeBaeNEPnPaeEuah53Id2tX4c2CVP3JaROTH+j4fnfHCkr1PjXMd78hMst+TlkfKcW/DlTq0i4w==", "cpu": [ "arm64" ], @@ -518,13 +519,13 @@ "android" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/android-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", - "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.2.tgz", + "integrity": "sha512-Ffcx+nnma8Sge4jzddPHCZVRvIfQ0kMsUsCMcJRHkGJ1cDmhe4SsrYIjLUKn1xpHZybmOqCWwB0zQvsjdEHtkg==", "cpu": [ "x64" ], @@ -535,13 +536,13 @@ "android" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", - "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.2.tgz", + "integrity": "sha512-MpM6LUVTXAzOvN4KbjzU/q5smzryuoNjlriAIx+06RpecwCkL9JpenNzpKd2YMzLJFOdPqBpuub6eVRP5IgiSA==", "cpu": [ "arm64" ], @@ -552,13 +553,13 @@ "darwin" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", - "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.2.tgz", + "integrity": "sha512-5eRPrTX7wFyuWe8FqEFPG2cU0+butQQVNcT4sVipqjLYQjjh8a8+vUTfgBKM88ObB85ahsnTwF7PSIt6PG+QkA==", "cpu": [ "x64" ], @@ -569,13 +570,13 @@ "darwin" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", - "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.2.tgz", + "integrity": "sha512-mLwm4vXKiQ2UTSX4+ImyiPdiHjiZhIaE9QvC7sw0tZ6HoNMjYAqQpGyui5VRIi5sGd+uWq940gdCbY3VLvsO1w==", "cpu": [ "arm64" ], @@ -586,13 +587,13 @@ "freebsd" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", - "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.2.tgz", + "integrity": "sha512-6qyyn6TjayJSwGpm8J9QYYGQcRgc90nmfdUb0O7pp1s4lTY+9D0H9O02v5JqGApUyiHOtkz6+1hZNvNtEhbwRQ==", "cpu": [ "x64" ], @@ -603,13 +604,13 @@ "freebsd" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-arm": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", - "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.2.tgz", + "integrity": "sha512-UHBRgJcmjJv5oeQF8EpTRZs/1knq6loLxTsjc3nxO9eXAPDLcWW55flrMVc97qFPbmZP31ta1AZVUKQzKTzb0g==", "cpu": [ "arm" ], @@ -620,13 +621,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", - "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.2.tgz", + "integrity": "sha512-gq/sjLsOyMT19I8obBISvhoYiZIAaGF8JpeXu1u8yPv8BE5HlWYobmlsfijFIZ9hIVGYkbdFhEqC0NvM4kNO0g==", "cpu": [ "arm64" ], @@ -637,13 +638,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", - "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.2.tgz", + "integrity": "sha512-bBYCv9obgW2cBP+2ZWfjYTU+f5cxRoGGQ5SeDbYdFCAZpYWrfjjfYwvUpP8MlKbP0nwZ5gyOU/0aUzZ5HWPuvQ==", "cpu": [ "ia32" ], @@ -654,13 +655,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", - "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.2.tgz", + "integrity": "sha512-SHNGiKtvnU2dBlM5D8CXRFdd+6etgZ9dXfaPCeJtz+37PIUlixvlIhI23L5khKXs3DIzAn9V8v+qb1TRKrgT5w==", "cpu": [ "loong64" ], @@ -671,13 +672,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", - "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.2.tgz", + "integrity": "sha512-hDDRlzE6rPeoj+5fsADqdUZl1OzqDYow4TB4Y/3PlKBD0ph1e6uPHzIQcv2Z65u2K0kpeByIyAjCmjn1hJgG0Q==", "cpu": [ "mips64el" ], @@ -688,13 +689,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", - "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.2.tgz", + "integrity": "sha512-tsHu2RRSWzipmUi9UBDEzc0nLc4HtpZEI5Ba+Omms5456x5WaNuiG3u7xh5AO6sipnJ9r4cRWQB2tUjPyIkc6g==", "cpu": [ "ppc64" ], @@ -705,13 +706,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", - "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.2.tgz", + "integrity": "sha512-k4LtpgV7NJQOml/10uPU0s4SAXGnowi5qBSjaLWMojNCUICNu7TshqHLAEbkBdAszL5TabfvQ48kK84hyFzjnw==", "cpu": [ "riscv64" ], @@ -722,13 +723,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", - "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.2.tgz", + "integrity": "sha512-GRa4IshOdvKY7M/rDpRR3gkiTNp34M0eLTaC1a08gNrh4u488aPhuZOCpkF6+2wl3zAN7L7XIpOFBhnaE3/Q8Q==", "cpu": [ "s390x" ], @@ -739,13 +740,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", - "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.2.tgz", + "integrity": "sha512-QInHERlqpTTZ4FRB0fROQWXcYRD64lAoiegezDunLpalZMjcUcld3YzZmVJ2H/Cp0wJRZ8Xtjtj0cEHhYc/uUg==", "cpu": [ "x64" ], @@ -756,13 +757,30 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.2.tgz", + "integrity": "sha512-talAIBoY5M8vHc6EeI2WW9d/CkiO9MQJ0IOWX8hrLhxGbro/vBXJvaQXefW2cP0z0nQVTdQ/eNyGFV1GSKrxfw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", - "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.2.tgz", + "integrity": "sha512-voZT9Z+tpOxrvfKFyfDYPc4DO4rk06qamv1a/fkuzHpiVBMOhpjK+vBmWM8J1eiB3OLSMFYNaOaBNLXGChf5tg==", "cpu": [ "x64" ], @@ -773,13 +791,30 @@ "netbsd" ], "engines": { - "node": ">=12" + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.2.tgz", + "integrity": "sha512-dcXYOC6NXOqcykeDlwId9kB6OkPUxOEqU+rkrYVqJbK2hagWOMrsTGsMr8+rW02M+d5Op5NNlgMmjzecaRf7Tg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", - "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.2.tgz", + "integrity": "sha512-t/TkWwahkH0Tsgoq1Ju7QfgGhArkGLkF1uYz8nQS/PPFlXbP5YgRpqQR3ARRiC2iXoLTWFxc6DJMSK10dVXluw==", "cpu": [ "x64" ], @@ -790,13 +825,13 @@ "openbsd" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", - "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.2.tgz", + "integrity": "sha512-cfZH1co2+imVdWCjd+D1gf9NjkchVhhdpgb1q5y6Hcv9TP6Zi9ZG/beI3ig8TvwT9lH9dlxLq5MQBBgwuj4xvA==", "cpu": [ "x64" ], @@ -807,13 +842,13 @@ "sunos" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", - "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.2.tgz", + "integrity": "sha512-7Loyjh+D/Nx/sOTzV8vfbB3GJuHdOQyrOryFdZvPHLf42Tk9ivBU5Aedi7iyX+x6rbn2Mh68T4qq1SDqJBQO5Q==", "cpu": [ "arm64" ], @@ -824,13 +859,13 @@ "win32" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", - "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.2.tgz", + "integrity": "sha512-WRJgsz9un0nqZJ4MfhabxaD9Ft8KioqU3JMinOTvobbX6MOSUigSBlogP8QB3uxpJDsFS6yN+3FDBdqE5lg9kg==", "cpu": [ "ia32" ], @@ -841,13 +876,13 @@ "win32" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/win32-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", - "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.2.tgz", + "integrity": "sha512-kM3HKb16VIXZyIeVrM1ygYmZBKybX8N4p754bw390wGO3Tf2j4L2/WYL+4suWujpgf6GBYs3jv7TyUivdd05JA==", "cpu": [ "x64" ], @@ -858,7 +893,7 @@ "win32" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@eslint-community/eslint-utils": { @@ -891,13 +926,13 @@ } }, "node_modules/@eslint/config-array": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.18.0.tgz", - "integrity": "sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==", + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.19.2.tgz", + "integrity": "sha512-GNKqxfHG2ySmJOBSHg7LxeUx4xpuCoFjacmlCoYWEbaPXLwvfIjixRI12xCQZeULksQb23uiA8F40w5TojpV7w==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@eslint/object-schema": "^2.1.4", + "@eslint/object-schema": "^2.1.6", "debug": "^4.3.1", "minimatch": "^3.1.2" }, @@ -929,20 +964,33 @@ "node": "*" } }, - "node_modules/@eslint/core": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.7.0.tgz", - "integrity": "sha512-xp5Jirz5DyPYlPiKat8jaq0EmYvDXKKpzTbxXMpT9eqlRJkRKIz9AGMdlvYjih+im+QlhWrpvVjl8IPC/lHlUw==", + "node_modules/@eslint/config-helpers": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.2.0.tgz", + "integrity": "sha512-yJLLmLexii32mGrhW29qvU3QBVTu0GUmEf/J4XsBtVhp4JkIUFN/BjWqTF63yRvGApIDpZm5fa97LtYtINmfeQ==", "dev": true, "license": "Apache-2.0", "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, + "node_modules/@eslint/core": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.12.0.tgz", + "integrity": "sha512-cmrR6pytBuSMTaBweKoGMwu3EiHiEC+DoyupPmlZ0HxBJBtIxwe+j/E4XPIKNx+Q74c8lXKPwYawBf5glsTkHg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, "node_modules/@eslint/eslintrc": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.1.0.tgz", - "integrity": "sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", + "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", "dev": true, "license": "MIT", "dependencies": { @@ -988,9 +1036,9 @@ } }, "node_modules/@eslint/js": { - "version": "9.13.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.13.0.tgz", - "integrity": "sha512-IFLyoY4d72Z5y/6o/BazFBezupzI/taV8sGumxTAVw3lXG9A6md1Dc34T9s1FoD/an9pJH8RHbAxsaEbBed9lA==", + "version": "9.23.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.23.0.tgz", + "integrity": "sha512-35MJ8vCPU0ZMxo7zfev2pypqTwWTofFZO6m4KAtdoFhRpLJUpHTZZ+KB3C7Hb1d7bULYwO4lJXGCi5Se+8OMbw==", "dev": true, "license": "MIT", "engines": { @@ -998,9 +1046,9 @@ } }, "node_modules/@eslint/object-schema": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.4.tgz", - "integrity": "sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==", + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz", + "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==", "dev": true, "license": "Apache-2.0", "engines": { @@ -1008,12 +1056,13 @@ } }, "node_modules/@eslint/plugin-kit": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.2.tgz", - "integrity": "sha512-CXtq5nR4Su+2I47WPOlWud98Y5Lv8Kyxp2ukhgFx/eW6Blm18VXJO5WuQylPugRo8nbluoi6GvvxBLqHcvqUUw==", + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.7.tgz", + "integrity": "sha512-JubJ5B2pJ4k4yGxaNLdbjrnk9d/iDz6/q8wOilpIowd6PJPgaxCuHBnBszq7Ce2TyMrywm5r4PnKm6V3iiZF+g==", "dev": true, "license": "Apache-2.0", "dependencies": { + "@eslint/core": "^0.12.0", "levn": "^0.4.1" }, "engines": { @@ -1549,9 +1598,9 @@ "license": "MIT" }, "node_modules/@next/env": { - "version": "15.2.3", - "resolved": "https://registry.npmjs.org/@next/env/-/env-15.2.3.tgz", - "integrity": "sha512-a26KnbW9DFEUsSxAxKBORR/uD9THoYoKbkpFywMN/AFvboTt94b8+g/07T8J6ACsdLag8/PDU60ov4rPxRAixw==", + "version": "15.2.4", + "resolved": "https://registry.npmjs.org/@next/env/-/env-15.2.4.tgz", + "integrity": "sha512-+SFtMgoiYP3WoSswuNmxJOCwi06TdWE733D+WPjpXIe4LXGULwEaofiiAy6kbS0+XjM5xF5n3lKuBwN2SnqD9g==", "license": "MIT" }, "node_modules/@next/eslint-plugin-next": { @@ -1595,9 +1644,9 @@ } }, "node_modules/@next/swc-darwin-arm64": { - "version": "15.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.2.3.tgz", - "integrity": "sha512-uaBhA8aLbXLqwjnsHSkxs353WrRgQgiFjduDpc7YXEU0B54IKx3vU+cxQlYwPCyC8uYEEX7THhtQQsfHnvv8dw==", + "version": "15.2.4", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.2.4.tgz", + "integrity": "sha512-1AnMfs655ipJEDC/FHkSr0r3lXBgpqKo4K1kiwfUf3iE68rDFXZ1TtHdMvf7D0hMItgDZ7Vuq3JgNMbt/+3bYw==", "cpu": [ "arm64" ], @@ -1611,9 +1660,9 @@ } }, "node_modules/@next/swc-darwin-x64": { - "version": "15.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.2.3.tgz", - "integrity": "sha512-pVwKvJ4Zk7h+4hwhqOUuMx7Ib02u3gDX3HXPKIShBi9JlYllI0nU6TWLbPT94dt7FSi6mSBhfc2JrHViwqbOdw==", + "version": "15.2.4", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.2.4.tgz", + "integrity": "sha512-3qK2zb5EwCwxnO2HeO+TRqCubeI/NgCe+kL5dTJlPldV/uwCnUgC7VbEzgmxbfrkbjehL4H9BPztWOEtsoMwew==", "cpu": [ "x64" ], @@ -1627,9 +1676,9 @@ } }, "node_modules/@next/swc-linux-arm64-gnu": { - "version": "15.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.2.3.tgz", - "integrity": "sha512-50ibWdn2RuFFkOEUmo9NCcQbbV9ViQOrUfG48zHBCONciHjaUKtHcYFiCwBVuzD08fzvzkWuuZkd4AqbvKO7UQ==", + "version": "15.2.4", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.2.4.tgz", + "integrity": "sha512-HFN6GKUcrTWvem8AZN7tT95zPb0GUGv9v0d0iyuTb303vbXkkbHDp/DxufB04jNVD+IN9yHy7y/6Mqq0h0YVaQ==", "cpu": [ "arm64" ], @@ -1643,9 +1692,9 @@ } }, "node_modules/@next/swc-linux-arm64-musl": { - "version": "15.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.2.3.tgz", - "integrity": "sha512-2gAPA7P652D3HzR4cLyAuVYwYqjG0mt/3pHSWTCyKZq/N/dJcUAEoNQMyUmwTZWCJRKofB+JPuDVP2aD8w2J6Q==", + "version": "15.2.4", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.2.4.tgz", + "integrity": "sha512-Oioa0SORWLwi35/kVB8aCk5Uq+5/ZIumMK1kJV+jSdazFm2NzPDztsefzdmzzpx5oGCJ6FkUC7vkaUseNTStNA==", "cpu": [ "arm64" ], @@ -1659,9 +1708,9 @@ } }, "node_modules/@next/swc-linux-x64-gnu": { - "version": "15.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.2.3.tgz", - "integrity": "sha512-ODSKvrdMgAJOVU4qElflYy1KSZRM3M45JVbeZu42TINCMG3anp7YCBn80RkISV6bhzKwcUqLBAmOiWkaGtBA9w==", + "version": "15.2.4", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.2.4.tgz", + "integrity": "sha512-yb5WTRaHdkgOqFOZiu6rHV1fAEK0flVpaIN2HB6kxHVSy/dIajWbThS7qON3W9/SNOH2JWkVCyulgGYekMePuw==", "cpu": [ "x64" ], @@ -1675,9 +1724,9 @@ } }, "node_modules/@next/swc-linux-x64-musl": { - "version": "15.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.2.3.tgz", - "integrity": "sha512-ZR9kLwCWrlYxwEoytqPi1jhPd1TlsSJWAc+H/CJHmHkf2nD92MQpSRIURR1iNgA/kuFSdxB8xIPt4p/T78kwsg==", + "version": "15.2.4", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.2.4.tgz", + "integrity": "sha512-Dcdv/ix6srhkM25fgXiyOieFUkz+fOYkHlydWCtB0xMST6X9XYI3yPDKBZt1xuhOytONsIFJFB08xXYsxUwJLw==", "cpu": [ "x64" ], @@ -1691,9 +1740,9 @@ } }, "node_modules/@next/swc-win32-arm64-msvc": { - "version": "15.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.2.3.tgz", - "integrity": "sha512-+G2FrDcfm2YDbhDiObDU/qPriWeiz/9cRR0yMWJeTLGGX6/x8oryO3tt7HhodA1vZ8r2ddJPCjtLcpaVl7TE2Q==", + "version": "15.2.4", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.2.4.tgz", + "integrity": "sha512-dW0i7eukvDxtIhCYkMrZNQfNicPDExt2jPb9AZPpL7cfyUo7QSNl1DjsHjmmKp6qNAqUESyT8YFl/Aw91cNJJg==", "cpu": [ "arm64" ], @@ -1707,9 +1756,9 @@ } }, "node_modules/@next/swc-win32-x64-msvc": { - "version": "15.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.2.3.tgz", - "integrity": "sha512-gHYS9tc+G2W0ZC8rBL+H6RdtXIyk40uLiaos0yj5US85FNhbFEndMA2nW3z47nzOWiSvXTZ5kBClc3rD0zJg0w==", + "version": "15.2.4", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.2.4.tgz", + "integrity": "sha512-SbnWkJmkS7Xl3kre8SdMF6F/XDh1DTFEhp0jRTj/uB8iPKoU2bb2NDfcu+iifv1+mxQEd1g2vvSxcZbXSKyWiQ==", "cpu": [ "x64" ], @@ -1788,25 +1837,25 @@ "license": "MIT" }, "node_modules/@radix-ui/primitive": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.0.tgz", - "integrity": "sha512-4Z8dn6Upk0qk4P74xBhZ6Hd/w0mPEzOOLxy4xiPXOXqjF7jZS0VAKk7/x/H6FyY2zCkYJqePf1G5KmkmNJ4RBA==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.1.tgz", + "integrity": "sha512-SJ31y+Q/zAyShtXJc8x83i9TYdbAfHZ++tUZnvjJJqFjzsdUnKsxPL6IEtBlxKkU7yzer//GQtZSV4GbldL3YA==", "license": "MIT" }, "node_modules/@radix-ui/react-accordion": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-accordion/-/react-accordion-1.2.1.tgz", - "integrity": "sha512-bg/l7l5QzUjgsh8kjwDFommzAshnUsuVMV5NM56QVCm+7ZckYdd9P/ExR8xG/Oup0OajVxNLaHJ1tb8mXk+nzQ==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-accordion/-/react-accordion-1.2.3.tgz", + "integrity": "sha512-RIQ15mrcvqIkDARJeERSuXSry2N8uYnxkdDetpfmalT/+0ntOXLkFOsh9iwlAsCv+qcmhZjbdJogIm6WBa6c4A==", "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.0", - "@radix-ui/react-collapsible": "1.1.1", - "@radix-ui/react-collection": "1.1.0", - "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/primitive": "1.1.1", + "@radix-ui/react-collapsible": "1.1.3", + "@radix-ui/react-collection": "1.1.2", + "@radix-ui/react-compose-refs": "1.1.1", "@radix-ui/react-context": "1.1.1", "@radix-ui/react-direction": "1.1.0", "@radix-ui/react-id": "1.1.0", - "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-primitive": "2.0.2", "@radix-ui/react-use-controllable-state": "1.1.0" }, "peerDependencies": { @@ -1825,12 +1874,12 @@ } }, "node_modules/@radix-ui/react-arrow": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.1.0.tgz", - "integrity": "sha512-FmlW1rCg7hBpEBwFbjHwCW6AmWLQM6g/v0Sn8XbP9NvmSZ2San1FpQeyPtufzOMSIx7Y4dzjlHoifhp+7NkZhw==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.1.2.tgz", + "integrity": "sha512-G+KcpzXHq24iH0uGG/pF8LyzpFJYGD4RfLjCIBfGdSLXvjLHST31RUiRVrupIBMvIppMgSzQ6l66iAxl03tdlg==", "license": "MIT", "dependencies": { - "@radix-ui/react-primitive": "2.0.0" + "@radix-ui/react-primitive": "2.0.2" }, "peerDependencies": { "@types/react": "*", @@ -1848,17 +1897,17 @@ } }, "node_modules/@radix-ui/react-collapsible": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-collapsible/-/react-collapsible-1.1.1.tgz", - "integrity": "sha512-1///SnrfQHJEofLokyczERxQbWfCGQlQ2XsCZMucVs6it+lq9iw4vXy+uDn1edlb58cOZOWSldnfPAYcT4O/Yg==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-collapsible/-/react-collapsible-1.1.3.tgz", + "integrity": "sha512-jFSerheto1X03MUC0g6R7LedNW9EEGWdg9W1+MlpkMLwGkgkbUXLPBH/KIuWKXUoeYRVY11llqbTBDzuLg7qrw==", "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.0", - "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/primitive": "1.1.1", + "@radix-ui/react-compose-refs": "1.1.1", "@radix-ui/react-context": "1.1.1", "@radix-ui/react-id": "1.1.0", - "@radix-ui/react-presence": "1.1.1", - "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-presence": "1.1.2", + "@radix-ui/react-primitive": "2.0.2", "@radix-ui/react-use-controllable-state": "1.1.0", "@radix-ui/react-use-layout-effect": "1.1.0" }, @@ -1878,15 +1927,15 @@ } }, "node_modules/@radix-ui/react-collection": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.0.tgz", - "integrity": "sha512-GZsZslMJEyo1VKm5L1ZJY8tGDxZNPAoUeQUIbKeJfoi7Q4kmig5AsgLMYYuyYbfjd8fBmFORAIwYAkXMnXZgZw==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.2.tgz", + "integrity": "sha512-9z54IEKRxIa9VityapoEYMuByaG42iSy1ZXlY2KcuLSEtq8x4987/N6m15ppoMffgZX72gER2uHe1D9Y6Unlcw==", "license": "MIT", "dependencies": { - "@radix-ui/react-compose-refs": "1.1.0", - "@radix-ui/react-context": "1.1.0", - "@radix-ui/react-primitive": "2.0.0", - "@radix-ui/react-slot": "1.1.0" + "@radix-ui/react-compose-refs": "1.1.1", + "@radix-ui/react-context": "1.1.1", + "@radix-ui/react-primitive": "2.0.2", + "@radix-ui/react-slot": "1.1.2" }, "peerDependencies": { "@types/react": "*", @@ -1903,25 +1952,10 @@ } } }, - "node_modules/@radix-ui/react-collection/node_modules/@radix-ui/react-context": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.0.tgz", - "integrity": "sha512-OKrckBy+sMEgYM/sMmqmErVn0kZqrHPJze+Ql3DzYsDDp0hl0L62nx/2122/Bvps1qz645jlcu2tD9lrRSdf8A==", - "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, "node_modules/@radix-ui/react-compose-refs": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.0.tgz", - "integrity": "sha512-b4inOtiaOnYf9KWyO3jAeeCG6FeyfY6ldiEPanbUjWd+xIk5wZeHa8yVwmrJ2vderhu/BQvzCrJI0lHd+wIiqw==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.1.tgz", + "integrity": "sha512-Y9VzoRDSJtgFMUCoiZBDVo084VQ5hfpXxVE+NgkdNsjiDBByiImMZKKhxMwCbdHvhlENG6a833CbFkOQvTricw==", "license": "MIT", "peerDependencies": { "@types/react": "*", @@ -1949,25 +1983,25 @@ } }, "node_modules/@radix-ui/react-dialog": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.1.2.tgz", - "integrity": "sha512-Yj4dZtqa2o+kG61fzB0H2qUvmwBA2oyQroGLyNtBj1beo1khoQ3q1a2AO8rrQYjd8256CO9+N8L9tvsS+bnIyA==", + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.1.6.tgz", + "integrity": "sha512-/IVhJV5AceX620DUJ4uYVMymzsipdKBzo3edo+omeskCKGm9FRHM0ebIdbPnlQVJqyuHbuBltQUOG2mOTq2IYw==", "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.0", - "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/primitive": "1.1.1", + "@radix-ui/react-compose-refs": "1.1.1", "@radix-ui/react-context": "1.1.1", - "@radix-ui/react-dismissable-layer": "1.1.1", + "@radix-ui/react-dismissable-layer": "1.1.5", "@radix-ui/react-focus-guards": "1.1.1", - "@radix-ui/react-focus-scope": "1.1.0", + "@radix-ui/react-focus-scope": "1.1.2", "@radix-ui/react-id": "1.1.0", - "@radix-ui/react-portal": "1.1.2", - "@radix-ui/react-presence": "1.1.1", - "@radix-ui/react-primitive": "2.0.0", - "@radix-ui/react-slot": "1.1.0", + "@radix-ui/react-portal": "1.1.4", + "@radix-ui/react-presence": "1.1.2", + "@radix-ui/react-primitive": "2.0.2", + "@radix-ui/react-slot": "1.1.2", "@radix-ui/react-use-controllable-state": "1.1.0", - "aria-hidden": "^1.1.1", - "react-remove-scroll": "2.6.0" + "aria-hidden": "^1.2.4", + "react-remove-scroll": "^2.6.3" }, "peerDependencies": { "@types/react": "*", @@ -2000,14 +2034,14 @@ } }, "node_modules/@radix-ui/react-dismissable-layer": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.1.tgz", - "integrity": "sha512-QSxg29lfr/xcev6kSz7MAlmDnzbP1eI/Dwn3Tp1ip0KT5CUELsxkekFEMVBEoykI3oV39hKT4TKZzBNMbcTZYQ==", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.5.tgz", + "integrity": "sha512-E4TywXY6UsXNRhFrECa5HAvE5/4BFcGyfTyK36gP+pAW1ed7UTK4vKwdr53gAJYwqbfCWC6ATvJa3J3R/9+Qrg==", "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.0", - "@radix-ui/react-compose-refs": "1.1.0", - "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/primitive": "1.1.1", + "@radix-ui/react-compose-refs": "1.1.1", + "@radix-ui/react-primitive": "2.0.2", "@radix-ui/react-use-callback-ref": "1.1.0", "@radix-ui/react-use-escape-keydown": "1.1.0" }, @@ -2027,17 +2061,17 @@ } }, "node_modules/@radix-ui/react-dropdown-menu": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-2.1.2.tgz", - "integrity": "sha512-GVZMR+eqK8/Kes0a36Qrv+i20bAPXSn8rCBTHx30w+3ECnR5o3xixAlqcVaYvLeyKUsm0aqyhWfmUcqufM8nYA==", + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-2.1.6.tgz", + "integrity": "sha512-no3X7V5fD487wab/ZYSHXq3H37u4NVeLDKI/Ks724X/eEFSSEFYZxWgsIlr1UBeEyDaM29HM5x9p1Nv8DuTYPA==", "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.0", - "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/primitive": "1.1.1", + "@radix-ui/react-compose-refs": "1.1.1", "@radix-ui/react-context": "1.1.1", "@radix-ui/react-id": "1.1.0", - "@radix-ui/react-menu": "2.1.2", - "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-menu": "2.1.6", + "@radix-ui/react-primitive": "2.0.2", "@radix-ui/react-use-controllable-state": "1.1.0" }, "peerDependencies": { @@ -2071,13 +2105,13 @@ } }, "node_modules/@radix-ui/react-focus-scope": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.0.tgz", - "integrity": "sha512-200UD8zylvEyL8Bx+z76RJnASR2gRMuxlgFCPAe/Q/679a/r0eK3MBVYMb7vZODZcffZBdob1EGnky78xmVvcA==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.2.tgz", + "integrity": "sha512-zxwE80FCU7lcXUGWkdt6XpTTCKPitG1XKOwViTxHVKIJhZl9MvIl2dVHeZENCWD9+EdWv05wlaEkRXUykU27RA==", "license": "MIT", "dependencies": { - "@radix-ui/react-compose-refs": "1.1.0", - "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-compose-refs": "1.1.1", + "@radix-ui/react-primitive": "2.0.2", "@radix-ui/react-use-callback-ref": "1.1.0" }, "peerDependencies": { @@ -2096,11 +2130,12 @@ } }, "node_modules/@radix-ui/react-icons": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-icons/-/react-icons-1.3.1.tgz", - "integrity": "sha512-QvYompk0X+8Yjlo/Fv4McrzxohDdM5GgLHyQcPpcsPvlOSXCGFjdbuyGL5dzRbg0GpknAjQJJZzdiRK7iWVuFQ==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-icons/-/react-icons-1.3.2.tgz", + "integrity": "sha512-fyQIhGDhzfc9pK2kH6Pl9c4BDJGfMkPqkyIgYDthyNYoNg3wVhoJMMh19WS4Up/1KMPFVpNsT2q3WmXn2N1m6g==", + "license": "MIT", "peerDependencies": { - "react": "^16.x || ^17.x || ^18.x || ^19.x" + "react": "^16.x || ^17.x || ^18.x || ^19.0.0 || ^19.0.0-rc" } }, "node_modules/@radix-ui/react-id": { @@ -2122,12 +2157,12 @@ } }, "node_modules/@radix-ui/react-label": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-label/-/react-label-2.1.0.tgz", - "integrity": "sha512-peLblDlFw/ngk3UWq0VnYaOLy6agTZZ+MUO/WhVfm14vJGML+xH4FAl2XQGLqdefjNb7ApRg6Yn7U42ZhmYXdw==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-label/-/react-label-2.1.2.tgz", + "integrity": "sha512-zo1uGMTaNlHehDyFQcDZXRJhUPDuukcnHz0/jnrup0JA6qL+AFpAnty+7VKa9esuU5xTblAZzTGYJKSKaBxBhw==", "license": "MIT", "dependencies": { - "@radix-ui/react-primitive": "2.0.0" + "@radix-ui/react-primitive": "2.0.2" }, "peerDependencies": { "@types/react": "*", @@ -2145,29 +2180,29 @@ } }, "node_modules/@radix-ui/react-menu": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-menu/-/react-menu-2.1.2.tgz", - "integrity": "sha512-lZ0R4qR2Al6fZ4yCCZzu/ReTFrylHFxIqy7OezIpWF4bL0o9biKo0pFIvkaew3TyZ9Fy5gYVrR5zCGZBVbO1zg==", + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@radix-ui/react-menu/-/react-menu-2.1.6.tgz", + "integrity": "sha512-tBBb5CXDJW3t2mo9WlO7r6GTmWV0F0uzHZVFmlRmYpiSK1CDU5IKojP1pm7oknpBOrFZx/YgBRW9oorPO2S/Lg==", "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.0", - "@radix-ui/react-collection": "1.1.0", - "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/primitive": "1.1.1", + "@radix-ui/react-collection": "1.1.2", + "@radix-ui/react-compose-refs": "1.1.1", "@radix-ui/react-context": "1.1.1", "@radix-ui/react-direction": "1.1.0", - "@radix-ui/react-dismissable-layer": "1.1.1", + "@radix-ui/react-dismissable-layer": "1.1.5", "@radix-ui/react-focus-guards": "1.1.1", - "@radix-ui/react-focus-scope": "1.1.0", + "@radix-ui/react-focus-scope": "1.1.2", "@radix-ui/react-id": "1.1.0", - "@radix-ui/react-popper": "1.2.0", - "@radix-ui/react-portal": "1.1.2", - "@radix-ui/react-presence": "1.1.1", - "@radix-ui/react-primitive": "2.0.0", - "@radix-ui/react-roving-focus": "1.1.0", - "@radix-ui/react-slot": "1.1.0", + "@radix-ui/react-popper": "1.2.2", + "@radix-ui/react-portal": "1.1.4", + "@radix-ui/react-presence": "1.1.2", + "@radix-ui/react-primitive": "2.0.2", + "@radix-ui/react-roving-focus": "1.1.2", + "@radix-ui/react-slot": "1.1.2", "@radix-ui/react-use-callback-ref": "1.1.0", - "aria-hidden": "^1.1.1", - "react-remove-scroll": "2.6.0" + "aria-hidden": "^1.2.4", + "react-remove-scroll": "^2.6.3" }, "peerDependencies": { "@types/react": "*", @@ -2185,25 +2220,25 @@ } }, "node_modules/@radix-ui/react-navigation-menu": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-navigation-menu/-/react-navigation-menu-1.2.1.tgz", - "integrity": "sha512-egDo0yJD2IK8L17gC82vptkvW1jLeni1VuqCyzY727dSJdk5cDjINomouLoNk8RVF7g2aNIfENKWL4UzeU9c8Q==", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@radix-ui/react-navigation-menu/-/react-navigation-menu-1.2.5.tgz", + "integrity": "sha512-myMHHQUZ3ZLTi8W381/Vu43Ia0NqakkQZ2vzynMmTUtQQ9kNkjzhOwkZC9TAM5R07OZUVIQyHC06f/9JZJpvvA==", "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.0", - "@radix-ui/react-collection": "1.1.0", - "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/primitive": "1.1.1", + "@radix-ui/react-collection": "1.1.2", + "@radix-ui/react-compose-refs": "1.1.1", "@radix-ui/react-context": "1.1.1", "@radix-ui/react-direction": "1.1.0", - "@radix-ui/react-dismissable-layer": "1.1.1", + "@radix-ui/react-dismissable-layer": "1.1.5", "@radix-ui/react-id": "1.1.0", - "@radix-ui/react-presence": "1.1.1", - "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-presence": "1.1.2", + "@radix-ui/react-primitive": "2.0.2", "@radix-ui/react-use-callback-ref": "1.1.0", "@radix-ui/react-use-controllable-state": "1.1.0", "@radix-ui/react-use-layout-effect": "1.1.0", "@radix-ui/react-use-previous": "1.1.0", - "@radix-ui/react-visually-hidden": "1.1.0" + "@radix-ui/react-visually-hidden": "1.1.2" }, "peerDependencies": { "@types/react": "*", @@ -2221,26 +2256,26 @@ } }, "node_modules/@radix-ui/react-popover": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-popover/-/react-popover-1.1.2.tgz", - "integrity": "sha512-u2HRUyWW+lOiA2g0Le0tMmT55FGOEWHwPFt1EPfbLly7uXQExFo5duNKqG2DzmFXIdqOeNd+TpE8baHWJCyP9w==", + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/@radix-ui/react-popover/-/react-popover-1.1.6.tgz", + "integrity": "sha512-NQouW0x4/GnkFJ/pRqsIS3rM/k97VzKnVb2jB7Gq7VEGPy5g7uNV1ykySFt7eWSp3i2uSGFwaJcvIRJBAHmmFg==", "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.0", - "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/primitive": "1.1.1", + "@radix-ui/react-compose-refs": "1.1.1", "@radix-ui/react-context": "1.1.1", - "@radix-ui/react-dismissable-layer": "1.1.1", + "@radix-ui/react-dismissable-layer": "1.1.5", "@radix-ui/react-focus-guards": "1.1.1", - "@radix-ui/react-focus-scope": "1.1.0", + "@radix-ui/react-focus-scope": "1.1.2", "@radix-ui/react-id": "1.1.0", - "@radix-ui/react-popper": "1.2.0", - "@radix-ui/react-portal": "1.1.2", - "@radix-ui/react-presence": "1.1.1", - "@radix-ui/react-primitive": "2.0.0", - "@radix-ui/react-slot": "1.1.0", + "@radix-ui/react-popper": "1.2.2", + "@radix-ui/react-portal": "1.1.4", + "@radix-ui/react-presence": "1.1.2", + "@radix-ui/react-primitive": "2.0.2", + "@radix-ui/react-slot": "1.1.2", "@radix-ui/react-use-controllable-state": "1.1.0", - "aria-hidden": "^1.1.1", - "react-remove-scroll": "2.6.0" + "aria-hidden": "^1.2.4", + "react-remove-scroll": "^2.6.3" }, "peerDependencies": { "@types/react": "*", @@ -2258,16 +2293,16 @@ } }, "node_modules/@radix-ui/react-popper": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.2.0.tgz", - "integrity": "sha512-ZnRMshKF43aBxVWPWvbj21+7TQCvhuULWJ4gNIKYpRlQt5xGRhLx66tMp8pya2UkGHTSlhpXwmjqltDYHhw7Vg==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.2.2.tgz", + "integrity": "sha512-Rvqc3nOpwseCyj/rgjlJDYAgyfw7OC1tTkKn2ivhaMGcYt8FSBlahHOZak2i3QwkRXUXgGgzeEe2RuqeEHuHgA==", "license": "MIT", "dependencies": { "@floating-ui/react-dom": "^2.0.0", - "@radix-ui/react-arrow": "1.1.0", - "@radix-ui/react-compose-refs": "1.1.0", - "@radix-ui/react-context": "1.1.0", - "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-arrow": "1.1.2", + "@radix-ui/react-compose-refs": "1.1.1", + "@radix-ui/react-context": "1.1.1", + "@radix-ui/react-primitive": "2.0.2", "@radix-ui/react-use-callback-ref": "1.1.0", "@radix-ui/react-use-layout-effect": "1.1.0", "@radix-ui/react-use-rect": "1.1.0", @@ -2289,28 +2324,13 @@ } } }, - "node_modules/@radix-ui/react-popper/node_modules/@radix-ui/react-context": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.0.tgz", - "integrity": "sha512-OKrckBy+sMEgYM/sMmqmErVn0kZqrHPJze+Ql3DzYsDDp0hl0L62nx/2122/Bvps1qz645jlcu2tD9lrRSdf8A==", - "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, "node_modules/@radix-ui/react-portal": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.2.tgz", - "integrity": "sha512-WeDYLGPxJb/5EGBoedyJbT0MpoULmwnIPMJMSldkuiMsBAv7N1cRdsTWZWht9vpPOiN3qyiGAtbK2is47/uMFg==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.4.tgz", + "integrity": "sha512-sn2O9k1rPFYVyKd5LAJfo96JlSGVFpa1fS6UuBJfrZadudiw5tAmru+n1x7aMRQ84qDM71Zh1+SzK5QwU0tJfA==", "license": "MIT", "dependencies": { - "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-primitive": "2.0.2", "@radix-ui/react-use-layout-effect": "1.1.0" }, "peerDependencies": { @@ -2329,12 +2349,12 @@ } }, "node_modules/@radix-ui/react-presence": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.1.tgz", - "integrity": "sha512-IeFXVi4YS1K0wVZzXNrbaaUvIJ3qdY+/Ih4eHFhWA9SwGR9UDX7Ck8abvL57C4cv3wwMvUE0OG69Qc3NCcTe/A==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.2.tgz", + "integrity": "sha512-18TFr80t5EVgL9x1SwF/YGtfG+l0BS0PRAlCWBDoBEiDQjeKgnNZRVJp/oVBl24sr3Gbfwc/Qpj4OcWTQMsAEg==", "license": "MIT", "dependencies": { - "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-compose-refs": "1.1.1", "@radix-ui/react-use-layout-effect": "1.1.0" }, "peerDependencies": { @@ -2353,12 +2373,12 @@ } }, "node_modules/@radix-ui/react-primitive": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.0.0.tgz", - "integrity": "sha512-ZSpFm0/uHa8zTvKBDjLFWLo8dkr4MBsiDLz0g3gMUwqgLHz9rTaRRGYDgvZPtBJgYCBKXkS9fzmoySgr8CO6Cw==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.0.2.tgz", + "integrity": "sha512-Ec/0d38EIuvDF+GZjcMU/Ze6MxntVJYO/fRlCPhCaVUyPY9WTalHJw54tp9sXeJo3tlShWpy41vQRgLRGOuz+w==", "license": "MIT", "dependencies": { - "@radix-ui/react-slot": "1.1.0" + "@radix-ui/react-slot": "1.1.2" }, "peerDependencies": { "@types/react": "*", @@ -2376,18 +2396,18 @@ } }, "node_modules/@radix-ui/react-roving-focus": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.0.tgz", - "integrity": "sha512-EA6AMGeq9AEeQDeSH0aZgG198qkfHSbvWTf1HvoDmOB5bBG/qTxjYMWUKMnYiV6J/iP/J8MEFSuB2zRU2n7ODA==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.2.tgz", + "integrity": "sha512-zgMQWkNO169GtGqRvYrzb0Zf8NhMHS2DuEB/TiEmVnpr5OqPU3i8lfbxaAmC2J/KYuIQxyoQQ6DxepyXp61/xw==", "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.0", - "@radix-ui/react-collection": "1.1.0", - "@radix-ui/react-compose-refs": "1.1.0", - "@radix-ui/react-context": "1.1.0", + "@radix-ui/primitive": "1.1.1", + "@radix-ui/react-collection": "1.1.2", + "@radix-ui/react-compose-refs": "1.1.1", + "@radix-ui/react-context": "1.1.1", "@radix-ui/react-direction": "1.1.0", "@radix-ui/react-id": "1.1.0", - "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-primitive": "2.0.2", "@radix-ui/react-use-callback-ref": "1.1.0", "@radix-ui/react-use-controllable-state": "1.1.0" }, @@ -2406,48 +2426,33 @@ } } }, - "node_modules/@radix-ui/react-roving-focus/node_modules/@radix-ui/react-context": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.0.tgz", - "integrity": "sha512-OKrckBy+sMEgYM/sMmqmErVn0kZqrHPJze+Ql3DzYsDDp0hl0L62nx/2122/Bvps1qz645jlcu2tD9lrRSdf8A==", - "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, "node_modules/@radix-ui/react-select": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-select/-/react-select-2.1.2.tgz", - "integrity": "sha512-rZJtWmorC7dFRi0owDmoijm6nSJH1tVw64QGiNIZ9PNLyBDtG+iAq+XGsya052At4BfarzY/Dhv9wrrUr6IMZA==", + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@radix-ui/react-select/-/react-select-2.1.6.tgz", + "integrity": "sha512-T6ajELxRvTuAMWH0YmRJ1qez+x4/7Nq7QIx7zJ0VK3qaEWdnWpNbEDnmWldG1zBDwqrLy5aLMUWcoGirVj5kMg==", "license": "MIT", "dependencies": { "@radix-ui/number": "1.1.0", - "@radix-ui/primitive": "1.1.0", - "@radix-ui/react-collection": "1.1.0", - "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/primitive": "1.1.1", + "@radix-ui/react-collection": "1.1.2", + "@radix-ui/react-compose-refs": "1.1.1", "@radix-ui/react-context": "1.1.1", "@radix-ui/react-direction": "1.1.0", - "@radix-ui/react-dismissable-layer": "1.1.1", + "@radix-ui/react-dismissable-layer": "1.1.5", "@radix-ui/react-focus-guards": "1.1.1", - "@radix-ui/react-focus-scope": "1.1.0", + "@radix-ui/react-focus-scope": "1.1.2", "@radix-ui/react-id": "1.1.0", - "@radix-ui/react-popper": "1.2.0", - "@radix-ui/react-portal": "1.1.2", - "@radix-ui/react-primitive": "2.0.0", - "@radix-ui/react-slot": "1.1.0", + "@radix-ui/react-popper": "1.2.2", + "@radix-ui/react-portal": "1.1.4", + "@radix-ui/react-primitive": "2.0.2", + "@radix-ui/react-slot": "1.1.2", "@radix-ui/react-use-callback-ref": "1.1.0", "@radix-ui/react-use-controllable-state": "1.1.0", "@radix-ui/react-use-layout-effect": "1.1.0", "@radix-ui/react-use-previous": "1.1.0", - "@radix-ui/react-visually-hidden": "1.1.0", - "aria-hidden": "^1.1.1", - "react-remove-scroll": "2.6.0" + "@radix-ui/react-visually-hidden": "1.1.2", + "aria-hidden": "^1.2.4", + "react-remove-scroll": "^2.6.3" }, "peerDependencies": { "@types/react": "*", @@ -2465,12 +2470,12 @@ } }, "node_modules/@radix-ui/react-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-separator/-/react-separator-1.1.0.tgz", - "integrity": "sha512-3uBAs+egzvJBDZAzvb/n4NxxOYpnspmWxO2u5NbZ8Y6FM/NdrGSF9bop3Cf6F6C71z1rTSn8KV0Fo2ZVd79lGA==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-separator/-/react-separator-1.1.2.tgz", + "integrity": "sha512-oZfHcaAp2Y6KFBX6I5P1u7CQoy4lheCGiYj+pGFrHy8E/VNRb5E39TkTr3JrV520csPBTZjkuKFdEsjS5EUNKQ==", "license": "MIT", "dependencies": { - "@radix-ui/react-primitive": "2.0.0" + "@radix-ui/react-primitive": "2.0.2" }, "peerDependencies": { "@types/react": "*", @@ -2488,12 +2493,12 @@ } }, "node_modules/@radix-ui/react-slot": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.1.0.tgz", - "integrity": "sha512-FUCf5XMfmW4dtYl69pdS4DbxKy8nj4M7SafBgPllysxmdachynNflAdp/gCsnYWNDnge6tI9onzMp5ARYc1KNw==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.1.2.tgz", + "integrity": "sha512-YAKxaiGsSQJ38VzKH86/BPRC4rh+b1Jpa+JneA5LRE7skmLPNAyeG8kPJj/oo4STLvlrs8vkf/iYyc3A5stYCQ==", "license": "MIT", "dependencies": { - "@radix-ui/react-compose-refs": "1.1.0" + "@radix-ui/react-compose-refs": "1.1.1" }, "peerDependencies": { "@types/react": "*", @@ -2506,15 +2511,15 @@ } }, "node_modules/@radix-ui/react-switch": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-switch/-/react-switch-1.1.1.tgz", - "integrity": "sha512-diPqDDoBcZPSicYoMWdWx+bCPuTRH4QSp9J+65IvtdS0Kuzt67bI6n32vCj8q6NZmYW/ah+2orOtMwcX5eQwIg==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-switch/-/react-switch-1.1.3.tgz", + "integrity": "sha512-1nc+vjEOQkJVsJtWPSiISGT6OKm4SiOdjMo+/icLxo2G4vxz1GntC5MzfL4v8ey9OEfw787QCD1y3mUv0NiFEQ==", "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.0", - "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/primitive": "1.1.1", + "@radix-ui/react-compose-refs": "1.1.1", "@radix-ui/react-context": "1.1.1", - "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-primitive": "2.0.2", "@radix-ui/react-use-controllable-state": "1.1.0", "@radix-ui/react-use-previous": "1.1.0", "@radix-ui/react-use-size": "1.1.0" @@ -2535,18 +2540,18 @@ } }, "node_modules/@radix-ui/react-tabs": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-tabs/-/react-tabs-1.1.1.tgz", - "integrity": "sha512-3GBUDmP2DvzmtYLMsHmpA1GtR46ZDZ+OreXM/N+kkQJOPIgytFWWTfDQmBQKBvaFS0Vno0FktdbVzN28KGrMdw==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-tabs/-/react-tabs-1.1.3.tgz", + "integrity": "sha512-9mFyI30cuRDImbmFF6O2KUJdgEOsGh9Vmx9x/Dh9tOhL7BngmQPQfwW4aejKm5OHpfWIdmeV6ySyuxoOGjtNng==", "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.0", + "@radix-ui/primitive": "1.1.1", "@radix-ui/react-context": "1.1.1", "@radix-ui/react-direction": "1.1.0", "@radix-ui/react-id": "1.1.0", - "@radix-ui/react-presence": "1.1.1", - "@radix-ui/react-primitive": "2.0.0", - "@radix-ui/react-roving-focus": "1.1.0", + "@radix-ui/react-presence": "1.1.2", + "@radix-ui/react-primitive": "2.0.2", + "@radix-ui/react-roving-focus": "1.1.2", "@radix-ui/react-use-controllable-state": "1.1.0" }, "peerDependencies": { @@ -2565,23 +2570,23 @@ } }, "node_modules/@radix-ui/react-tooltip": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-tooltip/-/react-tooltip-1.1.3.tgz", - "integrity": "sha512-Z4w1FIS0BqVFI2c1jZvb/uDVJijJjJ2ZMuPV81oVgTZ7g3BZxobplnMVvXtFWgtozdvYJ+MFWtwkM5S2HnAong==", + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/@radix-ui/react-tooltip/-/react-tooltip-1.1.8.tgz", + "integrity": "sha512-YAA2cu48EkJZdAMHC0dqo9kialOcRStbtiY4nJPaht7Ptrhcvpo+eDChaM6BIs8kL6a8Z5l5poiqLnXcNduOkA==", "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.0", - "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/primitive": "1.1.1", + "@radix-ui/react-compose-refs": "1.1.1", "@radix-ui/react-context": "1.1.1", - "@radix-ui/react-dismissable-layer": "1.1.1", + "@radix-ui/react-dismissable-layer": "1.1.5", "@radix-ui/react-id": "1.1.0", - "@radix-ui/react-popper": "1.2.0", - "@radix-ui/react-portal": "1.1.2", - "@radix-ui/react-presence": "1.1.1", - "@radix-ui/react-primitive": "2.0.0", - "@radix-ui/react-slot": "1.1.0", + "@radix-ui/react-popper": "1.2.2", + "@radix-ui/react-portal": "1.1.4", + "@radix-ui/react-presence": "1.1.2", + "@radix-ui/react-primitive": "2.0.2", + "@radix-ui/react-slot": "1.1.2", "@radix-ui/react-use-controllable-state": "1.1.0", - "@radix-ui/react-visually-hidden": "1.1.0" + "@radix-ui/react-visually-hidden": "1.1.2" }, "peerDependencies": { "@types/react": "*", @@ -2716,12 +2721,12 @@ } }, "node_modules/@radix-ui/react-visually-hidden": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.1.0.tgz", - "integrity": "sha512-N8MDZqtgCgG5S3aV60INAB475osJousYpZ4cTJ2cFbMpdHS5Y6loLTH8LPtkj2QN0x93J30HT/M3qJXM0+lyeQ==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.1.2.tgz", + "integrity": "sha512-1SzA4ns2M1aRlvxErqhLHsBHoS5eI5UUcI2awAMgGUp4LoaoWOKYmvqDY2s/tltuPkh3Yk77YF/r3IRj+Amx4Q==", "license": "MIT", "dependencies": { - "@radix-ui/react-primitive": "2.0.0" + "@radix-ui/react-primitive": "2.0.2" }, "peerDependencies": { "@types/react": "*", @@ -2745,9 +2750,9 @@ "license": "MIT" }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.27.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.27.4.tgz", - "integrity": "sha512-2Y3JT6f5MrQkICUyRVCw4oa0sutfAsgaSsb0Lmmy1Wi2y7X5vT9Euqw4gOsCyy0YfKURBg35nhUKZS4mDcfULw==", + "version": "4.38.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.38.0.tgz", + "integrity": "sha512-ldomqc4/jDZu/xpYU+aRxo3V4mGCV9HeTgUBANI3oIQMOL+SsxB+S2lxMpkFp5UamSS3XuTMQVbsS24R4J4Qjg==", "cpu": [ "arm" ], @@ -2759,9 +2764,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.27.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.27.4.tgz", - "integrity": "sha512-wzKRQXISyi9UdCVRqEd0H4cMpzvHYt1f/C3CoIjES6cG++RHKhrBj2+29nPF0IB5kpy9MS71vs07fvrNGAl/iA==", + "version": "4.38.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.38.0.tgz", + "integrity": "sha512-VUsgcy4GhhT7rokwzYQP+aV9XnSLkkhlEJ0St8pbasuWO/vwphhZQxYEKUP3ayeCYLhk6gEtacRpYP/cj3GjyQ==", "cpu": [ "arm64" ], @@ -2773,9 +2778,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.27.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.27.4.tgz", - "integrity": "sha512-PlNiRQapift4LNS8DPUHuDX/IdXiLjf8mc5vdEmUR0fF/pyy2qWwzdLjB+iZquGr8LuN4LnUoSEvKRwjSVYz3Q==", + "version": "4.38.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.38.0.tgz", + "integrity": "sha512-buA17AYXlW9Rn091sWMq1xGUvWQFOH4N1rqUxGJtEQzhChxWjldGCCup7r/wUnaI6Au8sKXpoh0xg58a7cgcpg==", "cpu": [ "arm64" ], @@ -2787,9 +2792,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.27.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.27.4.tgz", - "integrity": "sha512-o9bH2dbdgBDJaXWJCDTNDYa171ACUdzpxSZt+u/AAeQ20Nk5x+IhA+zsGmrQtpkLiumRJEYef68gcpn2ooXhSQ==", + "version": "4.38.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.38.0.tgz", + "integrity": "sha512-Mgcmc78AjunP1SKXl624vVBOF2bzwNWFPMP4fpOu05vS0amnLcX8gHIge7q/lDAHy3T2HeR0TqrriZDQS2Woeg==", "cpu": [ "x64" ], @@ -2801,9 +2806,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.27.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.27.4.tgz", - "integrity": "sha512-NBI2/i2hT9Q+HySSHTBh52da7isru4aAAo6qC3I7QFVsuhxi2gM8t/EI9EVcILiHLj1vfi+VGGPaLOUENn7pmw==", + "version": "4.38.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.38.0.tgz", + "integrity": "sha512-zzJACgjLbQTsscxWqvrEQAEh28hqhebpRz5q/uUd1T7VTwUNZ4VIXQt5hE7ncs0GrF+s7d3S4on4TiXUY8KoQA==", "cpu": [ "arm64" ], @@ -2815,9 +2820,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.27.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.27.4.tgz", - "integrity": "sha512-wYcC5ycW2zvqtDYrE7deary2P2UFmSh85PUpAx+dwTCO9uw3sgzD6Gv9n5X4vLaQKsrfTSZZ7Z7uynQozPVvWA==", + "version": "4.38.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.38.0.tgz", + "integrity": "sha512-hCY/KAeYMCyDpEE4pTETam0XZS4/5GXzlLgpi5f0IaPExw9kuB+PDTOTLuPtM10TlRG0U9OSmXJ+Wq9J39LvAg==", "cpu": [ "x64" ], @@ -2829,9 +2834,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.27.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.27.4.tgz", - "integrity": "sha512-9OwUnK/xKw6DyRlgx8UizeqRFOfi9mf5TYCw1uolDaJSbUmBxP85DE6T4ouCMoN6pXw8ZoTeZCSEfSaYo+/s1w==", + "version": "4.38.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.38.0.tgz", + "integrity": "sha512-mimPH43mHl4JdOTD7bUMFhBdrg6f9HzMTOEnzRmXbOZqjijCw8LA5z8uL6LCjxSa67H2xiLFvvO67PT05PRKGg==", "cpu": [ "arm" ], @@ -2843,9 +2848,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.27.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.27.4.tgz", - "integrity": "sha512-Vgdo4fpuphS9V24WOV+KwkCVJ72u7idTgQaBoLRD0UxBAWTF9GWurJO9YD9yh00BzbkhpeXtm6na+MvJU7Z73A==", + "version": "4.38.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.38.0.tgz", + "integrity": "sha512-tPiJtiOoNuIH8XGG8sWoMMkAMm98PUwlriOFCCbZGc9WCax+GLeVRhmaxjJtz6WxrPKACgrwoZ5ia/uapq3ZVg==", "cpu": [ "arm" ], @@ -2857,9 +2862,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.27.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.27.4.tgz", - "integrity": "sha512-pleyNgyd1kkBkw2kOqlBx+0atfIIkkExOTiifoODo6qKDSpnc6WzUY5RhHdmTdIJXBdSnh6JknnYTtmQyobrVg==", + "version": "4.38.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.38.0.tgz", + "integrity": "sha512-wZco59rIVuB0tjQS0CSHTTUcEde+pXQWugZVxWaQFdQQ1VYub/sTrNdY76D1MKdN2NB48JDuGABP6o6fqos8mA==", "cpu": [ "arm64" ], @@ -2871,9 +2876,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.27.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.27.4.tgz", - "integrity": "sha512-caluiUXvUuVyCHr5DxL8ohaaFFzPGmgmMvwmqAITMpV/Q+tPoaHZ/PWa3t8B2WyoRcIIuu1hkaW5KkeTDNSnMA==", + "version": "4.38.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.38.0.tgz", + "integrity": "sha512-fQgqwKmW0REM4LomQ+87PP8w8xvU9LZfeLBKybeli+0yHT7VKILINzFEuggvnV9M3x1Ed4gUBmGUzCo/ikmFbQ==", "cpu": [ "arm64" ], @@ -2884,10 +2889,24 @@ "linux" ] }, + "node_modules/@rollup/rollup-linux-loongarch64-gnu": { + "version": "4.38.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.38.0.tgz", + "integrity": "sha512-hz5oqQLXTB3SbXpfkKHKXLdIp02/w3M+ajp8p4yWOWwQRtHWiEOCKtc9U+YXahrwdk+3qHdFMDWR5k+4dIlddg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.27.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.27.4.tgz", - "integrity": "sha512-FScrpHrO60hARyHh7s1zHE97u0KlT/RECzCKAdmI+LEoC1eDh/RDji9JgFqyO+wPDb86Oa/sXkily1+oi4FzJQ==", + "version": "4.38.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.38.0.tgz", + "integrity": "sha512-NXqygK/dTSibQ+0pzxsL3r4Xl8oPqVoWbZV9niqOnIHV/J92fe65pOir0xjkUZDRSPyFRvu+4YOpJF9BZHQImw==", "cpu": [ "ppc64" ], @@ -2899,9 +2918,23 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.27.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.27.4.tgz", - "integrity": "sha512-qyyprhyGb7+RBfMPeww9FlHwKkCXdKHeGgSqmIXw9VSUtvyFZ6WZRtnxgbuz76FK7LyoN8t/eINRbPUcvXB5fw==", + "version": "4.38.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.38.0.tgz", + "integrity": "sha512-GEAIabR1uFyvf/jW/5jfu8gjM06/4kZ1W+j1nWTSSB3w6moZEBm7iBtzwQ3a1Pxos2F7Gz+58aVEnZHU295QTg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.38.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.38.0.tgz", + "integrity": "sha512-9EYTX+Gus2EGPbfs+fh7l95wVADtSQyYw4DfSBcYdUEAmP2lqSZY0Y17yX/3m5VKGGJ4UmIH5LHLkMJft3bYoA==", "cpu": [ "riscv64" ], @@ -2913,9 +2946,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.27.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.27.4.tgz", - "integrity": "sha512-PFz+y2kb6tbh7m3A7nA9++eInGcDVZUACulf/KzDtovvdTizHpZaJty7Gp0lFwSQcrnebHOqxF1MaKZd7psVRg==", + "version": "4.38.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.38.0.tgz", + "integrity": "sha512-Mpp6+Z5VhB9VDk7RwZXoG2qMdERm3Jw07RNlXHE0bOnEeX+l7Fy4bg+NxfyN15ruuY3/7Vrbpm75J9QHFqj5+Q==", "cpu": [ "s390x" ], @@ -2927,9 +2960,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.27.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.27.4.tgz", - "integrity": "sha512-Ni8mMtfo+o/G7DVtweXXV/Ol2TFf63KYjTtoZ5f078AUgJTmaIJnj4JFU7TK/9SVWTaSJGxPi5zMDgK4w+Ez7Q==", + "version": "4.38.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.38.0.tgz", + "integrity": "sha512-vPvNgFlZRAgO7rwncMeE0+8c4Hmc+qixnp00/Uv3ht2x7KYrJ6ERVd3/R0nUtlE6/hu7/HiiNHJ/rP6knRFt1w==", "cpu": [ "x64" ], @@ -2941,9 +2974,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.27.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.27.4.tgz", - "integrity": "sha512-5AeeAF1PB9TUzD+3cROzFTnAJAcVUGLuR8ng0E0WXGkYhp6RD6L+6szYVX+64Rs0r72019KHZS1ka1q+zU/wUw==", + "version": "4.38.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.38.0.tgz", + "integrity": "sha512-q5Zv+goWvQUGCaL7fU8NuTw8aydIL/C9abAVGCzRReuj5h30TPx4LumBtAidrVOtXnlB+RZkBtExMsfqkMfb8g==", "cpu": [ "x64" ], @@ -2955,9 +2988,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.27.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.27.4.tgz", - "integrity": "sha512-yOpVsA4K5qVwu2CaS3hHxluWIK5HQTjNV4tWjQXluMiiiu4pJj4BN98CvxohNCpcjMeTXk/ZMJBRbgRg8HBB6A==", + "version": "4.38.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.38.0.tgz", + "integrity": "sha512-u/Jbm1BU89Vftqyqbmxdq14nBaQjQX1HhmsdBWqSdGClNaKwhjsg5TpW+5Ibs1mb8Es9wJiMdl86BcmtUVXNZg==", "cpu": [ "arm64" ], @@ -2969,9 +3002,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.27.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.27.4.tgz", - "integrity": "sha512-KtwEJOaHAVJlxV92rNYiG9JQwQAdhBlrjNRp7P9L8Cb4Rer3in+0A+IPhJC9y68WAi9H0sX4AiG2NTsVlmqJeQ==", + "version": "4.38.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.38.0.tgz", + "integrity": "sha512-mqu4PzTrlpNHHbu5qleGvXJoGgHpChBlrBx/mEhTPpnAL1ZAYFlvHD7rLK839LLKQzqEQMFJfGrrOHItN4ZQqA==", "cpu": [ "ia32" ], @@ -2983,9 +3016,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.27.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.27.4.tgz", - "integrity": "sha512-3j4jx1TppORdTAoBJRd+/wJRGCPC0ETWkXOecJ6PPZLj6SptXkrXcNqdj0oclbKML6FkQltdz7bBA3rUSirZug==", + "version": "4.38.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.38.0.tgz", + "integrity": "sha512-jjqy3uWlecfB98Psxb5cD6Fny9Fupv9LrDSPTQZUROqjvZmcCqNu4UMl7qqhlUUGpwiAkotj6GYu4SZdcr/nLw==", "cpu": [ "x64" ], @@ -3024,6 +3057,49 @@ "tslib": "^2.8.0" } }, + "node_modules/@tanstack/eslint-plugin-query": { + "version": "5.68.0", + "resolved": "https://registry.npmjs.org/@tanstack/eslint-plugin-query/-/eslint-plugin-query-5.68.0.tgz", + "integrity": "sha512-w/+y5LILV1GTWBB2R/lKfUzgocKXU1B7O6jipLUJhmxCKPmJFy5zpfR1Vx7c6yCEsQoKcTbhuR/tIy+1sIGaiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/utils": "^8.18.1" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0" + } + }, + "node_modules/@tanstack/query-core": { + "version": "5.71.1", + "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.71.1.tgz", + "integrity": "sha512-4+ZswCHOfJX+ikhXNoocamTUmJcHtB+Ljjz/oJkC7/eKB5IrzEwR4vEwZUENiPi+wISucJHR5TUbuuJ26w3kdQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, + "node_modules/@tanstack/react-query": { + "version": "5.71.1", + "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.71.1.tgz", + "integrity": "sha512-6BTkaSIGT58MroI4kIGXNdx/NhirXPU+75AJObLq+WBa39WmoxhzSk0YX+hqWJ/bvqZJFxslbEU4qIHaRZq+8Q==", + "license": "MIT", + "dependencies": { + "@tanstack/query-core": "5.71.1" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "react": "^18 || ^19" + } + }, "node_modules/@testing-library/dom": { "version": "10.4.0", "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.4.0.tgz", @@ -3055,9 +3131,9 @@ } }, "node_modules/@testing-library/react": { - "version": "16.0.1", - "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-16.0.1.tgz", - "integrity": "sha512-dSmwJVtJXmku+iocRhWOUFbrERC76TX2Mnf0ATODz8brzAZrMBbzLwQixlBSanZxR6LddK3eiwpSFZgDET1URg==", + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-16.2.0.tgz", + "integrity": "sha512-2cSskAvA1QNtKc8Y9VJQRv0tm3hLVgxRGDB+KYhIaPQJ1I+RHbhIXcM+zClKXzMes/wshsMVzf4B9vS4IZpqDQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3068,10 +3144,10 @@ }, "peerDependencies": { "@testing-library/dom": "^10.0.0", - "@types/react": "^18.0.0", - "@types/react-dom": "^18.0.0", - "react": "^18.0.0", - "react-dom": "^18.0.0" + "@types/react": "^18.0.0 || ^19.0.0", + "@types/react-dom": "^18.0.0 || ^19.0.0", + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" }, "peerDependenciesMeta": { "@types/react": { @@ -3135,9 +3211,9 @@ } }, "node_modules/@types/estree": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", - "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz", + "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==", "dev": true, "license": "MIT" }, @@ -3165,13 +3241,13 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "22.8.6", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.8.6.tgz", - "integrity": "sha512-tosuJYKrIqjQIlVCM4PEGxOmyg3FCPa/fViuJChnGeEIhjA46oy8FMVoF9su1/v8PNs2a8Q0iFNyOx0uOF91nw==", + "version": "22.13.16", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.16.tgz", + "integrity": "sha512-15tM+qA4Ypml/N7kyRdvfRjBQT2RL461uF1Bldn06K0Nzn1lY3nAPgHlsVrJxdZ9WhZiW0Fmc1lOYMtDsAuB3w==", "dev": true, "license": "MIT", "dependencies": { - "undici-types": "~6.19.8" + "undici-types": "~6.20.0" } }, "node_modules/@types/react": { @@ -3179,7 +3255,7 @@ "version": "19.0.0-rc.1", "resolved": "https://registry.npmjs.org/types-react/-/types-react-19.0.0-rc.1.tgz", "integrity": "sha512-RshndUfqTW6K3STLPis8BtAYCGOkMbtvYsi90gmVNDZBXUyUc5juf2PE9LfS/JmOlUIRO8cWTS/1MTnmhjDqyQ==", - "devOptional": true, + "dev": true, "dependencies": { "csstype": "^3.0.2" } @@ -3189,7 +3265,7 @@ "version": "19.0.0-rc.1", "resolved": "https://registry.npmjs.org/types-react-dom/-/types-react-dom-19.0.0-rc.1.tgz", "integrity": "sha512-VSLZJl8VXCD0fAWp7DUTFUDCcZ8DVXOQmjhJMD03odgeFmu14ZQJHCXeETm3BEAhJqfgJaFkLnGkQv88sRx0fQ==", - "devOptional": true, + "dev": true, "dependencies": { "@types/react": "*" } @@ -3207,21 +3283,21 @@ "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.12.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.12.2.tgz", - "integrity": "sha512-gQxbxM8mcxBwaEmWdtLCIGLfixBMHhQjBqR8sVWNTPpcj45WlYL2IObS/DNMLH1DBP0n8qz+aiiLTGfopPEebw==", + "version": "8.29.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.29.0.tgz", + "integrity": "sha512-PAIpk/U7NIS6H7TEtN45SPGLQaHNgB7wSjsQV/8+KYokAb2T/gloOA/Bee2yd4/yKVhPKe5LlaUGhAZk5zmSaQ==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.12.2", - "@typescript-eslint/type-utils": "8.12.2", - "@typescript-eslint/utils": "8.12.2", - "@typescript-eslint/visitor-keys": "8.12.2", + "@typescript-eslint/scope-manager": "8.29.0", + "@typescript-eslint/type-utils": "8.29.0", + "@typescript-eslint/utils": "8.29.0", + "@typescript-eslint/visitor-keys": "8.29.0", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", - "ts-api-utils": "^1.3.0" + "ts-api-utils": "^2.0.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -3232,25 +3308,21 @@ }, "peerDependencies": { "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0", - "eslint": "^8.57.0 || ^9.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" } }, "node_modules/@typescript-eslint/parser": { - "version": "8.12.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.12.2.tgz", - "integrity": "sha512-MrvlXNfGPLH3Z+r7Tk+Z5moZAc0dzdVjTgUgwsdGweH7lydysQsnSww3nAmsq8blFuRD5VRlAr9YdEFw3e6PBw==", + "version": "8.29.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.29.0.tgz", + "integrity": "sha512-8C0+jlNJOwQso2GapCVWWfW/rzaq7Lbme+vGUFKE31djwNncIpgXD7Cd4weEsDdkoZDjH0lwwr3QDQFuyrMg9g==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.12.2", - "@typescript-eslint/types": "8.12.2", - "@typescript-eslint/typescript-estree": "8.12.2", - "@typescript-eslint/visitor-keys": "8.12.2", + "@typescript-eslint/scope-manager": "8.29.0", + "@typescript-eslint/types": "8.29.0", + "@typescript-eslint/typescript-estree": "8.29.0", + "@typescript-eslint/visitor-keys": "8.29.0", "debug": "^4.3.4" }, "engines": { @@ -3261,23 +3333,19 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.12.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.12.2.tgz", - "integrity": "sha512-gPLpLtrj9aMHOvxJkSbDBmbRuYdtiEbnvO25bCMza3DhMjTQw0u7Y1M+YR5JPbMsXXnSPuCf5hfq0nEkQDL/JQ==", + "version": "8.29.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.29.0.tgz", + "integrity": "sha512-aO1PVsq7Gm+tcghabUpzEnVSFMCU4/nYIgC2GOatJcllvWfnhrgW0ZEbnTxm36QsikmCN1K/6ZgM7fok2I7xNw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.12.2", - "@typescript-eslint/visitor-keys": "8.12.2" + "@typescript-eslint/types": "8.29.0", + "@typescript-eslint/visitor-keys": "8.29.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -3288,16 +3356,16 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.12.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.12.2.tgz", - "integrity": "sha512-bwuU4TAogPI+1q/IJSKuD4shBLc/d2vGcRT588q+jzayQyjVK2X6v/fbR4InY2U2sgf8MEvVCqEWUzYzgBNcGQ==", + "version": "8.29.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.29.0.tgz", + "integrity": "sha512-ahaWQ42JAOx+NKEf5++WC/ua17q5l+j1GFrbbpVKzFL/tKVc0aYY8rVSYUpUvt2hUP1YBr7mwXzx+E/DfUWI9Q==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "8.12.2", - "@typescript-eslint/utils": "8.12.2", + "@typescript-eslint/typescript-estree": "8.29.0", + "@typescript-eslint/utils": "8.29.0", "debug": "^4.3.4", - "ts-api-utils": "^1.3.0" + "ts-api-utils": "^2.0.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -3306,16 +3374,15 @@ "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" } }, "node_modules/@typescript-eslint/types": { - "version": "8.12.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.12.2.tgz", - "integrity": "sha512-VwDwMF1SZ7wPBUZwmMdnDJ6sIFk4K4s+ALKLP6aIQsISkPv8jhiw65sAK6SuWODN/ix+m+HgbYDkH+zLjrzvOA==", + "version": "8.29.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.29.0.tgz", + "integrity": "sha512-wcJL/+cOXV+RE3gjCyl/V2G877+2faqvlgtso/ZRbTCnZazh0gXhe+7gbAnfubzN2bNsBtZjDvlh7ero8uIbzg==", "dev": true, "license": "MIT", "engines": { @@ -3327,20 +3394,20 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.12.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.12.2.tgz", - "integrity": "sha512-mME5MDwGe30Pq9zKPvyduyU86PH7aixwqYR2grTglAdB+AN8xXQ1vFGpYaUSJ5o5P/5znsSBeNcs5g5/2aQwow==", + "version": "8.29.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.29.0.tgz", + "integrity": "sha512-yOfen3jE9ISZR/hHpU/bmNvTtBW1NjRbkSFdZOksL1N+ybPEE7UVGMwqvS6CP022Rp00Sb0tdiIkhSCe6NI8ow==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.12.2", - "@typescript-eslint/visitor-keys": "8.12.2", + "@typescript-eslint/types": "8.29.0", + "@typescript-eslint/visitor-keys": "8.29.0", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", "minimatch": "^9.0.4", "semver": "^7.6.0", - "ts-api-utils": "^1.3.0" + "ts-api-utils": "^2.0.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -3349,23 +3416,21 @@ "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "peerDependencies": { + "typescript": ">=4.8.4 <5.9.0" } }, "node_modules/@typescript-eslint/utils": { - "version": "8.12.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.12.2.tgz", - "integrity": "sha512-UTTuDIX3fkfAz6iSVa5rTuSfWIYZ6ATtEocQ/umkRSyC9O919lbZ8dcH7mysshrCdrAM03skJOEYaBugxN+M6A==", + "version": "8.29.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.29.0.tgz", + "integrity": "sha512-gX/A0Mz9Bskm8avSWFcK0gP7cZpbY4AIo6B0hWYFCaIsz750oaiWR4Jr2CI+PQhfW1CpcQr9OlfPS+kMFegjXA==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "8.12.2", - "@typescript-eslint/types": "8.12.2", - "@typescript-eslint/typescript-estree": "8.12.2" + "@typescript-eslint/scope-manager": "8.29.0", + "@typescript-eslint/types": "8.29.0", + "@typescript-eslint/typescript-estree": "8.29.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -3375,18 +3440,19 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0" + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.12.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.12.2.tgz", - "integrity": "sha512-PChz8UaKQAVNHghsHcPyx1OMHoFRUEA7rJSK/mDhdq85bk+PLsUHUBqTQTFt18VJZbmxBovM65fezlheQRsSDA==", + "version": "8.29.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.29.0.tgz", + "integrity": "sha512-Sne/pVz8ryR03NFK21VpN88dZ2FdQXOlq3VIklbrTYEt8yXtRFr9tvUhqvCeKjqYk5FSim37sHbooT6vzBTZcg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.12.2", - "eslint-visitor-keys": "^3.4.3" + "@typescript-eslint/types": "8.29.0", + "eslint-visitor-keys": "^4.2.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -3396,25 +3462,17 @@ "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@vercel/analytics": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@vercel/analytics/-/analytics-1.3.2.tgz", - "integrity": "sha512-n/Ws7skBbW+fUBMeg+jrT30+GP00jTHvCcL4fuVrShuML0uveEV/4vVUdvqEVnDgXIGfLm0GXW5EID2mCcRXhg==", - "license": "MPL-2.0", - "dependencies": { - "server-only": "^0.0.1" + "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, - "peerDependencies": { - "next": ">= 13", - "react": "^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "next": { - "optional": true - }, - "react": { - "optional": true - } + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/@vitejs/plugin-react": { @@ -3438,38 +3496,38 @@ } }, "node_modules/@vitest/expect": { - "version": "2.1.9", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.1.9.tgz", - "integrity": "sha512-UJCIkTBenHeKT1TTlKMJWy1laZewsRIzYighyYiJKZreqtdxSos/S1t+ktRMQWu2CKqaarrkeszJx1cgC5tGZw==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.1.1.tgz", + "integrity": "sha512-q/zjrW9lgynctNbwvFtQkGK9+vvHA5UzVi2V8APrp1C6fG6/MuYYkmlx4FubuqLycCeSdHD5aadWfua/Vr0EUA==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/spy": "2.1.9", - "@vitest/utils": "2.1.9", - "chai": "^5.1.2", - "tinyrainbow": "^1.2.0" + "@vitest/spy": "3.1.1", + "@vitest/utils": "3.1.1", + "chai": "^5.2.0", + "tinyrainbow": "^2.0.0" }, "funding": { "url": "https://opencollective.com/vitest" } }, "node_modules/@vitest/mocker": { - "version": "2.1.9", - "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-2.1.9.tgz", - "integrity": "sha512-tVL6uJgoUdi6icpxmdrn5YNo3g3Dxv+IHJBr0GXHaEdTcw3F+cPKnsXFhli6nO+f/6SDKPHEK1UN+k+TQv0Ehg==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.1.1.tgz", + "integrity": "sha512-bmpJJm7Y7i9BBELlLuuM1J1Q6EQ6K5Ye4wcyOpOMXMcePYKSIYlpcrCm4l/O6ja4VJA5G2aMJiuZkZdnxlC3SA==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/spy": "2.1.9", + "@vitest/spy": "3.1.1", "estree-walker": "^3.0.3", - "magic-string": "^0.30.12" + "magic-string": "^0.30.17" }, "funding": { "url": "https://opencollective.com/vitest" }, "peerDependencies": { "msw": "^2.4.9", - "vite": "^5.0.0" + "vite": "^5.0.0 || ^6.0.0" }, "peerDependenciesMeta": { "msw": { @@ -3481,51 +3539,51 @@ } }, "node_modules/@vitest/pretty-format": { - "version": "2.1.9", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.1.9.tgz", - "integrity": "sha512-KhRIdGV2U9HOUzxfiHmY8IFHTdqtOhIzCpd8WRdJiE7D/HUcZVD0EgQCVjm+Q9gkUXWgBvMmTtZgIG48wq7sOQ==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.1.1.tgz", + "integrity": "sha512-dg0CIzNx+hMMYfNmSqJlLSXEmnNhMswcn3sXO7Tpldr0LiGmg3eXdLLhwkv2ZqgHb/d5xg5F7ezNFRA1fA13yA==", "dev": true, "license": "MIT", "dependencies": { - "tinyrainbow": "^1.2.0" + "tinyrainbow": "^2.0.0" }, "funding": { "url": "https://opencollective.com/vitest" } }, "node_modules/@vitest/runner": { - "version": "2.1.9", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-2.1.9.tgz", - "integrity": "sha512-ZXSSqTFIrzduD63btIfEyOmNcBmQvgOVsPNPe0jYtESiXkhd8u2erDLnMxmGrDCwHCCHE7hxwRDCT3pt0esT4g==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-3.1.1.tgz", + "integrity": "sha512-X/d46qzJuEDO8ueyjtKfxffiXraPRfmYasoC4i5+mlLEJ10UvPb0XH5M9C3gWuxd7BAQhpK42cJgJtq53YnWVA==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/utils": "2.1.9", - "pathe": "^1.1.2" + "@vitest/utils": "3.1.1", + "pathe": "^2.0.3" }, "funding": { "url": "https://opencollective.com/vitest" } }, "node_modules/@vitest/snapshot": { - "version": "2.1.9", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.1.9.tgz", - "integrity": "sha512-oBO82rEjsxLNJincVhLhaxxZdEtV0EFHMK5Kmx5sJ6H9L183dHECjiefOAdnqpIgT5eZwT04PoggUnW88vOBNQ==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.1.1.tgz", + "integrity": "sha512-bByMwaVWe/+1WDf9exFxWWgAixelSdiwo2p33tpqIlM14vW7PRV5ppayVXtfycqze4Qhtwag5sVhX400MLBOOw==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "2.1.9", - "magic-string": "^0.30.12", - "pathe": "^1.1.2" + "@vitest/pretty-format": "3.1.1", + "magic-string": "^0.30.17", + "pathe": "^2.0.3" }, "funding": { "url": "https://opencollective.com/vitest" } }, "node_modules/@vitest/spy": { - "version": "2.1.9", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.1.9.tgz", - "integrity": "sha512-E1B35FwzXXTs9FHNK6bDszs7mtydNi5MIfUWpceJ8Xbfb1gBMscAnwLbEu+B44ed6W3XjL9/ehLPHR1fkf1KLQ==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.1.1.tgz", + "integrity": "sha512-+EmrUOOXbKzLkTDwlsc/xrwOlPDXyVk3Z6P6K4oiCndxz7YLpp/0R0UsWVOKT0IXWjjBJuSMk6D27qipaupcvQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3536,24 +3594,24 @@ } }, "node_modules/@vitest/utils": { - "version": "2.1.9", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.1.9.tgz", - "integrity": "sha512-v0psaMSkNJ3A2NMrUEHFRzJtDPFn+/VWZ5WxImB21T9fjucJRmS7xCS3ppEnARb9y11OAzaD+P2Ps+b+BGX5iQ==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.1.1.tgz", + "integrity": "sha512-1XIjflyaU2k3HMArJ50bwSh3wKWPD6Q47wz/NUSmRV0zNywPc4w79ARjg/i/aNINHwA+mIALhUVqD9/aUvZNgg==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "2.1.9", - "loupe": "^3.1.2", - "tinyrainbow": "^1.2.0" + "@vitest/pretty-format": "3.1.1", + "loupe": "^3.1.3", + "tinyrainbow": "^2.0.0" }, "funding": { "url": "https://opencollective.com/vitest" } }, "node_modules/acorn": { - "version": "8.14.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", - "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", + "version": "8.14.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", + "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", "dev": true, "license": "MIT", "bin": { @@ -4074,9 +4132,9 @@ "license": "CC-BY-4.0" }, "node_modules/chai": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/chai/-/chai-5.1.2.tgz", - "integrity": "sha512-aGtmf24DW6MLHHG5gCx4zaI3uBq3KRtxeVs0DjFH6Z0rDNbsvTxFASFvdj79pxjxZ8/5u3PIiN3IwEIQkiiuPw==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/chai/-/chai-5.2.0.tgz", + "integrity": "sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw==", "dev": true, "license": "MIT", "dependencies": { @@ -4138,9 +4196,9 @@ } }, "node_modules/chart.js": { - "version": "4.4.7", - "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.4.7.tgz", - "integrity": "sha512-pwkcKfdzTMAU/+jNosKhNL2bHtJc/sSmYgVbuGTEDhzkrhmyihmP7vUc/5ZK9WopidMDHNe3Wm7jOd/WhuHWuw==", + "version": "4.4.8", + "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.4.8.tgz", + "integrity": "sha512-IkGZlVpXP+83QpMm4uxEiGqSI7jFizwVtF3+n5Pc3k7sMO+tkd0qxh2OzLhenM0K80xtmAONWGBn082EiBQSDA==", "license": "MIT", "dependencies": { "@kurkle/color": "^0.3.0" @@ -4207,24 +4265,15 @@ } }, "node_modules/class-variance-authority": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/class-variance-authority/-/class-variance-authority-0.7.0.tgz", - "integrity": "sha512-jFI8IQw4hczaL4ALINxqLEXQbWcNjoSkloa4IaufXCJr6QawJyw7tuRysRsrE8w2p/4gGaxKIt/hX3qz/IbD1A==", + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/class-variance-authority/-/class-variance-authority-0.7.1.tgz", + "integrity": "sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==", "license": "Apache-2.0", "dependencies": { - "clsx": "2.0.0" + "clsx": "^2.1.1" }, "funding": { - "url": "https://joebell.co.uk" - } - }, - "node_modules/class-variance-authority/node_modules/clsx": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.0.0.tgz", - "integrity": "sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==", - "license": "MIT", - "engines": { - "node": ">=6" + "url": "https://polar.sh/cva" } }, "node_modules/client-only": { @@ -4243,15 +4292,15 @@ } }, "node_modules/cmdk": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/cmdk/-/cmdk-1.0.3.tgz", - "integrity": "sha512-2c3uTjwT4YeHj60q2k8S1B0WHSoGR6t5CPnec6PMFD2QF4gwid0t1VSPNeEmL02EwBwNky/A3gwPCOViKTtoPA==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/cmdk/-/cmdk-1.1.1.tgz", + "integrity": "sha512-Vsv7kFaXm+ptHDMZ7izaRsP70GgrW9NBNGswt9OZaVBLlE0SNpDq8eu/VGXyF9r7M0azK3Wy7OlYXsuyYLFzHg==", "license": "MIT", "dependencies": { - "@radix-ui/react-dialog": "^1.1.2", + "@radix-ui/react-compose-refs": "^1.1.1", + "@radix-ui/react-dialog": "^1.1.6", "@radix-ui/react-id": "^1.1.0", - "@radix-ui/react-primitive": "^2.0.0", - "use-sync-external-store": "^1.2.2" + "@radix-ui/react-primitive": "^2.0.2" }, "peerDependencies": { "react": "^18 || ^19 || ^19.0.0-rc", @@ -4347,9 +4396,9 @@ "license": "MIT" }, "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, "license": "MIT", "dependencies": { @@ -4499,9 +4548,9 @@ } }, "node_modules/debug": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", - "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", "dev": true, "license": "MIT", "dependencies": { @@ -4867,9 +4916,9 @@ } }, "node_modules/esbuild": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", - "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.2.tgz", + "integrity": "sha512-16854zccKPnC+toMywC+uKNeYSv+/eXkevRAfwRD/G9Cleq66m8XFIrigkbvauLLlCfDL45Q2cWegSg53gGBnQ==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -4877,32 +4926,34 @@ "esbuild": "bin/esbuild" }, "engines": { - "node": ">=12" + "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.21.5", - "@esbuild/android-arm": "0.21.5", - "@esbuild/android-arm64": "0.21.5", - "@esbuild/android-x64": "0.21.5", - "@esbuild/darwin-arm64": "0.21.5", - "@esbuild/darwin-x64": "0.21.5", - "@esbuild/freebsd-arm64": "0.21.5", - "@esbuild/freebsd-x64": "0.21.5", - "@esbuild/linux-arm": "0.21.5", - "@esbuild/linux-arm64": "0.21.5", - "@esbuild/linux-ia32": "0.21.5", - "@esbuild/linux-loong64": "0.21.5", - "@esbuild/linux-mips64el": "0.21.5", - "@esbuild/linux-ppc64": "0.21.5", - "@esbuild/linux-riscv64": "0.21.5", - "@esbuild/linux-s390x": "0.21.5", - "@esbuild/linux-x64": "0.21.5", - "@esbuild/netbsd-x64": "0.21.5", - "@esbuild/openbsd-x64": "0.21.5", - "@esbuild/sunos-x64": "0.21.5", - "@esbuild/win32-arm64": "0.21.5", - "@esbuild/win32-ia32": "0.21.5", - "@esbuild/win32-x64": "0.21.5" + "@esbuild/aix-ppc64": "0.25.2", + "@esbuild/android-arm": "0.25.2", + "@esbuild/android-arm64": "0.25.2", + "@esbuild/android-x64": "0.25.2", + "@esbuild/darwin-arm64": "0.25.2", + "@esbuild/darwin-x64": "0.25.2", + "@esbuild/freebsd-arm64": "0.25.2", + "@esbuild/freebsd-x64": "0.25.2", + "@esbuild/linux-arm": "0.25.2", + "@esbuild/linux-arm64": "0.25.2", + "@esbuild/linux-ia32": "0.25.2", + "@esbuild/linux-loong64": "0.25.2", + "@esbuild/linux-mips64el": "0.25.2", + "@esbuild/linux-ppc64": "0.25.2", + "@esbuild/linux-riscv64": "0.25.2", + "@esbuild/linux-s390x": "0.25.2", + "@esbuild/linux-x64": "0.25.2", + "@esbuild/netbsd-arm64": "0.25.2", + "@esbuild/netbsd-x64": "0.25.2", + "@esbuild/openbsd-arm64": "0.25.2", + "@esbuild/openbsd-x64": "0.25.2", + "@esbuild/sunos-x64": "0.25.2", + "@esbuild/win32-arm64": "0.25.2", + "@esbuild/win32-ia32": "0.25.2", + "@esbuild/win32-x64": "0.25.2" } }, "node_modules/escalade": { @@ -4929,32 +4980,33 @@ } }, "node_modules/eslint": { - "version": "9.13.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.13.0.tgz", - "integrity": "sha512-EYZK6SX6zjFHST/HRytOdA/zE72Cq/bfw45LSyuwrdvcclb/gqV8RRQxywOBEWO2+WDpva6UZa4CcDeJKzUCFA==", + "version": "9.23.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.23.0.tgz", + "integrity": "sha512-jV7AbNoFPAY1EkFYpLq5bslU9NLNO8xnEeQXwErNibVryjk67wHVmddTBilc5srIttJDBrB0eMHKZBFbSIABCw==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.11.0", - "@eslint/config-array": "^0.18.0", - "@eslint/core": "^0.7.0", - "@eslint/eslintrc": "^3.1.0", - "@eslint/js": "9.13.0", - "@eslint/plugin-kit": "^0.2.0", - "@humanfs/node": "^0.16.5", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.19.2", + "@eslint/config-helpers": "^0.2.0", + "@eslint/core": "^0.12.0", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "9.23.0", + "@eslint/plugin-kit": "^0.2.7", + "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", - "@humanwhocodes/retry": "^0.3.1", + "@humanwhocodes/retry": "^0.4.2", "@types/estree": "^1.0.6", "@types/json-schema": "^7.0.15", "ajv": "^6.12.4", "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", + "cross-spawn": "^7.0.6", "debug": "^4.3.2", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^8.1.0", - "eslint-visitor-keys": "^4.1.0", - "espree": "^10.2.0", + "eslint-scope": "^8.3.0", + "eslint-visitor-keys": "^4.2.0", + "espree": "^10.3.0", "esquery": "^1.5.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", @@ -4968,8 +5020,7 @@ "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "text-table": "^0.2.0" + "optionator": "^0.9.3" }, "bin": { "eslint": "bin/eslint.js" @@ -5334,9 +5385,9 @@ } }, "node_modules/eslint-scope": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.2.0.tgz", - "integrity": "sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.3.0.tgz", + "integrity": "sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -5363,6 +5414,20 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/eslint/node_modules/@humanwhocodes/retry": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.2.tgz", + "integrity": "sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, "node_modules/eslint/node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -5488,9 +5553,9 @@ } }, "node_modules/expect-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.1.0.tgz", - "integrity": "sha512-bFi65yM+xZgk+u/KRIpekdSYkTB5W1pEf0Lt8Q8Msh7b+eQ7LXVtIB1Bkm4fvclDEL1b2CZkMhv2mOeF8tMdkA==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.2.1.tgz", + "integrity": "sha512-/kP8CAwxzLVEeFrMm4kMmy4CCDlpipyA7MYLVrdJIkV0fYF0UaigQHRsxHiuY/GEea+bh4KSv3TIlgr+2UL6bw==", "dev": true, "license": "Apache-2.0", "engines": { @@ -5686,17 +5751,19 @@ } }, "node_modules/framer-motion": { - "version": "11.11.11", - "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-11.11.11.tgz", - "integrity": "sha512-tuDH23ptJAKUHGydJQII9PhABNJBpB+z0P1bmgKK9QFIssHGlfPd6kxMq00LSKwE27WFsb2z0ovY0bpUyMvfRw==", + "version": "11.18.2", + "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-11.18.2.tgz", + "integrity": "sha512-5F5Och7wrvtLVElIpclDT0CBzMVg3dL22B64aZwHtsIY8RB4mXICLrkajK4G9R+ieSAGcgrLeae2SeUTg2pr6w==", "license": "MIT", "dependencies": { + "motion-dom": "^11.18.1", + "motion-utils": "^11.18.1", "tslib": "^2.4.0" }, "peerDependencies": { "@emotion/is-prop-valid": "*", - "react": "^18.0.0", - "react-dom": "^18.0.0" + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" }, "peerDependenciesMeta": { "@emotion/is-prop-valid": { @@ -5765,9 +5832,9 @@ } }, "node_modules/fuse.js": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/fuse.js/-/fuse.js-7.0.0.tgz", - "integrity": "sha512-14F4hBIxqKvD4Zz/XjDc3y94mNZN6pRv3U13Udo0lNLCWRBUsrMv2xwcF/y/Z5sV6+FQW+/ow68cHpm4sunt8Q==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/fuse.js/-/fuse.js-7.1.0.tgz", + "integrity": "sha512-trLf4SzuuUxfusZADLINj+dE8clK1frKdmqiJNb1Es75fmI5oY6X2mxLVUciLLjxqw/xr72Dhy+lER6dGd02FQ==", "license": "Apache-2.0", "engines": { "node": ">=10" @@ -6136,9 +6203,9 @@ } }, "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", "dev": true, "license": "MIT", "dependencies": { @@ -6177,15 +6244,6 @@ "node": ">= 0.4" } }, - "node_modules/invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.0.0" - } - }, "node_modules/is-alphabetical": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", @@ -6702,6 +6760,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, "license": "MIT" }, "node_modules/js-yaml": { @@ -6866,13 +6925,16 @@ } }, "node_modules/lilconfig": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", - "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", + "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", "dev": true, "license": "MIT", "engines": { - "node": ">=10" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" } }, "node_modules/lines-and-columns": { @@ -6909,6 +6971,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dev": true, "license": "MIT", "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" @@ -7072,6 +7135,21 @@ "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==", "license": "MIT" }, + "node_modules/motion-dom": { + "version": "11.18.1", + "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-11.18.1.tgz", + "integrity": "sha512-g76KvA001z+atjfxczdRtw/RXOM3OMSdd1f4DL77qCTF/+avrRJiawSG4yDibEQ215sr9kpinSlX2pCTJ9zbhw==", + "license": "MIT", + "dependencies": { + "motion-utils": "^11.18.1" + } + }, + "node_modules/motion-utils": { + "version": "11.18.1", + "resolved": "https://registry.npmjs.org/motion-utils/-/motion-utils-11.18.1.tgz", + "integrity": "sha512-49Kt+HKjtbJKLtgO/LKj9Ld+6vw9BjH5d9sc40R/kVyH8GLAXgT42M2NnuPcJNuA3s9ZfZBUcwIgpmZWGEE+hA==", + "license": "MIT" + }, "node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", @@ -7116,12 +7194,12 @@ "license": "MIT" }, "node_modules/next": { - "version": "15.2.3", - "resolved": "https://registry.npmjs.org/next/-/next-15.2.3.tgz", - "integrity": "sha512-x6eDkZxk2rPpu46E1ZVUWIBhYCLszmUY6fvHBFcbzJ9dD+qRX6vcHusaqqDlnY+VngKzKbAiG2iRCkPbmi8f7w==", + "version": "15.2.4", + "resolved": "https://registry.npmjs.org/next/-/next-15.2.4.tgz", + "integrity": "sha512-VwL+LAaPSxEkd3lU2xWbgEOtrM8oedmyhBqaVNmgKB+GvZlCy9rgaEc+y2on0wv+l0oSFqLtYD6dcC1eAedUaQ==", "license": "MIT", "dependencies": { - "@next/env": "15.2.3", + "@next/env": "15.2.4", "@swc/counter": "0.1.3", "@swc/helpers": "0.5.15", "busboy": "1.6.0", @@ -7136,14 +7214,14 @@ "node": "^18.18.0 || ^19.8.0 || >= 20.0.0" }, "optionalDependencies": { - "@next/swc-darwin-arm64": "15.2.3", - "@next/swc-darwin-x64": "15.2.3", - "@next/swc-linux-arm64-gnu": "15.2.3", - "@next/swc-linux-arm64-musl": "15.2.3", - "@next/swc-linux-x64-gnu": "15.2.3", - "@next/swc-linux-x64-musl": "15.2.3", - "@next/swc-win32-arm64-msvc": "15.2.3", - "@next/swc-win32-x64-msvc": "15.2.3", + "@next/swc-darwin-arm64": "15.2.4", + "@next/swc-darwin-x64": "15.2.4", + "@next/swc-linux-arm64-gnu": "15.2.4", + "@next/swc-linux-arm64-musl": "15.2.4", + "@next/swc-linux-x64-gnu": "15.2.4", + "@next/swc-linux-x64-musl": "15.2.4", + "@next/swc-win32-arm64-msvc": "15.2.4", + "@next/swc-win32-x64-msvc": "15.2.4", "sharp": "^0.33.5" }, "peerDependencies": { @@ -7225,18 +7303,22 @@ } }, "node_modules/nuqs": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nuqs/-/nuqs-2.1.1.tgz", - "integrity": "sha512-iM2H8lMmhvk9bxupUs2oRle9usRNEAqppOkTMXOxD/uK85gOKAubU7T2zmPo8fnYQS4n5e/XswTiq+gLYGpy3w==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/nuqs/-/nuqs-2.4.1.tgz", + "integrity": "sha512-u6sngTspqDe3jWHtcmqHQg3dl35niizCZAsm5gy7PBlgG2rwl71Dp2QUv5hwBaWKI9qz0wqILZY86TsRxq66SQ==", "license": "MIT", "dependencies": { "mitt": "^3.0.1" }, + "funding": { + "url": "https://github.com/sponsors/franky47" + }, "peerDependencies": { - "@remix-run/react": ">= 2", - "next": ">= 14.2.0", - "react": ">= 18.2.0", - "react-router-dom": ">= 6" + "@remix-run/react": ">=2", + "next": ">=14.2.0", + "react": ">=18.2.0 || ^19.0.0-0", + "react-router": "^6 || ^7", + "react-router-dom": "^6 || ^7" }, "peerDependenciesMeta": { "@remix-run/react": { @@ -7245,6 +7327,9 @@ "next": { "optional": true }, + "react-router": { + "optional": true + }, "react-router-dom": { "optional": true } @@ -7532,9 +7617,9 @@ } }, "node_modules/pathe": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", - "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", "dev": true, "license": "MIT" }, @@ -7604,9 +7689,9 @@ } }, "node_modules/postcss": { - "version": "8.4.49", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.49.tgz", - "integrity": "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==", + "version": "8.5.3", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz", + "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==", "dev": true, "funding": [ { @@ -7624,7 +7709,7 @@ ], "license": "MIT", "dependencies": { - "nanoid": "^3.3.7", + "nanoid": "^3.3.8", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" }, @@ -7706,19 +7791,6 @@ } } }, - "node_modules/postcss-load-config/node_modules/lilconfig": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.2.tgz", - "integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/antonk52" - } - }, "node_modules/postcss-nested": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz", @@ -7776,9 +7848,10 @@ } }, "node_modules/prettier": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", - "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz", + "integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==", + "dev": true, "license": "MIT", "bin": { "prettier": "bin/prettier.cjs" @@ -7807,9 +7880,9 @@ } }, "node_modules/prettier-plugin-tailwindcss": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/prettier-plugin-tailwindcss/-/prettier-plugin-tailwindcss-0.6.8.tgz", - "integrity": "sha512-dGu3kdm7SXPkiW4nzeWKCl3uoImdd5CTZEJGxyypEPL37Wj0HT2pLqjrvSei1nTeuQfO4PUfjeW5cTUNRLZ4sA==", + "version": "0.6.11", + "resolved": "https://registry.npmjs.org/prettier-plugin-tailwindcss/-/prettier-plugin-tailwindcss-0.6.11.tgz", + "integrity": "sha512-YxaYSIvZPAqhrrEpRtonnrXdghZg1irNg4qrjboCXrpybLWVs55cW2N3juhspVJiO0JBvYJT8SYsJpc8OQSnsA==", "dev": true, "license": "MIT", "engines": { @@ -7820,7 +7893,7 @@ "@prettier/plugin-pug": "*", "@shopify/prettier-plugin-liquid": "*", "@trivago/prettier-plugin-sort-imports": "*", - "@zackad/prettier-plugin-twig-melody": "*", + "@zackad/prettier-plugin-twig": "*", "prettier": "^3.0", "prettier-plugin-astro": "*", "prettier-plugin-css-order": "*", @@ -7847,7 +7920,7 @@ "@trivago/prettier-plugin-sort-imports": { "optional": true }, - "@zackad/prettier-plugin-twig-melody": { + "@zackad/prettier-plugin-twig": { "optional": true }, "prettier-plugin-astro": { @@ -7931,9 +8004,9 @@ "license": "MIT" }, "node_modules/prismjs": { - "version": "1.29.0", - "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz", - "integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==", + "version": "1.30.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.30.0.tgz", + "integrity": "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==", "license": "MIT", "engines": { "node": ">=6" @@ -7996,9 +8069,9 @@ "license": "MIT" }, "node_modules/react": { - "version": "19.0.0-rc-02c0e824-20241028", - "resolved": "https://registry.npmjs.org/react/-/react-19.0.0-rc-02c0e824-20241028.tgz", - "integrity": "sha512-GbZ7hpPHQMiEu53BqEaPQVM/4GG4hARo+mqEEnx4rYporDvNvUjutiAFxYFSbu6sgHwcr7LeFv8htEOwALVA2A==", + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/react/-/react-19.0.0.tgz", + "integrity": "sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ==", "license": "MIT", "engines": { "node": ">=0.10.0" @@ -8087,21 +8160,21 @@ } }, "node_modules/react-dom": { - "version": "19.0.0-rc-02c0e824-20241028", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.0.0-rc-02c0e824-20241028.tgz", - "integrity": "sha512-LrZf3DfHL6Fs07wwlUCHrzFTCMM19yA99MvJpfLokN4I2nBAZvREGZjZAn8VPiSfN72+i9j1eL4wB8gC695F3Q==", + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.0.0.tgz", + "integrity": "sha512-4GV5sHFG0e/0AD4X+ySy6UJd3jVl1iNsNHdpad0qhABJ11twS3TTBnseqsKurKcsNqCEFeGL3uLpVChpIO3QfQ==", "license": "MIT", "dependencies": { - "scheduler": "0.25.0-rc-02c0e824-20241028" + "scheduler": "^0.25.0" }, "peerDependencies": { - "react": "19.0.0-rc-02c0e824-20241028" + "react": "^19.0.0" } }, "node_modules/react-icons": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-5.3.0.tgz", - "integrity": "sha512-DnUk8aFbTyQPSkCfF8dbX6kQjXA9DktMeJqfjrg6cK9vwQVMxmcA3BfP4QoiztVmEHtwlTgLFsPuH2NskKT6eg==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-5.5.0.tgz", + "integrity": "sha512-MEFcXdkP3dLo8uumGI5xN3lDFNsRtrjbOEKDLD7yv76v4wpnEq2Lt2qeHaQOr34I/wPN3s3+N08WkQ+CW37Xiw==", "license": "MIT", "peerDependencies": { "react": "*" @@ -8125,23 +8198,23 @@ } }, "node_modules/react-remove-scroll": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.6.0.tgz", - "integrity": "sha512-I2U4JVEsQenxDAKaVa3VZ/JeJZe0/2DxPWL8Tj8yLKctQJQiZM52pn/GWFpSp8dftjM3pSAHVJZscAnC/y+ySQ==", + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.6.3.tgz", + "integrity": "sha512-pnAi91oOk8g8ABQKGF5/M9qxmmOPxaAnopyTHYfqYEwJhyFrbbBtHuSgtKEoH0jpcxx5o3hXqH1mNd9/Oi+8iQ==", "license": "MIT", "dependencies": { - "react-remove-scroll-bar": "^2.3.6", - "react-style-singleton": "^2.2.1", + "react-remove-scroll-bar": "^2.3.7", + "react-style-singleton": "^2.2.3", "tslib": "^2.1.0", - "use-callback-ref": "^1.3.0", - "use-sidecar": "^1.1.2" + "use-callback-ref": "^1.3.3", + "use-sidecar": "^1.1.3" }, "engines": { "node": ">=10" }, "peerDependencies": { - "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { @@ -8150,20 +8223,20 @@ } }, "node_modules/react-remove-scroll-bar": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.6.tgz", - "integrity": "sha512-DtSYaao4mBmX+HDo5YWYdBWQwYIQQshUV/dVxFxK+KM26Wjwp1gZ6rv6OC3oujI6Bfu6Xyg3TwK533AQutsn/g==", + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.8.tgz", + "integrity": "sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==", "license": "MIT", "dependencies": { - "react-style-singleton": "^2.2.1", + "react-style-singleton": "^2.2.2", "tslib": "^2.0.0" }, "engines": { "node": ">=10" }, "peerDependencies": { - "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" }, "peerDependenciesMeta": { "@types/react": { @@ -8185,21 +8258,20 @@ } }, "node_modules/react-style-singleton": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.1.tgz", - "integrity": "sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.3.tgz", + "integrity": "sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==", "license": "MIT", "dependencies": { "get-nonce": "^1.0.0", - "invariant": "^2.2.4", "tslib": "^2.0.0" }, "engines": { "node": ">=10" }, "peerDependencies": { - "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { @@ -8368,13 +8440,13 @@ } }, "node_modules/rollup": { - "version": "4.27.4", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.27.4.tgz", - "integrity": "sha512-RLKxqHEMjh/RGLsDxAEsaLO3mWgyoU6x9w6n1ikAzet4B3gI2/3yP6PWY2p9QzRTh6MfEIXB3MwsOY0Iv3vNrw==", + "version": "4.38.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.38.0.tgz", + "integrity": "sha512-5SsIRtJy9bf1ErAOiFMFzl64Ex9X5V7bnJ+WlFMb+zmP459OSWCEG7b0ERZ+PEU7xPt4OG3RHbrp1LJlXxYTrw==", "dev": true, "license": "MIT", "dependencies": { - "@types/estree": "1.0.6" + "@types/estree": "1.0.7" }, "bin": { "rollup": "dist/bin/rollup" @@ -8384,24 +8456,26 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.27.4", - "@rollup/rollup-android-arm64": "4.27.4", - "@rollup/rollup-darwin-arm64": "4.27.4", - "@rollup/rollup-darwin-x64": "4.27.4", - "@rollup/rollup-freebsd-arm64": "4.27.4", - "@rollup/rollup-freebsd-x64": "4.27.4", - "@rollup/rollup-linux-arm-gnueabihf": "4.27.4", - "@rollup/rollup-linux-arm-musleabihf": "4.27.4", - "@rollup/rollup-linux-arm64-gnu": "4.27.4", - "@rollup/rollup-linux-arm64-musl": "4.27.4", - "@rollup/rollup-linux-powerpc64le-gnu": "4.27.4", - "@rollup/rollup-linux-riscv64-gnu": "4.27.4", - "@rollup/rollup-linux-s390x-gnu": "4.27.4", - "@rollup/rollup-linux-x64-gnu": "4.27.4", - "@rollup/rollup-linux-x64-musl": "4.27.4", - "@rollup/rollup-win32-arm64-msvc": "4.27.4", - "@rollup/rollup-win32-ia32-msvc": "4.27.4", - "@rollup/rollup-win32-x64-msvc": "4.27.4", + "@rollup/rollup-android-arm-eabi": "4.38.0", + "@rollup/rollup-android-arm64": "4.38.0", + "@rollup/rollup-darwin-arm64": "4.38.0", + "@rollup/rollup-darwin-x64": "4.38.0", + "@rollup/rollup-freebsd-arm64": "4.38.0", + "@rollup/rollup-freebsd-x64": "4.38.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.38.0", + "@rollup/rollup-linux-arm-musleabihf": "4.38.0", + "@rollup/rollup-linux-arm64-gnu": "4.38.0", + "@rollup/rollup-linux-arm64-musl": "4.38.0", + "@rollup/rollup-linux-loongarch64-gnu": "4.38.0", + "@rollup/rollup-linux-powerpc64le-gnu": "4.38.0", + "@rollup/rollup-linux-riscv64-gnu": "4.38.0", + "@rollup/rollup-linux-riscv64-musl": "4.38.0", + "@rollup/rollup-linux-s390x-gnu": "4.38.0", + "@rollup/rollup-linux-x64-gnu": "4.38.0", + "@rollup/rollup-linux-x64-musl": "4.38.0", + "@rollup/rollup-win32-arm64-msvc": "4.38.0", + "@rollup/rollup-win32-ia32-msvc": "4.38.0", + "@rollup/rollup-win32-x64-msvc": "4.38.0", "fsevents": "~2.3.2" } }, @@ -8494,9 +8568,9 @@ } }, "node_modules/scheduler": { - "version": "0.25.0-rc-02c0e824-20241028", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.25.0-rc-02c0e824-20241028.tgz", - "integrity": "sha512-GysnKjmMSaWcwsKTLzeJO0IhU3EyIiC0ivJKE6yDNLqt3IMxDByx8b6lSNXRNdN+ULUY0WLLjSPaZ0LuU/GnTg==", + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.25.0.tgz", + "integrity": "sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA==", "license": "MIT" }, "node_modules/semver": { @@ -8511,12 +8585,6 @@ "node": ">=10" } }, - "node_modules/server-only": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/server-only/-/server-only-0.0.1.tgz", - "integrity": "sha512-qepMx2JxAa5jjfzxG79yPPq+8BuFToHd1hm7kI+Z4zAq1ftQiP7HcxMhDDItrbtwVeLg/cY2JnKnrcFkmiswNA==", - "license": "MIT" - }, "node_modules/set-function-length": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", @@ -8659,9 +8727,9 @@ } }, "node_modules/simple-icons": { - "version": "13.15.0", - "resolved": "https://registry.npmjs.org/simple-icons/-/simple-icons-13.15.0.tgz", - "integrity": "sha512-8SzFj9CvPlDnjDLISsAWTvpCs7om2zbSJZ1hNLRo6quWKLqFwjCD9opS24Q/yD0bdsnVHPpF0N3hitpHrY5u9w==", + "version": "13.21.0", + "resolved": "https://registry.npmjs.org/simple-icons/-/simple-icons-13.21.0.tgz", + "integrity": "sha512-LI5pVJPBv6oc79OMsffwb6kEqnmB8P1Cjg1crNUlhsxPETQ5UzbCKQdxU+7MW6+DD1qfPkla/vSKlLD4IfyXpQ==", "license": "CC0-1.0", "engines": { "node": ">=0.12.18" @@ -8681,13 +8749,13 @@ } }, "node_modules/sonner": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/sonner/-/sonner-1.5.0.tgz", - "integrity": "sha512-FBjhG/gnnbN6FY0jaNnqZOMmB73R+5IiyYAw8yBj7L54ER7HB3fOSE5OFiQiE2iXWxeXKvg6fIP4LtVppHEdJA==", + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/sonner/-/sonner-1.7.4.tgz", + "integrity": "sha512-DIS8z4PfJRbIyfVFDVnK9rO3eYDtse4Omcm6bt0oEr5/jtLgysmjuBl1frJ9E/EQZrFmKx2A8m/s5s9CRXIzhw==", "license": "MIT", "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" + "react": "^18.0.0 || ^19.0.0 || ^19.0.0-rc", + "react-dom": "^18.0.0 || ^19.0.0 || ^19.0.0-rc" } }, "node_modules/source-map-js": { @@ -8717,9 +8785,9 @@ "license": "MIT" }, "node_modules/std-env": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.8.0.tgz", - "integrity": "sha512-Bc3YwwCB+OzldMxOXJIIvC6cPRWr/LxOp48CdQTOkPyk/t4JWWJbrilwBd7RJzKV8QW7tJkcgAmeuLLJugl5/w==", + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.8.1.tgz", + "integrity": "sha512-vj5lIj3Mwf9D79hBkltk5qmkFI+biIKWS2IBxEyEU3AX1tUf7AoL8nSazCOiiqQsGKIq01SClsKEzweu34uwvA==", "dev": true, "license": "MIT" }, @@ -9117,9 +9185,9 @@ "license": "MIT" }, "node_modules/tailwind-merge": { - "version": "2.5.4", - "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-2.5.4.tgz", - "integrity": "sha512-0q8cfZHMu9nuYP/b5Shb7Y7Sh1B7Nnl5GqNr1U+n2p6+mybvRtayrQ+0042Z5byvTA8ihjlP8Odo8/VnHbZu4Q==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-2.6.0.tgz", + "integrity": "sha512-P+Vu1qXfzediirmHOC3xKGAYeZtPcV9g76X+xg2FD4tYgR71ewMA35Y3sCz3zhiN/dwefRpJX0yBcgwi1fXNQA==", "license": "MIT", "funding": { "type": "github", @@ -9127,34 +9195,34 @@ } }, "node_modules/tailwindcss": { - "version": "3.4.14", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.14.tgz", - "integrity": "sha512-IcSvOcTRcUtQQ7ILQL5quRDg7Xs93PdJEk1ZLbhhvJc7uj/OAhYOnruEiwnGgBvUtaUAJ8/mhSw1o8L2jCiENA==", + "version": "3.4.17", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.17.tgz", + "integrity": "sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==", "dev": true, "license": "MIT", "dependencies": { "@alloc/quick-lru": "^5.2.0", "arg": "^5.0.2", - "chokidar": "^3.5.3", + "chokidar": "^3.6.0", "didyoumean": "^1.2.2", "dlv": "^1.1.3", - "fast-glob": "^3.3.0", + "fast-glob": "^3.3.2", "glob-parent": "^6.0.2", "is-glob": "^4.0.3", - "jiti": "^1.21.0", - "lilconfig": "^2.1.0", - "micromatch": "^4.0.5", + "jiti": "^1.21.6", + "lilconfig": "^3.1.3", + "micromatch": "^4.0.8", "normalize-path": "^3.0.0", "object-hash": "^3.0.0", - "picocolors": "^1.0.0", - "postcss": "^8.4.23", + "picocolors": "^1.1.1", + "postcss": "^8.4.47", "postcss-import": "^15.1.0", "postcss-js": "^4.0.1", - "postcss-load-config": "^4.0.1", - "postcss-nested": "^6.0.1", - "postcss-selector-parser": "^6.0.11", - "resolve": "^1.22.2", - "sucrase": "^3.32.0" + "postcss-load-config": "^4.0.2", + "postcss-nested": "^6.2.0", + "postcss-selector-parser": "^6.1.2", + "resolve": "^1.22.8", + "sucrase": "^3.35.0" }, "bin": { "tailwind": "lib/cli.js", @@ -9194,13 +9262,6 @@ "node": ">=6" } }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true, - "license": "MIT" - }, "node_modules/thenify": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", @@ -9232,9 +9293,9 @@ "license": "MIT" }, "node_modules/tinyexec": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.1.tgz", - "integrity": "sha512-WiCJLEECkO18gwqIp6+hJg0//p23HXp4S+gGtAKu3mI2F2/sXC4FvHvXvB0zJVVaTPhx1/tOwdbRsa1sOBIKqQ==", + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", + "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==", "dev": true, "license": "MIT" }, @@ -9249,9 +9310,9 @@ } }, "node_modules/tinyrainbow": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-1.2.0.tgz", - "integrity": "sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-2.0.0.tgz", + "integrity": "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==", "dev": true, "license": "MIT", "engines": { @@ -9328,16 +9389,16 @@ } }, "node_modules/ts-api-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.0.tgz", - "integrity": "sha512-032cPxaEKwM+GT3vA5JXNzIaizx388rhsSW79vGRNGXfRRAdEAn2mvk36PvK5HnOchyWZ7afLEXqYCvPCrzuzQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", + "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", "dev": true, "license": "MIT", "engines": { - "node": ">=16" + "node": ">=18.12" }, "peerDependencies": { - "typescript": ">=4.2.0" + "typescript": ">=4.8.4" } }, "node_modules/ts-interface-checker": { @@ -9478,9 +9539,10 @@ } }, "node_modules/typescript": { - "version": "5.6.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz", - "integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==", + "version": "5.8.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.2.tgz", + "integrity": "sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==", + "dev": true, "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", @@ -9507,9 +9569,9 @@ } }, "node_modules/undici-types": { - "version": "6.19.8", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", - "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", + "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", "dev": true, "license": "MIT" }, @@ -9555,9 +9617,9 @@ } }, "node_modules/use-callback-ref": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.2.tgz", - "integrity": "sha512-elOQwe6Q8gqZgDA8mrh44qRTQqpIHDcZ3hXTLjBe1i4ph8XpNJnO+aQf3NaG+lriLopI4HMx9VjQLfPQ6vhnoA==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.3.tgz", + "integrity": "sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==", "license": "MIT", "dependencies": { "tslib": "^2.0.0" @@ -9566,8 +9628,8 @@ "node": ">=10" }, "peerDependencies": { - "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { @@ -9576,9 +9638,9 @@ } }, "node_modules/use-sidecar": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.2.tgz", - "integrity": "sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.3.tgz", + "integrity": "sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==", "license": "MIT", "dependencies": { "detect-node-es": "^1.1.0", @@ -9588,8 +9650,8 @@ "node": ">=10" }, "peerDependencies": { - "@types/react": "^16.9.0 || ^17.0.0 || ^18.0.0", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { @@ -9597,15 +9659,6 @@ } } }, - "node_modules/use-sync-external-store": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.2.tgz", - "integrity": "sha512-PElTlVMwpblvbNqQ82d2n6RjStvdSoNe9FG28kNfz3WiXilJm4DdNkEzRhCZuIDwY8U08WVihhGR5iRqAwfDiw==", - "license": "MIT", - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - } - }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -9614,21 +9667,21 @@ "license": "MIT" }, "node_modules/vite": { - "version": "5.4.14", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.14.tgz", - "integrity": "sha512-EK5cY7Q1D8JNhSaPKVK4pwBFvaTmZxEnoKXLG/U9gmdDcihQGNzFlgIvaxezFR4glP1LsuiedwMBqCXH3wZccA==", + "version": "6.2.5", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.2.5.tgz", + "integrity": "sha512-j023J/hCAa4pRIUH6J9HemwYfjB5llR2Ps0CWeikOtdR8+pAURAk0DoJC5/mm9kd+UgdnIy7d6HE4EAvlYhPhA==", "dev": true, "license": "MIT", "dependencies": { - "esbuild": "^0.21.3", - "postcss": "^8.4.43", - "rollup": "^4.20.0" + "esbuild": "^0.25.0", + "postcss": "^8.5.3", + "rollup": "^4.30.1" }, "bin": { "vite": "bin/vite.js" }, "engines": { - "node": "^18.0.0 || >=20.0.0" + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" }, "funding": { "url": "https://github.com/vitejs/vite?sponsor=1" @@ -9637,19 +9690,25 @@ "fsevents": "~2.3.3" }, "peerDependencies": { - "@types/node": "^18.0.0 || >=20.0.0", + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "jiti": ">=1.21.0", "less": "*", "lightningcss": "^1.21.0", "sass": "*", "sass-embedded": "*", "stylus": "*", "sugarss": "*", - "terser": "^5.4.0" + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" }, "peerDependenciesMeta": { "@types/node": { "optional": true }, + "jiti": { + "optional": true + }, "less": { "optional": true }, @@ -9670,36 +9729,42 @@ }, "terser": { "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true } } }, "node_modules/vite-node": { - "version": "2.1.9", - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.1.9.tgz", - "integrity": "sha512-AM9aQ/IPrW/6ENLQg3AGY4K1N2TGZdR5e4gu/MmmR2xR3Ll1+dib+nook92g4TV3PXVyeyxdWwtaCAiUL0hMxA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-3.1.1.tgz", + "integrity": "sha512-V+IxPAE2FvXpTCHXyNem0M+gWm6J7eRyWPR6vYoG/Gl+IscNOjXzztUhimQgTxaAoUoj40Qqimaa0NLIOOAH4w==", "dev": true, "license": "MIT", "dependencies": { "cac": "^6.7.14", - "debug": "^4.3.7", - "es-module-lexer": "^1.5.4", - "pathe": "^1.1.2", - "vite": "^5.0.0" + "debug": "^4.4.0", + "es-module-lexer": "^1.6.0", + "pathe": "^2.0.3", + "vite": "^5.0.0 || ^6.0.0" }, "bin": { "vite-node": "vite-node.mjs" }, "engines": { - "node": "^18.0.0 || >=20.0.0" + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" }, "funding": { "url": "https://opencollective.com/vitest" } }, "node_modules/vite-tsconfig-paths": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/vite-tsconfig-paths/-/vite-tsconfig-paths-5.1.3.tgz", - "integrity": "sha512-0bz+PDlLpGfP2CigeSKL9NFTF1KtXkeHGZSSaGQSuPZH77GhoiQaA8IjYgOaynSuwlDTolSUEU0ErVvju3NURg==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/vite-tsconfig-paths/-/vite-tsconfig-paths-5.1.4.tgz", + "integrity": "sha512-cYj0LRuLV2c2sMqhqhGpaO3LretdtMn/BVX4cPLanIZuwwrkVl+lK84E/miEXkCHWXuq65rhNN4rXsBcOB3S4w==", "dev": true, "license": "MIT", "dependencies": { @@ -9717,47 +9782,48 @@ } }, "node_modules/vitest": { - "version": "2.1.9", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-2.1.9.tgz", - "integrity": "sha512-MSmPM9REYqDGBI8439mA4mWhV5sKmDlBKWIYbA3lRb2PTHACE0mgKwA8yQ2xq9vxDTuk4iPrECBAEW2aoFXY0Q==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-3.1.1.tgz", + "integrity": "sha512-kiZc/IYmKICeBAZr9DQ5rT7/6bD9G7uqQEki4fxazi1jdVl2mWGzedtBs5s6llz59yQhVb7FFY2MbHzHCnT79Q==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/expect": "2.1.9", - "@vitest/mocker": "2.1.9", - "@vitest/pretty-format": "^2.1.9", - "@vitest/runner": "2.1.9", - "@vitest/snapshot": "2.1.9", - "@vitest/spy": "2.1.9", - "@vitest/utils": "2.1.9", - "chai": "^5.1.2", - "debug": "^4.3.7", - "expect-type": "^1.1.0", - "magic-string": "^0.30.12", - "pathe": "^1.1.2", - "std-env": "^3.8.0", + "@vitest/expect": "3.1.1", + "@vitest/mocker": "3.1.1", + "@vitest/pretty-format": "^3.1.1", + "@vitest/runner": "3.1.1", + "@vitest/snapshot": "3.1.1", + "@vitest/spy": "3.1.1", + "@vitest/utils": "3.1.1", + "chai": "^5.2.0", + "debug": "^4.4.0", + "expect-type": "^1.2.0", + "magic-string": "^0.30.17", + "pathe": "^2.0.3", + "std-env": "^3.8.1", "tinybench": "^2.9.0", - "tinyexec": "^0.3.1", - "tinypool": "^1.0.1", - "tinyrainbow": "^1.2.0", - "vite": "^5.0.0", - "vite-node": "2.1.9", + "tinyexec": "^0.3.2", + "tinypool": "^1.0.2", + "tinyrainbow": "^2.0.0", + "vite": "^5.0.0 || ^6.0.0", + "vite-node": "3.1.1", "why-is-node-running": "^2.3.0" }, "bin": { "vitest": "vitest.mjs" }, "engines": { - "node": "^18.0.0 || >=20.0.0" + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" }, "funding": { "url": "https://opencollective.com/vitest" }, "peerDependencies": { "@edge-runtime/vm": "*", - "@types/node": "^18.0.0 || >=20.0.0", - "@vitest/browser": "2.1.9", - "@vitest/ui": "2.1.9", + "@types/debug": "^4.1.12", + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "@vitest/browser": "3.1.1", + "@vitest/ui": "3.1.1", "happy-dom": "*", "jsdom": "*" }, @@ -9765,6 +9831,9 @@ "@edge-runtime/vm": { "optional": true }, + "@types/debug": { + "optional": true + }, "@types/node": { "optional": true }, @@ -10145,9 +10214,9 @@ } }, "node_modules/zod": { - "version": "3.23.8", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.23.8.tgz", - "integrity": "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==", + "version": "3.24.2", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.24.2.tgz", + "integrity": "sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ==", "license": "MIT", "funding": { "url": "https://github.com/sponsors/colinhacks" diff --git a/frontend/package.json b/frontend/package.json index 97a41e9a0..50379a320 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -20,70 +20,71 @@ "typecheck": "tsc --noEmit" }, "dependencies": { - "@radix-ui/react-accordion": "^1.1.2", - "@radix-ui/react-dialog": "^1.0.5", - "@radix-ui/react-dropdown-menu": "^2.0.6", - "@radix-ui/react-icons": "^1.3.1", - "@radix-ui/react-label": "^2.1.0", - "@radix-ui/react-navigation-menu": "^1.1.4", - "@radix-ui/react-popover": "^1.1.2", - "@radix-ui/react-select": "^2.1.2", - "@radix-ui/react-separator": "^1.1.0", - "@radix-ui/react-slot": "^1.1.0", - "@radix-ui/react-switch": "^1.1.1", - "@radix-ui/react-tabs": "^1.1.0", - "@radix-ui/react-tooltip": "^1.1.2", - "@vercel/analytics": "^1.2.2", - "chart.js": "^4.4.1", + "@radix-ui/react-accordion": "^1.2.3", + "@radix-ui/react-dialog": "^1.1.6", + "@radix-ui/react-dropdown-menu": "^2.1.6", + "@radix-ui/react-icons": "^1.3.2", + "@radix-ui/react-label": "^2.1.2", + "@radix-ui/react-navigation-menu": "^1.2.5", + "@radix-ui/react-popover": "^1.1.6", + "@radix-ui/react-select": "^2.1.6", + "@radix-ui/react-separator": "^1.1.2", + "@radix-ui/react-slot": "^1.1.2", + "@radix-ui/react-switch": "^1.1.3", + "@radix-ui/react-tabs": "^1.1.3", + "@radix-ui/react-tooltip": "^1.1.8", + "@tanstack/react-query": "^5.71.1", + "chart.js": "^4.4.8", "chartjs-plugin-datalabels": "^2.2.0", - "class-variance-authority": "^0.7.0", + "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", - "cmdk": "^1.0.0", + "cmdk": "^1.1.1", "date-fns": "^4.1.0", - "framer-motion": "^11.11.11", - "fuse.js": "^7.0.0", + "framer-motion": "^11.18.2", + "fuse.js": "^7.1.0", "lucide-react": "^0.453.0", "mini-svg-data-uri": "^1.4.4", - "next": "15.2.3", + "next": "15.2.4", "next-themes": "^0.3.0", - "nuqs": "^2.1.1", - "pocketbase": "^0.21.4", + "nuqs": "^2.4.1", + "pocketbase": "^0.21.5", "prettier-plugin-organize-imports": "^4.1.0", - "react": "19.0.0-rc-02c0e824-20241028", + "react": "19.0.0", "react-chartjs-2": "^5.3.0", "react-code-blocks": "^0.1.6", "react-datepicker": "^7.6.0", "react-day-picker": "8.10.1", - "react-dom": "19.0.0-rc-02c0e824-20241028", - "react-icons": "^5.1.0", + "react-dom": "19.0.0", + "react-icons": "^5.5.0", "react-simple-typewriter": "^5.0.1", "sharp": "^0.33.5", - "simple-icons": "^13.5.0", - "sonner": "^1.5.0", - "tailwind-merge": "^2.3.0", - "zod": "^3.23.8" + "simple-icons": "^13.21.0", + "sonner": "^1.7.4", + "tailwind-merge": "^2.6.0", + "zod": "^3.24.2" }, "devDependencies": { + "@tanstack/eslint-plugin-query": "^5.68.0", "@testing-library/dom": "^10.4.0", - "@testing-library/react": "^16.0.1", - "@types/node": "^22", + "@testing-library/react": "^16.2.0", + "@types/node": "^22.13.16", "@types/react": "npm:types-react@19.0.0-rc.1", "@types/react-dom": "npm:types-react-dom@19.0.0-rc.1", - "@typescript-eslint/eslint-plugin": "^8.8.1", - "@typescript-eslint/parser": "^8.8.1", + "@typescript-eslint/eslint-plugin": "^8.29.0", + "@typescript-eslint/parser": "^8.29.0", "@vitejs/plugin-react": "^4.3.4", - "eslint": "^9.13.0", + "eslint": "^9.23.0", "eslint-config-next": "15.0.2", "jsdom": "^25.0.1", - "postcss": "^8", - "prettier": "^3.2.5", - "prettier-plugin-tailwindcss": "^0.6.5", - "tailwindcss": "^3.4.9", + "postcss": "^8.5.3", + "prettier": "^3.5.3", + "prettier-plugin-tailwindcss": "^0.6.11", + "tailwindcss": "^3.4.17", "tailwindcss-animate": "^1.0.7", "tailwindcss-animated": "^1.1.2", - "typescript": "^5", - "vite-tsconfig-paths": "^5.1.3", - "vitest": "^2.1.9" + "typescript": "^5.8.2", + "vite-tsconfig-paths": "^5.1.4", + "vitest": "^3.1.1" }, "overrides": { "@types/react": "npm:types-react@19.0.0-rc.1", diff --git a/frontend/public/json/actualbudget.json b/frontend/public/json/actualbudget.json index df84b9e1b..1bc1d4aba 100644 --- a/frontend/public/json/actualbudget.json +++ b/frontend/public/json/actualbudget.json @@ -19,8 +19,8 @@ "script": "ct/actualbudget.sh", "resources": { "cpu": 2, - "ram": 2048, - "hdd": 4, + "ram": 8192, + "hdd": 7, "os": "debian", "version": "12" } diff --git a/frontend/public/json/channels.json b/frontend/public/json/channels.json index b5eb7a287..bac434aac 100644 --- a/frontend/public/json/channels.json +++ b/frontend/public/json/channels.json @@ -2,7 +2,7 @@ "name": "Channels DVR Server", "slug": "channels", "categories": [ - 15 + 13 ], "date_created": "2024-05-02", "type": "ct", @@ -37,4 +37,4 @@ } ], "status": "✅" -} \ No newline at end of file +} diff --git a/frontend/public/json/cron-update-lxcs.json b/frontend/public/json/cron-update-lxcs.json index b20763cfc..341225f05 100644 --- a/frontend/public/json/cron-update-lxcs.json +++ b/frontend/public/json/cron-update-lxcs.json @@ -36,9 +36,9 @@ "type": "info" }, { - "text": "To exclude LXCs from updating, edit the crontab using `crontab -e` and add CTID as shown in the example below:\n\n\n\n`0 0 * * 0 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin /bin/bash -c '$(wget -qLO - https://github.com/community-scripts/ProxmoxVE/raw/main/misc/update-lxcs-cron.sh)' -s 103 111 >>/var/log/update-lxcs-cron.log 2>/dev/null`", + "text": "To exclude LXCs from updating, edit the crontab using `crontab -e` and add CTID as shown in the example below:\n\n\n\n`0 0 * * 0 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin /bin/bash -c '$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/update-lxcs-cron.sh)' -s 103 111 >>/var/log/update-lxcs-cron.log 2>/dev/null`", "type": "info" } ], "status": "✅" -} \ No newline at end of file +} diff --git a/frontend/public/json/hoarder.json b/frontend/public/json/hoarder.json deleted file mode 100644 index c58317f33..000000000 --- a/frontend/public/json/hoarder.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "name": "Hoarder", - "slug": "hoarder", - "categories": [ - 12 - ], - "date_created": "2024-12-02", - "type": "ct", - "updateable": true, - "privileged": false, - "interface_port": 3000, - "documentation": "https://docs.hoarder.app/", - "website": "https://hoarder.app/", - "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/hoarder.svg", - "description": "Hoarder is an AI-powered bookmarking tool that helps you save and organize your digital content. It automatically tags your links, notes, and images, making them easy to find later. With features like auto-fetching, lists, and full-text search, Hoarder is the perfect tool for anyone who wants to keep track of their digital life.", - "install_methods": [ - { - "type": "default", - "script": "ct/hoarder.sh", - "resources": { - "cpu": 2, - "ram": 4096, - "hdd": 10, - "os": "debian", - "version": "12" - } - } - ], - "default_credentials": { - "username": null, - "password": null - }, - "notes": [], - "status": "❌" -} diff --git a/frontend/public/json/homeassistant.json b/frontend/public/json/homeassistant.json index 72c696ce2..bf1aee8e1 100644 --- a/frontend/public/json/homeassistant.json +++ b/frontend/public/json/homeassistant.json @@ -37,10 +37,10 @@ }, { "text": "config path: `/var/lib/docker/volumes/hass_config/_data`", - "type": "warning" + "type": "info" }, { - "text": "Portainer Interface: LXC-IP: 9443", + "text": "Portainer interface: $IP: 9443 - User & password must be set manually within 5 minutes, otherwise a restart of Portainer is required!", "type": "info" }, { @@ -49,4 +49,4 @@ } ], "status": "✅" -} \ No newline at end of file +} diff --git a/frontend/public/json/karakeep.json b/frontend/public/json/karakeep.json new file mode 100644 index 000000000..e118e5011 --- /dev/null +++ b/frontend/public/json/karakeep.json @@ -0,0 +1,34 @@ +{ + "name": "karakeep", + "slug": "karakeep", + "categories": [ + 12 + ], + "date_created": "2025-04-07", + "type": "ct", + "updateable": true, + "privileged": false, + "interface_port": 3000, + "documentation": "https://docs.karakeep.app/", + "website": "https://karakeep.app/", + "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/karakeep.svg", + "description": "karakeep (formerly: hoarder) is an AI-powered bookmarking tool that helps you save and organize your digital content. It automatically tags your links, notes, and images, making them easy to find later. With features like auto-fetching, lists, and full-text search, karakeep is the perfect tool for anyone who wants to keep track of their digital life.", + "install_methods": [ + { + "type": "default", + "script": "ct/karakeep.sh", + "resources": { + "cpu": 2, + "ram": 4096, + "hdd": 10, + "os": "debian", + "version": "12" + } + } + ], + "default_credentials": { + "username": null, + "password": null + }, + "notes": [] +} diff --git a/frontend/public/json/lidarr.json b/frontend/public/json/lidarr.json index 10ff5784a..09b2ed0c1 100644 --- a/frontend/public/json/lidarr.json +++ b/frontend/public/json/lidarr.json @@ -1,35 +1,35 @@ { - "name": "Lidarr", - "slug": "lidarr", - "categories": [ - 14 - ], - "date_created": "2024-05-02", - "type": "ct", - "updateable": false, - "privileged": false, - "interface_port": 8686, - "documentation": null, - "website": "https://lidarr.audio/", - "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/lidarr.svg", - "description": "Lidarr is a music management tool designed for Usenet and BitTorrent users. It allows users to manage and organize their music collection with ease. Lidarr integrates with popular Usenet and BitTorrent clients, such as Sonarr and Radarr, to automate the downloading and organizing of music files. The software provides a web-based interface for managing and organizing music, making it easy to search and find songs, albums, and artists. Lidarr also supports metadata management, including album art, artist information, and lyrics, making it easy for users to keep their music collection organized and up-to-date. The software is designed to be easy to use and provides a simple and intuitive interface for managing and organizing music collections, making it a valuable tool for music lovers who want to keep their collection organized and up-to-date. With Lidarr, users can enjoy their music collection from anywhere, making it a powerful tool for managing and sharing music files.", - "install_methods": [ - { - "type": "default", - "script": "ct/lidarr.sh", - "resources": { - "cpu": 2, - "ram": 1024, - "hdd": 4, - "os": "debian", - "version": "12" - } - } - ], - "default_credentials": { - "username": null, - "password": null - }, - "notes": [], - "status": "✅" -} \ No newline at end of file + "name": "Lidarr", + "slug": "lidarr", + "categories": [ + 14 + ], + "date_created": "2024-05-02", + "type": "ct", + "updateable": true, + "privileged": false, + "interface_port": 8686, + "documentation": null, + "website": "https://lidarr.audio/", + "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/lidarr.svg", + "description": "Lidarr is a music management tool designed for Usenet and BitTorrent users. It allows users to manage and organize their music collection with ease. Lidarr integrates with popular Usenet and BitTorrent clients, such as Sonarr and Radarr, to automate the downloading and organizing of music files. The software provides a web-based interface for managing and organizing music, making it easy to search and find songs, albums, and artists. Lidarr also supports metadata management, including album art, artist information, and lyrics, making it easy for users to keep their music collection organized and up-to-date. The software is designed to be easy to use and provides a simple and intuitive interface for managing and organizing music collections, making it a valuable tool for music lovers who want to keep their collection organized and up-to-date. With Lidarr, users can enjoy their music collection from anywhere, making it a powerful tool for managing and sharing music files.", + "install_methods": [ + { + "type": "default", + "script": "ct/lidarr.sh", + "resources": { + "cpu": 2, + "ram": 1024, + "hdd": 4, + "os": "debian", + "version": "12" + } + } + ], + "default_credentials": { + "username": null, + "password": null + }, + "notes": [], + "status": "✅" +} diff --git a/frontend/public/json/mariadb.json b/frontend/public/json/mariadb.json index 0322a0a77..6a007a12f 100644 --- a/frontend/public/json/mariadb.json +++ b/frontend/public/json/mariadb.json @@ -24,6 +24,17 @@ "os": "debian", "version": "12" } + }, + { + "type": "alpine", + "script": "ct/alpine-mariadb.sh", + "resources": { + "cpu": 1, + "ram": 256, + "hdd": 1, + "os": "alpine", + "version": "3.21" + } } ], "default_credentials": { diff --git a/frontend/public/json/meilisearch.json b/frontend/public/json/meilisearch.json new file mode 100644 index 000000000..4dfe7d185 --- /dev/null +++ b/frontend/public/json/meilisearch.json @@ -0,0 +1,43 @@ +{ + "name": "Meilisearch", + "slug": "meilisearch", + "categories": [ + 8 + ], + "date_created": "2025-04-04", + "type": "ct", + "updateable": true, + "privileged": false, + "interface_port": 7700, + "documentation": "https://www.meilisearch.com/docs", + "website": "https://www.meilisearch.com/", + "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/meilisearch.svg", + "description": "Meilisearch is a fast, open-source search engine designed for instant, full-text search with typo tolerance. It provides an API that allows developers to integrate powerful search features into applications. Meilisearch-UI is an optional web-based interface that provides a simple way to interact with Meilisearch, visualize indexed data, and test queries without needing to use the API directly.", + "install_methods": [ + { + "type": "default", + "script": "ct/meilisearch.sh", + "resources": { + "cpu": 2, + "ram": 4096, + "hdd": 7, + "os": "debian", + "version": "12" + } + } + ], + "default_credentials": { + "username": null, + "password": null + }, + "notes": [ + { + "text": "Meilisearch-UI can optionally be installed for a web-based search interface", + "type": "info" + }, + { + "text": "Meilisearch-UI has early development status and can caused performance issues", + "type": "warn" + } + ] +} diff --git a/frontend/public/json/nextpvr.json b/frontend/public/json/nextpvr.json index 9df15532f..11a83a2ea 100644 --- a/frontend/public/json/nextpvr.json +++ b/frontend/public/json/nextpvr.json @@ -2,7 +2,7 @@ "name": "NextPVR", "slug": "nextpvr", "categories": [ - 15 + 13 ], "date_created": "2024-11-20", "type": "ct", diff --git a/frontend/public/json/node-red.json b/frontend/public/json/node-red.json index b86797bc1..771dc592d 100644 --- a/frontend/public/json/node-red.json +++ b/frontend/public/json/node-red.json @@ -24,6 +24,17 @@ "os": "debian", "version": "12" } + }, + { + "type": "alpine", + "script": "ct/alpine-node-red.sh", + "resources": { + "cpu": 1, + "ram": 256, + "hdd": 1, + "os": "alpine", + "version": "3.21" + } } ], "default_credentials": { @@ -32,9 +43,9 @@ }, "notes": [ { - "text": "To install themes, type `update` in the LXC console.", + "text": "To install themes, type `update` in the LXC console. (debian/ubuntu only)", "type": "info" } ], "status": "✅" -} \ No newline at end of file +} diff --git a/frontend/public/json/openziti-tunnel.json b/frontend/public/json/openziti-tunnel.json new file mode 100644 index 000000000..b195c32aa --- /dev/null +++ b/frontend/public/json/openziti-tunnel.json @@ -0,0 +1,43 @@ +{ + "name": "openziti-tunnel", + "slug": "openziti-tunnel", + "categories": [ + 4 + ], + "date_created": "2025-04-02", + "type": "ct", + "updateable": true, + "privileged": false, + "interface_port": null, + "documentation": "https://openziti.io/docs/reference/tunnelers/docker/", + "website": "https://www.openziti.io/", + "logo": "https://raw.githubusercontent.com/openziti/ziti-doc/main/docusaurus/static/img/ziti-logo-dark.svg", + "description": "OpenZiti is an open-source, zero trust networking platform that enables secure connectivity between applications, services, and devices. It provides secure, encrypted connections between clients and services, and can be used to create secure, zero trust networks.", + "install_methods": [ + { + "type": "default", + "script": "ct/openziti-tunnel.sh", + "resources": { + "cpu": 1, + "ram": 512, + "hdd": 2, + "os": "Ubuntu", + "version": "24.04" + } + } + ], + "default_credentials": { + "username": null, + "password": null + }, + "notes": [ + { + "text": "The Openziti tunnel is installed in host mode; please see documentation for more information", + "type": "info" + }, + { + "text": "Openziti tunnel prompts for identity enrollment token during installation", + "type": "info" + } + ] +} diff --git a/frontend/public/json/prometheus.json b/frontend/public/json/prometheus.json index b66cef993..414db95c9 100644 --- a/frontend/public/json/prometheus.json +++ b/frontend/public/json/prometheus.json @@ -24,6 +24,17 @@ "os": "debian", "version": "12" } + }, + { + "type": "alpine", + "script": "ct/alpine-prometheus.sh", + "resources": { + "cpu": 1, + "ram": 256, + "hdd": 1, + "os": "alpine", + "version": "3.21" + } } ], "default_credentials": { diff --git a/frontend/public/json/prowlarr.json b/frontend/public/json/prowlarr.json index c9532022f..79233907d 100644 --- a/frontend/public/json/prowlarr.json +++ b/frontend/public/json/prowlarr.json @@ -1,35 +1,35 @@ { - "name": "Prowlarr", - "slug": "prowlarr", - "categories": [ - 14 - ], - "date_created": "2024-05-02", - "type": "ct", - "updateable": false, - "privileged": false, - "interface_port": 9696, - "documentation": null, - "website": "https://github.com/Prowlarr/Prowlarr", - "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/prowlarr.svg", - "description": "Prowlarr is a software tool designed to integrate with various PVR (Personal Video Recorder) apps. It is built on a popular *arr .net/ReactJS base stack and serves as an indexer manager and proxy. Prowlarr makes it easy to manage and organize TV show and movie collections, by integrating with popular PVR apps and automating the downloading and organizing of media files. The software provides a web-based interface for managing and organizing TV shows and movies, making it easy to search and find content. Prowlarr also supports metadata management, including show and movie information, making it easy for users to keep their media collection organized and up-to-date. The software is designed to be easy to use and provides a simple and intuitive interface for managing and organizing media collections, making it a valuable tool for media enthusiasts who want to keep their collection organized and up-to-date. With Prowlarr, users can enjoy their media collection from anywhere, making it a powerful tool for managing and sharing media files.", - "install_methods": [ - { - "type": "default", - "script": "ct/prowlarr.sh", - "resources": { - "cpu": 2, - "ram": 1024, - "hdd": 4, - "os": "debian", - "version": "12" - } - } - ], - "default_credentials": { - "username": null, - "password": null - }, - "notes": [], - "status": "✅" -} \ No newline at end of file + "name": "Prowlarr", + "slug": "prowlarr", + "categories": [ + 14 + ], + "date_created": "2024-05-02", + "type": "ct", + "updateable": true, + "privileged": false, + "interface_port": 9696, + "documentation": null, + "website": "https://github.com/Prowlarr/Prowlarr", + "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/prowlarr.svg", + "description": "Prowlarr is a software tool designed to integrate with various PVR (Personal Video Recorder) apps. It is built on a popular *arr .net/ReactJS base stack and serves as an indexer manager and proxy. Prowlarr makes it easy to manage and organize TV show and movie collections, by integrating with popular PVR apps and automating the downloading and organizing of media files. The software provides a web-based interface for managing and organizing TV shows and movies, making it easy to search and find content. Prowlarr also supports metadata management, including show and movie information, making it easy for users to keep their media collection organized and up-to-date. The software is designed to be easy to use and provides a simple and intuitive interface for managing and organizing media collections, making it a valuable tool for media enthusiasts who want to keep their collection organized and up-to-date. With Prowlarr, users can enjoy their media collection from anywhere, making it a powerful tool for managing and sharing media files.", + "install_methods": [ + { + "type": "default", + "script": "ct/prowlarr.sh", + "resources": { + "cpu": 2, + "ram": 1024, + "hdd": 4, + "os": "debian", + "version": "12" + } + } + ], + "default_credentials": { + "username": null, + "password": null + }, + "notes": [], + "status": "✅" +} diff --git a/frontend/public/json/radarr.json b/frontend/public/json/radarr.json index 9c03a1a43..9d0de938c 100644 --- a/frontend/public/json/radarr.json +++ b/frontend/public/json/radarr.json @@ -1,35 +1,35 @@ { - "name": "Radarr", - "slug": "radarr", - "categories": [ - 14 - ], - "date_created": "2024-05-02", - "type": "ct", - "updateable": false, - "privileged": false, - "interface_port": 7878, - "documentation": null, - "website": "https://radarr.video/", - "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/radarr.svg", - "description": "Radarr is a movie management tool designed for Usenet and BitTorrent users. It allows users to manage and organize their movie collection with ease. Radarr integrates with popular Usenet and BitTorrent clients, such as Sonarr and Lidarr, to automate the downloading and organizing of movie files. The software provides a web-based interface for managing and organizing movies, making it easy to search and find titles, genres, and release dates. Radarr also supports metadata management, including movie posters and information, making it easy for users to keep their movie collection organized and up-to-date. The software is designed to be easy to use and provides a simple and intuitive interface for managing and organizing movie collections, making it a valuable tool for movie enthusiasts who want to keep their collection organized and up-to-date. With Radarr, users can enjoy their movie collection from anywhere, making it a powerful tool for managing and sharing movie files.", - "install_methods": [ - { - "type": "default", - "script": "ct/radarr.sh", - "resources": { - "cpu": 2, - "ram": 1024, - "hdd": 4, - "os": "debian", - "version": "12" - } - } - ], - "default_credentials": { - "username": null, - "password": null - }, - "notes": [], - "status": "✅" -} \ No newline at end of file + "name": "Radarr", + "slug": "radarr", + "categories": [ + 14 + ], + "date_created": "2024-05-02", + "type": "ct", + "updateable": true, + "privileged": false, + "interface_port": 7878, + "documentation": null, + "website": "https://radarr.video/", + "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/radarr.svg", + "description": "Radarr is a movie management tool designed for Usenet and BitTorrent users. It allows users to manage and organize their movie collection with ease. Radarr integrates with popular Usenet and BitTorrent clients, such as Sonarr and Lidarr, to automate the downloading and organizing of movie files. The software provides a web-based interface for managing and organizing movies, making it easy to search and find titles, genres, and release dates. Radarr also supports metadata management, including movie posters and information, making it easy for users to keep their movie collection organized and up-to-date. The software is designed to be easy to use and provides a simple and intuitive interface for managing and organizing movie collections, making it a valuable tool for movie enthusiasts who want to keep their collection organized and up-to-date. With Radarr, users can enjoy their movie collection from anywhere, making it a powerful tool for managing and sharing movie files.", + "install_methods": [ + { + "type": "default", + "script": "ct/radarr.sh", + "resources": { + "cpu": 2, + "ram": 1024, + "hdd": 4, + "os": "debian", + "version": "12" + } + } + ], + "default_credentials": { + "username": null, + "password": null + }, + "notes": [], + "status": "✅" +} diff --git a/frontend/public/json/slskd.json b/frontend/public/json/slskd.json new file mode 100644 index 000000000..9919ccdb7 --- /dev/null +++ b/frontend/public/json/slskd.json @@ -0,0 +1,43 @@ +{ + "name": "slskd", + "slug": "slskd", + "categories": [ + 11 + ], + "date_created": "2025-03-31", + "type": "ct", + "updateable": true, + "privileged": false, + "interface_port": 5030, + "documentation": "https://github.com/slskd/slskd/tree/master/docs", + "website": "https://github.com/slskd/slskd", + "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/png/slskd.png", + "description": "A modern client-server application for the Soulseek file sharing network. ", + "install_methods": [ + { + "type": "default", + "script": "ct/slskd.sh", + "resources": { + "cpu": 1, + "ram": 512, + "hdd": 4, + "os": "Debian", + "version": "12" + } + } + ], + "default_credentials": { + "username": "slskd", + "password": "slskd" + }, + "notes": [ + { + "text": "See /opt/slskd/config/slskd.yml to add your Soulseek credentials", + "type": "info" + }, + { + "text": "This LXC includes Soularr; it needs to be configured (/opt/soularr/config.ini) before it will work", + "type": "info" + } + ] +} diff --git a/frontend/public/json/versions.json b/frontend/public/json/versions.json index c3370ccd9..05e39bc2a 100644 --- a/frontend/public/json/versions.json +++ b/frontend/public/json/versions.json @@ -1,44 +1,529 @@ [ + { + "name": "Graylog2/graylog2-server", + "version": "6.2.0-beta.4", + "date": "2025-04-07T11:28:13Z" + }, + { + "name": "VictoriaMetrics/VictoriaMetrics", + "version": "pmm-6401-v1.115.0", + "date": "2025-04-07T11:15:53Z" + }, + { + "name": "semaphoreui/semaphore", + "version": "v2.13.10", + "date": "2025-04-07T11:05:41Z" + }, { "name": "fhem/fhem-mirror", "version": "6.2", - "date": "2025-03-28T10:33:13Z" + "date": "2025-04-07T10:34:55Z" + }, + { + "name": "syncthing/syncthing", + "version": "v1.29.4", + "date": "2025-04-01T08:45:07Z" + }, + { + "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": "Checkmk/checkmk", + "version": "v2.4.0b4-rc1", + "date": "2025-04-07T09:13:56Z" + }, + { + "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": "StarFleetCPTN/GoMFT", + "version": "v0.2.5", + "date": "2025-04-07T07:43:29Z" + }, + { + "name": "nzbgetcom/nzbget", + "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": "morpheus65535/bazarr", + "version": "v1.5.1", + "date": "2025-01-01T16:15:52Z" + }, + { + "name": "Jackett/Jackett", + "version": "v0.22.1740", + "date": "2025-04-07T05:56:22Z" + }, + { + "name": "prometheus/prometheus", + "version": "v0.303.0-rc.1", + "date": "2025-04-07T04:39:38Z" + }, + { + "name": "open-webui/open-webui", + "version": "v0.6.2", + "date": "2025-04-07T03:41:23Z" + }, + { + "name": "firefly-iii/firefly-iii", + "version": "v6.2.10", + "date": "2025-03-22T13:02:26Z" + }, + { + "name": "Luligu/matterbridge", + "version": "2.2.7", + "date": "2025-04-06T20:00:53Z" + }, + { + "name": "Dolibarr/dolibarr", + "version": "21.0.1", + "date": "2025-04-06T19:22:59Z" + }, + { + "name": "pelican-dev/wings", + "version": "v1.0.0-beta11", + "date": "2025-04-06T18:52:35Z" + }, + { + "name": "stonith404/pingvin-share", + "version": "v1.11.1", + "date": "2025-04-06T18:39:42Z" + }, + { + "name": "wavelog/wavelog", + "version": "2.0.3", + "date": "2025-04-06T17:35:41Z" + }, + { + "name": "TandoorRecipes/recipes", + "version": "1.5.34", + "date": "2025-03-27T16:17:38Z" + }, + { + "name": "runtipi/runtipi", + "version": "v3.10.0", + "date": "2025-03-15T14:38:16Z" + }, + { + "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": "Prowlarr/Prowlarr", + "version": "v1.32.2.4987", + "date": "2025-03-16T09:41:37Z" + }, + { + "name": "Radarr/Radarr", + "version": "v5.21.1.9799", + "date": "2025-03-24T15:52:12Z" + }, + { + "name": "karakeep-app/karakeep", + "version": "extension/v1.2.4", + "date": "2025-04-06T11:56:18Z" + }, + { + "name": "TechnitiumSoftware/DnsServer", + "version": "v13.5.0", + "date": "2025-04-06T11:24:50Z" + }, + { + "name": "TriliumNext/Notes", + "version": "v0.92.6", + "date": "2025-04-06T10:38:54Z" + }, + { + "name": "kimai/kimai", + "version": "2.32.0", + "date": "2025-04-06T09:43:51Z" + }, + { + "name": "inventree/InvenTree", + "version": "0.17.10", + "date": "2025-04-06T05:31:49Z" + }, + { + "name": "ollama/ollama", + "version": "v0.6.5-rc0", + "date": "2025-04-03T23:57:36Z" + }, + { + "name": "jellyfin/jellyfin", + "version": "v10.10.7", + "date": "2025-04-05T19:14:59Z" + }, + { + "name": "azukaar/Cosmos-Server", + "version": "v0.18.4", + "date": "2025-04-05T19:12:57Z" + }, + { + "name": "wger-project/wger", + "version": "2.3", + "date": "2025-04-05T18:05:36Z" + }, + { + "name": "Paymenter/Paymenter", + "version": "v1.0.2", + "date": "2025-04-05T17:40:25Z" + }, + { + "name": "keycloak/keycloak", + "version": "26.1.4", + "date": "2025-03-13T15:41:42Z" + }, + { + "name": "bastienwirtz/homer", + "version": "v25.04.1", + "date": "2025-04-05T12:39:18Z" + }, + { + "name": "navidrome/navidrome", + "version": "v0.55.2", + "date": "2025-04-05T12:07:32Z" + }, + { + "name": "Kozea/Radicale", + "version": "v3.5.1", + "date": "2025-04-05T06:20:18Z" + }, + { + "name": "actualbudget/actual", + "version": "v25.4.0", + "date": "2025-04-05T04:14:57Z" + }, + { + "name": "home-assistant/core", + "version": "2025.4.1", + "date": "2025-04-04T20:59:57Z" + }, + { + "name": "Koenkk/zigbee2mqtt", + "version": "2.2.1", + "date": "2025-04-04T20:15:48Z" + }, + { + "name": "YunoHost/yunohost", + "version": "debian/12.0.13", + "date": "2025-04-04T20:05:45Z" + }, + { + "name": "coder/code-server", + "version": "v4.98.2", + "date": "2025-03-15T02:11:28Z" + }, + { + "name": "homarr-labs/homarr", + "version": "v1.14.0", + "date": "2025-04-04T19:15:59Z" + }, + { + "name": "Athou/commafeed", + "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", + "date": "2025-04-04T12:58:11Z" + }, + { + "name": "sabnzbd/sabnzbd", + "version": "4.5.0", + "date": "2025-03-30T16:17:11Z" + }, + { + "name": "dgtlmoon/changedetection.io", + "version": "0.49.12", + "date": "2025-04-04T07:31:08Z" + }, + { + "name": "wazuh/wazuh", + "version": "coverity-w14-4.12.0", + "date": "2025-04-04T00:03:06Z" + }, + { + "name": "minio/minio", + "version": "RELEASE.2025-04-03T14-56-28Z", + "date": "2025-04-03T19:08:18Z" + }, + { + "name": "OctoPrint/OctoPrint", + "version": "1.10.3", + "date": "2024-11-05T09:20:50Z" + }, + { + "name": "jupyter/notebook", + "version": "@jupyter-notebook/ui-components@7.4.0-rc.0", + "date": "2025-04-03T06:49:38Z" + }, + { + "name": "rabbitmq/rabbitmq-server", + "version": "v4.0.8", + "date": "2025-04-03T05:11:15Z" + }, + { + "name": "HabitRPG/habitica", + "version": "v5.35.1", + "date": "2025-04-02T21:49:00Z" + }, + { + "name": "zitadel/zitadel", + "version": "v2.63.9", + "date": "2025-03-31T12:47:21Z" + }, + { + "name": "BookStackApp/BookStack", + "version": "v25.02.2", + "date": "2025-04-02T16:39:50Z" + }, + { + "name": "cloudflare/cloudflared", + "version": "2025.4.0", + "date": "2025-04-02T15:38:53Z" + }, + { + "name": "jenkinsci/jenkins", + "version": "jenkins-2.503", + "date": "2025-04-02T15:12:13Z" + }, + { + "name": "hargata/lubelog", + "version": "v1.4.6", + "date": "2025-04-02T14:07:12Z" + }, + { + "name": "immich-app/immich", + "version": "v1.131.3", + "date": "2025-04-01T22:48:22Z" + }, + { + "name": "MagicMirrorOrg/MagicMirror", + "version": "v2.31.0", + "date": "2025-04-01T18:12:45Z" + }, + { + "name": "influxdata/influxdb", + "version": "v3.0.0-0.beta.3", + "date": "2025-04-01T15:34:30Z" + }, + { + "name": "element-hq/synapse", + "version": "v1.127.1", + "date": "2025-03-26T21:44:28Z" + }, + { + "name": "theonedev/onedev", + "version": "v11.8.6", + "date": "2025-04-01T13:52:03Z" + }, + { + "name": "neo4j/neo4j", + "version": "5.26.5", + "date": "2025-04-01T09:32:48Z" + }, + { + "name": "diced/zipline", + "version": "v4.0.2", + "date": "2025-04-01T04:51:05Z" + }, + { + "name": "outline/outline", + "version": "v0.82.1-18", + "date": "2025-03-31T23:12:40Z" + }, + { + "name": "esphome/esphome", + "version": "2025.3.3", + "date": "2025-03-31T22:07:05Z" + }, + { + "name": "Kometa-Team/Kometa", + "version": "v2.2.0", + "date": "2025-03-31T21:31:48Z" + }, + { + "name": "NodeBB/NodeBB", + "version": "v4.2.0", + "date": "2025-03-19T18:34:01Z" + }, + { + "name": "traefik/traefik", + "version": "v3.3.5", + "date": "2025-03-31T08:55:12Z" + }, + { + "name": "home-assistant/operating-system", + "version": "15.1", + "date": "2025-03-31T13:42:20Z" + }, + { + "name": "n8n-io/n8n", + "version": "n8n@1.84.3", + "date": "2025-03-27T11:54:33Z" + }, + { + "name": "documenso/documenso", + "version": "v1.10.0-rc.4", + "date": "2025-03-31T09:02:22Z" + }, + { + "name": "MediaBrowser/Emby.Releases", + "version": "4.8.11.0", + "date": "2025-03-10T06:39:11Z" + }, + { + "name": "louislam/dockge", + "version": "1.5.0", + "date": "2025-03-30T17:42:59Z" + }, + { + "name": "pi-hole/pi-hole", + "version": "v6.0.6", + "date": "2025-03-30T16:59:06Z" + }, + { + "name": "Part-DB/Part-DB-server", + "version": "v1.17.0", + "date": "2025-03-30T14:21:53Z" + }, + { + "name": "openhab/openhab-core", + "version": "4.3.4", + "date": "2025-03-30T13:32:38Z" + }, + { + "name": "pocketbase/pocketbase", + "version": "v0.26.6", + "date": "2025-03-30T08:02:19Z" + }, + { + "name": "Readarr/Readarr", + "version": "v2.0.0.4645", + "date": "2017-03-07T18:56:06Z" + }, + { + "name": "Lidarr/Lidarr", + "version": "v2.10.3.4602", + "date": "2025-03-23T11:00:37Z" + }, + { + "name": "aceberg/WatchYourLAN", + "version": "2.1.2-alpine", + "date": "2025-03-30T06:25:22Z" + }, + { + "name": "pocket-id/pocket-id", + "version": "v0.45.0", + "date": "2025-03-29T23:12:22Z" + }, + { + "name": "glanceapp/glance", + "version": "v0.7.9", + "date": "2025-03-29T18:08:11Z" + }, + { + "name": "tobychui/zoraxy", + "version": "v3.1.9", + "date": "2025-03-01T02:24:33Z" + }, + { + "name": "inspircd/inspircd", + "version": "v4.7.0", + "date": "2025-03-29T03:50:50Z" + }, + { + "name": "bunkerity/bunkerweb", + "version": "v1.6.1", + "date": "2025-03-15T17:29:17Z" + }, + { + "name": "OliveTin/OliveTin", + "version": "2025.3.28", + "date": "2025-03-29T00:18:56Z" + }, + { + "name": "TasmoAdmin/TasmoAdmin", + "version": "v4.2.3", + "date": "2025-02-09T23:07:48Z" + }, + { + "name": "gristlabs/grist-core", + "version": "v1.5.0", + "date": "2025-03-28T20:43:51Z" + }, + { + "name": "grocy/grocy", + "version": "v4.5.0", + "date": "2025-03-28T19:02:22Z" + }, + { + "name": "Brandawg93/PeaNUT", + "version": "v5.6.1", + "date": "2025-03-28T18:40:22Z" + }, + { + "name": "louislam/uptime-kuma", + "version": "2.0.0-beta.2-temp", + "date": "2025-03-28T08:45:58Z" + }, + { + "name": "emqx/emqx", + "version": "e5.9.0-beta.2", + "date": "2025-03-28T15:06:27Z" + }, + { + "name": "goauthentik/authentik", + "version": "version/2025.2.3", + "date": "2025-03-28T14:28:34Z" + }, + { + "name": "hakimel/reveal.js", + "version": "5.2.1", + "date": "2025-03-28T13:00:23Z" }, { "name": "cockpit-project/cockpit", "version": "336.2", "date": "2025-03-28T10:16:47Z" }, - { - "name": "YunoHost/yunohost", - "version": "debian/12.0.12", - "date": "2025-03-16T11:59:24Z" - }, - { - "name": "Jackett/Jackett", - "version": "v0.22.1702", - "date": "2025-03-28T05:57:28Z" - }, { "name": "gethomepage/homepage", "version": "v1.1.1", "date": "2025-03-28T04:12:31Z" }, - { - "name": "documenso/documenso", - "version": "v1.10.0-rc.3", - "date": "2025-03-28T03:45:54Z" - }, - { - "name": "theonedev/onedev", - "version": "v11.8.1", - "date": "2025-03-28T00:13:20Z" - }, - { - "name": "StarFleetCPTN/GoMFT", - "version": "v.0.2.3", - "date": "2025-03-27T23:54:49Z" - }, { "name": "Bubka/2FAuth", "version": "v5.5.0", @@ -49,161 +534,41 @@ "version": "v2.48.1", "date": "2025-03-27T22:02:16Z" }, - { - "name": "keycloak/keycloak", - "version": "26.1.4", - "date": "2025-03-13T15:41:42Z" - }, - { - "name": "home-assistant/core", - "version": "2025.3.4", - "date": "2025-03-21T20:22:46Z" - }, - { - "name": "gristlabs/grist-core", - "version": "v1.5.0", - "date": "2025-03-27T19:59:55Z" - }, { "name": "hivemq/hivemq-community-edition", "version": "2025.2", "date": "2025-03-27T19:21:13Z" }, - { - "name": "fallenbagel/jellyseerr", - "version": "preview-music-support", - "date": "2025-03-27T16:54:41Z" - }, - { - "name": "immich-app/immich", - "version": "v1.130.3", - "date": "2025-03-27T16:38:04Z" - }, - { - "name": "msgbyte/tianji", - "version": "v1.19.4", - "date": "2025-03-27T16:25:34Z" - }, - { - "name": "zwave-js/zwave-js-ui", - "version": "v10.1.3", - "date": "2025-03-27T15:51:38Z" - }, - { - "name": "home-assistant/operating-system", - "version": "15.0", - "date": "2025-03-17T10:26:18Z" - }, { "name": "tailscale/tailscale", "version": "v1.82.0", "date": "2025-03-27T13:08:18Z" }, - { - "name": "n8n-io/n8n", - "version": "n8n@1.84.3", - "date": "2025-03-27T11:54:33Z" - }, - { - "name": "zabbix/zabbix", - "version": "7.2.5", - "date": "2025-03-27T11:06:48Z" - }, - { - "name": "syncthing/syncthing", - "version": "v1.29.3", - "date": "2025-03-12T11:56:30Z" - }, { "name": "evcc-io/evcc", "version": "0.202.1", "date": "2025-03-27T08:24:55Z" }, - { - "name": "morpheus65535/bazarr", - "version": "v1.5.1", - "date": "2025-01-01T16:15:52Z" - }, { "name": "openobserve/openobserve", "version": "v0.14.5-rc6", "date": "2025-03-27T05:15:49Z" }, - { - "name": "element-hq/synapse", - "version": "v1.127.1", - "date": "2025-03-26T21:44:28Z" - }, - { - "name": "wazuh/wazuh", - "version": "coverity-w13-4.12.0", - "date": "2025-03-26T21:11:43Z" - }, { "name": "duplicati/duplicati", "version": "v2.1.0.112-2.1.0.112_canary_2025-03-26", "date": "2025-03-26T21:04:38Z" }, - { - "name": "ollama/ollama", - "version": "v0.6.3-rc1", - "date": "2025-03-26T20:39:01Z" - }, - { - "name": "runtipi/runtipi", - "version": "nightly", - "date": "2025-03-26T20:06:34Z" - }, - { - "name": "glanceapp/glance", - "version": "v0.7.8", - "date": "2025-03-26T19:59:07Z" - }, - { - "name": "semaphoreui/semaphore", - "version": "v2.13.2", - "date": "2025-03-26T19:13:48Z" - }, - { - "name": "dgtlmoon/changedetection.io", - "version": "0.49.9", - "date": "2025-03-26T15:31:03Z" - }, - { - "name": "prometheus/prometheus", - "version": "v0.303.0-rc.0", - "date": "2025-03-26T12:48:46Z" - }, - { - "name": "jupyter/notebook", - "version": "@jupyter-notebook/ui-components@7.4.0-beta.3", - "date": "2025-03-26T10:07:53Z" - }, { "name": "forgejo/forgejo", "version": "v12.0.0-dev", "date": "2025-03-26T09:58:55Z" }, - { - "name": "Checkmk/checkmk", - "version": "v2.2.0p41", - "date": "2025-03-26T09:55:26Z" - }, { "name": "sct/overseerr", "version": "v1.34.0", "date": "2025-03-26T08:48:34Z" }, - { - "name": "pocketbase/pocketbase", - "version": "v0.26.4", - "date": "2025-03-26T05:16:46Z" - }, - { - "name": "esphome/esphome", - "version": "2025.3.2", - "date": "2025-03-25T23:06:45Z" - }, { "name": "grafana/grafana", "version": "v11.6.0", @@ -219,76 +584,31 @@ "version": "v0.34.1", "date": "2025-03-25T18:11:12Z" }, - { - "name": "aceberg/WatchYourLAN", - "version": "2.1.1", - "date": "2025-03-25T17:21:41Z" - }, - { - "name": "pocket-id/pocket-id", - "version": "v0.44.0", - "date": "2025-03-25T16:09:10Z" - }, { "name": "dotnetfactory/fluid-calendar", "version": "v1.3.0", "date": "2025-03-25T15:55:02Z" }, - { - "name": "emqx/emqx", - "version": "v5.8.6", - "date": "2025-03-25T15:22:13Z" - }, { "name": "hansmi/prometheus-paperless-exporter", "version": "v0.0.7", "date": "2025-03-25T15:11:18Z" }, - { - "name": "jenkinsci/jenkins", - "version": "jenkins-2.503", - "date": "2025-03-25T14:01:20Z" - }, { "name": "crowdsecurity/crowdsec", "version": "v1.6.8", "date": "2025-03-25T13:33:10Z" }, - { - "name": "icereed/paperless-gpt", - "version": "v0.14.1", - "date": "2025-03-25T10:09:14Z" - }, - { - "name": "VictoriaMetrics/VictoriaMetrics", - "version": "pmm-6401-v1.114.0", - "date": "2025-03-25T07:58:34Z" - }, - { - "name": "zitadel/zitadel", - "version": "v2.70.6", - "date": "2025-03-25T07:11:32Z" - }, { "name": "caddyserver/caddy", "version": "v2.9.1", "date": "2025-01-08T15:22:53Z" }, - { - "name": "influxdata/influxdb", - "version": "v3.0.0-0.beta.2", - "date": "2025-03-24T21:12:19Z" - }, { "name": "ZoeyVid/NPMplus", "version": "2025-03-24-r2", "date": "2025-03-24T20:52:35Z" }, - { - "name": "HabitRPG/habitica", - "version": "v5.35.0", - "date": "2025-03-24T20:51:10Z" - }, { "name": "go-gitea/gitea", "version": "v1.23.6", @@ -299,31 +619,6 @@ "version": "v0.9.0", "date": "2025-03-24T18:25:37Z" }, - { - "name": "Radarr/Radarr", - "version": "v5.21.1.9799", - "date": "2025-03-24T15:52:12Z" - }, - { - "name": "Graylog2/graylog2-server", - "version": "6.2.0-beta.2", - "date": "2025-03-24T12:20:51Z" - }, - { - "name": "wavelog/wavelog", - "version": "2.0.2", - "date": "2025-03-24T12:02:08Z" - }, - { - "name": "nzbgetcom/nzbget", - "version": "v24.8", - "date": "2025-03-18T07:33:51Z" - }, - { - "name": "firefly-iii/firefly-iii", - "version": "v6.2.10", - "date": "2025-03-22T13:02:26Z" - }, { "name": "requarks/wiki", "version": "v2.5.307", @@ -334,46 +629,21 @@ "version": "v1.17.0", "date": "2025-03-24T00:46:32Z" }, - { - "name": "Lidarr/Lidarr", - "version": "v2.10.3.4602", - "date": "2025-03-23T11:00:37Z" - }, { "name": "nicolargo/glances", "version": "v4.3.1", "date": "2025-03-23T09:02:54Z" }, - { - "name": "Prowlarr/Prowlarr", - "version": "v1.32.2.4987", - "date": "2025-03-16T09:41:37Z" - }, { "name": "usememos/memos", "version": "v0.24.2", "date": "2025-03-23T04:01:50Z" }, - { - "name": "OliveTin/OliveTin", - "version": "2025.3.23", - "date": "2025-03-23T01:38:55Z" - }, - { - "name": "hoarder-app/hoarder", - "version": "sdk/v0.23.0", - "date": "2025-03-22T17:26:10Z" - }, { "name": "netbox-community/netbox", "version": "v4.2.6", "date": "2025-03-21T21:20:29Z" }, - { - "name": "sabnzbd/sabnzbd", - "version": "4.4.1", - "date": "2024-12-20T13:21:31Z" - }, { "name": "leiweibau/Pi.Alert", "version": "v2025-03-21", @@ -384,11 +654,6 @@ "version": "v2.7.6", "date": "2025-03-21T19:24:53Z" }, - { - "name": "homarr-labs/homarr", - "version": "v1.12.0", - "date": "2025-03-21T19:14:59Z" - }, { "name": "photoprism/photoprism", "version": "250321-57590c48b", @@ -404,56 +669,16 @@ "version": "v0.9.77", "date": "2025-03-21T02:25:42Z" }, - { - "name": "stonith404/pingvin-share", - "version": "v1.10.4", - "date": "2025-03-20T18:56:10Z" - }, - { - "name": "neo4j/neo4j", - "version": "4.4.42", - "date": "2025-03-20T14:44:17Z" - }, - { - "name": "redis/redis", - "version": "8.0-rc1", - "date": "2025-03-11T18:16:27Z" - }, - { - "name": "rabbitmq/rabbitmq-server", - "version": "v4.0.7", - "date": "2025-02-26T19:07:11Z" - }, - { - "name": "NodeBB/NodeBB", - "version": "v4.2.0", - "date": "2025-03-19T18:34:01Z" - }, { "name": "seanmorley15/AdventureLog", "version": "v0.9.0", "date": "2025-03-19T13:30:02Z" }, - { - "name": "hakimel/reveal.js", - "version": "5.2.0", - "date": "2025-03-19T11:03:56Z" - }, - { - "name": "Luligu/matterbridge", - "version": "2.2.5", - "date": "2025-03-19T09:11:26Z" - }, { "name": "Donkie/Spoolman", "version": "v0.22.1", "date": "2025-03-18T21:01:22Z" }, - { - "name": "OctoPrint/OctoPrint", - "version": "1.10.3", - "date": "2024-11-05T09:20:50Z" - }, { "name": "apache/couchdb", "version": "3.4.3.post1", @@ -469,31 +694,16 @@ "version": "v2.20.0", "date": "2025-03-17T22:44:56Z" }, - { - "name": "bastienwirtz/homer", - "version": "v25.03.3", - "date": "2025-03-17T20:55:37Z" - }, { "name": "Kareadita/Kavita", "version": "v0.8.5.11", "date": "2025-03-17T19:25:25Z" }, - { - "name": "goauthentik/authentik", - "version": "version/2025.2.2", - "date": "2025-03-17T19:16:49Z" - }, { "name": "Sonarr/Sonarr", "version": "v4.0.14.2939", "date": "2025-03-17T19:12:37Z" }, - { - "name": "TriliumNext/Notes", - "version": "v0.92.4", - "date": "2025-03-17T16:00:19Z" - }, { "name": "webmin/webmin", "version": "2.303", @@ -504,46 +714,16 @@ "version": "v1.60.0", "date": "2025-03-16T18:39:49Z" }, - { - "name": "BookStackApp/BookStack", - "version": "v25.02.1", - "date": "2025-03-16T12:51:00Z" - }, - { - "name": "Kozea/Radicale", - "version": "v3.5.0", - "date": "2025-03-16T06:05:55Z" - }, - { - "name": "pelican-dev/wings", - "version": "v1.0.0-beta10", - "date": "2025-03-15T20:24:34Z" - }, { "name": "pelican-dev/panel", "version": "v1.0.0-beta18", "date": "2025-03-15T20:24:04Z" }, - { - "name": "bunkerity/bunkerweb", - "version": "v1.6.1", - "date": "2025-03-15T17:29:17Z" - }, { "name": "henrygd/beszel", "version": "v0.10.2", "date": "2025-03-15T07:14:54Z" }, - { - "name": "navidrome/navidrome", - "version": "v0.55.1", - "date": "2025-03-15T05:36:06Z" - }, - { - "name": "coder/code-server", - "version": "v4.98.2", - "date": "2025-03-15T02:11:28Z" - }, { "name": "Threadfin/Threadfin", "version": "1.2.31", @@ -569,21 +749,6 @@ "version": "1.26.1", "date": "2025-03-13T21:34:25Z" }, - { - "name": "kimai/kimai", - "version": "2.31.0", - "date": "2025-03-13T17:13:47Z" - }, - { - "name": "diced/zipline", - "version": "v4.0.1", - "date": "2025-03-12T22:41:17Z" - }, - { - "name": "minio/minio", - "version": "RELEASE.2025-03-12T18-04-18Z", - "date": "2025-03-12T18:45:21Z" - }, { "name": "transmission/transmission", "version": "4.0.1-beta.1", @@ -614,11 +779,6 @@ "version": "v0.8.2", "date": "2025-03-11T05:20:22Z" }, - { - "name": "stackblitz-labs/bolt.diy", - "version": "v0.0.7-hf1", - "date": "2025-03-10T20:49:39Z" - }, { "name": "AlexxIT/go2rtc", "version": "v1.9.9", @@ -629,16 +789,6 @@ "version": "v21.0.0.0", "date": "2025-03-09T12:25:44Z" }, - { - "name": "Readarr/Readarr", - "version": "v2.0.0.4645", - "date": "2017-03-07T18:56:06Z" - }, - { - "name": "Brandawg93/PeaNUT", - "version": "v5.6.0", - "date": "2025-03-08T19:02:31Z" - }, { "name": "YuukanOO/seelf", "version": "v2.4.2", @@ -659,26 +809,11 @@ "version": "v0.28.1", "date": "2025-03-07T15:41:35Z" }, - { - "name": "hargata/lubelog", - "version": "v1.4.5", - "date": "2025-03-06T19:43:48Z" - }, { "name": "eclipse-mosquitto/mosquitto", "version": "v2.0.21", "date": "2025-03-06T16:24:56Z" }, - { - "name": "Dolibarr/dolibarr", - "version": "21.0.0", - "date": "2025-03-06T16:20:45Z" - }, - { - "name": "open-webui/open-webui", - "version": "v0.5.20", - "date": "2025-03-06T03:44:57Z" - }, { "name": "matze/wastebin", "version": "3.0.0", @@ -694,71 +829,26 @@ "version": "tc_v0.6.4", "date": "2025-03-05T15:43:40Z" }, - { - "name": "apache/tomcat", - "version": "10.1.39", - "date": "2025-03-04T19:05:18Z" - }, - { - "name": "pi-hole/pi-hole", - "version": "v6.0.5", - "date": "2025-03-04T17:28:41Z" - }, { "name": "sysadminsmedia/homebox", "version": "v0.18.0", "date": "2025-03-04T15:35:27Z" }, - { - "name": "actualbudget/actual", - "version": "v25.3.1", - "date": "2025-03-03T02:05:36Z" - }, - { - "name": "Koenkk/zigbee2mqtt", - "version": "2.1.3", - "date": "2025-03-02T07:47:30Z" - }, { "name": "heiher/hev-socks5-server", "version": "2.8.0", "date": "2025-03-02T04:30:50Z" }, - { - "name": "inspircd/inspircd", - "version": "v4.6.0", - "date": "2025-03-01T10:29:31Z" - }, - { - "name": "tobychui/zoraxy", - "version": "v3.1.9", - "date": "2025-03-01T02:24:33Z" - }, - { - "name": "grocy/grocy", - "version": "v4.4.2", - "date": "2025-02-28T16:26:05Z" - }, { "name": "jordan-dalby/ByteStash", "version": "v1.5.7", "date": "2025-02-27T20:04:08Z" }, - { - "name": "cloudflare/cloudflared", - "version": "2025.2.1", - "date": "2025-02-27T11:36:11Z" - }, { "name": "cross-seed/cross-seed", "version": "v6.11.2", "date": "2025-02-26T14:54:49Z" }, - { - "name": "Part-DB/Part-DB-server", - "version": "v1.16.1", - "date": "2025-02-26T11:29:15Z" - }, { "name": "silverbulletmd/silverbullet", "version": "0.10.4", @@ -774,11 +864,6 @@ "version": "v12.5.0", "date": "2025-02-25T14:55:50Z" }, - { - "name": "traefik/traefik", - "version": "v3.3.4", - "date": "2025-02-25T10:18:58Z" - }, { "name": "schlagmichdoch/PairDrop", "version": "v1.11.2", @@ -799,31 +884,6 @@ "version": "v1.1.05", "date": "2025-02-24T11:53:12Z" }, - { - "name": "Athou/commafeed", - "version": "5.6.1", - "date": "2025-02-23T20:39:48Z" - }, - { - "name": "openhab/openhab-core", - "version": "5.0.0.M1", - "date": "2025-02-23T14:55:36Z" - }, - { - "name": "outline/outline", - "version": "v0.82.1-15", - "date": "2025-02-23T14:38:09Z" - }, - { - "name": "TechnitiumSoftware/DnsServer", - "version": "v13.4.3", - "date": "2025-02-23T11:08:26Z" - }, - { - "name": "azukaar/Cosmos-Server", - "version": "v0.18.3", - "date": "2025-02-21T20:51:12Z" - }, { "name": "prometheus-pve/prometheus-pve-exporter", "version": "v3.5.2", @@ -844,11 +904,6 @@ "version": "REL_13_20", "date": "2025-02-17T21:17:13Z" }, - { - "name": "jellyfin/jellyfin", - "version": "v10.10.6", - "date": "2025-02-16T21:55:45Z" - }, { "name": "sbondCo/Watcharr", "version": "v2.0.2", @@ -869,6 +924,11 @@ "version": "1.3.10", "date": "2025-02-14T16:23:14Z" }, + { + "name": "TryGhost/Ghost-CLI", + "version": "v1.27.0", + "date": "2025-02-13T15:55:36Z" + }, { "name": "MariaDB/server", "version": "mariadb-11.7.2", @@ -889,16 +949,16 @@ "version": "v1.9.0", "date": "2025-02-11T13:26:42Z" }, - { - "name": "TasmoAdmin/TasmoAdmin", - "version": "v4.2.3", - "date": "2025-02-09T23:07:48Z" - }, { "name": "dani-garcia/vaultwarden", "version": "1.33.2", "date": "2025-02-09T17:54:59Z" }, + { + "name": "slskd/slskd", + "version": "0.22.2", + "date": "2025-02-09T00:00:04Z" + }, { "name": "blakeblackshear/frigate", "version": "v0.15.0", @@ -1004,21 +1064,11 @@ "version": "v25.1.0", "date": "2025-01-10T18:14:54Z" }, - { - "name": "MagicMirrorOrg/MagicMirror", - "version": "v2.30.0", - "date": "2025-01-01T14:30:19Z" - }, { "name": "go-vikunja/vikunja", "version": "v0.24.6", "date": "2024-12-22T20:24:35Z" }, - { - "name": "louislam/uptime-kuma", - "version": "2.0.0-beta.1", - "date": "2024-12-20T08:56:43Z" - }, { "name": "IceWhaleTech/CasaOS", "version": "v0.4.15", @@ -1064,6 +1114,11 @@ "version": "0.6.24", "date": "2024-11-16T06:47:56Z" }, + { + "name": "pterodactyl/panel", + "version": "v1.11.10", + "date": "2024-11-15T02:29:18Z" + }, { "name": "sabre-io/Baikal", "version": "0.10.1", @@ -1104,11 +1159,6 @@ "version": "v0.8.3", "date": "2024-10-04T23:49:07Z" }, - { - "name": "Kometa-Team/Kometa", - "version": "v2.1.0", - "date": "2024-09-30T17:59:43Z" - }, { "name": "FunkeyFlo/ps5-mqtt", "version": "v1.4.0", @@ -1124,11 +1174,6 @@ "version": "v0.8.13", "date": "2024-07-29T12:54:27Z" }, - { - "name": "Paymenter/Paymenter", - "version": "v0.9.5", - "date": "2024-07-20T08:46:42Z" - }, { "name": "hywax/mafl", "version": "v0.15.4", @@ -1169,6 +1214,11 @@ "version": "v2.11.0", "date": "2024-05-13T20:19:54Z" }, + { + "name": "pterodactyl/wings", + "version": "v1.11.13", + "date": "2024-05-08T04:20:34Z" + }, { "name": "CrazyWolf13/web-check", "version": "1.0.0", @@ -1184,19 +1234,19 @@ "version": "v4.4.3", "date": "2024-04-06T12:24:35Z" }, - { - "name": "louislam/dockge", - "version": "1.4.2", - "date": "2024-01-21T17:02:52Z" - }, { "name": "hyperion-project/hyperion.ng", "version": "2.0.16", "date": "2024-01-18T16:11:07Z" }, { - "name": "wger-project/wger", - "version": "2.2", - "date": "2023-12-06T12:08:09Z" + "name": "deepch/RTSPtoWeb", + "version": "v2.4.3", + "date": "2023-03-29T12:05:02Z" + }, + { + "name": "Shinobi-Systems/Shinobi", + "version": "furrykitten-3", + "date": "2022-07-15T05:20:17Z" } ] diff --git a/frontend/public/json/wireguard.json b/frontend/public/json/wireguard.json index cc94eff58..16041c02f 100644 --- a/frontend/public/json/wireguard.json +++ b/frontend/public/json/wireguard.json @@ -24,6 +24,17 @@ "os": "debian", "version": "12" } + }, + { + "type": "alpine", + "script": "ct/alpine-wireguard.sh", + "resources": { + "cpu": 1, + "ram": 256, + "hdd": 1, + "os": "alpine", + "version": "3.21" + } } ], "default_credentials": { diff --git a/frontend/public/json/yt-dlp-webui.json b/frontend/public/json/yt-dlp-webui.json index 870a8ea2a..bbd029349 100644 --- a/frontend/public/json/yt-dlp-webui.json +++ b/frontend/public/json/yt-dlp-webui.json @@ -2,7 +2,7 @@ "name": "yt-dlp-webui", "slug": "yt-dlp-webui", "categories": [ - 14 + 11 ], "date_created": "2025-03-24", "type": "ct", diff --git a/frontend/src/app/layout.tsx b/frontend/src/app/layout.tsx index 423c7ad1e..9a341ccfb 100644 --- a/frontend/src/app/layout.tsx +++ b/frontend/src/app/layout.tsx @@ -1,19 +1,23 @@ import Footer from "@/components/Footer"; import Navbar from "@/components/Navbar"; +import QueryProvider from "@/components/query-provider"; import { ThemeProvider } from "@/components/theme-provider"; import { Toaster } from "@/components/ui/sonner"; import { analytics, basePath } from "@/config/siteConfig"; import "@/styles/globals.css"; +import type { Metadata } from "next"; import { Inter } from "next/font/google"; import { NuqsAdapter } from "nuqs/adapters/next/app"; import React from "react"; const inter = Inter({ subsets: ["latin"] }); -export const metadata = { +export const metadata : Metadata = { title: "Proxmox VE Helper-Scripts", - generator: "Next.js", + description: + "The official website for the Proxmox VE Helper-Scripts (Community) Repository. Featuring over 300+ scripts to help you manage your Proxmox VE environment.", applicationName: "Proxmox VE Helper-Scripts", + generator: "Next.js", referrer: "origin-when-cross-origin", keywords: [ "Proxmox VE", @@ -23,32 +27,62 @@ export const metadata = { "scripts", "proxmox", "VE", + "virtualization", + "containers", + "LXC", + "VM", + ], + authors: [ + { name: "Bram Suurd", url: "https://github.com/BramSuurdje" }, + { name: "Community Scripts", url: "https://github.com/Community-Scripts" }, ], - authors: { name: "Bram Suurd" }, creator: "Bram Suurd", - publisher: "Bram Suurd", - description: - "A Front-end for the Proxmox VE Helper-Scripts (Community) Repository. Featuring over 200+ scripts to help you manage your Proxmox VE environment.", - favicon: "/app/favicon.ico", + publisher: "Community Scripts", + metadataBase: new URL(`https://community-scripts.github.io/${basePath}/`), + alternates: { + canonical: `https://community-scripts.github.io/${basePath}/`, + }, + viewport: { + width: "device-width", + initialScale: 1, + maximumScale: 5, + }, formatDetection: { email: false, address: false, telephone: false, }, - metadataBase: new URL(`https://community-scripts.github.io/${basePath}/`), openGraph: { title: "Proxmox VE Helper-Scripts", description: - "A Front-end for the Proxmox VE Helper-Scripts (Community) Repository. Featuring over 200+ scripts to help you manage your Proxmox VE environment.", - url: "/defaultimg.png", + "The official website for the Proxmox VE Helper-Scripts (Community) Repository. Featuring over 300+ scripts to help you manage your Proxmox VE environment.", + url: `https://community-scripts.github.io/${basePath}/`, + siteName: "Proxmox VE Helper-Scripts", images: [ { url: `https://community-scripts.github.io/${basePath}/defaultimg.png`, + width: 1200, + height: 630, + alt: "Proxmox VE Helper-Scripts", }, ], locale: "en_US", type: "website", }, + twitter: { + card: "summary_large_image", + title: "Proxmox VE Helper-Scripts", + creator: "@BramSuurdje", + description: + "The official website for the Proxmox VE Helper-Scripts (Community) Repository. Featuring over 300+ scripts to help you manage your Proxmox VE environment.", + images: [`https://community-scripts.github.io/${basePath}/defaultimg.png`], + }, + manifest: "/manifest.webmanifest", + appleWebApp: { + capable: true, + statusBarStyle: "default", + title: "Proxmox VE Helper-Scripts", + }, }; export default function RootLayout({ @@ -59,28 +93,21 @@ export default function RootLayout({ return ( - - + + - +
- {children} + + {children} +
diff --git a/frontend/src/app/page.tsx b/frontend/src/app/page.tsx index 657f23721..c6ebf1714 100644 --- a/frontend/src/app/page.tsx +++ b/frontend/src/app/page.tsx @@ -1,4 +1,5 @@ "use client"; +import FAQ from "@/components/FAQ"; import AnimatedGradientText from "@/components/ui/animated-gradient-text"; import { Button } from "@/components/ui/button"; import { CardFooter } from "@/components/ui/card"; @@ -111,37 +112,49 @@ export default function Page() { -
-

- Make managing your Homelab a breeze -

-
-

- We are a community-driven initiative that simplifies the setup - of Proxmox Virtual Environment (VE). -

-

- With 300+ scripts to help you manage your{" "} - Proxmox VE environment. Whether you're a seasoned - user or a newcomer, we've got you covered. -

-
-
-
- - - -
-
-
- - ); +
+

+ Make managing your Homelab a breeze +

+
+

+ We are a community-driven initiative that simplifies the setup of Proxmox Virtual Environment (VE). +

+

+ With 300+ scripts to help you manage your Proxmox VE environment. Whether you're a seasoned + user or a newcomer, we've got you covered. +

+
+
+
+ + + +
+ + + {/* FAQ Section */} +
+
+
+

Frequently Asked Questions

+

+ Find answers to common questions about our Proxmox VE scripts +

+
+ +
+
+ + + + ); } diff --git a/frontend/src/app/scripts/_components/ResourceDisplay.tsx b/frontend/src/app/scripts/_components/ResourceDisplay.tsx new file mode 100644 index 000000000..7c9ed63e5 --- /dev/null +++ b/frontend/src/app/scripts/_components/ResourceDisplay.tsx @@ -0,0 +1,42 @@ +import { CPUIcon, HDDIcon, RAMIcon } from "@/components/icons/resource-icons"; +import { getDisplayValueFromRAM } from "@/lib/utils/resource-utils"; + +interface ResourceDisplayProps { + title: string; + cpu: number | null; + ram: number | null; + hdd: number | null; +} + +interface IconTextProps { + icon: React.ReactNode; + label: string; +} + +function IconText({ icon, label }: IconTextProps) { + return ( + + {icon} + {label} + + ); +} + +export function ResourceDisplay({ title, cpu, ram, hdd }: ResourceDisplayProps) { + const hasCPU = typeof cpu === "number" && cpu > 0; + const hasRAM = typeof ram === "number" && ram > 0; + const hasHDD = typeof hdd === "number" && hdd > 0; + + if (!hasCPU && !hasRAM && !hasHDD) return null; + + return ( +
+ {title} +
+ {hasCPU && } label={`${cpu} vCPU`} />} + {hasRAM && } label={getDisplayValueFromRAM(ram!)} />} + {hasHDD && } label={`${hdd} GB`} />} +
+
+ ); +} diff --git a/frontend/src/app/scripts/_components/ScriptAccordion.tsx b/frontend/src/app/scripts/_components/ScriptAccordion.tsx index 95f8187df..96a07fc38 100644 --- a/frontend/src/app/scripts/_components/ScriptAccordion.tsx +++ b/frontend/src/app/scripts/_components/ScriptAccordion.tsx @@ -56,7 +56,7 @@ export default function ScriptAccordion({ value={expandedItem} onValueChange={handleAccordionChange} collapsible - className="overflow-y-scroll max-h-[calc(100vh-220px)] overflow-x-hidden mt-3 p-2" + className="overflow-y-scroll max-h-[calc(100vh-225px)] overflow-x-hidden mt-3 p-2" > {items.map((category) => ( void; -}) { - const closeScript = () => { - window.history.pushState({}, document.title, window.location.pathname); - setSelectedScript(null); - }; - const [versions, setVersions] = useState([]); - - - useEffect(() => { - fetchVersions() - .then((fetchedVersions) => { - console.log("Fetched Versions: ", fetchedVersions); - if (Array.isArray(fetchedVersions)) { - setVersions(fetchedVersions); - } else if (fetchedVersions && typeof fetchedVersions === "object") { - setVersions([fetchedVersions]); - } else { - setVersions([]); - } - }) - .catch((error) => console.error("Error fetching versions:", error)); - }, []); +} +function ScriptHeader({ item }: { item: Script }) { const defaultInstallMethod = item.install_methods?.[0]; const os = defaultInstallMethod?.resources?.os || "Proxmox Node"; const version = defaultInstallMethod?.resources?.version || ""; return ( -
-
-
-
-

Selected Script

- -
-
-
-
- - ((e.currentTarget as HTMLImageElement).src = - `/${basePath}/logo.png`) - } - height={400} - alt={item.name} - unoptimized - /> -
-
-
-

- {item.status} {item.name} {getDisplayValueFromType(item.type)} -

-

- Date added: {extractDate(item.date_created)} -

-

- Default OS: {os} {version} -

-
-
- -
-
{versions.length === 0 ? (

Loading versions...

) : - (<> -

Version:

-

{versions.find((v) => - v.name === item.slug.replace(/[^a-z0-9]/g, '') || - v.name.includes(item.slug.replace(/[^a-z0-9]/g, '')) || - v.name.replace(/[^a-z0-9]/g, '') === item.slug.replace(/[^a-z0-9]/g, '') - - )?.version || "No Version information found" - }

-

Latest Version changes(Pulled from newreleases.io):

-

- {(() => { - const matchedVersion = versions.find((v) => - v.name === item.slug.replace(/[^a-z0-9]/g, '') || - v.name.includes(item.slug.replace(/[^a-z0-9]/g, '')) || - v.name.replace(/[^a-z0-9]/g, '') === item.slug.replace(/[^a-z0-9]/g, '') - ); - return matchedVersion?.date ? - extractDate(matchedVersion.date as unknown as string) : - "No date information found" - })()} -

- ) - } -
-
+
+
+
+ ((e.currentTarget as HTMLImageElement).src = `/${basePath}/logo.png`)} + height={400} + alt={item.name} + unoptimized + /> +
+
+
+
+
+

+ {item.name} + + + {getDisplayValueFromType(item.type)} + +

+
+ Added {extractDate(item.date_created)} + + + {os} {version} +
-
- - -
+ {/* */}
- -
-
- - +
+ {defaultInstallMethod?.resources && ( + + )} + {item.install_methods.find((method) => method.type === "alpine")?.resources && ( + method.type === "alpine")!.resources!} + /> + )} +
+
+
+
+
+ +
+ +
+
+
+ ); +} + +function VersionInfo({ item }: { item: Script }) { + const { data: versions = [], isLoading } = useVersions(); + + if (isLoading || versions.length === 0) { + return

Loading versions...

; + } + + const matchedVersion = versions.find((v: AppVersion) => { + const cleanName = v.name.replace(/[^a-z0-9]/gi, "").toLowerCase(); + return cleanName === cleanSlug(item.slug) || cleanName.includes(cleanSlug(item.slug)); + }); + + if (!matchedVersion) return null; + + return {matchedVersion.version}; +} + +export function ScriptItem({ item, setSelectedScript }: ScriptItemProps) { + const closeScript = () => { + window.history.pushState({}, document.title, window.location.pathname); + setSelectedScript(null); + }; + + return ( +
+
+
+

Selected Script

+ +
+ +
+
+ }> + + + + + + +
+
+

How to {item.type === "misc" ? "use" : "install"}

+
-
-
-

- How to {item.type == "misc" ? "use" : "install"} -

- -
- + +
+
@@ -150,5 +158,3 @@ function ScriptItem({
); } - -export default ScriptItem; diff --git a/frontend/src/app/scripts/_components/ScriptItems/Alerts.tsx b/frontend/src/app/scripts/_components/ScriptItems/Alerts.tsx index b915be3ff..c4c29020c 100644 --- a/frontend/src/app/scripts/_components/ScriptItems/Alerts.tsx +++ b/frontend/src/app/scripts/_components/ScriptItems/Alerts.tsx @@ -14,7 +14,7 @@ export default function Alerts({ item }: { item: Script }) { <> {item?.notes?.length > 0 && item.notes.map((note: NoteProps, index: number) => ( -
+

{ const baseUrl = `https://raw.githubusercontent.com/asykynexo/${basePath}/main`; @@ -12,7 +17,6 @@ const generateInstallSourceUrl = (slug: string) => { const generateSourceUrl = (slug: string, type: string) => { const baseUrl = `https://raw.githubusercontent.com/asylumexp/${basePath}/main`; return type === "vm" ? `${baseUrl}/vm/${slug}.sh` : `${baseUrl}/misc/${slug}.sh`; - return `${baseUrl}/misc/${slug}.sh`; }; const generateUpdateUrl = (slug: string) => { @@ -20,62 +24,66 @@ const generateUpdateUrl = (slug: string) => { return `${baseUrl}/ct/${slug}.sh`; }; -interface ButtonLinkProps { +interface LinkItem { href: string; icon: React.ReactNode; text: string; } -const ButtonLink = ({ href, icon, text }: ButtonLinkProps) => ( - -); - export default function Buttons({ item }: { item: Script }) { const isCtOrDefault = ["ct"].includes(item.type); const installSourceUrl = isCtOrDefault ? generateInstallSourceUrl(item.slug) : null; const updateSourceUrl = isCtOrDefault ? generateUpdateUrl(item.slug) : null; const sourceUrl = !isCtOrDefault ? generateSourceUrl(item.slug, item.type) : null; - const buttons = [ + const links = [ item.website && { href: item.website, - icon: , + icon: , text: "Website", }, item.documentation && { href: item.documentation, - icon: , + icon: , text: "Documentation", }, installSourceUrl && { href: installSourceUrl, - icon: , - text: "Install-Source", + icon: , + text: "Install Source", }, updateSourceUrl && { href: updateSourceUrl, - icon: , - text: "Update-Source", + icon: , + text: "Update Source", }, sourceUrl && { href: sourceUrl, - icon: , + icon: , text: "Source Code", }, - ].filter(Boolean) as ButtonLinkProps[]; + ].filter(Boolean) as LinkItem[]; + + if (links.length === 0) return null; return ( -

- {buttons.map((props, index) => ( - - ))} -
+ + + + + + {links.map((link, index) => ( + + + {link.icon} + {link.text} + + + ))} + + ); } diff --git a/frontend/src/app/scripts/_components/ScriptItems/DefaultPassword.tsx b/frontend/src/app/scripts/_components/ScriptItems/DefaultPassword.tsx index 15a962318..5034bc939 100644 --- a/frontend/src/app/scripts/_components/ScriptItems/DefaultPassword.tsx +++ b/frontend/src/app/scripts/_components/ScriptItems/DefaultPassword.tsx @@ -14,24 +14,19 @@ export default function DefaultPassword({ item }: { item: Script }) { }; return ( -
-
+
+

Default Login Credentials

- You can use the following credentials to login to the {item.name}{" "} - {item.type}. + You can use the following credentials to login to the {item.name} {item.type}.

{["username", "password"].map((type) => (
{type.charAt(0).toUpperCase() + type.slice(1)}:{" "} -
diff --git a/frontend/src/app/scripts/_components/ScriptItems/DefaultSettings.tsx b/frontend/src/app/scripts/_components/ScriptItems/DefaultSettings.tsx index bfa61759d..33ae0b862 100644 --- a/frontend/src/app/scripts/_components/ScriptItems/DefaultSettings.tsx +++ b/frontend/src/app/scripts/_components/ScriptItems/DefaultSettings.tsx @@ -1,51 +1,29 @@ import { Script } from "@/lib/types"; export default function DefaultSettings({ item }: { item: Script }) { - const getDisplayValueFromRAM = (ram: number) => - ram >= 1024 ? `${Math.floor(ram / 1024)}GB` : `${ram}MB`; + const getDisplayValueFromRAM = (ram: number) => (ram >= 1024 ? `${Math.floor(ram / 1024)}GB` : `${ram}MB`); - const ResourceDisplay = ({ - settings, - title, - }: { - settings: (typeof item.install_methods)[0]; - title: string; - }) => { + const ResourceDisplay = ({ settings, title }: { settings: (typeof item.install_methods)[0]; title: string }) => { const { cpu, ram, hdd } = settings.resources; return (

{title}

CPU: {cpu}vCPU

-

- RAM: {getDisplayValueFromRAM(ram ?? 0)} -

+

RAM: {getDisplayValueFromRAM(ram ?? 0)}

HDD: {hdd}GB

); }; - const defaultSettings = item.install_methods.find( - (method) => method.type === "default", - ); - const defaultAlpineSettings = item.install_methods.find( - (method) => method.type === "alpine", - ); + const defaultSettings = item.install_methods.find((method) => method.type === "default"); + const defaultAlpineSettings = item.install_methods.find((method) => method.type === "alpine"); - const hasDefaultSettings = - defaultSettings?.resources && - Object.values(defaultSettings.resources).some(Boolean); + const hasDefaultSettings = defaultSettings?.resources && Object.values(defaultSettings.resources).some(Boolean); return ( - <> - {hasDefaultSettings && ( - - )} - {defaultAlpineSettings && ( - - )} - +
+ {hasDefaultSettings && } + {defaultAlpineSettings && } +
); } diff --git a/frontend/src/app/scripts/_components/ScriptItems/InstallCommand.tsx b/frontend/src/app/scripts/_components/ScriptItems/InstallCommand.tsx index 6237f20b3..ad869837b 100644 --- a/frontend/src/app/scripts/_components/ScriptItems/InstallCommand.tsx +++ b/frontend/src/app/scripts/_components/ScriptItems/InstallCommand.tsx @@ -4,82 +4,86 @@ import { basePath } from "@/config/siteConfig"; import { Script } from "@/lib/types"; import { getDisplayValueFromType } from "../ScriptInfoBlocks"; -const getInstallCommand = (scriptPath?: string, isAlpine = false) => { - return `bash -c "$(wget -q${isAlpine ? "" : "L"}O - https://github.com/asylumexp/Proxmox/raw/main/${scriptPath})"`; +const getInstallCommand = (scriptPath = "", isAlpine = false) => { + const url = `https://raw.githubusercontent.com/asylumexp/Proxmox/main/${scriptPath}`; + return isAlpine + ? `bash -c "$(curl -fsSL ${url})"` + : `bash -c "$(curl -fsSL ${url})"`; }; + export default function InstallCommand({ item }: { item: Script }) { - const alpineScript = item.install_methods.find( - (method) => method.type === "alpine", - ); + const alpineScript = item.install_methods.find( + (method) => method.type === "alpine", + ); - const defaultScript = item.install_methods.find( - (method) => method.type === "default", - ); + const defaultScript = item.install_methods.find( + (method) => method.type === "default", + ); - const renderInstructions = (isAlpine = false) => ( - <> -

- {isAlpine ? ( - <> - As an alternative option, you can use Alpine Linux and the{" "} - {item.name} package to create a {item.name}{" "} - {getDisplayValueFromType(item.type)} container with faster creation - time and minimal system resource usage. You are also obliged to - adhere to updates provided by the package maintainer. - - ) : item.type == "misc" ? ( - <> - To use the {item.name} script, run the command below in the shell. - - ) : ( - <> - {" "} - To create a new Proxmox VE {item.name}{" "} - {getDisplayValueFromType(item.type)}, run the command below in the - Proxmox VE Shell. - - )} -

- {isAlpine && ( -

- To create a new Proxmox VE Alpine-{item.name}{" "} - {getDisplayValueFromType(item.type)}, run the command below in the - Proxmox VE Shell -

- )} - - ); - - return ( -
- {alpineScript ? ( - - - Default - Alpine Linux - - - {renderInstructions()} - - {getInstallCommand(defaultScript?.script)} - - - - {renderInstructions(true)} - - {getInstallCommand(alpineScript.script, true)} - - - - ) : defaultScript?.script ? ( + const renderInstructions = (isAlpine = false) => ( <> - {renderInstructions()} - - {getInstallCommand(defaultScript.script)} - +

+ {isAlpine ? ( + <> + As an alternative option, you can use Alpine Linux and the{" "} + {item.name} package to create a {item.name}{" "} + {getDisplayValueFromType(item.type)} container with faster creation + time and minimal system resource usage. You are also obliged to + adhere to updates provided by the package maintainer. + + ) : item.type == "misc" ? ( + <> + To use the {item.name} script, run the command below in the shell. + + ) : ( + <> + {" "} + To create a new Proxmox VE {item.name}{" "} + {getDisplayValueFromType(item.type)}, run the command below in the + Proxmox VE Shell. + + )} +

+ {isAlpine && ( +

+ To create a new Proxmox VE Alpine-{item.name}{" "} + {getDisplayValueFromType(item.type)}, run the command below in the + Proxmox VE Shell +

+ )} - ) : null} -
- ); + ); + + return ( +
+ {alpineScript ? ( + + + Default + Alpine Linux + + + {renderInstructions()} + + {getInstallCommand(defaultScript?.script)} + + + + {renderInstructions(true)} + + {getInstallCommand(alpineScript.script, true)} + + + + ) : defaultScript?.script ? ( + <> + {renderInstructions()} + + {getInstallCommand(defaultScript.script)} + + + ) : null} +
+ ); } diff --git a/frontend/src/app/scripts/_components/ScriptItems/InterFaces.tsx b/frontend/src/app/scripts/_components/ScriptItems/InterFaces.tsx index 99f855fad..d7ea148ae 100644 --- a/frontend/src/app/scripts/_components/ScriptItems/InterFaces.tsx +++ b/frontend/src/app/scripts/_components/ScriptItems/InterFaces.tsx @@ -4,36 +4,16 @@ import { Script } from "@/lib/types"; import { cn } from "@/lib/utils"; import { ClipboardIcon } from "lucide-react"; -const CopyButton = ({ - label, - value, -}: { - label: string; - value: string | number; -}) => ( - - {value} - handleCopy(label, String(value))} - className="size-4 cursor-pointer" - /> - -); - export default function InterFaces({ item }: { item: Script }) { return ( -
+
{item.interface_port !== null ? (
-

- {"Default Interface:"} -

{" "} - +

Default Interface:

+ + {item.interface_port} + handleCopy("default interface", String(item.interface_port))} className="size-4 cursor-pointer" /> +
) : null}
diff --git a/frontend/src/app/scripts/_components/VersionBadge.tsx b/frontend/src/app/scripts/_components/VersionBadge.tsx new file mode 100644 index 000000000..712893d6c --- /dev/null +++ b/frontend/src/app/scripts/_components/VersionBadge.tsx @@ -0,0 +1,13 @@ +import { AppVersion } from "@/lib/types"; + +interface VersionBadgeProps { + version: AppVersion; +} + +export function VersionBadge({ version }: VersionBadgeProps) { + return ( +
+ {version.version} +
+ ); +} diff --git a/frontend/src/app/scripts/page.tsx b/frontend/src/app/scripts/page.tsx index a02f80b83..590b67358 100644 --- a/frontend/src/app/scripts/page.tsx +++ b/frontend/src/app/scripts/page.tsx @@ -2,7 +2,7 @@ export const dynamic = "force-static"; -import ScriptItem from "@/app/scripts/_components/ScriptItem"; +import { ScriptItem } from "@/app/scripts/_components/ScriptItem"; import { fetchCategories } from "@/lib/data"; import { Category, Script } from "@/lib/types"; import { Loader2 } from "lucide-react"; diff --git a/frontend/src/components/FAQ.tsx b/frontend/src/components/FAQ.tsx new file mode 100644 index 000000000..b90e33b78 --- /dev/null +++ b/frontend/src/components/FAQ.tsx @@ -0,0 +1,29 @@ +import * as AccordionPrimitive from "@radix-ui/react-accordion"; +import { Plus } from "lucide-react"; +import { FAQ_Items } from "../config/faqConfig"; +import { Accordion, AccordionContent, AccordionItem } from "./ui/accordion"; + +export default function FAQ() { + return ( +
+ + {FAQ_Items.map((item, index) => ( + + + + {item.title} + + + {item.content} + + ))} + +
+ ); +} diff --git a/frontend/src/components/Footer.tsx b/frontend/src/components/Footer.tsx index 6aa404b63..d776c8150 100644 --- a/frontend/src/components/Footer.tsx +++ b/frontend/src/components/Footer.tsx @@ -6,13 +6,13 @@ import { cn } from "@/lib/utils"; export default function Footer() { return ( -
+

Website built by the community. The source code is available on{" "} + + + + ); +} + +export function RAMIcon() { + return ( + + + + + ); +} + +export function HDDIcon() { + return ( + + + + + + ); +} diff --git a/frontend/src/components/query-provider.tsx b/frontend/src/components/query-provider.tsx new file mode 100644 index 000000000..0c2fe1275 --- /dev/null +++ b/frontend/src/components/query-provider.tsx @@ -0,0 +1,9 @@ +"use client"; +import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; +import React from "react"; + +const queryClient = new QueryClient(); + +export default function QueryProvider({ children }: { children: React.ReactNode }) { + return {children}; +} diff --git a/frontend/src/config/faqConfig.tsx b/frontend/src/config/faqConfig.tsx new file mode 100644 index 000000000..edbd0beca --- /dev/null +++ b/frontend/src/config/faqConfig.tsx @@ -0,0 +1,37 @@ +export const FAQ_Items = [ + { + title: "Why do you use tarballs instead of git pull for installation?", + content: + "Our LXC scripts install applications using release tarballs. Tarballs contain stable code versions tested for release. Using `git pull` directly fetches the latest development code, which might be unstable or contain bugs. Tarballs offer a more reliable installation.", + }, + { + title: "Why do the scripts install applications using HTTP by default?", + content: + "Our LXC scripts install applications using HTTP by default. Setting up HTTPS often requires manual configuration specific to your setup, which our automated scripts cannot handle reliably. If an application requires HTTPS, the script will configure it. For others, you need to enable HTTPS yourself, often following the application's official documentation.", + }, + { + title: "Where can I find documentation for the installed application?", + content: + "We link to the official documentation for each application whenever possible. You can usually find this link on the script's information page for the specific LXC script. If you notice a missing link for an application that has official docs, please report it so we can add it.", + }, + { + title: "What should I do if I find a bug in an LXC script?", + content: + "Our LXC scripts are maintained by volunteers in their free time. Bugs can occur due to our errors or changes in the applications themselves. If you find a bug in one of our LXC scripts, please report it on our GitHub issues page. Your feedback helps us improve the scripts.", + }, + { + title: "Why isn't the application updating to the very latest version?", + content: + "Updates via our LXC scripts might not pull the absolute latest version for a few reasons:\n- A bug in the application's release naming on GitHub.\n- A bug in our update script.\n- We intentionally pinned the version. This happens if a newer version has breaking changes or serious bugs that could affect your data or LXC stability. We wait for fixes before allowing the update.", + }, + { + title: 'Why am I getting a "502 Bad Gateway" error?', + content: + 'A "502 Bad Gateway" error usually means the application inside the LXC is not running or responding correctly. Check the application\'s logs first. If you use a reverse proxy, check its logs too. If you still have problems after checking the logs, report the issue, providing details from the logs.', + }, + { + title: "What should I do if a script fails during execution?", + content: + "If an LXC script fails, run it again using Verbose mode. Standard mode hides detailed output for neatness, showing only progress. Verbose mode displays all messages, which helps you (and us) diagnose the error. Include this verbose output if you report the issue.", + }, +]; diff --git a/frontend/src/hooks/useVersions.ts b/frontend/src/hooks/useVersions.ts new file mode 100644 index 000000000..44404f4fa --- /dev/null +++ b/frontend/src/hooks/useVersions.ts @@ -0,0 +1,21 @@ +"use client"; + +import { fetchVersions } from "@/lib/data"; +import { AppVersion } from "@/lib/types"; +import { useQuery } from "@tanstack/react-query"; + +export function useVersions() { + return useQuery({ + queryKey: ["versions"], + queryFn: async () => { + const fetchedVersions = await fetchVersions(); + if (Array.isArray(fetchedVersions)) { + return fetchedVersions; + } + if (fetchedVersions && typeof fetchedVersions === "object") { + return [fetchedVersions]; + } + return []; + }, + }); +} diff --git a/frontend/src/lib/utils/resource-utils.ts b/frontend/src/lib/utils/resource-utils.ts new file mode 100644 index 000000000..25e096605 --- /dev/null +++ b/frontend/src/lib/utils/resource-utils.ts @@ -0,0 +1,7 @@ +export function getDisplayValueFromRAM(ram: number): string { + return ram >= 1024 ? `${Math.floor(ram / 1024)}GB` : `${ram}MB`; +} + +export function cleanSlug(slug: string): string { + return slug.replace(/[^a-z0-9]/gi, "").toLowerCase(); +} diff --git a/install/2fauth-install.sh b/install/2fauth-install.sh index 750ac4c30..1ef59d150 100644 --- a/install/2fauth-install.sh +++ b/install/2fauth-install.sh @@ -14,13 +14,20 @@ network_check update_os msg_info "Installing Dependencies" + +$STD apt-get install -y \ + lsb-release \ + gpg + +curl -fsSL https://packages.sury.org/php/apt.gpg | gpg --dearmor -o /usr/share/keyrings/deb.sury.org-php.gpg +echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list +$STD apt-get update + $STD apt-get install -y \ nginx \ composer \ - php8.2-{bcmath,common,ctype,curl,fileinfo,fpm,gd,mbstring,mysql,xml,cli} \ - mariadb-server \ - wget \ - openssh-server + php8.3-{bcmath,common,ctype,curl,fileinfo,fpm,gd,mbstring,mysql,xml,cli} \ + mariadb-server msg_ok "Installed Dependencies" msg_info "Setting up Database" @@ -39,8 +46,8 @@ $STD mysql -u root -e "GRANT ALL ON $DB_NAME.* TO '$DB_USER'@'localhost'; FLUSH msg_ok "Set up Database" msg_info "Setup 2FAuth" -RELEASE=$(curl -s https://api.github.com/repos/Bubka/2FAuth/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') -wget -q "https://github.com/Bubka/2FAuth/archive/refs/tags/${RELEASE}.zip" +RELEASE=$(curl -fsSL https://api.github.com/repos/Bubka/2FAuth/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') +curl -fsSL "https://github.com/Bubka/2FAuth/archive/refs/tags/${RELEASE}.zip" -o $(basename "https://github.com/Bubka/2FAuth/archive/refs/tags/${RELEASE}.zip") unzip -q "${RELEASE}.zip" mv "2FAuth-${RELEASE//v/}/" /opt/2fauth @@ -92,7 +99,7 @@ server { error_page 404 /index.php; location ~ \.php\$ { - fastcgi_pass unix:/var/run/php/php8.2-fpm.sock; + fastcgi_pass unix:/var/run/php/php8.3-fpm.sock; fastcgi_param SCRIPT_FILENAME \$realpath_root\$fastcgi_script_name; include fastcgi_params; } diff --git a/install/actualbudget-install.sh b/install/actualbudget-install.sh index 603b72284..441cce387 100644 --- a/install/actualbudget-install.sh +++ b/install/actualbudget-install.sh @@ -18,8 +18,7 @@ $STD apt-get install -y \ tini \ gpg \ build-essential \ - wget \ - openssh-server + git msg_ok "Installed Dependencies" msg_info "Setting up Node.js Repository" @@ -35,11 +34,11 @@ $STD npm install --global yarn msg_ok "Installed Node.js" msg_info "Installing Actual Budget" -cd /opt -RELEASE=$(curl -s https://api.github.com/repos/actualbudget/actual/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') -wget -q https://github.com/actualbudget/actual/archive/refs/tags/v${RELEASE}.tar.gz -tar -xzf v${RELEASE}.tar.gz -mv actual-${RELEASE} /opt/actualbudget +cd /opt || exit +RELEASE=$(curl -fsSL https://api.github.com/repos/actualbudget/actual/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') +curl -fsSL "https://github.com/actualbudget/actual/archive/refs/tags/v${RELEASE}.tar.gz" -o $(basename "https://github.com/actualbudget/actual/archive/refs/tags/v${RELEASE}.tar.gz") +tar -xzf v"${RELEASE}".tar.gz +mv actual-"${RELEASE}" /opt/actualbudget mkdir -p /opt/actualbudget-data/{server-files,upload,migrate,user-files,migrations,config} chown -R root:root /opt/actualbudget-data @@ -55,8 +54,10 @@ ACTUAL_TRUSTED_PROXIES="10.0.0.0/8,172.16.0.0/12,192.168.0.0/16,127.0.0.1/32,::1 ACTUAL_HTTPS_KEY=/opt/actualbudget/selfhost.key ACTUAL_HTTPS_CERT=/opt/actualbudget/selfhost.crt EOF -cd /opt/actualbudget -$STD yarn workspaces focus @actual-app/sync-server --production +cd /opt/actualbudget || exit +export NODE_OPTIONS="--max_old_space_size=4096" +$STD yarn install +$STD yarn run build:server $STD openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout selfhost.key -out selfhost.crt </opt/adventurelog/backend/server/.env @@ -160,8 +160,8 @@ EnvironmentFile=/opt/adventurelog/frontend/.env [Install] WantedBy=multi-user.target EOF -systemctl enable -q --now adventurelog-backend.service -systemctl enable -q --now adventurelog-frontend.service +systemctl enable -q --now adventurelog-backend +systemctl enable -q --now adventurelog-frontend msg_ok "Created Service" motd_ssh diff --git a/install/agentdvr-install.sh b/install/agentdvr-install.sh index 1a182bf67..e8b4dfc0d 100644 --- a/install/agentdvr-install.sh +++ b/install/agentdvr-install.sh @@ -20,17 +20,15 @@ $STD apt-get install -y alsa-utils $STD apt-get install -y libxext-dev $STD apt-get install -y fontconfig $STD apt-get install -y libva-drm2 -$STD apt-get install -y wget -$STD apt-get install -y openssh-server msg_ok "Installed Dependencies" msg_info "Installing AgentDVR" mkdir -p /opt/agentdvr/agent -RELEASE=$(curl -s "https://www.ispyconnect.com/api/Agent/DownloadLocation4?platform=LinuxARM64&fromVersion=0" | grep -o 'https://.*\.zip') +RELEASE=$(curl -fsSL "https://www.ispyconnect.com/api/Agent/DownloadLocation4?platform=LinuARM64&fromVersion=0" | grep -o 'https://.*\.zip') cd /opt/agentdvr/agent -wget -q $RELEASE +curl -fsSL "$RELEASE" -o $(basename "$RELEASE") $STD unzip Agent_LinuxARM64*.zip -rm -rf Agent_LinuxARM64*.zip +rm -rf Agent_Linux64*.zip chmod +x ./Agent msg_ok "Installed AgentDVR" @@ -50,7 +48,7 @@ RestartSec=5 [Install] WantedBy=multi-user.target EOF -systemctl enable -q --now AgentDVR.service +systemctl enable -q --now AgentDVR msg_ok "Created Service" motd_ssh diff --git a/install/alpine-docker-install.sh b/install/alpine-docker-install.sh index 0a910a164..c7e5f3ba0 100644 --- a/install/alpine-docker-install.sh +++ b/install/alpine-docker-install.sh @@ -14,13 +14,7 @@ network_check update_os msg_info "Installing Dependencies" -$STD apk add newt -$STD apk add curl -$STD apk add openssh $STD apk add tzdata -$STD apk add nano -$STD apk add mc -$STD apk add openssh msg_ok "Installed Dependencies" msg_info "Installing Docker" @@ -30,7 +24,7 @@ $STD rc-update add docker default msg_ok "Installed Docker" get_latest_release() { - curl -sL https://api.github.com/repos/$1/releases/latest | grep '"tag_name":' | cut -d'"' -f4 + curl -fsSL https://api.github.com/repos/$1/releases/latest | grep '"tag_name":' | cut -d'"' -f4 } PORTAINER_LATEST_VERSION=$(get_latest_release "portainer/portainer") DOCKER_COMPOSE_LATEST_VERSION=$(get_latest_release "docker/compose") @@ -68,7 +62,7 @@ if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then msg_info "Installing Docker Compose $DOCKER_COMPOSE_LATEST_VERSION" DOCKER_CONFIG=${DOCKER_CONFIG:-$HOME/.docker} mkdir -p $DOCKER_CONFIG/cli-plugins - curl -sSL https://github.com/docker/compose/releases/download/$DOCKER_COMPOSE_LATEST_VERSION/docker-compose-linux-aarch64 -o ~/.docker/cli-plugins/docker-compose + curl -fsSL https://github.com/docker/compose/releases/download/$DOCKER_COMPOSE_LATEST_VERSION/docker-compose-linux-aarch64 -o ~/.docker/cli-plugins/docker-compose chmod +x $DOCKER_CONFIG/cli-plugins/docker-compose msg_ok "Installed Docker Compose $DOCKER_COMPOSE_LATEST_VERSION" fi diff --git a/install/alpine-it-tools-install.sh b/install/alpine-it-tools-install.sh index d8bb390c8..1a444a33b 100644 --- a/install/alpine-it-tools-install.sh +++ b/install/alpine-it-tools-install.sh @@ -23,7 +23,7 @@ $STD apk add \ msg_ok "Installed Dependencies" msg_info "Installing IT-Tools" -RELEASE=$(curl -s https://api.github.com/repos/CorentinTh/it-tools/releases/latest | grep '"tag_name":' | cut -d '"' -f4) +RELEASE=$(curl -fsSL https://api.github.com/repos/CorentinTh/it-tools/releases/latest | grep '"tag_name":' | cut -d '"' -f4) DOWNLOAD_URL="https://github.com/CorentinTh/it-tools/releases/download/${RELEASE}/it-tools-${RELEASE#v}.zip" curl -fsSL -o it-tools.zip "$DOWNLOAD_URL" diff --git a/install/alpine-mariadb-install.sh b/install/alpine-mariadb-install.sh new file mode 100644 index 000000000..ec65fdb5b --- /dev/null +++ b/install/alpine-mariadb-install.sh @@ -0,0 +1,58 @@ +#!/usr/bin/env bash + +# Copyright (c) 2021-2025 community-scripts ORG +# Author: MickLesk (CanbiZ) +# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE +# Source: https://mariadb.org/ + +source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" +color +verb_ip6 +catch_errors +setting_up_container +network_check +update_os + +msg_info "Installing Dependencies" +$STD apk add \ + gpg \ + sudo +msg_ok "Installed Dependencies" + +msg_info "Installing MariaDB" +$STD apk add --no-cache mariadb mariadb-client +$STD rc-update add mariadb default +msg_ok "Installed MariaDB" + +msg_info "Configuring MariaDB" +mysql_install_db --user=mysql --basedir=/usr --datadir=/var/lib/mysql >/dev/null 2>&1 +$STD rc-service mariadb start +msg_ok "MariaDB Configured" + +read -r -p "Would you like to install Adminer with lighthttpd? : " prompt +if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then + msg_info "Installing Adminer" + $STD apk add --no-cache lighttpd php php-cgi php-mysqli php-mbstring php-zip php-gd php-json php-curl jq + sed -i 's|server.modules += ( "mod_cgi" )|server.modules += ( "mod_cgi", "mod_fastcgi" )|' /etc/lighttpd/lighttpd.conf + echo 'fastcgi.server += ( ".php" => (( "bin-path" => "/usr/bin/php-cgi", "socket" => "/var/run/php-cgi.sock" )))' >>/etc/lighttpd/lighttpd.conf + ADMINER_VERSION=$(curl -fsSL https://api.github.com/repos/vrana/adminer/releases/latest | jq -r '.tag_name' | sed 's/v//') + curl -fsSL "https://github.com/vrana/adminer/releases/download/v${ADMINER_VERSION}/adminer-${ADMINER_VERSION}.php" -o /var/www/adminer.php + chown lighttpd:lighttpd /var/www/adminer.php + chmod 755 /var/www/adminer.php + msg_ok "Adminer Installed" + + msg_info "Starting Lighttpd" + $STD rc-update add lighttpd default + $STD rc-service lighttpd restart + msg_ok "Lighttpd Started" + + echo -e "Adminer is available at: ${BL}http://$(hostname -I | awk '{print $1}')/adminer${CL}" +else + echo -e "Skipped Adminer Installation..." +fi + +motd_ssh +customize + +msg_info "Cleaning up" +msg_ok "Cleaned" diff --git a/install/alpine-node-red-install.sh b/install/alpine-node-red-install.sh new file mode 100644 index 000000000..436a6ed08 --- /dev/null +++ b/install/alpine-node-red-install.sh @@ -0,0 +1,56 @@ +#!/usr/bin/env bash + +# Copyright (c) 2021-2025 community-scripts ORG +# Author: MickLesk (CanbiZ) +# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE +# Source: https://nodered.org/ + +source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" +color +verb_ip6 +catch_errors +setting_up_container +network_check +update_os + +msg_info "Installing Dependencies" +$STD apk add --no-cache \ + gpg \ + git \ + nodejs \ + npm +msg_ok "Installed Dependencies" + +msg_info "Creating Node-RED User" +adduser -D -H -s /sbin/nologin -G users nodered +msg_ok "Created Node-RED User" + +msg_info "Installing Node-RED" +npm install -g --unsafe-perm node-red +msg_ok "Installed Node-RED" + +msg_info "Creating Node-RED Service" +service_path="/etc/init.d/nodered" + +echo '#!/sbin/openrc-run +description="Node-RED Service" + +command="/usr/bin/node-red" +command_args="--max-old-space-size=128 -v" +command_user="nodered" +pidfile="/var/run/nodered.pid" + +depend() { + use net +}' >$service_path + +chmod +x $service_path +$STD rc-update add nodered default +msg_ok "Created Node-RED Service" + +msg_info "Starting Node-RED" +$STD service nodered start +msg_ok "Started Node-RED" + +motd_ssh +customize diff --git a/install/alpine-prometheus-install.sh b/install/alpine-prometheus-install.sh new file mode 100644 index 000000000..dec563138 --- /dev/null +++ b/install/alpine-prometheus-install.sh @@ -0,0 +1,34 @@ +#!/usr/bin/env bash + +# Copyright (c) 2021-2025 community-scripts ORG +# Author: MickLesk (CanbiZ) +# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE +# Source: https://prometheus.io/ + +source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" +color +verb_ip6 +catch_errors +setting_up_container +network_check +update_os + +msg_info "Installing Dependencies" +$STD apk add \ + gpg +msg_ok "Installed Dependencies" + +msg_info "Installing Prometheus" +$STD apk add --no-cache prometheus +msg_ok "Installed Prometheus" + +msg_info "Enabling Prometheus Service" +$STD rc-update add prometheus default +msg_ok "Enabled Prometheus Service" + +msg_info "Starting Prometheus" +$STD service prometheus start +msg_ok "Started Prometheus" + +motd_ssh +customize diff --git a/install/alpine-wireguard-install.sh b/install/alpine-wireguard-install.sh new file mode 100644 index 000000000..68a0d1dd8 --- /dev/null +++ b/install/alpine-wireguard-install.sh @@ -0,0 +1,105 @@ +#!/usr/bin/env bash + +# Copyright (c) 2021-2025 community-scripts ORG +# Author: MickLesk (CanbiZ) +# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE +# Source: https://www.wireguard.com/ + +source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" +color +verb_ip6 +catch_errors +setting_up_container +network_check +update_os + +msg_info "Installing Dependencies" +$STD apk add \ + newt \ + curl \ + openssh \ + nano \ + mc \ + gpg \ + iptables \ + openrc +msg_ok "Installed Dependencies" + +msg_info "Installing WireGuard" +$STD apk add --no-cache wireguard-tools +if [[ ! -L /etc/init.d/wg-quick.wg0 ]]; then + ln -s /etc/init.d/wg-quick /etc/init.d/wg-quick.wg0 +fi + +private_key=$(wg genkey) +cat </etc/wireguard/wg0.conf +[Interface] +PrivateKey = ${private_key} +Address = 10.0.0.1/24 +SaveConfig = true +PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE; +PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -D FORWARD -o wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE; +ListenPort = 51820 +EOF +msg_ok "Installed WireGuard" + +read -rp "Do you want to install WGDashboard? (y/N): " INSTALL_WGD +if [[ "$INSTALL_WGD" =~ ^[Yy]$ ]]; then + msg_info "Installing additional dependencies for WGDashboard" + $STD apk add --no-cache \ + python3 \ + py3-pip \ + git \ + sudo \ + musl-dev \ + linux-headers \ + gcc \ + python3-dev + 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 + chmod u+x wgd.sh + $STD ./wgd.sh install + $STD echo "net.ipv4.ip_forward=1" >>/etc/sysctl.conf + sysctl -p /etc/sysctl.conf + msg_ok "Installed WGDashboard" + + msg_info "Creating Service for WGDashboard" + cat </etc/init.d/wg-dashboard +#!/sbin/openrc-run + +description="WireGuard Dashboard Service" + +depend() { + need net + after firewall +} + +start() { + ebegin "Starting WGDashboard" + cd /etc/wgdashboard/src/ || exit 1 + ./wgd.sh start & + eend $? +} + +stop() { + ebegin "Stopping WGDashboard" + pkill -f "wgd.sh" + eend $? +} +EOF + chmod +x /etc/init.d/wg-dashboard + $STD rc-update add wg-dashboard default + $STD rc-service wg-dashboard start + msg_ok "Created Service for WGDashboard" + +fi + +msg_info "Starting Services" +$STD rc-update add wg-quick.wg0 default +$STD rc-service wg-quick.wg0 start +msg_ok "Started Services" + +motd_ssh +customize diff --git a/install/apache-cassandra-install.sh b/install/apache-cassandra-install.sh index 01f758c6f..2a48b118d 100644 --- a/install/apache-cassandra-install.sh +++ b/install/apache-cassandra-install.sh @@ -16,19 +16,17 @@ update_os msg_info "Installing Dependencies" $STD apt-get install -y apt-transport-https $STD apt-get install -y gpg -$STD apt-get install -y wget -$STD apt-get install -y openssh-server msg_ok "Installed Dependencies" msg_info "Installing Eclipse Temurin (Patience)" -wget -qO- https://packages.adoptium.net/artifactory/api/gpg/key/public | gpg --dearmor >/etc/apt/trusted.gpg.d/adoptium.gpg +curl -fsSL- https://packages.adoptium.net/artifactory/api/gpg/key/public | gpg --dearmor >/etc/apt/trusted.gpg.d/adoptium.gpg echo 'deb [arch=arm64 signed-by=/etc/apt/trusted.gpg.d/adoptium.gpg] https://packages.adoptium.net/artifactory/deb bookworm main' >/etc/apt/sources.list.d/adoptium.list $STD apt-get update $STD apt-get install -y temurin-11-jdk msg_ok "Installed Eclipse Temurin" msg_info "Installing Apache Cassandra" -wget -qO- https://downloads.apache.org/cassandra/KEYS | gpg --dearmor >/etc/apt/trusted.gpg.d/cassandra.gpg +curl -fsSL "https://downloads.apache.org/cassandra/KEYS" | gpg --dearmor >/etc/apt/trusted.gpg.d/cassandra.gpg echo "deb https://debian.cassandra.apache.org 41x main" >/etc/apt/sources.list.d/cassandra.sources.list $STD apt-get update $STD apt-get install -y cassandra cassandra-tools diff --git a/install/apache-guacamole-install.sh b/install/apache-guacamole-install.sh index b55e120e2..d7f309b2c 100644 --- a/install/apache-guacamole-install.sh +++ b/install/apache-guacamole-install.sh @@ -42,10 +42,10 @@ $STD apt-get install -y \ msg_ok "Installed Dependencies" msg_info "Setup Apache Tomcat" -RELEASE=$(wget -qO- https://dlcdn.apache.org/tomcat/tomcat-9/ | grep -oP '(?<=href=")v[^"/]+(?=/")' | sed 's/^v//' | sort -V | tail -n1) +RELEASE=$(curl -fsSL https://dlcdn.apache.org/tomcat/tomcat-9/ | grep -oP '(?<=href=")v[^"/]+(?=/")' | sed 's/^v//' | sort -V | tail -n1) mkdir -p /opt/apache-guacamole/tomcat9 mkdir -p /opt/apache-guacamole/server -wget -qO- "https://dlcdn.apache.org/tomcat/tomcat-9/v${RELEASE}/bin/apache-tomcat-${RELEASE}.tar.gz" | tar -xz -C /opt/apache-guacamole/tomcat9 --strip-components=1 +curl -fsSL "https://dlcdn.apache.org/tomcat/tomcat-9/v${RELEASE}/bin/apache-tomcat-${RELEASE}.tar.gz" | tar -xz -C /opt/apache-guacamole/tomcat9 --strip-components=1 useradd -r -d /opt/apache-guacamole/tomcat9 -s /bin/false tomcat chown -R tomcat: /opt/apache-guacamole/tomcat9 chmod -R g+r /opt/apache-guacamole/tomcat9/conf @@ -54,21 +54,21 @@ msg_ok "Setup Apache Tomcat" msg_info "Setup Apache Guacamole" mkdir -p /etc/guacamole/{extensions,lib} -RELEASE_SERVER=$(curl -sL https://api.github.com/repos/apache/guacamole-server/tags | jq -r '.[0].name') -wget -qO- https://api.github.com/repos/apache/guacamole-server/tarball/refs/tags/${RELEASE_SERVER} | tar -xz --strip-components=1 -C /opt/apache-guacamole/server +RELEASE_SERVER=$(curl -fsSL https://api.github.com/repos/apache/guacamole-server/tags | jq -r '.[0].name') +curl -fsSL "https://api.github.com/repos/apache/guacamole-server/tarball/refs/tags/${RELEASE_SERVER}" | tar -xz --strip-components=1 -C /opt/apache-guacamole/server cd /opt/apache-guacamole/server $STD autoreconf -fi $STD ./configure --with-init-dir=/etc/init.d --enable-allow-freerdp-snapshots $STD make $STD make install $STD ldconfig -RELEASE_CLIENT=$(curl -sL https://api.github.com/repos/apache/guacamole-client/tags | jq -r '.[0].name') -wget -q -O /opt/apache-guacamole/tomcat9/webapps/guacamole.war https://downloads.apache.org/guacamole/${RELEASE_CLIENT}/binary/guacamole-${RELEASE_CLIENT}.war +RELEASE_CLIENT=$(curl -fsSL https://api.github.com/repos/apache/guacamole-client/tags | jq -r '.[0].name') +curl -fsSL "https://downloads.apache.org/guacamole/${RELEASE_CLIENT}/binary/guacamole-${RELEASE_CLIENT}.war" -o "/opt/apache-guacamole/tomcat9/webapps/guacamole.war" cd /root -wget -q --directory-prefix=/root/ https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-8.0.26.tar.gz +curl -fsSL "https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-8.0.26.tar.gz" -o "/root/mysql-connector-java-8.0.26.tar.gz" $STD tar -xf ~/mysql-connector-java-8.0.26.tar.gz mv ~/mysql-connector-java-8.0.26/mysql-connector-java-8.0.26.jar /etc/guacamole/lib/ -wget -q --directory-prefix=/root/ https://downloads.apache.org/guacamole/1.5.5/binary/guacamole-auth-jdbc-1.5.5.tar.gz +curl -fsSL "https://downloads.apache.org/guacamole/1.5.5/binary/guacamole-auth-jdbc-1.5.5.tar.gz" -o "/root/guacamole-auth-jdbc-1.5.5.tar.gz" $STD tar -xf ~/guacamole-auth-jdbc-1.5.5.tar.gz mv ~/guacamole-auth-jdbc-1.5.5/mysql/guacamole-auth-jdbc-mysql-1.5.5.jar /etc/guacamole/extensions/ msg_ok "Setup Apache Guacamole" diff --git a/install/apache-tika-install.sh b/install/apache-tika-install.sh index ab6955aa9..f654ad6bc 100644 --- a/install/apache-tika-install.sh +++ b/install/apache-tika-install.sh @@ -41,8 +41,8 @@ msg_ok "Setup OpenJDK" msg_info "Installing Apache Tika" mkdir -p /opt/apache-tika cd /opt/apache-tika -RELEASE="$(wget -qO- https://dlcdn.apache.org/tika/ | grep -oP '(?<=href=")[0-9]+\.[0-9]+\.[0-9]+(?=/")' | sort -V | tail -n1)" -wget -q "https://dlcdn.apache.org/tika/${RELEASE}/tika-server-standard-${RELEASE}.jar" +RELEASE="$(curl -fsSL https://dlcdn.apache.org/tika/ | grep -oP '(?<=href=")[0-9]+\.[0-9]+\.[0-9]+(?=/")' | sort -V | tail -n1)" +curl -fsSL "https://dlcdn.apache.org/tika/${RELEASE}/tika-server-standard-${RELEASE}.jar" -o $(basename "https://dlcdn.apache.org/tika/${RELEASE}/tika-server-standard-${RELEASE}.jar") mv tika-server-standard-${RELEASE}.jar tika-server-standard.jar echo "${RELEASE}" >/opt/${APPLICATION}_version.txt msg_ok "Installed Apache Tika" diff --git a/install/apache-tomcat-install.sh b/install/apache-tomcat-install.sh index 4a915be22..579531878 100644 --- a/install/apache-tomcat-install.sh +++ b/install/apache-tomcat-install.sh @@ -23,7 +23,7 @@ msg_ok "Installed Dependencies" msg_info "Setting up Adoptium Repository" mkdir -p /etc/apt/keyrings -wget -qO - https://packages.adoptium.net/artifactory/api/gpg/key/public | gpg --dearmor >/etc/apt/trusted.gpg.d/adoptium.gpg +curl -fsSL "https://packages.adoptium.net/artifactory/api/gpg/key/public" | gpg --dearmor >/etc/apt/trusted.gpg.d/adoptium.gpg echo "deb https://packages.adoptium.net/artifactory/deb $(awk -F= '/^VERSION_CODENAME/{print$2}' /etc/os-release) main" >/etc/apt/sources.list.d/adoptium.list $STD apt-get update msg_ok "Set up Adoptium Repository" @@ -115,9 +115,9 @@ case $version in esac msg_info "Installing Tomcat $TOMCAT_VERSION" -LATEST_VERSION=$(curl -s "https://dlcdn.apache.org/tomcat/tomcat-$TOMCAT_VERSION/" | grep -oP 'v[0-9]+\.[0-9]+\.[0-9]+(-M[0-9]+)?/' | sort -V | tail -n 1 | sed 's/\/$//; s/v//') +LATEST_VERSION=$(curl -fsSL "https://dlcdn.apache.org/tomcat/tomcat-$TOMCAT_VERSION/" | grep -oP 'v[0-9]+\.[0-9]+\.[0-9]+(-M[0-9]+)?/' | sort -V | tail -n 1 | sed 's/\/$//; s/v//') TOMCAT_URL="https://dlcdn.apache.org/tomcat/tomcat-$TOMCAT_VERSION/v$LATEST_VERSION/bin/apache-tomcat-$LATEST_VERSION.tar.gz" -wget -qO /tmp/tomcat.tar.gz "$TOMCAT_URL" +curl -fsSL "$TOMCAT_URL" -o "/tmp/tomcat.tar.gz" mkdir -p /opt/tomcat-$TOMCAT_VERSION tar --strip-components=1 -xzf /tmp/tomcat.tar.gz -C /opt/tomcat-$TOMCAT_VERSION chown -R root:root /opt/tomcat-$TOMCAT_VERSION diff --git a/install/archivebox-install.sh b/install/archivebox-install.sh index 44e14e7a8..540a48ee1 100644 --- a/install/archivebox-install.sh +++ b/install/archivebox-install.sh @@ -97,7 +97,7 @@ Restart=always [Install] WantedBy=multi-user.target EOF -systemctl enable -q --now archivebox.service +systemctl enable -q --now archivebox msg_ok "Created Service" motd_ssh diff --git a/install/aria2-install.sh b/install/aria2-install.sh index 654252e20..dc07f4af2 100644 --- a/install/aria2-install.sh +++ b/install/aria2-install.sh @@ -31,7 +31,7 @@ if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then $STD apt-get install -y nginx $STD apt-get install -y unzip systemctl disable -q --now nginx - wget -q "$(curl -s https://api.github.com/repos/mayswind/ariang/releases/latest | grep download | grep AllInOne.zip | cut -d\" -f4)" + curl -fsSL "$(curl -fsSL https://api.github.com/repos/mayswind/ariang/releases/latest | grep download | grep AllInOne.zip | cut -d\" -f4)" -o $(basename "$(curl -fsSL https://api.github.com/repos/mayswind/ariang/releases/latest | grep download | grep AllInOne.zip | cut -d\" -f4)") $STD unzip AriaNg-*-AllInOne.zip -d /var/www rm /etc/nginx/sites-enabled/* cat </etc/nginx/conf.d/ariang.conf @@ -87,7 +87,7 @@ Restart=on-failure [Install] WantedBy=multi-user.target EOF -systemctl enable -q --now aria2.service +systemctl enable -q --now aria2 systemctl enable -q --now ariang msg_ok "Created Service" diff --git a/install/authelia-install.sh b/install/authelia-install.sh index cc97e8219..0b9e32a67 100644 --- a/install/authelia-install.sh +++ b/install/authelia-install.sh @@ -14,8 +14,8 @@ network_check update_os msg_info "Installing Authelia" -RELEASE=$(curl -s https://api.github.com/repos/authelia/authelia/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') -wget -q "https://github.com/authelia/authelia/releases/download/${RELEASE}/authelia_${RELEASE}_amd64.deb" +RELEASE=$(curl -fsSL https://api.github.com/repos/authelia/authelia/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') +curl -fsSL "https://github.com/authelia/authelia/releases/download/${RELEASE}/authelia_${RELEASE}_amd64.deb" -o $(basename "https://github.com/authelia/authelia/releases/download/${RELEASE}/authelia_${RELEASE}_amd64.deb") $STD dpkg -i "authelia_${RELEASE}_amd64.deb" msg_ok "Install Authelia completed" @@ -34,7 +34,6 @@ users: password: "\$argon2id\$v=19\$m=65536,t=3,p=4\$ZBopMzXrzhHXPEZxRDVT2w\$SxWm96DwhOsZyn34DLocwQEIb4kCDsk632PuiMdZnig" groups: [] EOF - cat </etc/authelia/configuration.yml authentication_backend: file: @@ -64,6 +63,8 @@ notifier: filesystem: filename: /etc/authelia/emails.txt EOF +touch /etc/authelia/emails.txt +chown -R authelia:authelia /etc/authelia systemctl enable -q --now authelia msg_ok "Authelia Setup completed" diff --git a/install/authentik-install.sh b/install/authentik-install.sh index 9e5577a98..5bd566f57 100644 --- a/install/authentik-install.sh +++ b/install/authentik-install.sh @@ -33,22 +33,20 @@ $STD apt-get install -y \ libxmlsec1-openssl \ libmaxminddb0 \ python3-pip \ - git \ - wget \ - openssh-server + git msg_ok "Installed Dependencies" msg_info "Installing yq" cd /tmp -YQ_LATEST="$(wget -qO- "https://api.github.com/repos/mikefarah/yq/releases/latest" | grep -Po '"tag_name": "\K.*?(?=")')" -wget -q "https://github.com/mikefarah/yq/releases/download/${YQ_LATEST}/yq_linux_arm64" -qO /usr/bin/yq +YQ_LATEST="$(curl -fsSL https://api.github.com/repos/mikefarah/yq/releases/latest | grep -Po '"tag_name": "\K.*?(?=")')" +curl -fsSL "https://github.com/mikefarah/yq/releases/download/${YQ_LATEST}/yq_linux_arm64" -o /usr/bin/yq chmod +x /usr/bin/yq msg_ok "Installed yq" msg_info "Installing GeoIP" cd /tmp -GEOIP_RELEASE=$(curl -s https://api.github.com/repos/maxmind/geoipupdate/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') -wget -qO geoipupdate.deb https://github.com/maxmind/geoipupdate/releases/download/v${GEOIP_RELEASE}/geoipupdate_${GEOIP_RELEASE}_linux_arm64.deb +GEOIP_RELEASE=$(curl -fsSL https://api.github.com/repos/maxmind/geoipupdate/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') +curl -fsSL "https://github.com/maxmind/geoipupdate/releases/download/v${GEOIP_RELEASE}/geoipupdate_${GEOIP_RELEASE}_linux_arm64.deb" -o "geoipupdate.deb" $STD dpkg -i geoipupdate.deb cat </etc/GeoIP.conf #GEOIPUPDATE_EDITION_IDS="GeoLite2-City GeoLite2-ASN" @@ -60,7 +58,7 @@ msg_ok "Installed GeoIP" msg_info "Setting up Python 3" cd /tmp -wget -q https://www.python.org/ftp/python/3.12.1/Python-3.12.1.tgz -O Python.tgz +curl -fsSL "https://www.python.org/ftp/python/3.12.1/Python-3.12.1.tgz" -o "Python.tgz" tar -zxf Python.tgz cd Python-3.12.1 $STD ./configure --enable-optimizations @@ -83,8 +81,8 @@ msg_ok "Installed Node.js" msg_info "Installing Golang" set +o pipefail temp_file=$(mktemp) -golang_tarball=$(curl -s https://go.dev/dl/ | grep -oP 'go[\d\.]+\.linux-amd64\.tar\.gz' | head -n 1) -wget -q https://golang.org/dl/"$golang_tarball" -O "$temp_file" +golang_tarball=$(curl -fsSL https://go.dev/dl/ | grep -oP 'go[\d\.]+\.linux-arm64\.tar\.gz' | head -n 1) +curl -fsSL "https://golang.org/dl/${golang_tarball}" -o "$temp_file" tar -C /usr/local -xzf "$temp_file" ln -sf /usr/local/go/bin/go /usr/local/bin/go rm -f "$temp_file" @@ -109,9 +107,9 @@ $STD sudo -u postgres psql -c "ALTER USER $DB_USER WITH SUPERUSER;" msg_ok "Installed PostgreSQL" msg_info "Installing authentik" -RELEASE=$(curl -s https://api.github.com/repos/goauthentik/authentik/releases/latest | grep "tarball_url" | awk '{print substr($2, 2, length($2)-3)}') +RELEASE=$(curl -fsSL https://api.github.com/repos/goauthentik/authentik/releases/latest | grep "tarball_url" | awk '{print substr($2, 2, length($2)-3)}') mkdir -p /opt/authentik -wget -qO authentik.tar.gz "${RELEASE}" +curl -fsSL "${RELEASE}" -o "authentik.tar.gz" tar -xzf authentik.tar.gz -C /opt/authentik --strip-components 1 --overwrite cd /opt/authentik/website $STD npm install diff --git a/install/autobrr-install.sh b/install/autobrr-install.sh index 9f70f25ba..118308aa4 100644 --- a/install/autobrr-install.sh +++ b/install/autobrr-install.sh @@ -13,16 +13,8 @@ setting_up_container network_check update_os -msg_info "Installing Dependencies" -$STD apt-get install -y curl -$STD apt-get install -y sudo -$STD apt-get install -y mc -$STD apt-get install -y wget -$STD apt-get install -y openssh-server -msg_ok "Installed Dependencies" - msg_info "Installing Autobrr" -wget -q $(curl -s https://api.github.com/repos/autobrr/autobrr/releases/latest | grep download | grep linux_arm64.tar.gz | cut -d\" -f4) +curl -fsSL "$(curl -fsSL https://api.github.com/repos/autobrr/autobrr/releases/latest | grep download | grep linux_arm64 | cut -d\" -f4)" -o $(basename "$(curl -fsSL https://api.github.com/repos/autobrr/autobrr/releases/latest | grep download | grep linux_x86_64 | cut -d\" -f4)") tar -C /usr/local/bin -xzf autobrr*.tar.gz rm -rf autobrr*.tar.gz mkdir -p /root/.config/autobrr diff --git a/install/baikal-install.sh b/install/baikal-install.sh index 0a13a9b12..da5054684 100644 --- a/install/baikal-install.sh +++ b/install/baikal-install.sh @@ -36,9 +36,9 @@ $STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME WITH OWNER $DB_USER TEMP msg_ok "Set up PostgreSQL" msg_info "Installing Baikal" -RELEASE=$(curl -s https://api.github.com/repos/sabre-io/Baikal/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') +RELEASE=$(curl -fsSL https://api.github.com/repos/sabre-io/Baikal/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') cd /opt -wget -q "https://github.com/sabre-io/baikal/releases/download/${RELEASE}/baikal-${RELEASE}.zip" +curl -fsSL "https://github.com/sabre-io/baikal/releases/download/${RELEASE}/baikal-${RELEASE}.zip" -o $(basename "https://github.com/sabre-io/baikal/releases/download/${RELEASE}/baikal-${RELEASE}.zip") unzip -q "baikal-${RELEASE}.zip" cat </opt/baikal/config/baikal.yaml database: diff --git a/install/barcode-buddy-install.sh b/install/barcode-buddy-install.sh index 0c5763f83..b646bf9ee 100644 --- a/install/barcode-buddy-install.sh +++ b/install/barcode-buddy-install.sh @@ -22,9 +22,9 @@ $STD apt-get install -y \ msg_ok "Installed Dependencies" msg_info "Installing barcodebuddy" -RELEASE=$(curl -s https://api.github.com/repos/Forceu/barcodebuddy/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') +RELEASE=$(curl -fsSL https://api.github.com/repos/Forceu/barcodebuddy/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') cd /opt -wget -q "https://github.com/Forceu/barcodebuddy/archive/refs/tags/v${RELEASE}.zip" +curl -fsSL "https://github.com/Forceu/barcodebuddy/archive/refs/tags/v${RELEASE}.zip" -o $(basename "https://github.com/Forceu/barcodebuddy/archive/refs/tags/v${RELEASE}.zip") unzip -q "v${RELEASE}.zip" mv "/opt/barcodebuddy-${RELEASE}" /opt/barcodebuddy chown -R www-data:www-data /opt/barcodebuddy/data diff --git a/install/bazarr-install.sh b/install/bazarr-install.sh index bf02c9393..370150c91 100644 --- a/install/bazarr-install.sh +++ b/install/bazarr-install.sh @@ -31,7 +31,7 @@ msg_ok "Setup Python3" msg_info "Installing Bazarr" mkdir -p /var/lib/bazarr/ -wget -q https://github.com/morpheus65535/bazarr/releases/latest/download/bazarr.zip +curl -fsSL "https://github.com/morpheus65535/bazarr/releases/latest/download/bazarr.zip" -o $(basename "https://github.com/morpheus65535/bazarr/releases/latest/download/bazarr.zip") unzip -qq bazarr -d /opt/bazarr chmod 775 /opt/bazarr /var/lib/bazarr/ python3 -m pip install -q -r /opt/bazarr/requirements.txt diff --git a/install/beszel-install.sh b/install/beszel-install.sh index 0c508a289..a2116f000 100644 --- a/install/beszel-install.sh +++ b/install/beszel-install.sh @@ -15,7 +15,7 @@ update_os msg_info "Installing Beszel" mkdir -p /opt/beszel -curl -sL "https://github.com/henrygd/beszel/releases/latest/download/beszel_$(uname -s)_$(uname -m | sed -e 's/x86_64/amd64/' -e 's/armv6l/arm/' -e 's/armv7l/arm/' -e 's/aarch64/arm64/').tar.gz" | tar -xz -O beszel | tee /opt/beszel/beszel >/dev/null +curl -fsSL "https://github.com/henrygd/beszel/releases/latest/download/beszel_$(uname -s)_$(uname -m | sed -e 's/x86_64/amd64/' -e 's/armv6l/arm/' -e 's/armv7l/arm/' -e 's/aarch64/arm64/').tar.gz" | tar -xz -O beszel | tee /opt/beszel/beszel >/dev/null chmod +x /opt/beszel/beszel msg_ok "Installed Beszel" @@ -34,7 +34,7 @@ RestartSec=5 [Install] WantedBy=multi-user.target EOF -systemctl enable -q --now beszel-hub.service +systemctl enable -q --now beszel-hub msg_ok "Created Service" motd_ssh diff --git a/install/blocky-install.sh b/install/blocky-install.sh index 87509b282..203657ef0 100644 --- a/install/blocky-install.sh +++ b/install/blocky-install.sh @@ -13,21 +13,13 @@ setting_up_container network_check update_os -msg_info "Installing Dependencies" -$STD apt-get install -y curl -$STD apt-get install -y sudo -$STD apt-get install -y mc -$STD apt-get install -y wget -$STD apt-get install -y openssh-server -msg_ok "Installed Dependencies" - msg_info "Installing Blocky" if systemctl is-active systemd-resolved >/dev/null 2>&1; then systemctl disable -q --now systemd-resolved fi mkdir /opt/blocky -RELEASE=$(curl -s https://api.github.com/repos/0xERR0R/blocky/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') -wget -qO- https://github.com/0xERR0R/blocky/releases/download/v${RELEASE}/blocky_v${RELEASE}_Linux_arm64.tar.gz | tar -xzf - -C /opt/blocky/ +RELEASE=$(curl -fsSL https://api.github.com/repos/0xERR0R/blocky/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') +curl -fsSL "https://github.com/0xERR0R/blocky/releases/download/v${RELEASE}/blocky_v${RELEASE}_Linux_arm64.tar.gz" | tar -xzf - -C /opt/blocky/ cat </opt/blocky/config.yml # configuration documentation: https://0xerr0r.github.io/blocky/latest/configuration/ diff --git a/install/boltdiy-install.sh b/install/boltdiy-install.sh index 809191336..b007320cc 100644 --- a/install/boltdiy-install.sh +++ b/install/boltdiy-install.sh @@ -33,8 +33,8 @@ msg_ok "Setup Node.js" msg_info "Setup bolt.diy" temp_file=$(mktemp) -RELEASE=$(curl -s https://api.github.com/repos/stackblitz-labs/bolt.diy/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') -wget -q "https://github.com/stackblitz-labs/bolt.diy/archive/refs/tags/v${RELEASE}.tar.gz" -O $temp_file +RELEASE=$(curl -fsSL https://api.github.com/repos/stackblitz-labs/bolt.diy/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') +curl -fsSL "https://github.com/stackblitz-labs/bolt.diy/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file" tar xzf $temp_file mv bolt.diy-${RELEASE} /opt/bolt.diy cd /opt/bolt.diy diff --git a/install/bookstack-install.sh b/install/bookstack-install.sh index 81c29e176..ff7f0c8a6 100644 --- a/install/bookstack-install.sh +++ b/install/bookstack-install.sh @@ -47,8 +47,8 @@ msg_ok "Set up database" msg_info "Setup Bookstack (Patience)" LOCAL_IP="$(hostname -I | awk '{print $1}')" cd /opt -RELEASE=$(curl -s https://api.github.com/repos/BookStackApp/BookStack/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') -wget -q "https://github.com/BookStackApp/BookStack/archive/refs/tags/v${RELEASE}.zip" +RELEASE=$(curl -fsSL https://api.github.com/repos/BookStackApp/BookStack/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') +curl -fsSL "https://github.com/BookStackApp/BookStack/archive/refs/tags/v${RELEASE}.zip" -o $(basename "https://github.com/BookStackApp/BookStack/archive/refs/tags/v${RELEASE}.zip") unzip -q v${RELEASE}.zip mv BookStack-${RELEASE} /opt/bookstack cd /opt/bookstack diff --git a/install/bunkerweb-install.sh b/install/bunkerweb-install.sh index e47aa2a77..292c131d4 100644 --- a/install/bunkerweb-install.sh +++ b/install/bunkerweb-install.sh @@ -22,13 +22,13 @@ $STD apt-get install -y wget msg_ok "Installed Dependencies" msg_info "Installing Nginx" -wget -qO- https://nginx.org/keys/nginx_signing.key | gpg --dearmor >/usr/share/keyrings/nginx-archive-keyring.gpg +curl -fsSL "https://nginx.org/keys/nginx_signing.key" | gpg --dearmor >/usr/share/keyrings/nginx-archive-keyring.gpg echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] http://nginx.org/packages/debian $(lsb_release -cs) nginx" >/etc/apt/sources.list.d/nginx.list $STD apt-get update $STD apt-get install -y nginx=1.26.3* msg_ok "Installed Nginx" -RELEASE=$(curl -s https://api.github.com/repos/bunkerity/bunkerweb/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') +RELEASE=$(curl -fsSL https://api.github.com/repos/bunkerity/bunkerweb/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') msg_info "Installing BunkerWeb v${RELEASE} (Patience)" curl -fsSL "https://repo.bunkerweb.io/bunkerity/bunkerweb/gpgkey" | gpg --dearmor >/etc/apt/keyrings/bunkerity_bunkerweb-archive-keyring.gpg echo "deb [signed-by=/etc/apt/keyrings/bunkerity_bunkerweb-archive-keyring.gpg] https://repo.bunkerweb.io/bunkerity/bunkerweb/debian/ bookworm main" >/etc/apt/sources.list.d/bunkerity_bunkerweb.list diff --git a/install/bytestash-install.sh b/install/bytestash-install.sh index 9f2b65988..6338d6fd4 100644 --- a/install/bytestash-install.sh +++ b/install/bytestash-install.sh @@ -32,8 +32,8 @@ msg_ok "Installed Node.js" msg_info "Installing ByteStash" JWT_SECRET=$(openssl rand -base64 32 | tr -d '/+=') temp_file=$(mktemp) -RELEASE=$(curl -s https://api.github.com/repos/jordan-dalby/ByteStash/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') -wget -q "https://github.com/jordan-dalby/ByteStash/archive/refs/tags/v${RELEASE}.tar.gz" -O $temp_file +RELEASE=$(curl -fsSL https://api.github.com/repos/jordan-dalby/ByteStash/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') +curl -fsSL "https://github.com/jordan-dalby/ByteStash/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file" tar zxf $temp_file mv ByteStash-${RELEASE} /opt/bytestash cd /opt/bytestash/server diff --git a/install/caddy-install.sh b/install/caddy-install.sh index 6ed992746..bd01550de 100644 --- a/install/caddy-install.sh +++ b/install/caddy-install.sh @@ -18,12 +18,7 @@ $STD apt-get install -y \ debian-keyring \ debian-archive-keyring \ apt-transport-https \ - gpg \ - curl \ - sudo \ - mc \ - wget \ - openssh-server + gpg msg_ok "Installed Dependencies" msg_info "Installing Caddy" @@ -38,8 +33,8 @@ if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then msg_info "Installing Golang" set +o pipefail temp_file=$(mktemp) - golang_tarball=$(curl -s https://go.dev/dl/ | grep -oP 'go[\d\.]+\.linux-arm64\.tar\.gz' | head -n 1) - wget -q https://golang.org/dl/"$golang_tarball" -O "$temp_file" + golang_tarball=$(curl -fsSL https://go.dev/dl/ | grep -oP 'go[\d\.]+\.linux-arm64\.tar\.gz' | head -n 1) + curl -fsSL "https://golang.org/dl/${golang_tarball}" -o "$temp_file" tar -C /usr/local -xzf "$temp_file" ln -sf /usr/local/go/bin/go /usr/local/bin/go rm -f "$temp_file" @@ -47,9 +42,10 @@ if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then msg_ok "Installed Golang" msg_info "Setup xCaddy" + $STD apt-get install -y git cd /opt - RELEASE=$(curl -s https://api.github.com/repos/caddyserver/xcaddy/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') - wget -q https://github.com/caddyserver/xcaddy/releases/download/${RELEASE}/xcaddy_${RELEASE:1}_linux_arm64.deb + RELEASE=$(curl -fsSL https://api.github.com/repos/caddyserver/xcaddy/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') + curl -fsSL "https://github.com/caddyserver/xcaddy/releases/download/${RELEASE}/xcaddy_${RELEASE:1}_linux_arm64.deb" -o $(basename "https://github.com/caddyserver/xcaddy/releases/download/${RELEASE}/xcaddy_${RELEASE:1}_linux_arm64.deb") $STD dpkg -i xcaddy_${RELEASE:1}_linux_arm64.deb rm -rf /opt/xcaddy* $STD xcaddy build diff --git a/install/calibre-web-install.sh b/install/calibre-web-install.sh index 230392e5b..bc9a7e4f8 100644 --- a/install/calibre-web-install.sh +++ b/install/calibre-web-install.sh @@ -35,7 +35,7 @@ msg_ok "Installed Kepubify" msg_info "Installing Calibre-Web" mkdir -p /opt/calibre-web $STD apt-get install -y calibre -$STD wget https://github.com/janeczku/calibre-web/raw/master/library/metadata.db -P /opt/calibre-web +$STD curl -fsSL https://github.com/janeczku/calibre-web/raw/master/library/metadata.db -o /opt/calibre-web/metadata.db $STD pip install calibreweb $STD pip install jsonschema msg_ok "Installed Calibre-Web" @@ -57,7 +57,7 @@ Restart=on-failure [Install] WantedBy=multi-user.target EOF -systemctl enable -q --now cps.service +systemctl enable -q --now cps msg_ok "Created Service" motd_ssh diff --git a/install/checkmk-install.sh b/install/checkmk-install.sh index 4d4ece20c..8df5b0539 100644 --- a/install/checkmk-install.sh +++ b/install/checkmk-install.sh @@ -13,18 +13,9 @@ setting_up_container network_check update_os -msg_info "Installing Dependencies" -$STD apt-get install -y \ - curl \ - sudo \ - mc \ - wget \ - openssh-server -msg_ok "Installed Dependencies" - msg_info "Install Checkmk" RELEASE=$(curl -fsSL https://api.github.com/repos/checkmk/checkmk/tags | grep "name" | awk '{print substr($2, 3, length($2)-4) }' | tr ' ' '\n' | grep -v '\-rc' | sort -V | tail -n 1) -wget -q https://download.checkmk.com/checkmk/${RELEASE}/check-mk-raw-${RELEASE}_0.bookworm_arm64.deb -O /opt/checkmk.deb +curl -fsSL "https://download.checkmk.com/checkmk/${RELEASE}/check-mk-raw-${RELEASE}_0.bookworm_arm64.deb" -o "/opt/checkmk.deb" $STD apt-get install -y /opt/checkmk.deb echo "${RELEASE}" >"/opt/checkmk_version.txt" msg_ok "Installed Checkmk" diff --git a/install/cloudflared-install.sh b/install/cloudflared-install.sh index d32b342d8..2a94c5074 100644 --- a/install/cloudflared-install.sh +++ b/install/cloudflared-install.sh @@ -61,7 +61,7 @@ KillMode=process [Install] WantedBy=multi-user.target EOF - systemctl enable -q --now cloudflared.service + systemctl enable -q --now cloudflared msg_ok "Created Service" fi diff --git a/install/commafeed-install.sh b/install/commafeed-install.sh index 8a29ebfce..e8ee3ecdb 100644 --- a/install/commafeed-install.sh +++ b/install/commafeed-install.sh @@ -23,17 +23,17 @@ $STD apt-get install -y rsync msg_ok "Installed Dependencies" msg_info "Installing Azul Zulu" -wget -qO /etc/apt/trusted.gpg.d/zulu-repo.asc "https://keyserver.ubuntu.com/pks/lookup?op=get&search=0xB1998361219BD9C9" -wget -q https://cdn.azul.com/zulu/bin/zulu-repo_1.0.0-3_all.deb +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 $STD apt-get update $STD apt-get -y install zulu17-jdk msg_ok "Installed Azul Zulu" -RELEASE=$(curl -sL https://api.github.com/repos/Athou/commafeed/releases/latest | grep '"tag_name":' | cut -d'"' -f4) +RELEASE=$(curl -fsSL https://api.github.com/repos/Athou/commafeed/releases/latest | grep '"tag_name":' | cut -d'"' -f4) msg_info "Installing CommaFeed ${RELEASE}" mkdir /opt/commafeed -wget -q https://github.com/Athou/commafeed/releases/download/${RELEASE}/commafeed-${RELEASE}-h2-jvm.zip +curl -fsSL "https://github.com/Athou/commafeed/releases/download/${RELEASE}/commafeed-${RELEASE}-h2-jvm.zip" -o $(basename "https://github.com/Athou/commafeed/releases/download/${RELEASE}/commafeed-${RELEASE}-h2-jvm.zip") unzip -q commafeed-${RELEASE}-h2-jvm.zip mv commafeed-${RELEASE}-h2/* /opt/commafeed/ echo "${RELEASE}" >/opt/${APPLICATION}_version.txt @@ -53,7 +53,7 @@ Restart=always [Install] WantedBy=multi-user.target EOF -systemctl enable -q --now commafeed.service +systemctl enable -q --now commafeed msg_ok "Created Service" motd_ssh diff --git a/install/cosmos-install.sh b/install/cosmos-install.sh index f266a926c..c79c777e2 100644 --- a/install/cosmos-install.sh +++ b/install/cosmos-install.sh @@ -22,7 +22,7 @@ msg_ok "Installed Dependencies" msg_info "Install mergerfs" MERGERFS_VERSION="2.40.2" -wget -q "https://github.com/trapexit/mergerfs/releases/download/${MERGERFS_VERSION}/mergerfs_${MERGERFS_VERSION}.debian-bullseye_amd64.deb" +curl -fsSL "https://github.com/trapexit/mergerfs/releases/download/${MERGERFS_VERSION}/mergerfs_${MERGERFS_VERSION}.debian-bullseye_amd64.deb" -o $(basename "https://github.com/trapexit/mergerfs/releases/download/${MERGERFS_VERSION}/mergerfs_${MERGERFS_VERSION}.debian-bullseye_amd64.deb") $STD dpkg -i "mergerfs_${MERGERFS_VERSION}.debian-bullseye_amd64.deb" || $STD apt-get install -f -y rm "mergerfs_${MERGERFS_VERSION}.debian-bullseye_amd64.deb" msg_ok "Installed mergerfs" @@ -35,9 +35,9 @@ msg_ok "Installed Docker" msg_info "Install Cosmos" mkdir -p /opt/cosmos -LATEST_RELEASE=$(curl -s https://api.github.com/repos/azukaar/Cosmos-Server/releases/latest | grep "tag_name" | cut -d '"' -f 4) +LATEST_RELEASE=$(curl -fsSL https://api.github.com/repos/azukaar/Cosmos-Server/releases/latest | grep "tag_name" | cut -d '"' -f 4) ZIP_FILE="cosmos-cloud-${LATEST_RELEASE#v}-amd64.zip" -curl -sL "https://github.com/azukaar/Cosmos-Server/releases/download/${LATEST_RELEASE}/${ZIP_FILE}" -o "/opt/cosmos/${ZIP_FILE}" +curl -fsSL "https://github.com/azukaar/Cosmos-Server/releases/download/${LATEST_RELEASE}/${ZIP_FILE}" -o "/opt/cosmos/${ZIP_FILE}" cd /opt/cosmos unzip -o -q "${ZIP_FILE}" LATEST_RELEASE_NO_V=${LATEST_RELEASE#v} @@ -68,7 +68,7 @@ EnvironmentFile=-/etc/sysconfig/CosmosCloud WantedBy=multi-user.target EOF -systemctl enable -q --now cosmos.service +systemctl enable -q --now cosmos msg_info "Created Service" motd_ssh diff --git a/install/crafty-controller-install.sh b/install/crafty-controller-install.sh index 969b22354..9a859eb58 100644 --- a/install/crafty-controller-install.sh +++ b/install/crafty-controller-install.sh @@ -25,7 +25,7 @@ msg_ok "Installed Dependencies" msg_info "Setting up TemurinJDK" mkdir -p /etc/apt/keyrings -wget -qO - https://packages.adoptium.net/artifactory/api/gpg/key/public | tee /etc/apt/keyrings/adoptium.asc +curl -fsSL "https://packages.adoptium.net/artifactory/api/gpg/key/public" | tee /etc/apt/keyrings/adoptium.asc echo "deb [signed-by=/etc/apt/keyrings/adoptium.asc] https://packages.adoptium.net/artifactory/deb $(awk -F= '/^VERSION_CODENAME/{print$2}' /etc/os-release) main" | tee /etc/apt/sources.list.d/adoptium.list $STD apt-get update $STD apt-get install -y temurin-{8,11,17,21}-jre @@ -45,9 +45,9 @@ msg_info "Installing Craty-Controller (Patience)" useradd crafty -m -s /bin/bash cd /opt mkdir -p /opt/crafty-controller/crafty /opt/crafty-controller/server -RELEASE=$(curl -s "https://gitlab.com/api/v4/projects/20430749/releases" | grep -o '"tag_name":"v[^"]*"' | head -n 1 | sed 's/"tag_name":"v//;s/"//') +RELEASE=$(curl -fsSL "https://gitlab.com/api/v4/projects/20430749/releases" | grep -o '"tag_name":"v[^"]*"' | head -n 1 | sed 's/"tag_name":"v//;s/"//') echo "${RELEASE}" >"/opt/crafty-controller_version.txt" -wget -q "https://gitlab.com/crafty-controller/crafty-4/-/archive/v${RELEASE}/crafty-4-v${RELEASE}.zip" +curl -fsSL "https://gitlab.com/crafty-controller/crafty-4/-/archive/v${RELEASE}/crafty-4-v${RELEASE}.zip" -o $(basename "https://gitlab.com/crafty-controller/crafty-4/-/archive/v${RELEASE}/crafty-4-v${RELEASE}.zip") unzip -q crafty-4-v${RELEASE}.zip cp -a crafty-4-v${RELEASE}/. /opt/crafty-controller/crafty/crafty-4/ rm -rf crafty-4-v${RELEASE} diff --git a/install/cronicle-install.sh b/install/cronicle-install.sh index 47f824160..33c783a57 100644 --- a/install/cronicle-install.sh +++ b/install/cronicle-install.sh @@ -35,7 +35,7 @@ $STD apt-get install -y nodejs msg_ok "Installed Node.js" msg_info "Installing Cronicle Primary Server" -LATEST=$(curl -sL https://api.github.com/repos/jhuckaby/Cronicle/releases/latest | grep '"tag_name":' | cut -d'"' -f4) +LATEST=$(curl -fsSL https://api.github.com/repos/jhuckaby/Cronicle/releases/latest | grep '"tag_name":' | cut -d'"' -f4) IP=$(hostname -I | awk '{print $1}') mkdir -p /opt/cronicle cd /opt/cronicle diff --git a/install/cryptpad-install.sh b/install/cryptpad-install.sh index 9bf77192a..e19dee82d 100644 --- a/install/cryptpad-install.sh +++ b/install/cryptpad-install.sh @@ -34,8 +34,8 @@ read -p "Install OnlyOffice components instead of CKEditor? (Y/N): " onlyoffice msg_info "Setup ${APPLICATION}" temp_file=$(mktemp) -RELEASE=$(curl -s https://api.github.com/repos/cryptpad/cryptpad/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') -wget -q "https://github.com/cryptpad/cryptpad/archive/refs/tags/${RELEASE}.tar.gz" -O $temp_file +RELEASE=$(curl -fsSL https://api.github.com/repos/cryptpad/cryptpad/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') +curl -fsSL "https://github.com/cryptpad/cryptpad/archive/refs/tags/${RELEASE}.tar.gz" -o "$temp_file" tar zxf $temp_file mv cryptpad-$RELEASE /opt/cryptpad cd /opt/cryptpad diff --git a/install/daemonsync-install.sh b/install/daemonsync-install.sh index 665172158..6fb5cbcad 100644 --- a/install/daemonsync-install.sh +++ b/install/daemonsync-install.sh @@ -14,17 +14,12 @@ network_check update_os msg_info "Installing Dependencies" -$STD apt-get install -y curl -$STD apt-get install -y sudo -$STD apt-get install -y mc -$STD apt-get install -y wget -$STD apt-get install -y openssh-server wget -qL http://ports.ubuntu.com/pool/universe/g/gcc-defaults/g++-multilib-arm-linux-gnueabi_9.3.0-1ubuntu2_arm64.deb $STD dpkg -i g++-multilib-arm-linux-gnueabi_9.3.0-1ubuntu2_arm64.deb msg_ok "Installed Dependencies" msg_info "Installing Daemon Sync Server" -wget -qL https://github.com/tteck/Proxmox/raw/main/misc/daemonsync_2.2.0.0059_amd64.deb +curl -fsSL "https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/daemonsync_2.2.0.0059_amd64.deb" -o "daemonsync_2.2.0.0059_amd64.deb" $STD dpkg -i daemonsync_2.2.0.0059_amd64.deb msg_ok "Installed Daemon Sync Server" diff --git a/install/dashy-install.sh b/install/dashy-install.sh index 35fc73fe9..e78e35a16 100644 --- a/install/dashy-install.sh +++ b/install/dashy-install.sh @@ -33,10 +33,10 @@ $STD apt-get update $STD apt-get install -y nodejs msg_ok "Installed Node.js" -RELEASE=$(curl -s https://api.github.com/repos/Lissy93/dashy/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') +RELEASE=$(curl -fsSL https://api.github.com/repos/Lissy93/dashy/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') msg_info "Installing Dashy ${RELEASE} (Patience)" mkdir -p /opt/dashy -wget -qO- https://github.com/Lissy93/dashy/archive/refs/tags/${RELEASE}.tar.gz | tar -xz -C /opt/dashy --strip-components=1 +curl -fsSL "https://github.com/Lissy93/dashy/archive/refs/tags/${RELEASE}.tar.gz" | tar -xz -C /opt/dashy --strip-components=1 cd /opt/dashy $STD npm install $STD npm run build diff --git a/install/deconz-install.sh b/install/deconz-install.sh index 1a1b92e28..502044860 100644 --- a/install/deconz-install.sh +++ b/install/deconz-install.sh @@ -13,14 +13,6 @@ setting_up_container network_check update_os -msg_info "Installing Dependencies" -$STD apt-get install -y curl -$STD apt-get install -y sudo -$STD apt-get install -y mc -$STD apt-get install -y wget -$STD apt-get install -y openssh-server -msg_ok "Installed Dependencies" - msg_info "Setting Phoscon Repository" VERSION="$(awk -F'=' '/^VERSION_CODENAME=/{ print $NF }' /etc/os-release)" curl -fsSL http://phoscon.de/apt/deconz.pub.key >/etc/apt/trusted.gpg.d/deconz.pub.asc @@ -28,8 +20,8 @@ echo "deb [arch=arm64] http://phoscon.de/apt/deconz $VERSION main" >/etc/apt/sou msg_ok "Setup Phoscon Repository" msg_info "Installing deConz" -wget -qL http://ports.ubuntu.com/pool/main/o/openssl/libssl1.0.0_1.0.2g-1ubuntu4.20_arm64.deb -$STD dpkg -i libssl1.0.0_1.0.2g-1ubuntu4.20_arm64.deb +curl -fsSL "http://ports.ubuntu.com/pool/main/o/openssl/libssl1.1_1.1.1f-1ubuntu2.24_arm64.deb" -o $(basename "http://ports.ubuntu.com/pool/main/o/openssl/libssl1.1_1.1.1f-1ubuntu2.24_arm64.deb") +$STD dpkg -i libssl1.1_1.1.1f-1ubuntu2.24_arm64.deb $STD apt-get update $STD apt-get install -y deconz msg_ok "Installed deConz" @@ -58,7 +50,7 @@ motd_ssh customize msg_info "Cleaning up" -rm -rf libssl1.0.0_1.0.2g-1ubuntu4.20_arm64.deb +rm -rf libssl1.1_1.1.1f-1ubuntu2.24_arm64 $STD apt-get -y autoremove $STD apt-get -y autoclean msg_ok "Cleaned" diff --git a/install/docker-install.sh b/install/docker-install.sh index 041cf2456..f116991ca 100644 --- a/install/docker-install.sh +++ b/install/docker-install.sh @@ -21,7 +21,7 @@ $STD apt-get install -y openssh-server msg_ok "Installed Dependencies" get_latest_release() { - curl -sL https://api.github.com/repos/$1/releases/latest | grep '"tag_name":' | cut -d'"' -f4 + curl -fsSL https://api.github.com/repos/$1/releases/latest | grep '"tag_name":' | cut -d'"' -f4 } DOCKER_LATEST_VERSION=$(get_latest_release "moby/moby") @@ -33,7 +33,7 @@ msg_info "Installing Docker $DOCKER_LATEST_VERSION" DOCKER_CONFIG_PATH='/etc/docker/daemon.json' mkdir -p $(dirname $DOCKER_CONFIG_PATH) echo -e '{\n "log-driver": "journald"\n}' >/etc/docker/daemon.json -$STD sh <(curl -sSL https://get.docker.com) +$STD sh <(curl -fsSL https://get.docker.com) msg_ok "Installed Docker $DOCKER_LATEST_VERSION" read -r -p "Would you like to add Portainer? " prompt diff --git a/install/dockge-install.sh b/install/dockge-install.sh index 88a024a56..749713e65 100644 --- a/install/dockge-install.sh +++ b/install/dockge-install.sh @@ -13,16 +13,8 @@ setting_up_container network_check update_os -msg_info "Installing Dependencies" -$STD apt-get install -y curl -$STD apt-get install -y sudo -$STD apt-get install -y mc -$STD apt-get install -y wget -$STD apt-get install -y openssh-server -msg_ok "Installed Dependencies" - get_latest_release() { - curl -sL https://api.github.com/repos/$1/releases/latest | grep '"tag_name":' | cut -d'"' -f4 + curl -fsSL https://api.github.com/repos/$1/releases/latest | grep '"tag_name":' | cut -d'"' -f4 } DOCKER_LATEST_VERSION=$(get_latest_release "moby/moby") @@ -32,19 +24,19 @@ msg_info "Installing Docker $DOCKER_LATEST_VERSION" DOCKER_CONFIG_PATH='/etc/docker/daemon.json' mkdir -p $(dirname $DOCKER_CONFIG_PATH) echo -e '{\n "log-driver": "journald"\n}' >/etc/docker/daemon.json -$STD sh <(curl -sSL https://get.docker.com) +$STD sh <(curl -fsSL https://get.docker.com) msg_ok "Installed Docker $DOCKER_LATEST_VERSION" msg_info "Installing Docker Compose $DOCKER_COMPOSE_LATEST_VERSION" DOCKER_CONFIG=${DOCKER_CONFIG:-$HOME/.docker} mkdir -p $DOCKER_CONFIG/cli-plugins -curl -sSL https://github.com/docker/compose/releases/download/$DOCKER_COMPOSE_LATEST_VERSION/docker-compose-linux-aarch64 -o ~/.docker/cli-plugins/docker-compose +curl -fsSL https://github.com/docker/compose/releases/download/$DOCKER_COMPOSE_LATEST_VERSION/docker-compose-linux-aarch64 -o ~/.docker/cli-plugins/docker-compose chmod +x $DOCKER_CONFIG/cli-plugins/docker-compose msg_ok "Installed Docker Compose $DOCKER_COMPOSE_LATEST_VERSION" msg_info "Installing Dockge" mkdir -p /opt/{dockge,stacks} -wget -q -O /opt/dockge/compose.yaml https://raw.githubusercontent.com/louislam/dockge/master/compose.yaml +curl -fsSL "https://raw.githubusercontent.com/louislam/dockge/master/compose.yaml" -o "/opt/dockge/compose.yaml" cd /opt/dockge $STD docker compose up -d msg_ok "Installed Dockge" @@ -53,9 +45,8 @@ read -r -p "Would you like to add Immich? " prompt if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then msg_info "Adding Immich compose.yaml" mkdir -p /opt/stacks/immich - wget -q -O /opt/stacks/immich/compose.yaml https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml - wget -q -O /opt/stacks/immich/.env https://github.com/immich-app/immich/releases/latest/download/example.env - #wget -q -O /opt/stacks/immich/hwaccel.ml.yml https://github.com/immich-app/immich/releases/latest/download/hwaccel.ml.yml + curl -fsSL "https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml" -o "/opt/stacks/immich/compose.yaml" + curl -fsSL "https://github.com/immich-app/immich/releases/latest/download/example.env" -o "/opt/stacks/immich/.env" msg_ok "Added Immich compose.yaml" fi diff --git a/install/docmost-install.sh b/install/docmost-install.sh index b3580f07e..3c6cee72d 100644 --- a/install/docmost-install.sh +++ b/install/docmost-install.sh @@ -24,13 +24,13 @@ msg_ok "Installed Dependencies" msg_info "Setting up Node.js Repository" mkdir -p /etc/apt/keyrings curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg -echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main" >/etc/apt/sources.list.d/nodesource.list +echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_22.x nodistro main" >/etc/apt/sources.list.d/nodesource.list msg_ok "Set up Node.js Repository" msg_info "Installing Node.js" $STD apt-get update $STD apt-get install -y nodejs -$STD npm install -g pnpm +$STD npm install -g pnpm@10.4.0 msg_ok "Installed Node.js" msg_info "Setting up PostgreSQL" @@ -52,8 +52,8 @@ msg_ok "Set up PostgreSQL" msg_info "Installing Docmost (Patience)" temp_file=$(mktemp) -RELEASE=$(curl -s https://api.github.com/repos/docmost/docmost/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') -wget -q "https://github.com/docmost/docmost/archive/refs/tags/v${RELEASE}.tar.gz" -O "$temp_file" +RELEASE=$(curl -fsSL https://api.github.com/repos/docmost/docmost/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') +curl -fsSL "https://github.com/docmost/docmost/archive/refs/tags/v${RELEASE}.tar.gz" -o ""$temp_file"" tar -xzf "$temp_file" mv docmost-${RELEASE} /opt/docmost cd /opt/docmost diff --git a/install/dolibarr-install.sh b/install/dolibarr-install.sh index 323eada89..d629ce284 100644 --- a/install/dolibarr-install.sh +++ b/install/dolibarr-install.sh @@ -31,9 +31,9 @@ msg_ok "Set up database" msg_info "Setup Dolibarr" BASE="https://sourceforge.net/projects/dolibarr/files/Dolibarr%20installer%20for%20Debian-Ubuntu%20(DoliDeb)/" -RELEASE=$(curl -s "$BASE" | grep -oP '(?<=/Dolibarr%20installer%20for%20Debian-Ubuntu%20%28DoliDeb%29/)[^/"]+' | head -n1) -FILE=$(curl -s "${BASE}${RELEASE}/" | grep -oP 'dolibarr_[^"]+_all.deb' | head -n1) -wget -q "https://netcologne.dl.sourceforge.net/project/dolibarr/Dolibarr%20installer%20for%20Debian-Ubuntu%20(DoliDeb)/${RELEASE}/${FILE}?viasf=1" -O "$FILE" +RELEASE=$(curl -fsSL "$BASE" | grep -oP '(?<=/Dolibarr%20installer%20for%20Debian-Ubuntu%20%28DoliDeb%29/)[^/"]+' | head -n1) +FILE=$(curl -fsSL "${BASE}${RELEASE}/" | grep -oP 'dolibarr_[^"]+_all.deb' | head -n1) +curl -fsSL "https://netcologne.dl.sourceforge.net/project/dolibarr/Dolibarr%20installer%20for%20Debian-Ubuntu%20(DoliDeb)/${RELEASE}/${FILE}?viasf=1" -o ""$FILE"" echo "dolibarr dolibarr/reconfigure-webserver multiselect apache2" | debconf-set-selections $STD apt-get install ./$FILE -y $STD apt install -f diff --git a/install/dotnetaspwebapi-install.sh b/install/dotnetaspwebapi-install.sh index d1bc6f2c8..269980028 100644 --- a/install/dotnetaspwebapi-install.sh +++ b/install/dotnetaspwebapi-install.sh @@ -102,7 +102,7 @@ Environment=DOTNET_NOLOGO=true [Install] WantedBy=multi-user.target EOF -systemctl enable -q --now kestrel-aspnetapi.service +systemctl enable -q --now kestrel-aspnetapi msg_ok "Created Service" motd_ssh diff --git a/install/duplicati-install.sh b/install/duplicati-install.sh index b51ea566c..088a3a402 100644 --- a/install/duplicati-install.sh +++ b/install/duplicati-install.sh @@ -21,8 +21,8 @@ $STD apt-get install -y \ msg_ok "Installed Dependencies" msg_info "Setting up Duplicati" -RELEASE=$(curl -s https://api.github.com/repos/duplicati/duplicati/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4)}') -wget -q "https://github.com/duplicati/duplicati/releases/download/v${RELEASE}/duplicati-${RELEASE}-linux-x64-gui.deb" +RELEASE=$(curl -fsSL https://api.github.com/repos/duplicati/duplicati/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4)}') +curl -fsSL "https://github.com/duplicati/duplicati/releases/download/v${RELEASE}/duplicati-${RELEASE}-linux-x64-gui.deb" -o $(basename "https://github.com/duplicati/duplicati/releases/download/v${RELEASE}/duplicati-${RELEASE}-linux-x64-gui.deb") $STD dpkg -i duplicati-${RELEASE}-linux-x64-gui.deb echo "${RELEASE}" >/opt/Duplicati_version.txt msg_ok "Finished setting up Duplicati" diff --git a/install/elementsynapse-install.sh b/install/elementsynapse-install.sh index 2c288fee0..7a462c9a5 100644 --- a/install/elementsynapse-install.sh +++ b/install/elementsynapse-install.sh @@ -23,7 +23,7 @@ msg_ok "Installed Dependencies" read -p "Please enter the name for your server: " servername msg_info "Installing Element Synapse" -wget -q -O /usr/share/keyrings/matrix-org-archive-keyring.gpg https://packages.matrix.org/debian/matrix-org-archive-keyring.gpg +curl -fsSL "https://packages.matrix.org/debian/matrix-org-archive-keyring.gpg" -o "/usr/share/keyrings/matrix-org-archive-keyring.gpg" echo "deb [signed-by=/usr/share/keyrings/matrix-org-archive-keyring.gpg] https://packages.matrix.org/debian/ $(lsb_release -cs) main" >/etc/apt/sources.list.d/matrix-org.list $STD apt-get update echo "matrix-synapse-py3 matrix-synapse/server-name string $servername" | debconf-set-selections diff --git a/install/emby-install.sh b/install/emby-install.sh index e2dda2591..aca75cfe7 100644 --- a/install/emby-install.sh +++ b/install/emby-install.sh @@ -13,14 +13,6 @@ setting_up_container network_check update_os -msg_info "Installing Dependencies" -$STD apt-get install -y curl -$STD apt-get install -y sudo -$STD apt-get install -y mc -$STD apt-get install -y wget -$STD apt-get install -y openssh-server -msg_ok "Installed Dependencies" - msg_info "Setting Up Hardware Acceleration" $STD apt-get -y install {va-driver-all,ocl-icd-libopencl1,vainfo} if [[ "$CTTYPE" == "0" ]]; then @@ -32,10 +24,10 @@ if [[ "$CTTYPE" == "0" ]]; then fi msg_ok "Set Up Hardware Acceleration" -LATEST=$(curl -sL https://api.github.com/repos/MediaBrowser/Emby.Releases/releases/latest | grep '"tag_name":' | cut -d'"' -f4) +LATEST=$(curl -fsSL https://api.github.com/repos/MediaBrowser/Emby.Releases/releases/latest | grep '"tag_name":' | cut -d'"' -f4) msg_info "Installing Emby" -wget -q https://github.com/MediaBrowser/Emby.Releases/releases/download/${LATEST}/emby-server-deb_${LATEST}_arm64.deb +curl -fsSL "https://github.com/MediaBrowser/Emby.Releases/releases/download/${LATEST}/emby-server-deb_${LATEST}_arm64.deb" -o $(basename "https://github.com/MediaBrowser/Emby.Releases/releases/download/${LATEST}/emby-server-deb_${LATEST}_arm64.deb") $STD dpkg -i emby-server-deb_${LATEST}_arm64.deb if [[ "$CTTYPE" == "0" ]]; then sed -i -e 's/^ssl-cert:x:104:$/render:x:104:root,emby/' -e 's/^render:x:108:root,emby$/ssl-cert:x:108:/' /etc/group diff --git a/install/ersatztv-install.sh b/install/ersatztv-install.sh index 67738dc35..c833ea77a 100644 --- a/install/ersatztv-install.sh +++ b/install/ersatztv-install.sh @@ -14,18 +14,13 @@ network_check update_os msg_info "Installing Dependencies" -$STD apt-get install -y curl -$STD apt-get install -y sudo -$STD apt-get install -y mc -$STD apt-get install -y wget $STD apt-get install -y ca-certificates -$STD apt-get install -y openssh-server msg_ok "Installed Dependencies" msg_info "Installing FFmpeg (Patience)" cd /usr/local/bin -wget -q https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-amd64-static.tar.xz -$STD tar -xvf ffmpeg-release-amd64-static.tar.xz +curl -fsSL "https://johnvansickle.com/ffmpeg/releasesffmpeg/-release-arm64-static.tar.xz" -o $(basename "https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-arm64-static.tar.xz") +$STD tar -xvf ffmpeg-release-arm64-static.tar.xz rm -f ffmpeg-*.tar.xz cd ffmpeg-* mv ffmpeg ffprobe /usr/local/bin/ @@ -44,9 +39,10 @@ fi msg_ok "Set Up Hardware Acceleration" msg_info "Installing ErsatzTV" +temp_file=$(mktemp) cd /opt -RELEASE=$(curl -s https://api.github.com/repos/ErsatzTV/ErsatzTV/releases | grep -oP '"tag_name": "\K[^"]+' | head -n 1) -wget -qO- "https://github.com/ErsatzTV/ErsatzTV/releases/download/${RELEASE}/ErsatzTV-${RELEASE}-linux-arm64.tar.gz" -O "$temp_file" +RELEASE=$(curl -fsSL https://api.github.com/repos/ErsatzTV/ErsatzTV/releases | grep -oP '"tag_name": "\K[^"]+' | head -n 1) +curl -fsSL "https://github.com/ErsatzTV/ErsatzTV/releases/download/${RELEASE}/ErsatzTV-${RELEASE}-linux-arm64.tar.gz" -o "$temp_file" tar -xzf "$temp_file" mv /opt/ErsatzTV-${RELEASE}-linux-arm64 /opt/ErsatzTV echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt" diff --git a/install/esphome-install.sh b/install/esphome-install.sh index f0c20b92c..734dc8536 100644 --- a/install/esphome-install.sh +++ b/install/esphome-install.sh @@ -47,7 +47,7 @@ User=root [Install] WantedBy=multi-user.target EOF -systemctl enable -q --now esphomeDashboard.service +systemctl enable -q --now esphomeDashboard msg_ok "Created Service" motd_ssh diff --git a/install/evcc-install.sh b/install/evcc-install.sh index c6c5da0ff..7cc0ce632 100644 --- a/install/evcc-install.sh +++ b/install/evcc-install.sh @@ -30,7 +30,7 @@ msg_ok "evcc Repository setup sucessfully" msg_info "Installing evcc" $STD apt install -y evcc -systemctl enable -q --now evcc.service +systemctl enable -q --now evcc msg_ok "Installed evcc" motd_ssh diff --git a/install/excalidraw-install.sh b/install/excalidraw-install.sh index 5d273e713..461d8259b 100644 --- a/install/excalidraw-install.sh +++ b/install/excalidraw-install.sh @@ -33,8 +33,8 @@ msg_ok "Setup Node.js" msg_info "Setup Excalidraw" temp_file=$(mktemp) -RELEASE=$(curl -s https://api.github.com/repos/excalidraw/excalidraw/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') -wget -q "https://github.com/excalidraw/excalidraw/archive/refs/tags/v${RELEASE}.tar.gz" -O $temp_file +RELEASE=$(curl -fsSL https://api.github.com/repos/excalidraw/excalidraw/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') +curl -fsSL "https://github.com/excalidraw/excalidraw/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file" tar xzf $temp_file mv excalidraw-${RELEASE} /opt/excalidraw cd /opt/excalidraw diff --git a/install/fenrus-install.sh b/install/fenrus-install.sh index e618a7e85..a9c692ff4 100644 --- a/install/fenrus-install.sh +++ b/install/fenrus-install.sh @@ -16,8 +16,6 @@ update_os msg_info "Installing Dependencies" $STD apt-get install -y git -$STD apt-get install -y wget -$STD apt-get install -y openssh-server msg_ok "Installed Dependencies" msg_info "Installing ASP.NET Core 7 SDK" diff --git a/install/fhem-install.sh b/install/fhem-install.sh index 063a13ca7..bb84f4b87 100644 --- a/install/fhem-install.sh +++ b/install/fhem-install.sh @@ -20,7 +20,7 @@ $STD apt-get install -y openssh-server msg_ok "Installed Dependencies" msg_info "Setting up Fhem Repository" -curl -sSf https://debian.fhem.de/archive.key | gpg --dearmor >/etc/apt/trusted.gpg.d/debianfhemde-archive-keyring.gpg +curl -fsSL https://debian.fhem.de/archive.key | gpg --dearmor >/etc/apt/trusted.gpg.d/debianfhemde-archive-keyring.gpg echo 'deb [signed-by=/etc/apt/trusted.gpg.d/debianfhemde-archive-keyring.gpg] https://debian.fhem.de/nightly/ /' >/etc/apt/sources.list.d/fhem.list msg_ok "Set up Fhem Repository" diff --git a/install/fileflows-install.sh b/install/fileflows-install.sh index 0419aceed..5ccb3db47 100644 --- a/install/fileflows-install.sh +++ b/install/fileflows-install.sh @@ -6,7 +6,7 @@ # Source: https://fileflows.com/ # Import Functions und Setup -source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" +source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" color verb_ip6 catch_errors @@ -16,7 +16,9 @@ update_os msg_info "Installing Dependencies" $STD apt-get install -y \ - ffmpeg + ffmpeg \ + jq \ + imagemagick msg_ok "Installed Dependencies" read -r -p "Do you need the intel-media-va-driver-non-free driver for HW encoding (Debian 12 only)? " prompt @@ -53,17 +55,17 @@ msg_info "Setup ${APPLICATION}" $STD ln -svf /usr/bin/ffmpeg /usr/local/bin/ffmpeg $STD ln -svf /usr/bin/ffprobe /usr/local/bin/ffprobe temp_file=$(mktemp) -curl -fsSL https://fileflows.com/downloads/zip -o $temp_file -unzip -q -d /opt/fileflows $temp_file +curl -fsSL https://fileflows.com/downloads/zip -o "$temp_file" +unzip -q -d /opt/fileflows "$temp_file" (cd /opt/fileflows/Server && dotnet FileFlows.Server.dll --systemd install --root true) -systemctl enable -q --now fileflows.service +systemctl enable -q --now fileflows msg_ok "Setup ${APPLICATION}" 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" diff --git a/install/firefly-install.sh b/install/firefly-install.sh index d8ab1f6fd..ed9f89a33 100644 --- a/install/firefly-install.sh +++ b/install/firefly-install.sh @@ -14,13 +14,7 @@ network_check update_os msg_info "Installing Dependencies" -$STD apt-get install -y \ - curl \ - mc \ - sudo \ - wget \ - openssh-server -curl -sSLo /usr/share/keyrings/deb.sury.org-php.gpg https://packages.sury.org/php/apt.gpg +curl -fsSLo /usr/share/keyrings/deb.sury.org-php.gpg https://packages.sury.org/php/apt.gpg echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ bookworm main" >/etc/apt/sources.list.d/php.list $STD apt-get update $STD apt-get install -y \ @@ -48,9 +42,9 @@ mysql -u root -e "GRANT ALL ON $DB_NAME.* TO '$DB_USER'@'localhost'; FLUSH PRIVI msg_ok "Set up database" msg_info "Installing Firefly III (Patience)" -RELEASE=$(curl -s https://api.github.com/repos/firefly-iii/firefly-iii/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4)}') +RELEASE=$(curl -fsSL https://api.github.com/repos/firefly-iii/firefly-iii/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4)}') cd /opt -wget -q "https://github.com/firefly-iii/firefly-iii/releases/download/v${RELEASE}/FireflyIII-v${RELEASE}.tar.gz" +curl -fsSL "https://github.com/firefly-iii/firefly-iii/releases/download/v${RELEASE}/FireflyIII-v${RELEASE}.tar.gz" -o $(basename "https://github.com/firefly-iii/firefly-iii/releases/download/v${RELEASE}/FireflyIII-v${RELEASE}.tar.gz") mkdir -p /opt/firefly tar -xzf FireflyIII-v${RELEASE}.tar.gz -C /opt/firefly chown -R www-data:www-data /opt/firefly diff --git a/install/flaresolverr-install.sh b/install/flaresolverr-install.sh index ba3f16a00..8d14a34eb 100644 --- a/install/flaresolverr-install.sh +++ b/install/flaresolverr-install.sh @@ -39,7 +39,8 @@ $STD pip install -r /opt/flaresolverr/requirements.txt msg_ok "Installed FlareSolverr" msg_info "Installing Chrome Webdriver" -wget -q https://github.com/electron/electron/releases/download/v35.1.2/chromedriver-v35.1.2-linux-arm64.zip -O /opt/flaresolverr/webdriver.zip +RELEASE=$(curl -fsSL https://github.com/electron/electron/releases/latest | grep "title>Release" | cut -d " " -f 4) +wget -q https://github.com/electron/electron/releases/download/$RELEASE//chromedriver-$RELEASE/-linux-arm64.zip -O /opt/flaresolverr/webdriver.zip cd /opt/flaresolverr unzip -q webdriver.zip chromedriver sed -i 's|^PATCHED_DRIVER_PATH = None|PATCHED_DRIVER_PATH = "/opt/flaresolverr/chromedriver"|' ./src/utils.py @@ -63,7 +64,7 @@ TimeoutStopSec=30 [Install] WantedBy=multi-user.target EOF -systemctl enable -q --now flaresolverr.service +systemctl enable -q --now flaresolverr msg_ok "Created Service" motd_ssh diff --git a/install/flowiseai-install.sh b/install/flowiseai-install.sh index acae40095..bbdb9f20b 100644 --- a/install/flowiseai-install.sh +++ b/install/flowiseai-install.sh @@ -34,7 +34,7 @@ $STD npm install -g flowise \ @opentelemetry/sdk-trace-node \ langchainhub mkdir -p /opt/flowiseai -wget -q https://raw.githubusercontent.com/FlowiseAI/Flowise/main/packages/server/.env.example -O /opt/flowiseai/.env +curl -fsSL "https://raw.githubusercontent.com/FlowiseAI/Flowise/main/packages/server/.env.example" -o "/opt/flowiseai/.env" msg_ok "Installed FlowiseAI" msg_info "Creating Service" @@ -51,7 +51,7 @@ Restart=always [Install] WantedBy=multi-user.target EOF -systemctl enable -q --now flowise.service +systemctl enable -q --now flowise msg_ok "Created Service" motd_ssh diff --git a/install/fluid-calendar-install.sh b/install/fluid-calendar-install.sh index ed5c83b17..0b1a54643 100644 --- a/install/fluid-calendar-install.sh +++ b/install/fluid-calendar-install.sh @@ -47,8 +47,8 @@ msg_ok "Set up Postgresql Database" msg_info "Setup ${APPLICATION}" tmp_file=$(mktemp) -RELEASE=$(curl -s https://api.github.com/repos/dotnetfactory/fluid-calendar/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') -wget -q "https://github.com/dotnetfactory/fluid-calendar/archive/refs/tags/v${RELEASE}.zip" -O $tmp_file +RELEASE=$(curl -fsSL https://api.github.com/repos/dotnetfactory/fluid-calendar/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') +curl -fsSL "https://github.com/dotnetfactory/fluid-calendar/archive/refs/tags/v${RELEASE}.zip" -o "$tmp_file" unzip -q $tmp_file mv ${APPLICATION}-${RELEASE}/ /opt/${APPLICATION} echo "${RELEASE}" >/opt/${APPLICATION}_version.txt @@ -89,7 +89,7 @@ ExecStart=/usr/bin/npm run start [Install] WantedBy=multi-user.target EOF -systemctl enable -q --now fluid-calendar.service +systemctl enable -q --now fluid-calendar msg_ok "Created Service" motd_ssh diff --git a/install/forgejo-install.sh b/install/forgejo-install.sh index bd493405d..4bb0b9014 100644 --- a/install/forgejo-install.sh +++ b/install/forgejo-install.sh @@ -16,14 +16,12 @@ update_os msg_info "Installing Dependencies" $STD apt-get install -y git $STD apt-get install -y git-lfs -$STD apt-get install -y wget -$STD apt-get install -y openssh-server msg_ok "Installed Dependencies" msg_info "Installing Forgejo" mkdir -p /opt/forgejo -RELEASE=$(curl -s https://codeberg.org/api/v1/repos/forgejo/forgejo/releases/latest | grep -oP '"tag_name":\s*"\K[^"]+' | sed 's/^v//') -wget -qO /opt/forgejo/forgejo-$RELEASE-linux-arm64 "https://codeberg.org/forgejo/forgejo/releases/download/v${RELEASE}/forgejo-${RELEASE}-linux-arm64" +RELEASE=$(curl -fsSL https://codeberg.org/api/v1/repos/forgejo/forgejo/releases/latest | grep -oP '"tag_name":\s*"\K[^"]+' | sed 's/^v//') +curl -fsSL "https://codeberg.org/forgejo/forgejo/releases/download/v${RELEASE}/forgejo-${RELEASE}-linux-arm64" -o "/opt/forgejo/forgejo-$RELEASE-linux-arm64" chmod +x /opt/forgejo/forgejo-$RELEASE-linux-arm64 ln -sf /opt/forgejo/forgejo-$RELEASE-linux-arm64 /usr/local/bin/forgejo msg_ok "Installed Forgejo" diff --git a/install/freshrss-install.sh b/install/freshrss-install.sh index cd287846b..679737d7a 100644 --- a/install/freshrss-install.sh +++ b/install/freshrss-install.sh @@ -36,9 +36,9 @@ $STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME WITH OWNER $DB_USER TEMP msg_ok "Set up PostgreSQL" msg_info "Installing FreshRSS" -RELEASE=$(curl -s https://api.github.com/repos/FreshRSS/FreshRSS/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') +RELEASE=$(curl -fsSL https://api.github.com/repos/FreshRSS/FreshRSS/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') cd /opt -wget -q "https://github.com/FreshRSS/FreshRSS/archive/refs/tags/${RELEASE}.zip" +curl -fsSL "https://github.com/FreshRSS/FreshRSS/archive/refs/tags/${RELEASE}.zip" -o $(basename "https://github.com/FreshRSS/FreshRSS/archive/refs/tags/${RELEASE}.zip") unzip -q "${RELEASE}.zip" mv "/opt/FreshRSS-${RELEASE}" /opt/freshrss cd /opt/freshrss diff --git a/install/frigate-install.sh b/install/frigate-install.sh index b3b4ef1ec..da6a3a9d8 100644 --- a/install/frigate-install.sh +++ b/install/frigate-install.sh @@ -15,7 +15,7 @@ network_check update_os msg_info "Installing Dependencies (Patience)" -$STD apt-get install -y {git,gpg,ca-certificates,automake,build-essential,xz-utils,libtool,ccache,pkg-config,libgtk-3-dev,libavcodec-dev,libavformat-dev,libswscale-dev,libv4l-dev,libxvidcore-dev,libx264-dev,libjpeg-dev,libpng-dev,libtiff-dev,gfortran,openexr,libatlas-base-dev,libssl-dev,libtbb2,libtbb-dev,libdc1394-22-dev,libopenexr-dev,libgstreamer-plugins-base1.0-dev,libgstreamer1.0-dev,gcc,gfortran,libopenblas-dev,liblapack-dev,libusb-1.0-0-dev,jq,moreutils,wget,openssh-server} +$STD apt-get install -y {git,gpg,ca-certificates,automake,build-essential,xz-utils,libtool,ccache,pkg-config,libgtk-3-dev,libavcodec-dev,libavformat-dev,libswscale-dev,libv4l-dev,libxvidcore-dev,libx264-dev,libjpeg-dev,libpng-dev,libtiff-dev,gfortran,openexr,libatlas-base-dev,libssl-dev,libtbb2,libtbb-dev,libdc1394-22-dev,libopenexr-dev,libgstreamer-plugins-base1.0-dev,libgstreamer1.0-dev,gcc,gfortran,libopenblas-dev,liblapack-dev,libusb-1.0-0-dev,jq,moreutils} msg_ok "Installed Dependencies" msg_info "Setup Python3" @@ -35,7 +35,7 @@ msg_ok "Installed Node.js" msg_info "Installing go2rtc" mkdir -p /usr/local/go2rtc/bin cd /usr/local/go2rtc/bin -wget -qO go2rtc "https://github.com/AlexxIT/go2rtc/releases/latest/download/go2rtc_linux_arm64" +curl -fsSL "https://github.com/AlexxIT/go2rtc/releases/latest/download/go2rtc_linux_arm64" -o "go2rtc" chmod +x go2rtc $STD ln -svf /usr/local/go2rtc/bin/go2rtc /usr/local/bin/go2rtc msg_ok "Installed go2rtc" @@ -49,13 +49,13 @@ if [[ "$CTTYPE" == "0" ]]; then fi msg_ok "Set Up Hardware Acceleration" -#RELEASE=$(curl -s https://api.github.com/repos/blakeblackshear/frigate/releases/latest | jq -r '.tag_name') +#RELEASE=$(curl -fsSL https://api.github.com/repos/blakeblackshear/frigate/releases/latest | jq -r '.tag_name') msg_ok "Stop spinner to prevent segmentation fault" msg_info "Installing Frigate v0.14.1 (Perseverance)" if [ -n "$SPINNER_PID" ] && ps -p $SPINNER_PID >/dev/null; then kill $SPINNER_PID >/dev/null; fi cd ~ mkdir -p /opt/frigate/models -wget -q https://github.com/blakeblackshear/frigate/archive/refs/tags/v0.14.1.tar.gz -O frigate.tar.gz +curl -fsSL "https://github.com/blakeblackshear/frigate/archive/refs/tags/v0.14.1.tar.gz" -o "frigate.tar.gz" tar -xzf frigate.tar.gz -C /opt/frigate --strip-components 1 rm -rf frigate.tar.gz cd /opt/frigate @@ -115,7 +115,7 @@ if grep -q -o -m1 -E 'avx[^ ]*' /proc/cpuinfo; then $STD /usr/local/bin/omz_converter --name ssdlite_mobilenet_v2 --precision FP16 --mo /usr/local/bin/mo cd / cp -r /opt/frigate/models/public/ssdlite_mobilenet_v2 openvino-model - wget -q https://github.com/openvinotoolkit/open_model_zoo/raw/master/data/dataset_classes/coco_91cl_bkgr.txt -O openvino-model/coco_91cl_bkgr.txt + curl -fsSL "https://github.com/openvinotoolkit/open_model_zoo/raw/master/data/dataset_classes/coco_91cl_bkgr.txt" -o "openvino-model/coco_91cl_bkgr.txt" sed -i 's/truck/car/g' openvino-model/coco_91cl_bkgr.txt cat <>/config/config.yml detectors: @@ -143,7 +143,7 @@ msg_info "Installing Coral Object Detection Model (Patience)" cd /opt/frigate export CCACHE_DIR=/root/.ccache export CCACHE_MAXSIZE=2G -wget -q https://github.com/libusb/libusb/archive/v1.0.26.zip +curl -fsSL "https://github.com/libusb/libusb/archive/v1.0.26.zip" -o $(basename "https://github.com/libusb/libusb/archive/v1.0.26.zip") unzip -q v1.0.26.zip rm v1.0.26.zip cd libusb-1.0.26 @@ -157,16 +157,16 @@ mkdir -p /usr/local/include/libusb-1.0 $STD /usr/bin/install -c -m 644 libusb.h '/usr/local/include/libusb-1.0' ldconfig cd / -wget -qO edgetpu_model.tflite https://github.com/google-coral/test_data/raw/release-frogfish/ssdlite_mobiledet_coco_qat_postprocess_edgetpu.tflite -wget -qO cpu_model.tflite https://github.com/google-coral/test_data/raw/release-frogfish/ssdlite_mobiledet_coco_qat_postprocess.tflite +curl -fsSL "https://github.com/google-coral/test_data/raw/release-frogfish/ssdlite_mobiledet_coco_qat_postprocess_edgetpu.tflite" -o "edgetpu_model.tflite" +curl -fsSL "https://github.com/google-coral/test_data/raw/release-frogfish/ssdlite_mobiledet_coco_qat_postprocess.tflite" -o "cpu_model.tflite" cp /opt/frigate/labelmap.txt /labelmap.txt -wget -qO yamnet-tflite-classification-tflite-v1.tar.gz https://www.kaggle.com/api/v1/models/google/yamnet/tfLite/classification-tflite/1/download +curl -fsSL "https://www.kaggle.com/api/v1/models/google/yamnet/tfLite/classification-tflite/1/download" -o "yamnet-tflite-classification-tflite-v1.tar.gz" tar xzf yamnet-tflite-classification-tflite-v1.tar.gz rm -rf yamnet-tflite-classification-tflite-v1.tar.gz mv 1.tflite cpu_audio_model.tflite cp /opt/frigate/audio-labelmap.txt /audio-labelmap.txt mkdir -p /media/frigate -wget -qO /media/frigate/person-bicycle-car-detection.mp4 https://github.com/intel-iot-devkit/sample-videos/raw/master/person-bicycle-car-detection.mp4 +curl -fsSL "https://github.com/intel-iot-devkit/sample-videos/raw/master/person-bicycle-car-detection.mp4" -o "/media/frigate/person-bicycle-car-detection.mp4" msg_ok "Installed Coral Object Detection Model" msg_info "Building Nginx with Custom Modules" diff --git a/install/gitea-install.sh b/install/gitea-install.sh index 5c37961e0..7868b02af 100644 --- a/install/gitea-install.sh +++ b/install/gitea-install.sh @@ -17,13 +17,11 @@ update_os msg_info "Installing Dependencies" $STD apt-get install -y git $STD apt-get install -y sqlite3 -$STD apt-get install -y openssh-server -$STD apt-get install -y wget msg_ok "Installed Dependencies" msg_info "Installing Gitea" -RELEASE=$(wget -q https://github.com/go-gitea/gitea/releases/latest -O - | grep "title>Release" | cut -d " " -f 4 | sed 's/^v//') -wget -q https://github.com/go-gitea/gitea/releases/download/v$RELEASE/gitea-$RELEASE-linux-arm64 +RELEASE=$(curl -fsSL https://github.com/go-gitea/gitea/releases/latest | grep "title>Release" | cut -d " " -f 4 | sed 's/^v//') +curl -fsSL "https://github.com/go-gitea/gitea/releases/download/v$RELEASE/gitea-$RELEASE-linux-arm64" -o $(basename "https://github.com/go-gitea/gitea/releases/download/v$RELEASE/gitea-$RELEASE-linux-arm64") mv gitea* /usr/local/bin/gitea chmod +x /usr/local/bin/gitea adduser --system --group --disabled-password --shell /bin/bash --home /etc/gitea gitea >/dev/null diff --git a/install/glance-install.sh b/install/glance-install.sh index 937546d0f..b8f2bc30d 100644 --- a/install/glance-install.sh +++ b/install/glance-install.sh @@ -13,19 +13,10 @@ setting_up_container network_check update_os -msg_info "Installing Dependencies" -$STD apt-get install -y \ - curl \ - sudo \ - mc \ - wget \ - openssh-server -msg_ok "Installed Dependencies" - msg_info "Installing Glance" -RELEASE=$(curl -s https://api.github.com/repos/glanceapp/glance/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') +RELEASE=$(curl -fsSL https://api.github.com/repos/glanceapp/glance/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') cd /opt -wget -q https://github.com/glanceapp/glance/releases/download/v${RELEASE}/glance-linux-arm64.tar.gz +curl -fsSL "https://github.com/glanceapp/glance/releases/download/v${RELEASE}/glance-linux-arm64.tar.gz" -o $(basename "https://github.com/glanceapp/glance/releases/download/v${RELEASE}/glance-linux-arm64.tar.gz") mkdir -p /opt/glance tar -xzf glance-linux-arm64.tar.gz -C /opt/glance cat </opt/glance/glance.yml @@ -69,7 +60,7 @@ Restart=on-failure [Install] WantedBy=multi-user.target" >$service_path -systemctl enable -q --now glance.service +systemctl enable -q --now glance msg_ok "Created Service" motd_ssh diff --git a/install/glpi-install.sh b/install/glpi-install.sh index f3a641ea8..ff6facaa9 100644 --- a/install/glpi-install.sh +++ b/install/glpi-install.sh @@ -48,8 +48,8 @@ msg_ok "Set up database" msg_info "Installing GLPi" cd /opt -RELEASE=$(curl -s https://api.github.com/repos/glpi-project/glpi/releases/latest | grep '"tag_name"' | sed -E 's/.*"tag_name": "([^"]+)".*/\1/') -wget -q "https://github.com/glpi-project/glpi/releases/download/${RELEASE}/glpi-${RELEASE}.tgz" +RELEASE=$(curl -fsSL https://api.github.com/repos/glpi-project/glpi/releases/latest | grep '"tag_name"' | sed -E 's/.*"tag_name": "([^"]+)".*/\1/') +curl -fsSL "https://github.com/glpi-project/glpi/releases/download/${RELEASE}/glpi-${RELEASE}.tgz" -o $(basename "https://github.com/glpi-project/glpi/releases/download/${RELEASE}/glpi-${RELEASE}.tgz") $STD tar -xzvf glpi-${RELEASE}.tgz cd /opt/glpi $STD php bin/console db:install --db-name=$DB_NAME --db-user=$DB_USER --db-password=$DB_PASS --no-interaction diff --git a/install/go2rtc-install.sh b/install/go2rtc-install.sh index 1855e5881..fce928737 100644 --- a/install/go2rtc-install.sh +++ b/install/go2rtc-install.sh @@ -13,18 +13,10 @@ setting_up_container network_check update_os -msg_info "Installing Dependencies" -$STD apt-get install -y curl -$STD apt-get install -y sudo -$STD apt-get install -y mc -$STD apt-get install -y wget -$STD apt-get install -y openssh-server -msg_ok "Installed Dependencies" - msg_info "Installing go2rtc" mkdir -p /opt/go2rtc cd /opt/go2rtc -wget -q https://github.com/AlexxIT/go2rtc/releases/latest/download/go2rtc_linux_arm64 +curl -fsSL "https://github.com/AlexxIT/go2rtc/releases/latest/download/go2rtc_linux_arm64" -o $(basename "https://github.com/AlexxIT/go2rtc/releases/latest/download/go2rtc_linux_arm64") chmod +x go2rtc_linux_arm64 msg_ok "Installed go2rtc" diff --git a/install/gokapi-install.sh b/install/gokapi-install.sh index 7dc797e57..ed3d25bd6 100644 --- a/install/gokapi-install.sh +++ b/install/gokapi-install.sh @@ -13,18 +13,10 @@ setting_up_container network_check update_os -msg_info "Installing Dependencies" -$STD apt-get install -y curl -$STD apt-get install -y sudo -$STD apt-get install -y mc -$STD apt-get install -y wget -$STD apt-get install -y openssh-server -msg_ok "Installed Dependencies" - msg_info "Installing Gokapi" -LATEST=$(curl -sL https://api.github.com/repos/Forceu/Gokapi/releases/latest | grep '"tag_name":' | cut -d'"' -f4) +LATEST=$(curl -fsSL https://api.github.com/repos/Forceu/Gokapi/releases/latest | grep '"tag_name":' | cut -d'"' -f4) mkdir -p /opt/gokapi/{data,config} -wget -q https://github.com/Forceu/Gokapi/releases/download/$LATEST/gokapi-linux_arm64.zip +curl -fsSL "https://github.com/Forceu/Gokapi/releases/download/$LATEST/gokapi-linux_arm64.zip" -o $(basename "https://github.com/Forceu/Gokapi/releases/download/$LATEST/gokapi-linux_arm64.zip") unzip -q gokapi-linux_arm64.zip -d /opt/gokapi rm gokapi-linux_arm64.zip chmod +x /opt/gokapi/gokapi-linux_arm64 diff --git a/install/gomft-install.sh b/install/gomft-install.sh index ebf32b437..d0b72b59e 100644 --- a/install/gomft-install.sh +++ b/install/gomft-install.sh @@ -19,7 +19,8 @@ $STD apt-get install -y \ rclone \ tzdata \ ca-certificates \ - build-essential + build-essential \ + gnupg msg_ok "Installed Dependencies" msg_info "Setting up Golang" @@ -32,15 +33,29 @@ ln -sf /usr/local/go/bin/go /usr/local/bin/go set -o pipefail msg_ok "Setup Golang" +msg_info "Setting up Node.js Repository" +mkdir -p /etc/apt/keyrings +curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg +echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_22.x nodistro main" >/etc/apt/sources.list.d/nodesource.list +msg_ok "Set up Node.js Repository" + +msg_info "Installing Node.js" +$STD apt-get update +$STD apt-get install -y nodejs +msg_ok "Installed Node.js" + msg_info "Setup ${APPLICATION} (Patience)" temp_file=$(mktemp) -RELEASE=$(curl -s https://api.github.com/repos/StarFleetCPTN/GoMFT/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') -wget -q "https://github.com/StarFleetCPTN/GoMFT/archive/refs/tags/v${RELEASE}.tar.gz" -O $temp_file +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 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 diff --git a/install/gotify-install.sh b/install/gotify-install.sh index 639cbeb51..b1ac694d7 100644 --- a/install/gotify-install.sh +++ b/install/gotify-install.sh @@ -13,19 +13,11 @@ setting_up_container network_check update_os -msg_info "Installing Dependencies" -$STD apt-get install -y curl -$STD apt-get install -y sudo -$STD apt-get install -y mc -$STD apt-get install -y wget -$STD apt-get install -y openssh-server -msg_ok "Installed Dependencies" - msg_info "Installing Gotify" -RELEASE=$(curl -s https://api.github.com/repos/gotify/server/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') +RELEASE=$(curl -fsSL https://api.github.com/repos/gotify/server/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') mkdir -p /opt/gotify cd /opt/gotify -wget -q https://github.com/gotify/server/releases/download/v${RELEASE}/gotify-linux-arm64.zip +curl -fsSL "https://github.com/gotify/server/releases/download/v${RELEASE}/gotify-linux-arm64.zip" -o $(basename "https://github.com/gotify/server/releases/download/v${RELEASE}/gotify-linux-arm64.zip") unzip -q gotify-linux-arm64.zip rm -rf gotify-linux-arm64.zip chmod +x gotify-linux-arm64 diff --git a/install/grafana-install.sh b/install/grafana-install.sh index 3556dc4f2..d1b7578c7 100644 --- a/install/grafana-install.sh +++ b/install/grafana-install.sh @@ -22,7 +22,7 @@ $STD apt-get install -y openssh-server msg_ok "Installed Dependencies" msg_info "Setting up Grafana Repository" -wget -q -O /usr/share/keyrings/grafana.key https://apt.grafana.com/gpg.key +curl -fsSL "https://apt.grafana.com/gpg.key" -o "/usr/share/keyrings/grafana.key" sh -c 'echo "deb [signed-by=/usr/share/keyrings/grafana.key] https://apt.grafana.com stable main" > /etc/apt/sources.list.d/grafana.list' msg_ok "Set up Grafana Repository" diff --git a/install/graylog-install.sh b/install/graylog-install.sh index 4f89ad7b6..5316dcc4a 100644 --- a/install/graylog-install.sh +++ b/install/graylog-install.sh @@ -28,7 +28,7 @@ msg_ok "Setup MongoDB" msg_info "Setup Graylog Data Node" PASSWORD_SECRET=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c16) -wget -q https://packages.graylog2.org/repo/packages/graylog-6.1-repository_latest.deb +curl -fsSL "https://packages.graylog2.org/repo/packages/graylog-6.1-repository_latest.deb" -o $(basename "https://packages.graylog2.org/repo/packages/graylog-6.1-repository_latest.deb") $STD dpkg -i graylog-6.1-repository_latest.deb $STD apt-get update $STD apt-get install graylog-datanode -y diff --git a/install/grist-install.sh b/install/grist-install.sh index 02f27c56a..af37894fd 100644 --- a/install/grist-install.sh +++ b/install/grist-install.sh @@ -34,11 +34,11 @@ $STD npm install -g yarn msg_ok "Installed Node.js" msg_info "Installing Grist" -RELEASE=$(curl -s https://api.github.com/repos/gristlabs/grist-core/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') +RELEASE=$(curl -fsSL https://api.github.com/repos/gristlabs/grist-core/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') export CYPRESS_INSTALL_BINARY=0 export NODE_OPTIONS="--max-old-space-size=2048" cd /opt -wget -q https://github.com/gristlabs/grist-core/archive/refs/tags/v${RELEASE}.zip +curl -fsSL "https://github.com/gristlabs/grist-core/archive/refs/tags/v${RELEASE}.zip" -o $(basename "https://github.com/gristlabs/grist-core/archive/refs/tags/v${RELEASE}.zip") unzip -q v$RELEASE.zip mv grist-core-${RELEASE} grist cd grist @@ -68,7 +68,7 @@ EnvironmentFile=-/opt/grist/.env WantedBy=multi-user.target EOF -systemctl enable -q --now grist.service +systemctl enable -q --now grist msg_ok "Created Service" motd_ssh diff --git a/install/grocy-install.sh b/install/grocy-install.sh index ac382723d..04d199b05 100644 --- a/install/grocy-install.sh +++ b/install/grocy-install.sh @@ -21,7 +21,7 @@ msg_ok "Installed Dependencies" msg_info "Installing PHP8.2" VERSION="$(awk -F'=' '/^VERSION_CODENAME=/{ print $NF }' /etc/os-release)" -curl -sSLo /usr/share/keyrings/deb.sury.org-php.gpg https://packages.sury.org/php/apt.gpg +curl -fsSLo /usr/share/keyrings/deb.sury.org-php.gpg https://packages.sury.org/php/apt.gpg echo -e "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $VERSION main" >/etc/apt/sources.list.d/php.list $STD apt-get update $STD apt-get install -y php8.2 @@ -33,8 +33,8 @@ $STD apt-get install -y php8.2-mbstring msg_ok "Installed PHP8.2" msg_info "Installing grocy" -latest=$(curl -s https://api.github.com/repos/grocy/grocy/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') -wget -q https://github.com/grocy/grocy/releases/download/v${latest}/grocy_${latest}.zip +latest=$(curl -fsSL https://api.github.com/repos/grocy/grocy/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') +curl -fsSL "https://github.com/grocy/grocy/releases/download/v${latest}/grocy_${latest}.zip" -o $(basename "https://github.com/grocy/grocy/releases/download/v${latest}/grocy_${latest}.zip") $STD unzip grocy_${latest}.zip -d /var/www/html chown -R www-data:www-data /var/www/html cp /var/www/html/config-dist.php /var/www/html/data/config.php diff --git a/install/habitica-install.sh b/install/habitica-install.sh index 443a33c9b..3b35a99f7 100644 --- a/install/habitica-install.sh +++ b/install/habitica-install.sh @@ -19,7 +19,7 @@ $STD apt-get install -y \ gnupg \ build-essential \ git -wget -q http://archive.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.1_1.1.1f-1ubuntu2_amd64.deb +curl -fsSL "http://archive.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.1_1.1.1f-1ubuntu2_amd64.deb" -o $(basename "http://archive.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.1_1.1.1f-1ubuntu2_amd64.deb") $STD dpkg -i libssl1.1_1.1.1f-1ubuntu2_amd64.deb msg_ok "Installed Dependencies" @@ -36,8 +36,8 @@ msg_ok "Setup Node.js" msg_info "Setup ${APPLICATION}" temp_file=$(mktemp) -RELEASE=$(curl -s https://api.github.com/repos/HabitRPG/habitica/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') -wget -q "https://github.com/HabitRPG/habitica/archive/refs/tags/v${RELEASE}.tar.gz" -O $temp_file +RELEASE=$(curl -fsSL https://api.github.com/repos/HabitRPG/habitica/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') +curl -fsSL "https://github.com/HabitRPG/habitica/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file" tar zxf $temp_file mv habitica-${RELEASE}/ /opt/habitica cd /opt/habitica diff --git a/install/headscale-install.sh b/install/headscale-install.sh index 163512142..67084f0c6 100644 --- a/install/headscale-install.sh +++ b/install/headscale-install.sh @@ -13,17 +13,9 @@ setting_up_container network_check update_os -msg_info "Installing Dependencies" -$STD apt-get install -y curl -$STD apt-get install -y sudo -$STD apt-get install -y mc -$STD apt-get install -y openssh-server -$STD apt-get install -y wget -msg_ok "Installed Dependencies" - -RELEASE=$(curl -s https://api.github.com/repos/juanfont/headscale/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') +RELEASE=$(curl -fsSL https://api.github.com/repos/juanfont/headscale/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') msg_info "Installing ${APPLICATION} v${RELEASE}" -wget -q https://github.com/juanfont/headscale/releases/download/v${RELEASE}/headscale_${RELEASE}_linux_arm64.deb +curl -fsSL "https://github.com/juanfont/headscale/releases/download/v${RELEASE}/headscale_${RELEASE}_linux_arm64.deb" -o $(basename "https://github.com/juanfont/headscale/releases/download/v${RELEASE}/headscale_${RELEASE}_linux_arm64.deb") $STD dpkg -i headscale_${RELEASE}_linux_arm64.deb systemctl enable -q --now headscale echo "${RELEASE}" >/opt/${APPLICATION}_version.txt diff --git a/install/heimdall-dashboard-install.sh b/install/heimdall-dashboard-install.sh index 6267ac3c2..649b35b1b 100644 --- a/install/heimdall-dashboard-install.sh +++ b/install/heimdall-dashboard-install.sh @@ -21,15 +21,15 @@ $STD apt-get install -y php8.2-{bz2,curl,sqlite3,zip,xml} $STD apt-get install -y openssh-server msg_ok "Installed Dependencies" -RELEASE=$(curl -sX GET "https://api.github.com/repos/linuxserver/Heimdall/releases/latest" | awk '/tag_name/{print $4;exit}' FS='[""]') -echo "${RELEASE}" >/opt/${APPLICATION}_version.txt +RELEASE=$(curl -fsSL "https://api.github.com/repos/linuxserver/Heimdall/releases/latest" | awk '/tag_name/{print $4;exit}' FS='[""]') +echo "${RELEASE}" >/opt/"${APPLICATION}"_version.txt msg_info "Installing Heimdall Dashboard ${RELEASE}" -wget -q https://github.com/linuxserver/Heimdall/archive/${RELEASE}.tar.gz -tar xzf ${RELEASE}.tar.gz -VER=$(curl -s 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 +curl -fsSL "https://github.com/linuxserver/Heimdall/archive/${RELEASE}.tar.gz" -o $(basename "https://github.com/linuxserver/Heimdall/archive/${RELEASE}.tar.gz") +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 cp .env.example .env $STD php artisan key:generate msg_ok "Installed Heimdall Dashboard ${RELEASE}" @@ -51,7 +51,7 @@ TimeoutStopSec=30 [Install] WantedBy=multi-user.target" >$service_path -systemctl enable -q --now heimdall.service +systemctl enable -q --now heimdall cd /opt/Heimdall COMPOSER_ALLOW_SUPERUSER=1 composer dump-autoload &>/dev/null systemctl restart heimdall.service diff --git a/install/hev-socks5-server-install.sh b/install/hev-socks5-server-install.sh index 68e24fd21..241f16110 100644 --- a/install/hev-socks5-server-install.sh +++ b/install/hev-socks5-server-install.sh @@ -14,7 +14,7 @@ network_check update_os msg_info "Setup ${APPLICATION}" -RELEASE=$(curl -s https://api.github.com/repos/heiher/${APPLICATION}/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') +RELEASE=$(curl -fsSL https://api.github.com/repos/heiher/${APPLICATION}/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') curl -L -o "${APPLICATION}" "https://github.com/heiher/${APPLICATION}/releases/download/${RELEASE}/hev-socks5-server-linux-x86_64" mv ${APPLICATION} /opt/${APPLICATION} chmod +x /opt/${APPLICATION} @@ -42,7 +42,7 @@ Restart=always [Install] WantedBy=multi-user.target EOF -systemctl enable -q --now ${APPLICATION}.service +systemctl enable -q --now ${APPLICATION} msg_ok "Created Service" motd_ssh diff --git a/install/hivemq-install.sh b/install/hivemq-install.sh index a2ad32d2b..a46214b82 100644 --- a/install/hivemq-install.sh +++ b/install/hivemq-install.sh @@ -15,20 +15,18 @@ update_os msg_info "Installing Dependencies" $STD apt-get install -y gpg -$STD apt-get install -y wget -$STD apt-get install -y openssh-server msg_ok "Installed Dependencies" msg_info "Installing OpenJDK" -wget -qO- https://packages.adoptium.net/artifactory/api/gpg/key/public | gpg --dearmor >/etc/apt/trusted.gpg.d/adoptium.gpg +curl -fsSL "https://packages.adoptium.net/artifactory/api/gpg/key/public" | gpg --dearmor >/etc/apt/trusted.gpg.d/adoptium.gpg echo 'deb [arch=arm64 signed-by=/etc/apt/trusted.gpg.d/adoptium.gpg] https://packages.adoptium.net/artifactory/deb bookworm main' >/etc/apt/sources.list.d/adoptium.list $STD apt-get update $STD apt-get install -y temurin-17-jre msg_ok "Installed OpenJDK" msg_info "Installing HiveMQ CE" -RELEASE=$(curl -s https://api.github.com/repos/hivemq/hivemq-community-edition/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') -wget -q https://github.com/hivemq/hivemq-community-edition/releases/download/${RELEASE}/hivemq-ce-${RELEASE}.zip +RELEASE=$(curl -fsSL https://api.github.com/repos/hivemq/hivemq-community-edition/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') +curl -fsSL "https://github.com/hivemq/hivemq-community-edition/releases/download/${RELEASE}/hivemq-ce-${RELEASE}.zip" -o $(basename "https://github.com/hivemq/hivemq-community-edition/releases/download/${RELEASE}/hivemq-ce-${RELEASE}.zip") unzip -q hivemq-ce-${RELEASE}.zip mkdir -p /opt/hivemq mv hivemq-ce-${RELEASE}/* /opt/hivemq diff --git a/install/homarr-install.sh b/install/homarr-install.sh index ad76bcb68..f1699f849 100644 --- a/install/homarr-install.sh +++ b/install/homarr-install.sh @@ -42,8 +42,8 @@ msg_ok "Installed Node.js/pnpm" msg_info "Installing Homarr (Patience)" cd /opt -RELEASE=$(curl -s https://api.github.com/repos/homarr-labs/homarr/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') -wget -q "https://github.com/homarr-labs/homarr/archive/refs/tags/v${RELEASE}.zip" +RELEASE=$(curl -fsSL https://api.github.com/repos/homarr-labs/homarr/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') +curl -fsSL "https://github.com/homarr-labs/homarr/archive/refs/tags/v${RELEASE}.zip" -o $(basename "https://github.com/homarr-labs/homarr/archive/refs/tags/v${RELEASE}.zip") unzip -q v${RELEASE}.zip mv homarr-${RELEASE} /opt/homarr mkdir -p /opt/homarr_db diff --git a/install/homeassistant-install.sh b/install/homeassistant-install.sh index a27218b9a..f514b1b24 100644 --- a/install/homeassistant-install.sh +++ b/install/homeassistant-install.sh @@ -35,7 +35,7 @@ $STD pip install runlike msg_ok "Installed runlike" get_latest_release() { - curl -sL https://api.github.com/repos/$1/releases/latest | grep '"tag_name":' | cut -d'"' -f4 + curl -fsSL https://api.github.com/repos/$1/releases/latest | grep '"tag_name":' | cut -d'"' -f4 } DOCKER_LATEST_VERSION=$(get_latest_release "moby/moby") @@ -46,7 +46,7 @@ msg_info "Installing Docker $DOCKER_LATEST_VERSION" DOCKER_CONFIG_PATH='/etc/docker/daemon.json' mkdir -p $(dirname $DOCKER_CONFIG_PATH) echo -e '{\n "log-driver": "journald"\n}' >/etc/docker/daemon.json -$STD sh <(curl -sSL https://get.docker.com) +$STD sh <(curl -fsSL https://get.docker.com) msg_ok "Installed Docker $DOCKER_LATEST_VERSION" msg_info "Pulling Portainer $PORTAINER_LATEST_VERSION Image" diff --git a/install/homebox-install.sh b/install/homebox-install.sh index 6c26f015d..d753fc45d 100644 --- a/install/homebox-install.sh +++ b/install/homebox-install.sh @@ -14,18 +14,9 @@ setting_up_container network_check update_os -msg_info "Installing Dependencies" -$STD apt-get install -y \ - curl \ - sudo \ - mc \ - wget \ - openssh-server -msg_ok "Installed Dependencies" - msg_info "Installing Homebox" -RELEASE=$(curl -s https://api.github.com/repos/sysadminsmedia/homebox/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') -wget -qO- https://github.com/sysadminsmedia/homebox/releases/download/${RELEASE}/homebox_Linux_arm64.tar.gz | tar -xzf - -C /opt +RELEASE=$(curl -fsSL https://api.github.com/repos/sysadminsmedia/homebox/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') +curl -fsSL "https://github.com/sysadminsmedia/homebox/releases/download/${RELEASE}/homebox_Linux_arm64.tar.gz" | tar -xzf - -C /opt chmod +x /opt/homebox cat </opt/.env # For possible environment variables check here: https://homebox.software/en/configure-homebox @@ -51,7 +42,7 @@ Restart=on-failure [Install] WantedBy=multi-user.target EOF -systemctl enable -q --now homebox.service +systemctl enable -q --now homebox msg_ok "Created Service" motd_ssh diff --git a/install/homebridge-install.sh b/install/homebridge-install.sh index 55ac02d04..e29f1e2f9 100644 --- a/install/homebridge-install.sh +++ b/install/homebridge-install.sh @@ -21,7 +21,7 @@ $STD apt-get install -y openssh-server msg_ok "Installed Dependencies" msg_info "Setting up Homebridge Repository" -curl -sSf https://repo.homebridge.io/KEY.gpg | gpg --dearmor >/etc/apt/trusted.gpg.d/homebridge.gpg +curl -fsSL https://repo.homebridge.io/KEY.gpg | gpg --dearmor >/etc/apt/trusted.gpg.d/homebridge.gpg echo 'deb [signed-by=/etc/apt/trusted.gpg.d/homebridge.gpg] https://repo.homebridge.io stable main' >/etc/apt/sources.list.d/homebridge.list msg_ok "Set up Homebridge Repository" diff --git a/install/homepage-install.sh b/install/homepage-install.sh index d694f2744..07e1b833d 100644 --- a/install/homepage-install.sh +++ b/install/homepage-install.sh @@ -36,9 +36,9 @@ $STD npm install -g pnpm msg_ok "Installed Node.js" LOCAL_IP=$(hostname -I | awk '{print $1}') -RELEASE=$(curl -s https://api.github.com/repos/gethomepage/homepage/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') +RELEASE=$(curl -fsSL https://api.github.com/repos/gethomepage/homepage/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') msg_info "Installing Homepage v${RELEASE} (Patience)" -wget -q https://github.com/gethomepage/homepage/archive/refs/tags/v${RELEASE}.tar.gz +curl -fsSL "https://github.com/gethomepage/homepage/archive/refs/tags/v${RELEASE}.tar.gz" -o $(basename "https://github.com/gethomepage/homepage/archive/refs/tags/v${RELEASE}.tar.gz") $STD tar -xzf v${RELEASE}.tar.gz rm -rf v${RELEASE}.tar.gz mkdir -p /opt/homepage/config diff --git a/install/homer-install.sh b/install/homer-install.sh index 60f4bc807..1451c1a64 100644 --- a/install/homer-install.sh +++ b/install/homer-install.sh @@ -22,7 +22,7 @@ msg_ok "Installed Dependencies" msg_info "Installing Homer" mkdir -p /opt/homer cd /opt/homer -wget -q https://github.com/bastienwirtz/homer/releases/latest/download/homer.zip +curl -fsSL "https://github.com/bastienwirtz/homer/releases/latest/download/homer.zip" -o $(basename "https://github.com/bastienwirtz/homer/releases/latest/download/homer.zip") $STD unzip homer.zip rm -rf homer.zip cp assets/config.yml.dist assets/config.yml diff --git a/install/hyperion-install.sh b/install/hyperion-install.sh index 85f01146a..f8f406374 100644 --- a/install/hyperion-install.sh +++ b/install/hyperion-install.sh @@ -23,11 +23,11 @@ $STD apt-get install -y openssh-server msg_ok "Installed Dependencies" msg_info "Installing Hyperion" -wget -qO- https://releases.hyperion-project.org/hyperion.pub.key | gpg --dearmor -o /usr/share/keyrings/hyperion.pub.gpg +curl -fsSL "https://releases.hyperion-project.org/hyperion.pub.key" | gpg --dearmor -o /usr/share/keyrings/hyperion.pub.gpg echo "deb [signed-by=/usr/share/keyrings/hyperion.pub.gpg] https://apt.releases.hyperion-project.org/ $(lsb_release -cs) main" >/etc/apt/sources.list.d/hyperion.list $STD apt-get update $STD apt-get install -y hyperion -$STD systemctl enable --now hyperion@root.service +$STD systemctl enable --now hyperion@root msg_ok "Installed Hyperion" motd_ssh diff --git a/install/influxdb-install.sh b/install/influxdb-install.sh index 2955013f8..947a252f0 100644 --- a/install/influxdb-install.sh +++ b/install/influxdb-install.sh @@ -17,12 +17,10 @@ msg_info "Installing Dependencies" $STD apt-get install -y lsb-base $STD apt-get install -y lsb-release $STD apt-get install -y gnupg2 -$STD apt-get install -y wget -$STD apt-get install -y openssh-server msg_ok "Installed Dependencies" msg_info "Setting up InfluxDB Repository" -wget -qO- https://repos.influxdata.com/influxdata-archive_compat.key | gpg --dearmor >/etc/apt/trusted.gpg.d/influxdata-archive_compat.gpg +curl -fsSL "https://repos.influxdata.com/influxdata-archive_compat.key" | gpg --dearmor >/etc/apt/trusted.gpg.d/influxdata-archive_compat.gpg echo "deb [signed-by=/etc/apt/trusted.gpg.d/influxdata-archive_compat.gpg] https://repos.influxdata.com/debian stable main" >/etc/apt/sources.list.d/influxdata.list msg_ok "Set up InfluxDB Repository" @@ -39,7 +37,7 @@ if [[ $INFLUX == "2" ]]; then $STD apt-get install -y influxdb2 else $STD apt-get install -y influxdb - wget -q https://dl.influxdata.com/chronograf/releases/chronograf_1.10.1_arm64.deb + curl -fsSL "https://dl.influxdata.com/chronograf/releases/chronograf_1.10.1_arm64.deb" -o $(basename "https://dl.influxdata.com/chronograf/releases/chronograf_1.10.1_arm64.deb") $STD dpkg -i chronograf_1.10.1_arm64.deb fi $STD systemctl enable --now influxdb diff --git a/install/inspircd-install.sh b/install/inspircd-install.sh index 4f8977da7..cdc4b0bb7 100644 --- a/install/inspircd-install.sh +++ b/install/inspircd-install.sh @@ -23,9 +23,9 @@ $STD apt-get install -y \ msg_ok "Installed Dependencies" msg_info "Installing InspIRCd" -RELEASE=$(curl -s https://api.github.com/repos/inspircd/inspircd/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') +RELEASE=$(curl -fsSL https://api.github.com/repos/inspircd/inspircd/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') cd /opt -wget -q https://github.com/inspircd/inspircd/releases/download/v${RELEASE}/inspircd_${RELEASE}.deb12u1_amd64.deb +curl -fsSL "https://github.com/inspircd/inspircd/releases/download/v${RELEASE}/inspircd_${RELEASE}.deb12u1_amd64.deb" -o $(basename "https://github.com/inspircd/inspircd/releases/download/v${RELEASE}/inspircd_${RELEASE}.deb12u1_amd64.deb") $STD apt-get install "./inspircd_${RELEASE}.deb12u1_amd64.deb" -y &>/dev/null cat </etc/inspircd/inspircd.conf diff --git a/install/inventree-install.sh b/install/inventree-install.sh index a51c1555e..261c4ebf1 100644 --- a/install/inventree-install.sh +++ b/install/inventree-install.sh @@ -16,7 +16,7 @@ update_os msg_info "Installing Dependencies" $STD apt-get install -y gnupg temp_file=$(mktemp) -wget -q http://archive.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.1_1.1.1f-1ubuntu2_amd64.deb -O $temp_file +curl -fsSL "http://archive.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.1_1.1.1f-1ubuntu2_amd64.deb" -o "$temp_file" $STD dpkg -i $temp_file msg_ok "Installed Dependencies" diff --git a/install/iventoy-install.sh b/install/iventoy-install.sh index bdb63c016..ebc30b2b9 100644 --- a/install/iventoy-install.sh +++ b/install/iventoy-install.sh @@ -13,18 +13,10 @@ setting_up_container network_check update_os -msg_info "Installing Dependencies" -$STD apt-get install -y curl -$STD apt-get install -y sudo -$STD apt-get install -y mc -$STD apt-get install -y wget -$STD apt-get install -y openssh-server -msg_ok "Installed Dependencies" - -RELEASE=$(curl -s https://api.github.com/repos/ventoy/pxe/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') +RELEASE=$(curl -fsSL https://api.github.com/repos/ventoy/pxe/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') msg_info "Installing iVentoy v${RELEASE}" mkdir -p /opt/iventoy/{data,iso} -wget -q https://github.com/ventoy/PXE/releases/download/v${RELEASE}/iventoy-${RELEASE}-linux-free.tar.gz +curl -fsSL "https://github.com/ventoy/PXE/releases/download/v${RELEASE}/iventoy-${RELEASE}-linux-free.tar.gz" -o $(basename "https://github.com/ventoy/PXE/releases/download/v${RELEASE}/iventoy-${RELEASE}-linux-free.tar.gz") tar -C /tmp -xzf iventoy*.tar.gz mv /tmp/iventoy*/* /opt/iventoy/ rm -rf iventoy*.tar.gz @@ -48,7 +40,7 @@ Restart=on-failure [Install] WantedBy=multi-user.target EOF -systemctl enable -q --now iventoy.service +systemctl enable -q --now iventoy msg_ok "Created Service" motd_ssh diff --git a/install/jackett-install.sh b/install/jackett-install.sh index 826e34a6d..cb94a37ae 100644 --- a/install/jackett-install.sh +++ b/install/jackett-install.sh @@ -13,17 +13,9 @@ setting_up_container network_check update_os -msg_info "Installing Dependencies" -$STD apt-get install -y curl -$STD apt-get install -y sudo -$STD apt-get install -y mc -$STD apt-get install -y wget -$STD apt-get install -y openssh-server -msg_ok "Installed Dependencies" - msg_info "Installing Jackett" -RELEASE=$(wget -q https://github.com/Jackett/Jackett/releases/latest -O - | grep "title>Release" | cut -d " " -f 4) -wget -q https://github.com/Jackett/Jackett/releases/download/$RELEASE/Jackett.Binaries.LinuxARM64.tar.gz +RELEASE=$(curl -fsSL https://github.com/Jackett/Jackett/releases/latest | grep "title>Release" | cut -d " " -f 4) +curl -fsSL "https://github.com/Jackett/Jackett/releases/download/$RELEASE/Jackett.Binaries.LinuxARM64.tar.gz" -o $(basename "https://github.com/Jackett/Jackett/releases/download/$RELEASE/Jackett.Binaries.LinuxARM64.tar.gz") tar -xzf Jackett.Binaries.LinuxARM64.tar.gz -C /opt rm -rf Jackett.Binaries.LinuxARM64.tar.gz echo "${RELEASE}" >/opt/${APPLICATION}_version.txt @@ -46,7 +38,7 @@ Environment="DisableRootWarning=true" [Install] WantedBy=multi-user.target EOF -systemctl enable -q --now jackett.service +systemctl enable -q --now jackett msg_ok "Created Service" motd_ssh diff --git a/install/jellyseerr-install.sh b/install/jellyseerr-install.sh index 3df7c56e0..45987fc46 100644 --- a/install/jellyseerr-install.sh +++ b/install/jellyseerr-install.sh @@ -73,7 +73,7 @@ ExecStart=/usr/bin/node dist/index.js [Install] WantedBy=multi-user.target EOF -systemctl enable -q --now jellyseerr.service +systemctl enable -q --now jellyseerr msg_ok "Created Service" motd_ssh diff --git a/install/jenkins-install.sh b/install/jenkins-install.sh index db0254bca..cb8b25e91 100644 --- a/install/jenkins-install.sh +++ b/install/jenkins-install.sh @@ -23,7 +23,7 @@ $STD apt-get install -y \ msg_ok "Installed Dependencies" msg_info "Setup Jenkins" -wget -qO /usr/share/keyrings/jenkins-keyring.asc https://pkg.jenkins.io/debian/jenkins.io-2023.key +curl -fsSL "https://pkg.jenkins.io/debian/jenkins.io-2023.key" -o "/usr/share/keyrings/jenkins-keyring.asc" echo "deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc]" https://pkg.jenkins.io/debian binary/ >/etc/apt/sources.list.d/jenkins.list $STD apt-get update $STD apt-get install -y jenkins diff --git a/install/hoarder-install.sh b/install/karakeep-install.sh similarity index 61% rename from install/hoarder-install.sh rename to install/karakeep-install.sh index cf88ff474..499736281 100644 --- a/install/hoarder-install.sh +++ b/install/karakeep-install.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -# Copyright (c) 2021-2025 tteck +# Copyright (c) 2021-2025 community-scripts ORG # Author: MickLesk (Canbiz) & vhsdream # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://hoarder.app/ +# Source: https://karakeep.app/ source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" color @@ -23,24 +23,21 @@ $STD apt-get install -y \ chromium/stable \ chromium-common/stable \ graphicsmagick \ - ghostscript \ - mc \ - wget \ - openssh-server + ghostscript msg_ok "Installed Dependencies" msg_info "Installing Additional Tools" -wget -q https://github.com/Y2Z/monolith/releases/latest/download/monolith-gnu-linux-x86_64 -O /usr/bin/monolith +curl -fsSL "https://github.com/Y2Z/monolith/releases/latest/download/monolith-gnu-linux-x86_64" -o "/usr/bin/monolith" chmod +x /usr/bin/monolith -wget -q https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp_linux -O /usr/bin/yt-dlp +curl -fsSL "https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp_linux" -o "/usr/bin/yt-dlp" chmod +x /usr/bin/yt-dlp msg_ok "Installed Additional Tools" msg_info "Installing Meilisearch" -cd /tmp -wget -q https://github.com/meilisearch/meilisearch/releases/latest/download/meilisearch-aarch64.deb -$STD dpkg -i meilisearch-aarch64.deb -wget -q https://raw.githubusercontent.com/meilisearch/meilisearch/latest/config.toml -O /etc/meilisearch.toml +cd /tmp || exit +curl -fsSL "https://github.com/meilisearch/meilisearch/releases/latest/download/meilisearch-aarch64.deb" -o "meilisearch.deb" +$STD dpkg -i meilisearch.deb +curl -fsSL "https://raw.githubusercontent.com/meilisearch/meilisearch/latest/config.toml" -o "/etc/meilisearch.toml" MASTER_KEY=$(openssl rand -base64 12) sed -i \ -e 's|^env =.*|env = "production"|' \ @@ -61,30 +58,30 @@ $STD apt-get install -y nodejs $STD npm install -g corepack@0.31.0 msg_ok "Installed Node.js" -msg_info "Installing Hoarder" -cd /opt -RELEASE=$(curl -s https://api.github.com/repos/hoarder-app/hoarder/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') -wget -q "https://github.com/hoarder-app/hoarder/archive/refs/tags/v${RELEASE}.zip" -unzip -q v${RELEASE}.zip -mv hoarder-${RELEASE} /opt/hoarder -cd /opt/hoarder +msg_info "Installing karakeep" +cd /opt || exit +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 corepack enable export PUPPETEER_SKIP_DOWNLOAD="true" export NEXT_TELEMETRY_DISABLED=1 export CI="true" -cd /opt/hoarder/apps/web +cd /opt/karakeep/apps/web || exit $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 +cp -r /opt/karakeep/apps/web/.next/standalone/apps/web/server.js /opt/karakeep/apps/web +cd /opt/karakeep/apps/workers || exit $STD pnpm install --frozen-lockfile -export DATA_DIR=/opt/hoarder_data -HOARDER_SECRET=$(openssl rand -base64 36 | cut -c1-24) -mkdir -p /etc/hoarder -cat </etc/hoarder/hoarder.env +export DATA_DIR=/opt/karakeep_data +karakeep_SECRET=$(openssl rand -base64 36 | cut -c1-24) +mkdir -p /etc/karakeep +cat </etc/karakeep/karakeep.env SERVER_VERSION=$RELEASE -NEXTAUTH_SECRET="$HOARDER_SECRET" +NEXTAUTH_SECRET="$karakeep_SECRET" NEXTAUTH_URL="http://localhost:3000" DATA_DIR="$DATA_DIR" MEILI_ADDR="http://127.0.0.1:7700" @@ -102,11 +99,11 @@ BROWSER_WEB_URL="http://127.0.0.1:9222" # INFERENCE_IMAGE_MODEL="gpt-4o-mini" EOF echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt" -msg_ok "Installed Hoarder" +msg_ok "Installed karakeep" msg_info "Running Database Migration" mkdir -p ${DATA_DIR} -cd /opt/hoarder/packages/db +cd /opt/karakeep/packages/db || exit $STD pnpm migrate msg_ok "Database Migration Completed" @@ -124,25 +121,25 @@ Restart=always WantedBy=multi-user.target EOF -cat </etc/systemd/system/hoarder-web.service +cat </etc/systemd/system/karakeep-web.service [Unit] -Description=Hoarder Web -Wants=network.target hoarder-workers.service -After=network.target hoarder-workers.service +Description=karakeep Web +Wants=network.target karakeep-workers.service +After=network.target karakeep-workers.service [Service] ExecStart=pnpm start -WorkingDirectory=/opt/hoarder/apps/web -EnvironmentFile=/etc/hoarder/hoarder.env +WorkingDirectory=/opt/karakeep/apps/web +EnvironmentFile=/etc/karakeep/karakeep.env Restart=always [Install] WantedBy=multi-user.target EOF -cat </etc/systemd/system/hoarder-browser.service +cat </etc/systemd/system/karakeep-browser.service [Unit] -Description=Hoarder Headless Browser +Description=karakeep Headless Browser After=network.target [Service] @@ -154,16 +151,16 @@ Restart=always WantedBy=multi-user.target EOF -cat </etc/systemd/system/hoarder-workers.service +cat </etc/systemd/system/karakeep-workers.service [Unit] -Description=Hoarder Workers -Wants=network.target hoarder-browser.service meilisearch.service -After=network.target hoarder-browser.service meilisearch.service +Description=karakeep Workers +Wants=network.target karakeep-browser.service meilisearch.service +After=network.target karakeep-browser.service meilisearch.service [Service] ExecStart=pnpm start:prod -WorkingDirectory=/opt/hoarder/apps/workers -EnvironmentFile=/etc/hoarder/hoarder.env +WorkingDirectory=/opt/karakeep/apps/workers +EnvironmentFile=/etc/karakeep/karakeep.env Restart=always TimeoutStopSec=5 @@ -171,7 +168,7 @@ TimeoutStopSec=5 WantedBy=multi-user.target EOF -systemctl -q enable --now meilisearch.service hoarder-browser.service hoarder-workers.service hoarder-web.service +systemctl enable -q --now meilisearch karakeep-browser karakeep-workers karakeep-web msg_ok "Created Services" motd_ssh @@ -179,7 +176,7 @@ customize msg_info "Cleaning up" rm -rf /tmp/meilisearch-aarch64.deb -rm -f /opt/v${RELEASE}.zip +rm -f /opt/v"${RELEASE}".zip $STD apt-get autoremove -y $STD apt-get autoclean -y msg_ok "Cleaned" diff --git a/install/kavita-install.sh b/install/kavita-install.sh index 16e5df1d7..4581fd588 100644 --- a/install/kavita-install.sh +++ b/install/kavita-install.sh @@ -13,16 +13,9 @@ setting_up_container network_check update_os -msg_info "Installing Dependencies" -$STD apt-get install -y curl -$STD apt-get install -y sudo -$STD apt-get install -y mc -$STD apt-get install -y openssh-server -msg_ok "Installed Dependencies" - msg_info "Installing Kavita" cd /opt -RELEASE=$(curl -s https://api.github.com/repos/Kareadita/Kavita/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') +RELEASE=$(curl -fsSL https://api.github.com/repos/Kareadita/Kavita/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') $STD tar -xvzf <(curl -fsSL https://github.com/Kareadita/Kavita/releases/download/$RELEASE/kavita-linux-arm64.tar.gz) --no-same-owner msg_ok "Installed Kavita" diff --git a/install/keycloak-install.sh b/install/keycloak-install.sh index 39d070c7f..a5c9132df 100644 --- a/install/keycloak-install.sh +++ b/install/keycloak-install.sh @@ -24,7 +24,7 @@ openssh-server msg_ok "Installed Dependencies" msg_info "Installing OpenJDK" -wget -qO- https://packages.adoptium.net/artifactory/api/gpg/key/public | gpg --dearmor >/etc/apt/trusted.gpg.d/adoptium.gpg +curl -fsSL "https://packages.adoptium.net/artifactory/api/gpg/key/public" | gpg --dearmor >/etc/apt/trusted.gpg.d/adoptium.gpg echo 'deb [arch=amd64 signed-by=/etc/apt/trusted.gpg.d/adoptium.gpg] https://packages.adoptium.net/artifactory/deb bookworm main' >/etc/apt/sources.list.d/adoptium.list $STD apt-get update $STD apt-get install -y temurin-21-jre @@ -32,8 +32,8 @@ msg_ok "Installed OpenJDK" msg_info "Installing Keycloak" temp_file=$(mktemp) -RELEASE=$(curl -s https://api.github.com/repos/keycloak/keycloak/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') -wget -q https://github.com/keycloak/keycloak/releases/download/$RELEASE/keycloak-$RELEASE.tar.gz -O $temp_file +RELEASE=$(curl -fsSL https://api.github.com/repos/keycloak/keycloak/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') +curl -fsSL "https://github.com/keycloak/keycloak/releases/download/$RELEASE/keycloak-$RELEASE.tar.gz" -o "$temp_file" tar xzf $temp_file mv keycloak-$RELEASE /opt/keycloak msg_ok "Installed Keycloak" diff --git a/install/kimai-install.sh b/install/kimai-install.sh index 6044b355b..51c3a740b 100644 --- a/install/kimai-install.sh +++ b/install/kimai-install.sh @@ -26,21 +26,20 @@ $STD apt-get install -y \ openssh-server msg_ok "Installed Dependencies" -msg_info "Setup PHP8.4 Repository" +msg_info "Adding PHP8.4 Repository" $STD curl -sSLo /tmp/debsuryorg-archive-keyring.deb https://packages.sury.org/debsuryorg-archive-keyring.deb $STD dpkg -i /tmp/debsuryorg-archive-keyring.deb $STD sh -c 'echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list' $STD apt-get update -msg_ok "Setup PHP8.4 Repository" +msg_ok "Added PHP8.4 Repository" -msg_info "Setup PHP" +msg_info "Installing PHP" $STD apt-get remove -y php8.2* -#$STD apt-get remove -y php8.3* $STD apt-get install -y \ - php8.3 \ - php8.3-{mbstring,gd,intl,common,mysql,zip,xml} \ - libapache2-mod-php8.3 -msg_info "Setup PHP" + php8.4 \ + php8.4-{gd,mysql,mbstring,bcmath,xml,curl,zip,intl} \ + libapache2-mod-php8.4 +msg_ok "Installed PHP" msg_info "Setting up database" DB_NAME=kimai_db @@ -59,11 +58,11 @@ mysql -u root -e "GRANT ALL ON $DB_NAME.* TO '$DB_USER'@'localhost'; FLUSH PRIVI msg_ok "Set up database" msg_info "Installing Kimai (Patience)" -RELEASE=$(curl -s https://api.github.com/repos/kimai/kimai/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') -wget -q "https://github.com/kimai/kimai/archive/refs/tags/${RELEASE}.zip" -unzip -q ${RELEASE}.zip -mv kimai-${RELEASE} /opt/kimai -cd /opt/kimai +RELEASE=$(curl -fsSL https://api.github.com/repos/kimai/kimai/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') +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 echo "export COMPOSER_ALLOW_SUPERUSER=1" >>~/.bashrc source ~/.bashrc $STD composer install --no-dev --optimize-autoloader --no-interaction @@ -132,7 +131,7 @@ motd_ssh customize msg_info "Cleaning up" -rm -rf ${RELEASE}.zip +rm -rf "${RELEASE}".zip $STD apt-get -y autoremove $STD apt-get -y autoclean msg_ok "Cleaned" diff --git a/install/koillection-install.sh b/install/koillection-install.sh index 8a844b50a..6ca2f0cc2 100644 --- a/install/koillection-install.sh +++ b/install/koillection-install.sh @@ -21,7 +21,7 @@ $STD apt-get install -y \ msg_ok "Installed Dependencies" msg_info "Setup PHP8.4 Repository" -$STD curl -sSLo /tmp/debsuryorg-archive-keyring.deb https://packages.sury.org/debsuryorg-archive-keyring.deb +$STD curl -fsSLo /tmp/debsuryorg-archive-keyring.deb https://packages.sury.org/debsuryorg-archive-keyring.deb $STD dpkg -i /tmp/debsuryorg-archive-keyring.deb $STD sh -c 'echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list' $STD apt-get update @@ -60,9 +60,9 @@ $STD npm install -g yarn msg_ok "Installed Node.js/Yarn" msg_info "Installing Koillection" -RELEASE=$(curl -s https://api.github.com/repos/benjaminjonard/koillection/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') +RELEASE=$(curl -fsSL https://api.github.com/repos/benjaminjonard/koillection/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') cd /opt -wget -q "https://github.com/benjaminjonard/koillection/archive/refs/tags/${RELEASE}.zip" +curl -fsSL "https://github.com/benjaminjonard/koillection/archive/refs/tags/${RELEASE}.zip" -o $(basename "https://github.com/benjaminjonard/koillection/archive/refs/tags/${RELEASE}.zip") unzip -q "${RELEASE}.zip" mv "/opt/koillection-${RELEASE}" /opt/koillection cd /opt/koillection diff --git a/install/kometa-install.sh b/install/kometa-install.sh index 540629f81..5a3378792 100644 --- a/install/kometa-install.sh +++ b/install/kometa-install.sh @@ -20,8 +20,8 @@ msg_ok "Setup Python 3" msg_info "Setup Kometa" temp_file=$(mktemp) -RELEASE=$(curl -s https://api.github.com/repos/Kometa-Team/Kometa/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') -wget -q "https://github.com/Kometa-Team/Kometa/archive/refs/tags/v${RELEASE}.tar.gz" -O "$temp_file" +RELEASE=$(curl -fsSL https://api.github.com/repos/Kometa-Team/Kometa/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') +curl -fsSL "https://github.com/Kometa-Team/Kometa/archive/refs/tags/v${RELEASE}.tar.gz" -o ""$temp_file"" tar -xzf "$temp_file" mv Kometa-${RELEASE} /opt/kometa cd /opt/kometa diff --git a/install/komga-install.sh b/install/komga-install.sh index 7b5ff6536..5b85e16b0 100644 --- a/install/komga-install.sh +++ b/install/komga-install.sh @@ -24,8 +24,8 @@ $STD apt-get install -y \ msg_ok "Installed Dependencies" msg_info "Installing Komga" -RELEASE=$(curl -s https://api.github.com/repos/gotson/komga/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') -wget -q https://github.com/gotson/komga/releases/download/${RELEASE}/komga-${RELEASE}.jar +RELEASE=$(curl -fsSL https://api.github.com/repos/gotson/komga/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') +curl -fsSL "https://github.com/gotson/komga/releases/download/${RELEASE}/komga-${RELEASE}.jar" -o $(basename "https://github.com/gotson/komga/releases/download/${RELEASE}/komga-${RELEASE}.jar") mkdir -p /opt/komga mv -f komga-${RELEASE}.jar /opt/komga/komga.jar echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt" diff --git a/install/komodo-install.sh b/install/komodo-install.sh index 8d7c6f928..b3d6336d0 100644 --- a/install/komodo-install.sh +++ b/install/komodo-install.sh @@ -67,18 +67,18 @@ case $DB_CHOICE in esac mkdir -p /opt/komodo cd /opt/komodo -wget -q "https://raw.githubusercontent.com/mbecker20/komodo/main/compose/$DB_COMPOSE_FILE" +curl -fsSL "https://raw.githubusercontent.com/mbecker20/komodo/main/compose/$DB_COMPOSE_FILE" -o $(basename "https://raw.githubusercontent.com/mbecker20/komodo/main/compose/$DB_COMPOSE_FILE") msg_info "Setup Komodo Environment" -wget -q -O /opt/komodo/compose.env https://raw.githubusercontent.com/mbecker20/komodo/main/compose/compose.env +curl -fsSL "https://raw.githubusercontent.com/mbecker20/komodo/main/compose/compose.env" -o "/opt/komodo/compose.env" DB_PASSWORD=$(openssl rand -base64 16 | tr -d '/+=') PASSKEY=$(openssl rand -base64 24 | tr -d '/+=') WEBHOOK_SECRET=$(openssl rand -base64 24 | tr -d '/+=') JWT_SECRET=$(openssl rand -base64 24 | tr -d '/+=') -sed -i "s/^DB_USERNAME=.*/DB_USERNAME=komodo_admin/" /opt/komodo/compose.env -sed -i "s/^DB_PASSWORD=.*/DB_PASSWORD=${DB_PASSWORD}/" /opt/komodo/compose.env -sed -i "s/^PASSKEY=.*/PASSKEY=${PASSKEY}/" /opt/komodo/compose.env +sed -i "s/^KOMODO_DB_USERNAME=.*/KOMODO_DB_USERNAME=komodo_admin/" /opt/komodo/compose.env +sed -i "s/^KOMODO_DB_PASSWORD=.*/KOMODO_DB_PASSWORD=${DB_PASSWORD}/" /opt/komodo/compose.env +sed -i "s/^KOMODO_PASSKEY=.*/KOMODO_PASSKEY=${PASSKEY}/" /opt/komodo/compose.env sed -i "s/^KOMODO_WEBHOOK_SECRET=.*/KOMODO_WEBHOOK_SECRET=${WEBHOOK_SECRET}/" /opt/komodo/compose.env sed -i "s/^KOMODO_JWT_SECRET=.*/KOMODO_JWT_SECRET=${JWT_SECRET}/" /opt/komodo/compose.env msg_ok "Setup Komodo Environment" diff --git a/install/kubo-install.sh b/install/kubo-install.sh index 638045cc7..db795cb77 100644 --- a/install/kubo-install.sh +++ b/install/kubo-install.sh @@ -21,8 +21,8 @@ $STD apt-get install -y openssh-server msg_ok "Installed Dependencies" msg_info "Installing IPFS" -RELEASE=$(wget -q https://github.com/ipfs/kubo/releases/latest -O - | grep "title>Release" | cut -d " " -f 4) -$STD wget -q "https://github.com/ipfs/kubo/releases/download/${RELEASE}/kubo_${RELEASE}_linux-arm64.tar.gz" +RELEASE=$(curl -fsSL https://github.com/ipfs/kubo/releases/latest | grep "title>Release" | cut -d " " -f 4) +$STD curl -fsSL "https://github.com/ipfs/kubo/releases/download/${RELEASE}/kubo_${RELEASE}_linux-arm64.tar.gz" -o "kubo_${RELEASE}_linux-arm64.tar.gz" tar -xzf "kubo_${RELEASE}_linux-arm64.tar.gz" -C /usr/local $STD ln -s /usr/local/kubo/ipfs /usr/local/bin/ipfs $STD ipfs init diff --git a/install/lidarr-install.sh b/install/lidarr-install.sh index 231667c1e..ad950b201 100644 --- a/install/lidarr-install.sh +++ b/install/lidarr-install.sh @@ -14,18 +14,19 @@ network_check update_os msg_info "Installing Dependencies" -$STD apt-get install -y sqlite3 -$STD apt-get install -y libchromaprint-tools -$STD apt-get install -y mediainfo -$STD apt-get install -y wget -$STD apt-get install -y openssh-server +$STD apt-get install -y \ + sqlite3 \ + libchromaprint-tools \ + mediainfo msg_ok "Installed Dependencies" msg_info "Installing Lidarr" +temp_file="$(mktemp)" mkdir -p /var/lib/lidarr/ chmod 775 /var/lib/lidarr/ -$STD wget --content-disposition 'https://lidarr.servarr.com/v1/update/master/updatefile?os=linux&runtime=netcore&arch=arm64' -$STD tar -xvzf Lidarr.master.*.tar.gz +RELEASE=$(curl -fsSL https://api.github.com/repos/Lidarr/Lidarr/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') +curl -fsSL "https://github.com/Lidarr/Lidarr/releases/download/v${RELEASE}/Lidarr.master.${RELEASE}.linux-core-arm64.tar.gz" -o "$temp_file" +$STD tar -xvzf "$temp_file" mv Lidarr /opt chmod 775 /opt/Lidarr msg_ok "Installed Lidarr" @@ -45,15 +46,14 @@ Restart=on-failure [Install] WantedBy=multi-user.target EOF -systemctl -q daemon-reload -systemctl enable --now -q lidarr +systemctl enable -q --now lidarr msg_ok "Created Service" motd_ssh customize msg_info "Cleaning up" -rm -rf Lidarr.master.*.tar.gz +rm -rf "$temp_file" $STD apt-get -y autoremove $STD apt-get -y autoclean msg_ok "Cleaned" diff --git a/install/linkwarden-install.sh b/install/linkwarden-install.sh index 6a128741b..b6f37697b 100644 --- a/install/linkwarden-install.sh +++ b/install/linkwarden-install.sh @@ -39,11 +39,11 @@ $STD npm install -g yarn msg_ok "Installed Node.js/Yarn" msg_info "Installing Rust" -wget -qL https://sh.rustup.rs -$STD bash index.html -y --profile minimal -echo 'export PATH=~/.cargo/bin:$PATH' >>~/.bashrc -export PATH=~/.cargo/bin:$PATH -rm index.html +curl -fsSL https://sh.rustup.rs -o rustup-init.sh +$STD bash rustup-init.sh -y --profile minimal +echo 'export PATH="$HOME/.cargo/bin:$PATH"' >> ~/.bashrc +export PATH="$HOME/.cargo/bin:$PATH" +rm rustup-init.sh $STD cargo install monolith msg_ok "Installed Rust" @@ -93,8 +93,8 @@ fi msg_info "Installing Linkwarden (Patience)" cd /opt -RELEASE=$(curl -s https://api.github.com/repos/linkwarden/linkwarden/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') -wget -q "https://github.com/linkwarden/linkwarden/archive/refs/tags/${RELEASE}.zip" +RELEASE=$(curl -fsSL https://api.github.com/repos/linkwarden/linkwarden/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') +curl -fsSL "https://github.com/linkwarden/linkwarden/archive/refs/tags/${RELEASE}.zip" -o $(basename "https://github.com/linkwarden/linkwarden/archive/refs/tags/${RELEASE}.zip") unzip -q ${RELEASE}.zip mv linkwarden-${RELEASE:1} /opt/linkwarden cd /opt/linkwarden @@ -128,7 +128,7 @@ ExecStart=/usr/bin/yarn start [Install] WantedBy=multi-user.target EOF -systemctl enable -q --now linkwarden.service +systemctl enable -q --now linkwarden msg_ok "Created Service" motd_ssh diff --git a/install/listmonk-install.sh b/install/listmonk-install.sh index 7fbbf6a00..380922165 100644 --- a/install/listmonk-install.sh +++ b/install/listmonk-install.sh @@ -14,13 +14,7 @@ network_check update_os msg_info "Installing Dependencies" -$STD apt-get install -y \ - curl \ - sudo \ - mc \ - postgresql \ - wget \ - openssh-server +$STD apt-get install -y postgresql msg_ok "Installed Dependencies" msg_info "Setting up PostgreSQL" @@ -41,8 +35,8 @@ msg_info "Installing listmonk" cd /opt mkdir /opt/listmonk mkdir /opt/listmonk/uploads -RELEASE=$(curl -s https://api.github.com/repos/knadh/listmonk/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') -wget -q "https://github.com/knadh/listmonk/releases/download/v${RELEASE}/listmonk_${RELEASE}_linux_arm64.tar.gz" +RELEASE=$(curl -fsSL https://api.github.com/repos/knadh/listmonk/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') +curl -fsSL "https://github.com/knadh/listmonk/releases/download/v${RELEASE}/listmonk_${RELEASE}_linux_arm64.tar.gz" -o $(basename "https://github.com/knadh/listmonk/releases/download/v${RELEASE}/listmonk_${RELEASE}_linux_arm64.tar.gz") tar -xzf "listmonk_${RELEASE}_linux_arm64.tar.gz" -C /opt/listmonk $STD /opt/listmonk/listmonk --new-config --config /opt/listmonk/config.toml diff --git a/install/lubelogger-install.sh b/install/lubelogger-install.sh index 1d1b8f5cf..4defbd0e3 100644 --- a/install/lubelogger-install.sh +++ b/install/lubelogger-install.sh @@ -28,10 +28,10 @@ msg_ok "Installed Dependencies" msg_info "Installing LubeLogger" cd /opt mkdir -p /opt/lubelogger -RELEASE=$(curl -s https://api.github.com/repos/hargata/lubelog/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') +RELEASE=$(curl -fsSL https://api.github.com/repos/hargata/lubelog/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') RELEASE_TRIMMED=$(echo "${RELEASE}" | tr -d ".") cd /opt/lubelogger -wget -q https://github.com/hargata/lubelog/releases/download/v${RELEASE}/LubeLogger_v${RELEASE_TRIMMED}_linux_x64.zip +curl -fsSL "https://github.com/hargata/lubelog/releases/download/v${RELEASE}/LubeLogger_v${RELEASE_TRIMMED}_linux_x64.zip" -o $(basename "https://github.com/hargata/lubelog/releases/download/v${RELEASE}/LubeLogger_v${RELEASE_TRIMMED}_linux_x64.zip") unzip -q LubeLogger_v${RELEASE_TRIMMED}_linux_x64.zip chmod 700 /opt/lubelogger/CarCareTracker cp /opt/lubelogger/appsettings.json /opt/lubelogger/appsettings_bak.json diff --git a/install/mafl-install.sh b/install/mafl-install.sh index 6e9592108..e78d4cd6a 100644 --- a/install/mafl-install.sh +++ b/install/mafl-install.sh @@ -36,12 +36,12 @@ $STD npm install -g npm@latest $STD npm install -g yarn msg_ok "Installed Node.js" -RELEASE=$(curl -s https://api.github.com/repos/hywax/mafl/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') +RELEASE=$(curl -fsSL https://api.github.com/repos/hywax/mafl/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') msg_info "Installing Mafl v${RELEASE}" -wget -q https://github.com/hywax/mafl/archive/refs/tags/v${RELEASE}.tar.gz +curl -fsSL "https://github.com/hywax/mafl/archive/refs/tags/v${RELEASE}.tar.gz" -o $(basename "https://github.com/hywax/mafl/archive/refs/tags/v${RELEASE}.tar.gz") tar -xzf v${RELEASE}.tar.gz mkdir -p /opt/mafl/data -wget -q -O /opt/mafl/data/config.yml https://raw.githubusercontent.com/hywax/mafl/main/.example/config.yml +curl -fsSL "https://raw.githubusercontent.com/hywax/mafl/main/.example/config.yml" -o "/opt/mafl/data/config.yml" mv mafl-${RELEASE}/* /opt/mafl rm -rf mafl-${RELEASE} cd /opt/mafl diff --git a/install/magicmirror-install.sh b/install/magicmirror-install.sh index 9440844be..d47821e02 100644 --- a/install/magicmirror-install.sh +++ b/install/magicmirror-install.sh @@ -36,8 +36,8 @@ msg_ok "Installed Node.js" msg_info "Setup MagicMirror" temp_file=$(mktemp) -RELEASE=$(curl -s https://api.github.com/repos/MagicMirrorOrg/MagicMirror/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') -wget -q "https://github.com/MagicMirrorOrg/MagicMirror/archive/refs/tags/v${RELEASE}.tar.gz" -O "$temp_file" +RELEASE=$(curl -fsSL https://api.github.com/repos/MagicMirrorOrg/MagicMirror/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') +curl -fsSL "https://github.com/MagicMirrorOrg/MagicMirror/archive/refs/tags/v${RELEASE}.tar.gz" -o ""$temp_file"" tar -xzf "$temp_file" mv MagicMirror-${RELEASE} /opt/magicmirror cd /opt/magicmirror diff --git a/install/mariadb-install.sh b/install/mariadb-install.sh index 439a4dbe4..a20c21583 100644 --- a/install/mariadb-install.sh +++ b/install/mariadb-install.sh @@ -40,7 +40,7 @@ if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then php-json \ php-curl - wget -q "https://files.phpmyadmin.net/phpMyAdmin/5.2.1/phpMyAdmin-5.2.1-all-languages.tar.gz" + curl -fsSL "https://files.phpmyadmin.net/phpMyAdmin/5.2.1/phpMyAdmin-5.2.1-all-languages.tar.gz" -o $(basename "https://files.phpmyadmin.net/phpMyAdmin/5.2.1/phpMyAdmin-5.2.1-all-languages.tar.gz") mkdir -p /var/www/html/phpMyAdmin tar xf phpMyAdmin-5.2.1-all-languages.tar.gz --strip-components=1 -C /var/www/html/phpMyAdmin cp /var/www/html/phpMyAdmin/config.sample.inc.php /var/www/html/phpMyAdmin/config.inc.php diff --git a/install/matterbridge-install.sh b/install/matterbridge-install.sh index 61882bf0d..907adaa5b 100644 --- a/install/matterbridge-install.sh +++ b/install/matterbridge-install.sh @@ -55,7 +55,7 @@ TimeoutStopSec=30s [Install] WantedBy=multi-user.target EOF -systemctl enable -q --now matterbridge.service +systemctl enable -q --now matterbridge msg_ok "Created Service" motd_ssh diff --git a/install/mattermost-install.sh b/install/mattermost-install.sh index d94703778..6bf04627a 100644 --- a/install/mattermost-install.sh +++ b/install/mattermost-install.sh @@ -38,14 +38,14 @@ msg_ok "Set up PostgreSQL" msg_info "Installing Mattermost" IPADDRESS=$(hostname -I | awk '{print $1}') -curl -sL -o /usr/share/keyrings/mattermost-archive-keyring.gpg https://deb.packages.mattermost.com/pubkey.gpg -sh -c 'curl -sL https://deb.packages.mattermost.com/repo-setup.sh | sudo bash -s mattermost' >/dev/null +curl -fsSL -o /usr/share/keyrings/mattermost-archive-keyring.gpg https://deb.packages.mattermost.com/pubkey.gpg +sh -c 'curl -fsSL https://deb.packages.mattermost.com/repo-setup.sh | sudo bash -s mattermost' >/dev/null $STD apt-get update $STD apt-get install -y mattermost $STD install -C -m 600 -o mattermost -g mattermost /opt/mattermost/config/config.defaults.json /opt/mattermost/config/config.json sed -i -e "/DataSource/c\ \"DataSource\": \"postgres://$DB_USER:$DB_PASS@localhost:5432/$DB_NAME?sslmode=disable&connect_timeout=10\"," \ -e "/SiteURL/c\ \"SiteURL\": \"http://$IPADDRESS:8065\"," /opt/mattermost/config/config.json -systemctl enable -q --now mattermost.service +systemctl enable -q --now mattermost msg_ok "Installed Mattermost" motd_ssh diff --git a/install/mediamtx-install.sh b/install/mediamtx-install.sh index d7ca320d1..0febbf35b 100644 --- a/install/mediamtx-install.sh +++ b/install/mediamtx-install.sh @@ -15,15 +15,13 @@ update_os msg_info "Installing Dependencies" $STD apt-get install -y ffmpeg -$STD apt-get install -y wget -$STD apt-get install -y openssh-server msg_ok "Installed Dependencies" msg_info "Installing MediaMTX" -RELEASE=$(curl -s https://api.github.com/repos/bluenviron/mediamtx/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') +RELEASE=$(curl -fsSL https://api.github.com/repos/bluenviron/mediamtx/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') mkdir -p /opt/mediamtx cd /opt/mediamtx -wget -q https://github.com/bluenviron/mediamtx/releases/download/${RELEASE}/mediamtx_${RELEASE}_linux_arm64v8.tar.gz +curl -fsSL "https://github.com/bluenviron/mediamtx/releases/download/${RELEASE}/mediamtx_${RELEASE}_linux_arm64v8.tar.gz" -o $(basename "https://github.com/bluenviron/mediamtx/releases/download/${RELEASE}/mediamtx_${RELEASE}_linux_arm64v8.tar.gz") tar xzf mediamtx_${RELEASE}_linux_arm64v8.tar.gz rm -rf mediamtx_${RELEASE}_linux_arm64v8.tar.gz msg_ok "Installed MediaMTX" @@ -42,7 +40,7 @@ Restart=always [Install] WantedBy=multi-user.target EOF -systemctl enable -q --now mediamtx.service +systemctl enable -q --now mediamtx msg_ok "Created Service" motd_ssh diff --git a/install/medusa-install.sh b/install/medusa-install.sh index fd1592117..c3810ceec 100644 --- a/install/medusa-install.sh +++ b/install/medusa-install.sh @@ -51,7 +51,7 @@ Restart=on-failure [Install] WantedBy=multi-user.target EOF -systemctl enable -q --now medusa.service +systemctl enable -q --now medusa msg_ok "Created Service" motd_ssh diff --git a/install/meilisearch-install.sh b/install/meilisearch-install.sh new file mode 100644 index 000000000..297bdca40 --- /dev/null +++ b/install/meilisearch-install.sh @@ -0,0 +1,122 @@ +#!/usr/bin/env bash + +# Copyright (c) 2021-2025 community-scripts ORG +# Author: MickLesk (CanbiZ) +# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE +# Source: https://www.meilisearch.com/ + +source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" +color +verb_ip6 +catch_errors +setting_up_container +network_check +update_os + +msg_info "Installing Dependencies" +$STD apt-get install -y \ + gnupg +msg_ok "Installed Dependencies" + +msg_info "Setup ${APPLICATION}" +tmp_file=$(mktemp) +RELEASE=$(curl -s https://api.github.com/repos/meilisearch/meilisearch/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') +curl -fsSL https://github.com/meilisearch/meilisearch/releases/latest/download/meilisearch.deb -o $tmp_file +$STD dpkg -i $tmp_file +curl -fsSL https://raw.githubusercontent.com/meilisearch/meilisearch/latest/config.toml -o /etc/meilisearch.toml +MASTER_KEY=$(openssl rand -base64 12) +LOCAL_IP="$(hostname -I | awk '{print $1}')" +sed -i \ + -e 's|^env =.*|env = "production"|' \ + -e "s|^# master_key =.*|master_key = \"$MASTER_KEY\"|" \ + -e 's|^db_path =.*|db_path = "/var/lib/meilisearch/data"|' \ + -e 's|^dump_dir =.*|dump_dir = "/var/lib/meilisearch/dumps"|' \ + -e 's|^snapshot_dir =.*|snapshot_dir = "/var/lib/meilisearch/snapshots"|' \ + -e 's|^# no_analytics = true|no_analytics = true|' \ + -e 's|^http_addr =.*|http_addr = "0.0.0.0:7700"|' \ + /etc/meilisearch.toml +echo "${RELEASE}" >/opt/${APPLICATION}_version.txt +msg_ok "Setup ${APPLICATION}" + +read -r -p "Do you want add meilisearch-ui? [y/n]: " prompt +if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then + msg_info "Setting up Node.js Repository" + mkdir -p /etc/apt/keyrings + curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg + echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_22.x nodistro main" >/etc/apt/sources.list.d/nodesource.list + msg_ok "Set up Node.js Repository" + + msg_info "Installing Node.js" + $STD apt-get update + $STD apt-get install -y nodejs + $STD npm install -g pnpm + msg_ok "Installed Node.js" + + msg_info "Setup ${APPLICATION}-ui" + tmp_file=$(mktemp) + tmp_dir=$(mktemp -d) + mkdir -p /opt/meilisearch-ui + RELEASE_UI=$(curl -s https://api.github.com/repos/riccox/meilisearch-ui/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') + curl -fsSL "https://github.com/riccox/meilisearch-ui/archive/refs/tags/${RELEASE_UI}.zip" -o $tmp_file + unzip -q "$tmp_file" -d "$tmp_dir" + mv "$tmp_dir"/*/* /opt/meilisearch-ui/ + cd /opt/meilisearch-ui + sed -i 's|const hash = execSync("git rev-parse HEAD").toString().trim();|const hash = "unknown";|' /opt/meilisearch-ui/vite.config.ts + $STD pnpm install + cat < /opt/meilisearch-ui/.env.local +VITE_SINGLETON_MODE=true +VITE_SINGLETON_HOST=http://${LOCAL_IP}:7700 +VITE_SINGLETON_API_KEY=${MASTER_KEY} +EOF + echo "${RELEASE_UI}" >/opt/${APPLICATION}-ui_version.txt + msg_ok "Setup ${APPLICATION}-ui" +fi + +msg_info "Setting up Services" +cat </etc/systemd/system/meilisearch.service +[Unit] +Description=Meilisearch +After=network.target + +[Service] +ExecStart=/usr/bin/meilisearch --config-file-path /etc/meilisearch.toml +Restart=always + +[Install] +WantedBy=multi-user.target +EOF +systemctl enable -q --now meilisearch + +if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then +cat < /etc/systemd/system/meilisearch-ui.service +[Unit] +Description=Meilisearch UI Service +After=network.target meilisearch.service +Requires=meilisearch.service + +[Service] +User=root +WorkingDirectory=/opt/meilisearch-ui +ExecStart=/usr/bin/pnpm start +Restart=always +RestartSec=5 +StandardOutput=syslog +StandardError=syslog +SyslogIdentifier=meilisearch-ui + +[Install] +WantedBy=multi-user.target +EOF +systemctl enable -q --now meilisearch-ui +fi + +msg_ok "Set up Services" + + +motd_ssh +customize + +msg_info "Cleaning up" +$STD apt-get -y autoremove +$STD apt-get -y autoclean +msg_ok "Cleaned" diff --git a/install/memos-install.sh b/install/memos-install.sh index 0d2732bcc..7466a2823 100644 --- a/install/memos-install.sh +++ b/install/memos-install.sh @@ -39,8 +39,8 @@ msg_ok "Installed pnpm" msg_info "Installing Golang" set +o pipefail temp_file=$(mktemp) -golang_tarball=$(curl -s https://go.dev/dl/ | grep -oP 'go[\d\.]+\.linux-amd64\.tar\.gz' | head -n 1) -wget -q https://golang.org/dl/"$golang_tarball" -O "$temp_file" +golang_tarball=$(curl -fsSL https://go.dev/dl/ | grep -oP 'go[\d\.]+\.linux-amd64\.tar\.gz' | head -n 1) +curl -fsSL "https://golang.org/dl/${golang_tarball}" -o "$temp_file" tar -C /usr/local -xzf "$temp_file" ln -sf /usr/local/go/bin/go /usr/local/bin/go rm -f "$temp_file" @@ -78,7 +78,7 @@ Restart=always [Install] WantedBy=multi-user.target EOF -systemctl enable -q --now memos.service +systemctl enable -q --now memos msg_ok "Created Service" motd_ssh diff --git a/install/metube-install.sh b/install/metube-install.sh index 702acfcec..4fc8b5d16 100644 --- a/install/metube-install.sh +++ b/install/metube-install.sh @@ -86,7 +86,7 @@ User=root [Install] WantedBy=multi-user.target EOF -systemctl enable -q --now metube.service +systemctl enable -q --now metube msg_ok "Created Service" motd_ssh diff --git a/install/minio-install.sh b/install/minio-install.sh index e6e57c95d..5a5cd2317 100644 --- a/install/minio-install.sh +++ b/install/minio-install.sh @@ -14,8 +14,8 @@ network_check update_os msg_info "Setup MinIO" -RELEASE=$(curl -s https://api.github.com/repos/minio/minio/releases/latest | grep '"tag_name"' | awk -F '"' '{print $4}') -wget -q https://dl.min.io/server/minio/release/linux-amd64/minio +RELEASE=$(curl -fsSL https://api.github.com/repos/minio/minio/releases/latest | grep '"tag_name"' | awk -F '"' '{print $4}') +curl -fsSL "https://dl.min.io/server/minio/release/linux-amd64/minio" -o $(basename "https://dl.min.io/server/minio/release/linux-amd64/minio") mv minio /usr/local/bin/ chmod +x /usr/local/bin/minio useradd -r minio-user -s /sbin/nologin diff --git a/install/mongodb-install.sh b/install/mongodb-install.sh index 2661f29b1..1c81c911d 100644 --- a/install/mongodb-install.sh +++ b/install/mongodb-install.sh @@ -37,12 +37,12 @@ else fi msg_info "Installing MongoDB $MONGODB_VERSION" -wget -qO- https://www.mongodb.org/static/pgp/server-${MONGODB_VERSION}.asc | gpg --dearmor >/usr/share/keyrings/mongodb-server-${MONGODB_VERSION}.gpg +curl -fsSL "https://www.mongodb.org/static/pgp/server-${MONGODB_VERSION}.asc" | gpg --dearmor >/usr/share/keyrings/mongodb-server-${MONGODB_VERSION}.gpg echo "deb [signed-by=/usr/share/keyrings/mongodb-server-${MONGODB_VERSION}.gpg] http://repo.mongodb.org/apt/debian $(grep '^VERSION_CODENAME=' /etc/os-release | cut -d'=' -f2)/mongodb-org/${MONGODB_VERSION} main" >/etc/apt/sources.list.d/mongodb-org-${MONGODB_VERSION}.list $STD apt-get update $STD apt-get install -y mongodb-org sed -i 's/bindIp: 127.0.0.1/bindIp: 0.0.0.0/' /etc/mongod.conf -systemctl enable -q --now mongod.service +systemctl enable -q --now mongod msg_ok "Installed MongoDB $MONGODB_VERSION" motd_ssh diff --git a/install/monica-install.sh b/install/monica-install.sh index 8b2232169..66de5dc76 100644 --- a/install/monica-install.sh +++ b/install/monica-install.sh @@ -48,9 +48,9 @@ $STD npm install -g yarn msg_ok "Installed Node.js/Yarn" msg_info "Installing monica" -RELEASE=$(curl -s https://api.github.com/repos/monicahq/monica/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') +RELEASE=$(curl -fsSL https://api.github.com/repos/monicahq/monica/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') cd /opt -wget -q "https://github.com/monicahq/monica/releases/download/v${RELEASE}/monica-v${RELEASE}.tar.bz2" +curl -fsSL "https://github.com/monicahq/monica/releases/download/v${RELEASE}/monica-v${RELEASE}.tar.bz2" -o $(basename "https://github.com/monicahq/monica/releases/download/v${RELEASE}/monica-v${RELEASE}.tar.bz2") tar -xjf "monica-v${RELEASE}.tar.bz2" mv "/opt/monica-v${RELEASE}" /opt/monica cd /opt/monica diff --git a/install/motioneye-install.sh b/install/motioneye-install.sh index cc9e584d3..5a1ff4296 100644 --- a/install/motioneye-install.sh +++ b/install/motioneye-install.sh @@ -44,12 +44,12 @@ $STD pip install git+https://github.com/motioneye-project/motioneye.git@dev mkdir -p /etc/motioneye chown -R root:root /etc/motioneye chmod -R 777 /etc/motioneye -wget -qO /etc/motioneye/motioneye.conf https://raw.githubusercontent.com/motioneye-project/motioneye/dev/motioneye/extra/motioneye.conf.sample +curl -fsSL "https://raw.githubusercontent.com/motioneye-project/motioneye/dev/motioneye/extra/motioneye.conf.sample" -o "/etc/motioneye/motioneye.conf" mkdir -p /var/lib/motioneye msg_ok "Installed MotionEye" msg_info "Creating Service" -wget -qO /etc/systemd/system/motioneye.service https://raw.githubusercontent.com/motioneye-project/motioneye/dev/motioneye/extra/motioneye.systemd +curl -fsSL "https://raw.githubusercontent.com/motioneye-project/motioneye/dev/motioneye/extra/motioneye.systemd" -o "/etc/systemd/system/motioneye.service" systemctl enable -q --now motioneye msg_ok "Created Service" diff --git a/install/mylar3-install.sh b/install/mylar3-install.sh index 58bf21d01..5cb6507b9 100644 --- a/install/mylar3-install.sh +++ b/install/mylar3-install.sh @@ -36,8 +36,8 @@ msg_ok "Setup Python3" msg_info "Installing ${APPLICATION}" mkdir -p /opt/mylar3 mkdir -p /opt/mylar3-data -RELEASE=$(curl -s https://api.github.com/repos/mylar3/mylar3/releases/latest | jq -r '.tag_name') -wget -qO- https://github.com/mylar3/mylar3/archive/refs/tags/${RELEASE}.tar.gz | tar -xz --strip-components=1 -C /opt/mylar3 +RELEASE=$(curl -fsSL https://api.github.com/repos/mylar3/mylar3/releases/latest | jq -r '.tag_name') +curl -fsSL "https://github.com/mylar3/mylar3/archive/refs/tags/${RELEASE}.tar.gz" | tar -xz --strip-components=1 -C /opt/mylar3 $STD pip install --no-cache-dir -r /opt/mylar3/requirements.txt echo "${RELEASE}" >/opt/${APPLICATION}_version.txt msg_ok "Installed ${APPLICATION}" @@ -57,7 +57,7 @@ Restart=on-failure [Install] WantedBy=multi-user.target EOF -systemctl enable -q --now mylar3.service +systemctl enable -q --now mylar3 msg_ok "Created Service" motd_ssh diff --git a/install/myspeed-install.sh b/install/myspeed-install.sh index bf478ff71..a8e05bde5 100644 --- a/install/myspeed-install.sh +++ b/install/myspeed-install.sh @@ -16,9 +16,6 @@ update_os msg_info "Installing Dependencies" $STD apt-get install -y \ build-essential \ - g++ \ - make \ - make \ gpg \ ca-certificates \ mc \ @@ -38,9 +35,9 @@ $STD apt-get install -y nodejs msg_ok "Installed Node.js" msg_info "Installing MySpeed" -RELEASE=$(wget -q https://github.com/gnmyt/myspeed/releases/latest -O - | grep "title>Release" | cut -d " " -f 5) +RELEASE=$(curl -fsSL https://github.com/gnmyt/myspeed/releases/latest | grep "title>Release" | cut -d " " -f 5) cd /opt -wget -q https://github.com/gnmyt/myspeed/releases/download/v$RELEASE/MySpeed-$RELEASE.zip +curl -fsSL "https://github.com/gnmyt/myspeed/releases/download/v$RELEASE/MySpeed-$RELEASE.zip" -o $(basename "https://github.com/gnmyt/myspeed/releases/download/v$RELEASE/MySpeed-$RELEASE.zip") unzip -q MySpeed-$RELEASE.zip -d myspeed cd myspeed $STD npm install @@ -64,7 +61,7 @@ WorkingDirectory=/opt/myspeed [Install] WantedBy=multi-user.target EOF -systemctl enable -q --now myspeed.service +systemctl enable -q --now myspeed msg_ok "Created Service" motd_ssh diff --git a/install/mysql-install.sh b/install/mysql-install.sh index 664a5ba58..770f03dd9 100644 --- a/install/mysql-install.sh +++ b/install/mysql-install.sh @@ -67,7 +67,7 @@ if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then php-json \ php-curl - wget -q "https://files.phpmyadmin.net/phpMyAdmin/5.2.1/phpMyAdmin-5.2.1-all-languages.tar.gz" + curl -fsSL "https://files.phpmyadmin.net/phpMyAdmin/5.2.1/phpMyAdmin-5.2.1-all-languages.tar.gz" -o $(basename "https://files.phpmyadmin.net/phpMyAdmin/5.2.1/phpMyAdmin-5.2.1-all-languages.tar.gz") mkdir -p /var/www/html/phpMyAdmin tar xf phpMyAdmin-5.2.1-all-languages.tar.gz --strip-components=1 -C /var/www/html/phpMyAdmin cp /var/www/html/phpMyAdmin/config.sample.inc.php /var/www/html/phpMyAdmin/config.inc.php diff --git a/install/n8n-install.sh b/install/n8n-install.sh index a9da9eba5..08a86bb86 100644 --- a/install/n8n-install.sh +++ b/install/n8n-install.sh @@ -14,10 +14,9 @@ network_check update_os msg_info "Installing Dependencies" -$STD apt-get install -y ca-certificates -$STD apt-get install -y gnupg -$STD apt-get install -y wget -$STD apt-get install -y openssh-server +$STD apt-get install -y \ + ca-certificates \ + gnupg msg_ok "Installed Dependencies" msg_info "Setting up Node.js Repository" diff --git a/install/navidrome-install.sh b/install/navidrome-install.sh index d83b9d31b..372a7a961 100644 --- a/install/navidrome-install.sh +++ b/install/navidrome-install.sh @@ -15,16 +15,13 @@ update_os msg_info "Installing Dependencies (patience)" $STD apt-get install -y ffmpeg -$STD apt-get install -y wget -$STD apt-get install -y openssh-server msg_ok "Installed Dependencies" -RELEASE=$(curl -s https://api.github.com/repos/navidrome/navidrome/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') - msg_info "Installing Navidrome" +RELEASE=$(curl -fsSL https://api.github.com/repos/navidrome/navidrome/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') install -d -o root -g root /opt/navidrome install -d -o root -g root /var/lib/navidrome -wget -q https://github.com/navidrome/navidrome/releases/download/v${RELEASE}/navidrome_${RELEASE}_linux_arm64.tar.gz -O Navidrome.tar.gz +curl -fsSL "https://github.com/navidrome/navidrome/releases/download/v${RELEASE}/navidrome_${RELEASE}_linux_arm64.tar.gz" -o "Navidrome.tar.gz" $STD tar -xvzf Navidrome.tar.gz -C /opt/navidrome/ chown -R root:root /opt/navidrome chmod +x /opt/navidrome/navidrome @@ -68,7 +65,7 @@ ProtectSystem=full [Install] WantedBy=multi-user.target" >$service_path systemctl daemon-reload -$STD systemctl enable --now navidrome.service +systemctl enable -q --now navidrome msg_ok "Created Service" diff --git a/install/neo4j-install.sh b/install/neo4j-install.sh index 10325f048..2077794d8 100644 --- a/install/neo4j-install.sh +++ b/install/neo4j-install.sh @@ -21,7 +21,7 @@ $STD apt-get install -y openssh-server msg_ok "Installed Dependencies" msg_info "Installing Neo4j (patience)" -wget -qO- https://debian.neo4j.com/neotechnology.gpg.key | gpg --dearmor -o /etc/apt/keyrings/neotechnology.gpg +curl -fsSL "https://debian.neo4j.com/neotechnology.gpg.key" | gpg --dearmor -o /etc/apt/keyrings/neotechnology.gpg echo 'deb [signed-by=/etc/apt/keyrings/neotechnology.gpg] https://debian.neo4j.com stable latest' >/etc/apt/sources.list.d/neo4j.list $STD apt-get update $STD apt-get install -y neo4j diff --git a/install/netbox-install.sh b/install/netbox-install.sh index 18f46077e..a46bdc434 100644 --- a/install/netbox-install.sh +++ b/install/netbox-install.sh @@ -18,10 +18,6 @@ $STD apt-get install -y \ apache2 \ redis-server \ postgresql \ - python3 \ - python3-pip \ - python3-venv \ - python3-dev \ build-essential \ libxml2-dev \ libxslt1-dev \ @@ -33,6 +29,14 @@ $STD apt-get install -y \ openssh-server msg_ok "Installed Dependencies" +msg_info "Installing Python" +$STD apt-get install -y \ + python3 \ + python3-pip \ + python3-venv \ + python3-dev +msg_ok "Installed Python" + msg_info "Setting up PostgreSQL" DB_NAME=netbox DB_USER=netbox @@ -49,8 +53,8 @@ msg_ok "Set up PostgreSQL" msg_info "Installing NetBox (Patience)" cd /opt -RELEASE=$(curl -s https://api.github.com/repos/netbox-community/netbox/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') -wget -q "https://github.com/netbox-community/netbox/archive/refs/tags/v${RELEASE}.zip" +RELEASE=$(curl -fsSL https://api.github.com/repos/netbox-community/netbox/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') +curl -fsSL "https://github.com/netbox-community/netbox/archive/refs/tags/v${RELEASE}.zip" -o $(basename "https://github.com/netbox-community/netbox/archive/refs/tags/v${RELEASE}.zip") unzip -q "v${RELEASE}.zip" mv /opt/netbox-${RELEASE}/ /opt/netbox diff --git a/install/nextpvr-install.sh b/install/nextpvr-install.sh index 174e618a7..c95c4dce3 100644 --- a/install/nextpvr-install.sh +++ b/install/nextpvr-install.sh @@ -32,7 +32,7 @@ msg_ok "Installed Dependencies" msg_info "Setup NextPVR (Patience)" cd /opt -wget -q https://nextpvr.com/nextpvr-helper.deb +curl -fsSL "https://nextpvr.com/nextpvr-helper.deb" -o $(basename "https://nextpvr.com/nextpvr-helper.deb") $STD dpkg -i nextpvr-helper.deb msg_ok "Installed NextPVR" diff --git a/install/nginxproxymanager-install.sh b/install/nginxproxymanager-install.sh index 711bbb452..16b7ac5fe 100644 --- a/install/nginxproxymanager-install.sh +++ b/install/nginxproxymanager-install.sh @@ -17,16 +17,11 @@ msg_info "Installing Dependencies" $STD apt-get update $STD apt-get -y install \ gnupg \ - make \ - gcc \ - g++ \ ca-certificates \ apache2-utils \ logrotate \ build-essential \ - git \ - wget \ - openssh-server + git msg_ok "Installed Dependencies" msg_info "Installing Python Dependencies" $STD apt-get install -y \ @@ -46,9 +41,9 @@ msg_ok "Installed Python Dependencies" VERSION="$(awk -F'=' '/^VERSION_CODENAME=/{ print $NF }' /etc/os-release)" msg_info "Installing Openresty" -wget -O - https://openresty.org/package/pubkey.gpg | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/openresty.gpg -codename=`grep -Po 'VERSION="[0-9]+ \(\K[^)]+' /etc/os-release` -echo "deb http://openresty.org/package/arm64/debian $codename openresty" | sudo tee /etc/apt/sources.list.d/openresty.list +curl -fsSL "https://openresty.org/package/pubkey.gpg" | gpg --dearmor -o /etc/apt/trusted.gpg.d/openresty-archive-keyring.gpg +codename=`grep -Po 'VERSION="[0-9]+ \(\K[^)]+' /etc/os-r +echo -e "deb http://openresty.org/package/debian $codename openresty" >/etc/apt/sources.list.d/openresty.list $STD apt-get update $STD apt-get -y install openresty msg_ok "Installed Openresty" @@ -64,19 +59,19 @@ msg_info "Installing pnpm" $STD npm install -g pnpm@8.15 msg_ok "Installed pnpm" -RELEASE=$(curl -s https://api.github.com/repos/NginxProxyManager/nginx-proxy-manager/releases/latest | +RELEASE=$(curl -fsSL https://api.github.com/repos/NginxProxyManager/nginx-proxy-manager/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') read -r -p "Would you like to install an older version (v2.10.4)? " prompt if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then msg_info "Downloading Nginx Proxy Manager v2.10.4" - wget -q https://codeload.github.com/NginxProxyManager/nginx-proxy-manager/tar.gz/v2.10.4 -O - | tar -xz + curl -fsSL "https://codeload.github.com/NginxProxyManager/nginx-proxy-manager/tar.gz/v2.10.4" | tar -xz cd ./nginx-proxy-manager-2.10.4 msg_ok "Downloaded Nginx Proxy Manager v2.10.4" else msg_info "Downloading Nginx Proxy Manager v${RELEASE}" - wget -q https://codeload.github.com/NginxProxyManager/nginx-proxy-manager/tar.gz/v${RELEASE} -O - | tar -xz + curl -fsSL "https://codeload.github.com/NginxProxyManager/nginx-proxy-manager/tar.gz/v${RELEASE}" | tar -xz cd ./nginx-proxy-manager-${RELEASE} msg_ok "Downloaded Nginx Proxy Manager v${RELEASE}" fi diff --git a/install/nocodb-install.sh b/install/nocodb-install.sh index da3829af4..e8a8aaedb 100644 --- a/install/nocodb-install.sh +++ b/install/nocodb-install.sh @@ -24,7 +24,7 @@ msg_ok "Installed Dependencies" msg_info "Installing NocoDB" mkdir -p /opt/nocodb cd /opt/nocodb -curl -s http://get.nocodb.com/linux-arm64 -o nocodb -L +curl -fsSL http://get.nocodb.com/linux-arm64 -o nocodb -L chmod +x nocodb msg_ok "Installed NocoDB" @@ -42,7 +42,7 @@ ExecStart=/opt/nocodb/./nocodb [Install] WantedBy=multi-user.target" >$service_path -systemctl enable -q --now nocodb.service &>/dev/null +systemctl enable -q --now nocodb msg_ok "Created Service" motd_ssh diff --git a/install/node-red-install.sh b/install/node-red-install.sh index 1c176501a..afe202880 100644 --- a/install/node-red-install.sh +++ b/install/node-red-install.sh @@ -14,11 +14,10 @@ network_check update_os msg_info "Installing Dependencies" -$STD apt-get install -y git -$STD apt-get install -y ca-certificates -$STD apt-get install -y gnupg -$STD apt-get install -y wget -$STD apt-get install -y openssh-server +$STD apt-get install -y \ + git \ + ca-certificates \ + gnupg msg_ok "Installed Dependencies" msg_info "Setting up Node.js Repository" @@ -64,7 +63,7 @@ Group=root [Install] WantedBy=multi-user.target" >$service_path -$STD systemctl enable --now nodered.service +systemctl enable -q --now nodered msg_ok "Created Service" motd_ssh diff --git a/install/nodebb-install.sh b/install/nodebb-install.sh index 3318ede46..823cc9331 100644 --- a/install/nodebb-install.sh +++ b/install/nodebb-install.sh @@ -16,7 +16,6 @@ update_os msg_info "Installing Dependencies (Patience)" $STD apt-get install -y \ build-essential \ - make \ redis-server \ expect \ gnupg \ @@ -86,8 +85,8 @@ msg_ok "MongoDB successfully configurated" msg_info "Install NodeBB" cd /opt -RELEASE=$(curl -s https://api.github.com/repos/NodeBB/NodeBB/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') -wget -q "https://github.com/NodeBB/NodeBB/archive/refs/tags/v${RELEASE}.zip" +RELEASE=$(curl -fsSL https://api.github.com/repos/NodeBB/NodeBB/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') +curl -fsSL "https://github.com/NodeBB/NodeBB/archive/refs/tags/v${RELEASE}.zip" -o $(basename "https://github.com/NodeBB/NodeBB/archive/refs/tags/v${RELEASE}.zip") unzip -q v${RELEASE}.zip mv NodeBB-${RELEASE} /opt/nodebb cd /opt/nodebb diff --git a/install/notifiarr-install.sh b/install/notifiarr-install.sh index ef92da4bc..c42b877b4 100644 --- a/install/notifiarr-install.sh +++ b/install/notifiarr-install.sh @@ -22,7 +22,7 @@ msg_ok "Installed Dependencies" msg_info "Installing Notifiarr" $STD groupadd notifiarr $STD useradd -g notifiarr notifiarr -wget -qO- https://packagecloud.io/golift/pkgs/gpgkey | gpg --dearmor >/usr/share/keyrings/golift-archive-keyring.gpg +curl -fsSL "https://packagecloud.io/golift/pkgs/gpgkey" | gpg --dearmor >/usr/share/keyrings/golift-archive-keyring.gpg echo "deb [signed-by=/usr/share/keyrings/golift-archive-keyring.gpg] https://packagecloud.io/golift/pkgs/ubuntu focal main" >/etc/apt/sources.list.d/golift.list $STD apt-get update $STD apt-get install -y notifiarr diff --git a/install/npmplus-install.sh b/install/npmplus-install.sh index 64fbe6bdc..d283895c6 100644 --- a/install/npmplus-install.sh +++ b/install/npmplus-install.sh @@ -15,14 +15,9 @@ update_os msg_info "Installing Dependencies" $STD apk add \ - newt \ - curl \ - openssh \ tzdata \ - nano \ gawk \ - yq \ - mc + yq msg_ok "Installed Dependencies" msg_info "Installing Docker & Compose" @@ -31,18 +26,18 @@ $STD rc-service docker start $STD rc-update add docker default get_latest_release() { - curl -sL https://api.github.com/repos/$1/releases/latest | grep '"tag_name":' | cut -d'"' -f4 + curl -fsSL https://api.github.com/repos/$1/releases/latest | grep '"tag_name":' | cut -d'"' -f4 } DOCKER_COMPOSE_LATEST_VERSION=$(get_latest_release "docker/compose") DOCKER_CONFIG=${DOCKER_CONFIG:-$HOME/.docker} mkdir -p $DOCKER_CONFIG/cli-plugins -curl -sSL https://github.com/docker/compose/releases/download/$DOCKER_COMPOSE_LATEST_VERSION/docker-compose-linux-x86_64 -o ~/.docker/cli-plugins/docker-compose +curl -fsSL https://github.com/docker/compose/releases/download/$DOCKER_COMPOSE_LATEST_VERSION/docker-compose-linux-x86_64 -o ~/.docker/cli-plugins/docker-compose chmod +x $DOCKER_CONFIG/cli-plugins/docker-compose msg_ok "Installed Docker & Compose" msg_info "Fetching NPMplus" cd /opt -wget -q https://raw.githubusercontent.com/ZoeyVid/NPMplus/refs/heads/develop/compose.yaml +curl -fsSL "https://raw.githubusercontent.com/ZoeyVid/NPMplus/refs/heads/develop/compose.yaml" -o $(basename "https://raw.githubusercontent.com/ZoeyVid/NPMplus/refs/heads/develop/compose.yaml") msg_ok "Fetched NPMplus" attempts=0 @@ -95,7 +90,7 @@ customize msg_info "Retrieving Default Login (Patience)" PASSWORD_FOUND=0 for i in {1..60}; do - PASSWORD_LINE=$(docker logs "$CONTAINER_ID" 2>&1 | grep -m1 "Creating a new user:") + PASSWORD_LINE=$(docker logs "$CONTAINER_ID" 2>&1 | awk '/Creating a new user:/ { print; exit }') if [[ -n "$PASSWORD_LINE" ]]; then PASSWORD=$(echo "$PASSWORD_LINE" | awk -F 'password: ' '{print $2}') echo -e "username: admin@example.org\npassword: $PASSWORD" >/opt/.npm_pwd @@ -107,5 +102,6 @@ for i in {1..60}; do done if [[ $PASSWORD_FOUND -eq 0 ]]; then - msg_ok "No default login found, use docker ps & docker logs for container password." + msg_error "Could not retrieve default login after 60 seconds." + echo -e "\nYou can manually check the container logs with:\n docker logs $CONTAINER_ID | grep 'Creating a new user:'\n" fi diff --git a/install/ntfy-install.sh b/install/ntfy-install.sh index a1919785c..25a1acec5 100644 --- a/install/ntfy-install.sh +++ b/install/ntfy-install.sh @@ -14,12 +14,9 @@ network_check update_os msg_info "Installing Dependencies" -$STD apt-get install -y curl -$STD apt-get install -y sudo -$STD apt-get install -y gpg -$STD apt-get install -y apt-transport-https -$STD apt-get install -y wget -$STD apt-get install -y openssh-server +$STD apt-get install -y \ + gpg \ + apt-transport-https msg_ok "Installed Dependencies" msg_info "Installing ntfy" diff --git a/install/nxwitness-install.sh b/install/nxwitness-install.sh index c5728d430..7e1fafd97 100644 --- a/install/nxwitness-install.sh +++ b/install/nxwitness-install.sh @@ -27,10 +27,10 @@ msg_ok "Installed Dependencies" msg_info "Setup Nx Witness" cd /tmp BASE_URL="https://updates.networkoptix.com/default/index.html" -RELEASE=$(curl -s "$BASE_URL" | grep -oP '(?<=)[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+(?=)' | head -n 1) -DETAIL_PAGE=$(curl -s "$BASE_URL#note_$RELEASE") +RELEASE=$(curl -fsSL "$BASE_URL" | grep -oP '(?<=)[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+(?=)' | head -n 1) +DETAIL_PAGE=$(curl -fsSL "$BASE_URL#note_$RELEASE") DOWNLOAD_URL=$(echo "$DETAIL_PAGE" | grep -oP "https://updates.networkoptix.com/default/$RELEASE/linux/nxwitness-server-[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+-linux_x64\.deb" | head -n 1) -wget -q "$DOWNLOAD_URL" -O "nxwitness-server-$RELEASE-linux_x64.deb" +curl -fsSL "$DOWNLOAD_URL" -o ""nxwitness-server-$RELEASE-linux_x64.deb"" export DEBIAN_FRONTEND=noninteractive $STD dpkg -i nxwitness-server-$RELEASE-linux_x64.deb echo "${RELEASE}" >/opt/${APPLICATION}_version.txt diff --git a/install/nzbget-install.sh b/install/nzbget-install.sh index 2a5ad22ff..72d23eff8 100644 --- a/install/nzbget-install.sh +++ b/install/nzbget-install.sh @@ -15,13 +15,10 @@ network_check update_os msg_info "Installing Dependencies" -$STD apt-get install -y curl -$STD apt-get install -y sudo -$STD apt-get install -y mc -$STD apt-get install -y gpg -$STD apt-get install -y par2 -$STD apt-get install -y wget -$STD apt-get install -y openssh-server +$STD apt-get install -y \ + gpg \ + par2 + cat </etc/apt/sources.list.d/non-free.list deb http://deb.debian.org/debian bookworm main contrib non-free non-free-firmware EOF diff --git a/install/octoprint-install.sh b/install/octoprint-install.sh index 37d3c1999..f9d27d9df 100644 --- a/install/octoprint-install.sh +++ b/install/octoprint-install.sh @@ -14,11 +14,9 @@ network_check update_os msg_info "Installing Dependencies" -$STD apt-get install -y git -$STD apt-get install -y libyaml-dev -$STD apt-get install -y build-essential -$STD apt-get install -y wget -$STD apt-get install -y openssh-server +$STD apt-get install -y git \ + libyaml-dev \ + build-essential msg_ok "Installed Dependencies" msg_info "Setup Python3" @@ -26,9 +24,8 @@ $STD apt-get install -y \ python3 \ python3-dev \ python3-pip \ - python3-venv - -$STD apt-get install -y python3-setuptools + python3-venv \ + python3-setuptools rm -rf /usr/lib/python3.*/EXTERNALLY-MANAGED msg_ok "Setup Python3" @@ -68,7 +65,7 @@ ExecStart=/opt/octoprint/bin/octoprint serve [Install] WantedBy=multi-user.target EOF -systemctl enable -q --now octoprint.service +systemctl enable -q --now octoprint msg_ok "Created Service" motd_ssh diff --git a/install/ollama-install.sh b/install/ollama-install.sh index 1cba2b896..5afa6ab72 100644 --- a/install/ollama-install.sh +++ b/install/ollama-install.sh @@ -15,18 +15,23 @@ network_check update_os msg_info "Installing Dependencies" -$STD apt-get install -y gpg -$STD apt-get install -y git -$STD apt-get install -y build-essential -$STD apt-get install -y pkg-config -$STD apt-get install -y cmake +$STD apt-get install -y \ + gpg \ + git \ + build-essential \ + pkg-config \ + cmake msg_ok "Installed Dependencies" msg_info "Installing Golang" -$STD wget https://golang.org/dl/go1.23.2.linux-arm64.tar.gz -$STD tar -xzf go1.23.2.linux-arm64.tar.gz -C /usr/local -$STD ln -s /usr/local/go/bin/go /usr/local/bin/go -rm -rf go1.23.2.linux-arm64.tar.gz +set +o pipefail +temp_file=$(mktemp) +golang_tarball=$(curl -fsSL https://go.dev/dl/ | grep -oP 'go[\d\.]+\.linux-arm64\.tar\.gz' | head -n 1) +curl -fsSL "https://golang.org/dl/${golang_tarball}" -o "$temp_file" +tar -C /usr/local -xzf "$temp_file" +ln -sf /usr/local/go/bin/go /usr/local/bin/go +rm -f "$temp_file" +set -o pipefail msg_ok "Installed Golang" msg_info "Setting up Intel® Repositories" @@ -39,7 +44,7 @@ $STD apt-get update msg_ok "Set up Intel® Repositories" msg_info "Setting Up Hardware Acceleration" -$STD apt-get -y install {va-driver-all,ocl-icd-libopencl1,vainfo,level-zero,level-zero-dev} +$STD apt-get -y install {va-driver-all,ocl-icd-libopencl1,vainfo} if [[ "$CTTYPE" == "0" ]]; then chgrp video /dev/dri chmod 755 /dev/dri @@ -77,7 +82,7 @@ RestartSec=3 [Install] WantedBy=multi-user.target EOF -systemctl enable -q --now ollama.service +systemctl enable -q --now ollama msg_ok "Created Service" motd_ssh diff --git a/install/omada-install.sh b/install/omada-install.sh index ffd719be7..6f116da8b 100644 --- a/install/omada-install.sh +++ b/install/omada-install.sh @@ -14,7 +14,7 @@ network_check update_os msg_info "Installing Dependencies" -$STD apt-get install -y curl sudo mc gnupg jsvc wget openssh-server +$STD apt-get install -y gnupg jsvc msg_ok "Installed Dependencies" msg_info "Checking CPU Features" @@ -30,8 +30,8 @@ else fi msg_info "Installing Azul Zulu Java" -wget -qO /etc/apt/trusted.gpg.d/zulu-repo.asc "https://keyserver.ubuntu.com/pks/lookup?op=get&search=0xB1998361219BD9C9" -wget -q https://cdn.azul.com/zulu/bin/zulu-repo_1.0.0-3_all.deb +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 $STD apt-get update $STD apt-get -y install zulu21-jre-headless @@ -39,7 +39,7 @@ msg_ok "Installed Azul Zulu Java" msg_info "Installing libssl (if needed)" if ! dpkg -l | grep -q 'libssl1.1'; then - wget -qO /tmp/libssl.deb "https://security.debian.org/debian-security/pool/updates/main/o/openssl/libssl1.1_1.1.1w-0+deb11u2_arm64.deb" + curl -fsSL "http://ports.ubuntu.com/pool/main/o/openssl/libssl1.1_1.1.1f-1ubuntu2.24_arm64.deb" -o "/tmp/libssl.deb" $STD dpkg -i /tmp/libssl.deb rm -f /tmp/libssl.deb msg_ok "Installed libssl1.1" @@ -48,18 +48,18 @@ else fi msg_info "Installing MongoDB $MONGODB_VERSION" -wget -qO- https://www.mongodb.org/static/pgp/server-${MONGODB_VERSION}.asc | gpg --dearmor >/usr/share/keyrings/mongodb-server-${MONGODB_VERSION}.gpg +curl -fsSL "https://www.mongodb.org/static/pgp/server-${MONGODB_VERSION}.asc" | gpg --dearmor >/usr/share/keyrings/mongodb-server-${MONGODB_VERSION}.gpg echo "deb [signed-by=/usr/share/keyrings/mongodb-server-${MONGODB_VERSION}.gpg] http://repo.mongodb.org/apt/debian $(grep '^VERSION_CODENAME=' /etc/os-release | cut -d'=' -f2)/mongodb-org/${MONGODB_VERSION} main" >/etc/apt/sources.list.d/mongodb-org-${MONGODB_VERSION}.list $STD apt-get update $STD apt-get install -y mongodb-org msg_ok "Installed MongoDB $MONGODB_VERSION" msg_info "Installing Omada Controller" -latest_url=$(curl -s "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_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") -wget -qL ${latest_url} -$STD dpkg -i --ignore-depends=jsvc,mongodb-server ${latest_version} +curl -fsSL "${latest_url}" -O +$STD dpkg -i ${latest_version} msg_ok "Installed Omada Controller" motd_ssh diff --git a/install/ombi-install.sh b/install/ombi-install.sh index bd94f169b..50d16fd35 100644 --- a/install/ombi-install.sh +++ b/install/ombi-install.sh @@ -13,17 +13,9 @@ setting_up_container network_check update_os -msg_info "Installing Dependencies" -$STD apt-get install -y curl -$STD apt-get install -y sudo -$STD apt-get install -y mc -$STD apt-get install -y wget -$STD apt-get install -y openssh-server -msg_ok "Installed Dependencies" - msg_info "Installing Ombi" -RELEASE=$(curl -sL https://api.github.com/repos/Ombi-app/Ombi/releases/latest | grep '"tag_name":' | cut -d'"' -f4) -wget -q https://github.com/Ombi-app/Ombi/releases/download/${RELEASE}/linux-arm64.tar.gz +RELEASE=$(curl -fsSL https://api.github.com/repos/Ombi-app/Ombi/releases/latest | grep '"tag_name":' | cut -d'"' -f4) +curl -fsSL "https://github.com/Ombi-app/Ombi/releases/download/${RELEASE}/linux-arm64.tar.gz" -o $(basename "https://github.com/Ombi-app/Ombi/releases/download/${RELEASE}/linux-arm64.tar.gz") echo "${RELEASE}" >/opt/${APPLICATION}_version.txt mkdir -p /opt/ombi tar -xzf linux-arm64.tar.gz -C /opt/ombi @@ -44,7 +36,7 @@ Restart=always [Install] WantedBy=multi-user.target EOF -systemctl enable -q --now ombi.service +systemctl enable -q --now ombi msg_ok "Created Service" motd_ssh diff --git a/install/omv-install.sh b/install/omv-install.sh index cfccd5fa9..7372d53a7 100644 --- a/install/omv-install.sh +++ b/install/omv-install.sh @@ -20,7 +20,7 @@ $STD apt-get install -y openssh-server msg_ok "Installed Dependencies" msg_info "Installing OpenMediaVault (Patience)" -wget -qO- https://packages.openmediavault.org/public/archive.key | gpg --dearmor >"/etc/apt/trusted.gpg.d/openmediavault-archive-keyring.gpg" +curl -fsSL "https://packages.openmediavault.org/public/archive.key" | gpg --dearmor >"/etc/apt/trusted.gpg.d/openmediavault-archive-keyring.gpg" cat </etc/apt/sources.list.d/openmediavault.list deb [signed-by=/etc/apt/trusted.gpg.d/openmediavault-archive-keyring.gpg] http://packages.openmediavault.org/public sandworm main EOF diff --git a/install/onedev-install.sh b/install/onedev-install.sh index 885ba5572..729347c47 100644 --- a/install/onedev-install.sh +++ b/install/onedev-install.sh @@ -24,7 +24,7 @@ msg_ok "Installed Dependencies" msg_info "Installing OneDev" cd /opt -wget -q https://code.onedev.io/onedev/server/~site/onedev-latest.tar.gz +curl -fsSL "https://code.onedev.io/onedev/server/~site/onedev-latest.tar.gz" -o $(basename "https://code.onedev.io/onedev/server/~site/onedev-latest.tar.gz") tar -xzf onedev-latest.tar.gz mv /opt/onedev-latest /opt/onedev $STD /opt/onedev/bin/server.sh install diff --git a/install/opengist-install.sh b/install/opengist-install.sh index 4d2f7245d..0f6014b77 100644 --- a/install/opengist-install.sh +++ b/install/opengist-install.sh @@ -14,19 +14,13 @@ network_check update_os msg_info "Installing Dependencies" -$STD apt-get install -y \ - mc \ - curl \ - sudo \ - git \ - wget \ - openssh-server +$STD apt-get install -y git msg_ok "Installed Dependencies" msg_info "Install Opengist" -RELEASE=$(curl -s https://api.github.com/repos/thomiceli/opengist/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') +RELEASE=$(curl -fsSL https://api.github.com/repos/thomiceli/opengist/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt" -wget -q "https://github.com/thomiceli/opengist/releases/download/v${RELEASE}/opengist${RELEASE}-linux-arm64.tar.gz" +curl -fsSL "https://github.com/thomiceli/opengist/releases/download/v${RELEASE}/opengist${RELEASE}-linux-arm64.tar.gz" -o $(basename "https://github.com/thomiceli/opengist/releases/download/v${RELEASE}/opengist${RELEASE}-linux-arm64.tar.gz") $STD tar -xzf opengist${RELEASE}-linux-arm64.tar.gz mv opengist /opt/opengist chmod +x /opt/opengist/opengist @@ -51,7 +45,7 @@ User=root [Install] WantedBy=multi-user.target EOF -systemctl enable -q --now opengist.service +systemctl enable -q --now opengist msg_ok "Created Service" motd_ssh diff --git a/install/openhab-install.sh b/install/openhab-install.sh index 9750f036c..4bece4377 100644 --- a/install/openhab-install.sh +++ b/install/openhab-install.sh @@ -14,15 +14,14 @@ network_check update_os msg_info "Installing Dependencies" -$STD apt-get install -y gnupg -$STD apt-get install -y apt-transport-https -$STD apt-get install -y wget -$STD apt-get install -y openssh-server +$STD apt-get install -y \ + gnupg \ + apt-transport-https msg_ok "Installed Dependencies" msg_info "Installing Azul Zulu21" -wget -qO /etc/apt/trusted.gpg.d/zulu-repo.asc "https://keyserver.ubuntu.com/pks/lookup?op=get&search=0xB1998361219BD9C9" -wget -q https://cdn.azul.com/zulu/bin/zulu-repo_1.0.0-3_all.deb +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 $STD apt-get update $STD apt-get -y install zulu21-jdk @@ -36,7 +35,7 @@ echo "deb [signed-by=/usr/share/keyrings/openhab.gpg] https://openhab.jfrog.io/a $STD apt update $STD apt-get -y install openhab systemctl daemon-reload -systemctl enable -q --now openhab.service +systemctl enable -q --now openhab msg_ok "Installed openHAB" motd_ssh diff --git a/install/openobserve-install.sh b/install/openobserve-install.sh index d666641f9..6f8c8e8cc 100644 --- a/install/openobserve-install.sh +++ b/install/openobserve-install.sh @@ -13,17 +13,9 @@ setting_up_container network_check update_os -msg_info "Installing Dependencies" -$STD apt-get install -y curl -$STD apt-get install -y sudo -$STD apt-get install -y mc -$STD apt-get install -y wget -$STD apt-get install -y openssh-server -msg_ok "Installed Dependencies" - msg_info "Installing OpenObserve" mkdir -p /opt/openobserve/data -LATEST=$(curl -sL https://api.github.com/repos/openobserve/openobserve/releases/latest | grep '"tag_name":' | cut -d'"' -f4) +LATEST=$(curl -fsSL https://api.github.com/repos/openobserve/openobserve/releases/latest | grep '"tag_name":' | cut -d'"' -f4) $STD tar zxvf <(curl -fsSL https://github.com/openobserve/openobserve/releases/download/$LATEST/openobserve-${LATEST}-linux-arm64.tar.gz) -C /opt/openobserve cat </opt/openobserve/data/.env diff --git a/install/openwebui-install.sh b/install/openwebui-install.sh index 9c6605f9f..e69c5a797 100644 --- a/install/openwebui-install.sh +++ b/install/openwebui-install.sh @@ -80,7 +80,7 @@ RestartSec=3 [Install] WantedBy=multi-user.target EOF - systemctl enable -q --now ollama.service + systemctl enable -q --now ollama sed -i 's/ENABLE_OLLAMA_API=false/ENABLE_OLLAMA_API=true/g' /opt/open-webui/.env msg_ok "Installed Ollama" fi @@ -100,7 +100,7 @@ ExecStart=/opt/open-webui/backend/start.sh [Install] WantedBy=multi-user.target EOF -systemctl enable -q --now open-webui.service +systemctl enable -q --now open-webui msg_ok "Created Service" motd_ssh diff --git a/install/openziti-tunnel-install.sh b/install/openziti-tunnel-install.sh new file mode 100644 index 000000000..97d85e924 --- /dev/null +++ b/install/openziti-tunnel-install.sh @@ -0,0 +1,48 @@ +#!/usr/bin/env bash + +# Copyright (c) 2021-2025 community-scripts ORG +# Author: emoscardini +# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE +# Source: https://github.com/openziti/ziti + +source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" +color +verb_ip6 +catch_errors +setting_up_container +network_check +update_os + +msg_info "Installing Dependencies" +$STD apt-get install -y gpg +msg_ok "Installed Dependencies" + +msg_info "Installing openziti" +mkdir -p --mode=0755 /usr/share/keyrings +curl -sSLf https://get.openziti.io/tun/package-repos.gpg | gpg --dearmor -o /usr/share/keyrings/openziti.gpg +echo "deb [signed-by=/usr/share/keyrings/openziti.gpg] https://packages.openziti.org/zitipax-openziti-deb-stable jammy main" >/etc/apt/sources.list.d/openziti.list +$STD apt-get update +$STD apt-get install -y ziti-edge-tunnel +sed -i '0,/^ExecStart/ { /^ExecStart/ { n; s|^ExecStart.*|ExecStart=/opt/openziti/bin/ziti-edge-tunnel run-host --verbose=${ZITI_VERBOSE} --identity-dir=${ZITI_IDENTITY_DIR}| } }' /usr/lib/systemd/system/ziti-edge-tunnel.service +systemctl daemon-reload +msg_ok "Installed openziti" + +read -r -p "Please paste an identity enrollment token(JTW)" prompt +if [[ ${prompt} ]]; then + msg_info "Adding identity" + echo "${prompt}" >/opt/openziti/etc/identities/identity.jwt + chown ziti:ziti /opt/openziti/etc/identities/identity.jwt + systemctl enable -q --now ziti-edge-tunnel + msg_ok "Service Started" +else + systemctl enable -q ziti-edge-tunnel + msg_error "No identity provided; please place an identity file in /opt/openziti/etc/identities/ and restart the service" +fi + +motd_ssh +customize + +msg_info "Cleaning up" +$STD apt-get -y autoremove +$STD apt-get -y autoclean +msg_ok "Cleaned" diff --git a/install/outline-install.sh b/install/outline-install.sh index 5ac07bcc5..236b7b14e 100644 --- a/install/outline-install.sh +++ b/install/outline-install.sh @@ -54,8 +54,8 @@ msg_ok "Set up PostgreSQL" msg_info "Setup Outline (Patience)" temp_file=$(mktemp) LOCAL_IP="$(hostname -I | awk '{print $1}')" -RELEASE=$(curl -s https://api.github.com/repos/outline/outline/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') -wget -q "https://github.com/outline/outline/archive/refs/tags/v${RELEASE}.tar.gz" -O $temp_file +RELEASE=$(curl -fsSL https://api.github.com/repos/outline/outline/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') +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 diff --git a/install/overseerr-install.sh b/install/overseerr-install.sh index 34ba2c100..600335782 100644 --- a/install/overseerr-install.sh +++ b/install/overseerr-install.sh @@ -14,11 +14,10 @@ network_check update_os msg_info "Installing Dependencies" -$STD apt-get install -y git -$STD apt-get install -y ca-certificates -$STD apt-get install -y gnupg -$STD apt-get install -y wget -$STD apt-get install -y openssh-server +$STD apt-get install -y \ + git \ + ca-certificates \ + gnupg msg_ok "Installed Dependencies" msg_info "Setting up Node.js Repository" @@ -57,7 +56,7 @@ ExecStart=/usr/bin/yarn start [Install] WantedBy=multi-user.target EOF -systemctl enable -q --now overseerr.service +systemctl enable -q --now overseerr msg_ok "Created Service" motd_ssh diff --git a/install/owncast-install.sh b/install/owncast-install.sh index 1cf459eb1..dc183cd79 100644 --- a/install/owncast-install.sh +++ b/install/owncast-install.sh @@ -22,7 +22,7 @@ msg_ok "Installed Dependencies" msg_info "Installing Owncast" mkdir /opt/owncast cd /opt/owncast -wget -q $(curl -s https://api.github.com/repos/owncast/owncast/releases/latest | grep download | grep linux-arm64 | cut -d\" -f4) +curl -fsSL "$(curl -fsSL https://api.github.com/repos/owncast/owncast/releases/latest | grep download | grep linux-arm64 | cut -d\" -f4)" -o $(basename "$(curl -fsSL https://api.github.com/repos/owncast/owncast/releases/latest | grep download | grep linux-arm64 | cut -d\" -f4)") $STD unzip owncast*.zip rm owncast*.zip msg_ok "Installed Owncast" @@ -41,7 +41,7 @@ Restart=always [Install] WantedBy=multi-user.target EOF -systemctl enable -q --now owncast.service +systemctl enable -q --now owncast msg_ok "Created Service" motd_ssh diff --git a/install/pairdrop-install.sh b/install/pairdrop-install.sh index 6971366ed..907937c93 100644 --- a/install/pairdrop-install.sh +++ b/install/pairdrop-install.sh @@ -14,10 +14,9 @@ network_check update_os msg_info "Installing Dependencies" -$STD apt-get install -y git -$STD apt-get install -y gpg -$STD apt-get install -y wget -$STD apt-get install -y openssh-server +$STD apt-get install -y \ + git \ + gpg msg_ok "Installed Dependencies" msg_info "Setting up Node.js Repository" @@ -51,7 +50,7 @@ Restart=always [Install] WantedBy=multi-user.target EOF -systemctl enable -q --now pairdrop.service +systemctl enable -q --now pairdrop msg_ok "Created Service" motd_ssh diff --git a/install/paperless-ai-install.sh b/install/paperless-ai-install.sh index c9513997e..bdd0b6a7f 100644 --- a/install/paperless-ai-install.sh +++ b/install/paperless-ai-install.sh @@ -16,9 +16,6 @@ update_os msg_info "Installing Dependencies" $STD apt-get install -y \ gpg \ - make \ - gcc \ - g++ \ build-essential msg_ok "Installed Dependencies" @@ -35,8 +32,8 @@ msg_ok "Installed Node.js" msg_info "Setup Paperless-AI" cd /opt -RELEASE=$(curl -s https://api.github.com/repos/clusterzx/paperless-ai/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') -wget -q "https://github.com/clusterzx/paperless-ai/archive/refs/tags/v${RELEASE}.zip" +RELEASE=$(curl -fsSL https://api.github.com/repos/clusterzx/paperless-ai/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') +curl -fsSL "https://github.com/clusterzx/paperless-ai/archive/refs/tags/v${RELEASE}.zip" -o $(basename "https://github.com/clusterzx/paperless-ai/archive/refs/tags/v${RELEASE}.zip") unzip -q v${RELEASE}.zip mv paperless-ai-${RELEASE} /opt/paperless-ai cd /opt/paperless-ai @@ -82,7 +79,7 @@ Restart=always [Install] WantedBy=multi-user.target EOF -systemctl enable -q --now paperless-ai.service +systemctl enable -q --now paperless-ai msg_ok "Created Service" motd_ssh diff --git a/install/paperless-gpt-install.sh b/install/paperless-gpt-install.sh index f8ed8b0f3..00e195fa6 100644 --- a/install/paperless-gpt-install.sh +++ b/install/paperless-gpt-install.sh @@ -38,8 +38,8 @@ msg_ok "Installed Node.js" msg_info "Installing Golang" set +o pipefail temp_file=$(mktemp) -golang_tarball=$(curl -s https://go.dev/dl/ | grep -oP 'go[\d\.]+\.linux-amd64\.tar\.gz' | head -n 1) -wget -q https://golang.org/dl/"$golang_tarball" -O "$temp_file" +golang_tarball=$(curl -fsSL https://go.dev/dl/ | grep -oP 'go[\d\.]+\.linux-amd64\.tar\.gz' | head -n 1) +curl -fsSL "https://golang.org/dl/${golang_tarball}" -o "$temp_file" tar -C /usr/local -xzf "$temp_file" ln -sf /usr/local/go/bin/go /usr/local/bin/go rm -f "$temp_file" @@ -48,8 +48,8 @@ msg_ok "Installed Golang" msg_info "Setup Paperless-GPT" temp_file=$(mktemp) -RELEASE=$(curl -s https://api.github.com/repos/icereed/paperless-gpt/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') -wget -q "https://github.com/icereed/paperless-gpt/archive/refs/tags/v${RELEASE}.tar.gz" -O $temp_file +RELEASE=$(curl -fsSL https://api.github.com/repos/icereed/paperless-gpt/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') +curl -fsSL "https://github.com/icereed/paperless-gpt/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file" tar zxf $temp_file mv paperless-gpt-${RELEASE} /opt/paperless-gpt cd /opt/paperless-gpt/web-app @@ -130,4 +130,4 @@ msg_info "Cleaning up" rm -f $temp_file $STD apt-get -y autoremove $STD apt-get -y autoclean -msg_ok "Cleaned" +msg_ok "Cleaned" \ No newline at end of file diff --git a/install/paperless-ngx-install.sh b/install/paperless-ngx-install.sh index c1653bb14..40f58e3c0 100644 --- a/install/paperless-ngx-install.sh +++ b/install/paperless-ngx-install.sh @@ -34,12 +34,7 @@ $STD apt-get install -y \ git \ libtiff-dev \ libpng-dev \ - libleptonica-dev \ - sudo \ - mc \ - curl \ - wget \ - openssh-server + libleptonica-dev msg_ok "Installed Dependencies" msg_info "Setup Python3" @@ -63,10 +58,10 @@ $STD apt-get install -y \ tesseract-ocr \ tesseract-ocr-eng -cd /tmp -wget -q https://github.com/ArtifexSoftware/ghostpdl-downloads/releases/download/gs10040/ghostscript-10.04.0.tar.gz +cd /tmp || exit +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 +cd ghostscript-10.04.0 || exit $STD ./configure $STD make $STD sudo make install @@ -74,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 +cd /opt/jbig2enc || exit $STD bash ./autogen.sh $STD bash ./configure $STD make @@ -83,24 +78,23 @@ rm -rf /opt/jbig2enc msg_ok "Installed JBIG2" msg_info "Installing Paperless-ngx (Patience)" -Paperlessngx=$(wget -q https://github.com/paperless-ngx/paperless-ngx/releases/latest -O - | grep "title>Release" | cut -d " " -f 5) -cd /opt -$STD wget https://github.com/paperless-ngx/paperless-ngx/releases/download/$Paperlessngx/paperless-ngx-$Paperlessngx.tar.xz -$STD tar -xf paperless-ngx-$Paperlessngx.tar.xz -C /opt/ +Paperlessngx=$(curl -fsSL "https://github.com/paperless-ngx/paperless-ngx/releases/latest" | grep "title>Release" | cut -d " " -f 5) +cd /opt || exit +$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 -rm -rf /usr/lib/python3.*/EXTERNALLY-MANAGED +rm "paperless-ngx-$Paperlessngx.tar.xz" +cd /opt/paperless || exit $STD pip install --upgrade pip $STD pip install -r requirements.txt -curl -s -o /opt/paperless/paperless.conf https://raw.githubusercontent.com/paperless-ngx/paperless-ngx/main/paperless.conf.example +curl -fsSL "https://raw.githubusercontent.com/paperless-ngx/paperless-ngx/main/paperless.conf.example" -o /opt/paperless/paperless.conf mkdir -p {consume,data,media,static} sed -i -e 's|#PAPERLESS_REDIS=redis://localhost:6379|PAPERLESS_REDIS=redis://localhost:6379|' /opt/paperless/paperless.conf sed -i -e "s|#PAPERLESS_CONSUMPTION_DIR=../consume|PAPERLESS_CONSUMPTION_DIR=/opt/paperless/consume|" /opt/paperless/paperless.conf sed -i -e "s|#PAPERLESS_DATA_DIR=../data|PAPERLESS_DATA_DIR=/opt/paperless/data|" /opt/paperless/paperless.conf sed -i -e "s|#PAPERLESS_MEDIA_ROOT=../media|PAPERLESS_MEDIA_ROOT=/opt/paperless/media|" /opt/paperless/paperless.conf sed -i -e "s|#PAPERLESS_STATICDIR=../static|PAPERLESS_STATICDIR=/opt/paperless/static|" /opt/paperless/paperless.conf -echo "${Paperlessngx}" >/opt/${APPLICATION}_version.txt +echo "${Paperlessngx}" >/opt/"${APPLICATION}"_version.txt msg_ok "Installed Paperless-ngx" msg_info "Installing Natural Language Toolkit (Patience)" @@ -127,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 +cd /opt/paperless/src || exit $STD python3 manage.py migrate msg_ok "Set up PostgreSQL database" diff --git a/install/part-db-install.sh b/install/part-db-install.sh index 48c2dc59a..9a78787d5 100644 --- a/install/part-db-install.sh +++ b/install/part-db-install.sh @@ -59,8 +59,8 @@ msg_ok "Installed Node.js/Yarn" msg_info "Installing Part-DB (Patience)" cd /opt -RELEASE=$(curl -s https://api.github.com/repos/Part-DB/Part-DB-server/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') -wget -q "https://github.com/Part-DB/Part-DB-server/archive/refs/tags/v${RELEASE}.zip" +RELEASE=$(curl -fsSL https://api.github.com/repos/Part-DB/Part-DB-server/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') +curl -fsSL "https://github.com/Part-DB/Part-DB-server/archive/refs/tags/v${RELEASE}.zip" -o $(basename "https://github.com/Part-DB/Part-DB-server/archive/refs/tags/v${RELEASE}.zip") unzip -q "v${RELEASE}.zip" mv /opt/Part-DB-server-${RELEASE}/ /opt/partdb diff --git a/install/paymenter-install.sh b/install/paymenter-install.sh index 53c6d5a52..642e0681f 100644 --- a/install/paymenter-install.sh +++ b/install/paymenter-install.sh @@ -25,15 +25,15 @@ $STD apt-get install -y \ mariadb-server \ nginx \ redis-server -$STD curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer +$STD curl -fsSL https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer msg_ok "Installed Dependencies" msg_info "Installing Paymenter" -RELEASE=$(curl -s https://api.github.com/repos/paymenter/paymenter/releases/latest | grep '"tag_name"' | sed -E 's/.*"tag_name": "([^"]+)".*/\1/') +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 -wget -q "https://github.com/paymenter/paymenter/releases/download/${RELEASE}/paymenter.tar.gz" +curl -fsSL "https://github.com/paymenter/paymenter/releases/download/${RELEASE}/paymenter.tar.gz" -o $(basename "https://github.com/paymenter/paymenter/releases/download/${RELEASE}/paymenter.tar.gz") $STD tar -xzvf paymenter.tar.gz chmod -R 755 storage/* bootstrap/cache/ msg_ok "Installed Paymenter" @@ -47,10 +47,10 @@ mysql -u root -e "CREATE DATABASE $DB_NAME;" mysql -u root -e "CREATE USER '$DB_USER'@'localhost' IDENTIFIED BY '$DB_PASS';" mysql -u root -e "GRANT ALL PRIVILEGES ON $DB_NAME.* TO '$DB_USER'@'localhost' WITH GRANT OPTION;" { - echo "Paymenter Database Credentials" - echo "Database: $DB_NAME" - echo "Username: $DB_USER" - echo "Password: $DB_PASS" + echo "Paymenter Database Credentials" + echo "Database: $DB_NAME" + echo "Username: $DB_USER" + echo "Password: $DB_PASS" } >>~/paymenter_db.creds cp .env.example .env $STD composer install --no-dev --optimize-autoloader --no-interaction @@ -125,7 +125,7 @@ RestartSec=5s [Install] WantedBy=multi-user.target EOF -$STD systemctl enable --now paymenter.service +$STD systemctl enable --now paymenter msg_ok "Setup Service" msg_info "Cleaning up" diff --git a/install/peanut-install.sh b/install/peanut-install.sh index 8bc3c2fca..b55ffd152 100644 --- a/install/peanut-install.sh +++ b/install/peanut-install.sh @@ -33,8 +33,8 @@ $STD apt-get install -y nut-client msg_ok "Installed NUT" msg_info "Installing Peanut" -RELEASE=$(curl -sL https://api.github.com/repos/Brandawg93/PeaNUT/releases/latest | grep '"tag_name":' | cut -d'"' -f4) -wget -qO peanut.tar.gz https://api.github.com/repos/Brandawg93/PeaNUT/tarball/${RELEASE} +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 rm peanut.tar.gz @@ -75,7 +75,7 @@ TimeoutStopSec=30 [Install] WantedBy=multi-user.target EOF -systemctl enable -q --now peanut.service +systemctl enable -q --now peanut msg_ok "Created Service" motd_ssh diff --git a/install/pelican-panel-install.sh b/install/pelican-panel-install.sh index 604683bf3..1c7342dc3 100644 --- a/install/pelican-panel-install.sh +++ b/install/pelican-panel-install.sh @@ -22,19 +22,19 @@ $STD apt-get install -y \ composer msg_ok "Installed Dependencies" -msg_info "Adding PHP8.3 Repository" +msg_info "Adding PHP8.4 Repository" $STD curl -sSLo /tmp/debsuryorg-archive-keyring.deb https://packages.sury.org/debsuryorg-archive-keyring.deb $STD dpkg -i /tmp/debsuryorg-archive-keyring.deb $STD sh -c 'echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list' $STD apt-get update -msg_ok "Added PHP8.3 Repository" +msg_ok "Added PHP8.4 Repository" msg_info "Installing PHP" $STD apt-get remove -y php8.2* $STD apt-get install -y \ - php8.3 \ - php8.3-{gd,mysql,mbstring,bcmath,xml,curl,zip,intl,sqlite3,fpm} \ - libapache2-mod-php8.3 + php8.4 \ + php8.4-{gd,mysql,mbstring,bcmath,xml,curl,zip,intl,sqlite3,fpm} \ + libapache2-mod-php8.4 msg_info "Installed PHP" msg_info "Setting up MariaDB" @@ -53,10 +53,10 @@ $STD mysql -u root -e "GRANT ALL ON $DB_NAME.* TO '$DB_USER'@'localhost'; FLUSH msg_ok "Set up MariaDB" msg_info "Installing Pelican Panel" -RELEASE=$(curl -s https://api.github.com/repos/pelican-dev/panel/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') +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 -wget -q "https://github.com/pelican-dev/panel/releases/download/v${RELEASE}/panel.tar.gz" +cd /opt/pelican-panel || exit +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 $STD php artisan p:environment:setup @@ -64,7 +64,7 @@ $STD php artisan p:environment:queue-service --no-interaction echo "* * * * * php /opt/pelican-panel/artisan schedule:run >> /dev/null 2>&1" | crontab -u www-data - chown -R www-data:www-data /opt/pelican-panel chmod -R 755 /opt/pelican-panel/storage /opt/pelican-panel/bootstrap/cache/ -echo "${RELEASE}" >/opt/${APPLICATION}_version.txt +echo "${RELEASE}" >/opt/"${APPLICATION}"_version.txt msg_ok "Installed Pelican Panel" msg_info "Creating Service" diff --git a/install/pelican-wings-install.sh b/install/pelican-wings-install.sh index 35dfc124a..d29686339 100644 --- a/install/pelican-wings-install.sh +++ b/install/pelican-wings-install.sh @@ -17,13 +17,13 @@ msg_info "Installing Docker" DOCKER_CONFIG_PATH='/etc/docker/daemon.json' mkdir -p $(dirname $DOCKER_CONFIG_PATH) echo -e '{\n "log-driver": "journald"\n}' >/etc/docker/daemon.json -$STD sh <(curl -sSL https://get.docker.com) +$STD sh <(curl -fsSL https://get.docker.com) systemctl enable -q --now docker msg_ok "Installed Docker" msg_info "Installing Pelican Wings" -RELEASE=$(curl -s https://api.github.com/repos/pelican-dev/wings/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') -wget -q -O /usr/local/bin/wings "https://github.com/pelican-dev/wings/releases/download/v${RELEASE}/wings_linux_amd64" +RELEASE=$(curl -fsSL https://api.github.com/repos/pelican-dev/wings/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') +curl -fsSL "https://github.com/pelican-dev/wings/releases/download/v${RELEASE}/wings_linux_amd64" -o "/usr/local/bin/wings" chmod u+x /usr/local/bin/wings mkdir -p /etc/pelican /var/run/wings echo "${RELEASE}" >/opt/${APPLICATION}_version.txt diff --git a/install/petio-install.sh b/install/petio-install.sh index a0d791c9b..dc472c01c 100644 --- a/install/petio-install.sh +++ b/install/petio-install.sh @@ -23,7 +23,7 @@ $STD apt-get install -y openssh-server msg_ok "Installed Dependencies" msg_info "Installing MongoDB 4.4" -wget -qO- https://www.mongodb.org/static/pgp/server-4.4.asc | gpg --dearmor >/usr/share/keyrings/mongodb-server-4.4.gpg +curl -fsSL "https://www.mongodb.org/static/pgp/server-4.4.asc" | gpg --dearmor >/usr/share/keyrings/mongodb-server-4.4.gpg # Determine OS ID OS_ID=$(grep '^ID=' /etc/os-release | cut -d'=' -f2) @@ -36,13 +36,13 @@ fi $STD apt-get update $STD apt-get install -y mongodb-org sed -i 's/bindIp: 127.0.0.1/bindIp: 0.0.0.0/' /etc/mongod.conf -systemctl enable -q --now mongod.service +systemctl enable -q --now mongod msg_ok "MongoDB 4.4 Installed" msg_info "Installing Petio" useradd -M --shell=/bin/false petio mkdir /opt/Petio -wget -q https://petio.tv/releases/latest -O petio-latest.zip +curl -fsSL "https://petio.tv/releases/latest" -o "petio-latest.zip" $STD unzip -q petio-latest.zip -d /opt/Petio rm -rf petio-latest.zip chown -R petio:petio /opt/Petio @@ -66,7 +66,7 @@ WantedBy=multi-user.target EOF -systemctl enable -q --now petio.service +systemctl enable -q --now petio msg_ok "Created Service" motd_ssh diff --git a/install/pf2etools-install.sh b/install/pf2etools-install.sh index 7cf2ac9a8..4c478f364 100644 --- a/install/pf2etools-install.sh +++ b/install/pf2etools-install.sh @@ -36,8 +36,8 @@ msg_ok "Installed Node.js" msg_info "Setup Pf2eTools" cd /opt -RELEASE=$(curl -s https://api.github.com/repos/Pf2eToolsOrg/Pf2eTools/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') -wget -q "https://github.com/Pf2eToolsOrg/Pf2eTools/archive/refs/tags/${RELEASE}.zip" +RELEASE=$(curl -fsSL https://api.github.com/repos/Pf2eToolsOrg/Pf2eTools/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') +curl -fsSL "https://github.com/Pf2eToolsOrg/Pf2eTools/archive/refs/tags/${RELEASE}.zip" -o $(basename "https://github.com/Pf2eToolsOrg/Pf2eTools/archive/refs/tags/${RELEASE}.zip") unzip -q "${RELEASE}.zip" mv "Pf2eTools-${RELEASE:1}" /opt/Pf2eTools cd /opt/Pf2eTools diff --git a/install/photoprism-install.sh b/install/photoprism-install.sh index eb4284f64..066d9a2d9 100644 --- a/install/photoprism-install.sh +++ b/install/photoprism-install.sh @@ -25,9 +25,7 @@ $STD apt-get install -y \ darktable \ rawtherapee \ libvips42 \ - lsb-release \ - wget \ - openssh-server + lsb-release echo 'export PATH=/usr/local:$PATH' >>~/.bashrc export PATH=/usr/local:$PATH @@ -37,9 +35,9 @@ msg_info "Installing PhotoPrism (Patience)" mkdir -p /opt/photoprism/{cache,config,photos,storage,temp} mkdir -p /opt/photoprism/photos/{originals,import} mkdir -p /opt/photoprism_backups -wget -q -cO - https://dl.photoprism.app/pkg/linux/arm64.tar.gz | tar -xz -C /opt/photoprism --strip-components=1 -LIBHEIF_URL=$(wget -q -O - "https://dl.photoprism.app/dist/libheif/" | grep -oP "libheif-$(lsb_release -cs)-arm64-v[0-9\.]+\.tar\.gz" | sort -V | tail -n 1) -wget -q -cO - "https://dl.photoprism.app/dist/libheif/$LIBHEIF_URL" | tar -xzf - -C /usr/local --strip-components=1 +curl -fsSL https://dl.photoprism.app/pkg/linux/arm64.tar.gz | tar -xz -C /opt/photoprism --strip-components=1 +LIBHEIF_URL=$(curl -fsSL "https://dl.photoprism.app/dist/libheif/" | grep -oP "libheif-$(lsb_release -cs)-arm64-v[0-9\.]+\.tar\.gz" | sort -V | tail -n 1) +curl -fsSL "https://dl.photoprism.app/dist/libheif/$LIBHEIF_URL" | tar -xzf - -C /usr/local --strip-components=1 ldconfig chmod -R 755 /opt/photoprism/photos/originals cat </opt/photoprism/config/.env diff --git a/install/phpipam-install.sh b/install/phpipam-install.sh index 327bb047c..554278f4b 100644 --- a/install/phpipam-install.sh +++ b/install/phpipam-install.sh @@ -43,9 +43,9 @@ $STD mysql -u root -e "GRANT ALL ON $DB_NAME.* TO '$DB_USER'@'localhost'; FLUSH msg_ok "Set up MariaDB" msg_info "Installing phpIPAM" -RELEASE=$(curl -s https://api.github.com/repos/phpipam/phpipam/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') +RELEASE=$(curl -fsSL https://api.github.com/repos/phpipam/phpipam/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') cd /opt -wget -q "https://github.com/phpipam/phpipam/releases/download/v${RELEASE}/phpipam-v${RELEASE}.zip" +curl -fsSL "https://github.com/phpipam/phpipam/releases/download/v${RELEASE}/phpipam-v${RELEASE}.zip" -o $(basename "https://github.com/phpipam/phpipam/releases/download/v${RELEASE}/phpipam-v${RELEASE}.zip") unzip -q "phpipam-v${RELEASE}.zip" mysql -u root "${DB_NAME}" /dev/null 2>&1 +curl -fsSL https://github.com/leiweibau/Pi.Alert/raw/main/tar/pialert_latest.tar | tar xvf - -C /opt >/dev/null 2>&1 rm -rf /var/lib/ieee-data /var/www/html/index.html sed -i -e 's#^sudo cp -n /usr/share/ieee-data/.* /var/lib/ieee-data/#\# &#' -e '/^sudo mkdir -p 2_backup$/s/^/# /' -e '/^sudo cp \*.txt 2_backup$/s/^/# /' -e '/^sudo cp \*.csv 2_backup$/s/^/# /' /opt/pialert/back/update_vendors.sh mv /var/www/html/index.lighttpd.html /var/www/html/index.lighttpd.html.old diff --git a/install/pihole-install.sh b/install/pihole-install.sh index 73d3a7478..4db216c76 100644 --- a/install/pihole-install.sh +++ b/install/pihole-install.sh @@ -5,7 +5,7 @@ # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE # Source: https://pi-hole.net/ -source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" +source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" color verb_ip6 catch_errors @@ -52,7 +52,7 @@ sed -i -E ' /^\s*expandHosts =/ s|=.*|= true| ' /etc/pihole/pihole.toml -cat < /etc/dnsmasq.d/01-pihole.conf +cat </etc/dnsmasq.d/01-pihole.conf server=8.8.8.8 server=8.8.4.4 EOF @@ -137,7 +137,7 @@ forward-zone: #forward-addr: 2620:fe::9@853#dns.quad9.net EOF fi -cat < /etc/dnsmasq.d/01-pihole.conf + cat </etc/dnsmasq.d/01-pihole.conf server=127.0.0.1#5335 server=8.8.8.8 server=8.8.4.4 diff --git a/install/pingvin-install.sh b/install/pingvin-install.sh index cbc12d937..305dd53cb 100644 --- a/install/pingvin-install.sh +++ b/install/pingvin-install.sh @@ -6,7 +6,7 @@ # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE # Source: https://stonith404.github.io/pingvin-share/introduction -source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" +source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" color verb_ip6 catch_errors @@ -36,9 +36,9 @@ msg_ok "Installed Node.js" msg_info "Installing Pingvin Share (Patience)" cd /opt -RELEASE=$(curl -s https://api.github.com/repos/stonith404/pingvin-share/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') +RELEASE=$(curl -fsSL https://api.github.com/repos/stonith404/pingvin-share/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt" -wget -q "https://github.com/stonith404/pingvin-share/archive/refs/tags/v${RELEASE}.zip" +curl -fsSL "https://github.com/stonith404/pingvin-share/archive/refs/tags/v${RELEASE}.zip" -o $(basename "https://github.com/stonith404/pingvin-share/archive/refs/tags/v${RELEASE}.zip") unzip -q v${RELEASE}.zip echo "${RELEASE}" >"/opt/pingvin_version.txt" mv pingvin-share-${RELEASE} /opt/pingvin-share @@ -52,7 +52,7 @@ $STD npm install $STD npm run build $STD pm2 start --name="pingvin-share-frontend" npm -- run start # create and enable pm2-root systemd script -$STD pm2 startup systemd +$STD pm2 startup systemd # save running pm2 processes so pingvin-share can survive reboots $STD pm2 save msg_ok "Installed Pingvin Share" diff --git a/install/plant-it-install.sh b/install/plant-it-install.sh index 8b6de905c..21fda4fad 100644 --- a/install/plant-it-install.sh +++ b/install/plant-it-install.sh @@ -23,7 +23,7 @@ msg_ok "Installed Dependencies" msg_info "Setting up Adoptium Repository" mkdir -p /etc/apt/keyrings -wget -qO - https://packages.adoptium.net/artifactory/api/gpg/key/public | gpg --dearmor >/etc/apt/trusted.gpg.d/adoptium.gpg +curl -fsSL "https://packages.adoptium.net/artifactory/api/gpg/key/public" | gpg --dearmor >/etc/apt/trusted.gpg.d/adoptium.gpg echo "deb https://packages.adoptium.net/artifactory/deb $(awk -F= '/^VERSION_CODENAME/{print$2}' /etc/os-release) main" >/etc/apt/sources.list.d/adoptium.list $STD apt-get update msg_ok "Set up Adoptium Repository" @@ -49,8 +49,8 @@ $STD mysql -u root -e "GRANT ALL ON $DB_NAME.* TO '$DB_USER'@'localhost'; FLUSH msg_ok "Set up MariaDB" msg_info "Setup Plant-it" -RELEASE=$(curl -s https://api.github.com/repos/MDeLuise/plant-it/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') -wget -q https://github.com/MDeLuise/plant-it/releases/download/${RELEASE}/server.jar +RELEASE=$(curl -fsSL https://api.github.com/repos/MDeLuise/plant-it/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') +curl -fsSL "https://github.com/MDeLuise/plant-it/releases/download/${RELEASE}/server.jar" -o $(basename "https://github.com/MDeLuise/plant-it/releases/download/${RELEASE}/server.jar") mkdir -p /opt/plant-it/{backend,frontend} mkdir -p /opt/plant-it-data mv -f server.jar /opt/plant-it/backend/server.jar @@ -80,7 +80,7 @@ CACHE_PORT=6379 EOF cd /opt/plant-it/frontend -wget -q https://github.com/MDeLuise/plant-it/releases/download/${RELEASE}/client.tar.gz +curl -fsSL "https://github.com/MDeLuise/plant-it/releases/download/${RELEASE}/client.tar.gz" -o $(basename "https://github.com/MDeLuise/plant-it/releases/download/${RELEASE}/client.tar.gz") tar -xzf client.tar.gz echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt" msg_ok "Setup Plant-it" diff --git a/install/plex-install.sh b/install/plex-install.sh index 9e05c56cc..18979d7d6 100644 --- a/install/plex-install.sh +++ b/install/plex-install.sh @@ -34,7 +34,7 @@ fi msg_ok "Set Up Hardware Acceleration" msg_info "Setting Up Plex Media Server Repository" -wget -qO- https://downloads.plex.tv/plex-keys/PlexSign.key >/usr/share/keyrings/PlexSign.asc +curl -fsSL https://downloads.plex.tv/plex-keys/PlexSign.key | tee /usr/share/keyrings/PlexSign.asc >/dev/null echo "deb [signed-by=/usr/share/keyrings/PlexSign.asc] https://downloads.plex.tv/repo/deb/ public main" >/etc/apt/sources.list.d/plexmediaserver.list msg_ok "Set Up Plex Media Server Repository" diff --git a/install/pocketbase-install.sh b/install/pocketbase-install.sh index 980308941..e4b9490dd 100644 --- a/install/pocketbase-install.sh +++ b/install/pocketbase-install.sh @@ -13,17 +13,9 @@ setting_up_container network_check update_os -msg_info "Installing Dependencies" -$STD apt-get install -y curl -$STD apt-get install -y sudo -$STD apt-get install -y mc -$STD apt-get install -y wget -$STD apt-get install -y openssh-server -msg_ok "Installed Dependencies" - msg_info "Installing Pocketbase" -RELEASE=$(curl -s https://api.github.com/repos/pocketbase/pocketbase/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') -wget -q https://github.com/pocketbase/pocketbase/releases/download/v${RELEASE}/pocketbase_${RELEASE}_linux_arm64.zip -O /tmp/pocketbase.zip +RELEASE="$(curl -fsSL https://api.github.com/repos/pocketbase/pocketbase/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')" +curl -fsSL "https://github.com/pocketbase/pocketbase/releases/download/v${RELEASE}/pocketbase_${RELEASE}_linux_arm64.zip" -o "/tmp/pocketbase.zip" mkdir -p /opt/pocketbase/{pb_public,pb_migrations,pb_hooks} unzip -q -o /tmp/pocketbase.zip -d /opt/pocketbase @@ -44,7 +36,7 @@ ExecStart = /opt/pocketbase/pocketbase serve --http=0.0.0.0:8080 WantedBy = multi-user.target EOF -systemctl enable -q --now pocketbase.service +systemctl enable -q --now pocketbase msg_ok "Installed Pocketbase" motd_ssh diff --git a/install/pocketid-install.sh b/install/pocketid-install.sh index df2534e73..47e8f8f7e 100644 --- a/install/pocketid-install.sh +++ b/install/pocketid-install.sh @@ -34,8 +34,8 @@ msg_ok "Installed Node.js" msg_info "Installing Golang" set +o pipefail temp_file=$(mktemp) -golang_tarball=$(curl -s https://go.dev/dl/ | grep -oP 'go[\d\.]+\.linux-amd64\.tar\.gz' | head -n 1) -wget -q https://golang.org/dl/"$golang_tarball" -O "$temp_file" +golang_tarball=$(curl -fsSL https://go.dev/dl/ | grep -oP 'go[\d\.]+\.linux-amd64\.tar\.gz' | head -n 1) +curl -fsSL "https://golang.org/dl/${golang_tarball}" -o "$temp_file" tar -C /usr/local -xzf "$temp_file" ln -sf /usr/local/go/bin/go /usr/local/bin/go rm -f "$temp_file" @@ -45,8 +45,8 @@ msg_ok "Installed Golang" read -r -p "What public URL do you want to use (e.g. pocketid.mydomain.com)? " public_url msg_info "Setup Pocket ID" cd /opt -RELEASE=$(curl -s https://api.github.com/repos/pocket-id/pocket-id/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') -wget -q "https://github.com/pocket-id/pocket-id/archive/refs/tags/v${RELEASE}.zip" +RELEASE=$(curl -fsSL https://api.github.com/repos/pocket-id/pocket-id/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') +curl -fsSL "https://github.com/pocket-id/pocket-id/archive/refs/tags/v${RELEASE}.zip" -o $(basename "https://github.com/pocket-id/pocket-id/archive/refs/tags/v${RELEASE}.zip") unzip -q v${RELEASE}.zip mv pocket-id-${RELEASE}/ /opt/pocket-id @@ -125,4 +125,4 @@ $STD apt-get -y autoclean msg_ok "Cleaned" motd_ssh -customize +customize \ No newline at end of file diff --git a/install/podman-homeassistant-install.sh b/install/podman-homeassistant-install.sh index e6b4a74e3..b74449c66 100644 --- a/install/podman-homeassistant-install.sh +++ b/install/podman-homeassistant-install.sh @@ -22,7 +22,7 @@ $STD apt-get install -y openssh-server msg_ok "Installed Dependencies" get_latest_release() { - curl -sL https://api.github.com/repos/$1/releases/latest | grep '"tag_name":' | cut -d'"' -f4 + curl -fsSL https://api.github.com/repos/$1/releases/latest | grep '"tag_name":' | cut -d'"' -f4 } PORTAINER_LATEST_VERSION=$(get_latest_release "portainer/portainer") diff --git a/install/podman-install.sh b/install/podman-install.sh index 48351504c..cf54f5c91 100644 --- a/install/podman-install.sh +++ b/install/podman-install.sh @@ -22,7 +22,7 @@ $STD apt-get install -y openssh-server msg_ok "Installed Dependencies" get_latest_release() { - curl -sL https://api.github.com/repos/$1/releases/latest | grep '"tag_name":' | cut -d'"' -f4 + curl -fsSL https://api.github.com/repos/$1/releases/latest | grep '"tag_name":' | cut -d'"' -f4 } PORTAINER_LATEST_VERSION=$(get_latest_release "portainer/portainer") diff --git a/install/postgresql-install.sh b/install/postgresql-install.sh index f06edcff3..0657b5684 100644 --- a/install/postgresql-install.sh +++ b/install/postgresql-install.sh @@ -22,7 +22,7 @@ msg_ok "Installed Dependencies" msg_info "Setting up PostgreSQL Repository" VERSION="$(awk -F'=' '/^VERSION_CODENAME=/{ print $NF }' /etc/os-release)" echo "deb http://apt.postgresql.org/pub/repos/apt ${VERSION}-pgdg main" >/etc/apt/sources.list.d/pgdg.list -curl -sSL https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor --output /etc/apt/trusted.gpg.d/postgresql.gpg +curl -fsSL https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor --output /etc/apt/trusted.gpg.d/postgresql.gpg msg_ok "Setup PostgreSQL Repository" msg_info "Installing PostgreSQL" diff --git a/install/privatebin-install.sh b/install/privatebin-install.sh index ddb04c091..3fd6e83f7 100644 --- a/install/privatebin-install.sh +++ b/install/privatebin-install.sh @@ -23,11 +23,11 @@ $STD apt-get install -y \ msg_ok "Installed Dependencies" msg_info "Installing PrivateBin" -RELEASE=$(curl -s https://api.github.com/repos/PrivateBin/PrivateBin/releases/latest | grep '"tag_name"' | sed -E 's/.*"([^"]+)".*/\1/') +RELEASE=$(curl -fsSL https://api.github.com/repos/PrivateBin/PrivateBin/releases/latest | grep '"tag_name"' | sed -E 's/.*"([^"]+)".*/\1/') echo "${RELEASE}" >/opt/${APPLICATION}_version.txt mkdir -p /opt/privatebin cd /opt/privatebin -wget -q "https://github.com/PrivateBin/PrivateBin/archive/refs/tags/${RELEASE}.zip" +curl -fsSL "https://github.com/PrivateBin/PrivateBin/archive/refs/tags/${RELEASE}.zip" -o $(basename "https://github.com/PrivateBin/PrivateBin/archive/refs/tags/${RELEASE}.zip") $STD unzip -q ${RELEASE}.zip mv PrivateBin-${RELEASE}/* . msg_ok "Installed PrivateBin" diff --git a/install/projectsend-install.sh b/install/projectsend-install.sh index c0ff45c36..8dc819b9a 100644 --- a/install/projectsend-install.sh +++ b/install/projectsend-install.sh @@ -37,9 +37,9 @@ $STD mysql -u root -e "GRANT ALL ON $DB_NAME.* TO '$DB_USER'@'localhost'; FLUSH msg_ok "Set up MariaDB" msg_info "Installing projectsend" -RELEASE=$(curl -s https://api.github.com/repos/projectsend/projectsend/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') +RELEASE=$(curl -fsSL https://api.github.com/repos/projectsend/projectsend/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') cd /opt -wget -q "https://github.com/projectsend/projectsend/releases/download/r${RELEASE}/projectsend-r${RELEASE}.zip" +curl -fsSL "https://github.com/projectsend/projectsend/releases/download/r${RELEASE}/projectsend-r${RELEASE}.zip" -o $(basename "https://github.com/projectsend/projectsend/releases/download/r${RELEASE}/projectsend-r${RELEASE}.zip") mkdir projectsend unzip -q "projectsend-r${RELEASE}.zip" -d projectsend mv /opt/projectsend/includes/sys.config.sample.php /opt/projectsend/includes/sys.config.php diff --git a/install/prometheus-alertmanager-install.sh b/install/prometheus-alertmanager-install.sh index bac01b61d..4a71e95cb 100755 --- a/install/prometheus-alertmanager-install.sh +++ b/install/prometheus-alertmanager-install.sh @@ -14,10 +14,10 @@ network_check update_os msg_info "Installing Prometheus Alertmanager" -RELEASE=$(curl -s https://api.github.com/repos/prometheus/alertmanager/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') +RELEASE=$(curl -fsSL https://api.github.com/repos/prometheus/alertmanager/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') mkdir -p /etc/alertmanager mkdir -p /var/lib/alertmanager -wget -q https://github.com/prometheus/alertmanager/releases/download/v${RELEASE}/alertmanager-${RELEASE}.linux-amd64.tar.gz +curl -fsSL "https://github.com/prometheus/alertmanager/releases/download/v${RELEASE}/alertmanager-${RELEASE}.linux-amd64.tar.gz" -o $(basename "https://github.com/prometheus/alertmanager/releases/download/v${RELEASE}/alertmanager-${RELEASE}.linux-amd64.tar.gz") tar -xf alertmanager-${RELEASE}.linux-amd64.tar.gz mv alertmanager-${RELEASE}.linux-amd64/alertmanager alertmanager-${RELEASE}.linux-amd64/amtool /usr/local/bin/ mv alertmanager-${RELEASE}.linux-amd64/alertmanager.yml /etc/alertmanager/alertmanager.yml diff --git a/install/prometheus-install.sh b/install/prometheus-install.sh index 09863a9fe..fb6ac2fcd 100644 --- a/install/prometheus-install.sh +++ b/install/prometheus-install.sh @@ -13,20 +13,11 @@ setting_up_container network_check update_os -msg_info "Installing Dependencies" -$STD apt-get install -y \ - curl \ - sudo \ - mc \ - wget \ - openssh-server -msg_ok "Installed Dependencies" - msg_info "Installing Prometheus" -RELEASE=$(curl -s https://api.github.com/repos/prometheus/prometheus/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') +RELEASE=$(curl -fsSL https://api.github.com/repos/prometheus/prometheus/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') mkdir -p /etc/prometheus mkdir -p /var/lib/prometheus -wget -q https://github.com/prometheus/prometheus/releases/download/v${RELEASE}/prometheus-${RELEASE}.linux-arm64.tar.gz +curl -fsSL "https://github.com/prometheus/prometheus/releases/download/v${RELEASE}/prometheus-${RELEASE}.linux-arm64.tar.gz" -o $(basename "https://github.com/prometheus/prometheus/releases/download/v${RELEASE}/prometheus-${RELEASE}.linux-arm64.tar.gz") tar -xf prometheus-${RELEASE}.linux-arm64.tar.gz mv prometheus-${RELEASE}.linux-arm64/prometheus prometheus-${RELEASE}.linux-arm64/promtool /usr/local/bin/ mv prometheus-${RELEASE}.linux-arm64/prometheus.yml /etc/prometheus/prometheus.yml diff --git a/install/prometheus-paperless-ngx-exporter-install.sh b/install/prometheus-paperless-ngx-exporter-install.sh index a5c6f1163..96b77404e 100755 --- a/install/prometheus-paperless-ngx-exporter-install.sh +++ b/install/prometheus-paperless-ngx-exporter-install.sh @@ -14,8 +14,8 @@ network_check update_os msg_info "Installing Prometheus Paperless NGX Exporter" -RELEASE=$(curl -s https://api.github.com/repos/hansmi/prometheus-paperless-exporter/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') -wget -q https://github.com/hansmi/prometheus-paperless-exporter/releases/download/v${RELEASE}/prometheus-paperless-exporter_${RELEASE}_linux_amd64.tar.gz +RELEASE=$(curl -fsSL https://api.github.com/repos/hansmi/prometheus-paperless-exporter/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') +curl -fsSL "https://github.com/hansmi/prometheus-paperless-exporter/releases/download/v${RELEASE}/prometheus-paperless-exporter_${RELEASE}_linux_amd64.tar.gz" -o $(basename "https://github.com/hansmi/prometheus-paperless-exporter/releases/download/v${RELEASE}/prometheus-paperless-exporter_${RELEASE}_linux_amd64.tar.gz") tar -xf prometheus-paperless-exporter_${RELEASE}_linux_amd64.tar.gz mv prometheus-paperless-exporter_${RELEASE}_linux_amd64/prometheus-paperless-exporter /usr/local/bin/ mkdir -p /etc/prometheus-paperless-ngx-exporter diff --git a/install/prowlarr-install.sh b/install/prowlarr-install.sh index 052bc5ef3..e48fed94a 100644 --- a/install/prowlarr-install.sh +++ b/install/prowlarr-install.sh @@ -15,15 +15,16 @@ update_os msg_info "Installing Dependencies" $STD apt-get install -y sqlite3 -$STD apt-get install -y wget -$STD apt-get install -y openssh-server msg_ok "Installed Dependencies" msg_info "Installing Prowlarr" +temp_file="$(mktemp)" mkdir -p /var/lib/prowlarr/ chmod 775 /var/lib/prowlarr/ -$STD wget --content-disposition 'https://prowlarr.servarr.com/v1/update/master/updatefile?os=linux&runtime=netcore&arch=arm64' -$STD tar -xvzf Prowlarr.master.*.tar.gz +cd /var/lib/prowlarr/ || exit +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-arm64.tar.gz" -o "$temp_file" +$STD tar -xvzf "$temp_file" mv Prowlarr /opt chmod 775 /opt/Prowlarr msg_ok "Installed Prowlarr" @@ -43,15 +44,14 @@ Restart=on-failure [Install] WantedBy=multi-user.target EOF -systemctl -q daemon-reload -systemctl enable --now -q prowlarr +systemctl enable -q --now prowlarr msg_ok "Created Service" motd_ssh customize msg_info "Cleaning up" -rm -rf Prowlarr.master.*.tar.gz +rm -f "$temp_file" $STD apt-get -y autoremove $STD apt-get -y autoclean msg_ok "Cleaned" diff --git a/install/proxmox-backup-server-install.sh b/install/proxmox-backup-server-install.sh index c933ecc90..32ed474f3 100644 --- a/install/proxmox-backup-server-install.sh +++ b/install/proxmox-backup-server-install.sh @@ -25,13 +25,12 @@ $STD apt-get install -y \ dpkg-dev msg_ok "Installed Dependencies" -msg_info "Installing Proxmox Backup Server" -$STD apt-get update +msg_info "Installing Proxmox Backup Server (Patience)" export DEBIAN_FRONTEND=noninteractive git clone https://github.com/wofferl/proxmox-backup-arm64 cd ./proxmox-backup-arm64 -./build.sh download -apt install -y -f ./packages/* +$STD ./build.sh download +$STD apt install -y -f ./packages/* msg_ok "Installed Proxmox Backup Server" motd_ssh diff --git a/install/proxmox-mail-gateway-install.sh b/install/proxmox-mail-gateway-install.sh index e16e25f50..bc2708ef2 100644 --- a/install/proxmox-mail-gateway-install.sh +++ b/install/proxmox-mail-gateway-install.sh @@ -14,7 +14,7 @@ network_check update_os msg_info "Installing Proxmox Mail Gateway" -wget -q https://enterprise.proxmox.com/debian/proxmox-release-bookworm.gpg -O /etc/apt/trusted.gpg.d/proxmox-release-bookworm.gpg +curl -fsSL "https://enterprise.proxmox.com/debian/proxmox-release-bookworm.gpg" -o "/etc/apt/trusted.gpg.d/proxmox-release-bookworm.gpg" echo "deb http://download.proxmox.com/debian/pmg bookworm pmg-no-subscription" >/etc/apt/sources.list.d/pmg.list $STD apt-get update $STD apt-get -y install proxmox-mailgateway-container diff --git a/install/ps5-mqtt-install.sh b/install/ps5-mqtt-install.sh index 3dd055f98..496f3d9c7 100644 --- a/install/ps5-mqtt-install.sh +++ b/install/ps5-mqtt-install.sh @@ -33,8 +33,8 @@ $STD npm i -g playactor msg_ok "Installed Node.js" msg_info "Installing PS5-MQTT" -RELEASE=$(curl -s https://api.github.com/repos/FunkeyFlo/ps5-mqtt/releases/latest | jq -r '.tag_name') -wget -P /tmp -q https://github.com/FunkeyFlo/ps5-mqtt/archive/refs/tags/${RELEASE}.tar.gz +RELEASE=$(curl -fsSL https://api.github.com/repos/FunkeyFlo/ps5-mqtt/releases/latest | jq -r '.tag_name') +curl -fsSL https://github.com/FunkeyFlo/ps5-mqtt/archive/refs/tags/${RELEASE}.tar.gz -o /tmp/${RELEASE}.tar.gz tar zxf /tmp/${RELEASE}.tar.gz -C /opt mv /opt/ps5-mqtt-* /opt/ps5-mqtt cd /opt/ps5-mqtt/ps5-mqtt/ diff --git a/install/pterodactyl-panel-install.sh b/install/pterodactyl-panel-install.sh index 89e75298f..bb3cb11fd 100644 --- a/install/pterodactyl-panel-install.sh +++ b/install/pterodactyl-panel-install.sh @@ -23,19 +23,19 @@ $STD apt-get install -y \ composer msg_ok "Installed Dependencies" -msg_info "Adding PHP8.3 Repository" +msg_info "Adding PHP8.4 Repository" $STD curl -sSLo /tmp/debsuryorg-archive-keyring.deb https://packages.sury.org/debsuryorg-archive-keyring.deb $STD dpkg -i /tmp/debsuryorg-archive-keyring.deb $STD sh -c 'echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list' $STD apt-get update -msg_ok "Added PHP8.3 Repository" +msg_ok "Added PHP8.4 Repository" msg_info "Installing PHP" $STD apt-get remove -y php8.2* $STD apt-get install -y \ - php8.3 \ - php8.3-{gd,mysql,mbstring,bcmath,xml,curl,zip,intl,fpm} \ - libapache2-mod-php8.3 + php8.4 \ + php8.4-{gd,mysql,mbstring,bcmath,xml,curl,zip,intl,fpm} \ + libapache2-mod-php8.4 msg_ok "Installed PHP" msg_info "Setting up MariaDB" @@ -58,18 +58,18 @@ read -p "Enter your First Name: " NAME_FIRST read -p "Enter your Last Name: " NAME_LAST msg_info "Installing pterodactyl Panel" -RELEASE=$(curl -s https://api.github.com/repos/pterodactyl/panel/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') +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 -wget -q "https://github.com/pterodactyl/panel/releases/download/v${RELEASE}/panel.tar.gz" +cd /opt/pterodactyl-panel || exit +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 IP=$(hostname -I | awk '{print $1}') ADMIN_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13) $STD composer install --no-dev --optimize-autoloader --no-interaction $STD php artisan key:generate --force -$STD php artisan p:environment:setup --no-interaction --author $ADMIN_EMAIL --url "http://$IP" -$STD php artisan p:environment:database --no-interaction --database $DB_NAME --username $DB_USER --password $DB_PASS +$STD php artisan p:environment:setup --no-interaction --author "$ADMIN_EMAIL" --url "http://$IP" +$STD php artisan p:environment:database --no-interaction --database $DB_NAME --username $DB_USER --password "$DB_PASS" $STD php artisan migrate --seed --force --no-interaction $STD php artisan p:user:make --no-interaction --admin=1 --email "$ADMIN_EMAIL" --password "$ADMIN_PASS" --name-first "$NAME_FIRST" --name-last "$NAME_LAST" --username "admin" echo "* * * * * php /opt/pterodactyl-panel/artisan schedule:run >> /dev/null 2>&1" | crontab -u www-data - @@ -82,7 +82,7 @@ chmod -R 755 /opt/pterodactyl-panel/storage/* /opt/pterodactyl-panel/bootstrap/c echo "pterodactyl Admin Password: $ADMIN_PASS" } >>~/pterodactyl-panel.creds -echo "${RELEASE}" >/opt/${APPLICATION}_version.txt +echo "${RELEASE}" >/opt/"${APPLICATION}"_version.txt msg_ok "Installed pterodactyl Panel" msg_info "Creating Service" diff --git a/install/pterodactyl-wings-install.sh b/install/pterodactyl-wings-install.sh index 9eeceb16f..935fb7ecd 100644 --- a/install/pterodactyl-wings-install.sh +++ b/install/pterodactyl-wings-install.sh @@ -17,13 +17,13 @@ msg_info "Installing Docker" DOCKER_CONFIG_PATH='/etc/docker/daemon.json' mkdir -p $(dirname $DOCKER_CONFIG_PATH) echo -e '{\n "log-driver": "journald"\n}' >/etc/docker/daemon.json -$STD sh <(curl -sSL https://get.docker.com) +$STD sh <(curl -fsSL https://get.docker.com) systemctl enable -q --now docker msg_ok "Installed Docker" msg_info "Installing Pterodactyl Wings" -RELEASE=$(curl -s https://api.github.com/repos/pterodactyl/wings/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') -wget -q -O /usr/local/bin/wings "https://github.com/pterodactyl/wings/releases/download/v${RELEASE}/wings_linux_amd64" +RELEASE=$(curl -fsSL https://api.github.com/repos/pterodactyl/wings/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') +curl -fsSL "https://github.com/pterodactyl/wings/releases/download/v${RELEASE}/wings_linux_amd64" -o "/usr/local/bin/wings" chmod u+x /usr/local/bin/wings mkdir -p /etc/pterodactyl echo "${RELEASE}" >/opt/${APPLICATION}_version.txt diff --git a/install/qbittorrent-install.sh b/install/qbittorrent-install.sh index 788e3d3ba..af207a76f 100644 --- a/install/qbittorrent-install.sh +++ b/install/qbittorrent-install.sh @@ -22,7 +22,7 @@ $STD apt-get install -y openssh-server msg_ok "Installed Dependencies" msg_info "Setup qBittorrent-nox" -FULLRELEASE=$(curl -s https://api.github.com/repos/userdocs/qbittorrent-nox-static/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') +FULLRELEASE=$(curl -fsSL https://api.github.com/repos/userdocs/qbittorrent-nox-static/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') RELEASE=$(echo $FULLRELEASE | cut -c 9-13) mkdir -p /opt/qbittorrent curl -fsSL "https://github.com/userdocs/qbittorrent-nox-static/releases/download/${FULLRELEASE}/x86_64-qbittorrent-nox" -o /opt/qbittorrent/qbittorrent-nox diff --git a/install/rabbitmq-install.sh b/install/rabbitmq-install.sh index 3d746b9dd..c093d8189 100644 --- a/install/rabbitmq-install.sh +++ b/install/rabbitmq-install.sh @@ -27,9 +27,9 @@ $STD apt-get install -y \ msg_ok "Installed Dependencies" msg_info "Adding RabbitMQ signing key" -wget -qO- "https://keys.openpgp.org/vks/v1/by-fingerprint/0A9AF2115F4687BD29803A206B73A36E6026DFCA" | gpg --dearmor >/usr/share/keyrings/com.rabbitmq.team.gpg -wget -qO- "https://github.com/rabbitmq/signing-keys/releases/download/3.0/cloudsmith.rabbitmq-erlang.E495BB49CC4BBE5B.key" | gpg --dearmor >/usr/share/keyrings/rabbitmq.E495BB49CC4BBE5B.gpg -wget -qO- "https://github.com/rabbitmq/signing-keys/releases/download/3.0/cloudsmith.rabbitmq-server.9F4587F226208342.key" | gpg --dearmor >/usr/share/keyrings/rabbitmq.9F4587F226208342.gpg +curl -fsSL "https://keys.openpgp.org/vks/v1/by-fingerprint/0A9AF2115F4687BD29803A206B73A36E6026DFCA" | gpg --dearmor >/usr/share/keyrings/com.rabbitmq.team.gpg +curl -fsSL "https://github.com/rabbitmq/signing-keys/releases/download/3.0/cloudsmith.rabbitmq-erlang.E495BB49CC4BBE5B.key" | gpg --dearmor >/usr/share/keyrings/rabbitmq.E495BB49CC4BBE5B.gpg +curl -fsSL "https://github.com/rabbitmq/signing-keys/releases/download/3.0/cloudsmith.rabbitmq-server.9F4587F226208342.key" | gpg --dearmor >/usr/share/keyrings/rabbitmq.9F4587F226208342.gpg msg_ok "Signing keys added" msg_info "Adding RabbitMQ repository" diff --git a/install/radarr-install.sh b/install/radarr-install.sh index f455aed44..da029e6fa 100644 --- a/install/radarr-install.sh +++ b/install/radarr-install.sh @@ -5,7 +5,7 @@ # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE # Source: https://radarr.video/ -source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" +source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" color verb_ip6 catch_errors @@ -20,10 +20,13 @@ $STD apt-get install -y openssh-server msg_ok "Installed Dependencies" msg_info "Installing Radarr" +temp_file="$(mktemp)" mkdir -p /var/lib/radarr/ chmod 775 /var/lib/radarr/ -$STD wget --content-disposition 'https://radarr.servarr.com/v1/update/master/updatefile?os=linux&runtime=netcore&arch=arm64' -$STD tar -xvzf Radarr.master.*.tar.gz +cd /var/lib/radarr/ || exit +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-arm64.tar.gz" -o "$temp_file" +$STD tar -xvzf "$temp_file" mv Radarr /opt chmod 775 /opt/Radarr msg_ok "Installed Radarr" @@ -43,15 +46,14 @@ Restart=on-failure [Install] WantedBy=multi-user.target EOF -systemctl -q daemon-reload -systemctl enable --now -q radarr +systemctl enable -q --now radarr msg_ok "Created Service" motd_ssh customize msg_info "Cleaning up" -rm -rf Radarr.master.*.tar.gz +rm -rf "$temp_file" $STD apt-get -y autoremove $STD apt-get -y autoclean msg_ok "Cleaned" diff --git a/install/radicale-install.sh b/install/radicale-install.sh index ab6080059..bed34b116 100644 --- a/install/radicale-install.sh +++ b/install/radicale-install.sh @@ -27,10 +27,10 @@ $STD python3 -m pip install --upgrade https://github.com/Kozea/Radicale/archive/ RNDPASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13) $STD htpasswd -c -b -5 /opt/radicale/users admin $RNDPASS { -echo "Radicale Credentials" -echo "Admin User: admin" -echo "Admin Password: $RNDPASS" -} >> ~/radicale.creds + echo "Radicale Credentials" + echo "Admin User: admin" + echo "Admin Password: $RNDPASS" +} >>~/radicale.creds msg_ok "Done setting up Radicale" msg_info "Setup Service" @@ -67,4 +67,4 @@ customize msg_info "Cleaning up" $STD apt-get -y autoremove $STD apt-get -y autoclean -msg_ok "Cleaned" \ No newline at end of file +msg_ok "Cleaned" diff --git a/install/rdtclient-install.sh b/install/rdtclient-install.sh index bd5a06db7..fd17ad250 100644 --- a/install/rdtclient-install.sh +++ b/install/rdtclient-install.sh @@ -5,7 +5,7 @@ # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE # Source: https://github.com/rogerfar/rdt-client -source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" +source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" color verb_ip6 catch_errors @@ -14,12 +14,7 @@ network_check update_os msg_info "Installing Dependencies" -$STD apt-get install -y curl -$STD apt-get install -y sudo -$STD apt-get install -y mc $STD apt-get install -y unzip -$STD apt-get install -y wget -$STD apt-get install -y openssh-server msg_ok "Installed Dependencies" msg_info "Installing ASP.NET Core Runtime" @@ -39,7 +34,7 @@ $STD ln -s /usr/share/dotnet/dotnet /usr/bin/dotnet msg_ok "Installed ASP.NET Core Runtime" msg_info "Installing rdtclient" -wget -q https://github.com/rogerfar/rdt-client/releases/latest/download/RealDebridClient.zip +curl -fsSL "https://github.com/rogerfar/rdt-client/releases/latest/download/RealDebridClient.zip" -o $(basename "https://github.com/rogerfar/rdt-client/releases/latest/download/RealDebridClient.zip") unzip -qq RealDebridClient.zip -d /opt/rdtc rm RealDebridClient.zip cd /opt/rdtc diff --git a/install/readarr-install.sh b/install/readarr-install.sh index eca6c6b9a..235d41299 100644 --- a/install/readarr-install.sh +++ b/install/readarr-install.sh @@ -15,15 +15,14 @@ update_os msg_info "Installing Dependencies" $STD apt-get install -y sqlite3 -$STD apt-get install -y wget -$STD apt-get install -y openssh-server msg_ok "Installed Dependencies" msg_info "Installing Readarr" mkdir -p /var/lib/readarr/ chmod 775 /var/lib/readarr/ -$STD wget --content-disposition 'https://readarr.servarr.com/v1/update/develop/updatefile?os=linux&runtime=netcore&arch=arm64' -$STD tar -xvzf Readarr.develop.*.tar.gz +cd /var/lib/readarr/ +$STD curl -fsSL 'https://readarr.servarr.com/v1/update/develop/updatefile?os=linux&runtime=netcore&arch=arm64' -o readarr.tar.gz +$STD tar -xvzf readarr.tar.gz mv Readarr /opt chmod 775 /opt/Readarr msg_ok "Installed Readarr" diff --git a/install/readeck-install.sh b/install/readeck-install.sh index 0d0d0cbb3..6ff628f6e 100644 --- a/install/readeck-install.sh +++ b/install/readeck-install.sh @@ -13,19 +13,11 @@ setting_up_container network_check update_os -msg_info "Installing Dependencies" -$STD apt-get install -y curl -$STD apt-get install -y sudo -$STD apt-get install -y mc -$STD apt-get install -y wget -$STD apt-get install -y openssh-server -msg_ok "Installed Dependencies" - msg_info "Installing Readeck" -LATEST=$(curl -s https://codeberg.org/readeck/readeck/releases/ | grep -oP '(?<=Version )\d+\.\d+\.\d+' | head -1) +LATEST=$(curl -fsSL https://codeberg.org/readeck/readeck/releases/ | grep -oP '(?<=Version )\d+\.\d+\.\d+' | head -1) mkdir -p /opt/readeck cd /opt/readeck -wget -q -O readeck https://codeberg.org/readeck/readeck/releases/download/${LATEST}/readeck-${LATEST}-linux-arm64 +curl -fsSL "https://codeberg.org/readeck/readeck/releases/download/${LATEST}/readeck-${LATEST}-linux-arm64" -o "readeck" chmod a+x readeck msg_ok "Installed Readeck" @@ -45,7 +37,7 @@ Restart=always [Install] WantedBy=multi-user.target EOF -systemctl enable -q --now readeck.service +systemctl enable -q --now readeck msg_ok "Created Service" motd_ssh diff --git a/install/recyclarr-install.sh b/install/recyclarr-install.sh index 05e980db3..9ee218c00 100644 --- a/install/recyclarr-install.sh +++ b/install/recyclarr-install.sh @@ -16,13 +16,10 @@ update_os msg_info "Installing Dependencies" $STD apt-get install -y git $STD apt-get install -y sudo -$STD apt-get install -y mc -$STD apt-get install -y wget -$STD apt-get install -y openssh-server msg_ok "Installed Dependencies" msg_info "Installing Recyclarr" -wget -q $(curl -s https://api.github.com/repos/recyclarr/recyclarr/releases/latest | grep download | grep linux-arm64 | cut -d\" -f4) +curl -fsSL "$(curl -fsSL https://api.github.com/repos/recyclarr/recyclarr/releases/latest | grep download | grep linux-arm64 | cut -d\" -f4)" -o $(basename "$(curl -fsSL https://api.github.com/repos/recyclarr/recyclarr/releases/latest | grep download | grep linux-arm64 | cut -d\" -f4)") tar -C /usr/local/bin -xJf recyclarr*.tar.xz mkdir -p /root/.config/recyclarr recyclarr config create diff --git a/install/redis-install.sh b/install/redis-install.sh index 5e55cfbad..3e9def238 100644 --- a/install/redis-install.sh +++ b/install/redis-install.sh @@ -22,12 +22,12 @@ $STD apt-get install -y openssh-server msg_ok "Installed Dependencies" msg_info "Installing Redis" -wget -qO- https://packages.redis.io/gpg | gpg --dearmor >/usr/share/keyrings/redis-archive-keyring.gpg +curl -fsSL "https://packages.redis.io/gpg" | gpg --dearmor >/usr/share/keyrings/redis-archive-keyring.gpg echo "deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb $(lsb_release -cs) main" >/etc/apt/sources.list.d/redis.list $STD apt-get update $STD apt-get install -y redis sed -i 's/^bind .*/bind 0.0.0.0/' /etc/redis/redis.conf -systemctl enable -q --now redis-server.service +systemctl enable -q --now redis-server msg_ok "Installed Redis" motd_ssh diff --git a/install/revealjs-install.sh b/install/revealjs-install.sh index 161c86313..e234bcc00 100644 --- a/install/revealjs-install.sh +++ b/install/revealjs-install.sh @@ -30,8 +30,8 @@ msg_ok "Setup Node.js" msg_info "Setup ${APPLICATION}" temp_file=$(mktemp) -RELEASE=$(curl -s https://api.github.com/repos/hakimel/reveal.js/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') -wget -q "https://github.com/hakimel/reveal.js/archive/refs/tags/${RELEASE}.tar.gz" -O $temp_file +RELEASE=$(curl -fsSL https://api.github.com/repos/hakimel/reveal.js/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') +curl -fsSL "https://github.com/hakimel/reveal.js/archive/refs/tags/${RELEASE}.tar.gz" -o "$temp_file" tar zxf $temp_file mv reveal.js-${RELEASE}/ /opt/revealjs cd /opt/revealjs diff --git a/install/rtsptoweb-install.sh b/install/rtsptoweb-install.sh index b9dcd5dbe..4ebb00e72 100644 --- a/install/rtsptoweb-install.sh +++ b/install/rtsptoweb-install.sh @@ -15,16 +15,17 @@ update_os msg_info "Installing Dependencies" $STD apt-get install -y git -$STD apt-get install -y mc -$STD apt-get install -y wget -$STD apt-get install -y openssh-server msg_ok "Installed Dependencies" msg_info "Installing Golang" -$STD wget https://golang.org/dl/go1.23.2.linux-arm64.tar.gz -$STD tar -xzf go1.23.2.linux-arm64.tar.gz -C /usr/local -$STD ln -s /usr/local/go/bin/go /usr/local/bin/go -rm -rf go1.23.2.linux-arm64.tar.gz +set +o pipefail +temp_file=$(mktemp) +golang_tarball=$(curl -fsSL https://go.dev/dl/ | grep -oP 'go[\d\.]+\.linux-arm64\.tar\.gz' | head -n 1) +curl -fsSL "https://golang.org/dl/${golang_tarball}" -o "$temp_file" +tar -C /usr/local -xzf "$temp_file" +ln -sf /usr/local/go/bin/go /usr/local/bin/go +rm -f "$temp_file" +set -o pipefail msg_ok "Installed Golang" msg_info "Installing RTSPtoWeb" diff --git a/install/runtipi-install.sh b/install/runtipi-install.sh index 5f23ed462..92ddf1a82 100644 --- a/install/runtipi-install.sh +++ b/install/runtipi-install.sh @@ -26,7 +26,7 @@ DOCKER_CONFIG_PATH='/etc/docker/daemon.json' mkdir -p "$(dirname "$DOCKER_CONFIG_PATH")" echo -e '{\n "log-driver": "journald"\n}' >"$DOCKER_CONFIG_PATH" cd /opt -wget -q https://raw.githubusercontent.com/runtipi/runtipi/master/scripts/install.sh +curl -fsSL "https://raw.githubusercontent.com/runtipi/runtipi/master/scripts/install.sh" -o $(basename "https://raw.githubusercontent.com/runtipi/runtipi/master/scripts/install.sh") chmod +x install.sh $STD ./install.sh chmod 666 /opt/runtipi/state/settings.json diff --git a/install/rustdeskserver-install.sh b/install/rustdeskserver-install.sh index f29c52fbd..8d5397a90 100644 --- a/install/rustdeskserver-install.sh +++ b/install/rustdeskserver-install.sh @@ -13,23 +13,19 @@ setting_up_container network_check update_os -msg_info "Installing Dependencies" -$STD apt-get install -y \ - curl \ - sudo \ - mc \ - wget \ - openssh-server -msg_ok "Installed Dependencies" - msg_info "Setup RustDesk" -RELEASE=$(curl -s https://api.github.com/repos/rustdesk/rustdesk-server/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') + +RELEASE=$(curl -fsSL https://api.github.com/repos/rustdesk/rustdesk-server/releases/latest | grep "tag_name" | awk -F '"' '{print $4}') TEMPDIR=$(mktemp -d) -wget -q "https://github.com/rustdesk/rustdesk-server/releases/download/${RELEASE}/rustdesk-server-hbbr_${RELEASE}_arm64.deb" -P $TEMPDIR -wget -q "https://github.com/rustdesk/rustdesk-server/releases/download/${RELEASE}/rustdesk-server-hbbs_${RELEASE}_arm64.deb" -P $TEMPDIR -wget -q "https://github.com/rustdesk/rustdesk-server/releases/download/${RELEASE}/rustdesk-server-utils_${RELEASE}_arm64.deb" -P $TEMPDIR -$STD dpkg -i $TEMPDIR/*.deb -echo "${RELEASE}" >/opt/rustdesk.txt + +curl -fsSL "https://github.com/rustdesk/rustdesk-server/releases/download/${RELEASE}/rustdesk-server-hbbr_${RELEASE}_arm64.deb" \ + -o "${TEMPDIR}/rustdesk-server-hbbr_${RELEASE}_arm64.deb" +curl -fsSL "https://github.com/rustdesk/rustdesk-server/releases/download/${RELEASE}/rustdesk-server-hbbs_${RELEASE}_arm64.deb" \ + -o "${TEMPDIR}/rustdesk-server-hbbs_${RELEASE}_arm64.deb" +curl -fsSL "https://github.com/rustdesk/rustdesk-server/releases/download/${RELEASE}/rustdesk-server-utils_${RELEASE}_arm64.deb" \ + -o "${TEMPDIR}/rustdesk-server-utils_${RELEASE}_arm64.deb" +$STD dpkg -i "${TEMPDIR}"/*.deb +echo "${RELEASE}" >/opt/rustdesk_version.txt msg_ok "Setup RustDesk" motd_ssh diff --git a/install/sabnzbd-install.sh b/install/sabnzbd-install.sh index bc28e35c8..e09d9fd74 100644 --- a/install/sabnzbd-install.sh +++ b/install/sabnzbd-install.sh @@ -35,7 +35,7 @@ rm -rf /usr/lib/python3.*/EXTERNALLY-MANAGED msg_ok "Setup Python3" msg_info "Installing SABnzbd" -RELEASE=$(curl -s https://api.github.com/repos/sabnzbd/sabnzbd/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') +RELEASE=$(curl -fsSL https://api.github.com/repos/sabnzbd/sabnzbd/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') $STD tar zxvf <(curl -fsSL https://github.com/sabnzbd/sabnzbd/releases/download/$RELEASE/SABnzbd-${RELEASE}-src.tar.gz) mv SABnzbd-${RELEASE} /opt/sabnzbd cd /opt/sabnzbd diff --git a/install/seafile-install.sh b/install/seafile-install.sh index 81caf8e09..4e2326b39 100644 --- a/install/seafile-install.sh +++ b/install/seafile-install.sh @@ -89,7 +89,7 @@ useradd seafile mkdir -p /home/seafile chown seafile: /home/seafile chown seafile: /opt/seafile -$STD su - seafile -c "wget -qc https://s3.eu-central-1.amazonaws.com/download.seadrive.org/seafile-server_11.0.13_x86-64.tar.gz" +$STD su - seafile -c "curl -fsSL https://s3.eu-central-1.amazonaws.com/download.seadrive.org/seafile-server_11.0.13_x86-64.tar.gz -o seafile-server_11.0.13_x86-64.tar.gz" $STD su - seafile -c "tar -xzf seafile-server_11.0.13_x86-64.tar.gz -C /opt/seafile/" $STD su - seafile -c "expect </usr/share/keyrings/ansible-archive-keyring.gpg +curl -fsSL "https://keyserver.ubuntu.com/pks/lookup?fingerprint=on&op=get&search=0x6125E2A8C77F2818FB7BD15B93C4A3FD7BB9C367" | gpg --dearmour >/usr/share/keyrings/ansible-archive-keyring.gpg cat </etc/apt/sources.list.d/ansible.list deb [signed-by=/usr/share/keyrings/ansible-archive-keyring.gpg] http://ppa.launchpad.net/ansible/ansible/ubuntu jammy main EOF @@ -30,10 +27,10 @@ $STD apt install -y ansible msg_ok "Installed Dependencies" msg_info "Setup Semaphore" -RELEASE=$(curl -s https://api.github.com/repos/semaphoreui/semaphore/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') +RELEASE=$(curl -fsSL https://api.github.com/repos/semaphoreui/semaphore/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') mkdir -p /opt/semaphore cd /opt/semaphore -wget -q https://github.com/semaphoreui/semaphore/releases/download/v${RELEASE}/semaphore_${RELEASE}_linux_arm64.deb +curl -fsSL "https://github.com/semaphoreui/semaphore/releases/download/v${RELEASE}/semaphore_${RELEASE}_linux_arm64.deb" -o $(basename "https://github.com/semaphoreui/semaphore/releases/download/v${RELEASE}/semaphore_${RELEASE}_linux_arm64.deb") $STD dpkg -i semaphore_${RELEASE}_linux_arm64.deb SEM_HASH=$(openssl rand -base64 32) diff --git a/install/sftpgo-install.sh b/install/sftpgo-install.sh index 8d32686a1..770c931b0 100644 --- a/install/sftpgo-install.sh +++ b/install/sftpgo-install.sh @@ -16,19 +16,21 @@ update_os msg_info "Installing Dependencies" $STD apt-get install -y gpg $STD apt-get install -y sqlite3 -$STD apt-get install -y wget -$STD apt-get install -y openssh-server msg_ok "Installed Dependencies" msg_info "Installing Golang" -$STD wget https://golang.org/dl/go1.23.2.linux-arm64.tar.gz -$STD tar -xzf go1.23.2.linux-arm64.tar.gz -C /usr/local -$STD ln -s /usr/local/go/bin/go /usr/local/bin/go -rm -rf go1.23.2.linux-arm64.tar.gz +set +o pipefail +temp_file=$(mktemp) +golang_tarball=$(curl -fsSL https://go.dev/dl/ | grep -oP 'go[\d\.]+\.linux-arm64\.tar\.gz' | head -n 1) +curl -fsSL "https://golang.org/dl/${golang_tarball}" -o "$temp_file" +tar -C /usr/local -xzf "$temp_file" +ln -sf /usr/local/go/bin/go /usr/local/bin/go +rm -f "$temp_file" +set -o pipefail msg_ok "Installed Golang" msg_info "Installing SFTPGo" -curl -sS https://ftp.osuosl.org/pub/sftpgo/apt/gpg.key | gpg --dearmor -o /usr/share/keyrings/sftpgo-archive-keyring.gpg +curl -fsSL https://ftp.osuosl.org/pub/sftpgo/apt/gpg.key | gpg --dearmor -o /usr/share/keyrings/sftpgo-archive-keyring.gpg echo "deb [signed-by=/usr/share/keyrings/sftpgo-archive-keyring.gpg] https://ftp.osuosl.org/pub/sftpgo/apt bookworm main" >/etc/apt/sources.list.d/sftpgo.list $STD apt-get update $STD apt-get install -y sftpgo diff --git a/install/silverbullet-install.sh b/install/silverbullet-install.sh index 6b6881037..14f5b8a9f 100644 --- a/install/silverbullet-install.sh +++ b/install/silverbullet-install.sh @@ -5,7 +5,7 @@ # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE # Source: https://silverbullet.md -source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" +source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" color verb_ip6 catch_errors @@ -13,19 +13,10 @@ setting_up_container network_check update_os -msg_info "Installing Dependencies" -$STD apt-get install -y \ - curl \ - sudo \ - mc \ - wget \ - openssh-server -msg_ok "Installed Dependencies" - msg_info "Installing Silverbullet" -RELEASE=$(curl -s https://api.github.com/repos/silverbulletmd/silverbullet/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') +RELEASE=$(curl -fsSL https://api.github.com/repos/silverbulletmd/silverbullet/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') mkdir -p /opt/silverbullet/bin /opt/silverbullet/space -wget -q https://github.com/silverbulletmd/silverbullet/releases/download/${RELEASE}/silverbullet-server-linux-aarch64.zip +curl -fsSL "https://github.com/silverbulletmd/silverbullet/releases/download/${RELEASE}/silverbullet-server-linux-aarch64.zip" -o $(basename "https://github.com/silverbulletmd/silverbullet/releases/download/${RELEASE}/silverbullet-server-linux-aarch64.zip") unzip -oq -d /opt/silverbullet/bin/ silverbullet-server-linux-aarch64.zip chmod +x /opt/silverbullet/bin/silverbullet echo "${RELEASE}" >/opt/${APPLICATION}_version.txt diff --git a/install/slskd-install.sh b/install/slskd-install.sh new file mode 100644 index 000000000..bdf4d2e45 --- /dev/null +++ b/install/slskd-install.sh @@ -0,0 +1,120 @@ +#!/usr/bin/env bash + +# Copyright (c) 2021-2025 community-scripts ORG +# Author: vhsdream +# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE +# Source: https://github.com/slskd/slskd/, https://soularr.net + +source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" +color +verb_ip6 +catch_errors +setting_up_container +network_check +update_os + +msg_info "Installing Dependencies" +$STD apt-get install -y \ + python3-pip +msg_ok "Installed Dependencies" + +msg_info "Setup ${APPLICATION}" +tmp_file=$(mktemp) +RELEASE=$(curl -s https://api.github.com/repos/slskd/slskd/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') +curl -fsSL "https://github.com/slskd/slskd/releases/download/${RELEASE}/slskd-${RELEASE}-linux-x64.zip" -o $tmp_file +unzip -q $tmp_file -d /opt/${APPLICATION} +echo "${RELEASE}" >/opt/${APPLICATION}_version.txt +JWT_KEY=$(openssl rand -base64 44) +SLSKD_API_KEY=$(openssl rand -base64 44) +cp /opt/${APPLICATION}/config/slskd.example.yml /opt/${APPLICATION}/config/slskd.yml +sed -i \ + -e "\|web:|,\|cidr|s|^#||" \ + -e "\|https:|,\|5031|s|false|true|" \ + -e "\|api_keys|,\|cidr|s|/etc/systemd/system/${APPLICATION}.service +[Unit] +Description=${APPLICATION} Service +After=network.target +Wants=network.target + +[Service] +WorkingDirectory=/opt/${APPLICATION} +ExecStart=/opt/${APPLICATION}/slskd --config /opt/${APPLICATION}/config/slskd.yml +Restart=always + +[Install] +WantedBy=multi-user.target +EOF + +cat </etc/systemd/system/soularr.timer +[Unit] +Description=Soularr service timer +RefuseManualStart=no +RefuseManualStop=no + +[Timer] +Persistent=true +# run every 5 minutes +OnCalendar=*-*-* *:0/5:00 +Unit=soularr.service + +[Install] +WantedBy=timers.target +EOF + +cat </etc/systemd/system/soularr.service +[Unit] +Description=Soularr service +After=network.target slskd.service + +[Service] +Type=simple +WorkingDirectory=/opt/soularr +ExecStart=/bin/bash -c /opt/soularr/run.sh + +[Install] +WantedBy=multi-user.target +EOF +systemctl enable -q --now ${APPLICATION} +systemctl enable -q soularr.timer +msg_ok "Created Services" + +motd_ssh +customize + +msg_info "Cleaning up" +rm -rf $tmp_file +rm -rf /tmp/main.zip +$STD apt-get -y autoremove +$STD apt-get -y autoclean +msg_ok "Cleaned" diff --git a/install/snipeit-install.sh b/install/snipeit-install.sh index b6be70827..8df86daf7 100644 --- a/install/snipeit-install.sh +++ b/install/snipeit-install.sh @@ -39,8 +39,8 @@ msg_ok "Set up database" msg_info "Installing Snipe-IT" temp_file=$(mktemp) -RELEASE=$(curl -s https://api.github.com/repos/snipe/snipe-it/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') -wget -q "https://github.com/snipe/snipe-it/archive/refs/tags/v${RELEASE}.tar.gz" -O $temp_file +RELEASE=$(curl -fsSL https://api.github.com/repos/snipe/snipe-it/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') +curl -fsSL "https://github.com/snipe/snipe-it/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file" tar zxf $temp_file mv snipe-it-${RELEASE} /opt/snipe-it cd /opt/snipe-it diff --git a/install/sonarr-install.sh b/install/sonarr-install.sh index e6ce38aa9..6d9e088ca 100644 --- a/install/sonarr-install.sh +++ b/install/sonarr-install.sh @@ -22,7 +22,7 @@ msg_ok "Installed Dependencies" msg_info "Installing Sonarr v4" mkdir -p /var/lib/sonarr/ chmod 775 /var/lib/sonarr/ -wget -q -O SonarrV4.tar.gz 'https://services.sonarr.tv/v1/download/main/latest?version=4&os=linux&arch=arm64' +curl -fsSL "https://services.sonarr.tv/v1/download/main/latest?version=4&os=linux&arch=arm64" -o "SonarrV4.tar.gz" tar -xzf SonarrV4.tar.gz mv Sonarr /opt rm -rf SonarrV4.tar.gz diff --git a/install/spoolman-install.sh b/install/spoolman-install.sh index e36ec91e2..a90ed750e 100644 --- a/install/spoolman-install.sh +++ b/install/spoolman-install.sh @@ -35,14 +35,14 @@ $STD apt-get install -y \ msg_ok "Setup Python3" msg_info "Installing Spoolman" -RELEASE=$(wget -q https://github.com/Donkie/Spoolman/releases/latest -O - | grep "title>Release" | cut -d " " -f 4) +RELEASE=$(curl -fsSL https://github.com/Donkie/Spoolman/releases/latest | grep "title>Release" | cut -d " " -f 4) cd /opt -wget -q https://github.com/Donkie/Spoolman/releases/download/$RELEASE/spoolman.zip +curl -fsSL "https://github.com/Donkie/Spoolman/releases/download/$RELEASE/spoolman.zip" -o $(basename "https://github.com/Donkie/Spoolman/releases/download/$RELEASE/spoolman.zip") unzip -q spoolman.zip -d spoolman rm -rf spoolman.zip cd spoolman $STD pip3 install -r requirements.txt -wget -q https://raw.githubusercontent.com/Donkie/Spoolman/master/.env.example -O .env +curl -fsSL "https://raw.githubusercontent.com/Donkie/Spoolman/master/.env.example" -o ".env" echo "${RELEASE}" >/opt/${APPLICATION}_version.txt msg_ok "Installed Spoolman" @@ -61,7 +61,7 @@ User=root [Install] WantedBy=multi-user.target EOF -systemctl enable -q --now spoolman.service +systemctl enable -q --now spoolman msg_ok "Created Service" motd_ssh diff --git a/install/sqlserver2022-install.sh b/install/sqlserver2022-install.sh index 9860ddb17..ef7b39582 100644 --- a/install/sqlserver2022-install.sh +++ b/install/sqlserver2022-install.sh @@ -20,8 +20,8 @@ $STD apt install -y \ msg_ok "Installed Dependencies" msg_info "Setup SQL Server 2022" -curl -s https://packages.microsoft.com/keys/microsoft.asc | sudo tee /etc/apt/trusted.gpg.d/microsoft.asc > /dev/null -curl -fsSL https://packages.microsoft.com/config/ubuntu/22.04/mssql-server-2022.list | tee /etc/apt/sources.list.d/mssql-server-2022.list > /dev/null +curl -fsSL https://packages.microsoft.com/keys/microsoft.asc | sudo tee /etc/apt/trusted.gpg.d/microsoft.asc >/dev/null +curl -fsSL https://packages.microsoft.com/config/ubuntu/22.04/mssql-server-2022.list | tee /etc/apt/sources.list.d/mssql-server-2022.list >/dev/null $STD apt-get update -y $STD apt-get install -y mssql-server msg_ok "Setup Server 2022" @@ -29,8 +29,8 @@ msg_ok "Setup Server 2022" msg_info "Installing SQL Server Tools" export DEBIAN_FRONTEND=noninteractive export ACCEPT_EULA=Y -curl -s https://packages.microsoft.com/keys/microsoft.asc | tee /etc/apt/trusted.gpg.d/microsoft.asc > /dev/null -curl -fsSL https://packages.microsoft.com/config/ubuntu/22.04/prod.list | tee /etc/apt/sources.list.d/mssql-release.list > /dev/null +curl -fsSL https://packages.microsoft.com/keys/microsoft.asc | tee /etc/apt/trusted.gpg.d/microsoft.asc >/dev/null +curl -fsSL https://packages.microsoft.com/config/ubuntu/22.04/prod.list | tee /etc/apt/sources.list.d/mssql-release.list >/dev/null $STD apt-get update $STD apt-get install -y -qq \ mssql-tools18 \ diff --git a/install/stirling-pdf-install.sh b/install/stirling-pdf-install.sh index ec4da46c1..5f1d5baaf 100644 --- a/install/stirling-pdf-install.sh +++ b/install/stirling-pdf-install.sh @@ -56,8 +56,8 @@ $STD pip3 install \ msg_ok "Installed Python Dependencies" msg_info "Installing Azul Zulu" -wget -qO /etc/apt/trusted.gpg.d/zulu-repo.asc "https://keyserver.ubuntu.com/pks/lookup?op=get&search=0xB1998361219BD9C9" -wget -q https://cdn.azul.com/zulu/bin/zulu-repo_1.0.0-3_all.deb +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 $STD apt-get update $STD apt-get -y install zulu17-jdk @@ -77,8 +77,8 @@ $STD apt-get install -y 'tesseract-ocr-*' msg_ok "Installed Language Packs" msg_info "Installing Stirling-PDF (Additional Patience)" -RELEASE=$(curl -s https://api.github.com/repos/Stirling-Tools/Stirling-PDF/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') -wget -q https://github.com/Stirling-Tools/Stirling-PDF/archive/refs/tags/v${RELEASE}.tar.gz +RELEASE=$(curl -fsSL https://api.github.com/repos/Stirling-Tools/Stirling-PDF/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') +curl -fsSL "https://github.com/Stirling-Tools/Stirling-PDF/archive/refs/tags/v${RELEASE}.tar.gz" -o $(basename "https://github.com/Stirling-Tools/Stirling-PDF/archive/refs/tags/v${RELEASE}.tar.gz") tar -xzf v${RELEASE}.tar.gz cd Stirling-PDF-$RELEASE chmod +x ./gradlew diff --git a/install/suwayomiserver-install.sh b/install/suwayomiserver-install.sh index f432597d3..9a23c147d 100644 --- a/install/suwayomiserver-install.sh +++ b/install/suwayomiserver-install.sh @@ -20,9 +20,9 @@ $STD apt-get install -y \ msg_ok "Installed Dependencies" msg_info "Settting up Suwayomi-Server" -URL=$(curl -s https://api.github.com/repos/Suwayomi/Suwayomi-Server/releases/latest | grep "browser_download_url" | awk '{print substr($2, 2, length($2)-2) }' | tail -n+2 | head -n 1) -RELEASE=$(curl -s https://api.github.com/repos/Suwayomi/Suwayomi-Server/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') -wget -q $URL +URL=$(curl -fsSL https://api.github.com/repos/Suwayomi/Suwayomi-Server/releases/latest | grep "browser_download_url" | awk '{print substr($2, 2, length($2)-2) }' | tail -n+2 | head -n 1) +RELEASE=$(curl -fsSL https://api.github.com/repos/Suwayomi/Suwayomi-Server/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') +curl -fsSL "$URL" -o $(basename "$URL") $STD dpkg -i *.deb echo ${RELEASE} >/opt/suwayomi-server_version.txt msg_ok "Done setting up Suwayomi-Server" diff --git a/install/syncthing-install.sh b/install/syncthing-install.sh index bd214fa47..0082a5590 100644 --- a/install/syncthing-install.sh +++ b/install/syncthing-install.sh @@ -20,7 +20,7 @@ rm -rf /usr/lib/python3.*/EXTERNALLY-MANAGED msg_ok "Installed Dependencies" msg_info "Installing Syncthing" -curl -sL -o /usr/share/keyrings/syncthing-archive-keyring.gpg https://syncthing.net/release-key.gpg +curl -fsSL -o /usr/share/keyrings/syncthing-archive-keyring.gpg https://syncthing.net/release-key.gpg sh -c 'echo "deb [signed-by=/usr/share/keyrings/syncthing-archive-keyring.gpg] https://apt.syncthing.net/ syncthing stable" > /etc/apt/sources.list.d/syncthing.list' $STD apt-get update $STD apt-get install -y syncthing diff --git a/install/tandoor-install.sh b/install/tandoor-install.sh index 2bf9869b0..cf271b766 100644 --- a/install/tandoor-install.sh +++ b/install/tandoor-install.sh @@ -64,7 +64,7 @@ $STD pip3 install -r /opt/tandoor/requirements.txt cd /opt/tandoor/vue $STD yarn install $STD yarn build -wget -q https://raw.githubusercontent.com/TandoorRecipes/recipes/develop/.env.template -O /opt/tandoor/.env +curl -fsSL "https://raw.githubusercontent.com/TandoorRecipes/recipes/develop/.env.template" -o "/opt/tandoor/.env" DB_NAME=db_recipes DB_USER=tandoor DB_ENCODING=utf8 diff --git a/install/tasmoadmin-install.sh b/install/tasmoadmin-install.sh index 83cc19813..5420ea77f 100644 --- a/install/tasmoadmin-install.sh +++ b/install/tasmoadmin-install.sh @@ -27,7 +27,7 @@ $STD apt-get install -y openssh-server msg_ok "Installed Dependencies" msg_info "Installing TasmoAdmin" -wget -q https://github.com/TasmoAdmin/TasmoAdmin/releases/download/v3.1.1/tasmoadmin_v3.1.1.tar.gz +curl -fsSL "https://github.com/TasmoAdmin/TasmoAdmin/releases/download/v3.1.1/tasmoadmin_v3.1.1.tar.gz" -o $(basename "https://github.com/TasmoAdmin/TasmoAdmin/releases/download/v3.1.1/tasmoadmin_v3.1.1.tar.gz") tar -xzf tasmoadmin_v3.1.1.tar.gz -C /var/www/ rm -rf tasmoadmin_v3.1.1.tar.gz /etc/php/8.2/apache2/conf.d/10-opcache.ini chown -R www-data:www-data /var/www/tasmoadmin diff --git a/install/tasmocompiler-install.sh b/install/tasmocompiler-install.sh index e15b16847..2ff43218c 100644 --- a/install/tasmocompiler-install.sh +++ b/install/tasmocompiler-install.sh @@ -39,8 +39,8 @@ msg_ok "Setup Platformio" msg_info "Setup TasmoCompiler" mkdir /tmp/Tasmota -RELEASE=$(curl -s https://api.github.com/repos/benzino77/tasmocompiler/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') -wget -q https://github.com/benzino77/tasmocompiler/archive/refs/tags/v${RELEASE}.tar.gz -O /tmp/v${RELEASE}.tar.gz +RELEASE=$(curl -fsSL https://api.github.com/repos/benzino77/tasmocompiler/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') +curl -fsSL "https://github.com/benzino77/tasmocompiler/archive/refs/tags/v${RELEASE}.tar.gz" -o "/tmp/v${RELEASE}.tar.gz" cd /tmp tar xzf /tmp/v${RELEASE}.tar.gz mv tasmocompiler-${RELEASE}/ /opt/tasmocompiler/ diff --git a/install/tdarr-install.sh b/install/tdarr-install.sh index e53dbe757..914b30ee5 100644 --- a/install/tdarr-install.sh +++ b/install/tdarr-install.sh @@ -33,8 +33,8 @@ msg_ok "Set Up Hardware Acceleration" msg_info "Installing Tdarr" mkdir -p /opt/tdarr cd /opt/tdarr -RELEASE=$(curl -s https://f000.backblazeb2.com/file/tdarrs/versions.json | grep -oP '(?<="Tdarr_Updater": ")[^"]+' | grep linux_arm64 | head -n 1) -wget -q $RELEASE +RELEASE=$(curl -fsSL https://f000.backblazeb2.com/file/tdarrs/versions.json | grep -oP '(?<="Tdarr_Updater": ")[^"]+' | grep linux_arm64 | head -n 1) +curl -fsSL "$RELEASE" -o $(basename "$RELEASE") $STD unzip Tdarr_Updater.zip rm -rf Tdarr_Updater.zip chmod +x Tdarr_Updater diff --git a/install/teddycloud-install.sh b/install/teddycloud-install.sh index a5c2ca381..c16224649 100644 --- a/install/teddycloud-install.sh +++ b/install/teddycloud-install.sh @@ -24,9 +24,9 @@ $STD apt-get install -y \ msg_ok "Installed Dependencies" msg_info "Installing TeddyCloud" -RELEASE="$(curl -s https://api.github.com/repos/toniebox-reverse-engineering/teddycloud/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')" +RELEASE="$(curl -fsSL https://api.github.com/repos/toniebox-reverse-engineering/teddycloud/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')" VERSION="${RELEASE#tc_v}" -wget -q "https://github.com/toniebox-reverse-engineering/teddycloud/releases/download/${RELEASE}/teddycloud.amd64.release_v${VERSION}.zip" +curl -fsSL "https://github.com/toniebox-reverse-engineering/teddycloud/releases/download/${RELEASE}/teddycloud.amd64.release_v${VERSION}.zip" -o $(basename "https://github.com/toniebox-reverse-engineering/teddycloud/releases/download/${RELEASE}/teddycloud.amd64.release_v${VERSION}.zip") unzip -q -d "/opt/teddycloud-${VERSION}" "teddycloud.amd64.release_v${VERSION}.zip" ln -fns "/opt/teddycloud-${VERSION}" /opt/teddycloud rm -rf teddycloud.amd64.release_v${VERSION}.zip diff --git a/install/the-lounge-install.sh b/install/the-lounge-install.sh index c6097983e..4fe52a7e5 100644 --- a/install/the-lounge-install.sh +++ b/install/the-lounge-install.sh @@ -15,12 +15,8 @@ update_os msg_info "Installing Dependencies" $STD apt-get install -y \ - curl \ gpg \ - wget \ - mc \ - wget \ - openssh-server + build-essential msg_ok "Installed Dependencies" msg_info "Setting up Node.js Repository" @@ -33,12 +29,13 @@ msg_info "Installing Node.js" $STD apt-get update $STD apt-get install -y nodejs $STD npm install --global yarn +$STD npm install --global node-gyp msg_ok "Installed Node.js" msg_info "Installing The Lounge" cd /opt -RELEASE=$(curl -s https://api.github.com/repos/thelounge/thelounge-deb/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') -wget -q https://github.com/thelounge/thelounge-deb/releases/download/v${RELEASE}/thelounge_${RELEASE}_all.deb +RELEASE=$(curl -fsSL https://api.github.com/repos/thelounge/thelounge-deb/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') +curl -fsSL "https://github.com/thelounge/thelounge-deb/releases/download/v${RELEASE}/thelounge_${RELEASE}_all.deb" -o $(basename "https://github.com/thelounge/thelounge-deb/releases/download/v${RELEASE}/thelounge_${RELEASE}_all.deb") $STD dpkg -i ./thelounge_${RELEASE}_all.deb echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt" msg_ok "Installed The Lounge" diff --git a/install/threadfin-install.sh b/install/threadfin-install.sh index 389996f36..7cde88e2d 100644 --- a/install/threadfin-install.sh +++ b/install/threadfin-install.sh @@ -16,13 +16,11 @@ update_os msg_info "Installing Dependencies" $STD apt-get install -y ffmpeg $STD apt-get install -y vlc -$STD apt-get install -y wget -$STD apt-get install -y openssh-server msg_ok "Installed Dependencies" msg_info "Installing Threadfin" mkdir -p /opt/threadfin -wget -q -O /opt/threadfin/threadfin 'https://github.com/Threadfin/Threadfin/releases/latest/download/Threadfin_linux_arm64' +curl -fsSL "https://github.com/Threadfin/Threadfin/releases/latest/download/Threadfin_linux_arm64" -o "/opt/threadfin/threadfin" chmod +x /opt/threadfin/threadfin msg_ok "Installed Threadfin" @@ -42,7 +40,7 @@ Restart=on-failure [Install] WantedBy=multi-user.target EOF -systemctl enable -q --now threadfin.service +systemctl enable -q --now threadfin msg_ok "Created Service" motd_ssh diff --git a/install/tianji-install.sh b/install/tianji-install.sh index d17bbd676..fce64a9f1 100644 --- a/install/tianji-install.sh +++ b/install/tianji-install.sh @@ -33,7 +33,7 @@ msg_ok "Installed Dependencies" msg_info "Installing Node.js" mkdir -p /etc/apt/keyrings curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg -echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main" >/etc/apt/sources.list.d/nodesource.list +echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_22.x nodistro main" >/etc/apt/sources.list.d/nodesource.list $STD apt-get update $STD apt-get install -y nodejs $STD npm install -g pnpm@9.7.1 @@ -59,8 +59,8 @@ msg_ok "Set up PostgreSQL" msg_info "Installing Tianji (Extreme Patience)" cd /opt -RELEASE=$(curl -s https://api.github.com/repos/msgbyte/tianji/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') -wget -q "https://github.com/msgbyte/tianji/archive/refs/tags/v${RELEASE}.zip" +RELEASE=$(curl -fsSL https://api.github.com/repos/msgbyte/tianji/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') +curl -fsSL "https://github.com/msgbyte/tianji/archive/refs/tags/v${RELEASE}.zip" -o $(basename "https://github.com/msgbyte/tianji/archive/refs/tags/v${RELEASE}.zip") unzip -q v${RELEASE}.zip mv tianji-${RELEASE} /opt/tianji cd tianji @@ -97,7 +97,7 @@ Environment=NODE_ENV=production [Install] WantedBy=multi-user.target EOF -systemctl enable -q --now tianji.service +systemctl enable -q --now tianji msg_ok "Created Service" motd_ssh diff --git a/install/traccar-install.sh b/install/traccar-install.sh index 330b08453..c01e8d464 100644 --- a/install/traccar-install.sh +++ b/install/traccar-install.sh @@ -13,17 +13,9 @@ setting_up_container network_check update_os -msg_info "Installing Dependencies" -$STD apt-get install -y curl -$STD apt-get install -y sudo -$STD apt-get install -y mc -$STD apt-get install -y wget -$STD apt-get install -y openssh-server -msg_ok "Installed Dependencies" - -RELEASE=$(curl -s https://api.github.com/repos/traccar/traccar/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') +RELEASE=$(curl -fsSL https://api.github.com/repos/traccar/traccar/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') msg_info "Installing Traccar v${RELEASE}" -wget -q https://github.com/traccar/traccar/releases/download/v${RELEASE}/traccar-linux-arm-${RELEASE}.zip +curl -fsSL "https://github.com/traccar/traccar/releases/download/v${RELEASE}/traccar-linux-arm-${RELEASE}.zip" -o $(basename "https://github.com/traccar/traccar/releases/download/v${RELEASE}/traccar-linux-arm-${RELEASE}.zip") $STD unzip traccar-linux-arm-${RELEASE}.zip $STD ./traccar.run systemctl enable -q --now traccar diff --git a/install/traefik-install.sh b/install/traefik-install.sh index a29d06b06..c98c437c7 100644 --- a/install/traefik-install.sh +++ b/install/traefik-install.sh @@ -16,14 +16,12 @@ update_os msg_info "Installing Dependencies" $STD apt-get install -y gpg $STD apt-get install -y apt-transport-https -$STD apt-get install -y wget -$STD apt-get install -y openssh-server msg_ok "Installed Dependencies" -RELEASE=$(curl -s https://api.github.com/repos/traefik/traefik/releases | grep -oP '"tag_name":\s*"v\K[\d.]+?(?=")' | sort -V | tail -n 1) +RELEASE=$(curl -fsSL https://api.github.com/repos/traefik/traefik/releases | grep -oP '"tag_name":\s*"v\K[\d.]+?(?=")' | sort -V | tail -n 1) msg_info "Installing Traefik v${RELEASE}" mkdir -p /etc/traefik/{conf.d,ssl} -wget -q https://github.com/traefik/traefik/releases/download/v${RELEASE}/traefik_v${RELEASE}_linux_arm64.tar.gz +curl -fsSL "https://github.com/traefik/traefik/releases/download/v${RELEASE}/traefik_v${RELEASE}_linux_arm64.tar.gz" -o $(basename "https://github.com/traefik/traefik/releases/download/v${RELEASE}/traefik_v${RELEASE}_linux_arm64.tar.gz") tar -C /tmp -xzf traefik*.tar.gz mv /tmp/traefik /usr/bin/ rm -rf traefik*.tar.gz @@ -101,7 +99,7 @@ ExecReload=/bin/kill -USR1 \$MAINPID WantedBy=multi-user.target EOF -systemctl enable -q --now traefik.service +systemctl enable -q --now traefik msg_ok "Created Service" motd_ssh diff --git a/install/trilium-install.sh b/install/trilium-install.sh index 086a22415..0f9f53824 100644 --- a/install/trilium-install.sh +++ b/install/trilium-install.sh @@ -24,8 +24,8 @@ msg_ok "Installed Dependencies" msg_info "Setup TriliumNext" cd /opt -RELEASE=$(curl -s https://api.github.com/repos/TriliumNext/Notes/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') -wget -q https://github.com/TriliumNext/Notes/releases/download/v${RELEASE}/TriliumNextNotes-Server-v${RELEASE}-linux-x64.tar.xz +RELEASE=$(curl -fsSL https://api.github.com/repos/TriliumNext/Notes/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') +curl -fsSL "https://github.com/TriliumNext/Notes/releases/download/v${RELEASE}/TriliumNextNotes-Server-v${RELEASE}-linux-x64.tar.xz" -o $(basename "https://github.com/TriliumNext/Notes/releases/download/v${RELEASE}/TriliumNextNotes-Server-v${RELEASE}-linux-x64.tar.xz") tar -xf TriliumNextNotes-Server-v${RELEASE}-linux-x64.tar.xz mv TriliumNextNotes-Server-$RELEASE-linux-x64 /opt/trilium echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt" diff --git a/install/typesense-install.sh b/install/typesense-install.sh index 48644a00c..489d4efd0 100644 --- a/install/typesense-install.sh +++ b/install/typesense-install.sh @@ -23,9 +23,9 @@ $STD apt-get install -y \ msg_ok "Installed Dependencies" msg_info "Installing TypeSense" -RELEASE=$(curl -s https://api.github.com/repos/typesense/typesense/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') +RELEASE=$(curl -fsSL https://api.github.com/repos/typesense/typesense/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') cd /opt -wget -q https://dl.typesense.org/releases/${RELEASE}/typesense-server-${RELEASE}-amd64.deb +curl -fsSL "https://dl.typesense.org/releases/${RELEASE}/typesense-server-${RELEASE}-amd64.deb" -o $(basename "https://dl.typesense.org/releases/${RELEASE}/typesense-server-${RELEASE}-amd64.deb") $STD apt install -y /opt/typesense-server-${RELEASE}-amd64.deb echo 'enable-cors = true' >>/etc/typesense/typesense-server.ini echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt" diff --git a/install/umami-install.sh b/install/umami-install.sh index b636234dc..e5866960d 100644 --- a/install/umami-install.sh +++ b/install/umami-install.sh @@ -74,7 +74,7 @@ ExecStart=/usr/bin/yarn run start [Install] WantedBy=multi-user.target EOF -systemctl enable -q --now umami.service +systemctl enable -q --now umami msg_ok "Created Service" motd_ssh diff --git a/install/umbrel-install.sh b/install/umbrel-install.sh index b5982be4d..f9a5838bc 100644 --- a/install/umbrel-install.sh +++ b/install/umbrel-install.sh @@ -5,7 +5,7 @@ # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE # Source: https://umbrel.com/ -source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" +source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" color verb_ip6 catch_errors @@ -24,10 +24,10 @@ msg_ok "Installed Dependencies" msg_info "Installing Umbrel (Patience)" DOCKER_CONFIG_PATH='/etc/docker/daemon.json' mkdir -p $(dirname $DOCKER_CONFIG_PATH) -echo -e '{\n "log-driver": "journald"\n}' > /etc/docker/daemon.json +echo -e '{\n "log-driver": "journald"\n}' >/etc/docker/daemon.json $STD bash <(curl -fsSL https://umbrel.sh) systemctl daemon-reload -$STD systemctl enable --now umbrel-startup.service +$STD systemctl enable --now umbrel-startup msg_ok "Installed Umbrel" motd_ssh diff --git a/install/unifi-install.sh b/install/unifi-install.sh index 1fe5f4809..079c32f89 100644 --- a/install/unifi-install.sh +++ b/install/unifi-install.sh @@ -16,27 +16,38 @@ update_os msg_info "Installing Dependencies" $STD apt-get install -y apt-transport-https $STD apt-get install -y gnupg -$STD apt-get install -y wget -$STD apt-get install -y openssh-server msg_ok "Installed Dependencies" msg_info "Installing Eclipse Temurin JRE" -wget -qO- https://packages.adoptium.net/artifactory/api/gpg/key/public | gpg --dearmor >/etc/apt/trusted.gpg.d/adoptium.gpg -echo "deb [arch=arm64 signed-by=/etc/apt/trusted.gpg.d/adoptium.gpg] https://packages.adoptium.net/artifactory/deb jammy main" >/etc/apt/sources.list.d/adoptium.list +curl -fsSL "https://packages.adoptium.net/artifactory/api/gpg/key/public" | gpg --dearmor >/etc/apt/trusted.gpg.d/adoptium.gpg +echo "deb [arch=arm64 signed-by=/etc/apt/trusted.gpg.d/adoptium.gpg] https://packages.adoptium.net/artifactory/deb bookworm main" >/etc/apt/sources.list.d/adoptium.list $STD apt-get update $STD apt-get install -y temurin-17-jre msg_ok "Installed Eclipse Temurin JRE" -msg_info "Installing MongoDB" -wget -qO- https://www.mongodb.org/static/pgp/server-7.0.asc | gpg --dearmor >/usr/share/keyrings/mongodb-server-7.0.gpg -echo "deb [ signed-by=/usr/share/keyrings/mongodb-server-7.0.gpg ] http://repo.mongodb.org/apt/debian bookworm/mongodb-org/7.0 main" >/etc/apt/sources.list.d/mongodb-org-7.0.list -$STD apt-get update -$STD apt-get install -y mongodb-org +if ! grep -q -m1 'avx[^ ]*' /proc/cpuinfo; then + msg_ok "No AVX Support Detected" + msg_info "Installing MongoDB 4.4" + if ! dpkg -l | grep -q "libssl1.1"; then + curl -fsSL "http://security.debian.org/debian-security/pool/updates/main/o/openssl/libssl1.1_1.1.1n-0+deb10u6_arm64.deb" -o $(basename "http://security.debian.org/debian-security/pool/updates/main/o/openssl/libssl1.1_1.1.1n-0+deb10u6_arm64.deb") + $STD dpkg -i libssl1.1_1.1.1n-0+deb10u6_arm64.deb + fi + curl -fsSL "https://www.mongodb.org/static/pgp/server-4.4.asc" | gpg --dearmor >/usr/share/keyrings/mongodb-server-4.4.gpg + echo "deb [signed-by=/usr/share/keyrings/mongodb-server-4.4.gpg] https://repo.mongodb.org/apt/debian buster/mongodb-org/4.4 main" >/etc/apt/sources.list.d/mongodb-org-4.4.list + $STD apt-get update + $STD apt-get install -y mongodb-org +else + msg_info "Installing MongoDB 7.0" + curl -fsSL "https://www.mongodb.org/static/pgp/server-7.0.asc" | gpg --dearmor >/usr/share/keyrings/mongodb-server-7.0.gpg + echo "deb [ signed-by=/usr/share/keyrings/mongodb-server-7.0.gpg ] http://repo.mongodb.org/apt/debian bookworm/mongodb-org/7.0 main" >/etc/apt/sources.list.d/mongodb-org-7.0.list + $STD apt-get update + $STD apt-get install -y mongodb-org +fi msg_ok "Installed MongoDB" msg_info "Installing UniFi Network Server" -wget -qO /etc/apt/trusted.gpg.d/unifi-repo.gpg https://dl.ui.com/unifi/unifi-repo.gpg -echo "deb [ arch=amd64 signed-by=/etc/apt/trusted.gpg.d/unifi-repo.gpg] https://www.ui.com/downloads/unifi/debian stable ubiquiti" >/etc/apt/sources.list.d/100-ubnt-unifi.list +curl -fsSL "https://dl.ui.com/unifi/unifi-repo.gpg" -o "/etc/apt/trusted.gpg.d/unifi-repo.gpg" +echo "deb [ arch=arm64 signed-by=/etc/apt/trusted.gpg.d/unifi-repo.gpg] https://www.ui.com/downloads/unifi/debian stable ubiquiti" >/etc/apt/sources.list.d/100-ubnt-unifi.list $STD apt-get update $STD apt-get install -y unifi msg_ok "Installed UniFi Network Server" diff --git a/install/uptimekuma-install.sh b/install/uptimekuma-install.sh index bc1861ea1..e510264d7 100644 --- a/install/uptimekuma-install.sh +++ b/install/uptimekuma-install.sh @@ -53,7 +53,7 @@ ExecStart=/usr/bin/npm start [Install] WantedBy=multi-user.target" >$service_path -$STD systemctl enable --now uptime-kuma.service +$STD systemctl enable --now uptime-kuma msg_ok "Created Service" motd_ssh diff --git a/install/vaultwarden-install.sh b/install/vaultwarden-install.sh index 59c637e49..543a40e0b 100644 --- a/install/vaultwarden-install.sh +++ b/install/vaultwarden-install.sh @@ -30,20 +30,20 @@ $STD apt-get -qqy install \ openssh-server msg_ok "Installed Dependencies" -WEBVAULT=$(curl -s https://api.github.com/repos/dani-garcia/bw_web_builds/releases/latest | +WEBVAULT=$(curl -fsSL https://api.github.com/repos/dani-garcia/bw_web_builds/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') -VAULT=$(curl -s https://api.github.com/repos/dani-garcia/vaultwarden/releases/latest | +VAULT=$(curl -fsSL https://api.github.com/repos/dani-garcia/vaultwarden/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') msg_info "Installing Rust" -wget -qL https://sh.rustup.rs -$STD bash index.html -y --profile minimal -echo 'export PATH=~/.cargo/bin:$PATH' >>~/.bashrc -export PATH=~/.cargo/bin:$PATH -rm index.html +curl -fsSL https://sh.rustup.rs -o rustup-init.sh +$STD bash rustup-init.sh -y --profile minimal +echo 'export PATH="$HOME/.cargo/bin:$PATH"' >> ~/.bashrc +export PATH="$HOME/.cargo/bin:$PATH" +rm rustup-init.sh msg_ok "Installed Rust" msg_info "Building Vaultwarden ${VAULT} (Patience)" @@ -109,7 +109,7 @@ AmbientCapabilities=CAP_NET_BIND_SERVICE [Install] WantedBy=multi-user.target" >$service_path systemctl daemon-reload -$STD systemctl enable --now vaultwarden.service +$STD systemctl enable --now vaultwarden msg_ok "Created Service" motd_ssh diff --git a/install/victoriametrics-install.sh b/install/victoriametrics-install.sh index 178fcd30c..3bc53732a 100644 --- a/install/victoriametrics-install.sh +++ b/install/victoriametrics-install.sh @@ -5,7 +5,7 @@ # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE # Source: https://github.com/VictoriaMetrics/VictoriaMetrics -source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" +source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" color verb_ip6 catch_errors @@ -17,9 +17,9 @@ msg_info "Setup VictoriaMetrics" temp_dir=$(mktemp -d) cd $temp_dir mkdir -p /opt/victoriametrics/data -RELEASE=$(curl -s https://api.github.com/repos/VictoriaMetrics/VictoriaMetrics/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') -wget -q https://github.com/VictoriaMetrics/VictoriaMetrics/releases/download/v${RELEASE}/victoria-metrics-linux-amd64-v${RELEASE}.tar.gz -wget -q https://github.com/VictoriaMetrics/VictoriaMetrics/releases/download/v${RELEASE}/vmutils-linux-amd64-v${RELEASE}.tar.gz +RELEASE=$(curl -fsSL https://api.github.com/repos/VictoriaMetrics/VictoriaMetrics/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') +curl -fsSL "https://github.com/VictoriaMetrics/VictoriaMetrics/releases/download/v${RELEASE}/victoria-metrics-linux-amd64-v${RELEASE}.tar.gz" -o $(basename "https://github.com/VictoriaMetrics/VictoriaMetrics/releases/download/v${RELEASE}/victoria-metrics-linux-amd64-v${RELEASE}.tar.gz") +curl -fsSL "https://github.com/VictoriaMetrics/VictoriaMetrics/releases/download/v${RELEASE}/vmutils-linux-amd64-v${RELEASE}.tar.gz" -o $(basename "https://github.com/VictoriaMetrics/VictoriaMetrics/releases/download/v${RELEASE}/vmutils-linux-amd64-v${RELEASE}.tar.gz") tar -xf victoria-metrics-linux-amd64-v${RELEASE}.tar.gz -C /opt/victoriametrics tar -xf vmutils-linux-amd64-v${RELEASE}.tar.gz -C /opt/victoriametrics chmod +x /opt/victoriametrics/* diff --git a/install/vikunja-install.sh b/install/vikunja-install.sh index 1e276f290..0218980a3 100644 --- a/install/vikunja-install.sh +++ b/install/vikunja-install.sh @@ -25,8 +25,8 @@ msg_ok "Installed Dependencies" msg_info "Setup Vikunja (Patience)" cd /opt -RELEASE=$(curl -s https://dl.vikunja.io/vikunja/ | grep -oP 'href="/vikunja/\K[0-9]+\.[0-9]+\.[0-9]+' | sort -V | tail -n 1) -wget -q "https://dl.vikunja.io/vikunja/$RELEASE/vikunja-$RELEASE-amd64.deb" +RELEASE=$(curl -fsSL https://dl.vikunja.io/vikunja/ | grep -oP 'href="/vikunja/\K[0-9]+\.[0-9]+\.[0-9]+' | sort -V | tail -n 1) +curl -fsSL "https://dl.vikunja.io/vikunja/$RELEASE/vikunja-$RELEASE-amd64.deb" -o $(basename "https://dl.vikunja.io/vikunja/$RELEASE/vikunja-$RELEASE-amd64.deb") $STD dpkg -i vikunja-$RELEASE-amd64.deb sed -i 's|^ timezone: .*| timezone: UTC|' /etc/vikunja/config.yml sed -i 's|"./vikunja.db"|"/etc/vikunja/vikunja.db"|' /etc/vikunja/config.yml diff --git a/install/wallos-install.sh b/install/wallos-install.sh index da78bea46..8720cbe71 100644 --- a/install/wallos-install.sh +++ b/install/wallos-install.sh @@ -26,8 +26,8 @@ msg_ok "Installed Dependencies" msg_info "Installing Wallos (Patience)" cd /opt -RELEASE=$(curl -s https://api.github.com/repos/ellite/Wallos/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') -wget -q "https://github.com/ellite/Wallos/archive/refs/tags/v${RELEASE}.zip" +RELEASE=$(curl -fsSL https://api.github.com/repos/ellite/Wallos/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') +curl -fsSL "https://github.com/ellite/Wallos/archive/refs/tags/v${RELEASE}.zip" -o $(basename "https://github.com/ellite/Wallos/archive/refs/tags/v${RELEASE}.zip") unzip -q v${RELEASE}.zip mv Wallos-${RELEASE} /opt/wallos cd /opt/wallos diff --git a/install/wastebin-install.sh b/install/wastebin-install.sh index 61c35e3e6..fac364f46 100644 --- a/install/wastebin-install.sh +++ b/install/wastebin-install.sh @@ -17,14 +17,9 @@ msg_info "Installing Dependencies (Patience)" $STD apt-get install -y --no-install-recommends \ build-essential \ unzip \ - curl \ - sudo \ git \ make \ - mc \ - wget \ - ca-certificates \ - openssh-server + ca-certificates msg_ok "Installed Dependencies" msg_info "Installing Rust (Patience)" @@ -40,6 +35,16 @@ mv wastebin-${RELEASE} /opt/wastebin rm -R ${RELEASE}.zip cd /opt/wastebin cargo build -q --release + +mkdir -p /opt/wastebin-data +cat </opt/wastebin-data/.env +WASTEBIN_DATABASE_PATH=/opt/wastebin-data/wastebin.db +WASTEBIN_CACHE_SIZE=1024 +WASTEBIN_HTTP_TIMEOUT=30 +WASTEBIN_SIGNING_KEY=$(openssl rand -hex 32) +WASTEBIN_PASTE_EXPIRATIONS=0,600,3600=d,86400,604800,2419200,29030400 +EOF +echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt" msg_ok "Installed Wastebin" msg_info "Creating Service" @@ -66,4 +71,4 @@ msg_info "Cleaning up" rm -f $temp_file $STD apt-get -y autoremove $STD apt-get -y autoclean -msg_ok "Cleaned" \ No newline at end of file +msg_ok "Cleaned" diff --git a/install/watcharr-install.sh b/install/watcharr-install.sh index c39d8e04c..4a85cffba 100644 --- a/install/watcharr-install.sh +++ b/install/watcharr-install.sh @@ -22,8 +22,8 @@ msg_ok "Installed Dependencies" msg_info "Setup Golang" set +o pipefail temp_file=$(mktemp) -golang_tarball=$(curl -s https://go.dev/dl/ | grep -oP 'go[\d\.]+\.linux-amd64\.tar\.gz' | head -n 1) -wget -q https://golang.org/dl/"$golang_tarball" -O "$temp_file" +golang_tarball=$(curl -fsSL https://go.dev/dl/ | grep -oP 'go[\d\.]+\.linux-amd64\.tar\.gz' | head -n 1) +curl -fsSL "https://golang.org/dl/${golang_tarball}" -o "$temp_file" tar -C /usr/local -xzf "$temp_file" ln -sf /usr/local/go/bin/go /usr/local/bin/go rm -f "$temp_file" @@ -40,8 +40,8 @@ msg_ok "Setup Node.js" msg_info "Setup Watcharr" temp_file=$(mktemp) -RELEASE=$(curl -s https://api.github.com/repos/sbondCo/Watcharr/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') -wget -q "https://github.com/sbondCo/Watcharr/archive/refs/tags/v${RELEASE}.tar.gz" -O "$temp_file" +RELEASE=$(curl -fsSL https://api.github.com/repos/sbondCo/Watcharr/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') +curl -fsSL "https://github.com/sbondCo/Watcharr/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file" tar -xzf "$temp_file" mv Watcharr-${RELEASE}/ /opt/watcharr cd /opt/watcharr diff --git a/install/watchyourlan-install.sh b/install/watchyourlan-install.sh index ab5d160bc..975df2b4f 100644 --- a/install/watchyourlan-install.sh +++ b/install/watchyourlan-install.sh @@ -14,12 +14,12 @@ network_check update_os msg_info "Installing Dependencies" -$STD apt-get install -y {curl,sudo,mc,gpg,arp-scan,ieee-data,libwww-perl,wget,openssh-server} +$STD apt-get install -y {gpg,arp-scan,ieee-data,libwww-perl} msg_ok "Installed Dependencies" msg_info "Installing WatchYourLAN" -RELEASE=$(curl -s https://api.github.com/repos/aceberg/WatchYourLAN/releases/latest | grep -o '"tag_name": *"[^"]*"' | cut -d '"' -f 4) -wget -q https://github.com/aceberg/WatchYourLAN/releases/download/$RELEASE/watchyourlan_${RELEASE}_linux_arm64.deb +RELEASE=$(curl -fsSL https://api.github.com/repos/aceberg/WatchYourLAN/releases/latest | grep -o '"tag_name": *"[^"]*"' | cut -d '"' -f 4) +curl -fsSL "https://github.com/aceberg/WatchYourLAN/releases/download/$RELEASE/watchyourlan_${RELEASE}_linux_arm64.deb" -o $(basename "https://github.com/aceberg/WatchYourLAN/releases/download/$RELEASE/watchyourlan_${RELEASE}_linux_arm64.deb") $STD dpkg -i watchyourlan_${RELEASE}_linux_arm64.deb rm watchyourlan_${RELEASE}_linux_arm64.deb mkdir /data @@ -45,7 +45,7 @@ msg_ok "Installed WatchYourLAN" msg_info "Creating Service" sed -i 's|/etc/watchyourlan/config.yaml|/data/config.yaml|' /lib/systemd/system/watchyourlan.service -systemctl enable -q --now watchyourlan.service +systemctl enable -q --now watchyourlan msg_ok "Created Service" motd_ssh diff --git a/install/wavelog-install.sh b/install/wavelog-install.sh index e08a85ee7..9525f2c25 100644 --- a/install/wavelog-install.sh +++ b/install/wavelog-install.sh @@ -48,8 +48,8 @@ sed -i '/upload_max_filesize/s/= .*/= 8M/' /etc/php/8.2/apache2/php.ini msg_ok "Set up PHP" msg_info "Installing Wavelog" -RELEASE=$(curl -s https://api.github.com/repos/wavelog/wavelog/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') -wget -q "https://github.com/wavelog/wavelog/archive/refs/tags/${RELEASE}.zip" +RELEASE=$(curl -fsSL https://api.github.com/repos/wavelog/wavelog/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') +curl -fsSL "https://github.com/wavelog/wavelog/archive/refs/tags/${RELEASE}.zip" -o $(basename "https://github.com/wavelog/wavelog/archive/refs/tags/${RELEASE}.zip") unzip -q ${RELEASE}.zip mv wavelog-${RELEASE}/ /opt/wavelog chown -R www-data:www-data /opt/wavelog/ diff --git a/install/wazuh-install.sh b/install/wazuh-install.sh index ff447a6ac..989c91c6d 100644 --- a/install/wazuh-install.sh +++ b/install/wazuh-install.sh @@ -14,7 +14,7 @@ network_check update_os msg_info "Fetching Latest Wazuh Version" -RELEASE=$(curl -s https://api.github.com/repos/wazuh/wazuh/releases/latest | grep '"tag_name"' | awk -F '"' '{print substr($4, 2, length($2)-4)}') +RELEASE=$(curl -fsSL https://api.github.com/repos/wazuh/wazuh/releases/latest | grep '"tag_name"' | awk -F '"' '{print substr($4, 2, length($2)-4)}') msg_ok "Latest Wazuh Version: $RELEASE" msg_info "Setup Wazuh" diff --git a/install/web-check-install.sh b/install/web-check-install.sh index ef6ad3d14..c2d1bd5e4 100644 --- a/install/web-check-install.sh +++ b/install/web-check-install.sh @@ -71,7 +71,7 @@ msg_ok "Setup Chromium" msg_info "Installing Web-Check (Patience)" temp_file=$(mktemp) RELEASE="patch-1" -wget -q "https://github.com/CrazyWolf13/web-check/archive/refs/heads/${RELEASE}.tar.gz" -O $temp_file +curl -fsSL "https://github.com/CrazyWolf13/web-check/archive/refs/heads/${RELEASE}.tar.gz" -o "$temp_file" tar xzf $temp_file mv web-check-${RELEASE} /opt/web-check cd /opt/web-check diff --git a/install/wger-install.sh b/install/wger-install.sh index 018eddd49..0f5560762 100644 --- a/install/wger-install.sh +++ b/install/wger-install.sh @@ -48,8 +48,8 @@ mkdir /home/wger/{static,media} chmod o+w /home/wger/media temp_dir=$(mktemp -d) cd $temp_dir -RELEASE=$(curl -s https://api.github.com/repos/wger-project/wger/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3)}') -wget -q "https://github.com/wger-project/wger/archive/refs/tags/$RELEASE.tar.gz" +RELEASE=$(curl -fsSL https://api.github.com/repos/wger-project/wger/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3)}') +curl -fsSL "https://github.com/wger-project/wger/archive/refs/tags/$RELEASE.tar.gz" -o $(basename "https://github.com/wger-project/wger/archive/refs/tags/$RELEASE.tar.gz") tar xzf $RELEASE.tar.gz mv wger-$RELEASE /home/wger/src cd /home/wger/src diff --git a/install/whisparr-install.sh b/install/whisparr-install.sh index ceda737e8..074011d14 100644 --- a/install/whisparr-install.sh +++ b/install/whisparr-install.sh @@ -25,8 +25,9 @@ msg_ok "Installed Dependencies" msg_info "Installing Whisparr" mkdir -p /var/lib/whisparr/ chmod 775 /var/lib/whisparr/ -$STD wget --content-disposition 'https://whisparr.servarr.com/v1/update/nightly/updatefile?os=linux&runtime=netcore&arch=arm64' -$STD tar -xvzf Whisparr.develop.*.tar.gz +cd /var/lib/whisparr/ +$STD curl -fsSL 'https://whisparr.servarr.com/v1/update/nightly/updatefile?os=linux&runtime=netcore&arch=arm64' -o whisparr.tar.gz +$STD tar -xvzf whisparr.tar.gz mv Whisparr /opt chmod 775 /opt/Whisparr msg_ok "Installed Whisparr" diff --git a/install/whoogle-install.sh b/install/whoogle-install.sh index 5fa493c82..75916d47d 100644 --- a/install/whoogle-install.sh +++ b/install/whoogle-install.sh @@ -44,7 +44,7 @@ User=root [Install] WantedBy=multi-user.target" >$service_path -$STD systemctl enable --now whoogle.service +$STD systemctl enable --now whoogle msg_ok "Installed Whoogle" motd_ssh diff --git a/install/wikijs-install.sh b/install/wikijs-install.sh index 578ad1251..71e5d4bba 100644 --- a/install/wikijs-install.sh +++ b/install/wikijs-install.sh @@ -65,8 +65,8 @@ msg_ok "Set up PostgreSQL" msg_info "Setup Wiki.js" temp_file=$(mktemp) -RELEASE=$(curl -s https://api.github.com/repos/Requarks/wiki/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') -wget -q "https://github.com/requarks/wiki/releases/download/v${RELEASE}/wiki-js.tar.gz" -O "$temp_file" +RELEASE=$(curl -fsSL https://api.github.com/repos/Requarks/wiki/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') +curl -fsSL "https://github.com/requarks/wiki/releases/download/v${RELEASE}/wiki-js.tar.gz" -o ""$temp_file"" mkdir /opt/wikijs tar -xzf "$temp_file" -C /opt/wikijs mv /opt/wikijs/config.sample.yml /opt/wikijs/config.yml diff --git a/install/wireguard-install.sh b/install/wireguard-install.sh index 8a42ea055..d7230c29c 100644 --- a/install/wireguard-install.sh +++ b/install/wireguard-install.sh @@ -68,7 +68,7 @@ Restart=always [Install] WantedBy=multi-user.target EOF -systemctl enable -q --now wg-dashboard.service +systemctl enable -q --now wg-dashboard msg_ok "Created Service" motd_ssh diff --git a/install/wordpress-install.sh b/install/wordpress-install.sh index 7f6728b9a..5db4d89d3 100644 --- a/install/wordpress-install.sh +++ b/install/wordpress-install.sh @@ -44,7 +44,7 @@ msg_ok "Set up Database" msg_info "Installing Wordpress (Patience)" cd /var/www/html -wget -q https://wordpress.org/latest.zip +curl -fsSL "https://wordpress.org/latest.zip" -o $(basename "https://wordpress.org/latest.zip") unzip -q latest.zip chown -R www-data:www-data wordpress/ cd /var/www/html/wordpress diff --git a/install/yt-dlp-webui-install.sh b/install/yt-dlp-webui-install.sh index 1466b5483..bf60599ac 100644 --- a/install/yt-dlp-webui-install.sh +++ b/install/yt-dlp-webui-install.sh @@ -5,7 +5,7 @@ # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE # Source: https://github.com/marcopiovanello/yt-dlp-web-ui -source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" +source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" color verb_ip6 catch_errors @@ -18,14 +18,14 @@ $STD apt-get install -y ffmpeg msg_ok "Installed Dependencies" msg_info "Installing ${APPLICATION}" -RELEASE=$(curl -s https://api.github.com/repos/marcopiovanello/yt-dlp-web-ui/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') -wget -q "https://github.com/marcopiovanello/yt-dlp-web-ui/releases/download/v${RELEASE}/yt-dlp-webui_linux-amd64" -O /usr/local/bin/yt-dlp-webui +RELEASE=$(curl -fsSL https://api.github.com/repos/marcopiovanello/yt-dlp-web-ui/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') +curl -fsSL "https://github.com/marcopiovanello/yt-dlp-web-ui/releases/download/v${RELEASE}/yt-dlp-webui_linux-amd64" -o "/usr/local/bin/yt-dlp-webui" chmod +x /usr/local/bin/yt-dlp-webui echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt" msg_ok "Installed ${APPLICATION}" msg_info "Installing yt-dlp" -wget -q https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp -O /usr/local/bin/yt-dlp +curl -fsSL "https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp" -o "/usr/local/bin/yt-dlp" chmod a+rx /usr/local/bin/yt-dlp msg_ok "Installed yt-dlp" @@ -37,9 +37,9 @@ RPC_PASSWORD=$(openssl rand -base64 16) echo "yt-dlp-webui-Credentials" echo "Username: admin" echo "Password: ${RPC_PASSWORD}" -} >> ~/yt-dlp-webui.creds +} >>~/yt-dlp-webui.creds -cat < /opt/yt-dlp-webui/config.conf +cat </opt/yt-dlp-webui/config.conf # Host where server will listen at (default: "0.0.0.0") #host: 0.0.0.0 @@ -76,7 +76,7 @@ downloaderPath: /usr/local/bin/yt-dlp #frontend_path: ./web/solid-frontend EOF -cat < /etc/systemd/system/yt-dlp-webui.service +cat </etc/systemd/system/yt-dlp-webui.service [Unit] Description=yt-dlp-webui service file After=network.target diff --git a/install/yunohost-install.sh b/install/yunohost-install.sh index 2f196bf31..b9eb4dd80 100644 --- a/install/yunohost-install.sh +++ b/install/yunohost-install.sh @@ -5,7 +5,7 @@ # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE # Source: https://yunohost.org/ -source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" +source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" color verb_ip6 catch_errors @@ -24,7 +24,7 @@ msg_ok "Installed Dependencies" msg_info "Installing YunoHost (Patience)" touch /etc/.pve-ignore.resolv.conf -curl -sSLo /usr/share/keyrings/deb.sury.org-php.gpg https://packages.sury.org/php/apt.gpg +curl -fsSLo /usr/share/keyrings/deb.sury.org-php.gpg https://packages.sury.org/php/apt.gpg $STD bash <(curl -fsSL https://install.yunohost.org) -a msg_ok "Installed YunoHost" diff --git a/install/zabbix-install.sh b/install/zabbix-install.sh index 93db0a9c1..4d7756c68 100644 --- a/install/zabbix-install.sh +++ b/install/zabbix-install.sh @@ -1,11 +1,11 @@ #!/usr/bin/env bash -# Copyright (c) 2021-2025 tteck -# Author: tteck (tteckster) +# Copyright (c) 2021-2025 community-scripts ORG +# Author: MickLesk (CanbiZ) # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE # Source: https://www.zabbix.com/ -source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" +source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" color verb_ip6 catch_errors @@ -23,11 +23,14 @@ $STD apt-get install -y \ msg_ok "Installed Dependencies" msg_info "Installing Zabbix" -cd /tmp -wget -q https://repo.zabbix.com/zabbix/7.2/release/debian/pool/main/z/zabbix-release/zabbix-release_latest+debian12_all.deb +cd /tmp || exit +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")" \ + -o /tmp/zabbix-release_latest+debian12_all.deb $STD dpkg -i /tmp/zabbix-release_latest+debian12_all.deb $STD apt-get update -$STD apt-get install -y zabbix-server-pgsql zabbix-frontend-php php8.2-pgsql zabbix-apache-conf zabbix-sql-scripts +$STD apt-get install -y zabbix-server-pgsql zabbix-frontend-php php8.2-pgsql zabbix-apache-conf zabbix-sql-scripts $STD apt-get install -y zabbix-agent2 zabbix-agent2-plugin-* msg_ok "Installed Zabbix" diff --git a/install/zerotier-one-install.sh b/install/zerotier-one-install.sh index 673648cdc..25447d3e6 100644 --- a/install/zerotier-one-install.sh +++ b/install/zerotier-one-install.sh @@ -18,8 +18,8 @@ $STD apt-get install -y gnupg msg_ok "Installed Dependencies" msg_info "Setting up Zerotier-One" -curl -s 'https://raw.githubusercontent.com/zerotier/ZeroTierOne/main/doc/contact%40zerotier.com.gpg' | gpg --import && - if z="$(curl -s 'https://install.zerotier.com/' | gpg)"; then +curl -fsSL 'https://raw.githubusercontent.com/zerotier/ZeroTierOne/main/doc/contact%40zerotier.com.gpg' | gpg --import && + if z="$(curl -fsSL 'https://install.zerotier.com/' | gpg)"; then echo "$z" | sudo bash fi msg_ok "Setup Zerotier-One" diff --git a/install/zigbee2mqtt-install.sh b/install/zigbee2mqtt-install.sh index 6ce01b047..6256a5f74 100644 --- a/install/zigbee2mqtt-install.sh +++ b/install/zigbee2mqtt-install.sh @@ -42,8 +42,8 @@ msg_ok "Installed pnpm" msg_info "Setting up Zigbee2MQTT" cd /opt -RELEASE=$(curl -s https://api.github.com/repos/Koenkk/zigbee2mqtt/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') -wget -q "https://github.com/Koenkk/zigbee2mqtt/archive/refs/tags/${RELEASE}.zip" +RELEASE=$(curl -fsSL https://api.github.com/repos/Koenkk/zigbee2mqtt/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') +curl -fsSL "https://github.com/Koenkk/zigbee2mqtt/archive/refs/tags/${RELEASE}.zip" -o $(basename "https://github.com/Koenkk/zigbee2mqtt/archive/refs/tags/${RELEASE}.zip") unzip -q ${RELEASE}.zip mv zigbee2mqtt-${RELEASE} /opt/zigbee2mqtt cd /opt/zigbee2mqtt/data @@ -69,7 +69,7 @@ User=root [Install] WantedBy=multi-user.target EOF -systemctl enable -q --now zigbee2mqtt.service +systemctl enable -q --now zigbee2mqtt msg_ok "Created Service" motd_ssh diff --git a/install/zipline-install.sh b/install/zipline-install.sh index 2a96e8b18..799267688 100644 --- a/install/zipline-install.sh +++ b/install/zipline-install.sh @@ -56,8 +56,8 @@ msg_ok "Set up PostgreSQL" msg_info "Installing Zipline (Patience)" cd /opt -RELEASE=$(curl -s https://api.github.com/repos/diced/zipline/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') -wget -q "https://github.com/diced/zipline/archive/refs/tags/v${RELEASE}.zip" +RELEASE=$(curl -fsSL https://api.github.com/repos/diced/zipline/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') +curl -fsSL "https://github.com/diced/zipline/archive/refs/tags/v${RELEASE}.zip" -o $(basename "https://github.com/diced/zipline/archive/refs/tags/v${RELEASE}.zip") unzip -q v${RELEASE}.zip mv zipline-${RELEASE} /opt/zipline cd /opt/zipline diff --git a/install/zitadel-install.sh b/install/zitadel-install.sh index 1c0a4a56c..9fe6edd6f 100644 --- a/install/zitadel-install.sh +++ b/install/zitadel-install.sh @@ -39,8 +39,8 @@ $STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME OWNER $DB_ADMIN_USER;" msg_ok "Installed PostgreSQL" msg_info "Installing Zitadel" -RELEASE=$(curl -si https://github.com/zitadel/zitadel/releases/latest | grep location: | cut -d '/' -f 8 | tr -d '\r') -wget -qc https://github.com/zitadel/zitadel/releases/download/$RELEASE/zitadel-linux-amd64.tar.gz -O - | tar -xz +RELEASE=$(curl -fsSL https://api.github.com/repos/zitadel/zitadel/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') +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 msg_ok "Installed Zitadel" diff --git a/install/zoraxy-install.sh b/install/zoraxy-install.sh index 4a808373b..ba5dbdf77 100644 --- a/install/zoraxy-install.sh +++ b/install/zoraxy-install.sh @@ -13,17 +13,9 @@ setting_up_container network_check update_os -msg_info "Installing Dependencies" -$STD apt-get install -y curl -$STD apt-get install -y sudo -$STD apt-get install -y mc -$STD apt-get install -y wget -$STD apt-get install -y openssh-server -msg_ok "Installed Dependencies" - msg_info "Installing Zoraxy (Patience)" -RELEASE=$(curl -s https://api.github.com/repos/tobychui/zoraxy/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') -wget -q "https://github.com/tobychui/zoraxy/releases/download/${RELEASE}/zoraxy_linux_arm64" +RELEASE=$(curl -fsSL https://api.github.com/repos/tobychui/zoraxy/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') +curl -fsSL "https://github.com/tobychui/zoraxy/releases/download/${RELEASE}/zoraxy_linux_arm64" -o $(basename "https://github.com/tobychui/zoraxy/releases/download/${RELEASE}/zoraxy_linux_arm64") mkdir -p /opt/zoraxy mv zoraxy_linux_arm64 /opt/zoraxy/zoraxy chmod +x /opt/zoraxy/zoraxy @@ -45,7 +37,7 @@ Restart=always [Install] WantedBy=multi-user.target EOF -systemctl enable -q --now zoraxy.service +systemctl enable -q --now zoraxy msg_ok "Created Service" motd_ssh diff --git a/install/zwave-js-ui-install.sh b/install/zwave-js-ui-install.sh index 00c1a9626..92f2279a9 100644 --- a/install/zwave-js-ui-install.sh +++ b/install/zwave-js-ui-install.sh @@ -13,21 +13,12 @@ setting_up_container network_check update_os -msg_info "Installing Dependencies" -$STD apt-get install -y \ - curl \ - sudo \ - mc \ - wget \ - openssh-server -msg_ok "Installed Dependencies" - msg_info "Installing Z-Wave JS UI" mkdir -p /opt/zwave-js-ui mkdir -p /opt/zwave_store cd /opt/zwave-js-ui -RELEASE=$(curl -s https://api.github.com/repos/zwave-js/zwave-js-ui/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') -wget -q https://github.com/zwave-js/zwave-js-ui/releases/download/${RELEASE}/zwave-js-ui-${RELEASE}-linux-arm64.zip +RELEASE=$(curl -fsSL https://api.github.com/repos/zwave-js/zwave-js-ui/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') +curl -fsSL "https://github.com/zwave-js/zwave-js-ui/releases/download/${RELEASE}/zwave-js-ui-${RELEASE}-linux-arm64.zip" -o $(basename "https://github.com/zwave-js/zwave-js-ui/releases/download/${RELEASE}/zwave-js-ui-${RELEASE}-linux-arm64.zip") unzip -q zwave-js-ui-${RELEASE}-linux-arm64.zip cat </opt/.env ZWAVEJS_EXTERNAL_CONFIG=/opt/zwave_store/.config-db diff --git a/misc/add-lxc-iptag.sh b/misc/add-lxc-iptag.sh index e838f1df8..9706e6eb7 100644 --- a/misc/add-lxc-iptag.sh +++ b/misc/add-lxc-iptag.sh @@ -7,8 +7,8 @@ # Source: https://github.com/gitsang/lxc-iptag function header_info { -clear -cat <<"EOF" + clear + cat <<"EOF" __ _ ________ ________ ______ / / | |/ / ____/ / _/ __ \ /_ __/___ _____ _ / / | / / / // /_/ /_____/ / / __ `/ __ `/ @@ -60,9 +60,9 @@ spinner() { local color="${YWB}" while true; do - printf "\r ${color}%s${CL}" "${frames[spin_i]}" - spin_i=$(((spin_i + 1) % ${#frames[@]})) - sleep "$interval" + printf "\r ${color}%s${CL}" "${frames[spin_i]}" + spin_i=$(((spin_i + 1) % ${#frames[@]})) + sleep "$interval" done } @@ -95,9 +95,9 @@ while true; do case $yn in [Yy]*) break ;; [Nn]*) - msg_error "Installation cancelled." - exit - ;; + msg_error "Installation cancelled." + exit + ;; *) msg_error "Please answer yes or no." ;; esac done diff --git a/misc/add-netbird-lxc.sh b/misc/add-netbird-lxc.sh index d2e02bf26..430ea63a0 100644 --- a/misc/add-netbird-lxc.sh +++ b/misc/add-netbird-lxc.sh @@ -7,8 +7,8 @@ # https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { -clear -cat <<"EOF" + clear + cat <<"EOF" _ __ __ ____ _ __ / | / /__ / /_/ __ )(_)________/ / / |/ / _ \/ __/ __ / / ___/ __ / @@ -80,7 +80,7 @@ header_info msg "Installing NetBird..." pct exec "$CTID" -- bash -c ' apt install -y ca-certificates gpg &>/dev/null -wget -qO- https://pkgs.netbird.io/debian/public.key | gpg --dearmor >/usr/share/keyrings/netbird-archive-keyring.gpg +curl -fsSL "https://pkgs.netbird.io/debian/public.key" | gpg --dearmor >/usr/share/keyrings/netbird-archive-keyring.gpg 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 diff --git a/misc/add-tailscale-lxc.sh b/misc/add-tailscale-lxc.sh index 93f37b9cd..5183a5b4f 100644 --- a/misc/add-tailscale-lxc.sh +++ b/misc/add-tailscale-lxc.sh @@ -6,8 +6,8 @@ # https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { -clear -cat <<"EOF" + clear + cat <<"EOF" ______ _ __ __ /_ __/___ _(_) /_____________ _/ /__ / / / __ `/ / / ___/ ___/ __ `/ / _ \ @@ -62,7 +62,7 @@ msg "Installing Tailscale..." pct exec "$CTID" -- bash -c ' ID=$(grep "^ID=" /etc/os-release | cut -d"=" -f2) VER=$(grep "^VERSION_CODENAME=" /etc/os-release | cut -d"=" -f2) -wget -qO- https://pkgs.tailscale.com/stable/$ID/$VER.noarmor.gpg >/usr/share/keyrings/tailscale-archive-keyring.gpg +curl -fsSL https://pkgs.tailscale.com/stable/$ID/$VER.noarmor.gpg | tee /usr/share/keyrings/tailscale-archive-keyring.gpg >/dev/null 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 diff --git a/misc/alpine-install.func b/misc/alpine-install.func index 654fa9687..0aa90ec63 100644 --- a/misc/alpine-install.func +++ b/misc/alpine-install.func @@ -93,12 +93,12 @@ msg_error() { # This function sets up the Container OS by generating the locale, setting the timezone, and checking the network connection setting_up_container() { msg_info "Setting up Container OS" - while [ $i -gt 0 ]; do + while [ "$i" -gt 0 ]; do if [ "$(ip addr show | grep 'inet ' | grep -v '127.0.0.1' | awk '{print $2}' | cut -d'/' -f1)" != "" ]; then break fi echo 1>&2 -en "${CROSS}${RD} No Network! " - sleep $RETRY_EVERY + sleep "$RETRY_EVERY" i=$((i - 1)) done @@ -193,6 +193,6 @@ customize() { msg_ok "Customized Container" fi - echo "bash -c \"\$(curl -fsSL https://github.com/community-scripts/ProxmoxVE/raw/main/ct/${app}.sh)\"" >/usr/bin/update + echo "bash -c \"\$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/${app}.sh)\"" >/usr/bin/update chmod +x /usr/bin/update } diff --git a/misc/api.func b/misc/api.func index b4f6307bb..ffce144fa 100644 --- a/misc/api.func +++ b/misc/api.func @@ -39,7 +39,7 @@ post_to_api() { EOF ) - RESPONSE=$(curl -s -w "%{http_code}" -L -X POST "$API_URL" --post301 --post302 \ + RESPONSE=$(curl -fsSL -w "%{http_code}" -L -X POST "$API_URL" --post301 --post302 \ -H "Content-Type: application/json" \ -d "$JSON_PAYLOAD") || true } @@ -87,7 +87,7 @@ post_to_api_vm() { EOF ) - RESPONSE=$(curl -s -w "%{http_code}" -L -X POST "$API_URL" --post301 --post302 \ + RESPONSE=$(curl -fsSL -w "%{http_code}" -L -X POST "$API_URL" --post301 --post302 \ -H "Content-Type: application/json" \ -d "$JSON_PAYLOAD") || true } @@ -115,7 +115,7 @@ post_update_to_api() { EOF ) - RESPONSE=$(curl -s -w "%{http_code}" -L -X POST "$API_URL" --post301 --post302 \ + RESPONSE=$(curl -fsSL -w "%{http_code}" -L -X POST "$API_URL" --post301 --post302 \ -H "Content-Type: application/json" \ -d "$JSON_PAYLOAD") || true diff --git a/misc/build.func b/misc/build.func index 1a3d85a3d..115c9329b 100644 --- a/misc/build.func +++ b/misc/build.func @@ -43,6 +43,7 @@ color() { CPUCORE="${TAB}🧠${TAB}${CL}" RAMSIZE="${TAB}🛠️${TAB}${CL}" SEARCH="${TAB}🔍${TAB}${CL}" + VERBOSE_CROPPED="🔍${TAB}" VERIFYPW="${TAB}🔐${TAB}${CL}" CONTAINERID="${TAB}🆔${TAB}${CL}" HOSTNAME="${TAB}🏠${TAB}${CL}" @@ -287,21 +288,20 @@ update_motd_ip() { # Function to download & save header files get_header() { - local app_name=$(echo ${APP,,} | tr -d ' ') - local header_url="https://github.com/asylumexp/Proxmox/raw/main/ct/headers/${app_name}" - local local_header_path="/usr/local/community-scripts/headers/${app_name}" + local app_name=$(echo "${APP,,}" | tr -d ' ') + local header_url="https://raw.githubusercontent.com/asylumexp/Proxmox/main/ct/headers/${app_name}" + local local_header_path="/usr/local/community-scripts/headers/${app_name}" - mkdir -p "/usr/local/community-scripts/headers" + mkdir -p "$(dirname "$local_header_path")" - # Check if local file already present - if [ ! -f "$local_header_path" ]; then - wget -qO "$local_header_path" "$header_url" - if [ $? -ne 0 ]; then - echo -e "${WARN}${BOLD}${YLW}Failed to download header for ${app_name}. No header will be displayed.${CL}" - return 1 + if [ ! -s "$local_header_path" ]; then + if ! curl -fsSL "$header_url" -o "$local_header_path"; then + echo -e "Failed to download header for ${app_name}. No header will be displayed." + return 1 + fi fi - fi - cat "$local_header_path" + + cat "$local_header_path" } # This function sets the APP-Name into an ASCII Header in Slant, figlet needed on proxmox main node. @@ -949,7 +949,7 @@ install_script() { ;; 2) header_info - echo -e "${DEFAULT}${BOLD}${BL}Using Default Settings on node $PVEHOST_NAME (${SEARCH}Verbose)${CL}" + echo -e "${DEFAULT}${BOLD}${BL}Using Default Settings on node $PVEHOST_NAME (${VERBOSE_CROPPED}Verbose)${CL}" VERB="yes" METHOD="default" base_settings "$VERB" @@ -1100,9 +1100,9 @@ build_container() { TEMP_DIR=$(mktemp -d) pushd $TEMP_DIR >/dev/null if [ "$var_os" == "alpine" ]; then - export FUNCTIONS_FILE_PATH="$(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/alpine-install.func)" + export FUNCTIONS_FILE_PATH="$(curl -fsSL https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/alpine-install.func)" else - export FUNCTIONS_FILE_PATH="$(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/install.func)" + export FUNCTIONS_FILE_PATH="$(curl -fsSL https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/install.func)" fi export RANDOM_UUID="$RANDOM_UUID" export CACHER="$APT_CACHER" @@ -1134,7 +1134,7 @@ build_container() { $PW " # This executes create_lxc.sh and creates the container and .conf file - bash -c "$(wget -qLO - https://raw.githubusercontent.com/asylumexp/Proxmox/main/ct/create_lxc.sh)" || exit $? + bash -c "$(curl -fsSL - https://raw.githubusercontent.com/asylumexp/Proxmox/main/ct/create_lxc.sh)" || exit $? LXC_CONFIG=/etc/pve/lxc/${CTID}.conf if [ "$CT_TYPE" == "0" ]; then @@ -1196,7 +1196,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 "$(wget -qLO - https://raw.githubusercontent.com/asylumexp/Proxmox/main/install/$var_install.sh)" || exit $? + lxc-attach -n "$CTID" -- bash -c "$(curl -fsSL - https://raw.githubusercontent.com/asylumexp/Proxmox/main/install/$var_install.sh)" || exit $? } diff --git a/misc/clean-lxcs.sh b/misc/clean-lxcs.sh index cabd3f033..03584cdd5 100644 --- a/misc/clean-lxcs.sh +++ b/misc/clean-lxcs.sh @@ -33,14 +33,14 @@ 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 '"') || exit function clean_container() { container=$1 header_info name=$(pct exec "$container" hostname) echo -e "${BL}[Info]${GN} Cleaning ${name} ${CL} \n" - pct exec $container -- bash -c "apt-get -y --purge autoremove && apt-get -y autoclean && bash <(curl -fsSL https://github.com/community-scripts/ProxmoxVE/raw/main/misc/clean.sh) && rm -rf /var/lib/apt/lists/* && apt-get update" + pct exec $container -- bash -c "apt-get -y --purge autoremove && apt-get -y autoclean && bash <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/clean.sh) && rm -rf /var/lib/apt/lists/* && apt-get update" } for container in $(pct list | awk '{if(NR>1) print $1}'); do if [[ " ${excluded_containers[@]} " =~ " $container " ]]; then diff --git a/misc/clean-orphaned-lvm.sh b/misc/clean-orphaned-lvm.sh index 533ef50ec..4f47d5a94 100644 --- a/misc/clean-orphaned-lvm.sh +++ b/misc/clean-orphaned-lvm.sh @@ -5,8 +5,8 @@ # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { - clear - cat <<"EOF" + clear + cat <<"EOF" ____ ________ ____ __ __ __ _ ____ ___ / __ \_________ _ ______ ___ ____ _ __ / ____/ /__ ____ _____ / __ \_________ / /_ ____ _____ ___ ____/ / / /| | / / |/ /____ / /_/ / ___/ __ \| |/_/ __ `__ \/ __ \| |/_/ / / / / _ \/ __ `/ __ \ / / / / ___/ __ \/ __ \/ __ `/ __ \/ _ \/ __ / / / | | / / /|_/ / ___/ @@ -38,19 +38,19 @@ function find_orphaned_lvm { echo -e "❗ The following orphaned LVM volumes were found:\n" printf "%-25s %-10s %-10s\n" "LV Name" "VG" "Size" printf "%-25s %-10s %-10s\n" "-------------------------" "----------" "----------" - - for ((i = 0; i < ${#orphaned_volumes[@]}; i+=3)); do - printf "%-25s %-10s %-10s\n" "${orphaned_volumes[i]}" "${orphaned_volumes[i+1]}" "${orphaned_volumes[i+2]}" + + for ((i = 0; i < ${#orphaned_volumes[@]}; i += 3)); do + printf "%-25s %-10s %-10s\n" "${orphaned_volumes[i]}" "${orphaned_volumes[i + 1]}" "${orphaned_volumes[i + 2]}" done echo "" } # Function to delete selected volumes function delete_orphaned_lvm { - for ((i = 0; i < ${#orphaned_volumes[@]}; i+=3)); do + for ((i = 0; i < ${#orphaned_volumes[@]}; i += 3)); do lv="${orphaned_volumes[i]}" - vg="${orphaned_volumes[i+1]}" - size="${orphaned_volumes[i+2]}" + vg="${orphaned_volumes[i + 1]}" + size="${orphaned_volumes[i + 2]}" read -p "❓ Do you want to delete $lv (VG: $vg, Size: $size)? [y/N]: " confirm if [[ "$confirm" =~ ^[Yy]$ ]]; then diff --git a/misc/code-server.sh b/misc/code-server.sh index 5114e3200..a24ed41de 100644 --- a/misc/code-server.sh +++ b/misc/code-server.sh @@ -46,8 +46,14 @@ function error_exit() { } clear header_info -if command -v pveversion >/dev/null 2>&1; then echo -e "⚠️ Can't Install on Proxmox "; exit; fi -if [ -e /etc/alpine-release ]; then echo -e "⚠️ Can't Install on Alpine"; exit; fi +if command -v pveversion >/dev/null 2>&1; then + echo -e "⚠️ Can't Install on Proxmox " + exit +fi +if [ -e /etc/alpine-release ]; then + echo -e "⚠️ Can't Install on Alpine" + exit +fi while true; do read -p "This will Install ${APP} on $hostname. Proceed(y/n)?" yn case $yn in @@ -73,7 +79,7 @@ apt-get install -y curl &>/dev/null apt-get install -y git &>/dev/null msg_ok "Installed Dependencies" -VERSION=$(curl -s https://api.github.com/repos/coder/code-server/releases/latest | +VERSION=$(curl -fsSL https://api.github.com/repos/coder/code-server/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') diff --git a/misc/container-restore-from-backup.sh b/misc/container-restore-from-backup.sh index dd5da9453..d1a45c6a9 100644 --- a/misc/container-restore-from-backup.sh +++ b/misc/container-restore-from-backup.sh @@ -6,7 +6,10 @@ # https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE clear -if command -v pveversion >/dev/null 2>&1; then echo -e "⚠️ Can't Run from the Proxmox Shell"; exit; fi +if command -v pveversion >/dev/null 2>&1; then + echo -e "⚠️ Can't Run from the Proxmox Shell" + exit +fi YW=$(echo "\033[33m") BL=$(echo "\033[36m") RD=$(echo "\033[01;31m") diff --git a/misc/copy-data/README.md b/misc/copy-data/README.md index 3257c80f2..a7bdbf35c 100644 --- a/misc/copy-data/README.md +++ b/misc/copy-data/README.md @@ -2,45 +2,45 @@

To copy data from Home Assistant Container to Home Assistant Container
``` -bash -c "$(wget -qLO - https://github.com/community-scripts/ProxmoxVE/raw/main/misc/copy-data/home-assistant-container-copy-data-home-assistant-container.sh)" +bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/copy-data/home-assistant-container-copy-data-home-assistant-container.sh)" ```
To copy data from Home Assistant Container to Home Assistant Core
``` -bash -c "$(wget -qLO - https://github.com/community-scripts/ProxmoxVE/raw/main/misc/copy-data/home-assistant-container-copy-data-home-assistant-core.sh)" +bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/copy-data/home-assistant-container-copy-data-home-assistant-core.sh)" ```
To copy data from Home Assistant Container to Podman Home Assistant
``` -bash -c "$(wget -qLO - https://github.com/community-scripts/ProxmoxVE/raw/main/misc/copy-data/home-assistant-container-copy-data-podman-home-assistant.sh)" +bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/copy-data/home-assistant-container-copy-data-podman-home-assistant.sh)" ```
To copy data from Podman Home Assistant to Home Assistant Container
``` -bash -c "$(wget -qLO - https://github.com/community-scripts/ProxmoxVE/raw/main/misc/copy-data/podman-home-assistant-copy-data-home-assistant-container.sh)" +bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/copy-data/podman-home-assistant-copy-data-home-assistant-container.sh)" ```
To copy data from Home Assistant Core to Home Assistant Container
``` -bash -c "$(wget -qLO - https://github.com/community-scripts/ProxmoxVE/raw/main/misc/copy-data/home-assistant-core-copy-data-home-assistant-container.sh)" +bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/copy-data/home-assistant-core-copy-data-home-assistant-container.sh)" ```
To copy data from Home Assistant Core to Home Assistant Core
``` -bash -c "$(wget -qLO - https://github.com/community-scripts/ProxmoxVE/raw/main/misc/copy-data/home-assistant-core-copy-data-home-assistant-core.sh)" +bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/copy-data/home-assistant-core-copy-data-home-assistant-core.sh)" ```
To copy data from Plex to Plex
``` -bash -c "$(wget -qLO - https://github.com/community-scripts/ProxmoxVE/raw/main/misc/copy-data/plex-copy-data-plex.sh)" +bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/copy-data/plex-copy-data-plex.sh)" ```
To copy data from Zigbee2MQTT to Zigbee2MQTT
``` -bash -c "$(wget -qLO - https://github.com/community-scripts/ProxmoxVE/raw/main/misc/copy-data/z2m-copy-data-z2m.sh)" +bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/copy-data/z2m-copy-data-z2m.sh)" ```
To copy data from Zwavejs2MQTT to Zwave JS UI
``` -bash -c "$(wget -qLO - https://github.com/community-scripts/ProxmoxVE/raw/main/misc/copy-data/zwavejs2mqtt-copy-data-zwavejsui.sh)" +bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/copy-data/zwavejs2mqtt-copy-data-zwavejsui.sh)" ``` diff --git a/misc/copy-data/home-assistant-container-copy-data-home-assistant-container.sh b/misc/copy-data/home-assistant-container-copy-data-home-assistant-container.sh index a8c137afb..c9f0fc578 100644 --- a/misc/copy-data/home-assistant-container-copy-data-home-assistant-container.sh +++ b/misc/copy-data/home-assistant-container-copy-data-home-assistant-container.sh @@ -8,7 +8,10 @@ # Use to copy all data from one Home Assistant LXC to another # run from the Proxmox Shell clear -if ! command -v pveversion >/dev/null 2>&1; then echo -e "⚠️ Run from the Proxmox Shell"; exit; fi +if ! command -v pveversion >/dev/null 2>&1; then + echo -e "⚠️ Run from the Proxmox Shell" + exit +fi while true; do read -p "Use to copy all data from one Home Assistant LXC to another. Proceed(y/n)?" yn case $yn in @@ -125,4 +128,4 @@ info "Successfully Transferred Data." # Use to copy all data from one Home Assistant LXC to another # run from the Proxmox Shell -# bash -c "$(wget -qLO - https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/copy-data/home-assistant-container-copy-data-home-assistant-container.sh)" +# bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/copy-data/home-assistant-container-copy-data-home-assistant-container.sh)" diff --git a/misc/copy-data/home-assistant-container-copy-data-home-assistant-core.sh b/misc/copy-data/home-assistant-container-copy-data-home-assistant-core.sh index 998bcb63a..7b6529d75 100644 --- a/misc/copy-data/home-assistant-container-copy-data-home-assistant-core.sh +++ b/misc/copy-data/home-assistant-container-copy-data-home-assistant-core.sh @@ -6,7 +6,10 @@ # https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE clear -if ! command -v pveversion >/dev/null 2>&1; then echo -e "⚠️ Run from the Proxmox Shell"; exit; fi +if ! command -v pveversion >/dev/null 2>&1; then + echo -e "⚠️ Run from the Proxmox Shell" + exit +fi while true; do read -p "Use to copy all data from a Home Assistant Container LXC to a Home Assistant Core LXC. Proceed(y/n)?" yn case $yn in @@ -121,4 +124,4 @@ info "Successfully Transferred Data." # Use to copy all data from a Home Assistant Container LXC to a Home Assistant Core LXC # run from the Proxmox Shell -# bash -c "$(wget -qLO - https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/copy-data/home-assistant-container-copy-data-home-assistant-core.sh)" +# bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/copy-data/home-assistant-container-copy-data-home-assistant-core.sh)" diff --git a/misc/copy-data/home-assistant-container-copy-data-podman-home-assistant.sh b/misc/copy-data/home-assistant-container-copy-data-podman-home-assistant.sh index e730372d2..4fc81bdcd 100644 --- a/misc/copy-data/home-assistant-container-copy-data-podman-home-assistant.sh +++ b/misc/copy-data/home-assistant-container-copy-data-podman-home-assistant.sh @@ -8,7 +8,10 @@ # Use to copy all data from a Home Assistant LXC to a Podman Home Assistant LXC. # run from the Proxmox Shell clear -if ! command -v pveversion >/dev/null 2>&1; then echo -e "⚠️ Run from the Proxmox Shell"; exit; fi +if ! command -v pveversion >/dev/null 2>&1; then + echo -e "⚠️ Run from the Proxmox Shell" + exit +fi while true; do read -p "Use to copy all data from a Home Assistant LXC to a Podman Home Assistant LXC. Proceed(y/n)?" yn case $yn in @@ -126,4 +129,4 @@ info "Successfully Transferred Data." # Use to copy all data from a Home Assistant LXC to a Podman Home Assistant LXC # run from the Proxmox Shell -# bash -c "$(wget -qLO - https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/copy-data/home-assistant-container-copy-data-podman-home-assistant.sh)" +# bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/copy-data/home-assistant-container-copy-data-podman-home-assistant.sh)" diff --git a/misc/copy-data/home-assistant-core-copy-data-home-assistant-container.sh b/misc/copy-data/home-assistant-core-copy-data-home-assistant-container.sh index dc9eecd7a..7af0a0b0f 100644 --- a/misc/copy-data/home-assistant-core-copy-data-home-assistant-container.sh +++ b/misc/copy-data/home-assistant-core-copy-data-home-assistant-container.sh @@ -6,7 +6,10 @@ # https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE clear -if ! command -v pveversion >/dev/null 2>&1; then echo -e "⚠️ Run from the Proxmox Shell"; exit; fi +if ! command -v pveversion >/dev/null 2>&1; then + echo -e "⚠️ Run from the Proxmox Shell" + exit +fi while true; do read -p "Use to copy all data from a Home Assistant Core LXC to a Home Assistant Container LXC. Proceed(y/n)?" yn case $yn in @@ -121,4 +124,4 @@ info "Successfully Transferred Data." # Use to copy all data from a Home Assistant Core LXC to a Home Assistant Container LXC # run from the Proxmox Shell -# bash -c "$(wget -qLO - https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/copy-data/home-assistant-core-copy-data-home-assistant-container.sh)" +# bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/copy-data/home-assistant-core-copy-data-home-assistant-container.sh)" diff --git a/misc/copy-data/home-assistant-core-copy-data-home-assistant-core.sh b/misc/copy-data/home-assistant-core-copy-data-home-assistant-core.sh index a8d364085..a674f70ac 100644 --- a/misc/copy-data/home-assistant-core-copy-data-home-assistant-core.sh +++ b/misc/copy-data/home-assistant-core-copy-data-home-assistant-core.sh @@ -6,7 +6,10 @@ # https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE clear -if ! command -v pveversion >/dev/null 2>&1; then echo -e "⚠️ Run from the Proxmox Shell"; exit; fi +if ! command -v pveversion >/dev/null 2>&1; then + echo -e "⚠️ Run from the Proxmox Shell" + exit +fi while true; do read -p "Use to copy all data from a Home Assistant Core LXC to a Home Assistant Core LXC. Proceed(y/n)?" yn case $yn in @@ -120,4 +123,4 @@ info "Successfully Transferred Data." # Use to copy all data from a Home Assistant Core LXC to a Home Assistant Container LXC # run from the Proxmox Shell -# bash -c "$(wget -qLO - https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/copy-data/home-assistant-core-copy-data-home-assistant-core.sh)" +# bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/copy-data/home-assistant-core-copy-data-home-assistant-core.sh)" diff --git a/misc/copy-data/plex-copy-data-plex.sh b/misc/copy-data/plex-copy-data-plex.sh index 779921f89..77417fa28 100644 --- a/misc/copy-data/plex-copy-data-plex.sh +++ b/misc/copy-data/plex-copy-data-plex.sh @@ -8,7 +8,10 @@ # Use to copy all data from one Plex Media Server LXC to another # run from the Proxmox Shell clear -if ! command -v pveversion >/dev/null 2>&1; then echo -e "⚠️ Run from the Proxmox Shell"; exit; fi +if ! command -v pveversion >/dev/null 2>&1; then + echo -e "⚠️ Run from the Proxmox Shell" + exit +fi while true; do read -p "Use to copy all data from one Plex Media Server LXC to another. Proceed(y/n)?" yn case $yn in @@ -125,4 +128,4 @@ info "Successfully Transferred Data." # Use to copy all data from one Plex Media Server LXC to another # run from the Proxmox Shell -# bash -c "$(wget -qLO - https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/copy-data/plex-copy-data-plex.sh)" +# bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/copy-data/plex-copy-data-plex.sh)" diff --git a/misc/copy-data/podman-home-assistant-copy-data-home-assistant-container.sh b/misc/copy-data/podman-home-assistant-copy-data-home-assistant-container.sh index 0ff1f071f..b03bde931 100644 --- a/misc/copy-data/podman-home-assistant-copy-data-home-assistant-container.sh +++ b/misc/copy-data/podman-home-assistant-copy-data-home-assistant-container.sh @@ -8,7 +8,10 @@ # Use to copy all data from a Podman Home Assistant LXC to a Docker Home Assistant LXC. # run from the Proxmox Shell clear -if ! command -v pveversion >/dev/null 2>&1; then echo -e "⚠️ Run from the Proxmox Shell"; exit; fi +if ! command -v pveversion >/dev/null 2>&1; then + echo -e "⚠️ Run from the Proxmox Shell" + exit +fi while true; do read -p "Use to copy all data from a Podman Home Assistant LXC to a Docker Home Assistant LXC. Proceed(y/n)?" yn case $yn in @@ -126,4 +129,4 @@ info "Successfully Transferred Data." # Use to copy all data from a Podman Home Assistant LXC to a Docker Home Assistant LXC. # run from the Proxmox Shell -# bash -c "$(wget -qLO - https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/copy-data/podman-home-assistant-copy-data-home-assistant-container.sh)" +# bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/copy-data/podman-home-assistant-copy-data-home-assistant-container.sh)" diff --git a/misc/copy-data/z2m-copy-data-z2m.sh b/misc/copy-data/z2m-copy-data-z2m.sh index b6807351a..b08273f1e 100644 --- a/misc/copy-data/z2m-copy-data-z2m.sh +++ b/misc/copy-data/z2m-copy-data-z2m.sh @@ -8,7 +8,10 @@ # Use to copy all data from one Zigbee2MQTT LXC to another # run from the Proxmox Shell clear -if ! command -v pveversion >/dev/null 2>&1; then echo -e "⚠️ Run from the Proxmox Shell"; exit; fi +if ! command -v pveversion >/dev/null 2>&1; then + echo -e "⚠️ Run from the Proxmox Shell" + exit +fi while true; do read -p "Use to copy all data from one Zigbee2MQTT LXC to another. Proceed(y/n)?" yn case $yn in @@ -125,4 +128,4 @@ info "Successfully Transferred Data." # Use to copy all data from one Zigbee2MQTT LXC to another # run from the Proxmox Shell -# bash -c "$(wget -qLO - https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/copy-data/z2m-copy-data-z2m.sh)" +# bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/copy-data/z2m-copy-data-z2m.sh)" diff --git a/misc/copy-data/zwavejs2mqtt-copy-data-zwavejsui.sh b/misc/copy-data/zwavejs2mqtt-copy-data-zwavejsui.sh index 3f282e250..ae14b27b4 100644 --- a/misc/copy-data/zwavejs2mqtt-copy-data-zwavejsui.sh +++ b/misc/copy-data/zwavejs2mqtt-copy-data-zwavejsui.sh @@ -8,7 +8,10 @@ # Use to copy all data from a Zwavejs2MQTT LXC to a Z-wave JS UI LXC # run from the Proxmox Shell clear -if ! command -v pveversion >/dev/null 2>&1; then echo -e "⚠️ Run from the Proxmox Shell"; exit; fi +if ! command -v pveversion >/dev/null 2>&1; then + echo -e "⚠️ Run from the Proxmox Shell" + exit +fi while true; do read -p "Use to copy all data from a Zwavejs2MQTT LXC to a Z-wave JS UI LXC. Proceed(y/n)?" yn case $yn in @@ -33,7 +36,7 @@ function error_exit() { local REASON="\e[97m${1:-$DEFAULT}\e[39m" local FLAG="\e[91m[ERROR] \e[93m$EXIT@$LINE" msg "$FLAG $REASON" - exit $EXIT + exit "$EXIT" } function warn() { local REASON="\e[97m$1\e[39m" @@ -50,13 +53,13 @@ function msg() { echo -e "$TEXT" } function cleanup() { - [ -d "${CTID_FROM_PATH:-}" ] && pct unmount $CTID_FROM - [ -d "${CTID_TO_PATH:-}" ] && pct unmount $CTID_TO + [ -d "${CTID_FROM_PATH:-}" ] && pct unmount "$CTID_FROM" + [ -d "${CTID_TO_PATH:-}" ] && pct unmount "$CTID_TO" popd >/dev/null - rm -rf $TEMP_DIR + rm -rf "$TEMP_DIR" } TEMP_DIR=$(mktemp -d) -pushd $TEMP_DIR >/dev/null +pushd "$TEMP_DIR" >/dev/null TITLE="Zigbee2MQTT to Z-wave JS UI Data Copy" while read -r line; do @@ -82,27 +85,27 @@ while [ -z "${CTID_TO:+x}" ]; do done for i in ${!CTID_MENU[@]}; do [ "${CTID_MENU[$i]}" == "$CTID_FROM" ] && - CTID_FROM_HOSTNAME=$(sed 's/[[:space:]]*$//' <<<${CTID_MENU[$i + 1]}) + CTID_FROM_HOSTNAME=$(sed 's/[[:space:]]*$//' <<<"${CTID_MENU[$i + 1]}") [ "${CTID_MENU[$i]}" == "$CTID_TO" ] && - CTID_TO_HOSTNAME=$(sed 's/[[:space:]]*$//' <<<${CTID_MENU[$i + 1]}) + CTID_TO_HOSTNAME=$(sed 's/[[:space:]]*$//' <<<"${CTID_MENU[$i + 1]}") 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 info "Zwavejs2MQTT Data from '$CTID_FROM' to '$CTID_TO'" -if [ $(pct status $CTID_TO | sed 's/.* //') == 'running' ]; then +if [ $(pct status "$CTID_TO" | sed 's/.* //') == 'running' ]; then msg "Stopping '$CTID_TO'..." - pct stop $CTID_TO + pct stop "$CTID_TO" fi msg "Mounting Container Disks..." DATA_PATH=/opt/zwavejs2mqtt/store/ DATA_PATH_NEW=/opt/zwave-js-ui/store/ -CTID_FROM_PATH=$(pct mount $CTID_FROM | sed -n "s/.*'\(.*\)'/\1/p") || +CTID_FROM_PATH=$(pct mount "$CTID_FROM" | sed -n "s/.*'\(.*\)'/\1/p") || die "There was a problem mounting the root disk of LXC '${CTID_FROM}'." [ -d "${CTID_FROM_PATH}${DATA_PATH}" ] || die "Zwavejs2MQTT directories in '$CTID_FROM' not found." -CTID_TO_PATH=$(pct mount $CTID_TO | sed -n "s/.*'\(.*\)'/\1/p") || +CTID_TO_PATH=$(pct mount "$CTID_TO" | sed -n "s/.*'\(.*\)'/\1/p") || die "There was a problem mounting the root disk of LXC '${CTID_TO}'." [ -d "${CTID_TO_PATH}${DATA_PATH_NEW}" ] || die "Zwavejs2MQTT directories in '$CTID_TO' not found." @@ -120,11 +123,11 @@ RSYNC_OPTIONS=( --info=progress2 ) msg "<======== Zwavejs Data ========>" -rsync ${RSYNC_OPTIONS[*]} ${CTID_FROM_PATH}${DATA_PATH} ${CTID_TO_PATH}${DATA_PATH_NEW} +rsync "${RSYNC_OPTIONS[*]}" "${CTID_FROM_PATH}"${DATA_PATH} "${CTID_TO_PATH}"${DATA_PATH_NEW} echo -en "\e[1A\e[0K\e[1A\e[0K" info "Successfully Transferred Data." # Use to copy all data from a Zwavejs2MQTT LXC to a Z-wave JS UI LXC # run from the Proxmox Shell -# bash -c "$(wget -qLO - https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/copy-data/zwavejs2mqtt-copy-data-zwavejsui.sh)" +# bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/copy-data/zwavejs2mqtt-copy-data-zwavejsui.sh)" diff --git a/misc/core-restore-from-backup.sh b/misc/core-restore-from-backup.sh index 021e6b05a..bdff8dd4c 100644 --- a/misc/core-restore-from-backup.sh +++ b/misc/core-restore-from-backup.sh @@ -6,7 +6,10 @@ # https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE clear -if command -v pveversion >/dev/null 2>&1; then echo -e "⚠️ Can't Run from the Proxmox Shell"; exit; fi +if command -v pveversion >/dev/null 2>&1; then + echo -e "⚠️ Can't Run from the Proxmox Shell" + exit +fi YW=$(echo "\033[33m") BL=$(echo "\033[36m") RD=$(echo "\033[01;31m") diff --git a/misc/cron-update-lxcs.sh b/misc/cron-update-lxcs.sh index b83111fed..6cb4da56a 100644 --- a/misc/cron-update-lxcs.sh +++ b/misc/cron-update-lxcs.sh @@ -4,7 +4,7 @@ # Author: tteck (tteckster) # License: MIT # https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# bash -c "$(wget -qLO - https://github.com/community-scripts/ProxmoxVE/raw/main/misc/cron-update-lxcs.sh)" +# bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/cron-update-lxcs.sh)" clear cat <<"EOF" @@ -25,7 +25,7 @@ add() { *) echo "Please answer yes or no." ;; esac done - sh -c '(crontab -l -u root 2>/dev/null; echo "0 0 * * 0 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin /bin/bash -c \"\$(wget -qLO - https://github.com/community-scripts/ProxmoxVE/raw/main/misc/update-lxcs-cron.sh)\" >>/var/log/update-lxcs-cron.log 2>/dev/null") | crontab -u root -' + sh -c '(crontab -l -u root 2>/dev/null; echo "0 0 * * 0 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin /bin/bash -c \"\$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/update-lxcs-cron.sh)\" >>/var/log/update-lxcs-cron.log 2>/dev/null") | crontab -u root -' clear echo -e "\n To view Cron Update LXCs logs: cat /var/log/update-lxcs-cron.log" } diff --git a/misc/crowdsec.sh b/misc/crowdsec.sh index eae6fc967..e59eace03 100644 --- a/misc/crowdsec.sh +++ b/misc/crowdsec.sh @@ -26,25 +26,28 @@ alias die='EXIT=$? LINE=$LINENO error_exit' trap die ERR function error_exit() { - trap - ERR - local reason="Unknown failure occured." - local msg="${1:-$reason}" - local flag="${RD}‼ ERROR ${CL}$EXIT@$LINE" - echo -e "$flag $msg" 1>&2 - exit $EXIT + trap - ERR + local reason="Unknown failure occured." + local msg="${1:-$reason}" + local flag="${RD}‼ ERROR ${CL}$EXIT@$LINE" + echo -e "$flag $msg" 1>&2 + exit "$EXIT" } -if command -v pveversion >/dev/null 2>&1; then echo -e "⚠️ Can't Install on Proxmox "; exit; fi +if command -v pveversion >/dev/null 2>&1; then + echo -e "⚠️ Can't Install on Proxmox " + exit +fi while true; do - read -p "This will Install ${APP} on $hostname. Proceed(y/n)?" yn - case $yn in - [Yy]*) break ;; - [Nn]*) exit ;; - *) echo "Please answer yes or no." ;; - esac + read -p "This will Install ${APP} on $hostname. Proceed(y/n)?" yn + case $yn in + [Yy]*) break ;; + [Nn]*) exit ;; + *) echo "Please answer yes or no." ;; + esac done clear -function header_info { - echo -e "${BL} +function header_info() { + echo -e "${BL} _____ _ _____ / ____| | |/ ____| | | _ __ _____ ____| | (___ ___ ___ @@ -57,20 +60,20 @@ ${CL}" header_info function msg_info() { - local msg="$1" - echo -ne " ${HOLD} ${YW}${msg}..." + local msg="$1" + echo -ne " ${HOLD} ${YW}${msg}..." } function msg_ok() { - local msg="$1" - echo -e "${BFR} ${CM} ${GN}${msg}${CL}" + local msg="$1" + echo -e "${BFR} ${CM} ${GN}${msg}${CL}" } msg_info "Setting up ${APP} Repository" apt-get update &>/dev/null apt-get install -y curl &>/dev/null apt-get install -y gnupg &>/dev/null -curl -s https://packagecloud.io/install/repositories/crowdsec/crowdsec/script.deb.sh | bash &>/dev/null +curl -fsSL "https://install.crowdsec.net" | bash &>/dev/null msg_ok "Setup ${APP} Repository" msg_info "Installing ${APP}" diff --git a/misc/filebrowser.sh b/misc/filebrowser.sh index 479831c17..714175e53 100644 --- a/misc/filebrowser.sh +++ b/misc/filebrowser.sh @@ -36,7 +36,6 @@ IP=$(ip -4 addr show "$IFACE" | awk '/inet / {print $2}' | cut -d/ -f1 | head -n [[ -z "$IP" ]] && IP=$(hostname -I | awk '{print $1}') [[ -z "$IP" ]] && IP="127.0.0.1" - # Detect OS if [[ -f "/etc/alpine-release" ]]; then OS="Alpine" @@ -89,7 +88,7 @@ if [ -f "$INSTALL_PATH" ]; then read -r -p "Would you like to update ${APP}? (y/N): " update_prompt if [[ "${update_prompt,,}" =~ ^(y|yes)$ ]]; then msg_info "Updating ${APP}" - wget -qO- https://github.com/filebrowser/filebrowser/releases/latest/download/linux-amd64-filebrowser.tar.gz | tar -xzv -C /usr/local/bin &>/dev/null + curl -fsSL "https://github.com/filebrowser/filebrowser/releases/latest/download/linux-amd64-filebrowser.tar.gz" | tar -xzv -C /usr/local/bin &>/dev/null chmod +x "$INSTALL_PATH" msg_ok "Updated ${APP}" exit 0 @@ -107,7 +106,7 @@ read -r -p "Would you like to install ${APP}? (y/n): " install_prompt if [[ "${install_prompt,,}" =~ ^(y|yes)$ ]]; then msg_info "Installing ${APP} on ${OS}" $PKG_MANAGER wget tar curl &>/dev/null - wget -qO- https://github.com/filebrowser/filebrowser/releases/latest/download/linux-amd64-filebrowser.tar.gz | tar -xzv -C /usr/local/bin &>/dev/null + curl -fsSL "https://github.com/filebrowser/filebrowser/releases/latest/download/linux-amd64-filebrowser.tar.gz" | tar -xzv -C /usr/local/bin &>/dev/null chmod +x "$INSTALL_PATH" msg_ok "Installed ${APP}" @@ -115,9 +114,9 @@ if [[ "${install_prompt,,}" =~ ^(y|yes)$ ]]; then mkdir -p /usr/local/community-scripts chown root:root /usr/local/community-scripts chmod 755 /usr/local/community-scripts - touch "$DB_PATH" - chown root:root "$DB_PATH" - chmod 644 "$DB_PATH" + touch "$DB_PATH" + chown root:root "$DB_PATH" + chmod 644 "$DB_PATH" msg_ok "Directory created successfully" read -r -p "Would you like to use No Authentication? (y/N): " auth_prompt @@ -141,7 +140,7 @@ if [[ "${install_prompt,,}" =~ ^(y|yes)$ ]]; then msg_info "Creating service" if [[ "$OS" == "Debian" ]]; then - cat < "$SERVICE_PATH" + cat <"$SERVICE_PATH" [Unit] Description=Filebrowser After=network-online.target @@ -159,7 +158,7 @@ WantedBy=multi-user.target EOF systemctl enable -q --now filebrowser else - cat < "$SERVICE_PATH" + cat <"$SERVICE_PATH" #!/sbin/openrc-run command="/usr/local/bin/filebrowser" diff --git a/misc/frigate-support.sh b/misc/frigate-support.sh index 11e14e7a7..0c5c93cdb 100644 --- a/misc/frigate-support.sh +++ b/misc/frigate-support.sh @@ -6,8 +6,8 @@ # https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { - clear -cat <<"EOF" + clear + cat <<"EOF" ____ _ __ ____ __ / __/___(_)__ ____ _/ /____ / __/_ _____ ___ ___ ____/ /_ / _// __/ / _ `/ _ `/ __/ -_) _\ \/ // / _ \/ _ \/ _ \/ __/ __/ @@ -28,11 +28,11 @@ header_info # The array of device types # CHAR_DEVS+=(major:minor) -CHAR_DEVS+=("1:1") # mem -CHAR_DEVS+=("29:0") # fb0 -CHAR_DEVS+=("188:.*") # ttyUSB* -CHAR_DEVS+=("189:.*") # bus/usb/* -CHAR_DEVS+=("226:0") # card0 +CHAR_DEVS+=("1:1") # mem +CHAR_DEVS+=("29:0") # fb0 +CHAR_DEVS+=("188:.*") # ttyUSB* +CHAR_DEVS+=("189:.*") # bus/usb/* +CHAR_DEVS+=("226:0") # card0 CHAR_DEVS+=("226:128") # renderD128 # Proccess char device string @@ -89,5 +89,5 @@ EOF echo -e "\e[1;33m \nFinished....Reboot ${CTID} LXC to apply the changes.\n \e[0m" # In the Proxmox web shell run -# bash -c "$(wget -qLO - https://github.com/community-scripts/ProxmoxVE/raw/main/misc/frigate-support.sh)" -# Reboot the LXC to apply the changes \ No newline at end of file +# bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/frigate-support.sh)" +# Reboot the LXC to apply the changes diff --git a/misc/fstrim.sh b/misc/fstrim.sh index b155ef4ae..1e8fe3ffa 100644 --- a/misc/fstrim.sh +++ b/misc/fstrim.sh @@ -29,12 +29,12 @@ echo "Loading..." ROOT_FS=$(df -Th "/" | awk 'NR==2 {print $2}') if [ "$ROOT_FS" != "ext4" ]; then - echo "Root filesystem is not ext4. Exiting script." - exit 1 + echo "Root filesystem is not ext4. Exiting script." + exit 1 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 + --title "Proxmox VE LXC Filesystem Trim" \ + --yesno "The LXC containers will undergo the fstrim command. Proceed?" 10 58 || exit NODE=$(hostname) EXCLUDE_MENU=() @@ -47,12 +47,12 @@ while read -r TAG ITEM; do done < <(pct list | awk 'NR>1') excluded_containers_raw=$(whiptail --backtitle "Proxmox VE Helper Scripts" \ - --title "Containers on $NODE" \ - --checklist "\nSelect containers to skip from trimming:\n" \ - 16 $((MSG_MAX_LENGTH + 23)) 6 "${EXCLUDE_MENU[@]}" 3>&1 1>&2 2>&3) + --title "Containers on $NODE" \ + --checklist "\nSelect containers to skip from trimming:\n" \ + 16 $((MSG_MAX_LENGTH + 23)) 6 "${EXCLUDE_MENU[@]}" 3>&1 1>&2 2>&3) if [ $? -ne 0 ]; then - exit + exit fi excluded_containers=$(echo "$excluded_containers_raw" | tr -d '"') @@ -61,17 +61,17 @@ function trim_container() { local container=$1 header_info echo -e "${BL}[Info]${GN} Trimming ${BL}$container${CL} \n" - + local before_trim before_trim=$(lvs | awk -F '[[:space:]]+' 'NR>1 && (/Data%|'"vm-$container"'/) {gsub(/%/, "", $7); print $7}') echo -e "${RD}Data before trim $before_trim%${CL}" - + pct fstrim "$container" - + local after_trim after_trim=$(lvs | awk -F '[[:space:]]+' 'NR>1 && (/Data%|'"vm-$container"'/) {gsub(/%/, "", $7); print $7}') echo -e "${GN}Data after trim $after_trim%${CL}" - + sleep 1.5 } diff --git a/misc/glances.sh b/misc/glances.sh index cd49dcb33..90012a9df 100644 --- a/misc/glances.sh +++ b/misc/glances.sh @@ -6,8 +6,8 @@ # https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { - clear - cat <<"EOF" + clear + cat <<"EOF" ________ / ____/ /___ _____ ________ _____ / / __/ / __ `/ __ \/ ___/ _ \/ ___/ @@ -32,13 +32,13 @@ hostname="$(hostname)" silent() { "$@" >/dev/null 2>&1; } set -e 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 } msg_info() { @@ -49,7 +49,7 @@ msg_info() { } 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}" @@ -58,23 +58,23 @@ msg_ok() { install() { header_info while true; do - read -p "This will Install ${APP} on $hostname. Proceed(y/n)?" yn - case $yn in - [Yy]*) break ;; - [Nn]*) exit ;; - *) echo "Please answer yes or no." ;; - esac + read -p "This will Install ${APP} on $hostname. Proceed(y/n)?" yn + case $yn in + [Yy]*) break ;; + [Nn]*) exit ;; + *) echo "Please answer yes or no." ;; + esac done header_info read -r -p "Verbose mode? " prompt if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then - STD="" + STD="" else - STD="silent" + STD="silent" fi msg_info "Installing $APP" rm -rf /usr/lib/python3.*/EXTERNALLY-MANAGED - $STD bash -c "$(wget -qLO - https://raw.githubusercontent.com/nicolargo/glancesautoinstall/master/install.sh)" + $STD bash -c "$(curl -fsSL https://raw.githubusercontent.com/nicolargo/glancesautoinstall/master/install.sh)" cat </etc/systemd/system/glances.service [Unit] Description=Glances - An eye on your system @@ -97,29 +97,29 @@ EOF uninstall() { header_info msg_info "Uninstalling $APP" - 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 systemctl disable -q --now glances - bash -c "$(wget -qLO - https://raw.githubusercontent.com/nicolargo/glancesautoinstall/master/uninstall.sh)" + bash -c "$(curl -fsSL https://raw.githubusercontent.com/nicolargo/glancesautoinstall/master/uninstall.sh)" rm -rf /etc/systemd/system/glances.service msg_ok "Uninstalled $APP" msg_ok "Completed Successfully!\n" } -OPTIONS=(Install "Install $APP" \ - Uninstall "Uninstall $APP") +OPTIONS=(Install "Install $APP" + Uninstall "Uninstall $APP") CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "$APP" --menu "Select an option:" 10 58 2 \ - "${OPTIONS[@]}" 3>&1 1>&2 2>&3) + "${OPTIONS[@]}" 3>&1 1>&2 2>&3) case $CHOICE in - "Install") - install - ;; - "Uninstall") - uninstall - ;; - *) - echo "Exiting..." - exit 0 - ;; +"Install") + install + ;; +"Uninstall") + uninstall + ;; +*) + echo "Exiting..." + exit 0 + ;; esac diff --git a/misc/hw-acceleration.sh b/misc/hw-acceleration.sh index b632afb34..3c5d4c4bb 100644 --- a/misc/hw-acceleration.sh +++ b/misc/hw-acceleration.sh @@ -5,7 +5,7 @@ # License: MIT # https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE # Execute within the Proxmox shell -# bash -c "$(wget -qLO - https://github.com/community-scripts/ProxmoxVE/raw/main/misc/hw-acceleration.sh)" +# bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/hw-acceleration.sh)" set -e function header_info { @@ -56,8 +56,8 @@ MSG_MAX_LENGTH=0 privileged_containers=$(pct list | awk 'NR>1 && system("grep -q \047unprivileged: 1\047 /etc/pve/lxc/" $1 ".conf")') if [ -z "$privileged_containers" ]; then - whiptail --msgbox "No Privileged Containers Found." 10 58 - exit + whiptail --msgbox "No Privileged Containers Found." 10 58 + exit fi while read -r TAG ITEM; do @@ -69,11 +69,11 @@ 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 header_info read -r -p "Verbose mode? " prompt - if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then +if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then STD="" - else +else STD="silent" - fi +fi header_info cat <>/etc/pve/lxc/${privileged_container}.conf diff --git a/misc/install.func b/misc/install.func index aafc231f7..099d819dc 100644 --- a/misc/install.func +++ b/misc/install.func @@ -67,8 +67,8 @@ catch_errors() { # This function handles errors error_handler() { - source <(wget -qLO - https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/api.func) - if [ -n "$SPINNER_PID" ] && ps -p $SPINNER_PID >/dev/null; then kill $SPINNER_PID >/dev/null; fi + source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/api.func) + 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" @@ -109,7 +109,7 @@ msg_info() { # 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 + 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}" @@ -117,7 +117,7 @@ msg_ok() { # 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 + 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}" @@ -131,14 +131,14 @@ setting_up_container() { echo "LANG=${locale_line}" >/etc/default/locale locale-gen >/dev/null export LANG=${locale_line} - echo $tz >/etc/timezone - ln -sf /usr/share/zoneinfo/$tz /etc/localtime + echo "$tz" >/etc/timezone + ln -sf /usr/share/zoneinfo/"$tz" /etc/localtime for ((i = RETRY_NUM; i > 0; i--)); do if [ "$(hostname -I)" != "" ]; then break fi echo 1>&2 -en "${CROSS}${RD} No Network! " - sleep $RETRY_EVERY + sleep "$RETRY_EVERY" done if [ "$(hostname -I)" = "" ]; then echo 1>&2 -e "\n${CROSS}${RD} No Network After $RETRY_NUM Tries${CL}" @@ -213,7 +213,7 @@ EOF msg_info "Installing core dependencies" $STD apt-get update - $STD apt-get install -y sudo curl mc + $STD apt-get install -y sudo curl mc openssh-server wget msg_ok "Core dependencies installed" } @@ -264,12 +264,12 @@ EOF systemctl restart $(basename $(dirname $GETTY_OVERRIDE) | sed 's/\.d//') msg_ok "Customized Container" fi - echo "bash -c \"\$(wget -qLO - https://github.com/asylumexp/Proxmox/raw/main/ct/${app}.sh)\"" >/usr/bin/update + echo "bash -c \"\$(curl -fsSL https://raw.githubusercontent.com/asylumexp/Proxmox/main/ct/${app}.sh)\"" >/usr/bin/update chmod +x /usr/bin/update if [[ -n "${SSH_AUTHORIZED_KEY}" ]]; then mkdir -p /root/.ssh - echo "${SSH_AUTHORIZED_KEY}" >/root/.ssh/authorized_keys + echo "${SSH_AUTHORIZED_KfEY}" >/root/.ssh/authorized_keys chmod 700 /root/.ssh chmod 600 /root/.ssh/authorized_keys fi diff --git a/misc/kernel-clean.sh b/misc/kernel-clean.sh index 959318bdb..9efe71e61 100644 --- a/misc/kernel-clean.sh +++ b/misc/kernel-clean.sh @@ -40,7 +40,7 @@ echo -e "\n${YW}Select kernels to remove (comma-separated, e.g., 1,2):${CL}" read -r selected # Parse selection -IFS=',' read -r -a selected_indices <<< "$selected" +IFS=',' read -r -a selected_indices <<<"$selected" kernels_to_remove=() for index in "${selected_indices[@]}"; do diff --git a/misc/kernel-pin.sh b/misc/kernel-pin.sh index 5450b71ef..4ba86ae12 100644 --- a/misc/kernel-pin.sh +++ b/misc/kernel-pin.sh @@ -39,8 +39,8 @@ function msg_ok() { whiptail --backtitle "Proxmox VE Helper Scripts" --title "Proxmox VE Kernel Pin" --yesno "This will Pin/Unpin Kernel Images, Proceed?" 10 68 || exit - KERNEL_MENU=() - MSG_MAX_LENGTH=0 +KERNEL_MENU=() +MSG_MAX_LENGTH=0 while read -r TAG ITEM; do OFFSET=2 ((${#ITEM} + OFFSET > MSG_MAX_LENGTH)) && MSG_MAX_LENGTH=${#ITEM}+OFFSET diff --git a/misc/lxc-delete.sh b/misc/lxc-delete.sh index df9685de0..99a7e0871 100644 --- a/misc/lxc-delete.sh +++ b/misc/lxc-delete.sh @@ -5,8 +5,8 @@ # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { - clear - cat <<"EOF" + clear + cat <<"EOF" ____ __ _ ________ ____ __ __ / __ \_________ _ ______ ___ ____ _ __ / / | |/ / ____/ / __ \___ / /__ / /____ / /_/ / ___/ __ \| |/_/ __ `__ \/ __ \| |/_/ / / | / / / / / / _ \/ / _ \/ __/ _ \ @@ -20,7 +20,7 @@ spinner() { local pid=$1 local delay=0.1 local spinstr='|/-\' - while ps -p $pid > /dev/null; do + while ps -p $pid >/dev/null; do printf " [%c] " "$spinstr" spinstr=${spinstr#?}${spinstr%"${spinstr#?}"} sleep $delay @@ -59,15 +59,15 @@ while read -r container; do container_status=$(echo $container | awk '{print $3}') formatted_line=$(printf "$FORMAT" "$container_name" "$container_status") menu_items+=("$container_id" "$formatted_line" "OFF") -done <<< "$containers" +done <<<"$containers" CHOICES=$(whiptail --title "LXC Container Delete" \ - --checklist "Select LXC containers to delete:" 25 60 13 \ - "${menu_items[@]}" 3>&2 2>&1 1>&3) + --checklist "Select LXC containers to delete:" 25 60 13 \ + "${menu_items[@]}" 3>&2 2>&1 1>&3) if [ -z "$CHOICES" ]; then whiptail --title "LXC Container Delete" \ - --msgbox "No containers selected!" 10 60 + --msgbox "No containers selected!" 10 60 exit 1 fi diff --git a/misc/microcode.sh b/misc/microcode.sh index b5ce7aa71..385eb88cf 100644 --- a/misc/microcode.sh +++ b/misc/microcode.sh @@ -44,23 +44,35 @@ intel() { fi intel_microcode=$(curl -fsSL "https://ftp.debian.org/debian/pool/non-free-firmware/i/intel-microcode//" | grep -o 'href="[^"]*amd64.deb"' | sed 's/href="//;s/"//') - [ -z "$intel_microcode" ] && { whiptail --backtitle "Proxmox VE Helper Scripts" --title "No Microcode Found" --msgbox "It appears there were no microcode packages found\n Try again later." 10 68; msg_info "Exiting"; sleep 1; msg_ok "Done"; exit; } + [ -z "$intel_microcode" ] && { + whiptail --backtitle "Proxmox VE Helper Scripts" --title "No Microcode Found" --msgbox "It appears there were no microcode packages found\n Try again later." 10 68 + msg_info "Exiting" + sleep 1 + msg_ok "Done" + exit + } MICROCODE_MENU=() MSG_MAX_LENGTH=0 while read -r TAG ITEM; do OFFSET=2 - (( ${#ITEM} + OFFSET > MSG_MAX_LENGTH )) && MSG_MAX_LENGTH=${#ITEM}+OFFSET + ((${#ITEM} + OFFSET > MSG_MAX_LENGTH)) && MSG_MAX_LENGTH=${#ITEM}+OFFSET 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 - [ -z "$microcode" ] && { whiptail --backtitle "Proxmox VE Helper Scripts" --title "No Microcode Selected" --msgbox "It appears that no microcode packages were selected" 10 68; msg_info "Exiting"; sleep 1; msg_ok "Done"; exit; } + [ -z "$microcode" ] && { + whiptail --backtitle "Proxmox VE Helper Scripts" --title "No Microcode Selected" --msgbox "It appears that no microcode packages were selected" 10 68 + msg_info "Exiting" + sleep 1 + msg_ok "Done" + exit + } msg_info "Downloading the Intel Processor Microcode Package $microcode" - wget -q http://ftp.debian.org/debian/pool/non-free-firmware/i/intel-microcode/$microcode + curl -fsSL "http://ftp.debian.org/debian/pool/non-free-firmware/i/intel-microcode/$microcode" -o $(basename "http://ftp.debian.org/debian/pool/non-free-firmware/i/intel-microcode/$microcode") msg_ok "Downloaded the Intel Processor Microcode Package $microcode" msg_info "Installing $microcode (Patience)" @@ -76,23 +88,35 @@ intel() { amd() { amd_microcode=$(curl -fsSL "https://ftp.debian.org/debian/pool/non-free-firmware/a/amd64-microcode///" | grep -o 'href="[^"]*amd64.deb"' | sed 's/href="//;s/"//') - [ -z "$amd_microcode" ] && { whiptail --backtitle "Proxmox VE Helper Scripts" --title "No Microcode Found" --msgbox "It appears there were no microcode packages found\n Try again later." 10 68; msg_info "Exiting"; sleep 1; msg_ok "Done"; exit; } + [ -z "$amd_microcode" ] && { + whiptail --backtitle "Proxmox VE Helper Scripts" --title "No Microcode Found" --msgbox "It appears there were no microcode packages found\n Try again later." 10 68 + msg_info "Exiting" + sleep 1 + msg_ok "Done" + exit + } MICROCODE_MENU=() MSG_MAX_LENGTH=0 while read -r TAG ITEM; do OFFSET=2 - (( ${#ITEM} + OFFSET > MSG_MAX_LENGTH )) && MSG_MAX_LENGTH=${#ITEM}+OFFSET + ((${#ITEM} + OFFSET > MSG_MAX_LENGTH)) && MSG_MAX_LENGTH=${#ITEM}+OFFSET 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 - [ -z "$microcode" ] && { whiptail --backtitle "Proxmox VE Helper Scripts" --title "No Microcode Selected" --msgbox "It appears that no microcode packages were selected" 10 68; msg_info "Exiting"; sleep 1; msg_ok "Done"; exit; } + [ -z "$microcode" ] && { + whiptail --backtitle "Proxmox VE Helper Scripts" --title "No Microcode Selected" --msgbox "It appears that no microcode packages were selected" 10 68 + msg_info "Exiting" + sleep 1 + msg_ok "Done" + exit + } msg_info "Downloading the AMD Processor Microcode Package $microcode" - wget -q https://ftp.debian.org/debian/pool/non-free-firmware/a/amd64-microcode/$microcode + curl -fsSL "https://ftp.debian.org/debian/pool/non-free-firmware/a/amd64-microcode/$microcode" -o $(basename "https://ftp.debian.org/debian/pool/non-free-firmware/a/amd64-microcode/$microcode") msg_ok "Downloaded the AMD Processor Microcode Package $microcode" msg_info "Installing $microcode (Patience)" @@ -105,7 +129,11 @@ amd() { echo -e "\nIn order to apply the changes, a system reboot will be necessary.\n" } -if ! command -v pveversion >/dev/null 2>&1; then header_info; msg_error "No PVE Detected!"; exit; fi +if ! command -v pveversion >/dev/null 2>&1; then + header_info + msg_error "No PVE Detected!" + 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 diff --git a/misc/monitor-all.sh b/misc/monitor-all.sh index 3d6103f5e..b0f95786a 100644 --- a/misc/monitor-all.sh +++ b/misc/monitor-all.sh @@ -16,16 +16,16 @@ cat <<"EOF" EOF add() { -while true; do - read -p "This script will add Monitor All to Proxmox VE. Proceed(y/n)?" yn - case $yn in - [Yy]*) break ;; - [Nn]*) exit ;; - *) echo "Please answer yes or no." ;; - esac -done + while true; do + read -p "This script will add Monitor All to Proxmox VE. Proceed(y/n)?" yn + case $yn in + [Yy]*) break ;; + [Nn]*) exit ;; + *) echo "Please answer yes or no." ;; + esac + done -echo '#!/usr/bin/env bash + echo '#!/usr/bin/env bash # Read excluded instances from command line arguments excluded_instances=("$@") echo "Excluded instances: ${excluded_instances[@]}" @@ -89,10 +89,10 @@ while true; do echo "$(date): Pausing for 5 minutes..." sleep 300 done >/var/log/ping-instances.log 2>&1' >/usr/local/bin/ping-instances.sh -touch /var/log/ping-instances.log -# Change file permissions to executable -chmod +x /usr/local/bin/ping-instances.sh -cat </etc/systemd/system/ping-instances.timer + touch /var/log/ping-instances.log + # Change file permissions to executable + chmod +x /usr/local/bin/ping-instances.sh + cat </etc/systemd/system/ping-instances.timer [Unit] Description=Delay ping-instances.service by 5 minutes @@ -104,8 +104,8 @@ OnUnitActiveSec=300 WantedBy=timers.target EOF -# Create ping-instances.service -cat </etc/systemd/system/ping-instances.service + # Create ping-instances.service + cat </etc/systemd/system/ping-instances.service [Unit] Description=Ping instances every 5 minutes and restarts if necessary After=ping-instances.timer @@ -125,12 +125,12 @@ StandardError=file:/var/log/ping-instances.log WantedBy=multi-user.target EOF -# Reload daemon, enable and start ping-instances.service -systemctl daemon-reload -systemctl enable -q --now ping-instances.timer -systemctl enable -q --now ping-instances.service -clear -echo -e "\n To view Monitor All logs: cat /var/log/ping-instances.log" + # Reload daemon, enable and start ping-instances.service + systemctl daemon-reload + systemctl enable -q --now ping-instances.timer + systemctl enable -q --now ping-instances.service + clear + echo -e "\n To view Monitor All logs: cat /var/log/ping-instances.log" } remove() { @@ -141,23 +141,23 @@ remove() { } # Define options for the whiptail menu -OPTIONS=(Add "Add Monitor-All to Proxmox VE" \ - Remove "Remove Monitor-All from Proxmox VE") +OPTIONS=(Add "Add Monitor-All to Proxmox VE" + Remove "Remove Monitor-All from Proxmox VE") # Show the whiptail menu and save the user's choice CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "Monitor-All for Proxmox VE" --menu "Select an option:" 10 58 2 \ - "${OPTIONS[@]}" 3>&1 1>&2 2>&3) + "${OPTIONS[@]}" 3>&1 1>&2 2>&3) # Check the user's choice and perform the corresponding action case $CHOICE in - "Add") - add - ;; - "Remove") - remove - ;; - *) - echo "Exiting..." - exit 0 - ;; +"Add") + add + ;; +"Remove") + remove + ;; +*) + echo "Exiting..." + exit 0 + ;; esac diff --git a/misc/netdata.sh b/misc/netdata.sh index abc1f6e25..f8debbc1d 100644 --- a/misc/netdata.sh +++ b/misc/netdata.sh @@ -6,8 +6,8 @@ # https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { - clear - cat <<"EOF" + clear + cat <<"EOF" _ __ __ ____ __ / | / /__ / /_/ __ \____ _/ /_____ _ / |/ / _ \/ __/ / / / __ `/ __/ __ `/ @@ -52,14 +52,15 @@ install() { header_info read -r -p "Verbose mode? " prompt if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then - STD="" + STD="" else - STD="silent" + STD="silent" fi header_info msg_info "Setting up repository" - wget -q https://repo.netdata.cloud/repos/repoconfig/debian/bookworm/netdata-repo_5-1+debian12_all.deb + $STD apt-get install -y debian-keyring + curl -fsSL "https://repo.netdata.cloud/repos/repoconfig/debian/bookworm/netdata-repo_5-1+debian12_all.deb" -o $(basename "https://repo.netdata.cloud/repos/repoconfig/debian/bookworm/netdata-repo_5-1+debian12_all.deb") $STD dpkg -i netdata-repo_5-1+debian12_all.deb rm -rf netdata-repo_5-1+debian12_all.deb msg_ok "Set up repository" @@ -76,9 +77,9 @@ uninstall() { header_info read -r -p "Verbose mode? " prompt if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then - STD="" + STD="" else - STD="silent" + STD="silent" fi header_info @@ -102,21 +103,21 @@ if ! pveversion | grep -Eq "pve-manager/(8\.[0-9])"; then exit fi -OPTIONS=(Install "Install NetData on Proxmox VE" \ - Uninstall "Uninstall NetData from Proxmox VE") +OPTIONS=(Install "Install NetData on Proxmox VE" + Uninstall "Uninstall NetData from Proxmox VE") CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "NetData" --menu "Select an option:" 10 58 2 \ - "${OPTIONS[@]}" 3>&1 1>&2 2>&3) + "${OPTIONS[@]}" 3>&1 1>&2 2>&3) case $CHOICE in - "Install") - install - ;; - "Uninstall") - uninstall - ;; - *) - echo "Exiting..." - exit 0 - ;; +"Install") + install + ;; +"Uninstall") + uninstall + ;; +*) + echo "Exiting..." + exit 0 + ;; esac diff --git a/misc/olivetin.sh b/misc/olivetin.sh index e35e78df1..6caed1562 100644 --- a/misc/olivetin.sh +++ b/misc/olivetin.sh @@ -6,8 +6,8 @@ # https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { -clear -cat <<"EOF" + clear + cat <<"EOF" ____ ___ _______ / __ \/ (_) _____/_ __(_)___ / / / / / / | / / _ \/ / / / __ \ @@ -31,12 +31,12 @@ set-e header_info while true; do - read -p "This will Install ${APP} on $hostname. Proceed(y/n)?" yn - case $yn in - [Yy]*) break ;; - [Nn]*) exit ;; - *) echo "Please answer yes or no." ;; - esac + read -p "This will Install ${APP} on $hostname. Proceed(y/n)?" yn + case $yn in + [Yy]*) break ;; + [Nn]*) exit ;; + *) echo "Please answer yes or no." ;; + esac done header_info @@ -51,7 +51,7 @@ function msg_ok() { } msg_info "Installing ${APP}" -wget -q https://github.com/OliveTin/OliveTin/releases/latest/download/OliveTin_linux_amd64.deb +curl -fsSL "https://github.com/OliveTin/OliveTin/releases/latest/download/OliveTin_linux_amd64.deb" -o $(basename "https://github.com/OliveTin/OliveTin/releases/latest/download/OliveTin_linux_amd64.deb") dpkg -i OliveTin_linux_amd64.deb &>/dev/null systemctl enable --now OliveTin &>/dev/null rm OliveTin_linux_amd64.deb diff --git a/misc/pbs3-upgrade.sh b/misc/pbs3-upgrade.sh index 465ba8fb1..502be4bfe 100644 --- a/misc/pbs3-upgrade.sh +++ b/misc/pbs3-upgrade.sh @@ -44,7 +44,6 @@ msg_error() { echo -e "${BFR} ${CROSS} ${RD}${msg}${CL}" } - start_routines() { header_info CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "PBS 2 BACKUP" --menu "\nMake a backup of /etc/proxmox-backup to ensure that in the worst case, any relevant configuration can be recovered?" 14 58 2 \ @@ -164,7 +163,10 @@ while true; do read -p "Start the Update to Proxmox Backup Server 3 Script (y/n)?" yn case $yn in [Yy]*) break ;; - [Nn]*) clear; exit ;; + [Nn]*) + clear + exit + ;; *) echo "Please answer yes or no." ;; esac done diff --git a/misc/pbs_microcode.sh b/misc/pbs_microcode.sh index f3b88fde8..694649e35 100644 --- a/misc/pbs_microcode.sh +++ b/misc/pbs_microcode.sh @@ -39,8 +39,8 @@ header_info # Check if running on bare metal using systemd-detect-virt. virt=$(systemd-detect-virt) if [ "$virt" != "none" ]; then - msg_error "This script must be run on bare metal. Detected virtual environment: $virt" - exit 1 + msg_error "This script must be run on bare metal. Detected virtual environment: $virt" + exit 1 fi # Attempt to obtain the current loaded microcode revision @@ -58,7 +58,7 @@ intel() { fi intel_microcode=$(curl -fsSL "https://ftp.debian.org/debian/pool/non-free-firmware/i/intel-microcode/" | grep -o 'href="[^"]*amd64.deb"' | sed 's/href="//;s/"//') - [ -z "$intel_microcode" ] && { + [ -z "$intel_microcode" ] && { whiptail --backtitle "Proxmox Backup Server Helper Scripts" --title "No Microcode Found" --msgbox "No microcode packages were found.\nTry again later." 10 68 msg_info "Exiting" sleep 1 @@ -71,7 +71,7 @@ intel() { while read -r TAG ITEM; do OFFSET=2 - (( ${#ITEM} + OFFSET > MSG_MAX_LENGTH )) && MSG_MAX_LENGTH=$(( ${#ITEM} + OFFSET )) + ((${#ITEM} + OFFSET > MSG_MAX_LENGTH)) && MSG_MAX_LENGTH=$((${#ITEM} + OFFSET)) MICROCODE_MENU+=("$TAG" "$ITEM " "OFF") done < <(echo "$intel_microcode") @@ -80,7 +80,7 @@ intel() { --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 - [ -z "$microcode" ] && { + [ -z "$microcode" ] && { whiptail --backtitle "Proxmox Backup Server Helper Scripts" --title "No Microcode Selected" --msgbox "No microcode package was selected." 10 68 msg_info "Exiting" sleep 1 @@ -89,7 +89,7 @@ intel() { } msg_info "Downloading Intel processor microcode package $microcode" - wget -q http://ftp.debian.org/debian/pool/non-free-firmware/i/intel-microcode/$microcode + curl -fsSL "http://ftp.debian.org/debian/pool/non-free-firmware/i/intel-microcode/$microcode" -o $(basename "http://ftp.debian.org/debian/pool/non-free-firmware/i/intel-microcode/$microcode") msg_ok "Downloaded Intel processor microcode package $microcode" msg_info "Installing $microcode (this might take a while)" @@ -105,7 +105,7 @@ intel() { amd() { amd_microcode=$(curl -fsSL "https://ftp.debian.org/debian/pool/non-free-firmware/a/amd64-microcode/" | grep -o 'href="[^"]*amd64.deb"' | sed 's/href="//;s/"//') - [ -z "$amd_microcode" ] && { + [ -z "$amd_microcode" ] && { whiptail --backtitle "Proxmox Backup Server Helper Scripts" --title "No Microcode Found" --msgbox "No microcode packages were found.\nTry again later." 10 68 msg_info "Exiting" sleep 1 @@ -118,7 +118,7 @@ amd() { while read -r TAG ITEM; do OFFSET=2 - (( ${#ITEM} + OFFSET > MSG_MAX_LENGTH )) && MSG_MAX_LENGTH=$(( ${#ITEM} + OFFSET )) + ((${#ITEM} + OFFSET > MSG_MAX_LENGTH)) && MSG_MAX_LENGTH=$((${#ITEM} + OFFSET)) MICROCODE_MENU+=("$TAG" "$ITEM " "OFF") done < <(echo "$amd_microcode") @@ -127,7 +127,7 @@ amd() { --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 - [ -z "$microcode" ] && { + [ -z "$microcode" ] && { whiptail --backtitle "Proxmox Backup Server Helper Scripts" --title "No Microcode Selected" --msgbox "No microcode package was selected." 10 68 msg_info "Exiting" sleep 1 @@ -136,7 +136,7 @@ amd() { } msg_info "Downloading AMD processor microcode package $microcode" - wget -q https://ftp.debian.org/debian/pool/non-free-firmware/a/amd64-microcode/$microcode + curl -fsSL "https://ftp.debian.org/debian/pool/non-free-firmware/a/amd64-microcode/$microcode" -o $(basename "https://ftp.debian.org/debian/pool/non-free-firmware/a/amd64-microcode/$microcode") msg_ok "Downloaded AMD processor microcode package $microcode" msg_info "Installing $microcode (this might take a while)" diff --git a/misc/post-pbs-install.sh b/misc/post-pbs-install.sh index e95c62b0b..c564be1c0 100644 --- a/misc/post-pbs-install.sh +++ b/misc/post-pbs-install.sh @@ -44,7 +44,6 @@ msg_error() { echo -e "${BFR} ${CROSS} ${RD}${msg}${CL}" } - start_routines() { header_info VERSION="$(awk -F'=' '/^VERSION_CODENAME=/{ print $NF }' /etc/os-release)" @@ -171,14 +170,17 @@ while true; do read -p "Start the Proxmox Backup Server Post Install Script (y/n)?" yn case $yn in [Yy]*) break ;; - [Nn]*) clear; exit ;; + [Nn]*) + clear + exit + ;; *) echo "Please answer yes or no." ;; esac done if command -v pveversion >/dev/null 2>&1; then - echo -e "\n🛑 PVE Detected, Wrong Script!\n" - exit 1 + echo -e "\n🛑 PVE Detected, Wrong Script!\n" + exit 1 fi start_routines diff --git a/misc/post-pmg-install.sh b/misc/post-pmg-install.sh index 8c17e3139..f33657860 100644 --- a/misc/post-pmg-install.sh +++ b/misc/post-pmg-install.sh @@ -172,7 +172,10 @@ while true; do read -p "Start the Proxmox Mail Gateway Post Install Script (y/n)?" yn case $yn in [Yy]*) break ;; - [Nn]*) clear; exit ;; + [Nn]*) + clear + exit + ;; *) echo "Please answer yes or no." ;; esac done diff --git a/misc/post-pve-install.sh b/misc/post-pve-install.sh index aeba762cd..c3bac7cfc 100644 --- a/misc/post-pve-install.sh +++ b/misc/post-pve-install.sh @@ -58,7 +58,7 @@ deb http://deb.debian.org/debian bookworm main contrib deb http://deb.debian.org/debian bookworm-updates main contrib deb http://security.debian.org/debian-security bookworm-security main contrib EOF -echo 'APT::Get::Update::SourceListWarnings::NonFreeFirmware "false";' >/etc/apt/apt.conf.d/no-bookworm-firmware.conf + echo 'APT::Get::Update::SourceListWarnings::NonFreeFirmware "false";' >/etc/apt/apt.conf.d/no-bookworm-firmware.conf msg_ok "Corrected Proxmox VE Sources" ;; no) @@ -98,24 +98,24 @@ EOF ;; esac - CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "CEPH PACKAGE REPOSITORIES" --menu "The 'Ceph Package Repositories' provides access to both the 'no-subscription' and 'enterprise' repositories (initially disabled).\n \nCorrect 'ceph package sources?" 14 58 2 \ - "yes" " " \ - "no" " " 3>&2 2>&1 1>&3) - case $CHOICE in - yes) - msg_info "Correcting 'ceph package repositories'" - cat </etc/apt/sources.list.d/ceph.list + CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "CEPH PACKAGE REPOSITORIES" --menu "The 'Ceph Package Repositories' provides access to both the 'no-subscription' and 'enterprise' repositories (initially disabled).\n \nCorrect 'ceph package sources?" 14 58 2 \ + "yes" " " \ + "no" " " 3>&2 2>&1 1>&3) + case $CHOICE in + yes) + msg_info "Correcting 'ceph package repositories'" + cat </etc/apt/sources.list.d/ceph.list # deb https://enterprise.proxmox.com/debian/ceph-quincy bookworm enterprise # deb http://download.proxmox.com/debian/ceph-quincy bookworm no-subscription # deb https://enterprise.proxmox.com/debian/ceph-reef bookworm enterprise # deb http://download.proxmox.com/debian/ceph-reef bookworm no-subscription EOF - msg_ok "Corrected 'ceph package repositories'" - ;; - no) - msg_error "Selected no to Correcting 'ceph package repositories'" - ;; - esac + msg_ok "Corrected 'ceph package repositories'" + ;; + no) + msg_error "Selected no to Correcting 'ceph package repositories'" + ;; + esac CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "PVETEST" --menu "The 'pvetest' repository can give advanced users access to new features and updates before they are officially released.\n \nAdd (Disabled) 'pvetest' repository?" 14 58 2 \ "yes" " " \ @@ -141,7 +141,7 @@ EOF yes) whiptail --backtitle "Proxmox VE Helper Scripts" --msgbox --title "Support Subscriptions" "Supporting the software's development team is essential. Check their official website's Support Subscriptions for pricing. Without their dedicated work, we wouldn't have this exceptional software." 10 58 msg_info "Disabling subscription nag" - echo "DPkg::Post-Invoke { \"dpkg -V proxmox-widget-toolkit | grep -q '/proxmoxlib\.js$'; if [ \$? -eq 1 ]; then { echo 'Removing subscription nag from UI...'; sed -i '/.*data\.status.*{/{s/\!//;s/active/NoMoreNagging/}' /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js; }; fi\"; };" >/etc/apt/apt.conf.d/no-nag-script + echo "DPkg::Post-Invoke { \"dpkg -V proxmox-widget-toolkit | grep -q '/proxmoxlib\.js$'; if [ \$? -eq 1 ]; then { echo 'Removing subscription nag from UI...'; sed -i '/.*data\.status.*{/{s/\!//;s/active/NoMoreNagging/}' /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js; }; fi\"; };" >/etc/apt/apt.conf.d/no-nag-script apt --reinstall install proxmox-widget-toolkit &>/dev/null msg_ok "Disabled subscription nag (Delete browser cache)" ;; @@ -169,7 +169,7 @@ EOF ;; esac fi - + if systemctl is-active --quiet pve-ha-lrm; then CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "HIGH AVAILABILITY" --menu "If you plan to utilize a single node instead of a clustered environment, you can disable unnecessary high availability (HA) services, thus reclaiming system resources.\n\nIf HA becomes necessary at a later stage, the services can be re-enabled.\n\nDisable high availability?" 18 58 2 \ "yes" " " \ @@ -187,7 +187,7 @@ EOF ;; esac fi - + CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "UPDATE" --menu "\nUpdate Proxmox VE now?" 11 58 2 \ "yes" " " \ "no" " " 3>&2 2>&1 1>&3) @@ -226,7 +226,10 @@ while true; do read -p "Start the Proxmox VE Post Install Script (y/n)?" yn case $yn in [Yy]*) break ;; - [Nn]*) clear; exit ;; + [Nn]*) + clear + exit + ;; *) echo "Please answer yes or no." ;; esac done diff --git a/misc/pve8-upgrade.sh b/misc/pve8-upgrade.sh index 4dd8e1587..7e575f0f1 100644 --- a/misc/pve8-upgrade.sh +++ b/misc/pve8-upgrade.sh @@ -48,48 +48,48 @@ start_routines() { header_info whiptail --backtitle "Proxmox VE Helper Scripts" --msgbox --title "PVE8 SOURCES" "This will set the correct sources to update and install Proxmox VE 8." 10 58 - msg_info "Changing to Proxmox VE 8 Sources" - cat </etc/apt/sources.list + msg_info "Changing to Proxmox VE 8 Sources" + cat </etc/apt/sources.list deb http://ftp.debian.org/debian bookworm main contrib deb http://ftp.debian.org/debian bookworm-updates main contrib deb http://security.debian.org/debian-security bookworm-security main contrib EOF - msg_ok "Changed to Proxmox VE 8 Sources" + msg_ok "Changed to Proxmox VE 8 Sources" whiptail --backtitle "Proxmox VE Helper Scripts" --msgbox --title "PVE8-ENTERPRISE" "The 'pve-enterprise' repository is only available to users who have purchased a Proxmox VE subscription." 10 58 - msg_info "Disabling 'pve-enterprise' repository" - cat </etc/apt/sources.list.d/pve-enterprise.list + msg_info "Disabling 'pve-enterprise' repository" + cat </etc/apt/sources.list.d/pve-enterprise.list # deb https://enterprise.proxmox.com/debian/pve bookworm pve-enterprise EOF - msg_ok "Disabled 'pve-enterprise' repository" + msg_ok "Disabled 'pve-enterprise' repository" whiptail --backtitle "Proxmox VE Helper Scripts" --msgbox --title "PVE8-NO-SUBSCRIPTION" "The 'pve-no-subscription' repository provides access to all of the open-source components of Proxmox VE." 10 58 - msg_info "Enabling 'pve-no-subscription' repository" - cat </etc/apt/sources.list.d/pve-install-repo.list + msg_info "Enabling 'pve-no-subscription' repository" + cat </etc/apt/sources.list.d/pve-install-repo.list deb http://download.proxmox.com/debian/pve bookworm pve-no-subscription EOF - msg_ok "Enabled 'pve-no-subscription' repository" + msg_ok "Enabled 'pve-no-subscription' repository" whiptail --backtitle "Proxmox VE Helper Scripts" --msgbox --title "PVE8 CEPH PACKAGE REPOSITORIES" "The 'Ceph Package Repositories' provides access to both the 'no-subscription' and 'enterprise' repositories." 10 58 - msg_info "Enabling 'ceph package repositories'" - cat </etc/apt/sources.list.d/ceph.list + msg_info "Enabling 'ceph package repositories'" + cat </etc/apt/sources.list.d/ceph.list # deb https://enterprise.proxmox.com/debian/ceph-quincy bookworm enterprise deb http://download.proxmox.com/debian/ceph-quincy bookworm no-subscription EOF - msg_ok "Enabled 'ceph package repositories'" + msg_ok "Enabled 'ceph package repositories'" whiptail --backtitle "Proxmox VE Helper Scripts" --msgbox --title "PVE8 TEST" "The 'pvetest' repository can give advanced users access to new features and updates before they are officially released (Disabled)." 10 58 - msg_info "Adding 'pvetest' repository and set disabled" - cat </etc/apt/sources.list.d/pvetest-for-beta.list + msg_info "Adding 'pvetest' repository and set disabled" + cat </etc/apt/sources.list.d/pvetest-for-beta.list # deb http://download.proxmox.com/debian/pve bookworm pvetest EOF - msg_ok "Added 'pvetest' repository" + msg_ok "Added 'pvetest' repository" whiptail --backtitle "Proxmox VE Helper Scripts" --msgbox --title "PVE8 UPDATE" "Updating to Proxmox VE 8" 10 58 - msg_info "Updating to Proxmox VE 8 (Patience)" - apt-get update - DEBIAN_FRONTEND=noninteractive apt-get -o Dpkg::Options::="--force-confold" dist-upgrade -y - msg_ok "Updated to Proxmox VE 8" + msg_info "Updating to Proxmox VE 8 (Patience)" + apt-get update + DEBIAN_FRONTEND=noninteractive apt-get -o Dpkg::Options::="--force-confold" dist-upgrade -y + msg_ok "Updated to Proxmox VE 8" CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "REBOOT" --menu "\nReboot Proxmox VE 8 now? (recommended)" 11 58 2 \ "yes" " " \ @@ -113,7 +113,10 @@ while true; do read -p "Start the Update to Proxmox VE 8 Script (y/n)?" yn case $yn in [Yy]*) break ;; - [Nn]*) clear; exit ;; + [Nn]*) + clear + exit + ;; *) echo "Please answer yes or no." ;; esac done diff --git a/misc/pyenv.sh b/misc/pyenv.sh index c1d8044ad..2099da977 100644 --- a/misc/pyenv.sh +++ b/misc/pyenv.sh @@ -28,7 +28,10 @@ function msg_error() { local msg="$1" echo -e "${BFR} ${CROSS} ${RD}${msg}${CL}" } -if command -v pveversion >/dev/null 2>&1; then msg_error "Can't Install on Proxmox "; exit; fi +if command -v pveversion >/dev/null 2>&1; then + msg_error "Can't Install on Proxmox " + exit +fi msg_info "Installing pyenv" apt-get install -y \ make \ @@ -58,9 +61,9 @@ apt-get install -y \ git clone https://github.com/pyenv/pyenv.git ~/.pyenv &>/dev/null set +e -echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc -echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc -echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n eval "$(pyenv init --path)"\nfi' >> ~/.bashrc +echo 'export PYENV_ROOT="$HOME/.pyenv"' >>~/.bashrc +echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >>~/.bashrc +echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n eval "$(pyenv init --path)"\nfi' >>~/.bashrc msg_ok "Installed pyenv" . ~/.bashrc set -e @@ -70,8 +73,8 @@ pyenv global 3.11.1 msg_ok "Installed Python 3.11.1" read -r -p "Would you like to install Home Assistant Beta? " prompt if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then -msg_info "Installing Home Assistant Beta" -cat </etc/systemd/system/homeassistant.service + msg_info "Installing Home Assistant Beta" + cat </etc/systemd/system/homeassistant.service [Unit] Description=Home Assistant After=network-online.target @@ -83,31 +86,31 @@ RestartForceExitStatus=100 [Install] WantedBy=multi-user.target EOF -mkdir /srv/homeassistant -cd /srv/homeassistant -python3 -m venv . -source bin/activate -python3 -m pip install wheel &>/dev/null -pip3 install --upgrade pip &>/dev/null -pip3 install psycopg2-binary &>/dev/null -pip3 install --pre homeassistant &>/dev/null -systemctl enable homeassistant &>/dev/null -msg_ok "Installed Home Assistant Beta" -echo -e " Go to $(hostname -I | awk '{print $1}'):8123" -hass + mkdir /srv/homeassistant + cd /srv/homeassistant + python3 -m venv . + source bin/activate + python3 -m pip install wheel &>/dev/null + pip3 install --upgrade pip &>/dev/null + pip3 install psycopg2-binary &>/dev/null + pip3 install --pre homeassistant &>/dev/null + systemctl enable homeassistant &>/dev/null + msg_ok "Installed Home Assistant Beta" + echo -e " Go to $(hostname -I | awk '{print $1}'):8123" + hass fi read -r -p "Would you like to install ESPHome Beta? " prompt if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then -msg_info "Installing ESPHome Beta" -mkdir /srv/esphome -cd /srv/esphome -python3 -m venv . -source bin/activate -python3 -m pip install wheel &>/dev/null -pip3 install --upgrade pip &>/dev/null -pip3 install --pre esphome &>/dev/null -cat </srv/esphome/start.sh + msg_info "Installing ESPHome Beta" + mkdir /srv/esphome + cd /srv/esphome + python3 -m venv . + source bin/activate + python3 -m pip install wheel &>/dev/null + pip3 install --upgrade pip &>/dev/null + pip3 install --pre esphome &>/dev/null + cat </srv/esphome/start.sh #!/usr/bin/env bash # Copyright (c) 2021-2025 tteck @@ -118,8 +121,8 @@ cat </srv/esphome/start.sh source /srv/esphome/bin/activate esphome dashboard /srv/esphome/ EOF -chmod +x start.sh -cat </etc/systemd/system/esphomedashboard.service + chmod +x start.sh + cat </etc/systemd/system/esphomedashboard.service [Unit] Description=ESPHome Dashboard Service After=network.target @@ -133,27 +136,27 @@ Restart=on-failure [Install] WantedBy=multi-user.target EOF -systemctl enable --now esphomedashboard &>/dev/null -msg_ok "Installed ESPHome Beta" -echo -e " Go to $(hostname -I | awk '{print $1}'):6052" -exec $SHELL + systemctl enable --now esphomedashboard &>/dev/null + msg_ok "Installed ESPHome Beta" + echo -e " Go to $(hostname -I | awk '{print $1}'):6052" + exec $SHELL fi read -r -p "Would you like to install Matter-Server (Beta)? " prompt if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then -msg_info "Installing Matter Server" -apt-get install -y \ -libcairo2-dev \ -libjpeg62-turbo-dev \ -libgirepository1.0-dev \ -libpango1.0-dev \ -libgif-dev \ -g++ &>/dev/null -python3 -m pip install wheel -pip3 install --upgrade pip -pip install python-matter-server[server] -msg_ok "Installed Matter Server" -echo -e "Start server > python -m matter_server.server" + msg_info "Installing Matter Server" + apt-get install -y \ + libcairo2-dev \ + libjpeg62-turbo-dev \ + libgirepository1.0-dev \ + libpango1.0-dev \ + libgif-dev \ + g++ &>/dev/null + python3 -m pip install wheel + pip3 install --upgrade pip + pip install python-matter-server[server] + msg_ok "Installed Matter Server" + echo -e "Start server > python -m matter_server.server" fi msg_ok "\nFinished\n" exec $SHELL diff --git a/misc/scaling-governor.sh b/misc/scaling-governor.sh index cb0975349..29cff8d76 100644 --- a/misc/scaling-governor.sh +++ b/misc/scaling-governor.sh @@ -6,8 +6,8 @@ # https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE set -e header_info() { -clear -cat <&1 1>&2 2>&3 | tr -d '"') || exit [ -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 - exit + 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 + exit } echo "${scaling_governor}" | tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor >/dev/null current_governor=$(cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor) @@ -38,21 +38,24 @@ CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "CPU Scaling G "no" " " 3>&2 2>&1 1>&3) case $CHOICE in - yes) - set +e - NEW_CRONTAB_COMMAND="(sleep 60 && echo \"$current_governor\" | tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor)" - EXISTING_CRONTAB=$(crontab -l 2>/dev/null) - if [[ -n "$EXISTING_CRONTAB" ]]; then - TEMP_CRONTAB_FILE=$(mktemp) - echo "$EXISTING_CRONTAB" | grep -v "@reboot (sleep 60 && echo*" > "$TEMP_CRONTAB_FILE" - crontab "$TEMP_CRONTAB_FILE" - rm "$TEMP_CRONTAB_FILE" - fi - (crontab -l 2>/dev/null; echo "@reboot $NEW_CRONTAB_COMMAND") | crontab - - echo -e "\nCrontab Set (use 'crontab -e' to check)" - ;; - no) - echo -e "\n\033[31mNOTE: Settings return to default after reboot\033[m\n" - ;; +yes) + set +e + NEW_CRONTAB_COMMAND="(sleep 60 && echo \"$current_governor\" | tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor)" + EXISTING_CRONTAB=$(crontab -l 2>/dev/null) + if [[ -n "$EXISTING_CRONTAB" ]]; then + TEMP_CRONTAB_FILE=$(mktemp) + echo "$EXISTING_CRONTAB" | grep -v "@reboot (sleep 60 && echo*" >"$TEMP_CRONTAB_FILE" + crontab "$TEMP_CRONTAB_FILE" + rm "$TEMP_CRONTAB_FILE" + fi + ( + crontab -l 2>/dev/null + echo "@reboot $NEW_CRONTAB_COMMAND" + ) | crontab - + echo -e "\nCrontab Set (use 'crontab -e' to check)" + ;; +no) + echo -e "\n\033[31mNOTE: Settings return to default after reboot\033[m\n" + ;; esac echo -e "Current CPU Scaling Governor is set to \033[36m$current_governor\033[m\n" diff --git a/misc/update-lxcs.sh b/misc/update-lxcs.sh index 09b697050..973e5973d 100644 --- a/misc/update-lxcs.sh +++ b/misc/update-lxcs.sh @@ -38,17 +38,17 @@ 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 function needs_reboot() { - local container=$1 - local os=$(pct config "$container" | awk '/^ostype/ {print $2}') - local reboot_required_file="/var/run/reboot-required.pkgs" - if [ -f "$reboot_required_file" ]; then - if [[ "$os" == "ubuntu" || "$os" == "debian" ]]; then - if pct exec "$container" -- [ -s "$reboot_required_file" ]; then - return 0 - fi - fi + local container=$1 + local os=$(pct config "$container" | awk '/^ostype/ {print $2}') + local reboot_required_file="/var/run/reboot-required.pkgs" + if [ -f "$reboot_required_file" ]; then + if [[ "$os" == "ubuntu" || "$os" == "debian" ]]; then + if pct exec "$container" -- [ -s "$reboot_required_file" ]; then + return 0 + fi fi - return 1 + fi + return 1 } function update_container() { @@ -94,9 +94,9 @@ for container in $(pct list | awk '{if(NR>1) print $1}'); do update_container $container fi if pct exec "$container" -- [ -e "/var/run/reboot-required" ]; then - # Get the container's hostname and add it to the list - container_hostname=$(pct exec "$container" hostname) - containers_needing_reboot+=("$container ($container_hostname)") + # Get the container's hostname and add it to the list + container_hostname=$(pct exec "$container" hostname) + containers_needing_reboot+=("$container ($container_hostname)") fi fi done @@ -104,9 +104,9 @@ wait header_info echo -e "${GN}The process is complete, and the containers have been successfully updated.${CL}\n" if [ "${#containers_needing_reboot[@]}" -gt 0 ]; then - echo -e "${RD}The following containers require a reboot:${CL}" - for container_name in "${containers_needing_reboot[@]}"; do - echo "$container_name" - done + echo -e "${RD}The following containers require a reboot:${CL}" + for container_name in "${containers_needing_reboot[@]}"; do + echo "$container_name" + done fi echo "" diff --git a/misc/webmin.sh b/misc/webmin.sh index 92825f463..2502699ef 100644 --- a/misc/webmin.sh +++ b/misc/webmin.sh @@ -45,10 +45,10 @@ apt update &>/dev/null apt-get -y install libnet-ssleay-perl libauthen-pam-perl libio-pty-perl unzip shared-mime-info &>/dev/null msg_ok "Installed Prerequisites" -LATEST=$(curl -sL https://api.github.com/repos/webmin/webmin/releases/latest | grep '"tag_name":' | cut -d'"' -f4) +LATEST=$(curl -fsSL https://api.github.com/repos/webmin/webmin/releases/latest | grep '"tag_name":' | cut -d'"' -f4) msg_info "Downloading Webmin" -wget -q https://github.com/webmin/webmin/releases/download/$LATEST/webmin_${LATEST}_all.deb +curl -fsSL "https://github.com/webmin/webmin/releases/download/$LATEST/webmin_${LATEST}_all.deb" -o $(basename "https://github.com/webmin/webmin/releases/download/$LATEST/webmin_${LATEST}_all.deb") msg_ok "Downloaded Webmin" msg_info "Installing Webmin" diff --git a/turnkey/turnkey.sh b/turnkey/turnkey.sh index 5a39bc83a..0e71dcad3 100644 --- a/turnkey/turnkey.sh +++ b/turnkey/turnkey.sh @@ -238,4 +238,4 @@ info "Proceed to the LXC console to complete the setup." echo info "login: root" info "password: $PASS" -echo +echo \ No newline at end of file diff --git a/vm/archlinux-vm.sh b/vm/archlinux-vm.sh index 4e066037b..e9a67306b 100644 --- a/vm/archlinux-vm.sh +++ b/vm/archlinux-vm.sh @@ -4,8 +4,7 @@ # Author: MickLesk (CanbiZ) # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -source /dev/stdin <<< $(wget -qLO - https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/api.func) - +source /dev/stdin <<<$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/api.func) function header_info { clear @@ -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-3](\.[0-9]+)*"; then + if ! pveversion | grep -Eq "pve-manager/8\.[1-3](\.[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 \ @@ -425,7 +424,7 @@ msg_info "Retrieving the URL for the Arch Linux .iso File" URL=https://geo.mirror.pkgbuild.com/iso/latest/archlinux-x86_64.iso sleep 2 msg_ok "${CL}${BL}${URL}${CL}" -wget -q --show-progress $URL +curl -f#SL -o "$(basename "$URL")" "$URL" echo -en "\e[1A\e[0K" FILE=$(basename $URL) msg_ok "Downloaded ${CL}${BL}${FILE}${CL}" @@ -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 9f4a9d2f0..e34d023c4 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-3](\.[0-9]+)*"; then + if ! pveversion | grep -Eq "pve-manager/8\.[1-3](\.[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 @@ -425,7 +425,7 @@ msg_info "Retrieving the URL for the Debian 12 Qcow2 Disk Image" URL=https://cloud.debian.org/images/cloud/bookworm/latest/debian-12-nocloud-arm64.qcow2 sleep 2 msg_ok "${CL}${BL}${URL}${CL}" -wget -q --show-progress $URL +curl -f#SL -o "$(basename "$URL")" "$URL" echo -en "\e[1A\e[0K" FILE=$(basename $URL) msg_ok "Downloaded ${CL}${BL}${FILE}${CL}" diff --git a/vm/docker-vm.sh b/vm/docker-vm.sh index 38bf0e1e7..4bd6bc8e4 100644 --- a/vm/docker-vm.sh +++ b/vm/docker-vm.sh @@ -4,7 +4,7 @@ # Author: thost96 (thost96) # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -source /dev/stdin <<< $(wget -qLO - https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/api.func) +source /dev/stdin <<<$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/api.func) function header_info { clear @@ -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-3](\.[0-9]+)*"; then + if ! pveversion | grep -Eq "pve-manager/8\.[1-3](\.[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() { @@ -388,7 +388,7 @@ msg_info "Retrieving the URL for the Debian 12 Qcow2 Disk Image" URL="https://cloud.debian.org/images/cloud/bookworm/latest/debian-12-nocloud-$(dpkg --print-architecture).qcow2" sleep 2 msg_ok "${CL}${BL}${URL}${CL}" -wget -q --show-progress $URL +curl -f#SL -o "$(basename "$URL")" "$URL" echo -en "\e[1A\e[0K" FILE=$(basename $URL) msg_ok "Downloaded ${CL}${BL}${FILE}${CL}" @@ -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 f31dbe8ab..0f7bb0744 100644 --- a/vm/haos-vm.sh +++ b/vm/haos-vm.sh @@ -5,8 +5,7 @@ # License: MIT # https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -source /dev/stdin <<< $(wget -qLO - https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/api.func) - +source /dev/stdin <<<$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/api.func) function header_info { clear @@ -32,7 +31,7 @@ var_os="homeassistant" DISK_SIZE="32G" # for version in "${VERSIONS[@]}"; do - eval "$version=$(curl -s https://raw.githubusercontent.com/home-assistant/version/master/$version.json | grep "ova" | cut -d '"' -f 4)" + eval "$version=$(curl -fsSL https://raw.githubusercontent.com/home-assistant/version/master/stable.json | grep '"ova"' | cut -d '"' -f 4)" done YW=$(echo "\033[33m") BL=$(echo "\033[36m") @@ -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,7 +414,7 @@ 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" \ @@ -434,7 +432,7 @@ else fi sleep 2 msg_ok "${CL}${BL}${URL}${CL}" -wget -q --show-progress $URL +curl -f#SL -o "$(basename "$URL")" "$URL" echo -en "\e[1A\e[0K" FILE=$(basename $URL) msg_ok "Downloaded ${CL}${BL}haos_ova-${BRANCH}.qcow2.xz${CL}" @@ -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 ce417ca85..e2d437664 100644 --- a/vm/mikrotik-routeros.sh +++ b/vm/mikrotik-routeros.sh @@ -5,8 +5,7 @@ # License: MIT # https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -source /dev/stdin <<< $(wget -qLO - https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/api.func) - +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 @@ -255,7 +254,7 @@ URL=https://download.mikrotik.com/routeros/7.15.3/chr-7.15.3.img.zip sleep 2 msg_ok "${CL}${BL}${URL}${CL}" -wget -q --show-progress $URL +curl -f#SL -o "$(basename "$URL")" "$URL" echo -en "\e[1A\e[0K" FILE=$(basename $URL) msg_ok "Downloaded ${CL}${BL}$FILE${CL}" diff --git a/vm/nextcloud-vm.sh b/vm/nextcloud-vm.sh index eaa20adec..5d62fc097 100644 --- a/vm/nextcloud-vm.sh +++ b/vm/nextcloud-vm.sh @@ -5,7 +5,7 @@ # License: MIT # https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -source /dev/stdin <<< $(wget -qLO - https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/api.func) +source /dev/stdin <<<$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/api.func) function header_info { clear @@ -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() { @@ -389,7 +389,7 @@ msg_info "Retrieving the URL for the $NAME Disk Image" URL=http://mirror.turnkeylinux.org/turnkeylinux/images/iso/turnkey-nextcloud-18.1-bookworm-amd64.iso sleep 2 msg_ok "${CL}${BL}${URL}${CL}" -wget -q --show-progress $URL +curl -f#SL -o "$(basename "$URL")" "$URL" echo -en "\e[1A\e[0K" FILE=$(basename $URL) msg_ok "Downloaded ${CL}${BL}${FILE}${CL}" diff --git a/vm/openwrt.sh b/vm/openwrt.sh index ea0474e58..f5dfb50fa 100644 --- a/vm/openwrt.sh +++ b/vm/openwrt.sh @@ -7,7 +7,7 @@ # https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE # Based on work from https://i12bretro.github.io/tutorials/0405.html -source /dev/stdin <<< $(wget -qLO - https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/api.func) +source /dev/stdin <<<$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/api.func) function header_info { clear @@ -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() { @@ -447,13 +447,13 @@ msg_ok "Using ${CL}${BL}$STORAGE${CL} ${GN}for Storage Location." msg_ok "Virtual Machine ID is ${CL}${BL}$VMID${CL}." msg_info "Getting URL for OpenWrt Disk Image" -response=$(curl -s https://openwrt.org) +response=$(curl -fsSL https://openwrt.org) stableversion=$(echo "$response" | sed -n 's/.*Current stable release - OpenWrt \([0-9.]\+\).*/\1/p' | head -n 1) URL="https://downloads.openwrt.org/releases/$stableversion/targets/x86/64/openwrt-$stableversion-x86-64-generic-ext4-combined.img.gz" sleep 2 msg_ok "${CL}${BL}${URL}${CL}" -wget -q --show-progress $URL +curl -f#SL -o "$(basename "$URL")" "$URL" echo -en "\e[1A\e[0K" FILE=$(basename $URL) msg_ok "Downloaded ${CL}${BL}$FILE${CL}" diff --git a/vm/opnsense-vm.sh b/vm/opnsense-vm.sh index 04a6a9124..93b89c1e5 100644 --- a/vm/opnsense-vm.sh +++ b/vm/opnsense-vm.sh @@ -4,11 +4,11 @@ # Author: michelroegl-brunner # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -source /dev/stdin <<<$(wget -qLO - https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/api.func) +source /dev/stdin <<<$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/api.func) 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 @@ -527,10 +527,10 @@ msg_info "Retrieving the URL for the OPNsense Qcow2 Disk Image" URL=https://download.freebsd.org/releases/VM-IMAGES/14.2-RELEASE/amd64/Latest/FreeBSD-14.2-RELEASE-amd64.qcow2.xz sleep 2 msg_ok "${CL}${BL}${URL}${CL}" -wget -q --show-progress $URL +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 4c49e9a23..317299bcd 100644 --- a/vm/owncloud-vm.sh +++ b/vm/owncloud-vm.sh @@ -5,7 +5,7 @@ # License: MIT # https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -source /dev/stdin <<< $(wget -qLO - https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/api.func) +source /dev/stdin <<<$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/api.func) function header_info { clear @@ -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() { @@ -389,7 +389,7 @@ msg_info "Retrieving the URL for the $NAME Disk Image" URL=http://mirror.turnkeylinux.org/turnkeylinux/images/iso/turnkey-owncloud-18.0-bookworm-amd64.iso sleep 2 msg_ok "${CL}${BL}${URL}${CL}" -wget -q --show-progress $URL +curl -f#SL -o "$(basename "$URL")" "$URL" echo -en "\e[1A\e[0K" FILE=$(basename $URL) msg_ok "Downloaded ${CL}${BL}${FILE}${CL}" diff --git a/vm/pimox-haos-vm.sh b/vm/pimox-haos-vm.sh index 371034305..3ef4d2954 100644 --- a/vm/pimox-haos-vm.sh +++ b/vm/pimox-haos-vm.sh @@ -5,7 +5,7 @@ # License: MIT # https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -source /dev/stdin <<< $(wget -qLO - https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/api.func) +source /dev/stdin <<<$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/api.func) function header_info { cat <<"EOF" @@ -35,9 +35,9 @@ DISK_SIZE="32G" GEN_MAC=$(echo '00 60 2f'$(od -An -N3 -t xC /dev/urandom) | sed -e 's/ /:/g' | tr '[:lower:]' '[:upper:]') USEDID=$(pvesh get /cluster/resources --type vm --output-format yaml | egrep -i 'vmid' | awk '{print substr($2, 1, length($2)-0) }') NEXTID=$(pvesh get /cluster/nextid) -STABLE=$(curl -s https://raw.githubusercontent.com/home-assistant/version/master/stable.json | grep "ova" | awk '{print substr($2, 2, length($2)-3) }') -BETA=$(curl -s https://raw.githubusercontent.com/home-assistant/version/master/beta.json | grep "ova" | awk '{print substr($2, 2, length($2)-3) }') -DEV=$(curl -s https://raw.githubusercontent.com/home-assistant/version/master/dev.json | grep "ova" | awk '{print substr($2, 2, length($2)-3) }') +STABLE=$(curl -fsSL https://raw.githubusercontent.com/home-assistant/version/master/stable.json | grep "ova" | awk '{print substr($2, 2, length($2)-3) }') +BETA=$(curl -fsSL https://raw.githubusercontent.com/home-assistant/version/master/beta.json | grep "ova" | awk '{print substr($2, 2, length($2)-3) }') +DEV=$(curl -fsSL https://raw.githubusercontent.com/home-assistant/version/master/dev.json | grep "ova" | awk '{print substr($2, 2, length($2)-3) }') YW=$(echo "\033[33m") BL=$(echo "\033[36m") HA=$(echo "\033[1;34m") @@ -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" @@ -296,7 +296,7 @@ msg_info "Getting URL for Home Assistant ${BRANCH} Disk Image" URL=https://github.com/home-assistant/operating-system/releases/download/${BRANCH}/haos_generic-aarch64-${BRANCH}.qcow2.xz sleep 2 msg_ok "${CL}${BL}${URL}${CL}" -wget -q --show-progress $URL +curl -f#SL -o "$(basename "$URL")" "$URL" echo -en "\e[1A\e[0K" FILE=$(basename $URL) msg_ok "Downloaded ${CL}${BL}haos_generic-aarch64-${BRANCH}.qcow2.xz${CL}" diff --git a/vm/ubuntu2204-vm.sh b/vm/ubuntu2204-vm.sh index 803745b2a..69a27274a 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() { @@ -121,7 +121,7 @@ function check_root() { } function pve_check() { - if ! pveversion | grep -Eq "pve-manager/8\.[1-3](\.[0-9]+)*"; then + if ! pveversion | grep -Eq "pve-manager/8\.[1-3](\.[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 \ @@ -423,7 +423,7 @@ msg_info "Retrieving the URL for the Ubuntu 22.04 Disk Image" URL=https://cloud-images.ubuntu.com/jammy/current/jammy-server-cloudimg-arm64.img sleep 2 msg_ok "${CL}${BL}${URL}${CL}" -wget -q --show-progress $URL +curl -f#SL -o "$(basename "$URL")" "$URL" echo -en "\e[1A\e[0K" FILE=$(basename $URL) msg_ok "Downloaded ${CL}${BL}${FILE}${CL}" diff --git a/vm/ubuntu2404-vm.sh b/vm/ubuntu2404-vm.sh index 6991eb26c..84ab5e509 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-3](\.[0-9]+)*"; then + if ! pveversion | grep -Eq "pve-manager/8\.[1-3](\.[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 \ @@ -423,7 +423,7 @@ msg_info "Retrieving the URL for the Ubuntu 24.04 Disk Image" URL=https://cloud-images.ubuntu.com/noble/current/noble-server-cloudimg-arm64.img sleep 2 msg_ok "${CL}${BL}${URL}${CL}" -wget -q --show-progress $URL +curl -f#SL -o "$(basename "$URL")" "$URL" echo -en "\e[1A\e[0K" FILE=$(basename $URL) msg_ok "Downloaded ${CL}${BL}${FILE}${CL}" diff --git a/vm/ubuntu2410-vm.sh b/vm/ubuntu2410-vm.sh index a487a0274..1ea03c94a 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-3](\.[0-9]+)*"; then + if ! pveversion | grep -Eq "pve-manager/8\.[1-3](\.[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 \ @@ -423,7 +423,7 @@ msg_info "Retrieving the URL for the Ubuntu 24.10 Disk Image" URL=https://cloud-images.ubuntu.com/oracular/current/oracular-server-cloudimg-arm64.img sleep 2 msg_ok "${CL}${BL}${URL}${CL}" -wget -q --show-progress $URL +curl -f#SL -o "$(basename "$URL")" "$URL" echo -en "\e[1A\e[0K" FILE=$(basename $URL) msg_ok "Downloaded ${CL}${BL}${FILE}${CL}" @@ -492,13 +492,6 @@ DESCRIPTION=$( 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 -else - 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})" if [ "$START_VM" == "yes" ]; then