Skip to content

Commit 6c02bf1

Browse files
update readme
1 parent 554c750 commit 6c02bf1

5 files changed

Lines changed: 80 additions & 64 deletions

File tree

README.md

Lines changed: 1 addition & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ Valve says the official container runtimes and SDKs are built with `flatdeb-stea
1919
- A source-visible pipeline.
2020
- A patch point before package rebuilds.
2121
- A package-assembled base image rather than a downloaded runtime image.
22-
- Your previous `umu-sdk` style of customization preserved as an optional final overlay stage.
22+
- Previous `umu-sdk` customization preserved as an optional final overlay stage.
2323

2424
## Important scope note
2525

@@ -38,23 +38,6 @@ This is the **closest public equivalent** to Valve's pipeline that can be run in
3838
- `overlays/rootfs/` — optional file overlay copied into the exported rootfs before the final image is built.
3939
- `scripts/hooks/post-extract.sh` — optional shell customization hook after rootfs export.
4040

41-
## How the old `umu-sdk` model fits in
42-
43-
Your old flow was:
44-
45-
1. pull a prebuilt image,
46-
2. apply changes,
47-
3. publish a new image.
48-
49-
This repo keeps the same *shape* for the last step, but changes the upstream stage:
50-
51-
1. build the UMU base image from SteamRT package metadata and sources,
52-
2. tag that as the local base image,
53-
3. run `docker/overlay.Dockerfile` on top of it,
54-
4. export artifacts.
55-
56-
So the “apply changes on top of an image” part survives, but the image you are extending is one you built locally from public SteamRT inputs.
57-
5841
## Releasing
5942

6043
Push a tag such as:

scripts/fetch-metadata.sh

Lines changed: 50 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -64,48 +64,56 @@ popd >/dev/null
6464
upstream_build_id="$(tr -d '\n' < "${UPSTREAM_DIR}/${buildid_file}")"
6565
resolved_version="$(tr -d '\n' < "${UPSTREAM_DIR}/VERSION.txt")"
6666
resolved_uuid="$(tr -d '\n' < "${UPSTREAM_DIR}/UUID.txt")"
67+
container_platform="$(runtime_platform "${arch}")"
68+
arch_tag="$(sanitize_arch "${arch}")"
6769

68-
cat > "${BUILD_DIR}/build.env" <<ENV
69-
ROOT_DIR=${ROOT_DIR}
70-
BUILD_DIR=${BUILD_DIR}
71-
DIST_DIR=${DIST_DIR}
72-
UPSTREAM_DIR=${UPSTREAM_DIR}
73-
SOURCE_CACHE_DIR=${SOURCE_CACHE_DIR}
74-
SOURCE_TREE_DIR=${SOURCE_TREE_DIR}
75-
PATCHED_REPO_DIR=${PATCHED_REPO_DIR}
76-
OVERLAY_DIR=${OVERLAY_DIR}
77-
PATCHES_DIR=${PATCHES_DIR}
78-
HOOKS_DIR=${HOOKS_DIR}
79-
DOCKER_DIR=${DOCKER_DIR}
80-
SNIPER_SNAPSHOT=${snapshot}
81-
SNIPER_SUITE=${suite}
82-
SNIPER_VARIANT=${variant}
83-
SNIPER_ARCH=${arch}
84-
SNIPER_BASE_URL=${SNIPER_BASE_URL}
85-
SNIPER_APT_URL=${SNIPER_APT_URL}
86-
SNIPER_APT_DIST=${SNIPER_APT_DIST}
87-
SNIPER_APT_COMPONENTS=${SNIPER_APT_COMPONENTS}
88-
DEBIAN_MIRROR=${DEBIAN_MIRROR}
89-
DEBIAN_SECURITY_MIRROR=${DEBIAN_SECURITY_MIRROR}
90-
DEBIAN_RELEASE=${DEBIAN_RELEASE}
91-
SNIPER_ARTIFACT_PREFIX=${artifact_prefix}
92-
UPSTREAM_BASE_URL=${base_url}
93-
UPSTREAM_BUILDID_FILE=${buildid_file}
94-
UPSTREAM_OS_RELEASE_FILE=${os_release_file}
95-
UPSTREAM_MANIFEST_FILE=${manifest_file}
96-
UPSTREAM_BUILT_USING_FILE=${built_using_file}
97-
UPSTREAM_SOURCE_REQUIRED_FILE=${source_required_file}
98-
UPSTREAM_SYSROOT_DOCKERFILE=${sysroot_dockerfile}
99-
UPSTREAM_SOURCES_INDEX=${sources_index}
100-
UPSTREAM_BUILD_ID=${upstream_build_id}
101-
UPSTREAM_VERSION=${resolved_version}
102-
UPSTREAM_UUID=${resolved_uuid}
103-
UMU_RUNTIME_PREFIX=${UMU_RUNTIME_PREFIX}
104-
UMU_IMAGE_NAME=${UMU_IMAGE_NAME}
105-
DEFAULT_CMD=${DEFAULT_CMD}
106-
ENABLE_LEGACY_OVERLAY=${ENABLE_LEGACY_OVERLAY}
107-
CONTAINER_PLATFORM=$(runtime_platform "${arch}")
108-
ARCH_TAG=$(sanitize_arch "${arch}")
109-
ENV
70+
write_env() {
71+
local key="$1"
72+
local value="$2"
73+
printf '%s=%q\n' "$key" "$value"
74+
}
75+
76+
{
77+
write_env ROOT_DIR "${ROOT_DIR}"
78+
write_env BUILD_DIR "${BUILD_DIR}"
79+
write_env DIST_DIR "${DIST_DIR}"
80+
write_env UPSTREAM_DIR "${UPSTREAM_DIR}"
81+
write_env SOURCE_CACHE_DIR "${SOURCE_CACHE_DIR}"
82+
write_env SOURCE_TREE_DIR "${SOURCE_TREE_DIR}"
83+
write_env PATCHED_REPO_DIR "${PATCHED_REPO_DIR}"
84+
write_env OVERLAY_DIR "${OVERLAY_DIR}"
85+
write_env PATCHES_DIR "${PATCHES_DIR}"
86+
write_env HOOKS_DIR "${HOOKS_DIR}"
87+
write_env DOCKER_DIR "${DOCKER_DIR}"
88+
write_env SNIPER_SNAPSHOT "${snapshot}"
89+
write_env SNIPER_SUITE "${suite}"
90+
write_env SNIPER_VARIANT "${variant}"
91+
write_env SNIPER_ARCH "${arch}"
92+
write_env SNIPER_BASE_URL "${SNIPER_BASE_URL}"
93+
write_env SNIPER_APT_URL "${SNIPER_APT_URL}"
94+
write_env SNIPER_APT_DIST "${SNIPER_APT_DIST}"
95+
write_env SNIPER_APT_COMPONENTS "${SNIPER_APT_COMPONENTS}"
96+
write_env DEBIAN_MIRROR "${DEBIAN_MIRROR}"
97+
write_env DEBIAN_SECURITY_MIRROR "${DEBIAN_SECURITY_MIRROR}"
98+
write_env DEBIAN_RELEASE "${DEBIAN_RELEASE}"
99+
write_env SNIPER_ARTIFACT_PREFIX "${artifact_prefix}"
100+
write_env UPSTREAM_BASE_URL "${base_url}"
101+
write_env UPSTREAM_BUILDID_FILE "${buildid_file}"
102+
write_env UPSTREAM_OS_RELEASE_FILE "${os_release_file}"
103+
write_env UPSTREAM_MANIFEST_FILE "${manifest_file}"
104+
write_env UPSTREAM_BUILT_USING_FILE "${built_using_file}"
105+
write_env UPSTREAM_SOURCE_REQUIRED_FILE "${source_required_file}"
106+
write_env UPSTREAM_SYSROOT_DOCKERFILE "${sysroot_dockerfile}"
107+
write_env UPSTREAM_SOURCES_INDEX "${sources_index}"
108+
write_env UPSTREAM_BUILD_ID "${upstream_build_id}"
109+
write_env UPSTREAM_VERSION "${resolved_version}"
110+
write_env UPSTREAM_UUID "${resolved_uuid}"
111+
write_env UMU_RUNTIME_PREFIX "${UMU_RUNTIME_PREFIX}"
112+
write_env UMU_IMAGE_NAME "${UMU_IMAGE_NAME}"
113+
write_env DEFAULT_CMD "${DEFAULT_CMD}"
114+
write_env ENABLE_LEGACY_OVERLAY "${ENABLE_LEGACY_OVERLAY}"
115+
write_env CONTAINER_PLATFORM "${container_platform}"
116+
write_env ARCH_TAG "${arch_tag}"
117+
} > "${BUILD_DIR}/build.env"
110118

111119
log "Resolved upstream build ID: ${upstream_build_id}"

scripts/grabkeys.sh

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
#!/bin/bash
2+
mkdir -p keys
3+
4+
export GNUPGHOME="$(mktemp -d)"
5+
chmod 700 "$GNUPGHOME"
6+
: > "$GNUPGHOME/common.conf"
7+
8+
git clone https://gitlab.steamos.cloud/steamrt/flatdeb-steam
9+
10+
gpg --homedir "$GNUPGHOME" --import \
11+
flatdeb-steam/suites/8abddd96-valve-archive-steamos-release-key.gpg \
12+
flatdeb-steam/suites/c948c57e-steam-runtime-2025.gpg
13+
14+
gpg --homedir "$GNUPGHOME" \
15+
--output keys/steamrt-archive-keyring.gpg \
16+
--export
17+
18+
gpg --show-keys --keyid-format LONG keys/steamrt-archive-keyring.gpg
19+
20+
rm -Rf flatdeb-steam
2.36 KB
Binary file not shown.

scripts/render-assemble-dockerfile.py

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,17 +26,21 @@ def main() -> int:
2626
install_specs.append(spec)
2727
seen.add(spec)
2828

29+
steamrt_keyring_dest = '/usr/share/keyrings/steamrt-archive-keyring.gpg'
30+
steamrt_keyring_src = os.environ.get('STEAMRT_KEYRING_SRC', 'keys/steamrt-archive-keyring.gpg')
31+
2932
lines = [
3033
'FROM debian:bullseye-slim',
3134
'ENV DEBIAN_FRONTEND=noninteractive',
3235
'RUN dpkg --add-architecture i386 || true',
33-
'RUN apt-get update && apt-get install -y --no-install-recommends ca-certificates gnupg dirmngr && rm -rf /var/lib/apt/lists/*',
36+
f'COPY {steamrt_keyring_src} {steamrt_keyring_dest}',
37+
'RUN apt-get update && apt-get install -y --no-install-recommends ca-certificates && rm -rf /var/lib/apt/lists/*',
3438
]
3539

3640
sources_lines = [
3741
f'deb {os.environ["DEBIAN_MIRROR"]} {os.environ["DEBIAN_RELEASE"]} main contrib non-free',
3842
f'deb {os.environ["DEBIAN_SECURITY_MIRROR"]} {os.environ["DEBIAN_RELEASE"]}-security main contrib non-free',
39-
f'deb {os.environ["SNIPER_APT_URL"]} {os.environ["SNIPER_APT_DIST"]} {os.environ["SNIPER_APT_COMPONENTS"]}',
43+
f'deb [signed-by={steamrt_keyring_dest}] {os.environ["SNIPER_APT_URL"]} {os.environ["SNIPER_APT_DIST"]} {os.environ["SNIPER_APT_COMPONENTS"]}',
4044
]
4145
printf_args = ' '.join(f'"{line}"' for line in sources_lines)
4246
lines.append(f'RUN printf "%s\\n" {printf_args} > /etc/apt/sources.list')
@@ -50,11 +54,12 @@ def main() -> int:
5054
lines.append('RUN apt-get update')
5155
if install_specs:
5256
joined = ' \\\n '.join(install_specs)
53-
lines.append(
57+
install_cmd = (
5458
'RUN apt-get install -y --no-install-recommends \\\n '
5559
+ joined
56-
+ '\n && apt-get clean && rm -rf /var/lib/apt/lists/*'
60+
+ ' \\\n && apt-get clean && rm -rf /var/lib/apt/lists/*'
5761
)
62+
lines.append(install_cmd)
5863

5964
output.write_text('\n'.join(lines) + '\n', encoding='utf-8')
6065
return 0

0 commit comments

Comments
 (0)