Commit Graph
5617 Commits
Author SHA1 Message Date
MacRimi 023350d7e1 apply sentence spacing to every translation provider 2026-09-09 09:03:09 +02:00
ProxMenuxBot c6fde98a80 chore(lang): auto-rebuild translation cache
Source: 53c27f8
Triggered by: push
2026-09-09 06:56:26 +00:00
MacRimiandGitHub 53c27f89dc Merge pull request #340 from f3rs3n/fix/protect-stacked-system-disks
fix(storage): strengthen system-disk protection before formatting
2026-09-09 08:54:02 +02:00
github-actions[bot] 5ec5e11dae Update AppImage beta build (2026-09-09 06:01:22) 2026-09-09 06:01:22 +00:00
MacRimi fb6c9bf22e capitalize audit socket message in Spanish 2026-09-08 21:12:55 +02:00
ProxMenuxBot 68348e0558 chore(lang): auto-rebuild translation cache
Source: da8a480
Triggered by: push
2026-09-08 19:07:06 +00:00
MacRimiandClaude Opus 5 da8a480eff Add audit and reports page, and a change journal
ProxMenux modifies the host: it rewrites configuration files, installs packages, enables services. Until now nobody could say afterwards what had changed, and showing the script does not answer that question — a four-hundred-line function may alter two values, and the reader has no way to know which two. This adds the two halves of an answer.

The change journal records what ProxMenux does as it does it. Eleven bash primitives capture the previous state, apply the change and record it in the same step, writing to a spool that the Monitor reads back. One hundred and thirteen functions across twenty-five scripts are instrumented, covering post-install, shared storage, security tooling, container conversions, disk operations and the PVE 8 to 9 upgrade path. The page shows the difference — rotate 7 becoming rotate 14 — and never the script. Restore and backup scripts are deliberately left out: a restore puts the host back to a state some other script already recorded.

The Audit and reports page answers the other half: what state is this host in, regardless of who put it there. Forty-three checks across seven areas read the host and classify each result as critical, warning, observation, conformant, unverified or not applicable, with the evidence they read attached to each one. A declared policy lets the reader say what this particular host is expected to do — which guests must have a backup, which storages are essential — so the report judges the host against its own intent rather than a generic template. An inventory records the hardware, network and guest topology behind those readings, a comparison shows what moved between two runs, and six report profiles produce a printable document scoped to what the reader needs. Everything is available in the eight supported languages.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-08 21:06:04 +02:00
ProxMenuxBot ae75508eff chore(lang): auto-rebuild translation cache
Source: 1c44842
Triggered by: push
2026-09-08 18:41:22 +00:00
ProxMenuxBot fe9afd90c4 chore(lang): auto-rebuild translation cache
Source: 34041b8
Triggered by: push
2026-09-08 18:39:33 +00:00
MacRimiandGitHub 1c4484266d Merge pull request #341 from f3rs3n/fix/validate-pending-restore
fix(backup): reject incomplete pending restore staging
2026-09-08 20:38:54 +02:00
MacRimiandGitHub 34041b87c6 Merge pull request #339 from f3rs3n/fix/preserve-partition-tables
fix(storage): preserve partition tables when removing signatures
2026-09-08 20:38:26 +02:00
martino cc2983a398 fix(backup): reject incomplete pending restore staging 2026-09-07 12:59:57 +02:00
martino fa4e8fd087 fix(storage): strengthen system-disk protection before formatting 2026-09-07 11:54:28 +02:00
martino 1b592317a1 fix(storage): preserve partition tables when clearing signatures 2026-09-06 23:24:18 +02:00
MacRimiandGitHub b4e34d0902 Merge pull request #338 from MacRimi/fix/pr337-docker-update-hardening
Fix Docker app version tracking, cache consistency and delegated updates
2026-09-05 17:02:08 +02:00
MacRimi 337cb188c3 Fix Docker app version tracking, cache consistency and delegated updates 2026-09-05 17:01:02 +02:00
ProxMenuxBot f1d8b299db chore(i18n): auto-fill missing translations in messages/{locale}/common.json
Source: 3a49648
Triggered by: push
2026-09-05 14:56:42 +00:00
MacRimiandGitHub 3a49648f0d Merge pull request #337 from byGarcia/feature/docker-remote-image-version
Report the version a Docker image would install, and let the apps inside it be registered
2026-09-05 16:55:07 +02:00
MacRimi 19c46a86d7 Merge develop into PR #337 and resolve shared app cache conflict 2026-09-05 16:51:41 +02:00
MacRimi 6644b62f63 Improve LXC updater selection, error handling and dashboard consistency 2026-09-05 16:10:31 +02:00
byGarcia de72e18a77 feat(docker): name containerised applications and the versions they run
An LXC running its workload in Docker could not answer two questions it
already had the data for: which application is in there, and whether a
newer version exists.

**Which version is available.** The Updates tab resolved that number only
for docker.io, and only when a version tag happened to share the digest of
the tag in use. On ghcr.io, lscr.io or quay.io the row said "New image
available" with no number at all. The image a pull would install carries
its own version label, so it is now read from the registry by digest —
over the same protocol and Bearer challenge the digest comparison already
uses, and through the same label lookup the installed version uses, now
shared as _docker_version_from_labels.

