mirror of
https://github.com/community-scripts/ProxmoxVE.git
synced 2026-09-05 22:33:57 +02:00
Compare commits
12
Commits
2026-09-04
..
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
bcb82ac446 | ||
|
|
eeafdafcd0 | ||
|
|
89f179e05e | ||
|
|
a5cde1fa8c | ||
|
|
a81a11649e | ||
|
|
9c750ffaf5 | ||
|
|
f3742af941 | ||
|
|
40160b0a58 | ||
|
|
d9c276c49c | ||
|
|
cfb0bfe4ac | ||
|
|
1d973f42a8 | ||
|
|
1d1fd98d05 |
@@ -530,6 +530,26 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
|
||||
|
||||
</details>
|
||||
|
||||
## 2026-09-05
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- snapotter: seed AI venv base packages on arm64, warn amd64 has no working CPU bundle [@MickLesk](https://github.com/MickLesk) ([#16903](https://github.com/community-scripts/ProxmoxVE/pull/16903))
|
||||
- tolgee: bump required JDK from 21 to 25 [@MickLesk](https://github.com/MickLesk) ([#17005](https://github.com/community-scripts/ProxmoxVE/pull/17005))
|
||||
- romm: write real version into backend/__version__.py placeholder [@MickLesk](https://github.com/MickLesk) ([#17009](https://github.com/community-scripts/ProxmoxVE/pull/17009))
|
||||
|
||||
- #### 🔧 Refactor
|
||||
|
||||
- Refactor FileFlows: Stop Spinner before read -rp / Switch from "Node" to "Agent" [@MickLesk](https://github.com/MickLesk) ([#17007](https://github.com/community-scripts/ProxmoxVE/pull/17007))
|
||||
|
||||
### 🧰 Tools
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- update-apps: follow renamed ct/ scripts instead of erroring out [@MickLesk](https://github.com/MickLesk) ([#16991](https://github.com/community-scripts/ProxmoxVE/pull/16991))
|
||||
|
||||
## 2026-09-04
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
@@ -51,6 +51,7 @@ function update_script() {
|
||||
/opt/romm/frontend/dist/assets/ruffle
|
||||
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "romm" "rommapp/romm" "tarball" "latest" "/opt/romm"
|
||||
echo "__version__ = \"$(cat ~/.romm)\"" >/opt/romm/backend/__version__.py
|
||||
|
||||
find /opt/romm/backend/alembic/versions -maxdepth 1 -type f -name '1.*.py' -delete 2>/dev/null || true
|
||||
find /opt/romm/backend/alembic/versions -maxdepth 1 -type f -name '2.0.0_.py' -delete 2>/dev/null || true
|
||||
|
||||
@@ -88,6 +88,13 @@ EOF
|
||||
msg_info "Updating SnapOtter"
|
||||
$STD uv python install 3.11
|
||||
$STD uv venv --seed --python 3.11 /opt/snapotter_data/ai/venv
|
||||
if [[ "$(arch_resolve)" == "arm64" ]]; then
|
||||
$STD uv pip install --python /opt/snapotter_data/ai/venv/bin/python \
|
||||
numpy==1.26.4 Pillow==12.3.0 opencv-python-headless==4.10.0.84 fonttools \
|
||||
'huggingface-hub[hf_xet,hf_transfer]==0.36.2'
|
||||
else
|
||||
msg_warn "SnapOtter AI Features have no working CPU-only bundle for amd64 upstream (published bundle is Python 3.12/GPU-CUDA only). Use the official Docker image instead: https://docs.snapotter.com"
|
||||
fi
|
||||
ln -sfn /opt/snapotter /app
|
||||
msg_ok "Updated SnapOtter"
|
||||
|
||||
|
||||
@@ -37,6 +37,8 @@ function update_script() {
|
||||
systemctl stop tolgee
|
||||
msg_ok "Stopped Service"
|
||||
|
||||
JAVA_VERSION="25" setup_java
|
||||
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "tolgee" "tolgee/tolgee-platform" "singlefile" "latest" "/opt/tolgee" "tolgee-*.jar"
|
||||
find /opt/tolgee -maxdepth 1 -type f -name 'tolgee-*.jar' -exec mv {} /opt/tolgee/tolgee.jar \;
|
||||
|
||||
|
||||
@@ -45,7 +45,7 @@ $STD ln -svf /usr/bin/ffmpeg /usr/local/bin/ffmpeg
|
||||
$STD ln -svf /usr/bin/ffprobe /usr/local/bin/ffprobe
|
||||
$STD rm -rf /opt/fileflows/Server/runtimes/win-*
|
||||
|
||||
read -r -p "${TAB3}Do you want to install FileFlows Server or Node? (S/N): " install_server
|
||||
read -r -p "${TAB3}Do you want to install FileFlows Server or Agent? (S/A): " install_server
|
||||
|
||||
if [[ "$install_server" =~ ^[Ss]$ ]]; then
|
||||
msg_info "Installing FileFlows Server"
|
||||
@@ -54,15 +54,23 @@ if [[ "$install_server" =~ ^[Ss]$ ]]; then
|
||||
systemctl enable -q --now fileflows
|
||||
msg_ok "Installed FileFlows Server"
|
||||
else
|
||||
msg_info "Installing FileFlows Node"
|
||||
msg_info "Installing FileFlows Agent"
|
||||
stop_spinner
|
||||
read -r -p "${TAB3}Enter FileFlows Server URL (e.g. http://192.168.1.10:19200): " server_url
|
||||
while [[ -z "${server_url// /}" ]]; do
|
||||
read -r -p "${TAB3}Enter FileFlows Server URL (e.g. http://192.168.1.10:19200): " server_url
|
||||
done
|
||||
cd /opt/fileflows/Node
|
||||
$STD dotnet FileFlows.Node.dll --server "$server_url" --systemd install --root true
|
||||
systemctl enable -q --now fileflows-node
|
||||
msg_ok "Installed FileFlows Node"
|
||||
cd /opt/fileflows/Agent
|
||||
before_units="$(systemctl list-unit-files 'fileflows*' --no-legend 2>/dev/null | awk '{print $1}' | sort || true)"
|
||||
$STD dotnet FileFlows.Agent.dll --server "$server_url" --systemd install --root true
|
||||
after_units="$(systemctl list-unit-files 'fileflows*' --no-legend 2>/dev/null | awk '{print $1}' | sort || true)"
|
||||
agent_unit="$(comm -13 <(echo "$before_units") <(echo "$after_units") | head -n1)"
|
||||
if [[ -n "$agent_unit" ]]; then
|
||||
systemctl enable -q --now "$agent_unit"
|
||||
else
|
||||
msg_warn "Could not detect the FileFlows Agent systemd unit; start it manually (systemctl list-unit-files 'fileflows*')."
|
||||
fi
|
||||
msg_ok "Installed FileFlows Agent"
|
||||
fi
|
||||
|
||||
motd_ssh
|
||||
|
||||
@@ -161,6 +161,7 @@ else
|
||||
fi
|
||||
|
||||
fetch_and_deploy_gh_release "romm" "rommapp/romm" "tarball"
|
||||
echo "__version__ = \"$(cat ~/.romm)\"" >/opt/romm/backend/__version__.py
|
||||
|
||||
msg_info "Creating environment file"
|
||||
sed -i 's/^supervised no/supervised systemd/' /etc/redis/redis.conf
|
||||
|
||||
@@ -34,7 +34,12 @@ $STD apt install -y \
|
||||
python3 \
|
||||
python3-dev \
|
||||
gcc \
|
||||
g++
|
||||
g++ \
|
||||
libavif-bin \
|
||||
libavif-dev \
|
||||
libopencv-dev \
|
||||
python3-opencv \
|
||||
libgles2
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
PYTHON_VERSION="3.11" setup_uv
|
||||
@@ -59,11 +64,13 @@ msg_info "Setting up Python Environment"
|
||||
mkdir -p /opt/snapotter_data/ai/models/rembg
|
||||
$STD uv python install 3.11
|
||||
$STD uv venv --seed --python 3.11 /opt/snapotter_data/ai/venv
|
||||
#if [[ -f /opt/snapotter/packages/ai/python/requirements.txt ]]; then
|
||||
# $STD uv pip install \
|
||||
# --python /opt/snapotter_data/ai/venv/bin/python \
|
||||
# -r /opt/snapotter/packages/ai/python/requirements.txt
|
||||
#fi
|
||||
if [[ "$(arch_resolve)" == "arm64" ]]; then
|
||||
$STD uv pip install --python /opt/snapotter_data/ai/venv/bin/python \
|
||||
numpy==1.26.4 Pillow==12.3.0 opencv-python-headless==4.10.0.84 fonttools \
|
||||
'huggingface-hub[hf_xet,hf_transfer]==0.36.2'
|
||||
else
|
||||
msg_warn "SnapOtter AI Features have no working CPU-only bundle for amd64 upstream (published bundle is Python 3.12/GPU-CUDA only). Use the official Docker image instead: https://docs.snapotter.com"
|
||||
fi
|
||||
ln -sfn /opt/snapotter /app
|
||||
msg_ok "Set up Python Environment"
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@ setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
JAVA_VERSION="21" setup_java
|
||||
JAVA_VERSION="25" setup_java
|
||||
PG_VERSION="16" setup_postgresql
|
||||
PG_DB_NAME="tolgee" PG_DB_USER="tolgee" setup_postgresql_db
|
||||
|
||||
|
||||
@@ -155,13 +155,29 @@ function sanitize_service_name() {
|
||||
return 0
|
||||
}
|
||||
|
||||
function validate_service_script() {
|
||||
function script_exists() {
|
||||
local name="$1"
|
||||
sanitize_service_name "$name" || return 1
|
||||
curl -fsSL --max-time 10 -o /dev/null \
|
||||
"https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/${name}.sh" 2>/dev/null
|
||||
}
|
||||
|
||||
# A container keeps the slug it was built with, so a renamed ct/ script leaves it
|
||||
# pointing at a name that no longer exists. Try the successors, but only accept one
|
||||
# that is really there -- guessing wrong would run a foreign app's updater.
|
||||
function resolve_service_script() {
|
||||
local n="$1" c
|
||||
script_exists "$n" && { printf '%s' "$n"; return 0; }
|
||||
for c in "${n#alpine-}" "$(printf '%s' "$n" | sed -E 's/-v[0-9]+$//')"; do
|
||||
[[ -n "$c" && "$c" != "$n" ]] || continue
|
||||
script_exists "$c" && { printf '%s' "$c"; return 0; }
|
||||
done
|
||||
case "$n" in
|
||||
pbs) script_exists proxmox-backup-server && { printf '%s' proxmox-backup-server; return 0; } ;;
|
||||
esac
|
||||
return 1
|
||||
}
|
||||
|
||||
function detect_service() {
|
||||
local container="$1"
|
||||
local tmpdir update_file
|
||||
@@ -484,12 +500,18 @@ for container in $CHOICE; do
|
||||
continue
|
||||
fi
|
||||
|
||||
if ! validate_service_script "${service}"; then
|
||||
resolved_service="$(resolve_service_script "${service}")"
|
||||
if [ -z "${resolved_service}" ]; then
|
||||
echo -e "${RD}[ERROR]${CL} Service '${service}' does not resolve to ct/${service}.sh"
|
||||
log_result "$container" "${service}" "ERROR" "No matching ct/${service}.sh script found"
|
||||
log_write "Container $container: ERROR — ct/${service}.sh not found"
|
||||
continue
|
||||
fi
|
||||
if [ "${resolved_service}" != "${service}" ]; then
|
||||
echo -e "${BL}[INFO]${CL} Script was renamed: ${service} -> ${GN}${resolved_service}${CL}"
|
||||
log_write "Container $container: slug ${service} resolved to ${resolved_service}"
|
||||
service="${resolved_service}"
|
||||
fi
|
||||
|
||||
echo -e "${BL}[INFO]${CL} Detected service: ${GN}${service}${CL}"
|
||||
log_write "Container $container: detected service '${service}'"
|
||||
|
||||
Reference in New Issue
Block a user