keep registry accounts for the whole cluster and use them everywhere

- Registry accounts are kept in /etc/pve/priv/proxmenux/registry-auth.json, shared by every node, unless REGISTRY_AUTH_FILE says otherwise
- The custom image importer offers to sign in when a registry refuses an image, and reads it again
- Installers, updates, the watchdog and the Monitor update check read private images with the saved accounts
- The host backup includes the accounts, and uninstalling ProxMenux removes them and keeps the OCI records of the cluster
- Spanish written by hand and spacing fixed for the registry account messages in every locale
- Docs: private registries section, Registry accounts in the OCI menu, README storage notes
This commit is contained in:
MacRimi
2026-10-16 22:35:07 +02:00
parent e4c517f258
commit 248ac5dec6
29 changed files with 790 additions and 317 deletions
+13 -13
View File
@@ -506,7 +506,7 @@
"Authentication": "Authentifizierung",
"Authentication & Security": "Authentifizierung und Sicherheit",
"Authentication Error": "Authentifizierungsfehler",
"Authentication failed for {registry}. Check the account and token permissions.": "Authentication failed for {registry}.Check the account and token permissions.",
"Authentication failed for {registry}. Check the account and token permissions.": "Authentication failed for {registry}. Check the account and token permissions.",
"Authentication failed.": "Die Authentifizierung ist fehlgeschlagen.",
"Authentication required:": "Authentifizierung erforderlich:",
"Authentication:": "Authentifizierung:",
@@ -1387,7 +1387,7 @@
"Could not remove VM automatically. Run manually:": "VM konnte nicht automatisch entfernt werden. Manuell ausführen:",
"Could not remove ZRAM profile; configuration was restored": "ZRAM-Profil konnte nicht entfernt werden; Die Konfiguration wurde wiederhergestellt",
"Could not remove ZRAM profile; configuration was restored but swap could not be restarted": "ZRAM-Profil konnte nicht entfernt werden; Die Konfiguration wurde wiederhergestellt, aber der Swap konnte nicht neu gestartet werden",
"Could not remove credentials for {registry}; saved file credentials were not changed.": "Anmeldeinformationen für {registry} konnten nicht entfernt werden;Die Anmeldeinformationen der gespeicherten Datei wurden nicht geändert.",
"Could not remove credentials for {registry}; saved file credentials were not changed.": "Anmeldeinformationen für {registry} konnten nicht entfernt werden; Die Anmeldeinformationen der gespeicherten Datei wurden nicht geändert.",
"Could not remove previous DKMS tree at": "Vorheriger DKMS-Baum konnte nicht entfernt werden",
"Could not reserve a private network for the stack": "Konnte kein privates Netzwerk für den Stack reservieren",
"Could not resolve the Compose user:": "Konnte den Compose-Benutzer nicht lösen:",
@@ -1496,7 +1496,7 @@
"Credentials file created securely.": "Anmeldeinformationsdatei sicher erstellt.",
"Credentials file removed.": "Anmeldeinformationsdatei entfernt.",
"Credentials file:": "Anmeldeinformationsdatei:",
"Credentials file:\n{path}\n\nOwned by root; directory mode 700 and file mode 600.\nBasic credentials are base64 encoded, not encrypted.\nCredential helpers use their own storage.\n\nUse an access token with permission to pull images.\nConfigure credentials on each node that downloads images.": "Anmeldeinformationsdatei:\n{path}\n\nIm Besitz von root;Verzeichnismodus 700 und Dateimodus 600.\nGrundlegende Anmeldeinformationen sind Base64-codiert und nicht verschlüsselt.\nAnmeldeinformationshelfer nutzen ihren eigenen Speicher.\n\nVerwenden Sie ein Zugriffstoken mit der Berechtigung zum Abrufen von Bildern.\nKonfigurieren Sie Anmeldeinformationen für jeden Knoten, der Bilder herunterlädt.",
"Credentials file:\n{path}\n\nOwned by root; directory mode 700 and file mode 600.\nBasic credentials are base64 encoded, not encrypted.\nCredential helpers use their own storage.\n\nUse an access token with permission to pull images.\nConfigure credentials on each node that downloads images.": "Anmeldeinformationsdatei:\n{path}\n\nIm Besitz von root; Verzeichnismodus 700 und Dateimodus 600.\nGrundlegende Anmeldeinformationen sind Base64-codiert und nicht verschlüsselt.\nAnmeldeinformationshelfer nutzen ihren eigenen Speicher.\n\nVerwenden Sie ein Zugriffstoken mit der Berechtigung zum Abrufen von Bildern.\nKonfigurieren Sie Anmeldeinformationen für jeden Knoten, der Bilder herunterlädt.",
"Credentials validated successfully": "Anmeldeinformationen erfolgreich validiert",
"Cross-host restore: guest IDs in backup overlap live IDs on target:": "Hostübergreifende Wiederherstellung: Gast-IDs im Backup überschneiden sich mit Live-IDs auf dem Ziel:",
"Cross-kernel restore — kernel-tied paths merged, not copied": "Kernelübergreifende Wiederherstellung – Kernel-gebundene Pfade werden zusammengeführt, nicht kopiert",
@@ -2923,7 +2923,7 @@
"Image downloaded and verified.\n\n{reference}\n\nStorage: {storage}\nArchive size: {size}\nArchive: {archive}\n\nNo container was created.\nProxMenux removes unused cached images after successful updates.": "Bild heruntergeladen und überprüft.\n\n{reference}\n\nSpeicher: {storage}\nArchivgröße: {size}\nArchiv: {archive}\n\nEs wurde kein Container erstellt.\nProxMenux entfernt nicht verwendete zwischengespeicherte Bilder nach erfolgreichen Updates.",
"Image file not found:": "Bilddatei nicht gefunden:",
"Image imported:": "Bild importiert:",
"Image integrity verification failed. The partial download was discarded; try again.": "Überprüfung der Bildintegrität fehlgeschlagen. Der teilweise Download wurde verworfen;versuchen Sie es erneut.",
"Image integrity verification failed. The partial download was discarded; try again.": "Überprüfung der Bildintegrität fehlgeschlagen. Der teilweise Download wurde verworfen; versuchen Sie es erneut.",
"Image integrity verified": "Überprüfung der Integrität des Bildes",
"Image not allowed for the host monitor profile": "Bild nicht erlaubt für das Host-Monitor-Profil",
"Image reference": "Bildreferenz",
@@ -3566,8 +3566,8 @@
"Log2RAM write scheduled every": "Log2RAM-Schreibvorgang alle geplant",
"Log:": "Protokoll:",
"Logged-in users": "Angemeldete Benutzer",
"Login to {registry} timed out. Saved credentials were not changed.": "Zeitüberschreitung bei der Anmeldung bei {registry}.Gespeicherte Anmeldeinformationen wurden nicht geändert.",
"Logout from {registry} timed out. Saved file credentials were not changed.": "Zeitüberschreitung beim Abmelden von {registry}.Die Anmeldeinformationen der gespeicherten Datei wurden nicht geändert.",
"Login to {registry} timed out. Saved credentials were not changed.": "Zeitüberschreitung bei der Anmeldung bei {registry}. Gespeicherte Anmeldeinformationen wurden nicht geändert.",
"Logout from {registry} timed out. Saved file credentials were not changed.": "Zeitüberschreitung beim Abmelden von {registry}. Die Anmeldeinformationen der gespeicherten Datei wurden nicht geändert.",
"Logrotate optimization completed": "Logrotate-Optimierung abgeschlossen",
"Logrotate service restarted successfully": "Der Logrotate-Dienst wurde erfolgreich neu gestartet",
"Lollypop is a lightweight modern music player designed to work excellently on the GNOME desktop environment.": "Lollypop ist ein leichter moderner Musikplayer, der hervorragend auf der GNOME-Desktopumgebung funktioniert.",
@@ -4336,7 +4336,7 @@
"Not currently mounted — skipping umount.": "Derzeit nicht gemountet – umount wird übersprungen.",
"Not declared": "Nicht deklariert",
"Not enough free space for the backup": "Nicht genug freier Speicherplatz für das Backup",
"Not enough free space on {storage}. Free some space or select another storage.": "Nicht genügend freier Speicherplatz auf {storage}.Geben Sie Speicherplatz frei oder wählen Sie einen anderen Speicher aus.",
"Not enough free space on {storage}. Free some space or select another storage.": "Nicht genügend freier Speicherplatz auf {storage}. Geben Sie Speicherplatz frei oder wählen Sie einen anderen Speicher aus.",
"Not found": "Nicht gefunden",
"Not found in the OCI archive:": "Nicht im OCI-Archiv gefunden:",
"Not imported:": "Nicht importiert:",
@@ -6365,7 +6365,7 @@
"The containers do not need them any more; an update downloads the new versions when there are any.": "Die Container brauchen sie nicht mehr; ein Update lädt die neuen Versionen herunter, wenn es welche gibt.",
"The containers were created from downloaded OCI images": "Die Container wurden aus heruntergeladenen OCI-Bildern erstellt",
"The coordinated backup was modified": "Das koordinierte Backup wurde modifiziert",
"The credential file changed during this operation. Try again; it was not overwritten.": "Die Anmeldeinformationsdatei wurde während dieses Vorgangs geändert. Versuchen Sie es erneut;es wurde nicht überschrieben.",
"The credential file changed during this operation. Try again; it was not overwritten.": "Die Anmeldeinformationsdatei wurde während dieses Vorgangs geändert. Versuchen Sie es erneut; es wurde nicht überschrieben.",
"The current driver will be completely uninstalled before installing the new version. Continue?": "Der aktuelle Treiber wird vor der Installation der neuen Version vollständig deinstalliert. Weitermachen?",
"The current image of the saved channel will be checked and downloaded. Resources, paths and GPU are kept. The CT is stopped during the replacement and a native backup is created first.": "Das aktuelle Bild des gespeicherten Kanals wird überprüft und heruntergeladen. Ressourcen, Pfade und GPU werden beibehalten. Der CT wird während des Austauschs gestoppt und zuerst ein natives Backup erstellt.",
"The current record is missing for": "Der aktuelle Rekord fehlt für",
@@ -6602,7 +6602,7 @@
"The record or diagnosis could not be completed; no update was run.": "Die Aufzeichnung oder Diagnose konnte nicht abgeschlossen werden; kein Update wurde ausgeführt.",
"The recovery did not complete. Review the log and choose \"Recover\" again for this container in the OCI management menu.": "Die Rückforderung war nicht abgeschlossen. Überprüfen Sie das Protokoll und wählen Sie erneut \"Wiederherstellen\" für diesen Container im OCI-Verwaltungsmenü.",
"The recovery did not complete. Review the log and choose \"{choice}\" again for this container in the OCI management menu.": "Die Wiederherstellung wurde nicht abgeschlossen. Prüfen Sie das Protokoll und wählen Sie für diesen Container im OCI-Verwaltungsmenü erneut \"{choice}\".",
"The registry authentication file is invalid; it was not changed.": "Die Registrierungsauthentifizierungsdatei ist ungültig;es wurde nicht geändert.",
"The registry authentication file is invalid; it was not changed.": "Die Registrierungsauthentifizierungsdatei ist ungültig; es wurde nicht geändert.",
"The registry authentication file must be owned by root with mode 600.": "Die Registrierungsauthentifizierungsdatei muss Root mit Modus 600 gehören.",
"The registry authentication file must have an absolute path.": "Die Registrierungsauthentifizierungsdatei muss einen absoluten Pfad haben.",
"The registry authentication path cannot contain symbolic links.": "Der Registrierungsauthentifizierungspfad darf keine symbolischen Links enthalten.",
@@ -6769,7 +6769,7 @@
"This GPU is considered incompatible with GPU passthrough to a VM in ProxMenux.": "Diese GPU gilt als inkompatibel mit GPU-Passthrough zu einer VM in ProxMenux.",
"This NFS share is fully restricted — even the host root cannot write to it.": "Diese NFS-Freigabe ist vollständig eingeschränkt – selbst der Host-Root kann nicht darauf schreiben.",
"This VM requires extra installation steps, see install guide at:\nhttps://github.com/community-scripts/ProxmoxVE/discussions/144": "Für diese VM sind zusätzliche Installationsschritte erforderlich. Weitere Informationen finden Sie im Installationshandbuch unter:\nhttps://github.com/community-scripts/ProxmoxVE/discussions/144",
"This account is for {registry}. Enter an image from that registry.": "Dieses Konto ist für {registry}.Geben Sie ein Bild aus dieser Registrierung ein.",
"This account is for {registry}. Enter an image from that registry.": "Dieses Konto ist für {registry}. Geben Sie ein Bild aus dieser Registrierung ein.",
"This action will:": "Diese Aktion wird:",
"This application cannot be recovered yet:": "Diese Anwendung kann noch nicht wiederhergestellt werden:",
"This application cannot be recovered yet; nothing was changed:": "Diese Anwendung kann noch nicht wiederhergestellt werden; es wurde nichts geändert:",
@@ -7640,7 +7640,7 @@
"assembling": "Montage",
"automatically. Install it manually inside the container.": "automatisch. Installieren Sie es manuell im Container.",
"automatically. Reboot LXC to fully release.": "automatisch. Starten Sie LXC neu, um es vollständig freizugeben.",
"available": "verfügbar",
"available": "Verfügbar",
"available for LXC bind-mounts via 'LXC Mount Manager'": "verfügbar für LXC-Bind-Mounts über „LXC Mount Manager“",
"available in this same GPU and TPU menu.": "verfügbar im selben GPU- und TPU-Menü.",
"backup at /etc/fstab.proxmenux.bak": "Backup unter /etc/fstab.proxmenux.bak",
@@ -7993,7 +7993,7 @@
"runs in": "läuft",
"safe paths now (configs, packages, /etc, /root, ...)": "Jetzt sichere Pfade (Konfigurationen, Pakete, /etc, /root, ...)",
"same MAC": "gleicher MAC",
"saved": "gespeichert",
"saved": "Gespeichert",
"seconds (default)": "Sekunden (Standard)",
"see log:": "siehe Protokoll:",
"selected by default": "Standardmäßig ausgewählt",
@@ -8116,7 +8116,7 @@
"{count} saved accounts.": "{count} gespeicherte Konten.",
"{path} already exists and belongs to another user of the host, so {app} cannot write to it.\n\nProxMenux can add access rules (ACL) to this directory, to everything inside it and to what is created there later, for the users and groups {app} runs as on the host (IDs {ids}). The owner of the files does not change and whatever reads or writes them today keeps doing so; the owner of the directory also gets access to the files {app} creates.\n\nGrant {app} access to this directory?": "{path} existiert bereits und gehört einem anderen Benutzer des Hosts, daher kann {app} nicht darauf schreiben.\n\nProxMenux kann Zugriffsregeln (ACL) zu diesem Verzeichnis, zu allem darin und zu dem, was später dort erstellt wird, für die Benutzer und Gruppen hinzufügen, unter denen {app} auf dem Host läuft (IDs {ids}). Der Eigentümer der Dateien ändert sich nicht, und was sie heute liest oder schreibt, tut dies weiterhin; der Eigentümer des Verzeichnisses erhält außerdem Zugriff auf die von {app} erstellten Dateien.\n\n{app} Zugriff auf dieses Verzeichnis gewähren?",
"{path} already exists and belongs to another user of the host, so {app} cannot write to it.\n\nProxMenux can add an access rule (ACL) for the identity {app} uses on the host (UID {uid}). Nothing that is there changes owner or permissions: whatever reads or writes those files today keeps doing so, and the owner of the directory also gets access to the files {app} creates.\n\nGrant {app} access to this directory?": "{path} existiert bereits und gehört einem anderen Benutzer des Hosts, daher kann {app} nicht darauf schreiben.\n\nProxMenux kann eine Zugriffsregel (ACL) für die Identität hinzufügen, die {app} auf dem Host verwendet (UID {uid}).Nichts, was dort ist, ändert den Besitzer oder die Berechtigungen: Was auch immer diese Dateien heute liest oder schreibt, tut dies weiterhin, und der Besitzer des Verzeichnisses erhält auch Zugriff auf die Dateien, die {app} erstellt.\n\n{app} Zugriff auf dieses Verzeichnis gewähren?",
"{registry} answered with plain HTTP. Use a registry with HTTPS; TLS verification remains enabled.": "{registry} hat mit einfachem HTTP geantwortet. Verwenden Sie eine Registrierung mit HTTPS;Die TLS-Überprüfung bleibt aktiviert.",
"{registry} answered with plain HTTP. Use a registry with HTTPS; TLS verification remains enabled.": "{registry} hat mit einfachem HTTP geantwortet. Verwenden Sie eine Registrierung mit HTTPS; Die TLS-Überprüfung bleibt aktiviert.",
"{registry} did not respond within {timeout} seconds. Try again later.": "{registry} hat nicht innerhalb von {timeout} Sekunden geantwortet. Versuchen Sie es später noch einmal.",
"{registry} is rate limiting requests. Wait a while and try again.": "Bei {registry} handelt es sich um ratenbegrenzende Anfragen. Warten Sie eine Weile und versuchen Sie es erneut.",
"{registry} reported a server error. Try again later.": "{registry} hat einen Serverfehler gemeldet. Versuchen Sie es später noch einmal.",