Rename project to docker-qmx-fusion and configure for QMX-Fusion application
This commit is contained in:
102
AGENTS.md
Normal file
102
AGENTS.md
Normal file
@@ -0,0 +1,102 @@
|
|||||||
|
# Developer Guide for Agentic Coding Agents
|
||||||
|
|
||||||
|
This guide provides the necessary context, commands, and conventions for working effectively in the `docker-qmx-fusion` repository.
|
||||||
|
|
||||||
|
## 1. Project Overview
|
||||||
|
This repository maintains the Docker image for QMX-Fusion, based on Chromium. It follows the [LinuxServer.io](https://linuxserver.io) standards. It uses the `s6-overlay` for process management and the `selkies` base image for GUI-in-browser functionality.
|
||||||
|
|
||||||
|
## 2. Critical Development Rules
|
||||||
|
- **NEVER edit auto-generated files directly:**
|
||||||
|
- `README.md` (Edit `readme-vars.yml` instead)
|
||||||
|
- `Jenkinsfile` (Edit `jenkins-vars.yml` instead)
|
||||||
|
- `package_versions.txt` (Auto-generated by CI)
|
||||||
|
- **Synchronize Dockerfiles:** If you add a package or change logic in `Dockerfile`, ensure the same changes are applied to `Dockerfile.aarch64`.
|
||||||
|
- **Package Sorting:** Always list packages in `apt-get install` blocks in **alphabetical order**.
|
||||||
|
- **Changelog:** Every logic or Dockerfile change MUST include an entry in `readme-vars.yml` under the `changelogs` section.
|
||||||
|
|
||||||
|
## 3. Build, Lint, and Test Commands
|
||||||
|
|
||||||
|
### Build
|
||||||
|
To build the image locally (amd64):
|
||||||
|
```bash
|
||||||
|
docker build --no-cache --pull -t lscr.io/linuxserver/chromium:latest .
|
||||||
|
```
|
||||||
|
|
||||||
|
### Linting
|
||||||
|
We use `shellcheck` for all shell scripts. Run it on any script you modify:
|
||||||
|
```bash
|
||||||
|
shellcheck root/usr/bin/wrapped-chromium
|
||||||
|
```
|
||||||
|
|
||||||
|
### Testing
|
||||||
|
Container testing is performed using the LinuxServer.io CI tool. To run tests locally, you need the built image and the CI container:
|
||||||
|
```bash
|
||||||
|
docker run --rm \
|
||||||
|
--shm-size=1gb \
|
||||||
|
-v /var/run/docker.sock:/var/run/docker.sock \
|
||||||
|
-e IMAGE="lscr.io/linuxserver/chromium" \
|
||||||
|
-e TAGS="latest" \
|
||||||
|
-t ghcr.io/linuxserver/ci:latest \
|
||||||
|
python3 test_build.py
|
||||||
|
```
|
||||||
|
|
||||||
|
## 4. Configuration Management (`readme-vars.yml`)
|
||||||
|
The `readme-vars.yml` file is the source of truth for documentation and container parameters.
|
||||||
|
|
||||||
|
### Adding Environment Variables
|
||||||
|
Add new variables under `opt_param_env_vars` (optional) or `param_env_vars` (required):
|
||||||
|
```yaml
|
||||||
|
opt_param_env_vars:
|
||||||
|
- { env_var: "CHROME_CLI", env_value: "https://www.linuxserver.io/", desc: "Specify Chromium CLI flags" }
|
||||||
|
```
|
||||||
|
|
||||||
|
### Updating Changelog
|
||||||
|
Always add a new entry at the top of the `changelogs` list:
|
||||||
|
```yaml
|
||||||
|
changelogs:
|
||||||
|
- { date: "06.01.26:", desc: "Update logic for X feature." }
|
||||||
|
```
|
||||||
|
|
||||||
|
## 5. Code Style Guidelines
|
||||||
|
|
||||||
|
### Shell Scripts (`root/`)
|
||||||
|
- **Shebang:** Always use `#!/bin/bash`.
|
||||||
|
- **Indentation:** Use 2 spaces for indentation.
|
||||||
|
- **Wrapper Pattern:** Follow the pattern in `root/usr/bin/wrapped-chromium`.
|
||||||
|
- **Cleanup:** Scripts should handle cleanup of temporary files (e.g., Chromium Singleton locks).
|
||||||
|
- **Security:** Check for privileged mode when necessary:
|
||||||
|
```bash
|
||||||
|
if grep -q 'Seccomp:.0' /proc/1/status; then
|
||||||
|
# Privileged mode logic
|
||||||
|
fi
|
||||||
|
```
|
||||||
|
|
||||||
|
### Dockerfiles
|
||||||
|
- **Base Image:** Use the specified LinuxServer.io base image (e.g., `ghcr.io/linuxserver/baseimage-selkies`).
|
||||||
|
- **Layer Optimization:** Chain commands with `&& \` and perform cleanup in the same `RUN` block to minimize image size.
|
||||||
|
- **Cleanup Commands:**
|
||||||
|
```bash
|
||||||
|
apt-get autoclean && \
|
||||||
|
rm -rf /var/lib/apt/lists/* /var/tmp/* /tmp/*
|
||||||
|
```
|
||||||
|
|
||||||
|
### LinuxServer.io Conventions
|
||||||
|
- **PUID/PGID:** Support for user mapping is handled by the base image; ensure any new files in `root/` are compatible with the `abc` user.
|
||||||
|
- **S6 Overlay:** Use S6 service files for process management if adding new background services. Ensure `run` scripts are executable (`chmod +x`). In this project, an `nginx` service is used to serve local content.
|
||||||
|
|
||||||
|
## 6. Error Handling and Logging
|
||||||
|
- **Redirection:** In Shell scripts, redirect stderr to stdout or `/dev/null` as appropriate: `"$@" > /dev/null 2>&1`.
|
||||||
|
- **Exit Codes:** Use `set -e` in complex scripts to exit on failure.
|
||||||
|
- **Validation:** Validate the existence of binaries or directories before execution.
|
||||||
|
|
||||||
|
## 7. Directory Structure
|
||||||
|
- `/root`: Files here are copied directly to the root of the container image.
|
||||||
|
- `/root/defaults`: Default configuration files for Openbox and autostart.
|
||||||
|
- `/root/usr/bin`: Custom scripts and wrappers.
|
||||||
|
- `/root/etc/services.d`: s6-overlay service definitions.
|
||||||
|
- `/.github`: CI/CD workflows and issue templates.
|
||||||
|
|
||||||
|
## 8. Multi-Architecture Support
|
||||||
|
- Always update both `Dockerfile` (amd64) and `Dockerfile.aarch64` (arm64).
|
||||||
|
- Use `lscr.io/linuxserver/qemu-static` to build ARM images on x86 hardware.
|
||||||
|
- Avoid architecture-specific binaries in `root/` unless handled by logic in scripts.
|
||||||
11
Dockerfile
11
Dockerfile
@@ -9,7 +9,8 @@ LABEL build_version="Linuxserver.io version:- ${VERSION} Build-date:- ${BUILD_DA
|
|||||||
LABEL maintainer="thelamer"
|
LABEL maintainer="thelamer"
|
||||||
|
|
||||||
# title
|
# title
|
||||||
ENV TITLE=Chromium
|
ENV TITLE=QMX-Fusion
|
||||||
|
ENV CHROME_CLI="--kiosk http://localhost"
|
||||||
|
|
||||||
RUN \
|
RUN \
|
||||||
echo "**** add icon ****" && \
|
echo "**** add icon ****" && \
|
||||||
@@ -20,7 +21,13 @@ RUN \
|
|||||||
apt-get update && \
|
apt-get update && \
|
||||||
apt-get install -y --no-install-recommends \
|
apt-get install -y --no-install-recommends \
|
||||||
chromium \
|
chromium \
|
||||||
chromium-l10n && \
|
chromium-l10n \
|
||||||
|
git \
|
||||||
|
nginx && \
|
||||||
|
echo "**** clone web content ****" && \
|
||||||
|
git clone https://github.com/Sparks72/QMX-Fusion-v1 /var/www/fusion-v1 && \
|
||||||
|
chown -R abc:abc /var/www/fusion-v1 && \
|
||||||
|
rm -f /etc/nginx/sites-enabled/default && \
|
||||||
echo "**** cleanup ****" && \
|
echo "**** cleanup ****" && \
|
||||||
apt-get autoclean && \
|
apt-get autoclean && \
|
||||||
rm -rf \
|
rm -rf \
|
||||||
|
|||||||
@@ -9,7 +9,8 @@ LABEL build_version="Linuxserver.io version:- ${VERSION} Build-date:- ${BUILD_DA
|
|||||||
LABEL maintainer="thelamer"
|
LABEL maintainer="thelamer"
|
||||||
|
|
||||||
# title
|
# title
|
||||||
ENV TITLE=Chromium
|
ENV TITLE=QMX-Fusion
|
||||||
|
ENV CHROME_CLI="--kiosk http://localhost"
|
||||||
|
|
||||||
RUN \
|
RUN \
|
||||||
echo "**** add icon ****" && \
|
echo "**** add icon ****" && \
|
||||||
@@ -20,7 +21,13 @@ RUN \
|
|||||||
apt-get update && \
|
apt-get update && \
|
||||||
apt-get install -y --no-install-recommends \
|
apt-get install -y --no-install-recommends \
|
||||||
chromium \
|
chromium \
|
||||||
chromium-l10n && \
|
chromium-l10n \
|
||||||
|
git \
|
||||||
|
nginx && \
|
||||||
|
echo "**** clone web content ****" && \
|
||||||
|
git clone https://github.com/Sparks72/QMX-Fusion-v1 /var/www/fusion-v1 && \
|
||||||
|
chown -R abc:abc /var/www/fusion-v1 && \
|
||||||
|
rm -f /etc/nginx/sites-enabled/default && \
|
||||||
echo "**** cleanup ****" && \
|
echo "**** cleanup ****" && \
|
||||||
apt-get autoclean && \
|
apt-get autoclean && \
|
||||||
rm -rf \
|
rm -rf \
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
---
|
---
|
||||||
|
|
||||||
# jenkins variables
|
# jenkins variables
|
||||||
project_name: docker-chromium
|
project_name: docker-qmx-fusion
|
||||||
external_type: os
|
external_type: os
|
||||||
release_type: stable
|
release_type: stable
|
||||||
release_tag: latest
|
release_tag: latest
|
||||||
@@ -9,12 +9,12 @@ ls_branch: master
|
|||||||
build_armhf: false
|
build_armhf: false
|
||||||
repo_vars:
|
repo_vars:
|
||||||
- BUILD_VERSION_ARG = 'CHROMIUM_VERSION'
|
- BUILD_VERSION_ARG = 'CHROMIUM_VERSION'
|
||||||
- LS_USER = 'linuxserver'
|
- LS_USER = 'sa6anw'
|
||||||
- LS_REPO = 'docker-chromium'
|
- LS_REPO = 'docker-qmx-fusion'
|
||||||
- CONTAINER_NAME = 'chromium'
|
- CONTAINER_NAME = 'qmx-fusion'
|
||||||
- DOCKERHUB_IMAGE = 'linuxserver/chromium'
|
- DOCKERHUB_IMAGE = 'sa6anw/qmx-fusion'
|
||||||
- DEV_DOCKERHUB_IMAGE = 'lsiodev/chromium'
|
- DEV_DOCKERHUB_IMAGE = 'sa6anw/qmx-fusion-dev'
|
||||||
- PR_DOCKERHUB_IMAGE = 'lspipepr/chromium'
|
- PR_DOCKERHUB_IMAGE = 'sa6anw/qmx-fusion-pr'
|
||||||
- DIST_IMAGE = 'ubuntu'
|
- DIST_IMAGE = 'ubuntu'
|
||||||
- MULTIARCH = 'true'
|
- MULTIARCH = 'true'
|
||||||
- CI = 'true'
|
- CI = 'true'
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
---
|
---
|
||||||
|
|
||||||
# project information
|
# project information
|
||||||
project_name: chromium
|
project_name: qmx-fusion
|
||||||
project_url: "https://www.chromium.org/chromium-projects/"
|
project_url: "https://github.com/Sparks72/QMX-Fusion-v1"
|
||||||
project_logo: "https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/chromium-logo.png"
|
project_logo: "https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/chromium-logo.png"
|
||||||
project_blurb: "[Chromium]({{ project_url }}) is an open-source browser project that aims to build a safer, faster, and more stable way for all users to experience the web."
|
project_blurb: "Docker image for [QMX-Fusion]({{ project_url }}), an application for radio enthusiasts."
|
||||||
project_lsio_github_repo_url: "https://github.com/linuxserver/docker-{{ project_name }}"
|
project_lsio_github_repo_url: "https://git.sa6anw.se/sa6anw/docker-{{ project_name }}"
|
||||||
project_categories: "Web Browser"
|
project_categories: "Radio"
|
||||||
project_blurb_optional_extras_enabled: false
|
project_blurb_optional_extras_enabled: false
|
||||||
# supported architectures
|
# supported architectures
|
||||||
available_architectures:
|
available_architectures:
|
||||||
@@ -32,7 +32,7 @@ custom_params:
|
|||||||
# optional variables
|
# optional variables
|
||||||
opt_param_usage_include_env: true
|
opt_param_usage_include_env: true
|
||||||
opt_param_env_vars:
|
opt_param_env_vars:
|
||||||
- {env_var: "CHROME_CLI", env_value: "https://www.linuxserver.io/", desc: "Specify one or multiple Chromium CLI flags, this string will be passed to the application in full."}
|
- {env_var: "CHROME_CLI", env_value: "--kiosk http://localhost", desc: "Specify one or multiple Chromium CLI flags, this string will be passed to the application in full."}
|
||||||
# Selkies blurb settings
|
# Selkies blurb settings
|
||||||
selkies_blurb: true
|
selkies_blurb: true
|
||||||
show_nvidia: true
|
show_nvidia: true
|
||||||
@@ -114,6 +114,7 @@ init_diagram: |
|
|||||||
"chromium:latest" <- Base Images
|
"chromium:latest" <- Base Images
|
||||||
# changelog
|
# changelog
|
||||||
changelogs:
|
changelogs:
|
||||||
|
- {date: "06.01.26:", desc: "Add nginx to serve QMX-Fusion-v1 and start chromium in kiosk mode."}
|
||||||
- {date: "20.12.25:", desc: "Add Wayland init logic."}
|
- {date: "20.12.25:", desc: "Add Wayland init logic."}
|
||||||
- {date: "22.09.25:", desc: "Rebase to Debian Trixie."}
|
- {date: "22.09.25:", desc: "Rebase to Debian Trixie."}
|
||||||
- {date: "01.07.25:", desc: "Add Kasm branch."}
|
- {date: "01.07.25:", desc: "Add Kasm branch."}
|
||||||
|
|||||||
@@ -2,6 +2,6 @@
|
|||||||
<openbox_menu xmlns="http://openbox.org/3.4/menu">
|
<openbox_menu xmlns="http://openbox.org/3.4/menu">
|
||||||
<menu id="root-menu" label="MENU">
|
<menu id="root-menu" label="MENU">
|
||||||
<item label="xterm" icon="/usr/share/pixmaps/xterm-color_48x48.xpm"><action name="Execute"><command>/usr/bin/xterm</command></action></item>
|
<item label="xterm" icon="/usr/share/pixmaps/xterm-color_48x48.xpm"><action name="Execute"><command>/usr/bin/xterm</command></action></item>
|
||||||
<item label="Chromium" icon="/usr/share/icons/hicolor/48x48/apps/chromium.png"><action name="Execute"><command>/usr/bin/wrapped-chromium</command></action></item>
|
<item label="QMX-Fusion" icon="/usr/share/icons/hicolor/48x48/apps/chromium.png"><action name="Execute"><command>/usr/bin/wrapped-chromium</command></action></item>
|
||||||
</menu>
|
</menu>
|
||||||
</openbox_menu>
|
</openbox_menu>
|
||||||
|
|||||||
@@ -2,6 +2,6 @@
|
|||||||
<openbox_menu xmlns="http://openbox.org/3.4/menu">
|
<openbox_menu xmlns="http://openbox.org/3.4/menu">
|
||||||
<menu id="root-menu" label="MENU">
|
<menu id="root-menu" label="MENU">
|
||||||
<item label="foot" icon="/usr/share/icons/hicolor/48x48/apps/foot.png"><action name="Execute"><command>/usr/bin/foot</command></action></item>
|
<item label="foot" icon="/usr/share/icons/hicolor/48x48/apps/foot.png"><action name="Execute"><command>/usr/bin/foot</command></action></item>
|
||||||
<item label="Chromium" icon="/usr/share/icons/hicolor/48x48/apps/chromium.png"><action name="Execute"><command>/usr/bin/wrapped-chromium --enable-features=UseOzonePlatform --ozone-platform=wayland</command></action></item>
|
<item label="QMX-Fusion" icon="/usr/share/icons/hicolor/48x48/apps/chromium.png"><action name="Execute"><command>/usr/bin/wrapped-chromium --enable-features=UseOzonePlatform --ozone-platform=wayland</command></action></item>
|
||||||
</menu>
|
</menu>
|
||||||
</openbox_menu>
|
</openbox_menu>
|
||||||
|
|||||||
8
root/etc/nginx/conf.d/default.conf
Normal file
8
root/etc/nginx/conf.d/default.conf
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
server {
|
||||||
|
listen 80 default_server;
|
||||||
|
root /var/www/fusion-v1;
|
||||||
|
index index.html;
|
||||||
|
location / {
|
||||||
|
try_files $uri $uri/ =404;
|
||||||
|
}
|
||||||
|
}
|
||||||
2
root/etc/services.d/nginx/run
Executable file
2
root/etc/services.d/nginx/run
Executable file
@@ -0,0 +1,2 @@
|
|||||||
|
#!/usr/bin/with-contenv bash
|
||||||
|
exec nginx -g "daemon off;"
|
||||||
Reference in New Issue
Block a user