diff --git a/install/split-pro-install.sh b/install/split-pro-install.sh index 7d33df8e2..8bda56f97 100644 --- a/install/split-pro-install.sh +++ b/install/split-pro-install.sh @@ -14,27 +14,14 @@ network_check update_os NODE_VERSION="22" NODE_MODULE="pnpm" setup_nodejs -PG_VERSION="17" setup_postgresql +PG_VERSION="17" PG_MODULES="cron" setup_postgresql msg_info "Installing Dependencies" $STD apt install -y \ - openssl \ - postgresql-17-cron + openssl msg_ok "Installed Dependencies" -PG_DB_NAME="splitpro" PG_DB_USER="splitpro" setup_postgresql_db - -msg_info "Setting up pg_cron" -sed -i "/^#shared_preload_libraries/s/^#//" /etc/postgresql/17/main/postgresql.conf -sed -i "/^shared_preload_libraries/s/''/pg_cron/" /etc/postgresql/17/main/postgresql.conf -systemctl restart postgresql -$STD sudo -u postgres psql -c "ALTER SYSTEM SET cron.database_name = 'splitpro'" -$STD sudo -u postgres psql -c "ALTER SYSTEM SET cron.timezone = 'UTC'" -systemctl restart postgresql -$STD sudo -u postgres psql -d splitpro -c "CREATE EXTENSION IF NOT EXISTS pg_cron" -$STD sudo -u postgres psql -d splitpro -c "GRANT USAGE ON SCHEMA cron TO splitpro" -$STD sudo -u postgres psql -d splitpro -c "GRANT ALL ON ALL TABLES IN SCHEMA cron TO splitpro" -msg_ok "Setup pg_cron complete" +PG_DB_NAME="splitpro" PG_DB_USER="splitpro" PG_DB_EXTENSIONS="pg_cron" setup_postgresql_db fetch_and_deploy_gh_release "split-pro" "oss-apps/split-pro" "tarball" "latest" "/opt/split-pro" diff --git a/misc/tools.func b/misc/tools.func index e2486f636..52529da48 100644 --- a/misc/tools.func +++ b/misc/tools.func @@ -6366,8 +6366,24 @@ EOF # setup_postgresql # Uses distro package (recommended) # USE_PGDG_REPO=true setup_postgresql # Uses official PGDG repo # USE_PGDG_REPO=true PG_VERSION="17" setup_postgresql # Specific version from PGDG +# PG_VERSION="17" PG_MODULES="cron" setup_postgresql # With pg_cron module # ------------------------------------------------------------------------------ +# Internal helper: Configure shared_preload_libraries for pg_cron +_configure_pg_cron_preload() { + local modules="${1:-}" + [[ -z "$modules" ]] && return 0 + if [[ ",$modules," == *",cron,"* ]]; then + local current_libs + current_libs=$(sudo -u postgres psql -tAc "SHOW shared_preload_libraries;" 2>/dev/null || echo "") + if [[ "$current_libs" != *"pg_cron"* ]]; then + local new_libs="${current_libs:+${current_libs},}pg_cron" + $STD sudo -u postgres psql -c "ALTER SYSTEM SET shared_preload_libraries = '${new_libs}';" + $STD systemctl restart postgresql + fi + fi +} + function setup_postgresql() { local PG_VERSION="${PG_VERSION:-16}" local PG_MODULES="${PG_MODULES:-}" @@ -6406,6 +6422,7 @@ function setup_postgresql() { $STD apt install -y "postgresql-${CURRENT_PG_VERSION}-${module}" 2>/dev/null || true done fi + _configure_pg_cron_preload "$PG_MODULES" return 0 fi @@ -6441,6 +6458,7 @@ function setup_postgresql() { $STD apt install -y "postgresql-${INSTALLED_VERSION}-${module}" 2>/dev/null || true done fi + _configure_pg_cron_preload "$PG_MODULES" return 0 fi @@ -6462,6 +6480,7 @@ function setup_postgresql() { $STD apt install -y "postgresql-${PG_VERSION}-${module}" 2>/dev/null || true done fi + _configure_pg_cron_preload "$PG_MODULES" return 0 fi @@ -6580,6 +6599,7 @@ function setup_postgresql() { } done fi + _configure_pg_cron_preload "$PG_MODULES" } # ------------------------------------------------------------------------------ @@ -6598,6 +6618,7 @@ function setup_postgresql() { # PG_DB_NAME="immich" PG_DB_USER="immich" PG_DB_EXTENSIONS="pgvector" setup_postgresql_db # PG_DB_NAME="ghostfolio" PG_DB_USER="ghostfolio" PG_DB_GRANT_SUPERUSER="true" setup_postgresql_db # PG_DB_NAME="adventurelog" PG_DB_USER="adventurelog" PG_DB_EXTENSIONS="postgis" setup_postgresql_db +# PG_DB_NAME="splitpro" PG_DB_USER="splitpro" PG_DB_EXTENSIONS="pg_cron" setup_postgresql_db # # Variables: # PG_DB_NAME - Database name (required) @@ -6638,6 +6659,15 @@ function setup_postgresql_db() { done fi + # Configure pg_cron if extension was requested + if [[ -n "${PG_DB_EXTENSIONS:-}" ]] && [[ ",${PG_DB_EXTENSIONS//[[:space:]]/}," == *",pg_cron,"* ]]; then + $STD sudo -u postgres psql -c "ALTER SYSTEM SET cron.database_name = '${PG_DB_NAME}';" + $STD sudo -u postgres psql -c "ALTER SYSTEM SET cron.timezone = 'UTC';" + $STD systemctl restart postgresql + $STD sudo -u postgres psql -d "$PG_DB_NAME" -c "GRANT USAGE ON SCHEMA cron TO ${PG_DB_USER};" + $STD sudo -u postgres psql -d "$PG_DB_NAME" -c "GRANT ALL ON ALL TABLES IN SCHEMA cron TO ${PG_DB_USER};" + fi + # ALTER ROLE settings for Django/Rails compatibility (unless skipped) if [[ "${PG_DB_SKIP_ALTER_ROLE:-}" != "true" ]]; then $STD sudo -u postgres psql -c "ALTER ROLE $PG_DB_USER SET client_encoding TO 'utf8';" @@ -8150,8 +8180,8 @@ function fetch_and_deploy_gl_release() { ensure_dependencies jq local repo_encoded - repo_encoded=$(python3 -c "import urllib.parse, sys; print(urllib.parse.quote(sys.argv[1], safe=''))" "$repo" 2>/dev/null \ - || echo "$repo" | sed 's|/|%2F|g') + repo_encoded=$(python3 -c "import urllib.parse, sys; print(urllib.parse.quote(sys.argv[1], safe=''))" "$repo" 2>/dev/null || + echo "$repo" | sed 's|/|%2F|g') local api_base="https://gitlab.com/api/v4/projects/$repo_encoded/releases" local api_url @@ -8319,7 +8349,9 @@ function fetch_and_deploy_gl_release() { if [[ -n "$asset_pattern" ]]; then for u in $assets; do case "${u##*/}" in $asset_pattern) - url_match="$u"; break ;; + url_match="$u" + break + ;; esac done fi @@ -8392,7 +8424,9 @@ function fetch_and_deploy_gl_release() { for u in $(_gl_asset_urls "$json"); do filename_candidate="${u##*/}" case "$filename_candidate" in $pattern) - asset_url="$u"; break ;; + asset_url="$u" + break + ;; esac done fi @@ -8501,7 +8535,9 @@ function fetch_and_deploy_gl_release() { for u in $(_gl_asset_urls "$json"); do filename_candidate="${u##*/}" case "$filename_candidate" in $pattern) - asset_url="$u"; break ;; + asset_url="$u" + break + ;; esac done fi @@ -8539,4 +8575,4 @@ function fetch_and_deploy_gl_release() { echo "$version" >"$version_file" msg_ok "Deployed: $app ($version)" rm -rf "$tmpdir" -} \ No newline at end of file +}