The question this answers is the one the tab asks: what do I get if I
re-pull this tag. Not "what is the newest upstream release", which is a
different number whenever a tag is pinned or the publisher tags releases
differently from images.

Docker Hub keeps priority on docker.io: its tag API is not a pull and does
not spend the anonymous pull-rate budget, and official images carry no
labels for the registry path to read. The digest still decides whether an
update exists; this only names it, and declines to name it when the answer
would be a guess — no build for this platform, no labels, an unreadable
manifest, a moving tag, a rebuild of the same version, or two sides whose
versions came from different label keys. Each refusal is recorded in
available_version_source.

Attestation manifests are skipped explicitly: they advertise
unknown/unknown and their config blob is a provenance document, not an
image. Every document is fetched by digest and verified against it, the
config read is bounded, and it is cached per digest, which never changes
content. The CDN redirect is followed by hand, dropping Authorization:
urllib re-sends it to the redirect target and signed-URL storage rejects a
second auth mechanism.

**Which application it is.** The probe already read "1.37.2" out of a
Vaultwarden container and get_suggestions discarded it, so the panel
answered "No new applications were detected" about an application whose
version it had just measured. Containerised applications are now offered
for registration like any other, with their name, logo, published ports
and installed version.

What they do not get is an update path of their own, because they do not
have one: updating Vaultwarden means pulling and recreating its image. A
new update_via=docker marker records that delegation, so one release stays
one badge, one notification and one button. The marker is validated rather
than inferred from installed_via, since docker_exec with an upstream is a
legitimate registration someone may already rely on; combining it with an
upstream is rejected instead of silently stripped, because registering an
app that checks GitHub behind a delegation promising it will not is worse
than an error message.

Three failure modes the delegation had to be defended against: detector
auto-healing would have migrated the app onto a leftover /root/.<app>
marker and quietly un-delegated it; saving replaces the whole record, so
the editor carries the marker explicitly rather than dropping it on the
first port edit; and the release-age hold gates on a publish date a
delegated app never has, which deferred the whole schedule forever.

Their version is resolved server-side through the container the detector
declares — not through the app's name or image, since Immich's compose
service and image are both immich-server while the application is immich.
The annotation happens on the way out of both endpoints rather than into
their caches: the App tab's cache is invalidated by events, not by time,
and the Docker inventory it reads is built asynchronously, so annotating
before storing froze a response taken before the first scan.

The rows carry that name too. display_name was already computed and
already used by the bulk-update section; the image row, the update
notification and the CT badge now use it as well. A delegated app's
pending update counts in the badge only while its image is not already
being counted, so registering just the application does not leave the
container looking up to date, and registering both does not count twice.

Catalog: four detectors verified on real containers, following the rules
in the file. vaultwarden and immich gain docker fallbacks for installs
where the native marker does not exist. netalertx is new — note its
repository is netalertx/NetAlertX; the Docker Hub namespace 404s.
technitiumdns is new and uses Technitium's own update endpoint rather than
GitHub releases: its marker reads 15.4 while the release tag is v15.4.0,
and _version_tuple compares (15,4,0) > (15,4) as an update that would
never clear.

