Closing the command-center security queue #70/#71/#72/#73/#74: rolling tags let a rebuild move under a running service with nobody approving it, and make a CVE audit ungradeable. 36 quadlet units across dankclaw, dankserver and frankbook-pro now carry tag@sha256; localhost/* builds stay exempt (their build is the pin). The pihole and copyparty pins pull the fixed builds; valkey 9.1.2 (already running) and redis 7.4.11 are pinned in place, vendor fixes TBD. New gate tests/quadlet_image_pins.bats: no unpinned registry image, no generator-rejected key anywhere. Three seams that pinned the old exact-tag law (frankbook readarr, open_webui, seerr) now require tag AND digest - strictly stronger. Quadlet Lifecycle docs: batch-abort law, entrypoint flags-only law, pin law.
45 lines
1.9 KiB
INI
45 lines
1.9 KiB
INI
# Quadlet unit: Copyparty file server (rootless, boot-persistent).
|
|
#
|
|
# Install path on dankserver: ~/.config/containers/systemd/copyparty.container
|
|
# Unit name: copyparty.service (podman 5.x drops the container- prefix)
|
|
#
|
|
# The image's default entrypoint is /bin/ash /z/cpp.sh -c /z/initcfg; the
|
|
# Command= line below reproduces the compose-era argv exactly: the admin
|
|
# account is passed as -a <user>:<password>. ${COPAY_ACCOUNT} and
|
|
# ${COPAY_PASSWORD} are expanded by systemd at ExecStart time from the
|
|
# host-local env file /home/dank/Containers/copyparty/env (mode 0600).
|
|
# This file holds no secrets. The deployer refuses to start this unit before
|
|
# that env file exists, so a missing env file fails the unit instead of
|
|
# creating an admin account with a garbage password.
|
|
#
|
|
# /w is the entropy volume, mounted read-only: nothing writes into /mnt/entropy
|
|
# anymore; every consumer of the share is a read-only client.
|
|
|
|
[Unit]
|
|
Description=Copyparty file server container
|
|
After=network.target
|
|
|
|
[Container]
|
|
ContainerName=copyparty
|
|
# Digest-pinned: upstream stopped publishing version tags after 1.19.15, so
|
|
# the pin rides :latest@digest (the tag in the reference is cosmetic; the
|
|
# digest is the pull). Pinned 2026-10-21 at the build whose label is
|
|
# 1.20.26 - closes GHSA-3c88-p299-7hvr (1.20.25) and GHSA-hg99-jqfp-rf76
|
|
# (1.20.26); the previously running build was the rolling :latest at
|
|
# 1.20.24 (issue #73 on command-center).
|
|
Image=ghcr.io/9001/copyparty-ac:latest@sha256:7f77459160a4bf34fdca79f2965dff4f0c1d7069a3d9cdfb3632acb041dd2f6a
|
|
Network=dankserver_appnet
|
|
EnvironmentFile=/home/dank/Containers/copyparty/env
|
|
Exec=-a ${COPAY_ACCOUNT}:${COPAY_PASSWORD} -v /w::r:ra,dank
|
|
Volume=/mnt/entropy:/w:ro
|
|
Volume=/home/dank/Containers/copyparty/cfg:/cfg
|
|
PublishPort=3923:3923
|
|
|
|
[Service]
|
|
EnvironmentFile=/home/dank/Containers/copyparty/env
|
|
Restart=always
|
|
RestartSec=5
|
|
|
|
[Install]
|
|
WantedBy=default.target
|