diff --git a/lang/de.json b/lang/de.json index 0d3e1fb2..2fa4d225 100644 --- a/lang/de.json +++ b/lang/de.json @@ -215,6 +215,7 @@ "API returned an invalid timezone": "Die API hat eine ungültige Zeitzone zurückgegeben", "API tokens (Home Assistant, scripts) will keep working.": "API-Tokens (Home Assistant, Skripte) funktionieren weiterhin.", "APP_KEY: 32-byte Base64 key (generate with openssl rand -base64 32)": "APP_KEY: 32-Byte-Base64-Schlüssel (mit openssl rand -base64 32 erzeugen)", + "APP_KEY: use the upstream command openssl rand -base64 32 and prefix its output with base64:": "APP_KEY: Führe den vom Projekt angegebenen Befehl openssl rand -base64 32 aus und stelle dem Ergebnis base64: voran.", "APT IPv4 configuration completed": "APT IPv4-Konfiguration abgeschlossen", "APT IPv4 configuration removed": "APT IPv4-Konfiguration entfernt", "APT and repositories": "APT und Repositorys", @@ -3278,6 +3279,7 @@ "Initiator IQN is authorised on the target": "Der Initiator-IQN ist auf dem Ziel autorisiert", "Initiator IQN:": "Initiator-IQN:", "Inkscape is professional quality vector graphics software which runs on Linux, Mac OS X and Windows desktop computers.": "Inkscape ist professionelle Qualitätsvektor-Grafiksoftware, die auf Linux, Mac OS X und Windows Desktop-Computern läuft.", + "Input": "Input", "Inside the LXC, create the administrator: console kimai:user:create YOUR_USERNAME YOUR_EMAIL ROLE_SUPER_ADMIN": "Erstellen Sie im LXC den Administrator: Konsole kimai:user:creat YOUR_USERNAME YOUR_EMAIL ROLE_SUPER_ADMIN", "Inspect disks before any action": "Überprüfen Sie die Datenträger vor jeder Aktion", "Inspect host device nodes": "Untersuchen Sie die Host-Geräteknoten", @@ -6112,6 +6114,7 @@ "Self-hosted file sharing with a modern web interface": "Self-Hosted File Sharing mit einem modernen Web-Interface", "Self-hosted file sync and sharing.": "Selbst gehostete Dateisynchronisierung und -freigabe.", "Self-hosted file toolkit for images, video, audio, PDFs, and files": "Selbst gehostetes Datei-Toolkit für Bilder, Video, Audio, PDFs und Dateien", + "Self-hosted forms and workflows.": "Selbst gehostete Formulare und Arbeitsabläufe.", "Self-hosted internet archiving solution": "Selbst gehostete Internet-Archivierungslösung", "Self-hosted inventory and home organization.": "Selbst gehostete Inventarverwaltung und Organisation des Zuhauses.", "Self-hosted live streaming and chat.": "Selbst gehostetes Live-Streaming und Chat.", diff --git a/lang/es.json b/lang/es.json index 80d3ff63..2a5a542b 100644 --- a/lang/es.json +++ b/lang/es.json @@ -214,6 +214,7 @@ "API returned an invalid timezone": "API devolvió una zona horaria no válida", "API tokens (Home Assistant, scripts) will keep working.": "Los tokens de API (Home Assistant, scripts) seguirán funcionando.", "APP_KEY: 32-byte Base64 key (generate with openssl rand -base64 32)": "APP_KEY: clave Base64 de 32 bytes (generar con openssl rand -base64 32)", + "APP_KEY: use the upstream command openssl rand -base64 32 and prefix its output with base64:": "APP_KEY: ejecuta el comando indicado por el proyecto, openssl rand -base64 32, y antepone base64: al resultado.", "APT IPv4 configuration completed": "Configuración APT IPv4 completada", "APT IPv4 configuration removed": "Se eliminó la configuración de APT IPv4", "APT and repositories": "APT y repositorios", @@ -3275,6 +3276,7 @@ "Initiator IQN is authorised on the target": "El IQN del iniciador está autorizado en el destino", "Initiator IQN:": "IQN del iniciador:", "Inkscape is professional quality vector graphics software which runs on Linux, Mac OS X and Windows desktop computers.": "Inkscape es un software de gráficos vectoriales de calidad profesional para ordenadores de escritorio con Linux, Mac OS X y Windows.", + "Input": "Input", "Inside the LXC, create the administrator: console kimai:user:create YOUR_USERNAME YOUR_EMAIL ROLE_SUPER_ADMIN": "Dentro del LXC, crea el administrador: console kimai:user:create YOUR_USERNAME YOUR_EMAIL ROLE_SUPER_ADMIN", "Inspect disks before any action": "Inspeccionar los discos antes de cualquier acción", "Inspect host device nodes": "Inspeccionar los nodos del dispositivo host", @@ -6096,6 +6098,7 @@ "Self-hosted file sharing with a modern web interface": "Compartición de archivos autoalojada con una interfaz web moderna", "Self-hosted file sync and sharing.": "Sincronización y uso compartido de archivos autoalojados.", "Self-hosted file toolkit for images, video, audio, PDFs, and files": "Kit de herramientas autoalojado para imágenes, vídeo, audio, PDF y archivos", + "Self-hosted forms and workflows.": "Formularios y flujos de trabajo autoalojados.", "Self-hosted internet archiving solution": "Solución autoalojada de archivado de Internet", "Self-hosted inventory and home organization.": "Inventario y organización del hogar autoalojados.", "Self-hosted live streaming and chat.": "Retransmisión en directo y chat autoalojados.", diff --git a/lang/fr.json b/lang/fr.json index c35a7a49..c18c3824 100644 --- a/lang/fr.json +++ b/lang/fr.json @@ -215,6 +215,7 @@ "API returned an invalid timezone": "L'API a renvoyé un fuseau horaire non valide", "API tokens (Home Assistant, scripts) will keep working.": "Les jetons API (Home Assistant, scripts) continueront de fonctionner.", "APP_KEY: 32-byte Base64 key (generate with openssl rand -base64 32)": "APP_KEY : clé Base64 de 32 octets (générer avec openssl rand -base64 32)", + "APP_KEY: use the upstream command openssl rand -base64 32 and prefix its output with base64:": "APP_KEY: exécutez la commande indiquée par le projet, openssl rand -base64 32, puis ajoutez base64: au début du résultat.", "APT IPv4 configuration completed": "Configuration APT IPv4 terminée", "APT IPv4 configuration removed": "Configuration APT IPv4 supprimée", "APT and repositories": "APT et référentiels", @@ -3278,6 +3279,7 @@ "Initiator IQN is authorised on the target": "L'IQN initiateur est autorisé sur la cible", "Initiator IQN:": "IQN initiateur :", "Inkscape is professional quality vector graphics software which runs on Linux, Mac OS X and Windows desktop computers.": "Inkscape est un logiciel graphique vectoriel de qualité professionnelle qui fonctionne sur les ordinateurs de bureau Linux, Mac OS X et Windows.", + "Input": "Input", "Inside the LXC, create the administrator: console kimai:user:create YOUR_USERNAME YOUR_EMAIL ROLE_SUPER_ADMIN": "Dans le LXC, créez l’administrateur : console kimai:user:create YOUR_USERNAME YOUR_EMAIL ROLE_SUPER_ADMIN", "Inspect disks before any action": "Inspecter les disques avant toute action", "Inspect host device nodes": "Inspecter les nœuds du périphérique hôte", @@ -6112,6 +6114,7 @@ "Self-hosted file sharing with a modern web interface": "Partage de fichiers auto-organisé avec une interface web moderne", "Self-hosted file sync and sharing.": "Service auto-hébergé de synchronisation et de partage de fichiers.", "Self-hosted file toolkit for images, video, audio, PDFs, and files": "Boîte à outils de fichiers auto-organisé pour les images, vidéo, audio, PDF et fichiers", + "Self-hosted forms and workflows.": "Formulaires et workflows auto-hébergés.", "Self-hosted internet archiving solution": "Solution d'archivage internet auto-organisé", "Self-hosted inventory and home organization.": "Gestion des stocks et organisation de la maison auto-hébergées.", "Self-hosted live streaming and chat.": "Diffusion en direct et chat auto-hébergés.", diff --git a/lang/it.json b/lang/it.json index e7435fad..b23a499d 100644 --- a/lang/it.json +++ b/lang/it.json @@ -215,6 +215,7 @@ "API returned an invalid timezone": "L'API ha restituito un fuso orario non valido", "API tokens (Home Assistant, scripts) will keep working.": "I token API (Home Assistant, script) continueranno a funzionare.", "APP_KEY: 32-byte Base64 key (generate with openssl rand -base64 32)": "APP_KEY: chiave Base64 da 32 byte (genera con openssl rand -base64 32)", + "APP_KEY: use the upstream command openssl rand -base64 32 and prefix its output with base64:": "APP_KEY: esegui il comando indicato dal progetto, openssl rand -base64 32, e anteponi base64: al risultato.", "APT IPv4 configuration completed": "Configurazione APT IPv4 completata", "APT IPv4 configuration removed": "Configurazione APT IPv4 rimossa", "APT and repositories": "APT e repository", @@ -3278,6 +3279,7 @@ "Initiator IQN is authorised on the target": "L'IQN dell'iniziatore è autorizzato sul target", "Initiator IQN:": "IQN dell'iniziatore:", "Inkscape is professional quality vector graphics software which runs on Linux, Mac OS X and Windows desktop computers.": "Inkscape è un software di grafica vettoriale di qualità professionale per computer desktop Linux, Mac OS X e Windows.", + "Input": "Input", "Inside the LXC, create the administrator: console kimai:user:create YOUR_USERNAME YOUR_EMAIL ROLE_SUPER_ADMIN": "Nel LXC, crea l'amministratore: console kimai:user:create YOUR_USERNAME YOUR_EMAIL ROLE_SUPER_ADMIN", "Inspect disks before any action": "Ispeziona i dischi prima di qualsiasi azione", "Inspect host device nodes": "Ispeziona i nodi dei dispositivi host", @@ -6112,6 +6114,7 @@ "Self-hosted file sharing with a modern web interface": "Condivisione file self-hosted con interfaccia web moderna", "Self-hosted file sync and sharing.": "Servizio self-hosted per sincronizzare e condividere file.", "Self-hosted file toolkit for images, video, audio, PDFs, and files": "Set di strumenti self-hosted per immagini, video, audio, PDF e altri file", + "Self-hosted forms and workflows.": "Moduli e flussi di lavoro auto-ospitati.", "Self-hosted internet archiving solution": "Soluzione self-hosted per archiviare contenuti Internet", "Self-hosted inventory and home organization.": "Inventario e organizzazione della casa sul proprio server.", "Self-hosted live streaming and chat.": "Streaming live e chat self-hosted.", diff --git a/lang/pt.json b/lang/pt.json index 20e597e1..ce894a45 100644 --- a/lang/pt.json +++ b/lang/pt.json @@ -215,6 +215,7 @@ "API returned an invalid timezone": "API retornou um fuso horário inválido", "API tokens (Home Assistant, scripts) will keep working.": "Os tokens de API (Home Assistant, scripts) continuarão funcionando.", "APP_KEY: 32-byte Base64 key (generate with openssl rand -base64 32)": "APP_KEY: chave Base64 de 32 bytes (gerar com openssl rand -base64 32)", + "APP_KEY: use the upstream command openssl rand -base64 32 and prefix its output with base64:": "APP_KEY: execute o comando indicado pelo projeto, openssl rand -base64 32, e acrescente base64: no início do resultado.", "APT IPv4 configuration completed": "Configuração do APT IPv4 concluída", "APT IPv4 configuration removed": "Configuração APT IPv4 removida", "APT and repositories": "APT e repositórios", @@ -3278,6 +3279,7 @@ "Initiator IQN is authorised on the target": "O iniciador IQN está autorizado no alvo", "Initiator IQN:": "IQN do iniciador:", "Inkscape is professional quality vector graphics software which runs on Linux, Mac OS X and Windows desktop computers.": "Inkscape é um software gráfico vetorial de qualidade profissional que funciona em computadores desktop Linux, Mac OS X e Windows.", + "Input": "Input", "Inside the LXC, create the administrator: console kimai:user:create YOUR_USERNAME YOUR_EMAIL ROLE_SUPER_ADMIN": "Dentro do LXC, crie o administrador: console kimai:user:create YOUR_USERNAME YOUR_EMAIL ROLE_SUPER_ADMIN", "Inspect disks before any action": "Inspecione os discos antes de qualquer ação", "Inspect host device nodes": "Inspecione os nós do dispositivo host", @@ -6112,6 +6114,7 @@ "Self-hosted file sharing with a modern web interface": "Partilha de ficheiros auto- hospedados com uma interface Web moderna", "Self-hosted file sync and sharing.": "Sincronização e compartilhamento de arquivos self-hosted.", "Self-hosted file toolkit for images, video, audio, PDFs, and files": "Kit de ferramentas de arquivo auto hospedado para imagens, vídeo, áudio, PDFs e arquivos", + "Self-hosted forms and workflows.": "Formulários e fluxos de trabalho autoalojados.", "Self-hosted internet archiving solution": "Solução de arquivamento de internet self-hosted", "Self-hosted inventory and home organization.": "Inventário e organização da casa autoalojados.", "Self-hosted live streaming and chat.": "Transmissão em direto e chat autoalojados.", diff --git a/lang/sk.json b/lang/sk.json index 9b52629b..9b2ba692 100644 --- a/lang/sk.json +++ b/lang/sk.json @@ -215,6 +215,7 @@ "API returned an invalid timezone": "API vrátilo neplatné časové pásmo", "API tokens (Home Assistant, scripts) will keep working.": "API tokeny (Home Assistant, skripty) budú fungovať ďalej.", "APP_KEY: 32-byte Base64 key (generate with openssl rand -base64 32)": "APP_KEY: 32-bajtový kľúč zakódovaný v Base64 (vygenerujte príkazom openssl rand -base64 32)", + "APP_KEY: use the upstream command openssl rand -base64 32 and prefix its output with base64:": "APP_KEY: spusti príkaz uvedený v projekte openssl rand -base64 32 a pred výsledok vlož base64:.", "APT IPv4 configuration completed": "Nastavenie APT pre IPv4 je dokončené", "APT IPv4 configuration removed": "Nastavenie APT pre IPv4 bolo odstránené", "APT and repositories": "APT a repozitáre", @@ -3278,6 +3279,7 @@ "Initiator IQN is authorised on the target": "IQN iniciátora je na targete povolené", "Initiator IQN:": "IQN iniciátora:", "Inkscape is professional quality vector graphics software which runs on Linux, Mac OS X and Windows desktop computers.": "Inkscape je profesionálne kvalitný vektorový grafický softvér, ktorý beží na počítačoch Linux, Mac OS X a Windows.", + "Input": "Input", "Inside the LXC, create the administrator: console kimai:user:create YOUR_USERNAME YOUR_EMAIL ROLE_SUPER_ADMIN": "V LXC vytvorte správcu príkazom: console kimai:user:create YOUR_USERNAME YOUR_EMAIL ROLE_SUPER_ADMIN", "Inspect disks before any action": "Skontrolovať disky pred akoukoľvek akciou", "Inspect host device nodes": "Skontrolovať device nodes na hostovi", @@ -6114,6 +6116,7 @@ "Self-hosted file sharing with a modern web interface": "Zdieľanie súborov na vlastnom serveri s moderným webovým rozhraním", "Self-hosted file sync and sharing.": "Vlastná služba na synchronizáciu a zdieľanie súborov.", "Self-hosted file toolkit for images, video, audio, PDFs, and files": "Súprava nástrojov na vlastnom serveri na prácu s obrázkami, videom, zvukom, PDF a ďalšími súbormi", + "Self-hosted forms and workflows.": "Samoobslužne hostované formuláre a pracovné postupy.", "Self-hosted internet archiving solution": "Riešenie na archiváciu internetového obsahu na vlastnom serveri", "Self-hosted inventory and home organization.": "Inventár a organizácia domácnosti na vlastnom serveri.", "Self-hosted live streaming and chat.": "Samohostované živé vysielanie a chat.", diff --git a/lang/sv.json b/lang/sv.json index f2755205..2de42778 100644 --- a/lang/sv.json +++ b/lang/sv.json @@ -215,6 +215,7 @@ "API returned an invalid timezone": "API returnerade en ogiltig tidszon", "API tokens (Home Assistant, scripts) will keep working.": "API-tokens (Home Assistant, skript) fortsätter att fungera.", "APP_KEY: 32-byte Base64 key (generate with openssl rand -base64 32)": "APP_KEY: Base64-kodad nyckel på 32 byte (generera med openssl rand -base64 32)", + "APP_KEY: use the upstream command openssl rand -base64 32 and prefix its output with base64:": "APP_KEY: kör kommandot som anges av projektet, openssl rand -base64 32, och lägg till base64: före resultatet.", "APT IPv4 configuration completed": "APT IPv4-konfiguration slutförd", "APT IPv4 configuration removed": "APT IPv4-konfiguration har tagits bort", "APT and repositories": "APT och arkiv", @@ -3278,6 +3279,7 @@ "Initiator IQN is authorised on the target": "Initiator IQN är auktoriserad på målet", "Initiator IQN:": "Initiativtagare IQN:", "Inkscape is professional quality vector graphics software which runs on Linux, Mac OS X and Windows desktop computers.": "Inkscape är professionell kvalitet vektor grafik programvara som körs på Linux, Mac OS X och Windows stationära datorer.", + "Input": "Input", "Inside the LXC, create the administrator: console kimai:user:create YOUR_USERNAME YOUR_EMAIL ROLE_SUPER_ADMIN": "Skapa administratören inne i LXC-containern: console kimai:user:create YOUR_USERNAME YOUR_EMAIL ROLE_SUPER_ADMIN", "Inspect disks before any action": "Inspektera diskar innan någon åtgärd", "Inspect host device nodes": "Inspektera värdenhetsnoder", @@ -6112,6 +6114,7 @@ "Self-hosted file sharing with a modern web interface": "Självhäftad fildelning med ett modernt webbgränssnitt", "Self-hosted file sync and sharing.": "Självhostad filsynkronisering och delning.", "Self-hosted file toolkit for images, video, audio, PDFs, and files": "Självvärd filverktyg för bilder, video, ljud, PDF-filer och filer", + "Self-hosted forms and workflows.": "Självhostade formulär och arbetsflöden.", "Self-hosted internet archiving solution": "Självhäftad internetarkiveringslösning", "Self-hosted inventory and home organization.": "Självhostad inventariehantering och ordning i hemmet.", "Self-hosted live streaming and chat.": "Självhostad livesändning och chatt.", diff --git a/oci/catalog/apps/input.json b/oci/catalog/apps/input.json new file mode 100644 index 00000000..88317b39 --- /dev/null +++ b/oci/catalog/apps/input.json @@ -0,0 +1,438 @@ +{ + "schema_version": "0.5.0", + "kind": "proxmenux.oci-template", + "id": "image-input", + "status": "generated-unvalidated", + "catalog_ui": { + "title": { + "en_US": "Input" + }, + "tagline": { + "en_US": "Self-hosted forms and workflows." + }, + "description": { + "en_US": "A self-hosted form builder using its bundled SQLite configuration for a single-container setup. The application key is required to encrypt stored data." + }, + "category": "business", + "category_label": "Business & ERP", + "author": "Deck9", + "developer": "Deck9", + "icon": "https://raw.githubusercontent.com/deck9/input/main/docs/public/input-icon.png", + "thumbnail": null, + "screenshots": [], + "architectures": [ + "amd64", + "arm64" + ], + "launch": { + "scheme": "http", + "port": 8080, + "path": "/" + }, + "website": "https://getinput.co/", + "documentation": "https://github.com/deck9/input/blob/main/docs/quick-start.md", + "repository": "https://github.com/deck9/input", + "tips": [ + "Create your first account in the web interface. This profile uses the single-container SQLite quick start; production deployments may instead use MariaDB, Redis, and S3." + ], + "mini_changelog": [], + "display_version": null, + "updated_at": null + }, + "source": { + "provider": "Deck9", + "repository": "https://github.com/deck9/input", + "revision": "2b08ab3b6bd73f12a03beedc19c6a561afe283c0", + "readme_raw_url": "https://github.com/deck9/input/blob/main/docs/quick-start.md", + "image_repository_url": "https://github.com/deck9/input/pkgs/container/input", + "readme_pushed_at": "", + "compose_sha256": "2153fd285760e5c8cd84b00efaa73641effa274e035ba86aa0ae153e7c17b8af", + "generated_at": "2026-10-26T06:30:00+00:00" + }, + "container_contract": { + "service_name": "input", + "container_name": "input", + "image": { + "reference": "ghcr.io/deck9/input:main", + "registry": "ghcr.io", + "repository": "ghcr.io/deck9/input", + "tag": "main", + "digest": null, + "pull_policy": "resolve-written-reference-to-architecture-digest-at-install" + }, + "environment": [ + { + "name": "APP_URL", + "example": "http://@CONTAINER_ADDRESS@:8080", + "required": true, + "sensitive": false, + "source": "upstream-documentation", + "container_address": "http://@CONTAINER_ADDRESS@:8080" + }, + { + "name": "APP_KEY", + "example": "", + "required": true, + "sensitive": true, + "source": "upstream-documentation", + "prompt": "APP_KEY: use the upstream command openssl rand -base64 32 and prefix its output with base64:" + } + ], + "volumes": [ + { + "id": "volume-0", + "container_path": "/var/www/html/storage", + "compose_source_example": "./storage", + "read_only": false, + "required": true, + "installation_choice": [ + "managed-volume", + "host-bind" + ], + "default": "managed-volume", + "managed_volume": { + "backup": true, + "default_size_gb": 4 + } + } + ], + "ports": [ + { + "container_port": 8080, + "published_example": 8080, + "protocol": "tcp", + "required": true, + "proxmox_behavior": "listener-on-dedicated-lxc-address-no-nat" + } + ], + "related_services": [], + "restart": "unless-stopped", + "stop_grace_period": null, + "original_compose": "{\n \"name\": \"input\",\n \"services\": {\n \"input\": {\n \"image\": \"ghcr.io/deck9/input:main\",\n \"restart\": \"unless-stopped\",\n \"ports\": [\n \"8080:8080\"\n ],\n \"volumes\": [\n \"./storage:/var/www/html/storage\"\n ],\n \"environment\": {\n \"APP_URL\": \"http://@CONTAINER_ADDRESS@:8080\",\n \"APP_KEY\": \"\"\n }\n }\n }\n}" + }, + "compose_stack": { + "project_name": "input", + "deployment_model": "one-native-oci-lxc-per-compose-service", + "user_experience": "single-application-install", + "main_service": "input", + "service_count": 1, + "services": [ + { + "name": "input", + "image": "ghcr.io/deck9/input:main", + "is_main": true, + "role": "frontend", + "vmid_offset": 0, + "depends_on": [], + "frontend_network": true, + "private_network": false, + "compose": { + "image": "ghcr.io/deck9/input:main", + "restart": "unless-stopped", + "ports": [ + "8080:8080" + ], + "volumes": [ + "./storage:/var/www/html/storage" + ], + "environment": { + "APP_URL": "http://@CONTAINER_ADDRESS@:8080", + "APP_KEY": "" + } + } + } + ], + "top_level": { + "name": "input" + }, + "networking": { + "frontend": "selected-proxmox-bridge", + "private_required": false, + "private_creation": "automatic-create-if-missing", + "private_address_allocation": "automatic-static-address-per-service", + "service_discovery": "private-addresses-with-compose-service-host-aliases", + "dependency_external_access": "disabled-unless-service-publishes-ports", + "prompt_user_for_private_network": false + }, + "storage": [ + { + "id": "input-volume-0", + "service": "input", + "container_path": "/var/www/html/storage", + "mode": "managed-volume", + "user_selectable": true, + "backup": true, + "shared_with_other_lxc": false, + "source_path": null, + "source_path_prompt": "Host path for Input data at /var/www/html/storage" + } + ], + "orchestration": { + "reserve_vmids_atomically": 1, + "start_order": [ + "input" + ], + "stop_order": [ + "input" + ], + "dependency_readiness": "compose-healthcheck-then-port-or-process-fallback", + "rollback_on_failure": "remove-new-rootfs-preserve-created-persistent-volumes" + }, + "installer_inputs": { + "prompted": [ + "stack_name", + "base_vmid", + "rootfs_storage", + "persistent_data_destinations", + "frontend_bridge", + "frontend_ipv4_mode" + ], + "automatic": [ + "dependent_vmids", + "private_bridge", + "private_subnet", + "private_service_addresses", + "compose_service_aliases", + "generated_secrets", + "dependency_start_and_stop_order" + ], + "generated_secrets": [ + { + "id": "app-key", + "strategy": "generate-cryptographically-random-at-install", + "bindings": [ + { + "service": "input", + "environment_variable": "APP_KEY" + } + ] + } + ] + } + }, + "first_run": { + "endpoints": [ + { + "label": "Input", + "scheme": "http", + "port": 8080, + "path": "/", + "source": "upstream-documentation" + } + ], + "credentials": [] + }, + "proxmox": { + "runtime": "native-oci-lxc", + "technology_status": "proxmox-technology-preview", + "defaults": { + "unprivileged": true, + "ostype": "auto-from-image", + "cores": 2, + "memory_mb": 2048, + "swap_mb": 512, + "rootfs_size_gb": 8, + "rootfs_storage": "local-lvm", + "volume_storage": "local-lvm", + "template_storage": "local", + "bridge": "vmbr0", + "ipv4": "dhcp", + "firewall": true, + "host_managed_network": true, + "onboot": false, + "features": [ + "nesting=1" + ], + "shutdown_timeout_seconds": 30 + }, + "image_metadata_policy": { + "entrypoint": "import-from-oci-image", + "cmd": "import-from-oci-image", + "environment": "import-image-env-then-apply-compose-overrides", + "user": "import-from-oci-image", + "working_dir": "import-from-oci-image", + "stop_signal": "import-from-oci-image" + }, + "adaptations": [ + { + "id": "imported-compose-source", + "upstream_behavior": "The source definition deploys the complete Docker Compose application model.", + "native_lxc_behavior": "The source model is preserved and remains blocked until every service option has a reviewed native Proxmox mapping.", + "reason": "Catalog import must not imply runtime compatibility.", + "behavioral_impact": "No automatic installation before review.", + "validation": "pending-per-application" + }, + { + "id": "rolling-latest-image", + "upstream_behavior": "A discovered Compose may pin a release tag or digest.", + "native_lxc_behavior": "ProxMenux selects the same image repository with the latest tag for catalog installations.", + "reason": "The automatic catalog intentionally offers rolling latest images; pinned versions belong to the future manual installer.", + "behavioral_impact": "The installed release can be newer than the discovered Compose revision.", + "validation": "pending-per-application" + }, + { + "id": "dedicated-lxc-network", + "upstream_behavior": "Docker publishes selected container ports on the Docker host.", + "native_lxc_behavior": "A reviewed native application will listen on its original container ports at a dedicated LXC address.", + "reason": "A native LXC has its own address and does not require Docker port NAT.", + "behavioral_impact": "Published ports are metadata; ProxMenux URLs use the matching container target port.", + "validation": "pending-per-application" + }, + { + "id": "compose-shm-size", + "upstream_behavior": "Compose sets the size of the container /dev/shm tmpfs.", + "native_lxc_behavior": "ProxMenux mounts a native LXC tmpfs at /dev/shm with the same requested capacity.", + "reason": "The OCI image runs directly as an LXC and therefore needs the equivalent Proxmox mount entry.", + "behavioral_impact": "None expected.", + "validation": "not-requested-by-compose" + }, + { + "id": "compose-command", + "upstream_behavior": "Compose replaces the image Cmd while retaining its Entrypoint.", + "native_lxc_behavior": "ProxMenux reads the official OCI Entrypoint and combines it with the Compose command as the native LXC init command.", + "reason": "Proxmox stores the effective OCI process as one entrypoint string.", + "behavioral_impact": "None expected.", + "validation": "not-requested-by-compose" + }, + { + "id": "compose-privileged-mode", + "upstream_behavior": "Compose selects whether the container runs in privileged mode.", + "native_lxc_behavior": "ProxMenux keeps the LXC unprivileged by default and exposes the broad Compose privilege request only as an explicit compatibility option.", + "reason": "A Compose privilege request is source metadata, not proof that the image technically requires a privileged LXC.", + "behavioral_impact": "A privileged LXC has weaker isolation from the Proxmox host.", + "validation": "native-equivalent" + }, + { + "id": "compose-process-runtime", + "upstream_behavior": "Compose can replace Entrypoint, User and WorkingDir and request an init process or interactive terminal.", + "native_lxc_behavior": "ProxMenux applies the process overrides through native LXC init directives; lxc-init provides PID 1 supervision and the CT console provides terminal access.", + "reason": "The OCI process must start with the same identity, command and working directory without Docker.", + "behavioral_impact": "Compose stdin_open and tty become access through the Proxmox LXC console.", + "validation": "not-requested-by-compose" + }, + { + "id": "compose-healthcheck", + "upstream_behavior": "Docker periodically executes the declared container healthcheck.", + "native_lxc_behavior": "For a single-service LXC, ProxMenux translates HTTP localhost checks into a mandatory first-start service check.", + "reason": "Proxmox has no persistent Docker health state, while the installer still must detect a failed first boot.", + "behavioral_impact": "The check runs during installation rather than continuously after installation.", + "validation": "not-requested-by-compose" + }, + { + "id": "compose-cpu-priority", + "upstream_behavior": "Docker cpu_shares sets a relative scheduling weight with 1024 as its neutral value.", + "native_lxc_behavior": "ProxMenux converts the relative weight to Proxmox cpuunits with 100 as its neutral value and lets the user review it.", + "reason": "Both settings express relative CPU priority on different scales.", + "behavioral_impact": "Rounding and Proxmox minimum limits can slightly change very low weights.", + "validation": "not-requested-by-compose" + }, + { + "id": "compose-resource-limits", + "upstream_behavior": "mem_limit sets the memory ceiling; ulimits sets process soft/hard resource limits.", + "native_lxc_behavior": "mem_limit supplies the editable Proxmox memory default, rounded up to MiB; ulimits maps to lxc.prlimit with -1 represented as unlimited.", + "reason": "Use native Proxmox memory and LXC prlimits, without a wrapper or changing the host kernel configuration.", + "behavioral_impact": "User-selected memory overrides Compose. Swap is a separate choice. Kernel restrictions still apply; nproc counts processes by real UID, not by container.", + "validation": "not-requested-by-compose" + }, + { + "id": "compose-network-identity", + "upstream_behavior": "Compose can set hostname, MAC address, extra hosts and attach a service to Docker networks.", + "native_lxc_behavior": "ProxMenux applies hostname and MAC to net0, writes additional host aliases into the LXC and uses its dedicated bridge connection for single-service networks.", + "reason": "A dedicated LXC has its own network namespace and does not need a Docker bridge per service.", + "behavioral_impact": "host-gateway resolves to the IPv4 address of the selected Proxmox bridge.", + "validation": "not-requested-by-compose" + }, + { + "id": "compose-network-mode", + "upstream_behavior": "Docker host mode removes Docker network isolation; bridge and default use a Docker-managed network.", + "native_lxc_behavior": "The OCI process uses the dedicated LXC network namespace directly, so host, bridge and default all listen on the LXC address without Docker NAT.", + "reason": "The LXC is the application host and already has its own address and port namespace.", + "behavioral_impact": "host means the LXC host, never the Proxmox host; this preserves Proxmox network isolation.", + "validation": "not-requested-by-compose" + }, + { + "id": "compose-capabilities-and-sysctls", + "upstream_behavior": "Compose can add Linux capabilities and set kernel parameters in the container network namespace.", + "native_lxc_behavior": "ProxMenux validates requested capabilities against the native LXC capability set and writes namespaced network settings as lxc.sysctl directives.", + "reason": "A native OCI-LXC already starts with the namespaced capability set; lxc.cap.keep would incorrectly discard unrelated required capabilities.", + "behavioral_impact": "Host-global capabilities such as SYS_MODULE remain blocked until their host prerequisite is explicitly adapted.", + "validation": "not-requested-by-compose" + }, + { + "id": "docker-engine-metadata", + "upstream_behavior": "Compose labels annotate Docker objects and the json-file logging driver rotates Docker-managed logs.", + "native_lxc_behavior": "Labels remain source metadata; Docker json-file settings are not applied because the OCI process runs directly under LXC.", + "reason": "There is no Docker object or Docker json-file log behind a native OCI-LXC application.", + "behavioral_impact": "Docker-only label consumers and Docker log-driver rotation do not exist in the native deployment.", + "validation": "not-requested-by-compose" + }, + { + "id": "compose-device-passthrough", + "upstream_behavior": "Compose passes host character devices or requests an NVIDIA runtime GPU.", + "native_lxc_behavior": "ProxMenux converts recognized device declarations to native Proxmox dev resources; NVIDIA profiles also inject compatible host driver libraries read-only.", + "reason": "Native OCI-LXC does not execute Docker device or NVIDIA runtime hooks.", + "behavioral_impact": "Hardware is exposed only after explicit user confirmation and host-path validation.", + "validation": "not-requested-by-compose" + }, + { + "id": "compose-host-ipc", + "upstream_behavior": "ipc: host shares the Docker host IPC namespace, commonly to avoid Docker's small default shared-memory allocation.", + "native_lxc_behavior": "The application keeps the LXC IPC namespace and receives a configurable 1 GiB /dev/shm instead of sharing Proxmox host IPC.", + "reason": "Processes in a single native LXC already share one IPC namespace; retaining isolation is safer than exposing host IPC.", + "behavioral_impact": "The application cannot exchange IPC objects with processes on the Proxmox host.", + "validation": "not-requested-by-compose" + } + ], + "installer_profile": { + "volume_preparations": [ + { + "container_path": "/var/www/html/storage", + "remove_lost_found": true, + "owner_strategy": "mapped-application-user", + "only_when_mount_type": "managed-volume" + } + ], + "startup_healthcheck": { + "scheme": "http", + "port": 8080, + "path": "/", + "timeout_seconds": 180, + "request_timeout_seconds": 10, + "stability_seconds": 4, + "verify_tls": true + } + } + }, + "compatibility": { + "automatic_install_candidate": false, + "validated": false, + "supported_compose_keys": [ + "image", + "restart", + "ports", + "volumes", + "environment" + ], + "untranslated_blockers": [], + "policy": "Excluded from the installable catalog pending compatibility review. The tested image runs as nobody, but its nginx and PHP-FPM startup requires writable runtime paths under /run; the current native OCI-LXC recipe could not start the service. Do not install until a supported runtime mapping is confirmed." + }, + "validation": { + "schema": "passed-at-generation", + "clean_install": "pending", + "service_health": "pending", + "restart_persistence": "pending", + "backup_restore": "pending", + "update_preserves_data": "pending" + }, + "lifecycle": { + "update_strategy": "resolve-latest-image-then-apply-reviewed-native-lxc-update", + "registry_state": { + "resolved_architecture": null, + "resolved_digest": null, + "image_version_label": null, + "image_created": null + }, + "change_detection": "compare-compose-sha256-and-resolved-latest-image-digest", + "automatic_unattended_updates": false + } +} diff --git a/oci/catalog/curated/input.json b/oci/catalog/curated/input.json new file mode 100644 index 00000000..88317b39 --- /dev/null +++ b/oci/catalog/curated/input.json @@ -0,0 +1,438 @@ +{ + "schema_version": "0.5.0", + "kind": "proxmenux.oci-template", + "id": "image-input", + "status": "generated-unvalidated", + "catalog_ui": { + "title": { + "en_US": "Input" + }, + "tagline": { + "en_US": "Self-hosted forms and workflows." + }, + "description": { + "en_US": "A self-hosted form builder using its bundled SQLite configuration for a single-container setup. The application key is required to encrypt stored data." + }, + "category": "business", + "category_label": "Business & ERP", + "author": "Deck9", + "developer": "Deck9", + "icon": "https://raw.githubusercontent.com/deck9/input/main/docs/public/input-icon.png", + "thumbnail": null, + "screenshots": [], + "architectures": [ + "amd64", + "arm64" + ], + "launch": { + "scheme": "http", + "port": 8080, + "path": "/" + }, + "website": "https://getinput.co/", + "documentation": "https://github.com/deck9/input/blob/main/docs/quick-start.md", + "repository": "https://github.com/deck9/input", + "tips": [ + "Create your first account in the web interface. This profile uses the single-container SQLite quick start; production deployments may instead use MariaDB, Redis, and S3." + ], + "mini_changelog": [], + "display_version": null, + "updated_at": null + }, + "source": { + "provider": "Deck9", + "repository": "https://github.com/deck9/input", + "revision": "2b08ab3b6bd73f12a03beedc19c6a561afe283c0", + "readme_raw_url": "https://github.com/deck9/input/blob/main/docs/quick-start.md", + "image_repository_url": "https://github.com/deck9/input/pkgs/container/input", + "readme_pushed_at": "", + "compose_sha256": "2153fd285760e5c8cd84b00efaa73641effa274e035ba86aa0ae153e7c17b8af", + "generated_at": "2026-10-26T06:30:00+00:00" + }, + "container_contract": { + "service_name": "input", + "container_name": "input", + "image": { + "reference": "ghcr.io/deck9/input:main", + "registry": "ghcr.io", + "repository": "ghcr.io/deck9/input", + "tag": "main", + "digest": null, + "pull_policy": "resolve-written-reference-to-architecture-digest-at-install" + }, + "environment": [ + { + "name": "APP_URL", + "example": "http://@CONTAINER_ADDRESS@:8080", + "required": true, + "sensitive": false, + "source": "upstream-documentation", + "container_address": "http://@CONTAINER_ADDRESS@:8080" + }, + { + "name": "APP_KEY", + "example": "", + "required": true, + "sensitive": true, + "source": "upstream-documentation", + "prompt": "APP_KEY: use the upstream command openssl rand -base64 32 and prefix its output with base64:" + } + ], + "volumes": [ + { + "id": "volume-0", + "container_path": "/var/www/html/storage", + "compose_source_example": "./storage", + "read_only": false, + "required": true, + "installation_choice": [ + "managed-volume", + "host-bind" + ], + "default": "managed-volume", + "managed_volume": { + "backup": true, + "default_size_gb": 4 + } + } + ], + "ports": [ + { + "container_port": 8080, + "published_example": 8080, + "protocol": "tcp", + "required": true, + "proxmox_behavior": "listener-on-dedicated-lxc-address-no-nat" + } + ], + "related_services": [], + "restart": "unless-stopped", + "stop_grace_period": null, + "original_compose": "{\n \"name\": \"input\",\n \"services\": {\n \"input\": {\n \"image\": \"ghcr.io/deck9/input:main\",\n \"restart\": \"unless-stopped\",\n \"ports\": [\n \"8080:8080\"\n ],\n \"volumes\": [\n \"./storage:/var/www/html/storage\"\n ],\n \"environment\": {\n \"APP_URL\": \"http://@CONTAINER_ADDRESS@:8080\",\n \"APP_KEY\": \"\"\n }\n }\n }\n}" + }, + "compose_stack": { + "project_name": "input", + "deployment_model": "one-native-oci-lxc-per-compose-service", + "user_experience": "single-application-install", + "main_service": "input", + "service_count": 1, + "services": [ + { + "name": "input", + "image": "ghcr.io/deck9/input:main", + "is_main": true, + "role": "frontend", + "vmid_offset": 0, + "depends_on": [], + "frontend_network": true, + "private_network": false, + "compose": { + "image": "ghcr.io/deck9/input:main", + "restart": "unless-stopped", + "ports": [ + "8080:8080" + ], + "volumes": [ + "./storage:/var/www/html/storage" + ], + "environment": { + "APP_URL": "http://@CONTAINER_ADDRESS@:8080", + "APP_KEY": "" + } + } + } + ], + "top_level": { + "name": "input" + }, + "networking": { + "frontend": "selected-proxmox-bridge", + "private_required": false, + "private_creation": "automatic-create-if-missing", + "private_address_allocation": "automatic-static-address-per-service", + "service_discovery": "private-addresses-with-compose-service-host-aliases", + "dependency_external_access": "disabled-unless-service-publishes-ports", + "prompt_user_for_private_network": false + }, + "storage": [ + { + "id": "input-volume-0", + "service": "input", + "container_path": "/var/www/html/storage", + "mode": "managed-volume", + "user_selectable": true, + "backup": true, + "shared_with_other_lxc": false, + "source_path": null, + "source_path_prompt": "Host path for Input data at /var/www/html/storage" + } + ], + "orchestration": { + "reserve_vmids_atomically": 1, + "start_order": [ + "input" + ], + "stop_order": [ + "input" + ], + "dependency_readiness": "compose-healthcheck-then-port-or-process-fallback", + "rollback_on_failure": "remove-new-rootfs-preserve-created-persistent-volumes" + }, + "installer_inputs": { + "prompted": [ + "stack_name", + "base_vmid", + "rootfs_storage", + "persistent_data_destinations", + "frontend_bridge", + "frontend_ipv4_mode" + ], + "automatic": [ + "dependent_vmids", + "private_bridge", + "private_subnet", + "private_service_addresses", + "compose_service_aliases", + "generated_secrets", + "dependency_start_and_stop_order" + ], + "generated_secrets": [ + { + "id": "app-key", + "strategy": "generate-cryptographically-random-at-install", + "bindings": [ + { + "service": "input", + "environment_variable": "APP_KEY" + } + ] + } + ] + } + }, + "first_run": { + "endpoints": [ + { + "label": "Input", + "scheme": "http", + "port": 8080, + "path": "/", + "source": "upstream-documentation" + } + ], + "credentials": [] + }, + "proxmox": { + "runtime": "native-oci-lxc", + "technology_status": "proxmox-technology-preview", + "defaults": { + "unprivileged": true, + "ostype": "auto-from-image", + "cores": 2, + "memory_mb": 2048, + "swap_mb": 512, + "rootfs_size_gb": 8, + "rootfs_storage": "local-lvm", + "volume_storage": "local-lvm", + "template_storage": "local", + "bridge": "vmbr0", + "ipv4": "dhcp", + "firewall": true, + "host_managed_network": true, + "onboot": false, + "features": [ + "nesting=1" + ], + "shutdown_timeout_seconds": 30 + }, + "image_metadata_policy": { + "entrypoint": "import-from-oci-image", + "cmd": "import-from-oci-image", + "environment": "import-image-env-then-apply-compose-overrides", + "user": "import-from-oci-image", + "working_dir": "import-from-oci-image", + "stop_signal": "import-from-oci-image" + }, + "adaptations": [ + { + "id": "imported-compose-source", + "upstream_behavior": "The source definition deploys the complete Docker Compose application model.", + "native_lxc_behavior": "The source model is preserved and remains blocked until every service option has a reviewed native Proxmox mapping.", + "reason": "Catalog import must not imply runtime compatibility.", + "behavioral_impact": "No automatic installation before review.", + "validation": "pending-per-application" + }, + { + "id": "rolling-latest-image", + "upstream_behavior": "A discovered Compose may pin a release tag or digest.", + "native_lxc_behavior": "ProxMenux selects the same image repository with the latest tag for catalog installations.", + "reason": "The automatic catalog intentionally offers rolling latest images; pinned versions belong to the future manual installer.", + "behavioral_impact": "The installed release can be newer than the discovered Compose revision.", + "validation": "pending-per-application" + }, + { + "id": "dedicated-lxc-network", + "upstream_behavior": "Docker publishes selected container ports on the Docker host.", + "native_lxc_behavior": "A reviewed native application will listen on its original container ports at a dedicated LXC address.", + "reason": "A native LXC has its own address and does not require Docker port NAT.", + "behavioral_impact": "Published ports are metadata; ProxMenux URLs use the matching container target port.", + "validation": "pending-per-application" + }, + { + "id": "compose-shm-size", + "upstream_behavior": "Compose sets the size of the container /dev/shm tmpfs.", + "native_lxc_behavior": "ProxMenux mounts a native LXC tmpfs at /dev/shm with the same requested capacity.", + "reason": "The OCI image runs directly as an LXC and therefore needs the equivalent Proxmox mount entry.", + "behavioral_impact": "None expected.", + "validation": "not-requested-by-compose" + }, + { + "id": "compose-command", + "upstream_behavior": "Compose replaces the image Cmd while retaining its Entrypoint.", + "native_lxc_behavior": "ProxMenux reads the official OCI Entrypoint and combines it with the Compose command as the native LXC init command.", + "reason": "Proxmox stores the effective OCI process as one entrypoint string.", + "behavioral_impact": "None expected.", + "validation": "not-requested-by-compose" + }, + { + "id": "compose-privileged-mode", + "upstream_behavior": "Compose selects whether the container runs in privileged mode.", + "native_lxc_behavior": "ProxMenux keeps the LXC unprivileged by default and exposes the broad Compose privilege request only as an explicit compatibility option.", + "reason": "A Compose privilege request is source metadata, not proof that the image technically requires a privileged LXC.", + "behavioral_impact": "A privileged LXC has weaker isolation from the Proxmox host.", + "validation": "native-equivalent" + }, + { + "id": "compose-process-runtime", + "upstream_behavior": "Compose can replace Entrypoint, User and WorkingDir and request an init process or interactive terminal.", + "native_lxc_behavior": "ProxMenux applies the process overrides through native LXC init directives; lxc-init provides PID 1 supervision and the CT console provides terminal access.", + "reason": "The OCI process must start with the same identity, command and working directory without Docker.", + "behavioral_impact": "Compose stdin_open and tty become access through the Proxmox LXC console.", + "validation": "not-requested-by-compose" + }, + { + "id": "compose-healthcheck", + "upstream_behavior": "Docker periodically executes the declared container healthcheck.", + "native_lxc_behavior": "For a single-service LXC, ProxMenux translates HTTP localhost checks into a mandatory first-start service check.", + "reason": "Proxmox has no persistent Docker health state, while the installer still must detect a failed first boot.", + "behavioral_impact": "The check runs during installation rather than continuously after installation.", + "validation": "not-requested-by-compose" + }, + { + "id": "compose-cpu-priority", + "upstream_behavior": "Docker cpu_shares sets a relative scheduling weight with 1024 as its neutral value.", + "native_lxc_behavior": "ProxMenux converts the relative weight to Proxmox cpuunits with 100 as its neutral value and lets the user review it.", + "reason": "Both settings express relative CPU priority on different scales.", + "behavioral_impact": "Rounding and Proxmox minimum limits can slightly change very low weights.", + "validation": "not-requested-by-compose" + }, + { + "id": "compose-resource-limits", + "upstream_behavior": "mem_limit sets the memory ceiling; ulimits sets process soft/hard resource limits.", + "native_lxc_behavior": "mem_limit supplies the editable Proxmox memory default, rounded up to MiB; ulimits maps to lxc.prlimit with -1 represented as unlimited.", + "reason": "Use native Proxmox memory and LXC prlimits, without a wrapper or changing the host kernel configuration.", + "behavioral_impact": "User-selected memory overrides Compose. Swap is a separate choice. Kernel restrictions still apply; nproc counts processes by real UID, not by container.", + "validation": "not-requested-by-compose" + }, + { + "id": "compose-network-identity", + "upstream_behavior": "Compose can set hostname, MAC address, extra hosts and attach a service to Docker networks.", + "native_lxc_behavior": "ProxMenux applies hostname and MAC to net0, writes additional host aliases into the LXC and uses its dedicated bridge connection for single-service networks.", + "reason": "A dedicated LXC has its own network namespace and does not need a Docker bridge per service.", + "behavioral_impact": "host-gateway resolves to the IPv4 address of the selected Proxmox bridge.", + "validation": "not-requested-by-compose" + }, + { + "id": "compose-network-mode", + "upstream_behavior": "Docker host mode removes Docker network isolation; bridge and default use a Docker-managed network.", + "native_lxc_behavior": "The OCI process uses the dedicated LXC network namespace directly, so host, bridge and default all listen on the LXC address without Docker NAT.", + "reason": "The LXC is the application host and already has its own address and port namespace.", + "behavioral_impact": "host means the LXC host, never the Proxmox host; this preserves Proxmox network isolation.", + "validation": "not-requested-by-compose" + }, + { + "id": "compose-capabilities-and-sysctls", + "upstream_behavior": "Compose can add Linux capabilities and set kernel parameters in the container network namespace.", + "native_lxc_behavior": "ProxMenux validates requested capabilities against the native LXC capability set and writes namespaced network settings as lxc.sysctl directives.", + "reason": "A native OCI-LXC already starts with the namespaced capability set; lxc.cap.keep would incorrectly discard unrelated required capabilities.", + "behavioral_impact": "Host-global capabilities such as SYS_MODULE remain blocked until their host prerequisite is explicitly adapted.", + "validation": "not-requested-by-compose" + }, + { + "id": "docker-engine-metadata", + "upstream_behavior": "Compose labels annotate Docker objects and the json-file logging driver rotates Docker-managed logs.", + "native_lxc_behavior": "Labels remain source metadata; Docker json-file settings are not applied because the OCI process runs directly under LXC.", + "reason": "There is no Docker object or Docker json-file log behind a native OCI-LXC application.", + "behavioral_impact": "Docker-only label consumers and Docker log-driver rotation do not exist in the native deployment.", + "validation": "not-requested-by-compose" + }, + { + "id": "compose-device-passthrough", + "upstream_behavior": "Compose passes host character devices or requests an NVIDIA runtime GPU.", + "native_lxc_behavior": "ProxMenux converts recognized device declarations to native Proxmox dev resources; NVIDIA profiles also inject compatible host driver libraries read-only.", + "reason": "Native OCI-LXC does not execute Docker device or NVIDIA runtime hooks.", + "behavioral_impact": "Hardware is exposed only after explicit user confirmation and host-path validation.", + "validation": "not-requested-by-compose" + }, + { + "id": "compose-host-ipc", + "upstream_behavior": "ipc: host shares the Docker host IPC namespace, commonly to avoid Docker's small default shared-memory allocation.", + "native_lxc_behavior": "The application keeps the LXC IPC namespace and receives a configurable 1 GiB /dev/shm instead of sharing Proxmox host IPC.", + "reason": "Processes in a single native LXC already share one IPC namespace; retaining isolation is safer than exposing host IPC.", + "behavioral_impact": "The application cannot exchange IPC objects with processes on the Proxmox host.", + "validation": "not-requested-by-compose" + } + ], + "installer_profile": { + "volume_preparations": [ + { + "container_path": "/var/www/html/storage", + "remove_lost_found": true, + "owner_strategy": "mapped-application-user", + "only_when_mount_type": "managed-volume" + } + ], + "startup_healthcheck": { + "scheme": "http", + "port": 8080, + "path": "/", + "timeout_seconds": 180, + "request_timeout_seconds": 10, + "stability_seconds": 4, + "verify_tls": true + } + } + }, + "compatibility": { + "automatic_install_candidate": false, + "validated": false, + "supported_compose_keys": [ + "image", + "restart", + "ports", + "volumes", + "environment" + ], + "untranslated_blockers": [], + "policy": "Excluded from the installable catalog pending compatibility review. The tested image runs as nobody, but its nginx and PHP-FPM startup requires writable runtime paths under /run; the current native OCI-LXC recipe could not start the service. Do not install until a supported runtime mapping is confirmed." + }, + "validation": { + "schema": "passed-at-generation", + "clean_install": "pending", + "service_health": "pending", + "restart_persistence": "pending", + "backup_restore": "pending", + "update_preserves_data": "pending" + }, + "lifecycle": { + "update_strategy": "resolve-latest-image-then-apply-reviewed-native-lxc-update", + "registry_state": { + "resolved_architecture": null, + "resolved_digest": null, + "image_version_label": null, + "image_created": null + }, + "change_detection": "compare-compose-sha256-and-resolved-latest-image-digest", + "automatic_unattended_updates": false + } +} diff --git a/oci/catalog/index.json b/oci/catalog/index.json index b8246f99..39dd8101 100644 --- a/oci/catalog/index.json +++ b/oci/catalog/index.json @@ -6173,6 +6173,38 @@ "hidden": false, "template_id": "linuxserver-inkscape" }, + { + "id": "input", + "provider": "official", + "template_family": "curated-profile", + "title": "Input", + "repository": "https://github.com/deck9/input", + "description": "A self-hosted form builder using its bundled SQLite configuration for a single-container setup. The application key is required to encrypt stored data.", + "website": "https://getinput.co/", + "icon": "https://raw.githubusercontent.com/deck9/input/main/docs/public/input-icon.png", + "architectures": [ + "amd64", + "arm64" + ], + "updated_at": null, + "main_image": "ghcr.io/deck9/input:main", + "category": "business", + "category_label": "Business & ERP", + "replaces_discovered_ids": [], + "curated_path": "catalog/curated/input.json", + "template": "apps/input.json", + "template_status": "generated-unvalidated", + "automatic_install_candidate": false, + "untranslated_blockers": [], + "requires_privileged_lxc": false, + "optional_privileged_lxc": false, + "requires_host_pid_namespace": false, + "requires_relaxed_confinement": false, + "optional_relaxed_confinement": false, + "requires_security_confirmation": false, + "hidden": true, + "template_id": "image-input" + }, { "id": "intellij-idea", "provider": "linuxserver.io",