mirror of
https://github.com/community-scripts/ProxmoxVE.git
synced 2026-10-20 12:02:34 +02:00
Compare commits
17
Commits
No files matched your search
@@ -567,6 +567,27 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
|
|||||||
|
|
||||||
## 2026-10-18
|
## 2026-10-18
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- Donetick: create selfhosted.yaml from the example [@MickLesk](https://github.com/MickLesk) ([#17992](https://github.com/community-scripts/ProxmoxVE/pull/17992))
|
||||||
|
- Wiki.js: only back up db.sqlite on SQLite installs [@MickLesk](https://github.com/MickLesk) ([#17993](https://github.com/community-scripts/ProxmoxVE/pull/17993))
|
||||||
|
- FlareSolverr: pass Chrome an en-US Accept-Language [@MickLesk](https://github.com/MickLesk) ([#17995](https://github.com/community-scripts/ProxmoxVE/pull/17995))
|
||||||
|
- 2FAuth: install the locked dependencies [@MickLesk](https://github.com/MickLesk) ([#17996](https://github.com/community-scripts/ProxmoxVE/pull/17996))
|
||||||
|
- Tracearr: drop the pnpm store after the update build [@gioxx](https://github.com/gioxx) ([#17869](https://github.com/community-scripts/ProxmoxVE/pull/17869))
|
||||||
|
- vaultwarden: build before stopping the service [@mazelado](https://github.com/mazelado) ([#17983](https://github.com/community-scripts/ProxmoxVE/pull/17983))
|
||||||
|
|
||||||
|
- #### 💥 Breaking Changes
|
||||||
|
|
||||||
|
- fix: geopulse 2.0.0 upgrade support (nginx .mjs, pg18, jwt cleanup) [@CrazyWolf13](https://github.com/CrazyWolf13) ([#17978](https://github.com/community-scripts/ProxmoxVE/pull/17978))
|
||||||
|
|
||||||
|
### 💾 Core
|
||||||
|
|
||||||
|
- Let get_current_ip reach its IPv6 fallback [@MickLesk](https://github.com/MickLesk) ([core#151](https://github.com/community-scripts/core/pull/151))
|
||||||
|
- Drop apt autoclean before apt clean [@MickLesk](https://github.com/MickLesk) ([core#152](https://github.com/community-scripts/core/pull/152))
|
||||||
|
- Silence apt's script warning in $STD [@MickLesk](https://github.com/MickLesk) ([core#150](https://github.com/community-scripts/core/pull/150))
|
||||||
|
|
||||||
## 2026-10-17
|
## 2026-10-17
|
||||||
|
|
||||||
### 🆕 New Scripts
|
### 🆕 New Scripts
|
||||||
|
|||||||
@@ -35,6 +35,12 @@ function update_script() {
|
|||||||
msg_error "You must upgrade your LXC to Debian Trixie before updating."
|
msg_error "You must upgrade your LXC to Debian Trixie before updating."
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
# FlareSolverr hands LANG to Chrome as Accept-Language, which needs a tag like en-US, not a locale (#17987)
|
||||||
|
if ! grep -q '^Environment="LANG=' /etc/systemd/system/flaresolverr.service; then
|
||||||
|
sed -i '/^Environment="CAPTCHA_SOLVER=/a Environment="LANG=en-US"' /etc/systemd/system/flaresolverr.service
|
||||||
|
systemctl daemon-reload
|
||||||
|
systemctl restart flaresolverr
|
||||||
|
fi
|
||||||
if check_for_gh_release "flaresolverr" "FlareSolverr/FlareSolverr"; then
|
if check_for_gh_release "flaresolverr" "FlareSolverr/FlareSolverr"; then
|
||||||
msg_info "Stopping service"
|
msg_info "Stopping service"
|
||||||
systemctl stop flaresolverr
|
systemctl stop flaresolverr
|
||||||
|
|||||||
+53
-2
@@ -10,7 +10,7 @@ APP="GeoPulse"
|
|||||||
var_tags="${var_tags:-location;tracking;gps}"
|
var_tags="${var_tags:-location;tracking;gps}"
|
||||||
var_cpu="${var_cpu:-2}"
|
var_cpu="${var_cpu:-2}"
|
||||||
var_ram="${var_ram:-1024}"
|
var_ram="${var_ram:-1024}"
|
||||||
var_disk="${var_disk:-8}"
|
var_disk="${var_disk:-12}"
|
||||||
var_os="${var_os:-debian}"
|
var_os="${var_os:-debian}"
|
||||||
var_version="${var_version:-13}"
|
var_version="${var_version:-13}"
|
||||||
var_arm64="${var_arm64:-yes}"
|
var_arm64="${var_arm64:-yes}"
|
||||||
@@ -32,6 +32,16 @@ function update_script() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
if check_for_gh_release "geopulse-backend" "tess1o/geopulse"; then
|
if check_for_gh_release "geopulse-backend" "tess1o/geopulse"; then
|
||||||
|
msg_info "Backing Up Database"
|
||||||
|
mkdir -p /var/lib/geopulse/dumps
|
||||||
|
DB_NAME="$(grep -oP '^GEOPULSE_POSTGRES_DB=\K.*' /etc/geopulse/geopulse.env 2>/dev/null)"
|
||||||
|
DB_NAME="${DB_NAME:-geopulse}"
|
||||||
|
if sudo -u postgres pg_dump -Fc "${DB_NAME}" >"/var/lib/geopulse/dumps/${DB_NAME}-pre-update-$(date +%Y%m%d%H%M%S).dump" 2>/dev/null; then
|
||||||
|
msg_ok "Backed Up Database"
|
||||||
|
else
|
||||||
|
msg_warn "Database backup failed, continuing anyway"
|
||||||
|
fi
|
||||||
|
|
||||||
msg_info "Stopping Service"
|
msg_info "Stopping Service"
|
||||||
systemctl stop geopulse-backend
|
systemctl stop geopulse-backend
|
||||||
msg_ok "Stopped Service"
|
msg_ok "Stopped Service"
|
||||||
@@ -51,7 +61,48 @@ function update_script() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
fetch_and_deploy_gh_release "geopulse-backend" "tess1o/geopulse" "singlefile" "latest" "/opt/geopulse/backend" "${BINARY_PATTERN}"
|
fetch_and_deploy_gh_release "geopulse-backend" "tess1o/geopulse" "singlefile" "latest" "/opt/geopulse/backend" "${BINARY_PATTERN}"
|
||||||
fetch_and_deploy_gh_release "geopulse-frontend" "tess1o/geopulse" "prebuild" "latest" "/var/www/geopulse" "geopulse-frontend-*.tar.gz"
|
CLEAN_INSTALL=1 CLEAN_INSTALL_KEEP="avatars" fetch_and_deploy_gh_release "geopulse-frontend" "tess1o/geopulse" "prebuild" "latest" "/var/www/geopulse" "geopulse-frontend-*.tar.gz"
|
||||||
|
|
||||||
|
if [[ -f /etc/geopulse/geopulse.env ]] && grep -q "GEOPULSE_JWT_" /etc/geopulse/geopulse.env 2>/dev/null; then
|
||||||
|
msg_info "Removing Unused JWT Keys"
|
||||||
|
sed -i '/^GEOPULSE_JWT_PRIVATE_KEY_LOCATION=/d;/^GEOPULSE_JWT_PUBLIC_KEY_LOCATION=/d' /etc/geopulse/geopulse.env
|
||||||
|
rm -f /opt/geopulse/keys/jwt-private-key.pem /opt/geopulse/keys/jwt-public-key.pem
|
||||||
|
msg_ok "Removed Unused JWT Keys"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ -f /etc/nginx/sites-available/geopulse.conf ]] && ! grep -q '\.mjs\$' /etc/nginx/sites-available/geopulse.conf; then
|
||||||
|
msg_info "Configuring Nginx for .mjs Assets"
|
||||||
|
cp /etc/nginx/sites-available/geopulse.conf /etc/nginx/sites-available/geopulse.conf.pre-mjs.bak
|
||||||
|
|
||||||
|
ANCHOR_LINE="$(grep -n ' add_header Cache-Control "public, max-age=31536000";' /etc/nginx/sites-available/geopulse.conf.pre-mjs.bak | head -1 | cut -d: -f1)"
|
||||||
|
|
||||||
|
if [[ -n "$ANCHOR_LINE" ]]; then
|
||||||
|
INSERT_LINE=$((ANCHOR_LINE + 1))
|
||||||
|
{
|
||||||
|
head -n "$INSERT_LINE" /etc/nginx/sites-available/geopulse.conf.pre-mjs.bak
|
||||||
|
cat <<'MJSBLOCK'
|
||||||
|
|
||||||
|
location ~* ^/(?!osm/).*\.mjs$ {
|
||||||
|
types {
|
||||||
|
application/javascript mjs;
|
||||||
|
}
|
||||||
|
expires 1y;
|
||||||
|
add_header Cache-Control "public, max-age=31536000";
|
||||||
|
}
|
||||||
|
MJSBLOCK
|
||||||
|
tail -n "+$((INSERT_LINE + 1))" /etc/nginx/sites-available/geopulse.conf.pre-mjs.bak
|
||||||
|
} >/etc/nginx/sites-available/geopulse.conf
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ -n "$ANCHOR_LINE" ]] && grep -q '\.mjs\$' /etc/nginx/sites-available/geopulse.conf && nginx -t >/dev/null 2>&1; then
|
||||||
|
systemctl reload nginx
|
||||||
|
msg_ok "Configured Nginx for .mjs Assets"
|
||||||
|
else
|
||||||
|
cp /etc/nginx/sites-available/geopulse.conf.pre-mjs.bak /etc/nginx/sites-available/geopulse.conf
|
||||||
|
nginx -t >/dev/null 2>&1 && systemctl reload nginx
|
||||||
|
msg_warn "Could not automatically add the .mjs nginx block (customized config?) - add it manually, see the GeoPulse 2.0.0 upgrade notes"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
msg_info "Starting Service"
|
msg_info "Starting Service"
|
||||||
systemctl start geopulse-backend
|
systemctl start geopulse-backend
|
||||||
|
|||||||
@@ -146,6 +146,7 @@ EOF
|
|||||||
rm -rf /opt/tracearr.build
|
rm -rf /opt/tracearr.build
|
||||||
cd /opt/tracearr
|
cd /opt/tracearr
|
||||||
$STD pnpm install --prod --frozen-lockfile --ignore-scripts --filter @tracearr/server...
|
$STD pnpm install --prod --frozen-lockfile --ignore-scripts --filter @tracearr/server...
|
||||||
|
rm -rf "$(pnpm store path)"
|
||||||
$STD chown -R tracearr:tracearr /opt/tracearr
|
$STD chown -R tracearr:tracearr /opt/tracearr
|
||||||
msg_ok "Built Tracearr"
|
msg_ok "Built Tracearr"
|
||||||
|
|
||||||
|
|||||||
+6
-4
@@ -53,10 +53,6 @@ update_deb_based() {
|
|||||||
printf '%s\n' "$INSTALLED_VERSION" >"$HOME/.vaultwarden"
|
printf '%s\n' "$INSTALLED_VERSION" >"$HOME/.vaultwarden"
|
||||||
fi
|
fi
|
||||||
if check_for_gh_release "vaultwarden" "dani-garcia/vaultwarden"; then
|
if check_for_gh_release "vaultwarden" "dani-garcia/vaultwarden"; then
|
||||||
msg_info "Stopping Service"
|
|
||||||
systemctl stop vaultwarden
|
|
||||||
msg_ok "Stopped Service"
|
|
||||||
|
|
||||||
fetch_and_deploy_gh_release "vaultwarden" "dani-garcia/vaultwarden" "tarball" "latest" "/tmp/vaultwarden-src"
|
fetch_and_deploy_gh_release "vaultwarden" "dani-garcia/vaultwarden" "tarball" "latest" "/tmp/vaultwarden-src"
|
||||||
|
|
||||||
msg_info "Updating VaultWarden to $VAULT (Patience)"
|
msg_info "Updating VaultWarden to $VAULT (Patience)"
|
||||||
@@ -64,6 +60,12 @@ update_deb_based() {
|
|||||||
VW_VERSION="$VAULT"
|
VW_VERSION="$VAULT"
|
||||||
export VW_VERSION
|
export VW_VERSION
|
||||||
CARGO_BUILD_JOBS="$(get_parallel_jobs)" CARGO_PROFILE_RELEASE_LTO=false CARGO_PROFILE_RELEASE_CODEGEN_UNITS=16 $STD cargo build --features "sqlite,mysql,postgresql" --release
|
CARGO_BUILD_JOBS="$(get_parallel_jobs)" CARGO_PROFILE_RELEASE_LTO=false CARGO_PROFILE_RELEASE_CODEGEN_UNITS=16 $STD cargo build --features "sqlite,mysql,postgresql" --release
|
||||||
|
msg_ok "Built VaultWarden ${VAULT}"
|
||||||
|
|
||||||
|
msg_info "Stopping Service"
|
||||||
|
systemctl stop vaultwarden
|
||||||
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
if [[ -f /usr/bin/vaultwarden ]]; then
|
if [[ -f /usr/bin/vaultwarden ]]; then
|
||||||
cp target/release/vaultwarden /usr/bin/
|
cp target/release/vaultwarden /usr/bin/
|
||||||
else
|
else
|
||||||
|
|||||||
+9
-12
@@ -33,22 +33,18 @@ function update_script() {
|
|||||||
NODE_VERSION="26" NODE_MODULE="yarn,node-gyp" setup_nodejs
|
NODE_VERSION="26" NODE_MODULE="yarn,node-gyp" setup_nodejs
|
||||||
|
|
||||||
if check_for_gh_release "wikijs" "requarks/wiki-v2"; then
|
if check_for_gh_release "wikijs" "requarks/wiki-v2"; then
|
||||||
#msg_info "Verifying whether ${APP}' new release is v3.x+ and current install uses SQLite."
|
# Installs before February 2025 use SQLite, newer ones PostgreSQL
|
||||||
#SQLITE_INSTALL=$([ -f /opt/wikijs/db.sqlite ] && echo "true" || echo "false")
|
SQLITE_INSTALL=$([[ -f /opt/wikijs/db.sqlite ]] && echo "true" || echo "false")
|
||||||
#if [[ "${SQLITE_INSTALL}" == "true" && "${CHECK_UPDATE_RELEASE}" =~ ^3.* ]]; then
|
|
||||||
# echo "SQLite is not supported in v3.x+, currently there is no update path availble."
|
|
||||||
# exit
|
|
||||||
#fi
|
|
||||||
#msg_ok "There is an update path available for ${APP}"
|
|
||||||
|
|
||||||
msg_info "Stopping Service"
|
msg_info "Stopping Service"
|
||||||
systemctl stop wikijs
|
systemctl stop wikijs
|
||||||
msg_ok "Stopped Service"
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
msg_info "Backing up Data"
|
msg_info "Backing up Data"
|
||||||
mkdir /opt/wikijs-backup
|
mkdir -p /opt/wikijs-backup
|
||||||
#$SQLITE_INSTALL &&
|
if [[ "$SQLITE_INSTALL" == "true" ]]; then
|
||||||
cp /opt/wikijs/db.sqlite /opt/wikijs-backup
|
cp /opt/wikijs/db.sqlite /opt/wikijs-backup
|
||||||
|
fi
|
||||||
cp -R /opt/wikijs/{config.yml,/data} /opt/wikijs-backup
|
cp -R /opt/wikijs/{config.yml,/data} /opt/wikijs-backup
|
||||||
msg_ok "Backed up Data"
|
msg_ok "Backed up Data"
|
||||||
|
|
||||||
@@ -56,8 +52,9 @@ function update_script() {
|
|||||||
|
|
||||||
msg_info "Restoring Data"
|
msg_info "Restoring Data"
|
||||||
cp -R /opt/wikijs-backup/* /opt/wikijs
|
cp -R /opt/wikijs-backup/* /opt/wikijs
|
||||||
#$SQLITE_INSTALL &&
|
if [[ "$SQLITE_INSTALL" == "true" ]]; then
|
||||||
$STD npm rebuild sqlite3
|
$STD npm rebuild sqlite3
|
||||||
|
fi
|
||||||
rm -rf /opt/wikijs-backup
|
rm -rf /opt/wikijs-backup
|
||||||
msg_ok "Restored Data"
|
msg_ok "Restored Data"
|
||||||
|
|
||||||
|
|||||||
@@ -36,7 +36,6 @@ sed -i -e "s|^APP_URL=.*|APP_URL=http://$LOCAL_IP|" \
|
|||||||
-e "s|^DB_USERNAME=$|DB_USERNAME=$MARIADB_DB_USER|" \
|
-e "s|^DB_USERNAME=$|DB_USERNAME=$MARIADB_DB_USER|" \
|
||||||
-e "s|^DB_PASSWORD=$|DB_PASSWORD=$MARIADB_DB_PASS|" .env
|
-e "s|^DB_PASSWORD=$|DB_PASSWORD=$MARIADB_DB_PASS|" .env
|
||||||
export COMPOSER_ALLOW_SUPERUSER=1
|
export COMPOSER_ALLOW_SUPERUSER=1
|
||||||
$STD composer update --no-plugins --no-scripts
|
|
||||||
$STD composer install --no-dev --prefer-dist --no-plugins --no-scripts
|
$STD composer install --no-dev --prefer-dist --no-plugins --no-scripts
|
||||||
$STD php artisan key:generate --force
|
$STD php artisan key:generate --force
|
||||||
$STD php artisan migrate:refresh
|
$STD php artisan migrate:refresh
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ fetch_and_deploy_gh_release "donetick" "donetick/donetick" "prebuild" "latest" "
|
|||||||
|
|
||||||
msg_info "Setup Donetick"
|
msg_info "Setup Donetick"
|
||||||
cd /opt/donetick
|
cd /opt/donetick
|
||||||
|
[[ -f config/selfhosted.yaml ]] || cp config/selfhosted.yaml.example config/selfhosted.yaml
|
||||||
TOKEN=$(openssl rand -hex 16)
|
TOKEN=$(openssl rand -hex 16)
|
||||||
sed -i -e "s/change_this_to_a_secure_random_string_32_characters_long/${TOKEN}/g" config/selfhosted.yaml
|
sed -i -e "s/change_this_to_a_secure_random_string_32_characters_long/${TOKEN}/g" config/selfhosted.yaml
|
||||||
msg_ok "Setup Donetick"
|
msg_ok "Setup Donetick"
|
||||||
|
|||||||
@@ -48,6 +48,7 @@ RestartSec=5
|
|||||||
Type=simple
|
Type=simple
|
||||||
Environment="LOG_LEVEL=info"
|
Environment="LOG_LEVEL=info"
|
||||||
Environment="CAPTCHA_SOLVER=none"
|
Environment="CAPTCHA_SOLVER=none"
|
||||||
|
Environment="LANG=en-US"
|
||||||
WorkingDirectory=/opt/flaresolverr
|
WorkingDirectory=/opt/flaresolverr
|
||||||
ExecStart=/opt/flaresolverr/flaresolverr
|
ExecStart=/opt/flaresolverr/flaresolverr
|
||||||
TimeoutStopSec=30
|
TimeoutStopSec=30
|
||||||
|
|||||||
@@ -19,17 +19,15 @@ $STD apt install -y \
|
|||||||
nginx
|
nginx
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
PG_VERSION="17" PG_MODULES="postgis" setup_postgresql
|
PG_VERSION="18" PG_MODULES="postgis" setup_postgresql
|
||||||
PG_DB_NAME="geopulse" PG_DB_USER="geopulse" PG_DB_EXTENSIONS="postgis,postgis_topology" setup_postgresql_db
|
PG_DB_NAME="geopulse" PG_DB_USER="geopulse" PG_DB_EXTENSIONS="postgis,postgis_topology" setup_postgresql_db
|
||||||
|
|
||||||
msg_info "Generating Security Keys"
|
msg_info "Generating Security Keys"
|
||||||
mkdir -p /opt/geopulse/{backend,keys}
|
mkdir -p /opt/geopulse/{backend,keys}
|
||||||
mkdir -p /etc/geopulse /var/www/geopulse /var/lib/geopulse/dumps
|
mkdir -p /etc/geopulse /var/www/geopulse /var/lib/geopulse/dumps
|
||||||
mkdir -p /var/log/geopulse/{backend,nginx}
|
mkdir -p /var/log/geopulse/{backend,nginx}
|
||||||
openssl genpkey -algorithm RSA -out /opt/geopulse/keys/jwt-private-key.pem 2>/dev/null
|
|
||||||
openssl rsa -pubout -in /opt/geopulse/keys/jwt-private-key.pem -out /opt/geopulse/keys/jwt-public-key.pem 2>/dev/null
|
|
||||||
openssl rand -base64 32 >/opt/geopulse/keys/ai-encryption-key.txt
|
openssl rand -base64 32 >/opt/geopulse/keys/ai-encryption-key.txt
|
||||||
chmod 640 /opt/geopulse/keys/jwt-private-key.pem /opt/geopulse/keys/jwt-public-key.pem /opt/geopulse/keys/ai-encryption-key.txt
|
chmod 640 /opt/geopulse/keys/ai-encryption-key.txt
|
||||||
msg_ok "Generated Security Keys"
|
msg_ok "Generated Security Keys"
|
||||||
|
|
||||||
if [[ "$(uname -m)" == "aarch64" ]]; then
|
if [[ "$(uname -m)" == "aarch64" ]]; then
|
||||||
@@ -62,8 +60,6 @@ GEOPULSE_POSTGRES_PORT=5432
|
|||||||
GEOPULSE_POSTGRES_DB=${PG_DB_NAME}
|
GEOPULSE_POSTGRES_DB=${PG_DB_NAME}
|
||||||
GEOPULSE_POSTGRES_USERNAME=${PG_DB_USER}
|
GEOPULSE_POSTGRES_USERNAME=${PG_DB_USER}
|
||||||
GEOPULSE_POSTGRES_PASSWORD=${PG_DB_PASS}
|
GEOPULSE_POSTGRES_PASSWORD=${PG_DB_PASS}
|
||||||
GEOPULSE_JWT_PRIVATE_KEY_LOCATION=file:/opt/geopulse/keys/jwt-private-key.pem
|
|
||||||
GEOPULSE_JWT_PUBLIC_KEY_LOCATION=file:/opt/geopulse/keys/jwt-public-key.pem
|
|
||||||
GEOPULSE_AI_ENCRYPTION_KEY_LOCATION=file:/opt/geopulse/keys/ai-encryption-key.txt
|
GEOPULSE_AI_ENCRYPTION_KEY_LOCATION=file:/opt/geopulse/keys/ai-encryption-key.txt
|
||||||
QUARKUS_LOG_FILE_ENABLE=true
|
QUARKUS_LOG_FILE_ENABLE=true
|
||||||
QUARKUS_LOG_FILE_PATH=/var/log/geopulse/backend/geopulse.log
|
QUARKUS_LOG_FILE_PATH=/var/log/geopulse/backend/geopulse.log
|
||||||
@@ -128,6 +124,14 @@ server {
|
|||||||
add_header Cache-Control "public, max-age=31536000";
|
add_header Cache-Control "public, max-age=31536000";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
location ~* ^/(?!osm/).*\.mjs$ {
|
||||||
|
types {
|
||||||
|
application/javascript mjs;
|
||||||
|
}
|
||||||
|
expires 1y;
|
||||||
|
add_header Cache-Control "public, max-age=31536000";
|
||||||
|
}
|
||||||
|
|
||||||
location ^~ /osm/tiles/ {
|
location ^~ /osm/tiles/ {
|
||||||
resolver 8.8.8.8 valid=300s;
|
resolver 8.8.8.8 valid=300s;
|
||||||
resolver_timeout 10s;
|
resolver_timeout 10s;
|
||||||
|
|||||||
Reference in new issue
Block a user