Every interactive prompt takes a var_<app>_<name> override and treats a
closed stdin like Enter (`|| true`), so an install keeps going after the
console that started it is gone. Values the script cannot do without end
with exit 64 and name the variable to set. Validation loops stop asking
when nobody can answer instead of spinning on an empty read.
Upstream added PROXCENTER_SKIP_TYPECHECK for builds from a released tag;
the type check alone needs about 3 GB. A 4.6 GB heap on 6 GB of RAM got
the build killed.
An empty answer, or no TTY, ended the install with 64. The prompt now
defaults to 17 and takes var_postgresql_version; the Alpine list is
16/17/18, which is what 3.24 ships.
The lookup ran under pipefail with no timeout: a page without the link
ended the install at `head -1`, a stalled connection hung it for half an
hour, and the fallback version never ran. The installer takes
--accept-eula, --no-swap-check and --no-check-disk; piped answers
shifted with the prompts, and a "y" to the swap question tried swapon
inside the container.
Every failed install this week ran on Debian 12, where the installer
rejects the Podman that ships there. The default is 13; an override now
fails before the 785 MB download.
The Ollama release binaries carry no SYCL build, so the 2.8 GB download
was never used. Its handled failure was also what later systemctl
failures were reported as.
* Storyteller: build the runtime like upstream's Dockerfile
Only the Next.js app was built before. The standalone server now also gets the worker and file-write-worker bundles, the native align prebuilds, the icu-segmentation wasm, @parcel/watcher and kuromoji, plus the env vars that point at them, and whisper.cpp with the tiny.en model is installed through ghost-story's CLI. Packages and the readium version follow upstream (#16628).
Update still used the pre-monorepo paths, and CLEAN_INSTALL wiped /opt/storyteller including the data directory; it now keeps data/, rebuilds the same way and rewrites the unit, so existing installs move over.
* Storyteller: follow the script conventions
python3 ships with the template, update uses ensure_dependencies, no comments.
* Refactor storyteller.sh for improved deployment process
ExecStartPre ran Tdarr_Updater without the - prefix under the default
90 s start timeout, so no route to tdarr.io or a slow download failed
`systemctl enable --now` at the end of the install.
The mise apt repository keeps one version and caches its index for a
day; with near-daily mise releases the index points at a deleted deb
and the install ends with 100 (18 a week). The binary comes from the
release instead, on new containers and on updates that have none yet.
jellyfin-ffmpeg7 failed on mirror hiccups; it goes through the retrying
installer. The machine-learning prompt ended the install without a TTY.
* CryptPad: configure 2026.10.0 through infra.js
2026.10.0 moved the origins, host and ports from config.js to infra.js and no longer derives the sandbox origin, so updated instances pointed the sandbox at the browser's own localhost and hung at 'loading drive' (#18063). Update builds infra.js once from config.js, install writes it directly (the config.js seds matched nothing anymore). install-onlyoffice.sh is now install-office.sh; update runs it only where office was installed.
* CryptPad: repair instances already on 2026.10.0
Instances updated before this fix have no infra.js but already the new version, so the migration would wait for the next release. Update runs again for them, and a config.js from the 2026.10.0 example (no origin at all) gets the container address like a fresh install.
The app reads its version from COMMIT_TAG and falls back to "dev".
Set it in the systemd unit on install, migration and update.
Fixes#18040
Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
* Plane: give Silo its own HOME
Silo 20261018 keeps its config in ~/.silo and stops when that path is not a directory. Running as root, that is /root/.silo, the version file fetch_and_deploy_gh_release writes, so Silo restarted every 5 seconds and the bucket setup found nothing on port 9000 (#18017).
* Plane: track Silo as silo_s3 instead of a HOME override
Renaming the version file is enough: Silo only looks at ~/.silo and ~/.minio.
1.6.0's postinst walks parent PIDs until PID 1 to collect settings. Under pct exec the chain ends at PID 0, and since InvenTree #12995 turned the loop's [ ] into [[ ]] it no longer breaks out there, so the install hung printing ps and strings errors. systemd-run makes systemd the parent.
* Zitadel: Support v1 and v2 Login
* Refactor Zitadel installation and configuration process
Refactor Zitadel installation script to improve configuration and setup processes, including PostgreSQL and Zitadel Login setup.
* Update authorship information in zitadel-install.sh
* Add co-authors to the zitadel.sh file
Updated author information to include co-authors.
* Enhance Zitadel login options descriptions
* Change Zitadel login version check condition
* Change session cookie secret generation method
* Open WebUI: stop when the install fails three times
The retry loop fell through to "Installed Open WebUI" after the third
failure, so the service was created without a binary and the URL never
answered (#18020). The last attempt now runs under the error trap, which
shows uv's output.
* Open WebUI: keep the retry inline, no function in the script
* Open WebUI: same retry on the update paths, and drop the numba constraint
The migration and update loops in ct/openwebui.sh fell through to
"Updated" after three failures just like the install did. The numba
constraint from #11874 guarded openai-whisper's old pin; 0.12.x depends
on faster-whisper and never resolves numba.
* formatting
Since 20261018 Silo uses ~/.silo as its config directory and stops when that path is a file, which the version file named after the app was. Update moves an existing file to ~/.silo_s3.
dl.packager.io is frozen at 1.5.1, and its key only has a SHA1 self-signature, which apt's sqv rejects on Debian 13 since 2026-02-01. Upstream's installer moved to go.packager.io (InvenTree #12824), which carries 1.6.0 for Ubuntu 24.04/26.04 and Debian 13; update migrates installs on those releases and accepts Debian.
start-from-init ran in the background with its output thrown away, and the PID to kill was guessed from lsof after 60 seconds; when the process had already ended, kill got no PID and failed with exit 2. init and setup finish on their own, report their errors, and the service only starts once its user exists.
FlareSolverr hands LANG to Chrome as --accept-lang, which takes a language tag; with the container locale Cloudflare challenges looped unsolved (discussion #17987, FlareSolverr discussion #1717). Update adds the line to existing units.
composer update re-resolved every dependency instead of using the composer.lock the release ships, and Composer now blocks svg-sanitize 0.22.0 while resolving (#17955, Bubka/2FAuth#575). Upstream's own image only runs composer install, as does our update.
2.0.0 serves its MapLibre worker as a .mjs file, which nginx's stock
mime.types doesn't map, breaking the map on both fresh installs and
updates. Also drops the now-dead JWT key generation/env vars (2.0.0
uses opaque session tokens), clears stale frontend build output on
update via CLEAN_INSTALL+KEEP instead of accumulating it forever,
backs up the database before updating, bumps new installs straight
to PostgreSQL 18/PostGIS 3.6, and raises the default disk size after
hitting real space pressure during a live upgrade.
v5 reworks a lot and is still a prerelease; once it is marked stable, install and update would move to it untested. Filter on the v4. tag prefix until v5 is checked (discussion #17952).
Since 1.0.0-rc.1 the command asks for the Application URL when --url is missing. Behind $STD the question is invisible, so install and update hung until Enter was pressed (#17944).
16.9.0 replaced the Tanuki wrapper; a fresh server.sh install now creates onedev.server.service, so the install failed on 'Unit onedev.service not found' (#17943). Upgraded installs keep their onedev.service, so update uses whichever unit exists.
Only GET /api/init creates the scheduled jobs and starts the scheduler; upstream's image calls it after every start, the LXC never did (#17945). An ExecStartPost hook now waits for the app and Redis like app-start.sh, and update adds it to existing installs.
LocalAI resolves meta backends from the GPU vendor it reads out of sysfs,
which is the host's card even with no driver installed in the container,
so llama-cpp became cuda12-llama-cpp and never started (#17908). Force
the default capability unless a CUDA, ROCm or Level Zero runtime is
present; update adds the pin to existing installs.
- Default to Debian 13
- Switch Zammad repo from dl.packager.io (frozen at 7.0.x) to go.packager.io
- Install Elasticsearch 8.x instead of EOL 7.x; drop ingest-attachment plugin (built in)
- Update migrates old containers: Zammad repo, ES 7 -> 8, search index rebuild