mirror of
https://github.com/community-scripts/ProxmoxVE.git
synced 2026-08-27 02:25:41 +00:00
Compare commits
8 Commits
fix-scanop
...
github-act
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3be9c1a1aa | ||
|
|
89f5d3000e | ||
|
|
0a6e59dab2 | ||
|
|
4168f6c5d4 | ||
|
|
a51488a406 | ||
|
|
ab1869fbb0 | ||
|
|
e470b6ddf1 | ||
|
|
416deb8fd0 |
14
CHANGELOG.md
14
CHANGELOG.md
@@ -541,6 +541,20 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
|
||||
- Directus ([#16779](https://github.com/community-scripts/ProxmoxVE/pull/16779))
|
||||
- HAProxy ([#16760](https://github.com/community-scripts/ProxmoxVE/pull/16760))
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- [Fix]: LimeSurvey - enable Apache mod_rewrite [@jonathan8devs](https://github.com/jonathan8devs) ([#16767](https://github.com/community-scripts/ProxmoxVE/pull/16767))
|
||||
- endurain: migrate legacy FRONTEND_DIR path on update [@MickLesk](https://github.com/MickLesk) ([#16794](https://github.com/community-scripts/ProxmoxVE/pull/16794))
|
||||
|
||||
### 💾 Core
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- tools.func: recognize bare XZ-compressed tarballs in fetch_and_deploy* [@MickLesk](https://github.com/MickLesk) ([#16796](https://github.com/community-scripts/ProxmoxVE/pull/16796))
|
||||
- tools.func: fix mongodb version comparison, guard apt purge against removing dependents [@MickLesk](https://github.com/MickLesk) ([#16795](https://github.com/community-scripts/ProxmoxVE/pull/16795))
|
||||
|
||||
### 📂 Github
|
||||
|
||||
- github: teach the PocketBase bot every field [@MickLesk](https://github.com/MickLesk) ([#16781](https://github.com/community-scripts/ProxmoxVE/pull/16781))
|
||||
|
||||
@@ -35,29 +35,29 @@ function update_script() {
|
||||
msg_ok "Stopped Service"
|
||||
|
||||
NODE_VERSION="24" setup_nodejs
|
||||
|
||||
create_backup /opt/endurain/.env /opt/endurain/frontend/dist/env.js
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_codeberg_release "endurain" "endurain-project/endurain" "tarball" "latest" "/opt/endurain"
|
||||
|
||||
msg_info "Preparing Update"
|
||||
msg_info "Updating Endurain Frontend"
|
||||
cd /opt/endurain
|
||||
rm -rf /opt/endurain/{docs,example.env,screenshot_01.png} /opt/endurain/docker* /opt/endurain/*.yml
|
||||
msg_ok "Prepared Update"
|
||||
|
||||
msg_info "Updating Frontend"
|
||||
cd /opt/endurain/frontend
|
||||
$STD npm ci
|
||||
$STD npm run build
|
||||
msg_ok "Updated Frontend"
|
||||
msg_ok "Updated Endurain Frontend"
|
||||
|
||||
restore_backup
|
||||
|
||||
msg_info "Updating Backend"
|
||||
if grep -qxF 'FRONTEND_DIR="/opt/endurain/frontend/app/dist"' /opt/endurain/.env; then
|
||||
sed -i 's|^FRONTEND_DIR="/opt/endurain/frontend/app/dist"$|FRONTEND_DIR="/opt/endurain/frontend/dist"|' /opt/endurain/.env
|
||||
fi
|
||||
|
||||
msg_info "Updating Endurain Backend"
|
||||
cd /opt/endurain/backend
|
||||
UV_VERSION=$(grep -Po 'required-version\s*=\s*"\K[^"]+' pyproject.toml 2>/dev/null || echo "0.11.18")
|
||||
UV_VERSION="$UV_VERSION" setup_uv
|
||||
$STD uv sync --frozen --no-dev
|
||||
msg_ok "Backend Updated"
|
||||
msg_ok "Endurain Backend Updated"
|
||||
|
||||
msg_info "Starting Service"
|
||||
systemctl start endurain
|
||||
|
||||
@@ -28,6 +28,13 @@ function update_script() {
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
if [[ ! -L /etc/apache2/mods-enabled/rewrite.load ]]; then
|
||||
msg_info "Enabling Apache mod_rewrite"
|
||||
$STD a2enmod rewrite
|
||||
systemctl restart apache2
|
||||
msg_ok "Enabled Apache mod_rewrite"
|
||||
fi
|
||||
|
||||
setup_mariadb
|
||||
|
||||
msg_warn "Application is updated via Web Interface"
|
||||
|
||||
@@ -51,13 +51,12 @@ function update_script() {
|
||||
fi
|
||||
sed -i 's|_TARGET=.*$|_URL=http://127.0.0.1:60072|' /opt/scanopy/.env
|
||||
|
||||
fetch_and_deploy_gh_release "scanopy-server" "scanopy/scanopy" "singlefile" "latest" "/usr/bin" "scanopy-server-linux-$(arch_resolve)"
|
||||
|
||||
msg_info "Generating UI Fixtures (patience)"
|
||||
msg_info "Building Scanopy Server (patience)"
|
||||
cd /opt/scanopy/backend
|
||||
CARGO_PROFILE_RELEASE_LTO=false CARGO_PROFILE_RELEASE_CODEGEN_UNITS=16 CARGO_BUILD_JOBS="$(get_parallel_jobs)" $STD cargo build --release --bin generate-fixtures
|
||||
CARGO_BUILD_JOBS="$(get_parallel_jobs)" $STD cargo build --release --bin server --bin generate-fixtures
|
||||
$STD ./target/release/generate-fixtures --output-dir /opt/scanopy/ui/src/lib/data
|
||||
msg_ok "Generated UI Fixtures"
|
||||
mv ./target/release/server /usr/bin/scanopy-server
|
||||
msg_ok "Built Scanopy Server"
|
||||
|
||||
msg_info "Creating frontend UI"
|
||||
export PUBLIC_SERVER_HOSTNAME=default
|
||||
|
||||
@@ -60,6 +60,7 @@ cat <<EOF >/etc/apache2/sites-enabled/000-default.conf
|
||||
EOF
|
||||
chown -R www-data:www-data "/opt/limesurvey"
|
||||
chmod -R 750 "/opt/limesurvey"
|
||||
$STD a2enmod rewrite
|
||||
systemctl reload apache2
|
||||
rm -rf "$temp_file"
|
||||
msg_ok "Set up LimeSurvey"
|
||||
|
||||
@@ -27,13 +27,12 @@ fetch_and_deploy_gh_release "Scanopy" "scanopy/scanopy" "tarball" "latest" "/opt
|
||||
TOOLCHAIN="$(grep "channel" /opt/scanopy/backend/rust-toolchain.toml | awk -F\" '{print $2}')"
|
||||
RUST_TOOLCHAIN=$TOOLCHAIN setup_rust
|
||||
|
||||
fetch_and_deploy_gh_release "scanopy-server" "scanopy/scanopy" "singlefile" "latest" "/usr/bin" "scanopy-server-linux-$(arch_resolve)"
|
||||
|
||||
msg_info "Generating UI Fixtures (patience)"
|
||||
msg_info "Building Scanopy Server (patience)"
|
||||
cd /opt/scanopy/backend
|
||||
CARGO_PROFILE_RELEASE_LTO=false CARGO_PROFILE_RELEASE_CODEGEN_UNITS=16 CARGO_BUILD_JOBS="$(get_parallel_jobs)" $STD cargo build --release --bin generate-fixtures
|
||||
CARGO_BUILD_JOBS="$(get_parallel_jobs)" $STD cargo build --release --bin server --bin generate-fixtures
|
||||
$STD ./target/release/generate-fixtures --output-dir /opt/scanopy/ui/src/lib/data
|
||||
msg_ok "Generated UI Fixtures"
|
||||
mv ./target/release/server /usr/bin/scanopy-server
|
||||
msg_ok "Built Scanopy Server"
|
||||
|
||||
msg_info "Creating frontend UI"
|
||||
export PUBLIC_SERVER_HOSTNAME=default
|
||||
|
||||
@@ -632,7 +632,7 @@ is_tool_installed() {
|
||||
;;
|
||||
mongodb | mongod)
|
||||
if command -v mongod >/dev/null 2>&1; then
|
||||
installed_version=$(mongod --version 2>/dev/null | awk '/db version/{print $3}' | cut -d. -f1,2)
|
||||
installed_version=$(mongod --version 2>/dev/null | awk '/db version/{print $3}' | sed 's/^v//' | cut -d. -f1,2)
|
||||
fi
|
||||
;;
|
||||
node | nodejs)
|
||||
@@ -685,6 +685,39 @@ is_tool_installed() {
|
||||
return 0 # Installed and version matches (if specified)
|
||||
}
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
# Checks whether purging the given package glob(s) would also remove packages
|
||||
# outside those globs (i.e. reverse dependents, such as an app depending on
|
||||
# mongodb-org-server). Uses `apt-get -s` (simulate) with the stable apt-get
|
||||
# output format, not `apt`, whose output is explicitly unstable for scripting.
|
||||
# Returns 0 (safe to purge) or 1 (unsafe - prints the unexpected packages).
|
||||
# Usage: _purge_is_safe 'mongodb*' ['other-glob*' ...]
|
||||
# ------------------------------------------------------------------------------
|
||||
_purge_is_safe() {
|
||||
local -a globs=("$@")
|
||||
local -a collateral=()
|
||||
local pkg glob matched
|
||||
local sim_out
|
||||
sim_out=$(apt-get -s purge -y "${globs[@]}" 2>/dev/null) || return 0
|
||||
while IFS= read -r pkg; do
|
||||
[[ -z "$pkg" ]] && continue
|
||||
matched=0
|
||||
for glob in "${globs[@]}"; do
|
||||
# shellcheck disable=SC2053
|
||||
[[ "$pkg" == $glob ]] && {
|
||||
matched=1
|
||||
break
|
||||
}
|
||||
done
|
||||
((matched)) || collateral+=("$pkg")
|
||||
done < <(awk '/^(Remv|Purg) /{print $2}' <<<"$sim_out")
|
||||
if ((${#collateral[@]} > 0)); then
|
||||
msg_warn "Refusing purge of '${globs[*]}': would also remove ${collateral[*]}"
|
||||
return 1
|
||||
fi
|
||||
return 0
|
||||
}
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
# Remove old tool version completely (purge + cleanup repos)
|
||||
# Usage: remove_old_tool_version "mariadb" "repository-name"
|
||||
@@ -696,11 +729,13 @@ remove_old_tool_version() {
|
||||
case "$tool_name" in
|
||||
mariadb)
|
||||
stop_all_services "mariadb"
|
||||
_purge_is_safe 'mariadb*' || return 1
|
||||
$STD apt purge -y 'mariadb*' >/dev/null 2>&1 || true
|
||||
cleanup_tool_keyrings "mariadb"
|
||||
;;
|
||||
mysql)
|
||||
stop_all_services "mysql"
|
||||
_purge_is_safe 'mysql*' || return 1
|
||||
$STD apt purge -y 'mysql*' >/dev/null 2>&1 || true
|
||||
# Keep data directory for safety (remove manually if needed)
|
||||
# rm -rf /var/lib/mysql 2>/dev/null || true
|
||||
@@ -708,12 +743,14 @@ remove_old_tool_version() {
|
||||
;;
|
||||
mongodb)
|
||||
stop_all_services "mongod"
|
||||
_purge_is_safe 'mongodb*' || return 1
|
||||
$STD apt purge -y 'mongodb*' >/dev/null 2>&1 || true
|
||||
# Keep data directory for safety (remove manually if needed)
|
||||
# rm -rf /var/lib/mongodb 2>/dev/null || true
|
||||
cleanup_tool_keyrings "mongodb"
|
||||
;;
|
||||
node | nodejs)
|
||||
_purge_is_safe nodejs npm || return 1
|
||||
$STD apt purge -y nodejs npm >/dev/null 2>&1 || true
|
||||
# Clean up npm global modules
|
||||
if command -v npm >/dev/null 2>&1; then
|
||||
@@ -726,23 +763,27 @@ remove_old_tool_version() {
|
||||
;;
|
||||
php)
|
||||
stop_all_services "php.*-fpm"
|
||||
_purge_is_safe 'php*' || return 1
|
||||
$STD apt purge -y 'php*' >/dev/null 2>&1 || true
|
||||
rm -rf /etc/php 2>/dev/null || true
|
||||
cleanup_tool_keyrings "deb.sury.org-php" "php"
|
||||
;;
|
||||
postgresql)
|
||||
stop_all_services "postgresql"
|
||||
_purge_is_safe 'postgresql*' || return 1
|
||||
$STD apt purge -y 'postgresql*' >/dev/null 2>&1 || true
|
||||
# Keep data directory for safety (can be removed manually if needed)
|
||||
# rm -rf /var/lib/postgresql 2>/dev/null || true
|
||||
cleanup_tool_keyrings "postgresql" "pgdg"
|
||||
;;
|
||||
java)
|
||||
_purge_is_safe 'temurin*' 'adoptium*' 'openjdk*' || return 1
|
||||
$STD apt purge -y 'temurin*' 'adoptium*' 'openjdk*' >/dev/null 2>&1 || true
|
||||
cleanup_tool_keyrings "adoptium"
|
||||
;;
|
||||
ruby)
|
||||
cleanup_legacy_install "ruby"
|
||||
_purge_is_safe 'ruby*' || return 1
|
||||
$STD apt purge -y 'ruby*' >/dev/null 2>&1 || true
|
||||
;;
|
||||
rust)
|
||||
@@ -754,6 +795,7 @@ remove_old_tool_version() {
|
||||
;;
|
||||
clickhouse)
|
||||
stop_all_services "clickhouse-server"
|
||||
_purge_is_safe 'clickhouse*' || return 1
|
||||
$STD apt purge -y 'clickhouse*' >/dev/null 2>&1 || true
|
||||
# Keep data directory for safety (remove manually if needed)
|
||||
# rm -rf /var/lib/clickhouse 2>/dev/null || true
|
||||
@@ -4473,7 +4515,10 @@ setup_clickhouse() {
|
||||
if [[ -n "$CURRENT_VERSION" && "$CURRENT_VERSION" != "$CLICKHOUSE_VERSION" ]]; then
|
||||
msg_info "Upgrade ClickHouse from $CURRENT_VERSION to $CLICKHOUSE_VERSION"
|
||||
stop_all_services "clickhouse-server"
|
||||
remove_old_tool_version "clickhouse"
|
||||
remove_old_tool_version "clickhouse" || {
|
||||
msg_error "Aborting ClickHouse upgrade: another package depends on it"
|
||||
return 1
|
||||
}
|
||||
else
|
||||
msg_info "Setup ClickHouse $CLICKHOUSE_VERSION"
|
||||
fi
|
||||
@@ -5150,7 +5195,10 @@ setup_go() {
|
||||
# Scenario 2: Different version or not installed
|
||||
if [[ -n "$CURRENT_VERSION" && "$CURRENT_VERSION" != "$GO_VERSION" ]]; then
|
||||
msg_info "Upgrade Go from $CURRENT_VERSION to $GO_VERSION"
|
||||
remove_old_tool_version "go"
|
||||
remove_old_tool_version "go" || {
|
||||
msg_error "Aborting Go upgrade: another package depends on it"
|
||||
return 1
|
||||
}
|
||||
else
|
||||
msg_info "Setup Go $GO_VERSION"
|
||||
fi
|
||||
@@ -6753,7 +6801,10 @@ EOF
|
||||
# Scenario 2b: Different version installed - clean upgrade
|
||||
if [[ -n "$CURRENT_VERSION" ]] && ! version_matches_spec "$CURRENT_VERSION" "$MARIADB_VERSION"; then
|
||||
msg_info "Upgrade MariaDB from $CURRENT_VERSION to $MARIADB_VERSION"
|
||||
remove_old_tool_version "mariadb"
|
||||
remove_old_tool_version "mariadb" || {
|
||||
msg_error "Aborting MariaDB upgrade: another package depends on it"
|
||||
return 1
|
||||
}
|
||||
fi
|
||||
|
||||
# Scenario 3: Fresh install or version change with specific version
|
||||
@@ -7283,7 +7334,10 @@ setup_mongodb() {
|
||||
# Scenario 2: Different version installed - clean upgrade
|
||||
if [[ -n "$INSTALLED_VERSION" && "$INSTALLED_VERSION" != "$MONGO_VERSION" ]]; then
|
||||
msg_info "Upgrade MongoDB from $INSTALLED_VERSION to $MONGO_VERSION"
|
||||
remove_old_tool_version "mongodb"
|
||||
remove_old_tool_version "mongodb" || {
|
||||
msg_error "Aborting MongoDB upgrade: another package depends on it (e.g. an app using it)"
|
||||
return 1
|
||||
}
|
||||
else
|
||||
msg_info "Setup MongoDB $MONGO_VERSION"
|
||||
fi
|
||||
@@ -7473,7 +7527,10 @@ setup_mysql() {
|
||||
# Scenario 2: Different version installed - clean upgrade
|
||||
if [[ -n "$CURRENT_VERSION" ]] && ! version_matches_spec "$CURRENT_VERSION" "$MYSQL_VERSION"; then
|
||||
msg_info "Upgrade MySQL from $CURRENT_VERSION to $MYSQL_VERSION"
|
||||
remove_old_tool_version "mysql"
|
||||
remove_old_tool_version "mysql" || {
|
||||
msg_error "Aborting MySQL upgrade: another package depends on it"
|
||||
return 1
|
||||
}
|
||||
else
|
||||
msg_info "Setup MySQL $MYSQL_VERSION"
|
||||
fi
|
||||
@@ -7637,7 +7694,10 @@ setup_nodejs() {
|
||||
if [[ -n "$CURRENT_NODE_VERSION" && "$CURRENT_NODE_VERSION" != "$NODE_VERSION" ]]; then
|
||||
msg_info "Upgrade Node.js from $CURRENT_NODE_VERSION to $NODE_VERSION"
|
||||
node_setup_ok_msg="Upgrade Node.js to $NODE_VERSION"
|
||||
remove_old_tool_version "nodejs"
|
||||
remove_old_tool_version "nodejs" || {
|
||||
msg_error "Aborting Node.js upgrade: another package depends on it"
|
||||
return 1
|
||||
}
|
||||
else
|
||||
msg_info "Setup Node.js $NODE_VERSION"
|
||||
node_setup_ok_msg="Setup Node.js $NODE_VERSION"
|
||||
@@ -9334,6 +9394,8 @@ fetch_and_deploy_from_url() {
|
||||
|
||||
if [[ "$file_desc" =~ gzip.*compressed|gzip\ compressed\ data ]]; then
|
||||
archive_type="tar"
|
||||
elif [[ "$file_desc" =~ XZ\ compressed\ data ]]; then
|
||||
archive_type="tar"
|
||||
elif [[ "$file_desc" =~ Zip.*archive|ZIP\ archive ]]; then
|
||||
archive_type="zip"
|
||||
elif [[ "$file_desc" =~ Debian.*package|Debian\ binary\ package ]]; then
|
||||
|
||||
Reference in New Issue
Block a user