Repository navigation
fix(openviking): drop the Alpine install option - #2468
Conversation
Alpine cannot install this application, and no release fixes that: none of the 61 openviking versions on PyPI publishes a musllinux wheel. Every release ships the same five: manylinux x86_64, manylinux aarch64, macOS x86_64, macOS arm64, Windows. tree-sitter-language-pack (pinned by openviking) is the same story - only the pre-1.0 0.13.0 ever had musllinux; every 1.x is manylinux/macOS/ Windows/sdist. So on musl uv builds both projects from the sdists: openviking is a ~645-crate Rust workspace with lto = true, plus the tree-sitter grammar crates. Measured on an Alpine 3.24 container: 15m52s for the install, 13m58s of it inside cargo, and it needs 3 GB RAM and 20 GB disk (the default 8 GB dies with "No space left on device"). Every step also needs another system tool: rustup/build-base, perl for the vendored OpenSSL, patchelf for maturin's library bundling, cmake, kernel headers. And even then the container does not come up. openviking's setup.py extracts only ragfs_python.abi3.so out of the maturin wheel and drops the accompanying ragfs_python.libs/ directory, so the auditwheel-rewritten DT_NEEDED (libgcc_s-<hash>.so.1) cannot be resolved: ImportError: ragfs_python native library is not available: Rust binding not available uvicorn.error - ERROR - Application startup failed. Exiting. On manylinux none of this happens (glibc's libgcc_s is whitelisted, so nothing gets bundled or mangled), which is why the Debian path installs from wheels in about two minutes and works. Changes: - ct/openviking.sh: no OS menu, var_os defaults to debian, Debian-only resource defaults, and the update path is folded into update_script() the way every other single-OS script in this repo does it (update_deb_based/update_alpine/ run_os_update removed). - install/openviking-install.sh: setup_alpine() removed; the Debian steps are top-level again (setup_deb_based/run_os_setup dropped) to match the repo layout. The health check goes from 30x2s to 60x2s: 60 seconds is tight for a 314-package venv start on a small container. - json/openviking.json: the alpine install method is removed; only the default Debian 13 entry stays. The Alpine path can come back if upstream starts publishing musllinux wheels (maturin --compatibility musllinux_1_2) and stops dropping ragfs_python.libs/ from the wheel.
|
✅ Requirements check passed. Thanks for fixing the description — the |
Try this script
COMMUNITY_SCRIPTS_URL=https://raw.githubusercontent.com/mfelipe/ProxmoxVED/fix/drop-alpine-support \
bash -c "$(curl -fsSL https://raw.githubusercontent.com/mfelipe/ProxmoxVED/fix/drop-alpine-support/ct/openviking.sh)"
Against a core branch as wellAdd Useful flags while testing
|
AGENTS.md section 5 allows exactly one function per script pair - update_script() in the CT script - and no helpers of your own. The install script still carried _ov_install_server() and _ov_wait_ready(), which came in with the original script and predate this PR's changes. Both are inlined: dependencies, uv, venv, config, unit file, health loop, doctor, in that order, top to bottom. No behaviour change: same commands, same order, same 120 second health budget.
✍️ Description
Removes the Alpine install option for OpenViking. It cannot work, and no release of the application makes it work: not one of the 61 openviking versions on PyPI has a musllinux wheel. Every release publishes the same five files:
tree-sitter-language-pack, which openviking pins, is the same: only the pre-1.00.13.0ever shipped musllinux, every 1.x is manylinux/macOS/Windows/sdist. So on musl uv compiles two Rust projects from source — openviking is a ~645-crate workspace withlto = true, plus the tree-sitter grammar crates.Measured on an Alpine 3.24 container (1 vCPU, this host):
uv pip install openvikingNo space left on device (os error 28)while linking aws-sdk cratesbuild-base,rustup,perl(vendored OpenSSLConfigure),patchelf(maturin bundling),cmake,linux-headersAnd after all of that the container still does not start. openviking's
setup.pyextracts onlyragfs_python.abi3.sofrom the maturin wheel and discards the accompanyingragfs_python.libs/directory, so the auditwheel-rewrittenDT_NEEDED(libgcc_s-<hash>.so.1) has nothing to resolve against:On manylinux none of this exists — glibc's
libgcc_sis whitelisted, so auditwheel neither bundles nor renames it — which is why the Debian path installs from wheels in about two minutes and works.Changes:
ct/openviking.sh— no OS menu,var_os="${var_os:-debian}", Debian resource defaults, update path folded intoupdate_script()the way every other single-OS script does it (update_deb_based/update_alpine/run_os_updateremoved).install/openviking-install.sh—setup_alpine()removed; the Debian steps are top-level again (setup_deb_based/run_os_setupdropped) to match the repo layout. Health check goes from 30×2 s to 60×2 s: 60 seconds is tight for a 314-package venv to answer its first request on a small container.json/openviking.json— thealpineinstall method is removed; only the default Debian 13 entry remains.Nothing changes for Debian users: same packages, same systemd unit, same config, same update flow.
If upstream ever publishes musllinux wheels (
maturin --compatibility musllinux_1_2) and stops discardingragfs_python.libs/from the wheel, the Alpine option can come back in a few lines — the working patch exists, it just is not worth 15+ minutes, 3 GB and 20 GB per install.🔗 Related PR / Issue
Link: #
✅ Prerequisites (X in brackets)
🏗️ arm64 Support (X in brackets)
🖥️ Tested on (X in brackets)
🛠️ Type of Change (X in brackets)
README,AppName.md,CONTRIBUTING.md, or other docs.🔍 Code & Security Review (X in brackets)
CODE-AUDIT.md&CONTRIBUTING.mdguidelinesAppName.sh,AppName-install.sh,AppName.json)fetch_and_deploy_gh_release,fetch_and_deploy_codeberg_release,fetch_and_deploy_gl_release, orfetch_and_deploy_from_urlinstead ofgit pull.🤖 AI Assistance (X in brackets)
AGENTS.mdand.github/agents/pve-script-creator.agent.mdas guidance, and the output has been reviewed and corrected to match those guidelines.Please describe to which degree, if any, an LLM was used in creating this pull request. Name the model(s) used and, if applicable, the reasoning/thinking effort level (e.g. "Claude Sonnet 4.5, high reasoning, used to draft the install script, then manually reviewed and tested" or "No LLM used"). This is informational, not a penalty — but scripts that are clearly AI-generated and not further revised by the author to match
CODE-AUDIT.md/CONTRIBUTING.mdmay be closed without review.Hermes Agent, model deepseek-flash (provider deepseek), standard reasoning level. Used to trace the Alpine failures end to end (maturin/puccinialin bootstrap, vendored OpenSSL needing perl, disk exhaustion, patchelf, missing ragfs_python.libs), to measure the source build, and to restructure the script to the single-OS layout. Manually reviewed, and the resulting Debian install was run end to end on Proxmox VE (see Additional Information).
📋 Additional Information (optional)
Verified after the change — Proxmox VE 9.2.21, Debian 13.1, unprivileged CT, 2 vCPU / 2048 MB / 8 GB:
The Doctor line reports warnings because
embeddingandvlmstill carry theREPLACE_WITH_YOUR_*_API_KEYplaceholders — that is the documented post-install step, not an install failure.The Alpine figures above come from the same host: Alpine 3.24 container,
openviking0.5.2, 1 vCPU / 3 GB / 20 GB. To confirm the "no musllinux wheel" claim yourself:📦 Application Requirements (for new scripts)
🌐 Source
tree-sitter-language-packfiles: https://pypi.org/project/tree-sitter-language-pack/1.13.3/#filesragfs_python.libs/:setup.py→build_ragfs_python_artifact()rustuppackage (no rust/cargo in v3.23/v3.24): https://pkgs.alpinelinux.org/packages?name=rustup&branch=v3.24