diff --git a/.gitattributes b/.gitattributes index d2573f2f2..6336972b9 100644 --- a/.gitattributes +++ b/.gitattributes @@ -26,6 +26,7 @@ SECURITY.md linguist-documentation # --------------------------------------- # Exclude generated/config files *.json linguist-generated +frontend/public/json/*.json linguist-generated=false *.lock linguist-generated *.yml linguist-generated *.yaml linguist-generated diff --git a/CHANGELOG.md b/CHANGELOG.md index 8519808a3..a65a53c97 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,113 @@ > [!CAUTION] Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit the project's popularity for potentially malicious purposes. +## 2025-07-21 + +## 2025-07-20 + +### πŸš€ Updated Scripts + + - #### 🐞 Bug Fixes + + - Fix OpenWebUI install/update scripts [@karamanliev](https://github.com/karamanliev) ([#6093](https://github.com/community-scripts/ProxmoxVE/pull/6093)) + + - #### ✨ New Features + + - karakeep: add DB_WAL_MODE; suppress test output [@vhsdream](https://github.com/vhsdream) ([#6101](https://github.com/community-scripts/ProxmoxVE/pull/6101)) + +## 2025-07-19 + +### πŸš€ Updated Scripts + + - #### 🐞 Bug Fixes + + - Fixed nag script on ProxMox 8.4.5 [@imcrazytwkr](https://github.com/imcrazytwkr) ([#6084](https://github.com/community-scripts/ProxmoxVE/pull/6084)) + +## 2025-07-18 + +### πŸš€ Updated Scripts + + - #### 🐞 Bug Fixes + + - AdventureLog: add backup folder before update [@MickLesk](https://github.com/MickLesk) ([#6066](https://github.com/community-scripts/ProxmoxVE/pull/6066)) + + - #### ✨ New Features + + - Bar-Assistant: add Cocktail database [@MickLesk](https://github.com/MickLesk) ([#6068](https://github.com/community-scripts/ProxmoxVE/pull/6068)) + - ErsatzTV: use project prebuild ffmpeg version [@MickLesk](https://github.com/MickLesk) ([#6067](https://github.com/community-scripts/ProxmoxVE/pull/6067)) + +## 2025-07-17 + +### πŸ†• New Scripts + + - Cloudreve ([#6044](https://github.com/community-scripts/ProxmoxVE/pull/6044)) + +### πŸš€ Updated Scripts + + - config-file: set GATE [@ahmaddxb](https://github.com/ahmaddxb) ([#6042](https://github.com/community-scripts/ProxmoxVE/pull/6042)) + + - #### 🐞 Bug Fixes + + - add "setup_composer" in update_script (baikal, bar-assistant, firefly) [@MickLesk](https://github.com/MickLesk) ([#6047](https://github.com/community-scripts/ProxmoxVE/pull/6047)) + - PLANKA: Fix update procedure [@tremor021](https://github.com/tremor021) ([#6031](https://github.com/community-scripts/ProxmoxVE/pull/6031)) + + - #### ✨ New Features + + - Reactive Resume: switch source to community-maintained fork [@vhsdream](https://github.com/vhsdream) ([#6051](https://github.com/community-scripts/ProxmoxVE/pull/6051)) + +## 2025-07-16 + +### πŸš€ Updated Scripts + + - #### 🐞 Bug Fixes + + - homepage.sh: resolves #6028 [@vhsdream](https://github.com/vhsdream) ([#6032](https://github.com/community-scripts/ProxmoxVE/pull/6032)) + - karakeep-install: Disable Playwright browser download, remove MCP build [@vhsdream](https://github.com/vhsdream) ([#5833](https://github.com/community-scripts/ProxmoxVE/pull/5833)) + + - #### πŸ”§ Refactor + + - chore: reorganize nginxproxymanager update script [@Kirbo](https://github.com/Kirbo) ([#5971](https://github.com/community-scripts/ProxmoxVE/pull/5971)) + +## 2025-07-15 + +### πŸš€ Updated Scripts + + - #### 🐞 Bug Fixes + + - checkmk: change password crawling based on there docs [@MickLesk](https://github.com/MickLesk) ([#6001](https://github.com/community-scripts/ProxmoxVE/pull/6001)) + - Whiptail: Improve Dialogue to work with ESC [@MickLesk](https://github.com/MickLesk) ([#6003](https://github.com/community-scripts/ProxmoxVE/pull/6003)) + - 2FAuth: Improve Update-Check [@MickLesk](https://github.com/MickLesk) ([#5998](https://github.com/community-scripts/ProxmoxVE/pull/5998)) + + - #### πŸ’₯ Breaking Changes + + - EMQX: Purge Old Install (remove acl.conf too!) [@MickLesk](https://github.com/MickLesk) ([#5999](https://github.com/community-scripts/ProxmoxVE/pull/5999)) + + - #### πŸ”§ Refactor + + - Refactor: PeaNUT [@MickLesk](https://github.com/MickLesk) ([#6002](https://github.com/community-scripts/ProxmoxVE/pull/6002)) + +## 2025-07-14 + +### πŸ†• New Scripts + + - Bar Assistant ([#5977](https://github.com/community-scripts/ProxmoxVE/pull/5977)) +- Mealie ([#5968](https://github.com/community-scripts/ProxmoxVE/pull/5968)) + +### πŸš€ Updated Scripts + + - Config-File: Some Addons, Bugfixes... [@MickLesk](https://github.com/MickLesk) ([#5978](https://github.com/community-scripts/ProxmoxVE/pull/5978)) + + - #### 🐞 Bug Fixes + + - add --break-system-packages certbot-dns-cloudflare to the nginxproxym… [@tug-benson](https://github.com/tug-benson) ([#5957](https://github.com/community-scripts/ProxmoxVE/pull/5957)) + - Dashy: remove unbound variable (RELEASE) [@MickLesk](https://github.com/MickLesk) ([#5974](https://github.com/community-scripts/ProxmoxVE/pull/5974)) + +### 🌐 Website + + - #### πŸ“ Script Information + + - Update nic-offloading-fix: add Intel as search Text [@calvin-li-developer](https://github.com/calvin-li-developer) ([#5954](https://github.com/community-scripts/ProxmoxVE/pull/5954)) + ## 2025-07-12 ## 2025-07-11 diff --git a/ct/2fauth.sh b/ct/2fauth.sh index b6ca14384..86c07dfc0 100644 --- a/ct/2fauth.sh +++ b/ct/2fauth.sh @@ -28,8 +28,11 @@ function update_script() { msg_error "No ${APP} Installation Found!" exit fi - 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 ~/.2fauth 2>/dev/null || cat /opt/2fauth_version.txt 2>/dev/null)" ]]; then + if ! command -v jq &>/dev/null; then + $STD apt-get install -y jq + fi + RELEASE=$(curl -fsSL https://api.github.com/repos/Bubka/2FAuth/releases/latest | jq -r '.tag_name' | sed 's/^v//') + if [[ "${RELEASE}" != "$(cat ~/.2fauth 2>/dev/null)" ]] || [[ ! -f ~/.2fauth ]]; then msg_info "Updating $APP to ${RELEASE}" $STD apt-get update $STD apt-get -y upgrade @@ -45,10 +48,11 @@ function update_script() { $STD apt-get install -y \ lsb-release \ gnupg2 - PHP_VERSION="8.3" PHP_MODULE="common,ctype,fileinfo,fpm,mysql,cli" setup_php + PHP_VERSION="8.3" PHP_MODULE="common,ctype,fileinfo,mysql,cli" PHP_FPM="YES" setup_php sed -i 's/php8.2/php8.3/g' /etc/nginx/conf.d/2fauth.conf fi fetch_and_deploy_gh_release "2fauth" "Bubka/2FAuth" + setup_composer mv "/opt/2fauth-backup/.env" "/opt/2fauth/.env" mv "/opt/2fauth-backup/storage" "/opt/2fauth/storage" cd "/opt/2fauth" || return diff --git a/ct/adventurelog.sh b/ct/adventurelog.sh index 1548511e9..c5399444a 100644 --- a/ct/adventurelog.sh +++ b/ct/adventurelog.sh @@ -35,26 +35,29 @@ function update_script() { systemctl stop adventurelog-frontend msg_ok "Services Stopped" + msg_info "Backup Old Installation" + mkdir -p /opt/adventurelog-backup + cp /opt/adventurelog/backend/server/.env /opt/adventurelog-backup/backend/server/.env + cp -r /opt/adventurelog/backend/server/media /opt/adventurelog-backup/backend/server/media + cp /opt/adventurelog/frontend/.env /opt/adventurelog-backup/frontend/.env + msg_ok "Backup done" + fetch_and_deploy_gh_release "adventurelog" "seanmorley15/adventurelog" PYTHON_VERSION="3.12" setup_uv msg_info "Updating ${APP} to v${RELEASE}" - # Backend Migration cp /opt/adventurelog-backup/backend/server/.env /opt/adventurelog/backend/server/.env cp -r /opt/adventurelog-backup/backend/server/media /opt/adventurelog/backend/server/media - cd /opt/adventurelog/backend/server if [[ ! -x .venv/bin/python ]]; then $STD uv venv .venv $STD .venv/bin/python -m ensurepip --upgrade fi - $STD .venv/bin/python -m pip install --upgrade pip $STD .venv/bin/python -m pip install -r requirements.txt $STD .venv/bin/python -m manage collectstatic --noinput $STD .venv/bin/python -m manage migrate - - # Frontend Migration + cp /opt/adventurelog-backup/frontend/.env /opt/adventurelog/frontend/.env cd /opt/adventurelog/frontend $STD pnpm i @@ -68,7 +71,6 @@ function update_script() { msg_ok "Services Started" msg_info "Cleaning Up" - rm -rf /opt/v${RELEASE}.zip rm -rf /opt/adventurelog-backup msg_ok "Cleaned" diff --git a/ct/baikal.sh b/ct/baikal.sh index e42234fad..e6266a990 100644 --- a/ct/baikal.sh +++ b/ct/baikal.sh @@ -39,6 +39,7 @@ function update_script() { msg_ok "Backed up data" fetch_and_deploy_gh_release "baikal" "sabre-io/Baikal" + setup_composer msg_info "Configuring Baikal" cp -r /opt/baikal-backup/config/baikal.yaml /opt/baikal/config/ diff --git a/ct/bar-assistant.sh b/ct/bar-assistant.sh new file mode 100644 index 000000000..42d035047 --- /dev/null +++ b/ct/bar-assistant.sh @@ -0,0 +1,129 @@ +#!/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: bvdberg01 | CanbiZ +# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE +# Source: https://github.com/karlomikus/bar-assistant +# Source: https://github.com/karlomikus/vue-salt-rim +# Source: https://www.meilisearch.com/ + +APP="Bar-Assistant" +var_tags="${var_tags:-cocktails;drinks}" +var_cpu="${var_cpu:-2}" +var_ram="${var_ram:-2048}" +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/bar-assistant ]]; then + msg_error "No ${APP} Installation Found!" + exit + fi + RELEASE_MEILISEARCH=$(curl -fsSL https://api.github.com/repos/meilisearch/meilisearch/releases/latest | jq -r '.tag_name | sub("^v"; "")') + RELEASE_BARASSISTANT=$(curl -fsSL https://api.github.com/repos/karlomikus/bar-assistant/releases/latest | jq -r '.tag_name | sub("^v"; "")') + RELEASE_SALTRIM=$(curl -fsSL https://api.github.com/repos/karlomikus/vue-salt-rim/releases/latest | jq -r '.tag_name | sub("^v"; "")') + + if [[ "${RELEASE_BARASSISTANT}" != "$(cat ~/.bar-assistant 2>/dev/null)" ]] || [[ ! -f ~/.bar-assistant ]]; then + msg_info "Stopping nginx" + systemctl stop nginx + msg_ok "Stopped nginx" + + msg_info "Backing up Bar Assistant" + mv /opt/bar-assistant /opt/bar-assistant-backup + msg_ok "Backed up Bar Assistant" + + fetch_and_deploy_gh_release "bar-assistant" "karlomikus/bar-assistant" "tarball" "latest" "/opt/bar-assistant" + setup_composer + + msg_info "Updating ${APP} to ${RELEASE_BARASSISTANT}" + cp -r /opt/bar-assistant-backup/.env /opt/bar-assistant/.env + cp -r /opt/bar-assistant-backup/storage/bar-assistant /opt/bar-assistant/storage/bar-assistant + cd /opt/bar-assistant + $STD composer install --no-interaction + $STD php artisan migrate --force + $STD php artisan storage:link + $STD php artisan bar:setup-meilisearch + $STD php artisan scout:sync-index-settings + $STD php artisan config:cache + $STD php artisan route:cache + $STD php artisan event:cache + chown -R www-data:www-data /opt/bar-assistant + msg_ok "Updated $APP to ${RELEASE_BARASSISTANT}" + + msg_info "Starting nginx" + systemctl start nginx + msg_ok "Started nginx" + + msg_info "Cleaning up" + rm -rf /opt/bar-assistant-backup + msg_ok "Cleaned" + else + msg_ok "No update required. ${APP} is already at ${RELEASE_BARASSISTANT}" + fi + + if [[ "${RELEASE_SALTRIM}" != "$(cat ~/.vue-salt-rim 2>/dev/null)" ]] || [[ ! -f ~/.vue-salt-rim ]]; then + msg_info "Backing up Vue Salt Rim" + mv /opt/vue-salt-rim /opt/vue-salt-rim-backup + msg_ok "Backed up Vue Salt Rim" + + msg_info "Stopping nginx" + systemctl stop nginx + msg_ok "Stopped nginx" + + fetch_and_deploy_gh_release "vue-salt-rim" "karlomikus/vue-salt-rim" "tarball" "latest" "/opt/vue-salt-rim" + + msg_info "Updating Salt Rim to ${RELEASE_SALTRIM}" + cp /opt/vue-salt-rim-backup/public/config.js /opt/vue-salt-rim/public/config.js + cd /opt/vue-salt-rim + $STD npm install + $STD npm run build + msg_ok "Updated $APP to ${RELEASE_SALTRIM}" + + msg_info "Starting nginx" + systemctl start nginx + msg_ok "Started nginx" + + msg_info "Cleaning up" + rm -rf /opt/vue-salt-rim-backup + msg_ok "Cleaned" + msg_ok "Updated" + else + msg_ok "No update required. Salt Rim is already at ${RELEASE_SALTRIM}" + fi + + if [[ "${RELEASE_MEILISEARCH}" != "$(cat ~/.meilisearch 2>/dev/null)" ]] || [[ ! -f ~/.meilisearch ]]; then + msg_info "Stopping Meilisearch" + systemctl stop meilisearch + msg_ok "Stopped Meilisearch" + + fetch_and_deploy_gh_release "meilisearch" "meilisearch/meilisearch" "binary" + + msg_info "Starting Meilisearch" + systemctl start meilisearch + msg_ok "Started Meilisearch" + + msg_ok "Updated Meilisearch" + else + msg_ok "No update required. Meilisearch is already at ${RELEASE_MEILISEARCH}" + 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}${CL}" diff --git a/ct/cloudreve.sh b/ct/cloudreve.sh new file mode 100644 index 000000000..516422b95 --- /dev/null +++ b/ct/cloudreve.sh @@ -0,0 +1,58 @@ +#!/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://cloudreve.org/ + +APP="Cloudreve" +var_tags="${var_tags:-cloud}" +var_cpu="${var_cpu:-1}" +var_ram="${var_ram:-1024}" +var_disk="${var_disk:-10}" +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/cloudreve ]]; then + msg_error "No ${APP} Installation Found!" + exit + fi + + RELEASE=$(curl -fsSL https://api.github.com/repos/cloudreve/cloudreve/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') + if [[ "${RELEASE}" != "$(cat ~/.cloudreve 2>/dev/null)" ]] || [[ ! -f ~/.cloudreve ]]; then + msg_info "Stopping $APP" + systemctl stop cloudreve + msg_ok "Stopped $APP" + + fetch_and_deploy_gh_release "cloudreve" "cloudreve/cloudreve" "prebuild" "latest" "/opt/cloudreve" "*linux_amd64.tar.gz" + + msg_info "Starting $APP" + systemctl start cloudreve + msg_ok "Started $APP" + + msg_ok "Update Successful" + 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}:5212${CL}" diff --git a/ct/emqx.sh b/ct/emqx.sh index dfaaf5ee0..899406283 100644 --- a/ct/emqx.sh +++ b/ct/emqx.sh @@ -30,6 +30,10 @@ function update_script() { systemctl stop emqx msg_ok "Stopped EMQX" + msg_info "Removing old EMQX" + $STD apt-get remove --purge -y emqx + msg_ok "Removed old EMQX" + msg_info "Downloading EMQX v${RELEASE}" DEB_FILE="/tmp/emqx-enterprise-${RELEASE}-debian12-amd64.deb" curl -fsSL -o "$DEB_FILE" "https://www.emqx.com/en/downloads/enterprise/v${RELEASE}/emqx-enterprise-${RELEASE}-debian12-amd64.deb" diff --git a/ct/ersatztv.sh b/ct/ersatztv.sh index f80005f12..3ad5b2f17 100644 --- a/ct/ersatztv.sh +++ b/ct/ersatztv.sh @@ -26,13 +26,14 @@ function update_script() { 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) + RELEASE=$(curl -fsSL https://api.github.com/repos/ErsatzTV/ErsatzTV/releases | grep -oP '"tag_name": "\Kv\K[^"]+' | head -n1) + RELEASE_FFMPEG=$(curl -fsSL https://api.github.com/repos/ErsatzTV/ErsatzTV-ffmpeg/releases | grep -oP '"tag_name": "\K[^"]+' | head -n 1) + if [[ "${RELEASE}" != "$(cat ~/.ersatztv 2>/dev/null)" ]] || [[ ! -f ~/.ersatztv ]]; then msg_info "Stopping ErsatzTV" systemctl stop ersatzTV msg_ok "Stopped ErsatzTV" - FFMPEG_VERSION="latest" FFMPEG_TYPE="medium" setup_ffmpeg fetch_and_deploy_gh_release "ersatztv" "ErsatzTV/ErsatzTV" "prebuild" "latest" "/opt/ErsatzTV" "*linux-arm64.tar.gz" msg_info "Starting ErsatzTV" @@ -43,6 +44,29 @@ function update_script() { else msg_ok "No update required. ${APP} is already at ${RELEASE}" fi + + if [[ "${RELEASE_FFMPEG}" != "$(cat ~/.ersatztv-ffmpeg 2>/dev/null)" ]] || [[ ! -f ~/.ersatztv-ffmpeg ]]; then + msg_info "Stopping ErsatzTV" + systemctl stop ersatzTV + msg_ok "Stopped ErsatzTV" + + fetch_and_deploy_gh_release "ersatztv-ffmpeg" "ErsatzTV/ErsatzTV-ffmpeg" "prebuild" "latest" "/opt/ErsatzTV-ffmpeg" "*-linux64-gpl-7.1.tar.xz" + + msg_info "Set ErsatzTV-ffmpeg links" + chmod +x /opt/ErsatzTV-ffmpeg/bin/* + ln -sf /opt/ErsatzTV-ffmpeg/bin/ffmpeg /usr/local/bin/ffmpeg + ln -sf /opt/ErsatzTV-ffmpeg/bin/ffplay /usr/local/bin/ffplay + ln -sf /opt/ErsatzTV-ffmpeg/bin/ffprobe /usr/local/bin/ffprobe + msg_ok "ffmpeg links set" + + msg_info "Starting ErsatzTV" + systemctl start ersatzTV + msg_ok "Started ErsatzTV" + + msg_ok "Updated Successfully" + else + msg_ok "No update required. ErsatzTV-ffmpeg is already at ${RELEASE_FFMPEG}" + fi exit } diff --git a/ct/firefly.sh b/ct/firefly.sh index 1bb322718..5a7991947 100644 --- a/ct/firefly.sh +++ b/ct/firefly.sh @@ -40,6 +40,7 @@ function update_script() { msg_ok "Backed up data" fetch_and_deploy_gh_release "firefly" "firefly-iii/firefly-iii" "prebuild" "latest" "/opt/firefly" "FireflyIII-*.zip" + setup_composer msg_info "Updating ${APP} to v${RELEASE}" rm -rf /opt/firefly/storage diff --git a/ct/headers/bar-assistant b/ct/headers/bar-assistant new file mode 100644 index 000000000..714e3854d --- /dev/null +++ b/ct/headers/bar-assistant @@ -0,0 +1,6 @@ + ____ ___ _ __ __ + / __ )____ ______ / | __________(_)____/ /_____ _____ / /_ + / __ / __ `/ ___/_____/ /| | / ___/ ___/ / ___/ __/ __ `/ __ \/ __/ + / /_/ / /_/ / / /_____/ ___ |(__ |__ ) (__ ) /_/ /_/ / / / / /_ +/_____/\__,_/_/ /_/ |_/____/____/_/____/\__/\__,_/_/ /_/\__/ + diff --git a/ct/headers/cloudreve b/ct/headers/cloudreve new file mode 100644 index 000000000..fb88b4ab2 --- /dev/null +++ b/ct/headers/cloudreve @@ -0,0 +1,6 @@ + ________ __ + / ____/ /___ __ ______/ /_______ _ _____ + / / / / __ \/ / / / __ / ___/ _ \ | / / _ \ +/ /___/ / /_/ / /_/ / /_/ / / / __/ |/ / __/ +\____/_/\____/\__,_/\__,_/_/ \___/|___/\___/ + diff --git a/ct/headers/mealie b/ct/headers/mealie new file mode 100644 index 000000000..a5d36d54c --- /dev/null +++ b/ct/headers/mealie @@ -0,0 +1,6 @@ + __ ___ ___ + / |/ /__ ____ _/ (_)__ + / /|_/ / _ \/ __ `/ / / _ \ + / / / / __/ /_/ / / / __/ +/_/ /_/\___/\__,_/_/_/\___/ + diff --git a/ct/homepage.sh b/ct/homepage.sh index 22b36592e..d48a70c3f 100644 --- a/ct/homepage.sh +++ b/ct/homepage.sh @@ -56,7 +56,7 @@ function update_script() { rm -rf homepage-${RELEASE} cd /opt/homepage $STD pnpm install - $STD npx --yes update-browserslist-db@latest + $STD pnpm update --no-save caniuse-lite export NEXT_PUBLIC_VERSION="v$RELEASE" export NEXT_PUBLIC_REVISION="source" export NEXT_PUBLIC_BUILDTIME=$(curl -fsSL https://api.github.com/repos/gethomepage/homepage/releases/latest | jq -r '.published_at') diff --git a/ct/karakeep.sh b/ct/karakeep.sh index 1af2b37dc..a0bd0288b 100644 --- a/ct/karakeep.sh +++ b/ct/karakeep.sh @@ -27,59 +27,67 @@ function update_script() { 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 yt-dlp" - $STD yt-dlp --update-to nightly - msg_ok "Updated yt-dlp" - 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 - 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" - $STD unzip "v${RELEASE}.zip" - mv karakeep-"${RELEASE}" /opt/karakeep - cd /opt/karakeep/apps/web - $STD pnpm install --frozen-lockfile - $STD pnpm build - cd /opt/karakeep/apps/workers - $STD pnpm install --frozen-lockfile - cd /opt/karakeep/apps/cli - $STD pnpm install --frozen-lockfile - $STD pnpm build - cd /opt/karakeep/apps/mcp - $STD pnpm install --frozen-lockfile - $STD pnpm build - export DATA_DIR=/opt/karakeep_data - cd /opt/karakeep/packages/db - $STD pnpm migrate - sed -i "s/SERVER_VERSION=${PREV_RELEASE}/SERVER_VERSION=${RELEASE}/" /etc/karakeep/karakeep.env - msg_ok "Updated ${APP} to v${RELEASE}" - 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}." + RELEASE=$(curl -fsSL https://api.github.com/repos/karakeep-app/karakeep/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') + if [[ -f ~/.karakeep && "$RELEASE" == "$(cat ~/.karakeep)" ]]; then + msg_ok "No update required. ${APP} is already at ${RELEASE}" + exit fi + msg_info "Stopping Services" + systemctl stop karakeep-web karakeep-workers karakeep-browser + msg_ok "Stopped Services" + + msg_info "Updating yt-dlp" + $STD yt-dlp --update-to nightly + msg_ok "Updated yt-dlp" + + msg_info "Prepare update" + if [[ -f /opt/${APP}_version.txt && "$(cat /opt/${APP}_version.txt)" < "0.23.0" ]]; then + $STD apt-get install -y graphicsmagick ghostscript + fi + 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 + msg_ok "Update prepared" + + fetch_and_deploy_gh_release "karakeep" "karakeep-app/karakeep" + if command -v corepack >/dev/null; then + $STD corepack disable + fi + MODULE_VERSION="$(jq -r '.packageManager | split("@")[1]' /opt/karakeep/package.json)" + NODE_VERSION="22" NODE_MODULE="pnpm@${MODULE_VERSION}" setup_nodejs + + msg_info "Updating ${APP} to v${RELEASE}" + export PUPPETEER_SKIP_DOWNLOAD="true" + export PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD="true" + export NEXT_TELEMETRY_DISABLED=1 + export CI="true" + cd /opt/karakeep/apps/web + $STD pnpm install --frozen-lockfile + $STD pnpm build + cd /opt/karakeep/apps/workers + $STD pnpm install --frozen-lockfile + cd /opt/karakeep/apps/cli + $STD pnpm install --frozen-lockfile + $STD pnpm build + export DATA_DIR=/opt/karakeep_data + cd /opt/karakeep/packages/db + $STD pnpm migrate + $STD pnpm store prune + sed -i "s/^SERVER_VERSION=.*$/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" + $STD apt-get autoremove -y + $STD apt-get autoclean -y + msg_ok "Cleaned" + msg_ok "Updated Successfully" exit } diff --git a/ct/mealie.sh b/ct/mealie.sh new file mode 100644 index 000000000..3e351cd21 --- /dev/null +++ b/ct/mealie.sh @@ -0,0 +1,97 @@ +#!/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://mealie.io + +APP="Mealie" +var_tags="${var_tags:-recipes}" +var_cpu="${var_cpu:-2}" +var_ram="${var_ram:-2048}" +var_disk="${var_disk:-10}" +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/mealie ]]; then + msg_error "No ${APP} Installation Found!" + exit + fi + + RELEASE=$(curl -fsSL https://api.github.com/repos/mealie-recipes/mealie/releases/latest | jq -r '.tag_name | sub("^v"; "")') + if [[ "${RELEASE}" != "$(cat ~/.mealie 2>/dev/null)" ]] || [[ ! -f ~/.mealie ]]; then + + PYTHON_VERSION="3.12" setup_uv + NODE_MODULE="yarn" NODE_VERSION="20" setup_nodejs + + msg_info "Stopping $APP" + systemctl stop mealie + msg_ok "Stopped $APP" + + msg_info "Backing up .env and start.sh" + cp -f /opt/mealie/mealie.env /opt/mealie/mealie.env.bak + cp -f /opt/mealie/start.sh /opt/mealie/start.sh.bak + msg_ok "Backup completed" + + fetch_and_deploy_gh_release "mealie" "mealie-recipes/mealie" "tarball" "latest" "/opt/mealie" + + msg_info "Rebuilding Frontend" + export NUXT_TELEMETRY_DISABLED=1 + cd /opt/mealie/frontend + $STD yarn install --prefer-offline --frozen-lockfile --non-interactive --production=false --network-timeout 1000000 + $STD yarn generate + cp -r /opt/mealie/frontend/dist /opt/mealie/mealie/frontend + msg_ok "Frontend rebuilt" + + msg_info "Rebuilding Backend Environment" + cd /opt/mealie + $STD /opt/mealie/.venv/bin/poetry self add "poetry-plugin-export>=1.9" + MEALIE_VERSION=$(/opt/mealie/.venv/bin/poetry version --short) + $STD /opt/mealie/.venv/bin/poetry build --output dist + $STD /opt/mealie/.venv/bin/poetry export --only=main --extras=pgsql --output=dist/requirements.txt + echo "mealie[pgsql]==$MEALIE_VERSION \\" >>dist/requirements.txt + /opt/mealie/.venv/bin/poetry run pip hash dist/mealie-$MEALIE_VERSION*.whl | tail -n1 | tr -d '\n' >>dist/requirements.txt + echo " \\" >>dist/requirements.txt + /opt/mealie/.venv/bin/poetry run pip hash dist/mealie-$MEALIE_VERSION*.tar.gz | tail -n1 >>dist/requirements.txt + msg_ok "Backend prepared" + + msg_info "Finalize Installation" + $STD /opt/mealie/.venv/bin/uv pip install --require-hashes -r /opt/mealie/dist/requirements.txt --find-links dist + msg_ok "Mealie installed" + + msg_info "Restoring Configuration" + mv -f /opt/mealie/mealie.env.bak /opt/mealie/mealie.env + mv -f /opt/mealie/start.sh.bak /opt/mealie/start.sh + chmod +x /opt/mealie/start.sh + msg_ok "Configuration restored" + + msg_info "Starting $APP" + systemctl start mealie + msg_ok "Started $APP" + + msg_ok "Update to $RELEASE Successful" + 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}:9000${CL}" diff --git a/ct/nginxproxymanager.sh b/ct/nginxproxymanager.sh index 1e7dd1193..bd6b6da44 100644 --- a/ct/nginxproxymanager.sh +++ b/ct/nginxproxymanager.sh @@ -27,15 +27,32 @@ function update_script() { msg_error "No ${APP} Installation Found!" exit fi + 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 -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 "Downloading NPM v${RELEASE}" + curl -fsSL "https://codeload.github.com/NginxProxyManager/nginx-proxy-manager/tar.gz/v${RELEASE}" | tar -xz + cd nginx-proxy-manager-"${RELEASE}" || exit + msg_ok "Downloaded NPM v${RELEASE}" + + msg_info "Building Frontend" + ( + cd ./frontend || exit + $STD pnpm install + $STD pnpm upgrade + $STD pnpm run build + ) + msg_ok "Built Frontend" + msg_info "Stopping Services" systemctl stop openresty systemctl stop npm @@ -50,12 +67,7 @@ function update_script() { "$STD" /var/cache/nginx msg_ok "Cleaned Old Files" - msg_info "Downloading NPM v${RELEASE}" - curl -fsSL "https://codeload.github.com/NginxProxyManager/nginx-proxy-manager/tar.gz/v${RELEASE}" | tar -xz - cd nginx-proxy-manager-"${RELEASE}" - msg_ok "Downloaded NPM v${RELEASE}" - - msg_info "Setting up Enviroment" + msg_info "Setting up Environment" ln -sf /usr/bin/python3 /usr/bin/python ln -sf /usr/bin/certbot /opt/certbot/bin/certbot ln -sf /usr/local/openresty/nginx/sbin/nginx /usr/sbin/nginx @@ -97,19 +109,12 @@ function update_script() { $STD openssl req -new -newkey rsa:2048 -days 3650 -nodes -x509 -subj "/O=Nginx Proxy Manager/OU=Dummy Certificate/CN=localhost" -keyout /data/nginx/dummykey.pem -out /data/nginx/dummycert.pem fi mkdir -p /app/global /app/frontend/images + cp -r frontend/dist/* /app/frontend + cp -r frontend/app-images/* /app/frontend/images cp -r backend/* /app cp -r global/* /app/global - $STD python3 -m pip install --no-cache-dir certbot-dns-cloudflare - msg_ok "Setup Enviroment" - - msg_info "Building Frontend" - cd ./frontend - $STD pnpm install - $STD pnpm upgrade - $STD pnpm run build - cp -r dist/* /app/frontend - cp -r app-images/* /app/frontend/images - msg_ok "Built Frontend" + $STD python3 -m pip install --no-cache-dir --break-system-packages certbot-dns-cloudflare + msg_ok "Setup Environment" msg_info "Initializing Backend" $STD rm -rf /app/config/default.json @@ -128,7 +133,7 @@ function update_script() { } EOF fi - cd /app + cd /app || exit $STD pnpm install msg_ok "Initialized Backend" diff --git a/ct/openwebui.sh b/ct/openwebui.sh index b25b4915f..8130c2c44 100644 --- a/ct/openwebui.sh +++ b/ct/openwebui.sh @@ -57,7 +57,7 @@ function update_script() { exit fi systemctl stop open-webui.service - $STD npm install + $STD npm install --force export NODE_OPTIONS="--max-old-space-size=3584" $STD npm run build cd ./backend diff --git a/ct/peanut.sh b/ct/peanut.sh index 6364ff3e4..bc29a3a6e 100644 --- a/ct/peanut.sh +++ b/ct/peanut.sh @@ -8,7 +8,7 @@ source <(curl -fsSL https://raw.githubusercontent.com/asylumexp/Proxmox/main/mis APP="PeaNUT" var_tags="${var_tags:-network;ups;}" var_cpu="${var_cpu:-2}" -var_ram="${var_ram:-3072}" +var_ram="${var_ram:-4096}" var_disk="${var_disk:-7}" var_os="${var_os:-debian}" var_version="${var_version:-12}" @@ -27,22 +27,31 @@ function update_script() { msg_error "No ${APP} Installation Found!" exit fi - 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}" + if ! command -v jq &>/dev/null; then + $STD apt-get install -y jq + fi + NODE_VERSION="22" NODE_MODULE="pnpm" setup_nodejs + RELEASE=$(curl -fsSL https://api.github.com/repos/Brandawg93/PeaNUT/releases/latest | jq -r '.tag_name' | sed 's/^v//') + if [[ "${RELEASE}" != "$(cat ~/.peanut 2>/dev/null)" ]] || [[ ! -f ~/.peanut ]]; then + + msg_info "Stopping $APP" systemctl stop peanut - curl -fsSL "https://api.github.com/repos/Brandawg93/PeaNUT/tarball/${RELEASE}" -o "peanut.tar.gz" - tar -xzf peanut.tar.gz -C /opt/peanut --strip-components=1 - rm peanut.tar.gz + msg_ok "Stopped $APP" + + fetch_and_deploy_gh_release "peanut" "Brandawg93/PeaNUT" "tarball" "latest" "/opt/peanut" + + msg_info "Updating $APP to ${RELEASE}" cd /opt/peanut $STD pnpm i - $STD pnpm run build + $STD pnpm run build:local cp -r .next/static .next/standalone/.next/ mkdir -p /opt/peanut/.next/standalone/config ln -sf /etc/peanut/settings.yml /opt/peanut/.next/standalone/config/settings.yml - systemctl start peanut - echo "${RELEASE}" >/opt/${APP}_version.txt msg_ok "Updated $APP to ${RELEASE}" + + msg_info "Starting $APP" + systemctl start peanut + msg_ok "Started $APP" else msg_ok "No update required. ${APP} is already at ${RELEASE}" fi diff --git a/ct/planka.sh b/ct/planka.sh index 43b72d303..1d7cc4b5f 100644 --- a/ct/planka.sh +++ b/ct/planka.sh @@ -28,33 +28,33 @@ function update_script() { msg_error "No ${APP} Installation Found!" exit fi - RELEASE=$(curl -s https://api.github.com/repos/plankanban/planka/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') + RELEASE=$(curl -s https://api.github.com/repos/plankanban/planka/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') if [[ "${RELEASE}" != "$(cat ~/.planka 2>/dev/null)" ]] || [[ ! -f ~/.planka ]]; then msg_info "Stopping $APP" systemctl stop planka msg_ok "Stopped $APP" - msg_info "Updating $APP to ${RELEASE}" - mkdir -p /opt/planka-backup - mkdir -p /opt/planka-backup/favicons - mkdir -p /opt/planka-backup/user-avatars - mkdir -p /opt/planka-backup/background-images - mkdir -p /opt/planka-backup/attachments + msg_info "Backing up data" + mkdir -p /opt/planka-backup/{favicons,user-avatars,background-images,attachments} mv /opt/planka/.env /opt/planka-backup - [ -n "$(ls -A /opt/planka/public/favicons 2>/dev/null)" ] && mv /opt/planka/public/favicons/* /opt/planka-backup/favicons/ - [ -n "$(ls -A /opt/planka/public/user-avatars 2>/dev/null)" ] && mv /opt/planka/public/user-avatars/* /opt/planka-backup/user-avatars/ - [ -n "$(ls -A /opt/planka/public/background-images 2>/dev/null)" ] && mv /opt/planka/public/background-images/* /opt/planka-backup/background-images/ - [ -n "$(ls -A /opt/planka/private/attachments 2>/dev/null)" ] && mv /opt/planka/private/attachments/* /opt/planka-backup/attachments/ + [ -d /opt/planka/public/favicons ] && find /opt/planka/public/favicons -maxdepth 1 -type f -exec mv -t /opt/planka-backup/favicons {} + + [ -d /opt/planka/public/user-avatars ] && find /opt/planka/public/user-avatars -maxdepth 1 -type f -exec mv -t /opt/planka-backup/user-avatars {} + + [ -d /opt/planka/public/background-images ] && find /opt/planka/public/background-images -maxdepth 1 -type f -exec mv -t /opt/planka-backup/background-images {} + + [ -d /opt/planka/private/attachments ] && find /opt/planka/private/attachments -maxdepth 1 -type f -exec mv -t /opt/planka-backup/attachments {} + rm -rf /opt/planka + msg_ok "Backed up data" + fetch_and_deploy_gh_release "planka" "plankanban/planka" "prebuild" "latest" "/opt/planka" "planka-prebuild.zip" cd /opt/planka $STD npm install + + msg_info "Restoring data" mv /opt/planka-backup/.env /opt/planka/ - [ -n "$(ls -A /opt/planka-backup/favicons 2>/dev/null)" ] && mv /opt/planka-backup/favicons/* /opt/planka/public/favicons/ - [ -n "$(ls -A /opt/planka-backup/user-avatars 2>/dev/null)" ] && mv /opt/planka-backup/user-avatars/* /opt/planka/public/user-avatars/ - [ -n "$(ls -A /opt/planka-backup/background-images 2>/dev/null)" ] && mv /opt/planka-backup/background-images/* /opt/planka/public/background-images/ - [ -n "$(ls -A /opt/planka-backup/attachments 2>/dev/null)" ] && mv /opt/planka-backup/attachments/* /opt/planka/private/attachments/ - msg_ok "Updated $APP to ${RELEASE}" + [ -d /opt/planka-backup/favicons ] && find /opt/planka-backup/favicons -maxdepth 1 -type f -exec mv -t /opt/planka/public/favicons {} + + [ -d /opt/planka-backup/user-avatars ] && find /opt/planka-backup/user-avatars -maxdepth 1 -type f -exec mv -t /opt/planka/public/user-avatars {} + + [ -d /opt/planka-backup/background-images ] && find /opt/planka-backup/background-images -maxdepth 1 -type f -exec mv -t /opt/planka/public/background-images {} + + [ -d /opt/planka-backup/attachments ] && find /opt/planka-backup/attachments -maxdepth 1 -type f -exec mv -t /opt/planka/private/attachments {} + + msg_ok "Restored data" msg_info "Starting $APP" systemctl start planka diff --git a/ct/reactive-resume.sh b/ct/reactive-resume.sh index 9c3d0bddf..53dad3383 100644 --- a/ct/reactive-resume.sh +++ b/ct/reactive-resume.sh @@ -3,7 +3,7 @@ source <(curl -fsSL https://raw.githubusercontent.com/asylumexp/Proxmox/main/mis # Copyright (c) 2021-2025 community-scripts ORG # Author: vhsdream # License: MIT | https://github.com/asylumexp/Proxmox/raw/main/LICENSE -# Source: https://rxresu.me +# Source: https://rxresume.org APP="Reactive-Resume" var_tags="${var_tags:-documents}" @@ -20,80 +20,75 @@ color catch_errors function update_script() { - header_info - check_container_storage - check_container_resources + header_info + check_container_storage + check_container_resources - if [[ ! -f /etc/systemd/system/Reactive-Resume.service ]]; then - msg_error "No ${APP} Installation Found!" - exit - fi - RELEASE=$(curl -fsSL https://api.github.com/repos/AmruthPillai/Reactive-Resume/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 services" - systemctl stop Reactive-Resume - msg_ok "Stopped services" - - msg_info "Updating $APP to v${RELEASE}" - cp /opt/${APP}/.env /opt/rxresume.env - res_tmp=$(mktemp) - rm -rf /opt/${APP} - curl -fsSL "https://github.com/AmruthPillai/Reactive-Resume/archive/refs/tags/v${RELEASE}.zip" -O $res_tmp - $STD unzip $res_tmp - mv ${APP}-${RELEASE}/ /opt/${APP} - cd /opt/${APP} - export PUPPETEER_SKIP_DOWNLOAD="true" - export NEXT_TELEMETRY_DISABLED=1 - export CI="true" - export NODE_ENV="production" - $STD pnpm install --frozen-lockfile - $STD pnpm run build - $STD pnpm run prisma:generate - mv /opt/rxresume.env /opt/${APP}/.env - msg_ok "Updated $APP to v${RELEASE}" - - msg_info "Updating Minio" - systemctl stop minio - cd /tmp - curl -fsSL https://dl.min.io/server/minio/release/linux-arm64/minio.deb -o minio.deb - $STD dpkg -i minio.deb - msg_ok "Updated Minio" - - msg_info "Updating Browserless (Patience)" - systemctl stop browserless - cp /opt/browserless/.env /opt/browserless.env - rm -rf browserless - brwsr_tmp=$(mktemp) - TAG=$(curl -fsSL https://api.github.com/repos/browserless/browserless/tags?per_page=1 | grep "name" | awk '{print substr($2, 3, length($2)-4) }') - curl -fsSL https://github.com/browserless/browserless/archive/refs/tags/v${TAG}.zip -O $brwsr_tmp - $STD unzip $brwsr_tmp - mv browserless-${TAG}/ /opt/browserless - cd /opt/browserless - $STD npm install - rm -rf src/routes/{chrome,edge,firefox,webkit} - $STD node_modules/playwright-core/cli.js install --with-deps chromium - $STD npm run build - $STD npm run build:function - $STD npm prune production - mv /opt/browserless.env /opt/browserless/.env - msg_ok "Updated Browserless" - - msg_info "Restarting services" - systemctl start minio Reactive-Resume browserless - msg_ok "Restarted services" - - msg_info "Cleaning Up" - rm -f /tmp/minio.deb - rm -f $brwsr_tmp - rm -f $res_tmp - msg_ok "Cleanup Completed" - - echo "${RELEASE}" >/opt/${APP}_version.txt - msg_ok "Update Successful" - else - msg_ok "No update required. ${APP} is already at v${RELEASE}" - fi + if [[ ! -f /etc/systemd/system/Reactive-Resume.service ]]; then + msg_error "No $APP Installation Found!" exit + fi + RELEASE=$(curl -fsSL https://api.github.com/repos/lazy-media/Reactive-Resume/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') + if [[ ! -f "$HOME"/.reactive-resume ]] || [[ "$RELEASE" != "$(cat "$HOME"/.reactive-resume)" ]]; then + msg_info "Stopping services" + systemctl stop Reactive-Resume + msg_ok "Stopped services" + + cp /opt/"$APP"/.env /opt/rxresume.env + rm -rf /opt/"$APP" + fetch_and_deploy_gh_release "Reactive-Resume" "lazy-media/Reactive-Resume" + msg_info "Updating $APP to v${RELEASE}" + cd /opt/"$APP" + export PUPPETEER_SKIP_DOWNLOAD="true" + export NEXT_TELEMETRY_DISABLED=1 + export CI="true" + export NODE_ENV="production" + $STD pnpm install --frozen-lockfile + $STD pnpm run build + $STD pnpm run prisma:generate + mv /opt/rxresume.env /opt/"$APP"/.env + msg_ok "Updated $APP to v${RELEASE}" + + msg_info "Updating Minio" + systemctl stop minio + cd /tmp + curl -fsSL https://dl.min.io/server/minio/release/linux-arm64/minio.deb -o minio.deb + $STD dpkg -i minio.deb + msg_ok "Updated Minio" + + msg_info "Updating Browserless (Patience)" + systemctl stop browserless + cp /opt/browserless/.env /opt/browserless.env + rm -rf /opt/browserless + brwsr_tmp=$(mktemp) + TAG=$(curl -fsSL https://api.github.com/repos/browserless/browserless/tags?per_page=1 | grep "name" | awk '{print substr($2, 3, length($2)-4) }') + curl -fsSL https://github.com/browserless/browserless/archive/refs/tags/v"$TAG".zip -o "$brwsr_tmp" + $STD unzip "$brwsr_tmp" + mv browserless-"$TAG"/ /opt/browserless + cd /opt/browserless + $STD npm install + rm -rf src/routes/{chrome,edge,firefox,webkit} + $STD node_modules/playwright-core/cli.js install --with-deps chromium + $STD npm run build + $STD npm run build:function + $STD npm prune production + mv /opt/browserless.env /opt/browserless/.env + msg_ok "Updated Browserless" + + msg_info "Restarting services" + systemctl start minio Reactive-Resume browserless + msg_ok "Restarted services" + + msg_info "Cleaning Up" + rm -f /tmp/minio.deb + rm -f "$brwsr_tmp" + msg_ok "Cleanup Completed" + + msg_ok "Update Successful" + else + msg_ok "No update required. $APP is already at v{$RELEASE}" + fi + exit } start diff --git a/ct/threadfin.sh b/ct/threadfin.sh index d7ce4fd68..bd268175f 100644 --- a/ct/threadfin.sh +++ b/ct/threadfin.sh @@ -29,7 +29,7 @@ function update_script() { fi RELEASE=$(curl -fsSL https://api.github.com/repos/threadfin/threadfin/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') - if [[ "${RELEASE}" != "$(cat ~/.threadfin 2>/dev/null)" ]] || [[ ! -f ~/.threadfin ]]; then + if [[ "${RELEASE}" != "$(cat ~/.threadfin_version 2>/dev/null)" ]] || [[ ! -f ~/.threadfin_version ]]; then msg_info "Stopping $APP" systemctl stop threadfin diff --git a/frontend/public/json/bar-assistant.json b/frontend/public/json/bar-assistant.json new file mode 100644 index 000000000..6558c3f09 --- /dev/null +++ b/frontend/public/json/bar-assistant.json @@ -0,0 +1,35 @@ +{ + "name": "Bar-Assistant", + "slug": "bar-assistant", + "categories": [ + 24 + ], + "date_created": "2025-07-14", + "type": "ct", + "updateable": true, + "privileged": false, + "interface_port": 80, + "documentation": "https://docs.barassistant.app/", + "website": "https://barassistant.app/", + "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/bar-assistant.webp", + "config_path": "/opt/bar-assistant", + "description": "Bar Assistant is all-in-one solution for managing your home bar. Compared to other recipe management software that usually tries to be more for general use, Bar Assistant is made specifically for managing cocktail recipes. This means that there are a lot of cocktail-oriented features, like ingredient substitutes, first-class ingredients, ABV calculations, unit switching and more..", + "install_methods": [ + { + "type": "default", + "script": "ct/bar-assistant.sh", + "resources": { + "cpu": 2, + "ram": 2048, + "hdd": 4, + "os": "debian", + "version": "12" + } + } + ], + "default_credentials": { + "username": null, + "password": null + }, + "notes": [] +} diff --git a/frontend/public/json/cloudreve.json b/frontend/public/json/cloudreve.json new file mode 100644 index 000000000..7a6f51fda --- /dev/null +++ b/frontend/public/json/cloudreve.json @@ -0,0 +1,40 @@ +{ + "name": "Cloudreve", + "slug": "cloudreve", + "categories": [ + 12 + ], + "date_created": "2025-07-17", + "type": "ct", + "updateable": true, + "privileged": false, + "interface_port": 5212, + "documentation": "https://docs.cloudreve.org/en/", + "website": "https://cloudreve.org/", + "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/cloudreve.webp", + "config_path": "/opt/cloudreve/data/conf.ini", + "description": "Cloudreve is an open-source, community-driven cloud storage system that provides file sharing, synchronization, and management features. It supports a wide range of storage backends and integrates with various notification and logging platforms.", + "install_methods": [ + { + "type": "default", + "script": "ct/cloudreve.sh", + "resources": { + "cpu": 1, + "ram": 1024, + "hdd": 10, + "os": "Debian", + "version": "12" + } + } + ], + "default_credentials": { + "username": null, + "password": null + }, + "notes": [ + { + "text": "After Installation: Register your user -> Login -> Dashboard -> Accept Primary URL.", + "type": "warn" + } + ] +} diff --git a/frontend/public/json/mealie.json b/frontend/public/json/mealie.json new file mode 100644 index 000000000..6136deb7a --- /dev/null +++ b/frontend/public/json/mealie.json @@ -0,0 +1,35 @@ +{ + "name": "Mealie", + "slug": "mealie", + "categories": [ + 13 + ], + "date_created": "2025-07-14", + "type": "ct", + "updateable": true, + "privileged": false, + "config_path": "/opt/mealie/mealie.env", + "interface_port": 9000, + "documentation": "https://mealie.io/", + "website": "https://mealie.io/", + "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/mealie.webp", + "description": "Mealie is a self hosted recipe manager, meal planner and shopping list with a RestAPI backend and a reactive frontend built in Vue for a pleasant user experience for the whole family. Easily add recipes into your database by providing the URL and Mealie will automatically import the relevant data, or add a family recipe with the UI editor. Mealie also provides an API for interactions from 3rd party applications.", + "install_methods": [ + { + "type": "default", + "script": "ct/mealie.sh", + "resources": { + "cpu": 2, + "ram": 2048, + "hdd": 10, + "os": "Debian", + "version": "12" + } + } + ], + "default_credentials": { + "username": null, + "password": null + }, + "notes": [] +} diff --git a/frontend/public/json/peanut.json b/frontend/public/json/peanut.json index ae73b2714..77e10dfa1 100644 --- a/frontend/public/json/peanut.json +++ b/frontend/public/json/peanut.json @@ -1,35 +1,35 @@ { - "name": "PeaNUT", - "slug": "peanut", - "categories": [ - 4 - ], - "date_created": "2024-06-14", - "type": "ct", - "updateable": true, - "privileged": false, - "interface_port": 3000, - "documentation": null, - "website": "https://github.com/Brandawg93/PeaNUT/", - "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/peanut.webp", - "config_path": "/etc/peanut/settings.yml", - "description": "PeaNUT is a small dashboard for Network UPS Tools (NUT). It provides a web interface to monitor and manage UPS devices. PeaNUT allows users to view device status, retrieve information, and manage UPS parameters through its API. It's customizable for different UPS devices and supports integration with the Homepage dashboard.", - "install_methods": [ - { - "type": "default", - "script": "ct/peanut.sh", - "resources": { - "cpu": 2, - "ram": 3072, - "hdd": 7, - "os": "debian", - "version": "12" - } - } - ], - "default_credentials": { - "username": null, - "password": null - }, - "notes": [] + "name": "PeaNUT", + "slug": "peanut", + "categories": [ + 4 + ], + "date_created": "2024-06-14", + "type": "ct", + "updateable": true, + "privileged": false, + "interface_port": 3000, + "documentation": null, + "website": "https://github.com/Brandawg93/PeaNUT/", + "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/peanut.webp", + "config_path": "/etc/peanut/settings.yml", + "description": "PeaNUT is a small dashboard for Network UPS Tools (NUT). It provides a web interface to monitor and manage UPS devices. PeaNUT allows users to view device status, retrieve information, and manage UPS parameters through its API. It's customizable for different UPS devices and supports integration with the Homepage dashboard.", + "install_methods": [ + { + "type": "default", + "script": "ct/peanut.sh", + "resources": { + "cpu": 2, + "ram": 4096, + "hdd": 7, + "os": "debian", + "version": "12" + } + } + ], + "default_credentials": { + "username": null, + "password": null + }, + "notes": [] } diff --git a/frontend/public/json/reactive-resume.json b/frontend/public/json/reactive-resume.json index 0d86c3159..5c99acfb9 100644 --- a/frontend/public/json/reactive-resume.json +++ b/frontend/public/json/reactive-resume.json @@ -9,8 +9,8 @@ "updateable": true, "privileged": false, "interface_port": 3000, - "documentation": "https://docs.rxresu.me/", - "website": "https://rxresu.me", + "documentation": "https://docs.rxresume.org/", + "website": "https://rxresume.org", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/png/reactive-resume-light.png", "config_path": "/opt/reactive-resume/.env", "description": "A one-of-a-kind resume builder that keeps your privacy in mind. Completely secure, customizable, portable, open-source and free forever.", diff --git a/frontend/public/json/versions.json b/frontend/public/json/versions.json index 4be4a6d49..cd4c83daf 100644 --- a/frontend/public/json/versions.json +++ b/frontend/public/json/versions.json @@ -1,48 +1,418 @@ [ { - "name": "Ombi-app/Ombi", - "version": "v4.47.1", - "date": "2025-01-05T21:14:23Z" + "name": "fallenbagel/jellyseerr", + "version": "preview-seerr", + "date": "2025-07-20T22:47:08Z" }, { - "name": "eclipse-mosquitto/mosquitto", - "version": "v2.0.22", - "date": "2025-07-11T21:34:20Z" + "name": "Dolibarr/dolibarr", + "version": "21.0.2", + "date": "2025-07-20T17:02:07Z" + }, + { + "name": "firefly-iii/firefly-iii", + "version": "v6.2.21", + "date": "2025-07-17T04:46:25Z" + }, + { + "name": "msgbyte/tianji", + "version": "v1.24.4", + "date": "2025-07-20T16:35:14Z" + }, + { + "name": "fuma-nama/fumadocs", + "version": "fumadocs-openapi@9.1.4", + "date": "2025-07-20T13:38:10Z" + }, + { + "name": "karakeep-app/karakeep", + "version": "sdk/v0.26.0", + "date": "2025-07-20T13:26:30Z" + }, + { + "name": "OliveTin/OliveTin", + "version": "2025.7.19", + "date": "2025-07-20T09:44:35Z" + }, + { + "name": "semaphoreui/semaphore", + "version": "v2.16.0-beta1", + "date": "2025-07-20T09:43:36Z" + }, + { + "name": "tobychui/zoraxy", + "version": "v3.2.5", + "date": "2025-07-20T07:28:22Z" + }, + { + "name": "documenso/documenso", + "version": "v1.12.2-rc.2", + "date": "2025-07-20T07:05:19Z" + }, + { + "name": "morpheus65535/bazarr", + "version": "v1.5.3-beta.10", + "date": "2025-07-15T06:07:03Z" + }, + { + "name": "Jackett/Jackett", + "version": "v0.22.2174", + "date": "2025-07-20T05:56:23Z" + }, + { + "name": "linkwarden/linkwarden", + "version": "v2.11.5", + "date": "2025-07-20T03:14:42Z" }, { "name": "steveiliop56/tinyauth", - "version": "v3.6.0", - "date": "2025-07-09T23:15:25Z" + "version": "v3.6.2", + "date": "2025-07-17T12:08:03Z" }, { - "name": "mongodb/mongo", - "version": "r8.2.0-alpha0", - "date": "2025-07-11T21:06:26Z" + "name": "Luligu/matterbridge", + "version": "3.1.5", + "date": "2025-07-19T21:50:47Z" }, { - "name": "duplicati/duplicati", - "version": "v2.1.0.124-2.1.0.124_canary_2025-07-11", - "date": "2025-07-11T20:09:08Z" + "name": "ellite/Wallos", + "version": "v3.3.1", + "date": "2025-07-19T20:51:00Z" }, { - "name": "TandoorRecipes/recipes", - "version": "1.5.35", - "date": "2025-06-22T08:30:10Z" + "name": "pelican-dev/panel", + "version": "v1.0.0-beta23", + "date": "2025-07-19T19:49:28Z" + }, + { + "name": "pelican-dev/wings", + "version": "v1.0.0-beta15", + "date": "2025-07-19T19:46:52Z" }, { "name": "MediaBrowser/Emby.Releases", "version": "4.9.1.2", "date": "2025-06-26T22:08:00Z" }, + { + "name": "open-webui/open-webui", + "version": "v0.6.18", + "date": "2025-07-19T19:26:14Z" + }, + { + "name": "bunkerity/bunkerweb", + "version": "v1.6.2", + "date": "2025-07-08T13:52:33Z" + }, + { + "name": "pocketbase/pocketbase", + "version": "v0.29.0", + "date": "2025-07-19T08:54:54Z" + }, + { + "name": "Paymenter/Paymenter", + "version": "v1.2.4", + "date": "2025-07-19T07:42:25Z" + }, + { + "name": "esphome/esphome", + "version": "2025.7.2", + "date": "2025-07-19T00:05:00Z" + }, + { + "name": "minio/minio", + "version": "RELEASE.2025-07-18T21-56-31Z", + "date": "2025-07-18T23:56:46Z" + }, + { + "name": "Brandawg93/PeaNUT", + "version": "v5.9.4", + "date": "2025-07-18T21:50:31Z" + }, + { + "name": "rcourtman/Pulse", + "version": "v3.42.0", + "date": "2025-07-14T22:07:28Z" + }, + { + "name": "keycloak/keycloak", + "version": "26.2.6", + "date": "2025-07-17T11:16:34Z" + }, { "name": "homarr-labs/homarr", - "version": "v1.28.0", - "date": "2025-07-11T19:16:26Z" + "version": "v1.29.0", + "date": "2025-07-18T19:17:21Z" + }, + { + "name": "theonedev/onedev", + "version": "v12.0.1", + "date": "2025-07-18T15:02:25Z" + }, + { + "name": "TandoorRecipes/recipes", + "version": "1.5.35", + "date": "2025-06-22T08:30:10Z" + }, + { + "name": "openhab/openhab-core", + "version": "5.0.0.RC1", + "date": "2025-07-18T13:17:28Z" + }, + { + "name": "wazuh/wazuh", + "version": "coverity-w29-4.13.0", + "date": "2025-07-16T12:35:22Z" }, { "name": "n8n-io/n8n", - "version": "n8n@1.101.2", - "date": "2025-07-11T12:03:41Z" + "version": "n8n@1.102.4", + "date": "2025-07-17T11:27:58Z" + }, + { + "name": "emqx/emqx", + "version": "e6.0.0-M1.202507-rc.1", + "date": "2025-07-18T07:48:52Z" + }, + { + "name": "meilisearch/meilisearch", + "version": "prototype-chat-completions-with-filters-0", + "date": "2025-07-16T08:54:57Z" + }, + { + "name": "ollama/ollama", + "version": "v0.9.7-rc1", + "date": "2025-07-11T22:15:00Z" + }, + { + "name": "cross-seed/cross-seed", + "version": "v6.13.1", + "date": "2025-07-17T21:36:42Z" + }, + { + "name": "coder/code-server", + "version": "v4.102.1", + "date": "2025-07-17T21:20:36Z" + }, + { + "name": "duplicati/duplicati", + "version": "v2.1.1.0-2.1.1.0_experimental_2025-07-17", + "date": "2025-07-17T20:11:33Z" + }, + { + "name": "grafana/grafana", + "version": "v12.0.2+security-01", + "date": "2025-07-17T19:13:19Z" + }, + { + "name": "jhuckaby/Cronicle", + "version": "v0.9.83", + "date": "2025-07-17T17:48:01Z" + }, + { + "name": "mongodb/mongo", + "version": "r8.0.12", + "date": "2025-07-17T17:43:01Z" + }, + { + "name": "wavelog/wavelog", + "version": "2.0.7", + "date": "2025-07-17T15:33:14Z" + }, + { + "name": "forgejo/forgejo", + "version": "v12.0.0", + "date": "2025-07-17T14:38:30Z" + }, + { + "name": "linuxserver/Heimdall", + "version": "v2.7.0", + "date": "2025-07-17T14:08:16Z" + }, + { + "name": "oauth2-proxy/oauth2-proxy", + "version": "v7.10.0", + "date": "2025-07-17T12:08:40Z" + }, + { + "name": "icereed/paperless-gpt", + "version": "v0.22.0", + "date": "2025-07-17T06:35:43Z" + }, + { + "name": "advplyr/audiobookshelf", + "version": "v2.26.1", + "date": "2025-07-16T22:48:43Z" + }, + { + "name": "plexguide/Huntarr.io", + "version": "8.1.15", + "date": "2025-07-16T18:06:03Z" + }, + { + "name": "benjaminjonard/koillection", + "version": "1.6.15", + "date": "2025-07-16T16:47:57Z" + }, + { + "name": "usememos/memos", + "version": "v0.25.0", + "date": "2025-07-16T14:57:02Z" + }, + { + "name": "TryGhost/Ghost-CLI", + "version": "v1.27.1", + "date": "2025-07-16T13:29:00Z" + }, + { + "name": "Checkmk/checkmk", + "version": "v2.4.0p8-rc2", + "date": "2025-07-16T13:21:20Z" + }, + { + "name": "glpi-project/glpi", + "version": "10.0.19", + "date": "2025-07-16T09:45:14Z" + }, + { + "name": "NLnetLabs/unbound", + "version": "release-1.23.1", + "date": "2025-07-16T09:20:27Z" + }, + { + "name": "sbondCo/Watcharr", + "version": "v2.1.1", + "date": "2025-07-15T22:38:01Z" + }, + { + "name": "netbox-community/netbox", + "version": "v4.3.4", + "date": "2025-07-15T18:01:50Z" + }, + { + "name": "gethomepage/homepage", + "version": "v1.4.0", + "date": "2025-07-15T16:43:28Z" + }, + { + "name": "zitadel/zitadel", + "version": "v2.70.14", + "date": "2025-07-15T15:27:51Z" + }, + { + "name": "WordPress/WordPress", + "version": "6.8.2", + "date": "2025-07-15T15:14:16Z" + }, + { + "name": "jenkinsci/jenkins", + "version": "jenkins-2.519", + "date": "2025-07-15T14:43:59Z" + }, + { + "name": "element-hq/synapse", + "version": "v1.134.0", + "date": "2025-07-15T13:43:39Z" + }, + { + "name": "zabbix/zabbix", + "version": "7.2.11rc1", + "date": "2025-07-15T11:47:53Z" + }, + { + "name": "dgtlmoon/changedetection.io", + "version": "0.50.7", + "date": "2025-07-15T11:29:29Z" + }, + { + "name": "gotson/komga", + "version": "1.22.1", + "date": "2025-07-15T06:44:29Z" + }, + { + "name": "go-gitea/gitea", + "version": "v1.24.3", + "date": "2025-07-15T04:56:24Z" + }, + { + "name": "pi-hole/pi-hole", + "version": "v6.1.4", + "date": "2025-07-14T21:22:17Z" + }, + { + "name": "postgres/postgres", + "version": "REL_18_BETA2", + "date": "2025-07-14T20:12:49Z" + }, + { + "name": "ipfs/kubo", + "version": "v0.36.0", + "date": "2025-07-14T18:59:57Z" + }, + { + "name": "prometheus/prometheus", + "version": "v3.5.0", + "date": "2025-07-14T16:54:21Z" + }, + { + "name": "home-assistant/core", + "version": "2025.7.2", + "date": "2025-07-14T11:29:58Z" + }, + { + "name": "homebridge/homebridge", + "version": "v1.11.0", + "date": "2025-07-13T19:22:47Z" + }, + { + "name": "mayswind/AriaNg", + "version": "1.3.11", + "date": "2025-07-13T13:33:48Z" + }, + { + "name": "evcc-io/evcc", + "version": "0.205.0", + "date": "2025-07-13T12:27:31Z" + }, + { + "name": "authelia/authelia", + "version": "v4.39.5", + "date": "2025-07-13T06:12:47Z" + }, + { + "name": "henrygd/beszel", + "version": "v0.11.1", + "date": "2025-04-29T01:14:35Z" + }, + { + "name": "Ombi-app/Ombi", + "version": "v4.47.1", + "date": "2025-01-05T21:14:23Z" + }, + { + "name": "jellyfin/jellyfin", + "version": "v10.10.7", + "date": "2025-04-05T19:14:59Z" + }, + { + "name": "blakeblackshear/frigate", + "version": "v0.14.1", + "date": "2024-08-29T22:32:51Z" + }, + { + "name": "leiweibau/Pi.Alert", + "version": "v2025-07-12", + "date": "2025-07-12T07:53:52Z" + }, + { + "name": "eclipse-mosquitto/mosquitto", + "version": "v2.0.22", + "date": "2025-07-11T21:34:20Z" + }, + { + "name": "neo4j/neo4j", + "version": "2025.06.2", + "date": "2025-07-11T18:03:51Z" }, { "name": "FlowiseAI/Flowise", @@ -54,21 +424,6 @@ "version": "v10.9.0", "date": "2025-07-11T12:57:54Z" }, - { - "name": "zitadel/zitadel", - "version": "v3.3.1", - "date": "2025-07-11T11:51:48Z" - }, - { - "name": "prometheus/prometheus", - "version": "v2.53.5", - "date": "2025-06-30T11:01:12Z" - }, - { - "name": "Paymenter/Paymenter", - "version": "v1.2.2", - "date": "2025-07-11T10:09:47Z" - }, { "name": "traefik/traefik", "version": "v3.4.4", @@ -79,31 +434,11 @@ "version": "preview-v0.1", "date": "2025-06-27T14:35:47Z" }, - { - "name": "Jackett/Jackett", - "version": "v0.22.2145", - "date": "2025-07-11T05:49:32Z" - }, - { - "name": "documenso/documenso", - "version": "v1.12.2-rc.1", - "date": "2025-07-11T02:55:56Z" - }, { "name": "outline/outline", "version": "v0.85.1", "date": "2025-07-11T01:17:53Z" }, - { - "name": "jenkinsci/jenkins", - "version": "jenkins-2.518", - "date": "2025-07-08T13:52:55Z" - }, - { - "name": "rcourtman/Pulse", - "version": "v3.41.1", - "date": "2025-07-10T17:10:46Z" - }, { "name": "LibreTranslate/LibreTranslate", "version": "v1.7.2", @@ -114,46 +449,11 @@ "version": "v2.13.0", "date": "2025-07-10T19:27:54Z" }, - { - "name": "ollama/ollama", - "version": "v0.9.6", - "date": "2025-07-08T01:26:29Z" - }, - { - "name": "keycloak/keycloak", - "version": "26.3.1", - "date": "2025-07-09T15:41:43Z" - }, - { - "name": "msgbyte/tianji", - "version": "v1.23.4", - "date": "2025-07-10T18:13:38Z" - }, - { - "name": "forgejo/forgejo", - "version": "v11.0.3", - "date": "2025-07-10T13:12:00Z" - }, { "name": "crowdsecurity/crowdsec", "version": "v1.6.10", "date": "2025-07-10T12:04:30Z" }, - { - "name": "neo4j/neo4j", - "version": "5.26.9", - "date": "2025-07-10T10:04:29Z" - }, - { - "name": "meilisearch/meilisearch", - "version": "prototype-incremental-vector-store-3", - "date": "2025-07-07T10:27:19Z" - }, - { - "name": "firefly-iii/firefly-iii", - "version": "v6.2.20", - "date": "2025-07-02T04:03:37Z" - }, { "name": "pocket-id/pocket-id", "version": "v1.6.2", @@ -199,36 +499,16 @@ "version": "16.0", "date": "2025-07-09T13:28:43Z" }, - { - "name": "element-hq/synapse", - "version": "v1.133.0", - "date": "2025-07-01T15:13:42Z" - }, { "name": "AdguardTeam/AdGuardHome", "version": "v0.107.63", "date": "2025-06-26T14:34:19Z" }, - { - "name": "fuma-nama/fumadocs", - "version": "fumadocs-ui@15.6.3", - "date": "2025-07-09T09:28:42Z" - }, { "name": "cockpit-project/cockpit", "version": "342", "date": "2025-07-09T08:48:21Z" }, - { - "name": "esphome/esphome", - "version": "2025.6.3", - "date": "2025-07-03T01:07:26Z" - }, - { - "name": "henrygd/beszel", - "version": "v0.11.1", - "date": "2025-04-29T01:14:35Z" - }, { "name": "Prowlarr/Prowlarr", "version": "v1.37.0.5076", @@ -239,11 +519,6 @@ "version": "v5.26.2.10099", "date": "2025-06-11T20:10:39Z" }, - { - "name": "ipfs/kubo", - "version": "v0.35.0", - "date": "2025-05-21T18:00:32Z" - }, { "name": "grokability/snipe-it", "version": "v8.1.18", @@ -259,26 +534,11 @@ "version": "v5.20.0", "date": "2025-07-08T16:27:11Z" }, - { - "name": "bunkerity/bunkerweb", - "version": "v1.6.2", - "date": "2025-07-08T13:52:33Z" - }, - { - "name": "wazuh/wazuh", - "version": "coverity-w28-4.13.0", - "date": "2025-07-08T11:25:24Z" - }, { "name": "docker/compose", "version": "v2.38.2", "date": "2025-07-08T09:35:14Z" }, - { - "name": "Checkmk/checkmk", - "version": "v2.4.0p7", - "date": "2025-07-08T05:51:08Z" - }, { "name": "VictoriaMetrics/VictoriaMetrics", "version": "pmm-6401-v1.121.0", @@ -304,31 +564,11 @@ "version": "v25.2", "date": "2025-07-04T08:21:42Z" }, - { - "name": "morpheus65535/bazarr", - "version": "v1.5.2", - "date": "2025-05-11T16:40:55Z" - }, { "name": "slskd/slskd", "version": "0.23.1", "date": "2025-07-06T23:57:52Z" }, - { - "name": "pelican-dev/panel", - "version": "v1.0.0-beta22", - "date": "2025-07-06T21:16:00Z" - }, - { - "name": "pelican-dev/wings", - "version": "v1.0.0-beta14", - "date": "2025-07-06T21:07:07Z" - }, - { - "name": "Luligu/matterbridge", - "version": "3.1.2", - "date": "2025-07-06T20:55:23Z" - }, { "name": "bluenviron/mediamtx", "version": "v1.13.0", @@ -349,11 +589,6 @@ "version": "8.0.3", "date": "2025-07-06T12:19:24Z" }, - { - "name": "fallenbagel/jellyseerr", - "version": "preview-OIDC", - "date": "2025-07-06T00:51:06Z" - }, { "name": "hyperion-project/hyperion.ng", "version": "2.1.1", @@ -364,36 +599,11 @@ "version": "v0.8.7", "date": "2025-07-05T20:08:58Z" }, - { - "name": "cross-seed/cross-seed", - "version": "v6.12.7", - "date": "2025-06-18T03:44:24Z" - }, { "name": "runtipi/runtipi", "version": "v4.3.0", "date": "2025-07-05T12:14:52Z" }, - { - "name": "theonedev/onedev", - "version": "v11.11.4", - "date": "2025-07-05T09:23:25Z" - }, - { - "name": "linkwarden/linkwarden", - "version": "v2.11.3", - "date": "2025-07-05T04:34:46Z" - }, - { - "name": "home-assistant/core", - "version": "2025.7.1", - "date": "2025-07-04T20:02:52Z" - }, - { - "name": "emqx/emqx", - "version": "e6.0.0-M1.202507-alpha.1", - "date": "2025-07-04T14:58:23Z" - }, { "name": "kimai/kimai", "version": "2.37.0", @@ -419,11 +629,6 @@ "version": "v3.2.1", "date": "2025-07-03T16:09:19Z" }, - { - "name": "Dolibarr/dolibarr", - "version": "18.0.7", - "date": "2025-07-03T08:57:21Z" - }, { "name": "actualbudget/actual", "version": "v25.7.1", @@ -434,11 +639,6 @@ "version": "2.5.1", "date": "2025-07-02T19:38:06Z" }, - { - "name": "glpi-project/glpi", - "version": "10.0.18", - "date": "2025-02-12T11:07:02Z" - }, { "name": "apache/tomcat", "version": "9.0.107", @@ -479,11 +679,6 @@ "version": "v0.57.0", "date": "2025-07-01T16:47:46Z" }, - { - "name": "zabbix/zabbix", - "version": "7.4.0", - "date": "2025-07-01T04:36:51Z" - }, { "name": "openobserve/openobserve", "version": "v0.15.0-rc3", @@ -494,11 +689,6 @@ "version": "v2.32.0", "date": "2025-06-30T22:12:48Z" }, - { - "name": "jhuckaby/Cronicle", - "version": "v0.9.81", - "date": "2025-06-30T16:40:33Z" - }, { "name": "jupyter/notebook", "version": "v7.4.4", @@ -514,31 +704,11 @@ "version": "v29.0", "date": "2025-06-30T03:52:33Z" }, - { - "name": "dgtlmoon/changedetection.io", - "version": "0.50.5", - "date": "2025-06-29T08:54:47Z" - }, - { - "name": "plexguide/Huntarr.io", - "version": "8.1.11", - "date": "2025-06-28T03:42:46Z" - }, - { - "name": "tobychui/zoraxy", - "version": "v3.2.4", - "date": "2025-06-28T02:47:31Z" - }, { "name": "goauthentik/authentik", "version": "version/2025.6.3", "date": "2025-06-27T14:01:06Z" }, - { - "name": "netbox-community/netbox", - "version": "v4.3.3", - "date": "2025-06-26T18:42:56Z" - }, { "name": "tailscale/tailscale", "version": "v1.84.3", @@ -554,26 +724,11 @@ "version": "v1.6.1", "date": "2025-06-25T21:19:25Z" }, - { - "name": "coder/code-server", - "version": "v4.101.2", - "date": "2025-06-25T21:18:52Z" - }, - { - "name": "wavelog/wavelog", - "version": "2.0.5", - "date": "2025-06-25T14:53:31Z" - }, { "name": "moghtech/komodo", "version": "v1.18.4", "date": "2025-06-25T00:06:56Z" }, - { - "name": "evcc-io/evcc", - "version": "0.204.5", - "date": "2025-06-24T19:17:16Z" - }, { "name": "ErsatzTV/ErsatzTV", "version": "v25.2.0", @@ -584,21 +739,6 @@ "version": "v2.18.0", "date": "2025-06-24T08:29:55Z" }, - { - "name": "minio/minio", - "version": "RELEASE.2025-06-13T11-33-47Z", - "date": "2025-06-23T20:58:42Z" - }, - { - "name": "gotson/komga", - "version": "1.22.0", - "date": "2025-06-23T03:11:37Z" - }, - { - "name": "OliveTin/OliveTin", - "version": "2025.6.22", - "date": "2025-06-22T22:41:11Z" - }, { "name": "clusterzx/paperless-ai", "version": "v3.0.7", @@ -614,16 +754,6 @@ "version": "v2.0.114", "date": "2025-06-21T11:20:21Z" }, - { - "name": "pocketbase/pocketbase", - "version": "v0.28.4", - "date": "2025-06-21T08:29:04Z" - }, - { - "name": "go-gitea/gitea", - "version": "v1.24.2", - "date": "2025-06-20T20:37:55Z" - }, { "name": "immich-app/immich", "version": "v1.135.3", @@ -644,11 +774,6 @@ "version": "v2.17.1", "date": "2025-06-19T19:35:01Z" }, - { - "name": "icereed/paperless-gpt", - "version": "v0.21.0", - "date": "2025-06-19T11:54:59Z" - }, { "name": "prometheus-pve/prometheus-pve-exporter", "version": "v3.5.5", @@ -669,11 +794,6 @@ "version": "v3.12.7", "date": "2025-06-18T14:22:53Z" }, - { - "name": "openhab/openhab-core", - "version": "5.0.0.M3", - "date": "2025-06-18T14:18:12Z" - }, { "name": "Bubka/2FAuth", "version": "v5.6.0", @@ -684,11 +804,6 @@ "version": "2.0.0-pre3", "date": "2025-06-18T08:01:24Z" }, - { - "name": "grafana/grafana", - "version": "v11.5.6", - "date": "2025-06-17T22:00:40Z" - }, { "name": "project-zot/zot", "version": "v2.1.5", @@ -704,16 +819,6 @@ "version": "2.402", "date": "2025-06-17T05:20:42Z" }, - { - "name": "open-webui/open-webui", - "version": "v0.6.15", - "date": "2025-06-16T14:34:42Z" - }, - { - "name": "jellyfin/jellyfin", - "version": "v10.10.7", - "date": "2025-04-05T19:14:59Z" - }, { "name": "crafty-controller/crafty-4", "version": "v4.4.11", @@ -724,11 +829,6 @@ "version": "v0.95.0", "date": "2025-06-15T21:12:04Z" }, - { - "name": "karakeep-app/karakeep", - "version": "cli/v0.25.0", - "date": "2025-06-15T17:48:29Z" - }, { "name": "Readarr/Readarr", "version": "v2.0.0.4645", @@ -739,26 +839,11 @@ "version": "v2.12.4.4658", "date": "2025-06-09T17:27:45Z" }, - { - "name": "advplyr/audiobookshelf", - "version": "v2.25.1", - "date": "2025-06-14T23:32:15Z" - }, - { - "name": "semaphoreui/semaphore", - "version": "v2.15.0", - "date": "2025-06-14T10:48:57Z" - }, { "name": "FlareSolverr/FlareSolverr", "version": "v3.3.25", "date": "2025-06-14T02:52:44Z" }, - { - "name": "leiweibau/Pi.Alert", - "version": "v2025-06-12", - "date": "2025-06-12T20:59:47Z" - }, { "name": "autobrr/autobrr", "version": "v1.63.1", @@ -774,16 +859,6 @@ "version": "v0.8.4", "date": "2025-06-10T07:57:14Z" }, - { - "name": "Brandawg93/PeaNUT", - "version": "v5.8.0", - "date": "2025-06-09T16:08:33Z" - }, - { - "name": "ellite/Wallos", - "version": "v3.3.0", - "date": "2025-06-09T15:58:04Z" - }, { "name": "seanmorley15/AdventureLog", "version": "v0.10.0", @@ -804,11 +879,6 @@ "version": "v1.5.8", "date": "2025-06-07T11:39:10Z" }, - { - "name": "homebridge/homebridge", - "version": "v1.10.0", - "date": "2025-06-07T08:31:48Z" - }, { "name": "ioBroker/ioBroker", "version": "2025-05-31", @@ -819,16 +889,6 @@ "version": "v0.26.1", "date": "2025-06-06T11:22:02Z" }, - { - "name": "benjaminjonard/koillection", - "version": "1.6.14", - "date": "2025-06-05T16:40:52Z" - }, - { - "name": "pi-hole/pi-hole", - "version": "v6.1.2", - "date": "2025-06-05T11:32:45Z" - }, { "name": "MariaDB/server", "version": "mariadb-11.8.2", @@ -854,21 +914,6 @@ "version": "1.26.3", "date": "2025-06-02T22:00:14Z" }, - { - "name": "usememos/memos", - "version": "v0.24.4", - "date": "2025-06-02T02:49:05Z" - }, - { - "name": "gethomepage/homepage", - "version": "v1.3.2", - "date": "2025-06-01T19:02:46Z" - }, - { - "name": "blakeblackshear/frigate", - "version": "v0.14.1", - "date": "2024-08-29T22:32:51Z" - }, { "name": "release-argus/Argus", "version": "0.26.3", @@ -904,11 +949,6 @@ "version": "v3.5.4", "date": "2025-05-25T06:53:34Z" }, - { - "name": "authelia/authelia", - "version": "v4.39.4", - "date": "2025-05-25T02:27:28Z" - }, { "name": "0xERR0R/blocky", "version": "v0.26.2", @@ -919,11 +959,6 @@ "version": "0.5", "date": "2025-05-21T20:19:14Z" }, - { - "name": "sbondCo/Watcharr", - "version": "v2.1.0", - "date": "2025-05-18T18:20:43Z" - }, { "name": "YunoHost/yunohost", "version": "debian/12.1.6.1", @@ -974,31 +1009,16 @@ "version": "v1.8.1", "date": "2025-05-06T04:27:00Z" }, - { - "name": "postgres/postgres", - "version": "REL_13_21", - "date": "2025-05-05T20:34:49Z" - }, { "name": "apache/couchdb", "version": "3.5.0", "date": "2025-05-05T16:28:24Z" }, - { - "name": "WordPress/WordPress", - "version": "6.8.1", - "date": "2025-04-30T16:44:16Z" - }, { "name": "deluge-torrent/deluge", "version": "deluge-2.2.0", "date": "2025-04-28T21:31:06Z" }, - { - "name": "oauth2-proxy/oauth2-proxy", - "version": "v7.9.0", - "date": "2025-04-28T16:28:42Z" - }, { "name": "gotify/server", "version": "v2.6.3", @@ -1014,11 +1034,6 @@ "version": "v1.4.0", "date": "2025-04-24T16:20:17Z" }, - { - "name": "NLnetLabs/unbound", - "version": "release-1.23.0", - "date": "2025-04-24T08:07:21Z" - }, { "name": "monicahq/monica", "version": "v4.1.2", @@ -1199,16 +1214,6 @@ "version": "v7.4.1", "date": "2025-02-15T20:54:00Z" }, - { - "name": "mayswind/AriaNg", - "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": "actualbudget/actual-server", "version": "v25.2.1", @@ -1284,11 +1289,6 @@ "version": "v0.4.4", "date": "2024-11-05T23:06:11Z" }, - { - "name": "linuxserver/Heimdall", - "version": "v2.6.3", - "date": "2024-11-05T11:00:43Z" - }, { "name": "zerotier/ZeroTierOne", "version": "1.14.2", diff --git a/install/2fauth-install.sh b/install/2fauth-install.sh index 9133143c2..0a929d9f7 100644 --- a/install/2fauth-install.sh +++ b/install/2fauth-install.sh @@ -19,7 +19,7 @@ $STD apt-get install -y \ nginx msg_ok "Installed Dependencies" -PHP_VERSION="8.3" PHP_MODULE="common,ctype,fileinfo,fpm,mysql,cli" setup_php +PHP_VERSION="8.3" PHP_MODULE="common,ctype,fileinfo,mysql,cli" PHP_FPM="YES" setup_php setup_composer setup_mariadb diff --git a/install/bar-assistant-install.sh b/install/bar-assistant-install.sh new file mode 100644 index 000000000..67901a96a --- /dev/null +++ b/install/bar-assistant-install.sh @@ -0,0 +1,197 @@ +#!/usr/bin/env bash + +# Copyright (c) 2021-2025 community-scripts ORG +# Author: bvdberg01 | CanbiZ +# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE +# Source: https://github.com/karlomikus/bar-assistant +# Source: https://github.com/karlomikus/vue-salt-rim +# 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 \ + redis-server \ + nginx \ + lsb-release \ + libvips +#php-{ffi,opcache,redis,zip,pdo-sqlite,bcmath,pdo,curl,dom,fpm} +msg_ok "Installed Dependencies" + +PHP_VERSION="8.3" PHP_FPM=YES PHP_MODULE="ffi,opcache,redis,zip,pdo-sqlite,bcmath,pdo,curl,dom,fpm" setup_php +setup_composer +NODE_VERSION="22" setup_nodejs +fetch_and_deploy_gh_release "meilisearch" "meilisearch/meilisearch" "binary" +fetch_and_deploy_gh_release "bar-assistant" "karlomikus/bar-assistant" "tarball" "latest" "/opt/bar-assistant" +fetch_and_deploy_gh_release "vue-salt-rim" "karlomikus/vue-salt-rim" "tarball" "latest" "/opt/vue-salt-rim" + +msg_info "Configuring PHP" +PHPVER=$(php -r 'echo PHP_MAJOR_VERSION . "." . PHP_MINOR_VERSION . "\n";') +sed -i.bak -E 's/^\s*;?\s*ffi\.enable\s*=.*/ffi.enable=true/' /etc/php/${PHPVER}/fpm/php.ini +$STD systemctl reload php${PHPVER}-fpm +msg_info "configured PHP" + +msg_info "Configure MeiliSearch" +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"|' \ + -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 = "127.0.0.1:7700"|' \ + /etc/meilisearch.toml +msg_ok "Configured MeiliSearch" + +msg_info "Creating MeiliSearch service" +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 +sleep 5 +msg_ok "Created Service MeiliSearch" + +msg_info "Installing Bar Assistant" +cd /opt/bar-assistant +cp /opt/bar-assistant/.env.dist /opt/bar-assistant/.env +mkdir -p /opt/bar-assistant/resources/data +curl -fsSL https://github.com/bar-assistant/data/archive/refs/heads/v5.tar.gz | tar -xz --strip-components=1 -C /opt/bar-assistant/resources/data +MeiliSearch_API_KEY=$(curl -s -X GET 'http://127.0.0.1:7700/keys' -H "Authorization: Bearer $MASTER_KEY" | grep -o '"key":"[^"]*"' | head -n 1 | sed 's/"key":"//;s/"//') +MeiliSearch_API_KEY_UID=$(curl -s -X GET 'http://127.0.0.1:7700/keys' -H "Authorization: Bearer $MASTER_KEY" | grep -o '"uid":"[^"]*"' | head -n 1 | sed 's/"uid":"//;s/"//') +LOCAL_IP=$(hostname -I | awk '{print $1}') +sed -i -e "s|^APP_URL=|APP_URL=http://${LOCAL_IP}/bar/|" \ + -e "s|^MEILISEARCH_HOST=|MEILISEARCH_HOST=http://127.0.0.1:7700|" \ + -e "s|^MEILISEARCH_KEY=|MEILISEARCH_KEY=${MASTER_KEY}|" \ + -e "s|^MEILISEARCH_API_KEY=|MEILISEARCH_API_KEY=${MeiliSearch_API_KEY}|" \ + -e "s|^MEILISEARCH_API_KEY_UID=|MEILISEARCH_API_KEY_UID=${MeiliSearch_API_KEY_UID}|" \ + /opt/bar-assistant/.env +$STD composer install --no-interaction +$STD php artisan key:generate +touch storage/bar-assistant/database.ba3.sqlite +$STD php artisan migrate --force +$STD php artisan storage:link +$STD php artisan bar:setup-meilisearch +$STD php artisan scout:sync-index-settings +$STD php artisan config:cache +$STD php artisan route:cache +$STD php artisan event:cache +mkdir /opt/bar-assistant/storage/bar-assistant/uploads/temp +chown -R www-data:www-data /opt/bar-assistant +msg_ok "Installed Bar Assistant" + +msg_info "Installing Salt Rim" +cd /opt/vue-salt-rim +cat </opt/vue-salt-rim/public/config.js +window.srConfig = {} +window.srConfig.API_URL = "http://${LOCAL_IP}/bar" +window.srConfig.MEILISEARCH_URL = "http://${LOCAL_IP}/search" +EOF +$STD npm install +$STD npm run build +msg_ok "Installed Salt Rim" + +msg_info "Creating Service" +cat </etc/nginx/sites-available/barassistant.conf +server { + listen 80 default_server; + listen [::]:80 default_server; + server_name _; + + location = /favicon.ico { access_log off; log_not_found off; } + location = /robots.txt { access_log off; log_not_found off; } + + client_max_body_size 100M; + + location /bar/ { + proxy_pass http://127.0.0.1:8080/; + proxy_set_header Host \$host; + proxy_set_header X-Real-IP \$remote_addr; + proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto \$scheme; + } + + location /search/ { + proxy_pass http://127.0.0.1:7700/; + } + + location / { + proxy_pass http://127.0.0.1:8081/; + proxy_set_header Host \$host; + proxy_set_header X-Real-IP \$remote_addr; + proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto \$scheme; + } +} + +server { + listen 127.0.0.1:8080; + server_name example.com; + root /opt/bar-assistant/public; + + add_header X-Frame-Options "SAMEORIGIN"; + add_header X-Content-Type-Options "nosniff"; + + index index.php; + charset utf-8; + + location / { + try_files \$uri \$uri/ /index.php?\$query_string; + } + + location = /favicon.ico { access_log off; log_not_found off; } + location = /robots.txt { access_log off; log_not_found off; } + + error_page 404 /index.php; + + location ~ ^/index\.php(/|$) { + fastcgi_pass unix:/var/run/php/php$PHPVER-fpm.sock; + fastcgi_param SCRIPT_FILENAME \$realpath_root\$fastcgi_script_name; + include fastcgi_params; + fastcgi_hide_header X-Powered-By; + } + + location ~ /\.(?!well-known).* { + deny all; + } +} + +server { + listen 127.0.0.1:8081; + server_name _; + root /opt/vue-salt-rim/dist; + + location / { + try_files \$uri \$uri/ /index.html; + } +} +EOF + +ln -s /etc/nginx/sites-available/barassistant.conf /etc/nginx/sites-enabled/ +rm -f /etc/nginx/sites-enabled/default +$STD systemctl reload nginx +msg_ok "Created Service" + +motd_ssh +customize + +msg_info "Cleaning up" +$STD apt-get -y autoremove +$STD apt-get -y autoclean +msg_ok "Cleaned" diff --git a/install/checkmk-install.sh b/install/checkmk-install.sh index 592546e0e..869384ff1 100644 --- a/install/checkmk-install.sh +++ b/install/checkmk-install.sh @@ -24,13 +24,20 @@ motd_ssh customize msg_info "Creating Service" -PASSWORD=$(omd create monitoring | grep "password:" | awk '{print $NF}') -$STD omd start +SITE_NAME="monitoring" +$STD omd create "$SITE_NAME" +MKPASSWORD=$(openssl rand -base64 18 | tr -d '/+=' | cut -c1-16) + +echo -e "$MKPASSWORD\n$MKPASSWORD" | su - "$SITE_NAME" -c "cmk-passwd cmkadmin --stdin" +$STD omd start "$SITE_NAME" + { - echo "Application-Credentials" - echo "Username: cmkadmin" - echo "Password: $PASSWORD" + echo "Application-Credentials" + echo "Username: cmkadmin" + echo "Password: $MKPASSWORD" + echo "Site: $SITE_NAME" } >>~/checkmk.creds + msg_ok "Created Service" msg_info "Cleaning up" diff --git a/install/cloudreve-install.sh b/install/cloudreve-install.sh new file mode 100644 index 000000000..74aa8f2bc --- /dev/null +++ b/install/cloudreve-install.sh @@ -0,0 +1,43 @@ +#!/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://cloudreve.org/ + +source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" +color +verb_ip6 +catch_errors +setting_up_container +network_check +update_os + +fetch_and_deploy_gh_release "cloudreve" "cloudreve/cloudreve" "prebuild" "latest" "/opt/cloudreve" "*linux_amd64.tar.gz" + +msg_info "Setup Service" +cat </etc/systemd/system/cloudreve.service +[Unit] +Description=Cloudreve Service +After=network.target + +[Service] +Type=simple +ExecStart=/opt/cloudreve/cloudreve +Restart=on-failure +RestartSec=5 + +[Install] +WantedBy=multi-user.target +EOF + +systemctl enable -q --now cloudreve +msg_ok "Service Setup" + +motd_ssh +customize + +msg_info "Cleaning up" +$STD apt-get -y autoremove +$STD apt-get -y autoclean +msg_ok "Cleaned" diff --git a/install/dashy-install.sh b/install/dashy-install.sh index e72493135..145a341c1 100644 --- a/install/dashy-install.sh +++ b/install/dashy-install.sh @@ -16,11 +16,11 @@ update_os NODE_VERSION="22" setup_nodejs fetch_and_deploy_gh_release "dashy" "Lissy93/dashy" -msg_info "Installing Dashy ${RELEASE} (Patience)" +msg_info "Installing Dashy" cd /opt/dashy $STD npm install $STD npm run build -msg_ok "Installed Dashy ${RELEASE}" +msg_ok "Installed Dashy" msg_info "Creating Service" cat </etc/systemd/system/dashy.service diff --git a/install/ersatztv-install.sh b/install/ersatztv-install.sh index cbf427e84..fad2499f1 100644 --- a/install/ersatztv-install.sh +++ b/install/ersatztv-install.sh @@ -13,8 +13,6 @@ setting_up_container network_check update_os -FFMPEG_VERSION="latest" FFMPEG_TYPE="medium" setup_ffmpeg - msg_info "Setting Up Hardware Acceleration" $STD apt-get -y install {va-driver-all,ocl-icd-libopencl1,intel-opencl-icd,vainfo,intel-gpu-tools} if [[ "$CTTYPE" == "0" ]]; then @@ -27,6 +25,14 @@ fi msg_ok "Set Up Hardware Acceleration" fetch_and_deploy_gh_release "ersatztv" "ErsatzTV/ErsatzTV" "prebuild" "latest" "/opt/ErsatzTV" "*linux-arm64.tar.gz" +fetch_and_deploy_gh_release "ersatztv-ffmpeg" "ErsatzTV/ErsatzTV-ffmpeg" "prebuild" "latest" "/opt/ErsatzTV-ffmpeg" "*-linuxarm64-gpl-7.1.tar.xz" + +msg_info "Set ErsatzTV-ffmpeg links" +chmod +x /opt/ErsatzTV-ffmpeg/bin/* +ln -sf /opt/ErsatzTV-ffmpeg/bin/ffmpeg /usr/local/bin/ffmpeg +ln -sf /opt/ErsatzTV-ffmpeg/bin/ffplay /usr/local/bin/ffplay +ln -sf /opt/ErsatzTV-ffmpeg/bin/ffprobe /usr/local/bin/ffprobe +msg_ok "ffmpeg links set" msg_info "Creating Service" cat </etc/systemd/system/ersatzTV.service diff --git a/install/karakeep-install.sh b/install/karakeep-install.sh index 49c21da9b..3f715a3d1 100644 --- a/install/karakeep-install.sh +++ b/install/karakeep-install.sh @@ -22,7 +22,8 @@ $STD apt-get install -y \ chromium/stable \ chromium-common/stable \ graphicsmagick \ - ghostscript + ghostscript \ + jq msg_ok "Installed Dependencies" msg_info "Installing Additional Tools" @@ -48,18 +49,14 @@ sed -i \ /etc/meilisearch.toml msg_ok "Installed Meilisearch" -NODE_VERSION="22" NODE_MODULE="yarn@latest" setup_nodejs -$STD npm install -g corepack@0.31.0 +fetch_and_deploy_gh_release "karakeep" "karakeep-app/karakeep" +cd /opt/karakeep +MODULE_VERSION="$(jq -r '.packageManager | split("@")[1]' /opt/karakeep/package.json)" +NODE_VERSION="22" NODE_MODULE="pnpm@${MODULE_VERSION}" setup_nodejs msg_info "Installing karakeep" -cd /opt -RELEASE=$(curl -fsSL https://api.github.com/repos/karakeep-app/karakeep/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') -curl -fsSL "https://github.com/karakeep-app/karakeep/archive/refs/tags/v${RELEASE}.zip" -o "v${RELEASE}.zip" -$STD unzip "v${RELEASE}.zip" -mv karakeep-"${RELEASE}" /opt/karakeep -cd /opt/karakeep -corepack enable export PUPPETEER_SKIP_DOWNLOAD="true" +export PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD="true" export NEXT_TELEMETRY_DISABLED=1 export CI="true" cd /opt/karakeep/apps/web @@ -70,21 +67,20 @@ $STD pnpm install --frozen-lockfile cd /opt/karakeep/apps/cli $STD pnpm install --frozen-lockfile $STD pnpm build -cd /opt/karakeep/apps/mcp -$STD pnpm install --frozen-lockfile -$STD pnpm build +$STD pnpm store prune 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 +SERVER_VERSION="$(cat ~/.karakeep)" NEXTAUTH_SECRET="$karakeep_SECRET" NEXTAUTH_URL="http://localhost:3000" DATA_DIR="$DATA_DIR" MEILI_ADDR="http://127.0.0.1:7700" MEILI_MASTER_KEY="$MASTER_KEY" BROWSER_WEB_URL="http://127.0.0.1:9222" +DB_WAL_MODE=true # If you're planning to use OpenAI for tagging. Uncomment the following line: # OPENAI_API_KEY="" @@ -112,7 +108,6 @@ BROWSER_WEB_URL="http://127.0.0.1:9222" # CRAWLER_VIDEO_DOWNLOAD_MAX_SIZE="50" # CRAWLER_ENABLE_ADBLOCKER=true EOF -echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt" msg_ok "Installed karakeep" msg_info "Running Database Migration" @@ -190,7 +185,6 @@ customize msg_info "Cleaning up" rm -rf /tmp/meilisearch-aarch64.deb -rm -f /opt/v"${RELEASE}".zip $STD apt-get autoremove -y $STD apt-get autoclean -y msg_ok "Cleaned" diff --git a/install/mealie-install.sh b/install/mealie-install.sh new file mode 100644 index 000000000..a3c4b9068 --- /dev/null +++ b/install/mealie-install.sh @@ -0,0 +1,148 @@ +#!/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://mealie.io + +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 \ + build-essential \ + libpq-dev \ + libwebp-dev \ + libsasl2-dev \ + libldap2-dev \ + libssl-dev +msg_ok "Installed Dependencies" + +PYTHON_VERSION="3.12" setup_uv +POSTGRES_VERSION="16" setup_postgresql +NODE_MODULE="yarn" NODE_VERSION="20" setup_nodejs + +fetch_and_deploy_gh_release "mealie" "mealie-recipes/mealie" "tarball" "latest" "/opt/mealie" + +msg_info "Setup Database" +DB_NAME=mealie_db +DB_USER=mealie__user +DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | cut -c1-13) +$STD sudo -u postgres psql -c "CREATE ROLE $DB_USER WITH LOGIN PASSWORD '$DB_PASS';" +$STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME WITH OWNER $DB_USER ENCODING 'UTF8' TEMPLATE template0;" +$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET client_encoding TO 'utf8';" +$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET default_transaction_isolation TO 'read committed';" +$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET timezone TO 'UTC'" +$STD sudo -u postgres psql -c "ALTER USER $DB_USER WITH SUPERUSER;" +{ + echo "Mealie-Credentials" + echo "Mealie Database User: $DB_USER" + echo "Mealie Database Password: $DB_PASS" + echo "Mealie Database Name: $DB_NAME" +} >>~/mealie.creds +msg_ok "Set up Database" + +msg_info "Building Frontend" +export NUXT_TELEMETRY_DISABLED=1 +cd /opt/mealie/frontend +$STD yarn install --prefer-offline --frozen-lockfile --non-interactive --production=false --network-timeout 1000000 +$STD yarn generate +msg_ok "Built Frontend" + +msg_info "Copying Built Frontend into Backend Package" +cp -r /opt/mealie/frontend/dist /opt/mealie/mealie/frontend +msg_ok "Copied Frontend" + +msg_info "Preparing Backend (Poetry)" +$STD uv venv /opt/mealie/.venv +$STD /opt/mealie/.venv/bin/python -m ensurepip --upgrade +$STD /opt/mealie/.venv/bin/python -m pip install --upgrade pip +$STD /opt/mealie/.venv/bin/pip install uv +cd /opt/mealie +$STD /opt/mealie/.venv/bin/uv pip install poetry==2.0.1 +$STD /opt/mealie/.venv/bin/poetry self add "poetry-plugin-export>=1.9" +msg_ok "Prepared Poetry" + +msg_info "Writing Environment File" +cat </opt/mealie/mealie.env +HOST=0.0.0.0 +PORT=9000 +DB_ENGINE=postgres +POSTGRES_SERVER=localhost +POSTGRES_PORT=5432 +POSTGRES_USER=${DB_USER} +POSTGRES_PASSWORD=${DB_PASS} +POSTGRES_DB=${DB_NAME} +NLTK_DATA=/nltk_data +PRODUCTION=true +STATIC_FILES=/opt/mealie/frontend/dist +EOF +msg_ok "Wrote Environment File" + +msg_info "Creating Start Script" +cat <<'EOF' >/opt/mealie/start.sh +#!/bin/bash +set -a +source /opt/mealie/mealie.env +set +a +exec /opt/mealie/.venv/bin/mealie +EOF +chmod +x /opt/mealie/start.sh +msg_ok "Created Start Script" + +msg_info "Building Mealie Backend Wheel" +cd /opt/mealie +$STD /opt/mealie/.venv/bin/poetry build --output dist +MEALIE_VERSION=$(/opt/mealie/.venv/bin/poetry version --short) +$STD /opt/mealie/.venv/bin/poetry export --only=main --extras=pgsql --output=dist/requirements.txt +echo "mealie[pgsql]==$MEALIE_VERSION \\" >>dist/requirements.txt +/opt/mealie/.venv/bin/poetry run pip hash dist/mealie-$MEALIE_VERSION*.whl | tail -n1 | tr -d '\n' >>dist/requirements.txt +echo " \\" >>dist/requirements.txt +/opt/mealie/.venv/bin/poetry run pip hash dist/mealie-$MEALIE_VERSION*.tar.gz | tail -n1 >>dist/requirements.txt +msg_ok "Built Wheel + Requirements" + +msg_info "Installing Mealie via uv" +cd /opt/mealie +$STD /opt/mealie/.venv/bin/uv pip install --require-hashes -r /opt/mealie/dist/requirements.txt --find-links dist +msg_ok "Installed Mealie" + +msg_info "Downloading NLTK Data" +mkdir -p /nltk_data/ +$STD /opt/mealie/.venv/bin/python -m nltk.downloader -d /nltk_data averaged_perceptron_tagger_eng +msg_ok "Downloaded NLTK Data" + +msg_info "Set Symbolic Links for Mealie" +ln -sf /opt/mealie/.venv/bin/mealie /usr/local/bin/mealie +ln -sf /opt/mealie/.venv/bin/poetry /usr/local/bin/poetry +msg_ok "Set Symbolic Links" + +msg_info "Creating Systemd Service" +cat </etc/systemd/system/mealie.service +[Unit] +Description=Mealie Backend Server +After=network.target postgresql.service + +[Service] +User=root +WorkingDirectory=/opt/mealie +ExecStart=/opt/mealie/start.sh +Restart=always + +[Install] +WantedBy=multi-user.target +EOF +systemctl enable -q --now mealie +msg_ok "Created Service" + +motd_ssh +customize + +msg_info "Cleaning up" +$STD apt-get -y autoremove +$STD apt-get -y autoclean +msg_ok "Cleaned" diff --git a/install/openwebui-install.sh b/install/openwebui-install.sh index 75381f224..e446c66ca 100644 --- a/install/openwebui-install.sh +++ b/install/openwebui-install.sh @@ -41,7 +41,7 @@ ENV=prod ENABLE_OLLAMA_API=false OLLAMA_BASE_URL=http://0.0.0.0:11434 EOF -$STD npm install +$STD npm install --force export NODE_OPTIONS="--max-old-space-size=3584" $STD npm run build msg_ok "Installed Open WebUI" diff --git a/install/peanut-install.sh b/install/peanut-install.sh index ab0683842..7039f519a 100644 --- a/install/peanut-install.sh +++ b/install/peanut-install.sh @@ -14,22 +14,17 @@ setting_up_container network_check update_os -NODE_VERSION="22" setup_nodejs - msg_info "Installing NUT" $STD apt-get install -y nut-client msg_ok "Installed NUT" -msg_info "Installing Peanut" -RELEASE=$(curl -fsSL https://api.github.com/repos/Brandawg93/PeaNUT/releases/latest | grep '"tag_name":' | cut -d'"' -f4) -curl -fsSL "https://api.github.com/repos/Brandawg93/PeaNUT/tarball/${RELEASE}" -o "peanut.tar.gz" -mkdir -p /opt/peanut -tar -xzf peanut.tar.gz -C /opt/peanut --strip-components=1 -rm peanut.tar.gz +NODE_VERSION="22" NODE_MODULE="pnpm" setup_nodejs +fetch_and_deploy_gh_release "peanut" "Brandawg93/PeaNUT" "tarball" "latest" "/opt/peanut" + +msg_info "Setup Peanut" cd /opt/peanut -$STD npm install -g pnpm $STD pnpm i -$STD pnpm run build +$STD pnpm run build:local cp -r .next/static .next/standalone/.next/ mkdir -p /opt/peanut/.next/standalone/config mkdir -p /etc/peanut/ @@ -40,7 +35,7 @@ NUT_HOST: 0.0.0.0 NUT_PORT: 3493 EOF ln -sf /etc/peanut/settings.yml /opt/peanut/.next/standalone/config/settings.yml -msg_ok "Installed Peanut" +msg_ok "Setup Peanut" msg_info "Creating Service" cat </etc/systemd/system/peanut.service diff --git a/install/reactive-resume-install.sh b/install/reactive-resume-install.sh index 631eec8af..be97bf735 100644 --- a/install/reactive-resume-install.sh +++ b/install/reactive-resume-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2025 community-scripts ORG # Author: vhsdream # License: MIT | https://github.com/asylumexp/Proxmox/raw/main/LICENSE -# Source: https://rxresu.me +# Source: https://rxresume.org source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" color @@ -32,19 +32,16 @@ $STD sudo -u postgres psql -c "GRANT ALL PRIVILEGES ON DATABASE $DB_NAME to $DB_ $STD sudo -u postgres psql -c "ALTER USER $DB_USER WITH SUPERUSER;" msg_ok "Set up Database" -msg_info "Installing ${APPLICATION}" +msg_info "Installing $APPLICATION" MINIO_PASS=$(openssl rand -base64 48) ACCESS_TOKEN=$(openssl rand -base64 48) REFRESH_TOKEN=$(openssl rand -base64 48) CHROME_TOKEN=$(openssl rand -hex 32) LOCAL_IP=$(hostname -I | awk '{print $1}') TAG=$(curl -fsSL https://api.github.com/repos/browserless/browserless/tags?per_page=1 | grep "name" | awk '{print substr($2, 3, length($2)-4) }') -RELEASE=$(curl -fsSL https://api.github.com/repos/AmruthPillai/Reactive-Resume/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') -curl -fsSL "https://github.com/AmruthPillai/Reactive-Resume/archive/refs/tags/v${RELEASE}.zip" -o v${RELEASE}.zip -$STD unzip v${RELEASE}.zip -mv ${APPLICATION}-${RELEASE}/ /opt/${APPLICATION} -cd /opt/${APPLICATION} -corepack enable + +fetch_and_deploy_gh_release "Reactive-Resume" "lazy-media/Reactive-Resume" +cd /opt/"$APPLICATION" export CI="true" export PUPPETEER_SKIP_DOWNLOAD="true" export NODE_ENV="production" @@ -53,13 +50,13 @@ $STD pnpm install --frozen-lockfile $STD pnpm run build $STD pnpm install --prod --frozen-lockfile $STD pnpm run prisma:generate -msg_ok "Installed ${APPLICATION}" +msg_ok "Installed $APPLICATION" msg_info "Installing Browserless (Patience)" cd /tmp -curl -fsSL https://github.com/browserless/browserless/archive/refs/tags/v${TAG}.zip -o v${TAG}.zip -$STD unzip v${TAG}.zip -mv browserless-${TAG} /opt/browserless +curl -fsSL https://github.com/browserless/browserless/archive/refs/tags/v"$TAG".zip -o v"$TAG".zip +$STD unzip v"$TAG".zip +mv browserless-"$TAG" /opt/browserless cd /opt/browserless $STD npm install rm -rf src/routes/{chrome,edge,firefox,webkit} @@ -77,9 +74,10 @@ MINIO_ROOT_PASSWORD="${MINIO_PASS}" MINIO_VOLUMES=/opt/minio MINIO_OPTS="--address :9000 --console-address 127.0.0.1:9001" EOF -cat </opt/${APPLICATION}/.env +cat </opt/"$APPLICATION"/.env NODE_ENV=production PORT=3000 +# for use behind a reverse proxy, use your FQDN for PUBLIC_URL and STORAGE_URL PUBLIC_URL=http://${LOCAL_IP}:3000 STORAGE_URL=http://${LOCAL_IP}:9000/rxresume DATABASE_URL=postgresql://${DB_USER}:${DB_PASS}@localhost:5432/${DB_NAME}?schema=public @@ -116,14 +114,13 @@ HOST=localhost PORT=8080 TOKEN=${CHROME_TOKEN} EOF -echo "${RELEASE}" >/opt/${APPLICATION}_version.txt { echo "${APPLICATION} Credentials" echo "Database User: $DB_USER" echo "Database Password: $DB_PASS" echo "Database Name: $DB_NAME" echo "Minio Root Password: ${MINIO_PASS}" -} >>~/${APPLICATION}.creds +} >>~/"$APPLICATION".creds msg_ok "Configured applications" msg_info "Creating Services" @@ -136,7 +133,7 @@ WorkingDirectory=/usr/local/bin EnvironmentFile=/opt/minio/.env EOF -cat </etc/systemd/system/${APPLICATION}.service +cat </etc/systemd/system/"$APPLICATION".service [Unit] Description=${APPLICATION} Service After=network.target postgresql.service minio.service @@ -167,15 +164,14 @@ Restart=unless-stopped WantedBy=multi-user.target EOF systemctl daemon-reload -systemctl enable -q --now minio.service ${APPLICATION}.service browserless.service +systemctl enable -q --now minio.service "$APPLICATION".service browserless.service msg_ok "Created Services" motd_ssh customize msg_info "Cleaning up" -rm -f /tmp/v${RELEASE}.zip -rm -f /tmp/v${TAG}.zip +rm -f /tmp/v"$TAG".zip rm -f /tmp/minio.deb $STD apt-get -y autoremove $STD apt-get -y autoclean diff --git a/install/threadfin-install.sh b/install/threadfin-install.sh index e432ed8b1..1d04a38a9 100644 --- a/install/threadfin-install.sh +++ b/install/threadfin-install.sh @@ -20,6 +20,8 @@ $STD apt-get install -y \ msg_ok "Installed Dependencies" fetch_and_deploy_gh_release "threadfin" "threadfin/threadfin" "singlefile" "latest" "/opt/threadfin" "Threadfin_linux_arm64" +mv /root/.threadfin /root/.threadfin_version +mkdir -p /root/.threadfin msg_info "Creating Service" cat </etc/systemd/system/threadfin.service diff --git a/misc/build.func b/misc/build.func index 1069dc528..1ff5b8f0c 100644 --- a/misc/build.func +++ b/misc/build.func @@ -191,7 +191,6 @@ base_settings() { GATE="" APT_CACHER="" APT_CACHER_IP="" - #DISABLEIP6="no" MTU="" SD="" NS="" @@ -235,25 +234,30 @@ CT_TYPE="${CT_TYPE}" DISK_SIZE="${DISK_SIZE}" CORE_COUNT="${CORE_COUNT}" RAM_SIZE="${RAM_SIZE}" +VERBOSE="${VERBOSE}" +PW="${PW##-password }" +#CT_ID=$NEXTID HN="${HN}" BRG="${BRG}" +NET="${NET}" +IPV6_METHOD="${IPV6_METHOD:-none}" +# Set this only if using "IPV6_METHOD=static" +#IPV6STATIC="fd00::1234/64" + +GATE="${GATE:-none}" APT_CACHER_IP="${APT_CACHER_IP:-none}" -DISABLEIP6="" -PW='${PW:-none}' +MTU="${MTU:-1500}" +SD="${SD:-none}" +NS="${NS:-none}" +MAC="${MAC:-none}" +VLAN="${VLAN:-none}" SSH="${SSH}" SSH_AUTHORIZED_KEY="${SSH_AUTHORIZED_KEY}" -VERBOSE="${VERBOSE}" TAGS="${TAGS:-none}" -VLAN="${VLAN:-none}" -MTU="${MTU:-1500}" -GATE="${GATE:-none}" -SD="${SD:-none}" -MAC="${MAC:-none}" -NS="${NS:-none}" -NET="${NET}" -FUSE="${ENABLE_FUSE}" - +ENABLE_FUSE="$ENABLE_FUSE" +ENABLE_TUN="$ENABLE_TUN" EOF + echo -e "${INFO}${BOLD}${GN}Writing configuration to ${FILEPATH}${CL}" else echo -e "${INFO}${BOLD}${RD}Configuration file already exists at ${FILEPATH}${CL}" @@ -267,24 +271,29 @@ CT_TYPE="${CT_TYPE}" DISK_SIZE="${DISK_SIZE}" CORE_COUNT="${CORE_COUNT}" RAM_SIZE="${RAM_SIZE}" +VERBOSE="${VERBOSE}" +PW="${PW##-password }" +#CT_ID=$NEXTID HN="${HN}" BRG="${BRG}" +NET="${NET}" +IPV6_METHOD="${IPV6_METHOD:-none}" + +# Set this only if using "IPV6_METHOD=static" +#IPV6STATIC="fd00::1234/64" + +GATE="${GATE:-none}" APT_CACHER_IP="${APT_CACHER_IP:-none}" -DISABLEIP6="" -PW='${PW:-none}' +MTU="${MTU:-1500}" +SD="${SD:-none}" +NS="${NS:-none}" +MAC="${MAC:-none}" +VLAN="${VLAN:-none}" SSH="${SSH}" SSH_AUTHORIZED_KEY="${SSH_AUTHORIZED_KEY}" -VERBOSE="${VERBOSE}" TAGS="${TAGS:-none}" -VLAN="${VLAN:-none}" -MTU="${MTU:-1500}" -GATE="${GATE:-none}" -SD="${SD:-none}" -MAC="${MAC:-none}" -NS="${NS:-none}" -NET="${NET}" -FUSE="${ENABLE_FUSE}" - +ENABLE_FUSE="$ENABLE_FUSE" +ENABLE_TUN="$ENABLE_TUN" EOF echo -e "${INFO}${BOLD}${GN}Writing configuration to ${FILEPATH}${CL}" else @@ -666,13 +675,6 @@ advanced_settings() { fi fi - # if (whiptail --backtitle "Proxmox VE Helper Scripts" --defaultno --title "IPv6" --yesno "Disable IPv6?" 10 58); then - # DISABLEIP6="yes" - # else - # DISABLEIP6="no" - # fi - # echo -e "${DISABLEIPV6}${BOLD}${DGN}Disable IPv6: ${BGN}$DISABLEIP6${CL}" - if MTU1=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Interface MTU Size (leave blank for default [The MTU of your selected vmbr, default is 1500])" 8 58 --title "MTU SIZE" 3>&1 1>&2 2>&3); then if [ -z "$MTU1" ]; then MTU1="Default" @@ -814,7 +816,6 @@ DIAGNOSTICS=yes #"ram_size" #"os_type" #"os_version" -#"disableip6" #"nsapp" #"method" #"pve_version" @@ -841,7 +842,6 @@ DIAGNOSTICS=no #"ram_size" #"os_type" #"os_version" -#"disableip6" #"nsapp" #"method" #"pve_version" @@ -873,20 +873,24 @@ install_script() { header_info while true; do - CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "SETTINGS" --menu "Choose an option:" \ - 18 60 6 \ + TMP_CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" \ + --title "SETTINGS" \ + --menu "Choose an option:" 20 60 6 \ "1" "Default Settings" \ "2" "Default Settings (with verbose)" \ "3" "Advanced Settings" \ "4" "Use Config File" \ "5" "Diagnostic Settings" \ - "6" "Exit" --nocancel --default-item "1" 3>&1 1>&2 2>&3) + "6" "Exit" \ + --default-item "1" 3>&1 1>&2 2>&3) || true - if [ $? -ne 0 ]; then - echo -e "${CROSS}${RD} Menu canceled. Exiting.${CL}" + if [ -z "$TMP_CHOICE" ]; then + echo -e "\n${CROSS}${RD}Menu canceled. Exiting script.${CL}\n" exit 0 fi + CHOICE="$TMP_CHOICE" + case $CHOICE in 1) header_info @@ -941,11 +945,11 @@ install_script() { ;; 6) - echo -e "${CROSS}${RD}Exiting.${CL}" + echo -e "\n${CROSS}${RD}Script terminated. Have a great day!${CL}\n" exit 0 ;; *) - echo -e "${CROSS}${RD}Invalid option, please try again.${CL}" + echo -e "\n${CROSS}${RD}Invalid option, please try again.${CL}\n" ;; esac done @@ -1070,7 +1074,6 @@ build_container() { export CACHER="$APT_CACHER" export CACHER_IP="$APT_CACHER_IP" export tz="$timezone" - #export DISABLEIPV6="$DISABLEIP6" export APPLICATION="$APP" export app="$NSAPP" export PASSWORD="$PW" diff --git a/misc/config-file.func b/misc/config-file.func index 5e7d6d7cc..842c1246c 100644 --- a/misc/config-file.func +++ b/misc/config-file.func @@ -269,6 +269,7 @@ config_file() { if [ "$NET" == "dhcp" ]; then echo -e "${NETWORK}${BOLD}${DGN}IP Address: ${BGN}DHCP${CL}" echo -e "${GATEWAY}${BOLD}${DGN}Gateway IP Address: ${BGN}Default${CL}" + GATE="" elif [[ "$NET" =~ $ip_cidr_regex ]]; then echo -e "${NETWORK}${BOLD}${DGN}IP Address: ${BGN}$NET${CL}" if [ ! -z "$GATE" ]; then @@ -446,6 +447,22 @@ config_file() { fi fi + if [[ "$IPV6_METHOD" == "static" ]]; then + if [[ -n "$IPV6STATIC" ]]; then + IP6=",ip6=${IPV6STATIC}" + echo -e "${NETWORK}${BOLD}${DGN}IPv6 Address: ${BGN}${IPV6STATIC}${CL}" + else + msg_error "IPV6_METHOD is set to static but IPV6STATIC is empty" + exit + fi + elif [[ "$IPV6_METHOD" == "auto" ]]; then + IP6=",ip6=auto" + echo -e "${NETWORK}${BOLD}${DGN}IPv6 Address: ${BGN}auto${CL}" + else + IP6="" + echo -e "${NETWORK}${BOLD}${DGN}IPv6 Address: ${BGN}none${CL}" + fi + if [[ -n "${SD-}" ]]; then if [[ "$SD" == "none" ]]; then SD="" @@ -622,6 +639,24 @@ config_file() { echo -e "${FUSE}${BOLD}${DGN}Enable FUSE: ${BGN}$ENABLE_FUSE${CL}" fi + if [[ -n "$ENABLE_TUN" ]]; then + if [[ "$ENABLE_TUN" == "yes" ]]; then + echo -e "${FUSE}${BOLD}${DGN}Enable TUN: ${BGN}Yes${CL}" + elif [[ "$ENABLE_TUN" == "no" ]]; then + echo -e "${FUSE}${BOLD}${DGN}Enable TUN: ${BGN}No${CL}" + else + msg_error "Enable TUN needs to be 'yes' or 'no', was ${ENABLE_TUN}" + exit + fi + else + if (whiptail --backtitle "Proxmox VE Helper Scripts" --defaultno --title "TUN" --yesno "Enable TUN?" 10 58); then + ENABLE_TUN="yes" + else + ENABLE_TUN="no" + fi + echo -e "${FUSE}${BOLD}${DGN}Enable TUN: ${BGN}$ENABLE_TUN${CL}" + fi + if [[ -n "${VERBOSE-}" ]]; then if [[ "$VERBOSE" == "yes" ]]; then echo -e "${SEARCH}${BOLD}${DGN}Verbose Mode: ${BGN}$VERBOSE${CL}" diff --git a/misc/tools.func b/misc/tools.func index 936fbb1e0..17a0aa101 100644 --- a/misc/tools.func +++ b/misc/tools.func @@ -1766,6 +1766,7 @@ function setup_ffmpeg() { libx264-dev libx265-dev libvpx-dev libmp3lame-dev libfreetype6-dev libass-dev libopus-dev libvorbis-dev libdav1d-dev libsvtav1-dev zlib1g-dev libnuma-dev + libva-dev libdrm-dev ) ;; *) @@ -1802,6 +1803,7 @@ function setup_ffmpeg() { if [[ "$TYPE" == "full" ]]; then args+=(--enable-libx265 --enable-libdav1d --enable-zlib) + args+=(--enable-vaapi --enable-libdrm) fi if [[ ${#args[@]} -eq 0 ]]; then diff --git a/tools/pve/post-pve-install.sh b/tools/pve/post-pve-install.sh index 5afc3bd02..79a5f8092 100644 --- a/tools/pve/post-pve-install.sh +++ b/tools/pve/post-pve-install.sh @@ -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 2>/dev/null && [ -f /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js ] && echo 'Removing subscription nag from UI...' && sed -i '/data\.status/{s/\!/=/;s/active/NoMoreNagging/}' /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js\"; };" >/etc/apt/apt.conf.d/no-nag-script apt --reinstall install proxmox-widget-toolkit &>/dev/null msg_ok "Disabled subscription nag (Delete browser cache)" ;;