mirror of
https://github.com/MacRimi/ProxMenux.git
synced 2026-11-02 10:52:22 +00:00
Last changes before version 1.2.7. OCI manager Apps - Multi-container applications start while one of their containers is being backed up: the start hook waits until vzdump releases it and does not start it twice. The DHCP client of a dependency no longer keeps the lock of the hook, so later starts do not hang, and the watchdog waits while a dependency is locked. Installing or updating ProxMenux replaces the published copies of the hook already in place. - Images built from scratch with a numeric user, such as ddns-updater, install: the container is created from a copy of the image that adds the /etc/passwd and /etc/group Proxmox VE needs, and the application runs with the user the image declares. The downloaded image stays unchanged. An image with a named user and no user database stops before anything is created, with a message that says why. Catalog - Twelve new applications: MDBListarr, CrossWatch, Free Games Claimer Remaster, Cloudreve, Poznote and AceStream HTTP Proxy, suggested in discussion #440, and the Dockur images of Chrony, Dnsmasq, Tor, Stunnel, strfry and Statping. The catalog lists 347 applications. - Their prompts, labels and notes are translated into the seven languages of the menus. Documentation - OCI manager: architecture, lifecycle and stacks pages revised, with larger diagrams and new screenshots. - Contributors: the page now thanks those developing, reviewing, translating and testing ProxMenux today and those who helped in its first steps, with new avatars. Tests for the stack start hook, the watchdog, the user database check of OCI images and the Tor installation summary.
115 lines
6.1 KiB
JSON
115 lines
6.1 KiB
JSON
{
|
|
"meta": {
|
|
"title": "How an OCI image is translated | ProxMenux",
|
|
"description": "From the image repository and its Compose file to a reviewable template, a deployment plan and a native Proxmox VE LXC, without Docker inside."
|
|
},
|
|
"header": {
|
|
"title": "How an OCI image is translated",
|
|
"description": "From the image repository and its Compose file to a reviewable template, a deployment plan and a native LXC, without installing Docker inside.",
|
|
"section": "OCI manager Apps"
|
|
},
|
|
"sections": [
|
|
{
|
|
"id": "pipeline",
|
|
"title": "The translation pipeline",
|
|
"blocks": [
|
|
{
|
|
"mermaid": {
|
|
"chartCode": "flowchart TB\n A[\"{{repo}}\"] --> B[\"Compose + README\"]\n B --> C[\"{{converter}}\"]\n C --> D[\"{{template}}\"]\n D --> E{\"{{blockers}}\"}\n E -- \"{{no}}\" --> F[\"{{review}}\"]\n F --> D\n E -- \"{{yes}}\" --> G[\"{{plan}}\"]\n G --> H[\"pct create\"]\n H --> I[\"{{lxc}}\"]",
|
|
"labels": {
|
|
"repo": "Image repository",
|
|
"converter": "Converter",
|
|
"template": "JSON template",
|
|
"blockers": "No blockers?",
|
|
"no": "No",
|
|
"yes": "Yes",
|
|
"review": "Review / overlay",
|
|
"plan": "Deployment plan",
|
|
"lxc": "Native LXC"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"p": "The converter reads the image and the Compose file its project publishes and writes a JSON template. A template with untranslated blockers goes through review, where a curated overlay resolves them, before it is published in the catalog. Only templates without blockers are offered for installation."
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "template",
|
|
"title": "What the template keeps",
|
|
"blocks": [
|
|
{
|
|
"cards": {
|
|
"items": [
|
|
{ "icon": "archive", "title": "Image identity", "body": "Repository, rolling tag, architecture, resolved digest and source revision." },
|
|
{ "icon": "braces", "title": "Container contract", "body": "Entrypoint, Cmd, environment, user, working directory, stop signal, ports and volumes." },
|
|
{ "icon": "layers", "title": "Proxmox VE translation", "body": "Resources, security, mount points, devices, sysctls, healthchecks and the adaptations each one needs, with their reason." },
|
|
{ "icon": "shield", "title": "Compatibility", "body": "Supported keys, untranslated blockers and the state of each validation." }
|
|
]
|
|
}
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "sources",
|
|
"title": "OCI provides the process; Compose provides the environment",
|
|
"blocks": [
|
|
{
|
|
"table": {
|
|
"headers": ["Source", "Example", "Native result"],
|
|
"rows": [
|
|
["OCI metadata", "<code>Entrypoint</code>, <code>Cmd</code>, <code>User</code>", "Proxmox VE imports them when the CT is created"],
|
|
["Docker Compose", "<code>environment</code>, <code>volumes</code>, <code>devices</code>", "LXC environment entries, <code>mpN</code> and <code>devN</code>"],
|
|
["ProxMenux profile", "GPU, healthcheck, credentials", "questions and reviewed adaptations"],
|
|
["User", "VMID, storage, network", "the instance contract"]
|
|
]
|
|
}
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "install",
|
|
"title": "What happens during an installation",
|
|
"blocks": [
|
|
{
|
|
"steps": {
|
|
"items": [
|
|
{ "title": "Resolve", "body": "The registry is queried, the host architecture is selected and the effective digest of the rolling tag is fixed." },
|
|
{ "title": "Download and verify", "body": "Skopeo downloads the image as an OCI archive, and every layer is checked against its digest and decompressed before anything is created. A damaged download is fetched a second time before the installation stops." },
|
|
{ "title": "Build", "body": "<code>pct create</code> builds the rootfs from the archive and keeps the official process metadata of the image." },
|
|
{ "title": "Connect", "body": "The declared volumes, network, environment, devices and security profiles are attached." },
|
|
{ "title": "Console", "body": "The console output of the container is kept on the host, and the Proxmox VE console opens a shell when the image ships one." },
|
|
{ "title": "Check", "body": "The first start waits for an address and for the service to answer; a failure is not reported as a successful installation." },
|
|
{ "title": "Register", "body": "The effective configuration is written to the instance contract that updates and recreations use." }
|
|
]
|
|
}
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "example",
|
|
"title": "Example: an image with /config and /downloads",
|
|
"intro": "A common Compose definition and the Proxmox VE configuration it becomes. The paths the application expects do not change.",
|
|
"blocks": [
|
|
{
|
|
"codeGrid": {
|
|
"items": [
|
|
{
|
|
"title": "Docker Compose",
|
|
"code": "image: lscr.io/linuxserver/example:latest\nenvironment:\n - PUID=1000\n - PGID=1000\nvolumes:\n - config:/config\n - /srv/downloads:/downloads\nports:\n - 8080:8080"
|
|
},
|
|
{
|
|
"title": "/etc/pve/lxc/VMID.conf (excerpt)",
|
|
"code": "entrypoint: /init\nmp0: local-lvm:vm-VMID-disk-1,mp=/config,backup=1,size=8G\nmp1: /srv/downloads,mp=/downloads\nnet0: name=eth0,bridge=vmbr0,ip=dhcp,type=veth\nlxc.environment.runtime: PUID=1000\nlxc.environment.runtime: PGID=1000"
|
|
}
|
|
]
|
|
}
|
|
},
|
|
{
|
|
"p": "<code>mp0</code> is a second disk that belongs to the container, named <code>vm-VMID-disk-N</code> on the selected storage. It is mounted at <code>/config</code> and, with <code>backup=1</code>, it is part of the container backup. <code>mp1</code> creates no disk: it binds the host directory <code>/srv/downloads</code> to <code>/downloads</code> inside the LXC. Port 8080 is not mapped: the LXC has an address of its own and the service answers on it."
|
|
}
|
|
]
|
|
}
|
|
]
|
|
}
|