142 lines
7.4 KiB
Markdown
142 lines
7.4 KiB
Markdown
|
|
# KAMOS - Gaming OS
|
||
|
|
|
||
|
|
> Play. Perform. Dominate.
|
||
|
|
|
||
|
|
KAMOS is a personal Bazzite-based bootc image with custom logo, wallpaper, boot splash, and OS branding. Built on top of `ghcr.io/ublue-os/bazzite-nvidia:stable` so the proprietary NVIDIA driver and Bazzite's gaming/desktop tuning come for free.
|
||
|
|
|
||
|
|
## Architecture note (important if you're on a Mac)
|
||
|
|
|
||
|
|
KAMOS is `linux/amd64` only. Bazzite NVIDIA has no ARM64 build and NVIDIA's proprietary driver doesn't run on Apple Silicon anyway. The MacBook M2 is fine as a *build host* (CI does the heavy lifting) and as a *test host* via VMware Fusion's x86_64 emulation, but KAMOS is meant to run on a real NVIDIA PC.
|
||
|
|
|
||
|
|
## Layout
|
||
|
|
|
||
|
|
```
|
||
|
|
kamos/
|
||
|
|
├── Containerfile # FROM bazzite-nvidia:stable + COPY + RUN build.sh
|
||
|
|
├── Justfile # build / build-iso / build-qcow2 / lint
|
||
|
|
├── build_files/
|
||
|
|
│ └── build.sh # all KAMOS customisation lives here
|
||
|
|
├── disk_config/
|
||
|
|
│ └── iso.toml # bootc-image-builder ISO config
|
||
|
|
├── system_files/ # COPY'd into / inside the image
|
||
|
|
│ └── usr/share/
|
||
|
|
│ ├── backgrounds/kamos/ # drop kamos-wallpaper.jpg here
|
||
|
|
│ ├── plymouth/themes/kamos/ # boot splash (kamos.plymouth + kamos.script + logo)
|
||
|
|
│ └── pixmaps/ # drop kamos-logo.png here (GRUB logo)
|
||
|
|
├── .forgejo/workflows/build.yml # primary CI - builds & pushes to Forgejo
|
||
|
|
└── .github/workflows/build.yml # disabled GitHub equivalent (mirror if needed)
|
||
|
|
```
|
||
|
|
|
||
|
|
## Step 1 — Drop in your KAMOS branding assets
|
||
|
|
|
||
|
|
The repo has placeholder `DROP_*_HERE.txt` files in the right folders. Replace them with:
|
||
|
|
|
||
|
|
| Path | What goes here | Recommended size |
|
||
|
|
| --------------------------------------------------------------------- | ------------------------------------------- | --------------------- |
|
||
|
|
| `system_files/usr/share/backgrounds/kamos/kamos-wallpaper.jpg` | Your "Play. Perform. Dominate." wallpaper | 3840x2160 or 1920x1080 |
|
||
|
|
| `system_files/usr/share/plymouth/themes/kamos/kamos-logo.png` | KAMOS logo (raven crest) for boot splash | 256x256 or 512x512, transparent PNG |
|
||
|
|
| `system_files/usr/share/pixmaps/kamos-logo.png` | Same logo, used by GRUB boot menu | 256x256 or 512x512, transparent PNG |
|
||
|
|
|
||
|
|
You can drop additional files anywhere under `system_files/`; they'll all be COPY'd into `/`. Delete the `DROP_*_HERE.txt` files once you've added the real assets.
|
||
|
|
|
||
|
|
## Step 2 — Configure your Forgejo registry
|
||
|
|
|
||
|
|
The repo is already wired for `cgi.medsys.cloud/mkm1971/kamos` and the runner label `ubuntu-latest`. You only need to add three secrets so CI can push and sign images.
|
||
|
|
|
||
|
|
Go to **https://cgi.medsys.cloud/mkm1971/kamos/settings/actions/secrets** and add:
|
||
|
|
|
||
|
|
| Secret name | Value |
|
||
|
|
| ---------------- | -------------------------------------------------------------- |
|
||
|
|
| `SIGNING_SECRET` | The full contents of `cosign.key` (created in Step 3 below) |
|
||
|
|
| `REGISTRY_USER` | `mkm1971` |
|
||
|
|
| `REGISTRY_TOKEN` | A Forgejo access token with `package` write scope |
|
||
|
|
|
||
|
|
To create `REGISTRY_TOKEN`: in Forgejo, click your avatar (top-right) → **Settings → Applications → Generate New Token**. Name it `kamos-ci`, tick the **package: write** scope, click Generate, and copy the token immediately (it's shown only once).
|
||
|
|
|
||
|
|
## Step 3 — Generate a cosign signing key
|
||
|
|
|
||
|
|
On your M2:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
brew install cosign
|
||
|
|
cd /path/to/kamos
|
||
|
|
COSIGN_PASSWORD="" cosign generate-key-pair
|
||
|
|
```
|
||
|
|
|
||
|
|
Creates `cosign.key` (private — **never commit**) and `cosign.pub` (commit this). Paste the contents of `cosign.key` into the `SIGNING_SECRET` repository secret.
|
||
|
|
|
||
|
|
## Step 4 — Push to Forgejo and let CI build
|
||
|
|
|
||
|
|
```bash
|
||
|
|
git init
|
||
|
|
git add .
|
||
|
|
git commit -m "KAMOS initial scaffold"
|
||
|
|
git remote add origin https://cgi.medsys.cloud/mkm1971/kamos.git
|
||
|
|
git push -u origin main
|
||
|
|
```
|
||
|
|
|
||
|
|
Forgejo Actions needs an `linux-amd64` runner. Register one on any x86_64 Linux machine (the NVIDIA PC works perfectly).
|
||
|
|
|
||
|
|
## Step 5 — (Optional) Iterate locally on the M2
|
||
|
|
|
||
|
|
The base image is x86_64, so Podman has to emulate. Slow but works for quick checks.
|
||
|
|
|
||
|
|
```bash
|
||
|
|
brew install podman just
|
||
|
|
podman machine init --cpus 6 --memory 8192 --disk-size 60
|
||
|
|
podman machine start
|
||
|
|
just build
|
||
|
|
```
|
||
|
|
|
||
|
|
## Step 6 — Generate a bootable ISO for VMware Fusion
|
||
|
|
|
||
|
|
```bash
|
||
|
|
just build # builds the OCI image
|
||
|
|
just build-iso # wraps it with bootc-image-builder into output/bootiso/install.iso
|
||
|
|
```
|
||
|
|
|
||
|
|
VMware Fusion 13+ on Apple Silicon supports x86_64 emulation. New VM → install from ISO → choose `output/bootiso/install.iso` → guest type "Other Linux 5.x kernel 64-bit". Expect single-digit FPS in the GUI, but the boot splash and branding will render fine. This is the path you mentioned for your VMware testing setup.
|
||
|
|
|
||
|
|
## Step 7 — Install on the real NVIDIA PC
|
||
|
|
|
||
|
|
If the PC is already on a bootc image (Bazzite, Bluefin, Aurora, etc.):
|
||
|
|
|
||
|
|
```bash
|
||
|
|
sudo bootc switch cgi.medsys.cloud/mkm1971/kamos:stable
|
||
|
|
sudo systemctl reboot
|
||
|
|
```
|
||
|
|
|
||
|
|
If it's running something else, install Bazzite from its normal ISO first, then `bootc switch` to KAMOS. Or burn the ISO from step 6 to a USB stick and install fresh.
|
||
|
|
|
||
|
|
## Updating
|
||
|
|
|
||
|
|
CI rebuilds weekly so you pick up upstream Bazzite security fixes. Push any commit to `main` or run the workflow manually to bump immediately.
|
||
|
|
|
||
|
|
## What gets branded
|
||
|
|
|
||
|
|
`build.sh` applies KAMOS branding in seven places:
|
||
|
|
|
||
|
|
1. `/etc/os-release` → `NAME`, `PRETTY_NAME`, `VARIANT`, `HOME_URL` (so `neofetch`/`fastfetch` show "KAMOS Gaming OS - Play. Perform. Dominate.")
|
||
|
|
2. GNOME default wallpaper (system-wide via dconf override, applies to all new users)
|
||
|
|
3. GNOME lock-screen / screensaver background (same wallpaper)
|
||
|
|
4. Plymouth boot splash (custom `kamos` theme with pulsing logo on black)
|
||
|
|
5. Initramfs is regenerated with `dracut --force --regenerate-all` so the splash shows on first boot
|
||
|
|
6. GRUB boot-menu logo (logo PNG dropped into Bazzite's GRUB theme)
|
||
|
|
7. Container image labels (visible in registries / artifacthub)
|
||
|
|
|
||
|
|
## Troubleshooting
|
||
|
|
|
||
|
|
**`podman build` fails with "exec format error"**: forgot `--platform=linux/amd64` on Apple Silicon, or QEMU user-static isn't enabled in your Podman machine.
|
||
|
|
|
||
|
|
**Boot splash doesn't show**: confirm the kernel cmdline has `rhgb quiet splash` (it does, via iso.toml). On a `bootc switch` upgrade you may need to re-run `dracut --force --regenerate-all` and reboot once.
|
||
|
|
|
||
|
|
**Wallpaper doesn't apply for existing user**: the dconf override is `system-db:local`, which only affects new users. Existing accounts have their own user dconf — set it manually once with `gsettings set org.gnome.desktop.background picture-uri 'file:///usr/share/backgrounds/kamos/kamos-wallpaper.jpg'`.
|
||
|
|
|
||
|
|
**Image builds but boot loops on real hardware**: usually SecureBoot rejecting unsigned NVIDIA modules. Disable SecureBoot in BIOS or enroll Bazzite's MOK key (Bazzite docs cover this).
|
||
|
|
|
||
|
|
**Cosign signing step fails**: `SIGNING_SECRET` must be the *contents* of `cosign.key`, not a path. The key must be generated with an empty password.
|
||
|
|
|
||
|
|
## License
|
||
|
|
|
||
|
|
Apache-2.0 — same as the upstream `ublue-os/image-template`.
|