Compare commits

..

10 Commits

Author SHA1 Message Date
9edb7c16ab Update CHANGELOG.md 2025-12-15 09:10:20 +00:00
09134d94dd Refactor: Heimdall Dashboard (#9959)
* Refactor

* VED>VE
2025-12-15 10:10:04 +01:00
33103ad256 Update project statistics in README
Removed an outdated project statistics image link.
2025-12-15 10:06:07 +01:00
fd75da89c4 Update CHANGELOG.md (#9969)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-12-15 08:53:00 +00:00
ee49576f3a README; add project statistics and formatting (#9967) 2025-12-15 09:52:36 +01:00
e651c14f76 fix(build): App Defaults now override script defaults with force mode 2025-12-15 09:46:49 +01:00
1fc5c031cc Update CHANGELOG.md (#9968)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-12-15 08:37:22 +00:00
35793051a1 core: load app defaults before applying base_settings / fix composer cleanup after install/update (#9965)
* fix(build): load app defaults before applying base_settings

App defaults were loaded after base_settings, causing saved values to be ignored.
Now loads var_* from app defaults file before calling base_settings.

* fix(cleanup): suppress composer root warning in cleanup_lxc

Composer's clear-cache command prompts for confirmation when run as root,
causing scripts to hang at 'Cleaning up' stage. Set COMPOSER_ALLOW_SUPERUSER=1
to suppress the interactive prompt.

Fixes #9952 (Heimdall Dashboard), also affects BentoPDF and other PHP apps.

* Fix COMPOSER_ALLOW_SUPERUSER export in cleanup_lxc

Exports COMPOSER_ALLOW_SUPERUSER before running composer clear-cache to ensure the environment variable is set correctly during cleanup.
2025-12-15 09:37:01 +01:00
9a6a0379a6 Update CHANGELOG.md (#9961)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-12-15 00:16:31 +00:00
4fab369a5b Update versions.json (#9960)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-12-15 01:16:03 +01:00
7 changed files with 84 additions and 46 deletions

View File

@ -10,6 +10,24 @@
> [!CAUTION] > [!CAUTION]
Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit the project's popularity for potentially malicious purposes. Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit the project's popularity for potentially malicious purposes.
## 2025-12-15
### 🚀 Updated Scripts
- #### 🔧 Refactor
- Refactor: Heimdall Dashboard [@tremor021](https://github.com/tremor021) ([#9959](https://github.com/community-scripts/ProxmoxVE/pull/9959))
### 💾 Core
- #### 🐞 Bug Fixes
- core: load app defaults before applying base_settings / fix composer cleanup after install/update [@MickLesk](https://github.com/MickLesk) ([#9965](https://github.com/community-scripts/ProxmoxVE/pull/9965))
### 📚 Documentation
- README; add project statistics / formatting [@MickLesk](https://github.com/MickLesk) ([#9967](https://github.com/community-scripts/ProxmoxVE/pull/9967))
## 2025-12-14 ## 2025-12-14
### 🚀 Updated Scripts ### 🚀 Updated Scripts

View File

@ -30,8 +30,8 @@
<br /> <br />
> **Simplify your Proxmox VE setup with community-driven automation scripts** **Simplify your Proxmox VE setup with community-driven automation scripts**
> Originally created by tteck, now maintained and expanded by the community Originally created by tteck, now maintained and expanded by the community
</div> </div>
@ -239,17 +239,34 @@ This project is maintained by volunteers in memory of tteck. Your support helps
--- ---
## 📈 Project Growth ## 📈 Project Statistics
<p align="center">
<img
src="https://repobeats.axiom.co/api/embed/57edde03e00f88d739bdb5b844ff7d07dd079375.svg"
alt="Repobeats analytics"
width="650"
/>
</p>
<div align="center"> <p align="center">
<a href="https://star-history.com/#community-scripts/ProxmoxVE&Date"> <a href="https://star-history.com/#community-scripts/ProxmoxVE&Date">
<picture> <picture>
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=community-scripts/ProxmoxVE&type=Date&theme=dark" /> <source
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=community-scripts/ProxmoxVE&type=Date" /> media="(prefers-color-scheme: dark)"
<img alt="Star History Chart" src="https://api.star-history.com/svg?repos=community-scripts/ProxmoxVE&type=Date" /> srcset="https://api.star-history.com/svg?repos=community-scripts/ProxmoxVE&type=Date&theme=dark"
/>
<source
media="(prefers-color-scheme: light)"
srcset="https://api.star-history.com/svg?repos=community-scripts/ProxmoxVE&type=Date"
/>
<img
alt="Star History Chart"
src="https://api.star-history.com/svg?repos=community-scripts/ProxmoxVE&type=Date"
width="650"
/>
</picture> </picture>
</a> </a>
</div> </p>
--- ---

View File

@ -11,7 +11,7 @@ var_cpu="${var_cpu:-1}"
var_ram="${var_ram:-512}" var_ram="${var_ram:-512}"
var_disk="${var_disk:-2}" var_disk="${var_disk:-2}"
var_os="${var_os:-debian}" var_os="${var_os:-debian}"
var_version="${var_version:-12}" var_version="${var_version:-13}"
var_unprivileged="${var_unprivileged:-1}" var_unprivileged="${var_unprivileged:-1}"
header_info "$APP" header_info "$APP"
@ -27,45 +27,45 @@ function update_script() {
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
fi fi
RELEASE=$(curl -fsSL "https://api.github.com/repos/linuxserver/Heimdall/releases/latest" | awk '/tag_name/{print $4;exit}' FS='[""]')
if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then if check_for_gh_release "Heimdall" "linuxserver/Heimdall"; then
msg_info "Stopping Service" msg_info "Stopping Service"
systemctl stop heimdall systemctl stop heimdall
sleep 1 sleep 1
msg_ok "Stopped Service" msg_ok "Stopped Service"
msg_info "Backing up Data" msg_info "Backing up Data"
cp -R /opt/Heimdall/database database-backup cp -R /opt/Heimdall/database database-backup
cp -R /opt/Heimdall/public public-backup cp -R /opt/Heimdall/public public-backup
sleep 1 sleep 1
msg_ok "Backed up Data" msg_ok "Backed up Data"
msg_info "Updating Heimdall Dashboard to ${RELEASE}"
curl -fsSL "https://github.com/linuxserver/Heimdall/archive/${RELEASE}.tar.gz" -o $(basename "https://github.com/linuxserver/Heimdall/archive/${RELEASE}.tar.gz") setup_composer
tar xzf "${RELEASE}".tar.gz fetch_and_deploy_gh_release "Heimdall" "linuxserver/Heimdall" "tarball"
VER=$(curl -fsSL https://api.github.com/repos/linuxserver/Heimdall/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
cp -R Heimdall-"${VER}"/* /opt/Heimdall msg_info "Updating Heimdall-Dashboard"
cd /opt/Heimdall cd /opt/Heimdall
$STD apt-get install -y composer
export COMPOSER_ALLOW_SUPERUSER=1 export COMPOSER_ALLOW_SUPERUSER=1
$STD composer dump-autoload $STD composer dump-autoload
echo "${RELEASE}" >/opt/${APP}_version.txt msg_ok "Updated Heimdall-Dashboard"
msg_ok "Updated Heimdall Dashboard to ${RELEASE}"
msg_info "Restoring Data" msg_info "Restoring Data"
cd ~ cd ~
cp -R database-backup/* /opt/Heimdall/database cp -R database-backup/* /opt/Heimdall/database
cp -R public-backup/* /opt/Heimdall/public cp -R public-backup/* /opt/Heimdall/public
sleep 1 sleep 1
msg_ok "Restored Data" msg_ok "Restored Data"
msg_info "Cleanup"
rm -rf {"${RELEASE}".tar.gz,Heimdall-"${VER}",public-backup,database-backup,Heimdall} msg_info "Cleaning Up"
rm -rf {public-backup,database-backup}
sleep 1 sleep 1
msg_ok "Cleaned" msg_ok "Cleaned Up"
msg_info "Starting Service" msg_info "Starting Service"
systemctl start heimdall.service systemctl start heimdall.service
sleep 2 sleep 2
msg_ok "Started Service" msg_ok "Started Service"
msg_ok "Updated successfully!" msg_ok "Updated successfully!"
else
msg_ok "No update required. ${APP} is already at ${RELEASE}."
fi fi
exit exit
} }

View File

@ -23,7 +23,7 @@
"ram": 512, "ram": 512,
"hdd": 2, "hdd": 2,
"os": "debian", "os": "debian",
"version": "12" "version": "13"
} }
} }
], ],

View File

@ -14,27 +14,22 @@ network_check
update_os update_os
msg_info "Installing Dependencies" msg_info "Installing Dependencies"
$STD apt-get install -y apt-transport-https $STD apt install -y apt-transport-https
$STD apt-get install -y composer
$STD apt-get install -y php8.2-{bz2,curl,sqlite3,zip,xml}
msg_ok "Installed Dependencies" msg_ok "Installed Dependencies"
RELEASE=$(curl -fsSL "https://api.github.com/repos/linuxserver/Heimdall/releases/latest" | awk '/tag_name/{print $4;exit}' FS='[""]') PHP_VERSION="8.4" PHP_MODULE="bz2,sqlite3" PHP_FPM="YES" setup_php
echo "${RELEASE}" >/opt/"${APPLICATION}"_version.txt setup_composer
msg_info "Installing Heimdall Dashboard ${RELEASE}" fetch_and_deploy_gh_release "Heimdall" "linuxserver/Heimdall" "tarball"
curl -fsSL "https://github.com/linuxserver/Heimdall/archive/${RELEASE}.tar.gz" -o "${RELEASE}".tar.gz
tar xzf "${RELEASE}".tar.gz msg_info "Setting up Heimdall-Dashboard"
VER=$(curl -fsSL https://api.github.com/repos/linuxserver/Heimdall/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
rm -rf "${RELEASE}".tar.gz
mv Heimdall-"${VER}" /opt/Heimdall
cd /opt/Heimdall cd /opt/Heimdall
cp .env.example .env cp .env.example .env
$STD php artisan key:generate $STD php artisan key:generate
msg_ok "Installed Heimdall Dashboard ${RELEASE}" msg_ok "Setup Heimdall-Dashboard"
msg_info "Creating Service" msg_info "Creating Service"
service_path="/etc/systemd/system/heimdall.service" cat <<EOF >/etc/systemd/system/heimdall.service
echo "[Unit] [Unit]
Description=Heimdall Description=Heimdall
After=network.target After=network.target
@ -44,14 +39,16 @@ RestartSec=5
Type=simple Type=simple
User=root User=root
WorkingDirectory=/opt/Heimdall WorkingDirectory=/opt/Heimdall
ExecStart="/usr/bin/php" artisan serve --port 7990 --host 0.0.0.0 ExecStart=/usr/bin/php artisan serve --port 7990 --host 0.0.0.0
TimeoutStopSec=30 TimeoutStopSec=30
[Install] [Install]
WantedBy=multi-user.target" >$service_path WantedBy=multi-user.target"
EOF
systemctl enable -q --now heimdall systemctl enable -q --now heimdall
cd /opt/Heimdall cd /opt/Heimdall
COMPOSER_ALLOW_SUPERUSER=1 composer dump-autoload &>/dev/null export COMPOSER_ALLOW_SUPERUSER=1
$STD composer dump-autoload
systemctl restart heimdall.service systemctl restart heimdall.service
msg_ok "Created Service" msg_ok "Created Service"

View File

@ -445,9 +445,11 @@ base_settings() {
# - Safe parser for KEY=VALUE lines from vars files # - Safe parser for KEY=VALUE lines from vars files
# - Used by default_var_settings and app defaults loading # - Used by default_var_settings and app defaults loading
# - Only loads whitelisted var_* keys # - Only loads whitelisted var_* keys
# - Optional force parameter to override existing values (for app defaults)
# ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------
load_vars_file() { load_vars_file() {
local file="$1" local file="$1"
local force="${2:-no}" # If "yes", override existing variables
[ -f "$file" ] || return 0 [ -f "$file" ] || return 0
msg_info "Loading defaults from ${file}" msg_info "Loading defaults from ${file}"
@ -485,9 +487,13 @@ load_vars_file() {
var_val="${BASH_REMATCH[1]}" var_val="${BASH_REMATCH[1]}"
fi fi
# Set only if not already exported # Set variable: force mode overrides existing, otherwise only set if empty
if [[ "$force" == "yes" ]]; then
export "${var_key}=${var_val}"
else
[[ -z "${!var_key+x}" ]] && export "${var_key}=${var_val}" [[ -z "${!var_key+x}" ]] && export "${var_key}=${var_val}"
fi fi
fi
done <"$file" done <"$file"
msg_ok "Loaded ${file}" msg_ok "Loaded ${file}"
} }
@ -2148,8 +2154,8 @@ install_script() {
header_info header_info
echo -e "${DEFAULT}${BOLD}${BL}Using App Defaults for ${APP} on node $PVEHOST_NAME${CL}" echo -e "${DEFAULT}${BOLD}${BL}Using App Defaults for ${APP} on node $PVEHOST_NAME${CL}"
METHOD="appdefaults" METHOD="appdefaults"
load_vars_file "$(get_app_defaults_path)" "yes" # Force override script defaults
base_settings base_settings
load_vars_file "$(get_app_defaults_path)"
echo_default echo_default
defaults_target="$(get_app_defaults_path)" defaults_target="$(get_app_defaults_path)"
break break

View File

@ -828,7 +828,7 @@ cleanup_lxc() {
# Ruby gem # Ruby gem
if command -v gem &>/dev/null; then $STD gem cleanup || true; fi if command -v gem &>/dev/null; then $STD gem cleanup || true; fi
# Composer (PHP) # Composer (PHP)
if command -v composer &>/dev/null; then $STD composer clear-cache || true; fi if command -v composer &>/dev/null; then COMPOSER_ALLOW_SUPERUSER=1 && $STD composer clear-cache || true; fi
if command -v journalctl &>/dev/null; then if command -v journalctl &>/dev/null; then
$STD journalctl --vacuum-time=10m || true $STD journalctl --vacuum-time=10m || true