Compare commits

..

13 Commits

Author SHA1 Message Date
github-actions[bot] 7c0896f80f Update CHANGELOG.md 2026-06-16 14:43:49 +00:00
Michel Roegl-Brunner 4d4e1d7654 fix storyteller Yarn 4 install mismatch (#15140)
Enable Corepack and run Storyteller install/build commands through corepack yarn so the script honors upstream packageManager and avoids Yarn 1 failures.
2026-06-16 16:43:27 +02:00
community-scripts-pr-app[bot] 6b25e35ecf Update CHANGELOG.md (#15146)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-06-16 14:05:03 +00:00
Michel Roegl-Brunner 6c23883d94 Fix InvoiceShelf install/update package manager execution. (#15141)
Use Corepack-managed Yarn when available so installs respect upstream packageManager metadata and avoid Yarn classic mismatch failures during both fresh installs and updates.
2026-06-16 16:04:22 +02:00
community-scripts-pr-app[bot] e08719ac3f Update CHANGELOG.md (#15145)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-06-16 13:22:46 +00:00
Michel Roegl-Brunner 0683d4942c fix openobserve root password policy failure (#15137)
Generate a policy-compliant ZO_ROOT_USER_PASSWORD during install so OpenObserve can start reliably on versions that require lower/upper/digit/special character complexity.
2026-06-16 15:22:06 +02:00
community-scripts-pr-app[bot] b0896dbdeb Update .app files (#15139)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2026-06-16 14:52:29 +02:00
community-scripts-pr-app[bot] f1ee2a2b91 Update CHANGELOG.md (#15138)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-06-16 12:28:50 +00:00
push-app-to-main[bot] 691ce33090 Add feishin (ct) (#15130)
Co-authored-by: push-app-to-main[bot] <203845782+push-app-to-main[bot]@users.noreply.github.com>
2026-06-16 14:28:15 +02:00
community-scripts-pr-app[bot] 5f5881c757 Update CHANGELOG.md (#15132)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-06-16 11:26:58 +00:00
push-app-to-main[bot] af7e83300f Add kiwix (ct) (#15131)
Co-authored-by: push-app-to-main[bot] <203845782+push-app-to-main[bot]@users.noreply.github.com>
2026-06-16 13:26:24 +02:00
Michel Roegl-Brunner 29c25a0ab8 bot blacklist 2026-06-16 13:01:26 +02:00
Michel Roegl-Brunner e60c1f31c2 Stop spinner for deleted/disabled info messages
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-16 11:11:23 +02:00
16 changed files with 359 additions and 25 deletions
+1
View File
@@ -28,6 +28,7 @@ jobs:
const allowedBots = [ const allowedBots = [
"push-app-to-main[bot]", "push-app-to-main[bot]",
"push-app-to-main", "push-app-to-main",
"community-scripts-pr-app"
]; ];
if (allowedBots.includes(author)) { if (allowedBots.includes(author)) {
+11 -1
View File
@@ -487,7 +487,17 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
### 🆕 New Scripts ### 🆕 New Scripts
- Add runtime status guard and deleted script stubs [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#15125](https://github.com/community-scripts/ProxmoxVE/pull/15125)) - Feishin ([#15130](https://github.com/community-scripts/ProxmoxVE/pull/15130))
- Kiwix ([#15131](https://github.com/community-scripts/ProxmoxVE/pull/15131))
- Add runtime status guard and deleted script stubs [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#15125](https://github.com/community-scripts/ProxmoxVE/pull/15125))
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- fix storyteller install failure with yarn 4 corepack [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#15140](https://github.com/community-scripts/ProxmoxVE/pull/15140))
- Fix InvoiceShelf install/update Yarn package manager mismatch [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#15141](https://github.com/community-scripts/ProxmoxVE/pull/15141))
- fix: generate policy-compliant OpenObserve root password [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#15137](https://github.com/community-scripts/ProxmoxVE/pull/15137))
## 2026-06-15 ## 2026-06-15
-15
View File
@@ -1,15 +0,0 @@
#!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2026 community-scripts ORG
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
APP="Ente"
header_info "$APP"
variables
color
msg_error "This script is no longer available in community-scripts."
msg_error "This script was removed and cannot be installed or updated."
msg_warn "More info: https://community-scripts.org/scripts/ente"
exit 1
+77
View File
@@ -0,0 +1,77 @@
#!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2026 community-scripts ORG
# Author: MickLesk (CanbiZ)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/jeffvli/feishin
APP="Feishin"
var_tags="${var_tags:-music;player;streaming}"
var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-4096}"
var_disk="${var_disk:-8}"
var_os="${var_os:-debian}"
var_version="${var_version:-13}"
var_arm64="${var_arm64:-no}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -d /opt/feishin ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
if check_for_gh_release "feishin" "jeffvli/feishin"; then
create_backup /opt/feishin/.env
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "feishin" "jeffvli/feishin" "tarball"
msg_info "Rebuilding Feishin Web"
cd /opt/feishin
#PNPM_VERSION=$(jq -r '.packageManager | ltrimstr("pnpm@")' /opt/feishin/package.json)
$STD corepack enable
$STD corepack prepare "pnpm@10" --activate
$STD pnpm install
$STD pnpm run build:web
msg_ok "Rebuilt Feishin Web"
restore_backup
msg_info "Publishing Web Assets"
rm -rf /usr/share/nginx/html
mkdir -p /usr/share/nginx/html
cp -r /opt/feishin/out/web/. /usr/share/nginx/html/
set -a
source /opt/feishin/.env
set +a
envsubst </opt/feishin/settings.js.template >/etc/nginx/conf.d/settings.js
envsubst '${PUBLIC_PATH}' </opt/feishin/ng.conf.template >/etc/nginx/sites-available/feishin
ln -sf /etc/nginx/sites-available/feishin /etc/nginx/sites-enabled/feishin
rm -f /etc/nginx/sites-enabled/default
systemctl restart nginx
msg_ok "Published Web Assets"
msg_ok "Updated successfully!"
fi
exit
}
start
build_container
description
msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:9180${CL}"
+6
View File
@@ -0,0 +1,6 @@
____ __ __
/ __ )____ ____ / /__/ / ____ ________
/ __ / __ \/ __ \/ //_/ / / __ \/ ___/ _ \
/ /_/ / /_/ / /_/ / ,< / /___/ /_/ / / / __/
/_____/\____/\____/_/|_/_____/\____/_/ \___/
+6
View File
@@ -0,0 +1,6 @@
______ _ __ _
/ ____/__ (_)____/ /_ (_)___
/ /_ / _ \/ / ___/ __ \/ / __ \
/ __/ / __/ (__ ) / / / / / / /
/_/ \___/_/____/_/ /_/_/_/ /_/
+6
View File
@@ -0,0 +1,6 @@
__ __ _ _
/ //_/(_) __(_) __
/ ,< / / | /| / / / |/_/
/ /| |/ /| |/ |/ / /> <
/_/ |_/_/ |__/|__/_/_/|_|
+6
View File
@@ -0,0 +1,6 @@
__ _ __ __ __ __ ___
/ / (_) /____ / / / / / |/ /
/ / / / __/ _ \/ / / / / /|_/ /
/ /___/ / /_/ __/ /___/ /___/ / / /
/_____/_/\__/\___/_____/_____/_/ /_/
+8 -2
View File
@@ -52,8 +52,14 @@ function update_script() {
msg_info "Updating Application" msg_info "Updating Application"
cd /opt/invoiceshelf cd /opt/invoiceshelf
$STD composer install --no-dev --optimize-autoloader $STD composer install --no-dev --optimize-autoloader
$STD yarn install if command -v corepack >/dev/null 2>&1; then
$STD yarn build $STD corepack enable
$STD corepack yarn install
$STD corepack yarn build
else
$STD yarn install
$STD yarn build
fi
$STD php artisan migrate --force $STD php artisan migrate --force
$STD php artisan optimize:clear $STD php artisan optimize:clear
chown -R www-data:www-data /opt/invoiceshelf chown -R www-data:www-data /opt/invoiceshelf
+75
View File
@@ -0,0 +1,75 @@
#!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2026 community-scripts ORG
# Author: MickLesk
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/kiwix/kiwix-tools
APP="Kiwix"
var_tags="${var_tags:-documentation;offline}"
var_cpu="${var_cpu:-1}"
var_ram="${var_ram:-512}"
var_disk="${var_disk:-4}"
var_os="${var_os:-ubuntu}"
var_version="${var_version:-24.04}"
var_arm64="${var_arm64:-no}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if ! dpkg -s kiwix-tools &>/dev/null; then
msg_error "No ${APP} Installation Found!"
exit
fi
CURRENT=$(dpkg-query -W -f='${Version}' kiwix-tools 2>/dev/null)
msg_info "Updating Package Index"
$STD apt update
msg_ok "Updated Package Index"
CANDIDATE=$(apt-cache policy kiwix-tools | awk '/Candidate:/{print $2}')
if [[ -z "$CANDIDATE" || "$CANDIDATE" == "(none)" ]]; then
msg_error "No Candidate Version Found for kiwix-tools"
exit
fi
if [[ "$CURRENT" == "$CANDIDATE" ]]; then
echo "${CURRENT}" >/root/.kiwix
msg_ok "Already on latest version: ${CURRENT}"
exit
fi
msg_info "Stopping Service"
systemctl stop kiwix-serve
msg_ok "Stopped Service"
msg_info "Updating Kiwix-Tools"
$STD apt install -y --only-upgrade kiwix-tools
RELEASE=$(dpkg-query -W -f='${Version}' kiwix-tools 2>/dev/null)
echo "${RELEASE}" >/root/.kiwix
msg_ok "Updated Kiwix-Tools"
msg_ok "Updated successfully from ${CURRENT} to ${RELEASE}!"
msg_info "Starting Service"
systemctl start kiwix-serve
msg_ok "Started Service"
exit
}
start
build_container
description
msg_ok "Completed successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8080${CL}"
+3 -2
View File
@@ -48,13 +48,14 @@ function update_script() {
msg_info "Rebuilding Storyteller" msg_info "Rebuilding Storyteller"
cd /opt/storyteller cd /opt/storyteller
export NODE_OPTIONS="--max-old-space-size=4096" export NODE_OPTIONS="--max-old-space-size=4096"
$STD yarn install --network-timeout 600000 $STD corepack enable
$STD corepack yarn install --network-timeout 600000
$STD gcc -g -fPIC -rdynamic -shared web/sqlite/uuid.c -o web/sqlite/uuid.c.so $STD gcc -g -fPIC -rdynamic -shared web/sqlite/uuid.c -o web/sqlite/uuid.c.so
export CI=1 export CI=1
export NODE_ENV=production export NODE_ENV=production
export NEXT_TELEMETRY_DISABLED=1 export NEXT_TELEMETRY_DISABLED=1
export SQLITE_NATIVE_BINDING=/opt/storyteller/node_modules/better-sqlite3/build/Release/better_sqlite3.node export SQLITE_NATIVE_BINDING=/opt/storyteller/node_modules/better-sqlite3/build/Release/better_sqlite3.node
$STD yarn workspaces foreach -Rpt --from @storyteller-platform/web --exclude @storyteller-platform/eslint run build $STD corepack yarn workspaces foreach -Rpt --from @storyteller-platform/web --exclude @storyteller-platform/eslint run build
mkdir -p /opt/storyteller/web/.next/standalone/web/.next/static mkdir -p /opt/storyteller/web/.next/standalone/web/.next/static
cp -rT /opt/storyteller/web/.next/static /opt/storyteller/web/.next/standalone/web/.next/static cp -rT /opt/storyteller/web/.next/static /opt/storyteller/web/.next/standalone/web/.next/static
if [[ -d /opt/storyteller/web/public ]]; then if [[ -d /opt/storyteller/web/public ]]; then
+68
View File
@@ -0,0 +1,68 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2026 community-scripts ORG
# Author: MickLesk (CanbiZ)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/jeffvli/feishin
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
color
verb_ip6
catch_errors
setting_up_container
network_check
update_os
msg_info "Installing Dependencies"
$STD apt install -y \
nginx \
gettext-base
msg_ok "Installed Dependencies"
NODE_VERSION="24" setup_nodejs
fetch_and_deploy_gh_release "feishin" "jeffvli/feishin" "tarball"
msg_info "Building Feishin Web"
cd /opt/feishin
#PNPM_VERSION=$(jq -r '.packageManager | ltrimstr("pnpm@")' /opt/feishin/package.json)
$STD corepack enable
$STD corepack prepare "pnpm@10" --activate
$STD pnpm install
$STD pnpm run build:web
msg_ok "Built Feishin Web"
msg_info "Configuring Environment"
cat <<EOF >/opt/feishin/.env
SERVER_NAME=jellyfin
SERVER_LOCK=false
SERVER_TYPE=jellyfin
SERVER_URL=http://localhost:8096
REMOTE_URL=
LEGACY_AUTHENTICATION=false
ANALYTICS_DISABLED=false
PUBLIC_PATH=/
EOF
msg_ok "Configured Environment"
msg_info "Publishing Web Assets"
rm -rf /usr/share/nginx/html
mkdir -p /usr/share/nginx/html
cp -r /opt/feishin/out/web/. /usr/share/nginx/html/
set -a
source /opt/feishin/.env
set +a
envsubst </opt/feishin/settings.js.template >/etc/nginx/conf.d/settings.js
envsubst '${PUBLIC_PATH}' </opt/feishin/ng.conf.template >/etc/nginx/sites-available/feishin
ln -sf /etc/nginx/sites-available/feishin /etc/nginx/sites-enabled/feishin
rm -f /etc/nginx/sites-enabled/default
systemctl enable -q --now nginx
systemctl reload nginx
msg_ok "Published Web Assets"
motd_ssh
customize
cleanup_lxc
+8 -2
View File
@@ -39,8 +39,14 @@ sed -i "s|^DB_USERNAME=.*|DB_USERNAME=${PG_DB_USER}|" .env
sed -i "s|^DB_PASSWORD=.*|DB_PASSWORD=${PG_DB_PASS}|" .env sed -i "s|^DB_PASSWORD=.*|DB_PASSWORD=${PG_DB_PASS}|" .env
COMPOSER_ALLOW_SUPERUSER=1 $STD composer install --no-dev --optimize-autoloader --no-interaction COMPOSER_ALLOW_SUPERUSER=1 $STD composer install --no-dev --optimize-autoloader --no-interaction
$STD php artisan key:generate $STD php artisan key:generate
$STD yarn install if command -v corepack >/dev/null 2>&1; then
$STD yarn build $STD corepack enable
$STD corepack yarn install
$STD corepack yarn build
else
$STD yarn install
$STD yarn build
fi
mkdir -p storage/framework/{cache,sessions,views} storage/logs bootstrap/cache mkdir -p storage/framework/{cache,sessions,views} storage/logs bootstrap/cache
chown -R www-data:www-data /opt/invoiceshelf chown -R www-data:www-data /opt/invoiceshelf
chmod -R 775 storage bootstrap/cache chmod -R 775 storage bootstrap/cache
+80
View File
@@ -0,0 +1,80 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2026 community-scripts ORG
# Author: MickLesk (CanbiZ) | tewalds
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/kiwix/kiwix-tools
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
color
verb_ip6
catch_errors
setting_up_container
network_check
update_os
msg_info "Installing Dependencies"
$STD apt install -y software-properties-common
msg_ok "Installed Dependencies"
msg_info "Adding Kiwix PPA"
add-apt-repository -y ppa:kiwixteam/release >>"$(get_active_logfile)" 2>&1
$STD apt update
msg_ok "Added Kiwix PPA"
msg_info "Installing Kiwix-Tools"
$STD apt install -y kiwix-tools
RELEASE=$(dpkg -s kiwix-tools 2>/dev/null | awk '/^Version:/{print $2}')
mkdir -p /data
echo "${RELEASE}" >/root/.kiwix
msg_ok "Installed Kiwix-Tools"
msg_info "Downloading Kiwix Test Archive"
ZIM_BASE_URL="https://download.kiwix.org/zim/wikipedia"
ZIM_FILE="$(CURL_TIMEOUT=60 CURL_CONNECT_TO=15 curl_with_retry "${ZIM_BASE_URL}/" "-" |
grep -oE 'href="speedtest_en_blob_[0-9]{4}-[0-9]{2}\.zim"' |
sed -E 's/^href="|"$//g' |
sort -V |
tail -n 1)" || true
if [[ -z "${ZIM_FILE}" ]]; then
msg_warn "No Kiwix speedtest ZIM archive found - skipping optional download"
else
ZIM_URL="${ZIM_BASE_URL}/${ZIM_FILE}"
ZIM_TEMP="/data/.${ZIM_FILE}.tmp"
ZIM_TARGET="/data/${ZIM_FILE}"
if ! CURL_TIMEOUT=120 CURL_CONNECT_TO=15 curl_with_retry "${ZIM_URL}" "${ZIM_TEMP}"; then
rm -f "${ZIM_TEMP}"
msg_warn "Failed to download Kiwix ZIM archive - skipping optional download"
ZIM_FILE=""
elif [[ ! -s "${ZIM_TEMP}" ]]; then
rm -f "${ZIM_TEMP}"
msg_warn "Downloaded Kiwix ZIM archive is empty - skipping optional download"
ZIM_FILE=""
else
mv "${ZIM_TEMP}" "${ZIM_TARGET}"
msg_ok "Downloaded Kiwix Test Archive (${ZIM_FILE})"
fi
fi
msg_info "Creating Service"
cat <<'EOF' >/etc/systemd/system/kiwix-serve.service
[Unit]
Description=Kiwix ZIM Server
After=network.target
[Service]
Type=simple
ExecStart=/bin/sh -c 'exec /usr/bin/kiwix-serve --port 8080 /data/*.zim'
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now kiwix-serve
msg_ok "Created Service"
motd_ssh
customize
cleanup_lxc
+1 -1
View File
@@ -17,7 +17,7 @@ msg_info "Installing OpenObserve"
mkdir -p /opt/openobserve/data mkdir -p /opt/openobserve/data
RELEASE=$(get_latest_github_release "openobserve/openobserve") RELEASE=$(get_latest_github_release "openobserve/openobserve")
tar zxf <(curl -fsSL https://downloads.openobserve.ai/releases/openobserve/v$RELEASE/openobserve-v$RELEASE-linux-amd64.tar.gz) -C /opt/openobserve tar zxf <(curl -fsSL https://downloads.openobserve.ai/releases/openobserve/v$RELEASE/openobserve-v$RELEASE-linux-amd64.tar.gz) -C /opt/openobserve
ROOT_PASS=$(openssl rand -base64 18 | cut -c1-13) ROOT_PASS="$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c9)Aa1!"
cat <<EOF >/opt/openobserve/data/.env cat <<EOF >/opt/openobserve/data/.env
ZO_ROOT_USER_EMAIL = "admin@example.com" ZO_ROOT_USER_EMAIL = "admin@example.com"
+3 -2
View File
@@ -32,7 +32,8 @@ fetch_and_deploy_gl_release "storyteller" "storyteller-platform/storyteller" "ta
msg_info "Setting up Storyteller" msg_info "Setting up Storyteller"
cd /opt/storyteller cd /opt/storyteller
$STD yarn install --network-timeout 600000 $STD corepack enable
$STD corepack yarn install --network-timeout 600000
$STD gcc -g -fPIC -rdynamic -shared web/sqlite/uuid.c -o web/sqlite/uuid.c.so $STD gcc -g -fPIC -rdynamic -shared web/sqlite/uuid.c -o web/sqlite/uuid.c.so
STORYTELLER_SECRET_KEY=$(openssl rand -base64 32) STORYTELLER_SECRET_KEY=$(openssl rand -base64 32)
cat <<EOF >/opt/storyteller/.env cat <<EOF >/opt/storyteller/.env
@@ -58,7 +59,7 @@ export CI=1
export NODE_ENV=production export NODE_ENV=production
export NEXT_TELEMETRY_DISABLED=1 export NEXT_TELEMETRY_DISABLED=1
export SQLITE_NATIVE_BINDING=/opt/storyteller/node_modules/better-sqlite3/build/Release/better_sqlite3.node export SQLITE_NATIVE_BINDING=/opt/storyteller/node_modules/better-sqlite3/build/Release/better_sqlite3.node
$STD yarn workspaces foreach -Rpt --from @storyteller-platform/web --exclude @storyteller-platform/eslint run build $STD corepack yarn workspaces foreach -Rpt --from @storyteller-platform/web --exclude @storyteller-platform/eslint run build
mkdir -p /opt/storyteller/web/.next/standalone/web/.next/static mkdir -p /opt/storyteller/web/.next/standalone/web/.next/static
cp -rT /opt/storyteller/web/.next/static /opt/storyteller/web/.next/standalone/web/.next/static cp -rT /opt/storyteller/web/.next/static /opt/storyteller/web/.next/standalone/web/.next/static
if [[ -d /opt/storyteller/web/public ]]; then if [[ -d /opt/storyteller/web/public ]]; then