Verified live against ghcr.io (Immich 3.1.0), docker.io (Vaultwarden
1.37.2) and lscr.io (Radarr 6.3.0.10514-ls314), plus postgres:16, which
correctly reports no version because official images carry no labels.
Exercised end to end on Proxmox VE 9.2.4 with NetAlertX reporting
26.6.3 -> 26.9.0. 31 new unit tests cover the resolution rules, every
refusal, the delegation contract and the container-to-image pairing.
2026-09-04 13:16:28 +02:00
MacRimi 4f38d0e2e7 notification delivery gaps and locale corrections 2026-09-04 11:38:44 +02:00
ProxMenuxBot ab5767fe94 chore(i18n): auto-fill missing translations in messages/{locale}/common.json
Source: ce6af76
Triggered by: push
2026-09-04 09:28:30 +00:00
MacRimiandGitHub ce6af76cce Merge pull request #336 from Vaso73/fix/lxc-mount-target-normalization
fix: recognize LXC mount targets with trailing slashes
2026-09-04 11:27:35 +02:00
VAIO73 7ae43310f4 fix: recognize LXC mount targets with trailing slashes 2026-09-04 10:36:51 +02:00
ProxMenuxBot 5e60feab84 chore(i18n): auto-fill missing translations in messages/{locale}/common.json
Source: 9934bd2
Triggered by: push
2026-09-04 06:09:58 +00:00
MacRimiandGitHub 9934bd2628 Merge pull request #334 from Vaso73/feat/vm-lxc-search-update-filter
feat: add VM and LXC list search and update filter
2026-09-04 08:07:14 +02:00
VAIO73 9cc49da019 feat: add VM and LXC list search and update filter 2026-09-04 06:27:58 +02:00
MacRimi 25b5eaddc5 Fix restoration of custom Proxmox web certificates
Validate and restore pveproxy SSL certificate pairs during post-boot recovery, with fingerprint verification and automatic rollback on failure.
2026-09-03 23:46:03 +02:00
MacRimiandGitHub 6c44beb46d Merge pull request #332 from Vaso73/fix/runtime-verified-app-detectors
fix: improve application version detection
2026-09-03 22:25:41 +02:00
MacRimiandGitHub a3d26a2278 Merge pull request #329 from Vaso73/i18n/sk-apps-overview-terminal
i18n: polish Slovak copy for Apps, overview, and terminal
2026-09-03 22:25:08 +02:00
ProxMenuxBot bfbeb97203 chore(i18n): auto-fill missing translations in messages/{locale}/common.json
Source: a2b0341
Triggered by: push
2026-09-03 20:24:41 +00:00
MacRimiandGitHub a2b03419d6 Merge pull request #330 from Vaso73/i18n/sk-vm-lxc-complete
i18n: translate Slovak VM and LXC status and update scheduling
2026-09-03 22:20:27 +02:00
VAIO73 cecffbc89f fix: prefer runtime-verified app detectors 2026-09-03 13:10:43 +02:00
github-actions[bot] f0f34c3416 Update AppImage beta build (2026-09-03 10:00:28) 2026-09-03 10:00:28 +00:00
ProxMenuxBot 64d1a86fe5 chore(lang): auto-rebuild translation cache
Source: 86305cf
Triggered by: push
2026-09-03 09:56:47 +00:00
MacRimi 86305cf261 fix: harden post-install migrations and bundle multi-ABI Python runtimes
- safely migrate historical Bashrc and Log2RAM installations
- align post-install function versions across both flows
- bundle gevent runtimes for CPython 3.11 and 3.13
- select the correct Python ABI at runtime
- validate both supported Proxmox VE Python versions in AppImage workflows
- fix #327, #328 and #331
2026-09-03 11:55:39 +02:00
VAIO73 d17c31398c i18n: translate VM and LXC status and schedule states 2026-09-03 10:21:53 +02:00
VAIO73 cbb61d65e4 i18n: translate VM and LXC app link fields 2026-09-03 10:21:53 +02:00
VAIO73 6dc123615b i18n: translate terminal command descriptions 2026-09-03 10:21:27 +02:00
VAIO73 56d841aa64 i18n: translate 1.2.6 overview release notes 2026-09-03 10:21:27 +02:00
VAIO73 8899d8bfe1 i18n: translate Apps dashboard and custom link dialog 2026-09-03 10:21:27 +02:00
github-actions[bot] ac09cc24a8 Update AppImage beta build (2026-09-02 20:31:05) 2026-09-02 20:31:05 +00:00
MacRimi cd40abc359 New version 1.2.6
Restores AI Assistant support for OpenAI-compatible endpoints on private IPs, loopback
and Docker networks (LiteLLM, LM Studio, LocalAI, vLLM, OmniRoute, self-hosted proxies)
and surfaces the server's error under the Load button (#325). Aligns the Secure Gateway
wizard's Alpine template selection and pct create with the host's real architecture on
x86_64 and arm64 (#324). Consolidates changes landing on develop: atomic notification
delivery, custom SSH port for Borg remote targets (#236), optional GitHub API token for
app version tracking (#306), and richer replication failure notifications.
2026-09-02 22:19:37 +02:00
MacRimi ea8c29ecbd New version 1.2.6
Restores AI Assistant support for OpenAI-compatible endpoints on private IPs, loopback
and Docker networks (LiteLLM, LM Studio, LocalAI, vLLM, OmniRoute, self-hosted proxies)
and surfaces the server's error under the Load button (#325). Aligns the Secure Gateway
wizard's Alpine template selection and pct create with the host's real architecture on
x86_64 and arm64 (#324). Consolidates changes landing on develop: atomic notification
delivery, custom SSH port for Borg remote targets (#236), optional GitHub API token for
app version tracking (#306), and richer replication failure notifications.
2026-09-02 22:18:52 +02:00
MacRimi eecd93bf1a prevent duplicate concurrent deliveries 2026-09-02 20:09:39 +02:00
github-actions[bot] d1fed2fb45 Update AppImage beta build (2026-09-02 17:07:47) 2026-09-02 17:07:47 +00:00
MacRimi e7b69dae91 replication failure notifications 2026-09-02 16:28:03 +02:00
ProxMenuxBot d10acbc895 chore(lang): auto-rebuild translation cache
Source: 91b4200
Triggered by: push
2026-09-02 12:44:36 +00:00
MacRimi 91b4200179 custom SSH port for Borg remote targets
feat(host-backup): custom SSH port for Borg remote targets

Add Borg destinations no longer assume port 22. The Monitor form and
the shell TUI both take an optional port (default 22, range 1-65535)
and embed it in the persisted ssh://user@host:port/path URL. BORG_RSH,
the sshpass key installer and the capacity probe all honour it.

Reported by @songochain in #236 — NAS-style Borg hosts on non-standard
SSH ports are now first-class targets.

Existing borg-targets.txt entries without a port keep working; the
port is only serialised into the URL when it differs from 22.
2026-09-02 14:43:28 +02:00