1 Archive Layout
official-markus-maurer edited this page 2026-07-16 10:19:18 +02:00

Archive Layout

The archive separates immutable evidence from replaceable working copies. /srv/preservation is the suggested canonical location; Game Server Manager may continue using /opt/gsm for active installations and shared client assets.

/srv/preservation/
├── catalog/                     # Version-controlled public-safe metadata
│   ├── artifacts/
│   ├── compatibility/
│   ├── inventories/
│   └── schemas/
├── git/
│   ├── mirrors/                 # Bare --mirror clones
│   ├── bundles/                 # Dated offline git bundle snapshots
│   ├── lfs/                     # Verified Git LFS object backups
│   └── manifests/               # Remote URL, refs, commit IDs, checksums
├── artifacts/
│   ├── public/                  # Material approved for redistribution
│   ├── restricted/              # Access-controlled copyrighted/private bytes
│   └── quarantine/              # Untrusted acquisitions awaiting review
├── clients/
│   └── <game>/<snapshot-id>/
│       ├── original/
│       ├── normalized/
│       ├── metadata/
│       └── verification/
├── servers/
│   └── <implementation>/<artifact-id>/
│       ├── original/
│       ├── source-export/
│       ├── dependencies/
│       ├── database/
│       ├── patches/
│       └── verification/
├── tools/
│   └── <tool>/<version>/<platform>/
├── documentation/
│   ├── upstream-captures/
│   ├── forums/
│   └── manuals/
├── backups/                     # Backup-set manifests, not the only backup
└── workspace/                   # Disposable derived trees; never canonical

Rules

  1. original/ is append-only. Corrections create a new artifact ID.
  2. workspace/ may be deleted and rebuilt at any time.
  3. Public metadata never depends on public access to restricted bytes.
  4. Large binaries do not belong in the wiki Git repository.
  5. A mirror is not a backup until an offline copy exists and restore has been tested.
  6. Symlinks and deduplication are implementation details; manifests must still describe logical ownership.
  7. Every directory containing artifacts has a machine-readable inventory and checksum file.

Repository clones that must never be lost

Use bare mirror clones for canonical Git capture:

/srv/preservation/git/mirrors/<forge-or-host>/<owner>/<repository>.git

Keep normal clones only in workspace/. A bare mirror retains all fetched refs and can be updated without confusing them with local development branches.

For each mirror, retain:

  • Original fetch URL and any historical URLs.
  • Acquisition and last successful fetch timestamps.
  • Default branch, all relevant refs, HEAD commit, object format, submodule URLs.
  • Whether Git LFS is used and confirmation that all LFS objects were fetched.
  • License snapshot and access/distribution classification.
  • Dated git bundle or filesystem-level backup stored on another device.

See Repository Mirroring for commands and recovery.

Game Server Manager mapping

Suggested operational paths:

Purpose Path
Active source/build/install trees /opt/gsm/servers/<server-id>/
Shared client-derived assets /opt/gsm/assets/<game>/clients/<version>/
Canonical immutable archive /srv/preservation/
Ephemeral staging /var/tmp/gsm/ or an explicit workspace

Do not point a running service directly at the only preserved copy. Import or generate a working copy under /opt/gsm.

Naming

Prefer lowercase ASCII IDs with hyphens. Artifact IDs should remain stable after publication:

<project>-<version-or-short-commit>-<platform>-<acquired-date>

If the upstream version is unknown, use unknown plus a short content hash and open a finding to resolve it.