add Phase 2A container and recovery readiness gates

This commit is contained in:
makearmy 2026-07-12 18:59:45 -04:00
parent da03be61a9
commit a9fec0d83d
15 changed files with 629 additions and 30 deletions

View file

@ -1,4 +1,4 @@
9934efd3946efad746823ebbeb46875cc0ae1e14b5b2b3e399a384c3654bcd2a README.md
d74bbe90e7b024bc650c34e4613678d7cae67ff56cb4bde721a22362bdda33b1 README.md
28ebc7e3467d2d83539db1b75824e38b7164fbb940162064d7a9b6af50223257 approved-transaction/README.md
6991258799bec838137470e0b9b71ed97169bbdf157896fce3e38b7ebb7d3361 approved-transaction/SHA256SUMS
8182c9bf8b4c6830a2b930698e2e8f5fb7e5ee7849fc8500a8b4813b9292ad51 approved-transaction/backups.txt
@ -12,11 +12,21 @@ d5711f5d3ee9ae38c336b7ae02c036b6927d1e422d72ad8a1f832dae92c41337 approved-trans
84cf71dd5da459699825c4d25975e15f58bde8fd7cfdb2839bd82441271daaed approved-transaction/scriptlets.txt
f5661dd480a24e6c7814fff9c0765688a4b16309176e97efa5f3e0cb10d6d05d approved-transaction/totals.psv
88252b0d5eaafcdb69a1865b575d44636be203075d996fad2ea6e57b2810150a approved-transaction/upgrades.psv
1a427dc140c990a6d23f1c77eeef4566d193c32d6ed1e6e4d16f7c49d5b9e67f execute-maintenance.sh
17323251ae0c0d37b2116551846866f7f4352cca2e6039be52f2b2831c4ca865 backup-readiness-plan.md
64269e6af4b6c668737ec4f5ec4dec6a49a527a256a62644dde80b2fa356145c container-disposition/README.md
a98eaa5efea0d5f4a22311ff89c6055979855a4b4cf53e1e9eb5e18d08da1b54 container-disposition/SHA256SUMS
1d9e10136d127798aa1f834ad27d6d3d81b09fb585d78aaccb869a564065b19f container-disposition/all-containers.psv
bca981ad79a7bb84753112f13698ebf9b72471db29c2d4096f76f72898ace6d8 container-disposition/directus-stopped.allowlist.psv
f6d68530714567fa8e3d7391dc7eb5232f3343be5d419fb24df56c552a7cebc6 container-disposition/restart-policy-no.psv
c635776b21da4324ee0279be026ce8b5971d516cc4573313ad153db634ad4c1a container-disposition/running-containers.psv
75634105ec7afcb8009c9159be3fc5631cd9993dbca131c4a651515c4244b486 container-disposition/sonarr-unhealthy.allowlist.psv
aef1864fa108e0d8cd4af5c513f6c814d0fa24c7fb81fd7ba554ece9d895af19 execute-maintenance.sh
e4667c83bd4e9e7de413e48cd16cc2d4b041cb09fbadace5e9f8d74a73a5a2a1 failed-unit-disposition/README.md
e4f82fbefec4bc8c91f473ead9a70d0d0b1a4a14c54a46067127ac05cf4a6dcc failed-unit-disposition/SHA256SUMS
217a0fe59a3bff6c6621bcaac59dcad1c74154486cd7e75e3bba83b6909c29c4 failed-unit-disposition/drkonqi-failed-units.allowlist.psv
f3c3813cf2a7f119f010da956dba1bc25b8986b9e3acaa8eb91fcff95f7ec8c0 post-reboot-validate.sh
0753237d8d42248b18b26cc076782816fbcc5f879133fc0231b6c0902d6f9c4f preflight-read-only.sh
17f536533aca7e0542474d91da255a25889e96c5421a6a659d26a213dfb1653a grub-btrfs-readiness.md
f163eca74ff5e288b0638af728072452a614ddc4430b91b70cab1429f99535eb maintenance-worksheet.md
aabae1940542707d197388488055987c35e4f0c05621e68993ff3f863563f096 post-reboot-validate.sh
1afa76fd1444c408c95a2740fbe39c966d68bd69e0becd01ee7931ffef9be7ff preflight-read-only.sh
5b88c68da055d3578e8b19fdf7623c3de204d5ef0af4b17e113938d8bd0a2c5e reboot-procedure.md
0805397870c66a523f693cfdba33f7b08c94793b62ddadf720ff84c22796ea13 rollback-recovery.md

View file

@ -33,7 +33,7 @@ Before execution, record site-specific values in the maintenance ticket:
URLs can be supplied without editing the scripts:
```bash
export PUBLIC_HEALTH_URLS='https://example.invalid/health https://example.invalid/'
export PUBLIC_HEALTH_URLS='https://db.lasereverything.net/'
```
Health URLs must be non-secret public HTTPS URLs. The scripts reject user-info credentials, query strings, fragments, whitespace/control characters, and non-HTTPS schemes. Never place tokens, signed parameters, credentials, or private endpoints in `PUBLIC_HEALTH_URLS`; the scripts do not read environment files to discover URLs and do not log redirected effective URLs.
@ -51,6 +51,9 @@ export LE_PHASE2A_RECOVERY_READY=YES
export LE_PHASE2A_BACKUPS_READY=YES
```
Both attestations remain unset in `maintenance-worksheet.md`. Do not set them
until independent recovery access and the proportional backup plan are complete.
## Invocation and enforced records
Invoke every script as a separate process, never with `source` or `.`. Explicitly capture its return status:
@ -108,6 +111,28 @@ addition, removal, state or invocation change, checksum failure, or other failed
unit is a hard stop. The scripts do not reset them. `nxserver.service` is not an
expected critical unit; its unused `nomachine` package was removed normally.
## Docker disposition and authoritative baseline
The checksummed `container-disposition/` baseline contains exactly 88 containers:
87 running, retired `directus` intentionally stopped, and `sonarr` as the sole
unhealthy running container. Sonarr is a reviewed unrelated pre-existing fault;
its empty configuration, absent port 8989 listener, and failing health check do
not require repair for Phase 2A. Any identity/state drift or any additional
unhealthy container invalidates preflight.
All 87 running containers are authoritative for post-reboot validation. Healthy
containers must return healthy; containers without health checks must return
running. Sonarr may remain unhealthy or improve, but must remain present and
running. Directus must remain stopped and unchanged. `castopod` and
`castopod-redis` use restart policy `no`; failure to return is recorded as a
validation failure requiring explicit operator attention, never an automatic
start or restart.
The protected Directus archive at `/srv/directus-archive/20260710-175408`
verified successfully against its actual `SHA256SUMS` with return code 0.
Preflight repeats that check silently with `sha256sum --status -c SHA256SUMS` and
hard-stops on failure without printing archive contents.
## Snapper readiness history and maintenance gate
On 2026-07-12 the ordinary empty `/.snapshots` directory was replaced by Btrfs
@ -132,13 +157,18 @@ The older preview remains at:
It occupies approximately 2.4 GiB and must not be deleted yet. It is historical,
not the approved baseline. Cleanup remains a later explicit action.
GRUB/grub-btrfs findings and the unexecuted standalone generation procedure are
in `grub-btrfs-readiness.md`. Snapshot coverage, external subvolumes/mounts, and
the minimum application-consistent database/configuration backup set are in
`backup-readiness-plan.md`.
## Hard stop conditions
Stop rather than improvise if any of the following occurs:
- no independent recovery access or root path;
- insufficient space or an unhealthy `/boot`;
- degraded storage, failed backup, unresolved failed units, or unhealthy production service;
- degraded storage, failed backup, undispositioned failed units, or an unhealthy production service/container other than the exact reviewed Sonarr disposition;
- unexpected package count/version, downgrade, repository error, signature error, keyring error, mirror inconsistency, or partial transaction;
- SSH access is unstable before the OpenSSH restart hook;
- DKMS/initramfs/kernel/bootloader generation fails;

View file

@ -0,0 +1,94 @@
# Proportional Phase 2A backup-readiness plan
## Verified existing evidence
- `/srv/directus-archive/20260710-175408/SHA256SUMS` verified with return code 0.
- The repaired `/.snapshots` Btrfs subvolume supports Snapper; snapshots 13
succeeded.
- Maintenance creates and directly verifies a uniquely numbered pre-upgrade root
snapshot before Pacman.
These facts do not yet justify `LE_PHASE2A_BACKUPS_READY=YES`.
## Snapshot coverage
The explicit root snapshot is crash-consistent coverage of the root `@`
subvolume, including ordinary paths below it such as `/etc`, `/usr`, `/boot`
when `/boot` is not a separate mount, and `/var/lib/docker` unless independently
mounted. It is not an application-consistent database backup.
The following are outside root `@` and therefore outside that snapshot:
- Btrfs subvolumes `@home`, `@root`, `@srv`, `@cache`, `@log`, and `@tmp`;
- the EFI system partition mounted at `/boot/efi`;
- ext4 mounts `/mnt/storage`, `/mnt/appdata`, `/mnt/media`, and
`/mnt/coldstasis`;
- tmpfs/runtime mounts.
The protected Directus archive is below `/srv`, so its independent checksum
verification—not the root snapshot—protects that evidence. Bind-mounted database
or application state on the separate subvolumes or ext4 mounts is likewise not
covered by the root snapshot. Unrelated media need not be duplicated merely
because a consuming container is running.
## Minimum fresh package-maintenance backup set
Before setting the backup attestation, create and test:
1. application-consistent dumps of every active MariaDB/MySQL and PostgreSQL
production database, including the transitional `le-directus-source` and
`le-payload-pg` databases if they must survive the maintenance window;
2. a root-only host-configuration archive containing package inventory, `/etc`,
GRUB configuration, EFI boot metadata, relevant systemd units/drop-ins,
nftables/network configuration, and Docker Compose/deployment definitions;
3. the explicit root Snapper snapshot already enforced by maintenance;
4. checksum manifests plus a documented restore test or validated restore
procedure for the new dumps and configuration archive.
Do not copy unrelated media libraries or bulk application media solely because
their containers are running. Database dumps provide application consistency;
the Btrfs snapshot provides fast crash-consistent package/config rollback.
## Review-only commands
The operator must replace the uppercase placeholders with reviewed root-only
paths. Credentials must come from existing root-only client configuration or an
interactive mechanism; never place passwords in command arguments or logs.
```bash
stamp=$(date -u +%Y%m%dT%H%M%SZ)
backup_root=/ROOT/ONLY/BACKUP/DESTINATION/le-phase2a-$stamp
install -d -o root -g root -m 0700 "$backup_root"
pacman -Q > "$backup_root/packages-before.txt"
cp --preserve=mode,ownership,timestamps /boot/grub/grub.cfg "$backup_root/grub.cfg"
efibootmgr -v > "$backup_root/efibootmgr.txt"
tar --xattrs --acls --numeric-owner -cpf "$backup_root/host-config.tar" \
/etc /usr/lib/systemd/system /boot/grub
mariadb-dump --defaults-extra-file=/ROOT/ONLY/MARIADB-CLIENT-CONFIG \
--all-databases --single-transaction --routines --events --triggers \
> "$backup_root/mariadb-all.sql"
pg_dumpall --file="$backup_root/postgresql-all.sql"
# Transitional containers: use existing non-secret local authentication only.
docker exec le-directus-source mariadb-dump \
--defaults-extra-file=/ROOT/ONLY/IN-CONTAINER-CLIENT-CONFIG \
--all-databases --single-transaction --routines --events --triggers \
> "$backup_root/le-directus-source.sql"
docker exec le-payload-pg pg_dumpall \
> "$backup_root/le-payload-pg.sql"
find "$backup_root" -maxdepth 1 -type f -print0 |
LC_ALL=C sort -z |
xargs -0 sha256sum > "$backup_root/SHA256SUMS"
(cd "$backup_root" && sha256sum -c SHA256SUMS)
```
These commands are a review package, not execution approval. Confirm database
names, authentication methods, output capacity, dump return codes, nonempty
outputs, and a restoration test before attesting readiness.

View file

@ -0,0 +1,29 @@
# Reviewed Docker container disposition
Source: root-created, checksum-verified read-only baseline
`/tmp/le-phase2a-container-baseline.HyAW6sPg`, captured 2026-07-12 without
container environments, mounts, secret files, or credentials.
The baseline contains 88 containers: 87 running, one intentionally stopped, and
one unhealthy. `sonarr` is the sole reviewed unhealthy running container. Its
exact container ID, image reference and image ID, running/health state, startup
timestamp, network mode, restart policy, Compose project, and hash of its health
check definition are in `sonarr-unhealthy.allowlist.psv`. The operator verified
that its `/config/config.xml` is empty, no listener exists on port 8989, and its
health check fails. Sonarr is unrelated to Phase 2A and need not be repaired.
Any identity change, unexpected state, or additional unhealthy container is a
hard stop before maintenance.
`directus` is the sole stopped container. It is retired and must remain stopped;
its exact identity is in `directus-stopped.allowlist.psv`. Starting, recreating,
replacing, or changing its recorded state invalidates preflight.
`running-containers.psv` is the authoritative 87-container post-reboot baseline.
Containers recorded healthy must return healthy. Containers without health
checks must return running. Sonarr must remain present and running; its health
may remain unhealthy or improve to healthy. It may not become missing, stopped,
restarting, or dead. No script starts, restarts, or recreates a container.
The running `castopod` and `castopod-redis` containers have restart policy `no`.
If either fails to return after reboot, validation records explicit operator
attention and fails without starting it automatically.

View file

@ -0,0 +1,6 @@
64269e6af4b6c668737ec4f5ec4dec6a49a527a256a62644dde80b2fa356145c README.md
1d9e10136d127798aa1f834ad27d6d3d81b09fb585d78aaccb869a564065b19f all-containers.psv
bca981ad79a7bb84753112f13698ebf9b72471db29c2d4096f76f72898ace6d8 directus-stopped.allowlist.psv
f6d68530714567fa8e3d7391dc7eb5232f3343be5d419fb24df56c552a7cebc6 restart-policy-no.psv
c635776b21da4324ee0279be026ce8b5971d516cc4573313ad153db634ad4c1a running-containers.psv
75634105ec7afcb8009c9159be3fc5631cd9993dbca131c4a651515c4244b486 sonarr-unhealthy.allowlist.psv

View file

@ -0,0 +1,88 @@
bazarr|0c752272254cfad9aeb5a6d981a8d354c0676a18eb14008b4613c7a442ea995c|linuxserver/bazarr|sha256:71677d1a237182abf46f607d346109c5a78aae3973d01b143cd89f39569345fa|running|no-healthcheck|2026-07-02T16:22:04.651521486Z|container:ddb18d46aebae5ce7af0f805ab5222e0825a1a153c71fbed93b8c9a80fc80d89|unless-stopped|s6vinetmedia|healthcheck_sha256=74234e98afe7498fb5daf1f36ac2d78acc339464f950703b8c019892f982b90b
bgbye|2d7d7a1250b29f5e66c3068a4077e2d3df801de3f0c1802882aae1e39a84b05e|lasereverythingnetdb-bgbye|sha256:fa4994a5386cd97cba309b273025478722b06a8985dae249bb80c50a170355ce|running|healthy|2026-07-02T16:23:13.15908777Z|makearmy_net|unless-stopped|lasereverythingnetdb|healthcheck_sha256=6e5884b66db6e8cc64ccec2fc861dc2ee21b1ffce0b8555fdffd69811f89eb3a
buildx_buildkit_defaultbuilder0|6b0affe65f5e3589baa0d57169713a1d9ffa5df5c9f6484a8e32bc4070d67ee6|moby/buildkit:buildx-stable-1|sha256:fe0990fb85c4586aaa94e599905b75a2676664f065f29bea67ebcd5b2fe88acb|running|no-healthcheck|2026-06-30T17:45:39.545876028Z|bridge|unless-stopped||healthcheck_sha256=74234e98afe7498fb5daf1f36ac2d78acc339464f950703b8c019892f982b90b
castopod-redis|45094b8a921517979c9a8a519c7ff2fc71a540656f2309ffbd0696cf56bf5dcf|redis:7.2-alpine|sha256:b6636bae9624cba73c69fc9d21318151217a103a1db600b8012db8c460785c26|running|no-healthcheck|2026-07-02T16:21:44.78699982Z|castopod_ma_net|no|makearmyiopodcast|healthcheck_sha256=74234e98afe7498fb5daf1f36ac2d78acc339464f950703b8c019892f982b90b
castopod|b3612901d76d0b2be752762fb1e5d49ca7b521a648ab9b6f332ff7ace61ba54a|castopod/castopod:latest|sha256:d624bd1d45a4b929b9202cae2c4290cdf2624b6bf172fe2115ce20bdb359a428|running|healthy|2026-07-02T16:21:44.790327595Z|backend_net|no|makearmyiopodcast|healthcheck_sha256=a8def15088dacf1eb21b7a57747b2113566689d9876c5d690d7c3269562ec5cc
collabora|bcf6738bab2b22f3db163f88f28608548a748a49e6088842e6e687a968c65371|collabora/code:latest|sha256:bf688dedd8778797a551ef5f768c33993cbecc23b9d68527176a59db5c7726c0|running|no-healthcheck|2026-07-02T16:22:15.786914258Z|collabora_s6_net|always|s6vinetoffice|healthcheck_sha256=74234e98afe7498fb5daf1f36ac2d78acc339464f950703b8c019892f982b90b
continuwuity|a22c7cef0512cefc66441cc99d2b6f4ce36c48e70177c04dfdf88a44e91396ad|forgejo.ellis.link/continuwuation/continuwuity:latest|sha256:f45ecc72598a18e69e16fa7addbb5300b6eba7cd1bf0bf423a8d0b834c8c7abf|running|no-healthcheck|2026-07-02T16:21:42.218988545Z|conduit_net|unless-stopped|makearmyiomatrix|healthcheck_sha256=74234e98afe7498fb5daf1f36ac2d78acc339464f950703b8c019892f982b90b
dcm|1d3291029cb4f3850e43ea93d6bc3a3ceb1d12ecfea27f136b99c3af61e65d75|ghcr.io/ajnart/dcm|sha256:2a6935c5032df59d0986753a05250dacfd66522554471fd54b0d302a67d6de98|running|no-healthcheck|2026-07-02T16:21:22.600579243Z|makearmyiodcm_default|unless-stopped|makearmyiodcm|healthcheck_sha256=74234e98afe7498fb5daf1f36ac2d78acc339464f950703b8c019892f982b90b
directus|c65e7651bfb8827b712f3ed57fff5839dc5cdc87f9f416b7a09f389c7864a1a3|directus/directus:latest|sha256:dd5537b4b35a4a980452e8160def97e63bfd0a6b92e6d81ec980a3300801ce2a|exited|no-healthcheck|2026-07-02T16:21:21.312699245Z|backend_net|no|lasereverythingnetforms|healthcheck_sha256=74234e98afe7498fb5daf1f36ac2d78acc339464f950703b8c019892f982b90b
ergo|f0d41caf4e9ec55b0bf677d8ba622660e918c30094b643cdf09926df545ca4cb|ghcr.io/ergochat/ergo:stable|sha256:ca8d10822089ef9fd05ba5cc18049b687bc46e2e0cc5901aed4bf92da337a7a0|running|no-healthcheck|2026-07-09T17:20:10.183703547Z|irc_net|on-failure|makearmyioirc|healthcheck_sha256=74234e98afe7498fb5daf1f36ac2d78acc339464f950703b8c019892f982b90b
flaresolverr|3ce787aacca3e92e836526c81c7e6fab2dcb7d810b04fbf521e5deba2fd3039f|ghcr.io/flaresolverr/flaresolverr|sha256:894893ed4d4557764df3e74d27c5bc1b3944e5a33ed410e62ab7c744b348f415|running|healthy|2026-07-02T16:22:04.654391107Z|container:ddb18d46aebae5ce7af0f805ab5222e0825a1a153c71fbed93b8c9a80fc80d89|unless-stopped|s6vinetmedia|healthcheck_sha256=5b79b0ceb45d2b3ea48a3a1ab49a3c8a7ab3d42b98e63a185986126b8f6e5b71
forgejo|1befcad10bf9b56880c9e2b223e2dd6e0c5dd500d1453a83768e974ced54273d|codeberg.org/forgejo/forgejo:11.0.1|sha256:49388d84630e37520e7c5d4971dd94564a7a39f18f66b60d40c32b66f7ff40b9|running|no-healthcheck|2026-07-10T00:57:13.158697179Z|backend_net|unless-stopped|makearmyioforge|healthcheck_sha256=74234e98afe7498fb5daf1f36ac2d78acc339464f950703b8c019892f982b90b
heimdall|c8bab4edf73f1265ab91dd384d8942562827f8ce2185fb65e398c8e923872e13|lscr.io/linuxserver/heimdall:latest|sha256:96a3814546b9465dbee1cce1c9547bed5b6f1a13ca751f239cf88502f396df67|running|no-healthcheck|2026-07-02T16:21:46.899952815Z|heimdall_s6_net|unless-stopped|s6vinet|healthcheck_sha256=74234e98afe7498fb5daf1f36ac2d78acc339464f950703b8c019892f982b90b
immich_machine_learning|2b6046557c314400dec23f1caae69eae07a8e07542db79957f7b7e86d41aaff6|ghcr.io/immich-app/immich-machine-learning:release|sha256:088b410d324842faeeeb69d0d5fef6b3eccee3f6fe3c68a2b1235649a86872c4|running|healthy|2026-07-02T16:22:16.356336193Z|backend_net|always|immich|healthcheck_sha256=06fc5259e91d939c46d4cf740394a5057ea58131e5df6789d7e4f5ebbb6d7a59
immich_postgres|17889bb81cea5af9cf6ac6bafe6eba61aeb8d50cb2c0996c699560182796945e|docker.io/tensorchord/pgvecto-rs:pg14-v0.2.0@sha256:739cdd626151ff1f796dc95a6591b55a714f341c737e27f045019ceabf8e8c52|sha256:3062a7ddd658eee20fcc428853dd34c23c7ad95fb48e3181922ffef11217389a|running|healthy|2026-07-02T16:22:16.362765814Z|immich_s6_net|always|immich|healthcheck_sha256=3b85ca1ca42325d6e6d9501e2adcf04a7a80dcb42159b69d2527d6432473ff32
immich_redis|a2d1a7bc973927e404a2576cb3de755a890f7ded3f3361a8a065eab88a0d481c|docker.io/redis:6.2-alpine@sha256:148bb5411c184abd288d9aaed139c98123eeb8824c5d3fce03cf721db58066d8|sha256:6dd588768b9ba229530de57c108536a8d6b98d53d83f217f59167981fda443ca|running|healthy|2026-07-02T16:22:16.364329237Z|immich_s6_net|always|immich|healthcheck_sha256=bd98ba333892e944c8245cd358b2946469adf44d3d8ec7cabb936197e4362807
immich_server|2115244bab14fec49130c4a3949dfc2773871fc54928f88be963388e5e04d790|ghcr.io/immich-app/immich-server:release|sha256:de80bec4fc193605671b0f9600fe6b20f598fd2cb503ffe1a6e67f7cfd0e5233|running|healthy|2026-07-02T16:22:16.558556945Z|backend_net|always|immich|healthcheck_sha256=b7dce503cff869bbffb63034400837e1ad79981eed7722359480a50dbc96436f
jellyfin|ba3ef59b346479f17f4c2b9fd33828db2638801e408fca115e5289b371f89eaf|jellyfin/jellyfin:latest|sha256:d57d4a0c18b3e51b913bd2f8f0f122eb7c7150ea37bb0e352df9cb329de11d24|running|healthy|2026-07-02T16:22:17.374948578Z|jellyfin_s6_net|unless-stopped|s6vinetwatch|healthcheck_sha256=a22856b3a5dfad87ecc898383d5b49daa6b4b98bca2797ea36cb422e824de47c
jellyseerr|c00ff6cc7213669b85bc8e28a51ffc16779d2489c7378f3911735b8d983dcd05|fallenbagel/jellyseerr|sha256:2742757d9c41bcb4acb76c86c4ce23a8c54d5dbe93a698c815a9a34bed0b18d0|running|no-healthcheck|2026-07-02T16:22:04.637037538Z|container:ddb18d46aebae5ce7af0f805ab5222e0825a1a153c71fbed93b8c9a80fc80d89|unless-stopped|s6vinetmedia|healthcheck_sha256=74234e98afe7498fb5daf1f36ac2d78acc339464f950703b8c019892f982b90b
kavita|578e4aa1ceeb4eb61ce094ecc862cdce7d68538a2c3e7b17cb29c3f4798597d4|jvmilazz0/kavita:latest|sha256:12ac333d6fde07c087a135dd23fa5b930a96e2a3fde9cfbb281214f040b4cbba|running|healthy|2026-07-02T16:22:04.630545121Z|container:ddb18d46aebae5ce7af0f805ab5222e0825a1a153c71fbed93b8c9a80fc80d89|unless-stopped|s6vinetmedia|healthcheck_sha256=256947cdccf855523b654955b26538932c2ee76e01f507ef885f1e885437ddb4
lasereverything-manager-bus-core|791f2ef47fc1c798318b4136773672dc0f8ff08cd104f075f2f317ca0caf1817|ghcr.io/true-good-craft/tgc-bus-core:latest|sha256:e053cb452820daba308e86f456ba7d1e2b0306f058eae2c91ee7122a8634f4bb|running|healthy|2026-07-02T16:21:21.581810214Z|lasereverythingnetmanager_default|unless-stopped|lasereverythingnetmanager|healthcheck_sha256=5f70654d32c1e7e9060a6069ae4e3e8d1b94c196cd73a66ae40c93098344ec59
lasereverythingnettv-radio-1|297e17de84c4d3c31f9cdeda9dcbefe185e6ec6c48c44c7fdae9f3e3f5ce982c|jrottenberg/ffmpeg:latest|sha256:1cf434af29091eba2d80108e28864540dc98bd3e4e5cda2b497e758d60bacba1|running|no-healthcheck|2026-06-30T17:48:55.163034213Z|lasereverythingnettv_default|unless-stopped|lasereverythingnettv|healthcheck_sha256=74234e98afe7498fb5daf1f36ac2d78acc339464f950703b8c019892f982b90b
lasereverythingnettv-tv-1|776624328baf74b4196474c0962d2e01b1caa21e8bc3a2f6c77aece135faf30e|jrottenberg/ffmpeg:latest|sha256:1cf434af29091eba2d80108e28864540dc98bd3e4e5cda2b497e758d60bacba1|running|no-healthcheck|2026-06-30T17:48:55.161961872Z|lasereverythingnettv_default|unless-stopped|lasereverythingnettv|healthcheck_sha256=74234e98afe7498fb5daf1f36ac2d78acc339464f950703b8c019892f982b90b
le-directus-source|6adbd503febfd8a6236fc7c941df7bfc748e76dcd510c11e69a3ff02776ff344|sha256:72311f2ba18f5530a667b9a806bb1720a8c9d95de6b20dd085a808901eb614b8|sha256:72311f2ba18f5530a667b9a806bb1720a8c9d95de6b20dd085a808901eb614b8|running|no-healthcheck|2026-07-10T23:15:59.628507071Z|bridge|unless-stopped||healthcheck_sha256=74234e98afe7498fb5daf1f36ac2d78acc339464f950703b8c019892f982b90b
le-payload-pg|2ee8f491397b5cbab595121f0e5e57fa5778329090d27a80b002bdd83a5ee8f2|sha256:639c86b6cacfdf788c075ffb5879286aa0e905965a4832ba6c76ccb0bca9417b|sha256:639c86b6cacfdf788c075ffb5879286aa0e905965a4832ba6c76ccb0bca9417b|running|no-healthcheck|2026-07-10T23:20:42.20954498Z|bridge|unless-stopped||healthcheck_sha256=74234e98afe7498fb5daf1f36ac2d78acc339464f950703b8c019892f982b90b
lemmy-pictrs|22597c5b8ac30d2d715bd538ee15e27e07d8677c9a191c2af741c57b1adbe08d|asonix/pictrs:0.5.17-pre.9|sha256:9a5411f20149156b2bbbcc69b63918e9259d8d4653244eae7482e71177e1b15a|running|no-healthcheck|2026-07-02T16:21:41.143484739Z|lemmy_net|unless-stopped|makearmyiolemmy|healthcheck_sha256=74234e98afe7498fb5daf1f36ac2d78acc339464f950703b8c019892f982b90b
lemmy-proxy|f267f47868f6bd4c0f2b3594c1b23909862fbe853491cd514e9f8205be3499d2|nginx:1-alpine|sha256:ea51152ef8c480b999cee0271a288c698704b18483276119b1253e576ef3232f|running|no-healthcheck|2026-07-02T16:21:41.4297012Z|lemmy_net|unless-stopped|makearmyiolemmy|healthcheck_sha256=74234e98afe7498fb5daf1f36ac2d78acc339464f950703b8c019892f982b90b
lemmy-ui|e53db215d6385a424365263fbce8edd9d08f1ea0927bc0aa136af4694ba22d89|dessalines/lemmy-ui:0.19.12|sha256:0a85b3192f29a5b14d41c265d9d5cab60bd281b4a5b5db8f3a85d5d9bf01aaaa|running|healthy|2026-07-02T16:21:41.334389805Z|lemmy_net|unless-stopped|makearmyiolemmy|healthcheck_sha256=fe44578c9a0ef5c3150b372caa763f18afad8938c28752af3570a87d8deb88e4
lemmy|1f032d67308df68711b5d432398ff31094da65dbdddbb966e60d745390fd0a0d|dessalines/lemmy:0.19.12|sha256:68c00173ade225585ea7d54ed2688f8f23d7d2886ae3f5b4eefd70dbc05b044a|running|no-healthcheck|2026-07-02T16:21:41.230573992Z|backend_net|unless-stopped|makearmyiolemmy|healthcheck_sha256=74234e98afe7498fb5daf1f36ac2d78acc339464f950703b8c019892f982b90b
mailu-admin|ed54ee705edfd3867b98548c7a5054ba8e58eb8fc3f7afbf3e0d5378fe508f4e|ghcr.io/mailu/admin:2024.06|sha256:e4319dc05cd8ee8204ebb0343685d52a9c645f192f92a9ba24e05a702a722894|running|healthy|2026-07-10T15:30:56.858313278Z|mailu_net|always|arrmailnetmail|healthcheck_sha256=65c193d7ce37216310a9ad7324433501d4532a0e95241ba91a6643556dcb2b8d
mailu-antispam|0f2bc2ca4ee1971e3dfdd9534ffa5ffa6bb5b1530f8c1e8c595a7c1303d70cba|ghcr.io/mailu/rspamd:2024.06|sha256:a8619d7f452f04d806b1f334e3e28e123c5f568080e168051fe98c7b3637925d|running|healthy|2026-07-10T15:30:57.245953555Z|arrmailnetmail_clamav|always|arrmailnetmail|healthcheck_sha256=7ffc0eff154ba7ec4712f405258f56347f428b7f2ec716554a9f6c1fed3b896d
mailu-antivirus|22b05b37de3374f615e15e79cee3632e3f2398a2c50a5183a3baa94add519b62|clamav/clamav-debian:1.4|sha256:f8a1f4389e5cbfb43ffc839d751bf746c6c27f5de780ba1fcde15d596f94287b|running|healthy|2026-07-10T15:30:56.621336608Z|arrmailnetmail_clamav|always|arrmailnetmail|healthcheck_sha256=713e2ecbe297d1e71fa7f1819859d65ad738041705100f5c4ae73f4ae551fb60
mailu-fetchmail|a47a586ae5cdb3d810932c4dfe06ec242ec02cc3999f7ecec2fac1779cf14ffc|ghcr.io/mailu/fetchmail:2024.06|sha256:eccbdf53fb66dc34a49bde349f53eb9d1bba60c98a1be5d9eabe68a726f13e6a|running|healthy|2026-07-10T15:30:57.460051545Z|mailu_net|always|arrmailnetmail|healthcheck_sha256=001e1e50755b8a7ad162dfd92611a0d0944aa07d8ca6dc19ebffb0c60494878e
mailu-front|a82753aefc6c8243c7c71caa0ef289a1a2e83c3fb1f9e93e779e56267353d11c|ghcr.io/mailu/nginx:2024.06|sha256:30a4f996f255fe498ed847b9a3759efd45fc5d8bd5c4dc121896e83615e60b0d|running|healthy|2026-07-10T15:30:56.726639815Z|mailu_net|always|arrmailnetmail|healthcheck_sha256=c379c13a800f5417c0692896be411b09f7fe5a95d530f676abfd7d2dae1ea24c
mailu-imap|549c48f83f429fd9b1e52f7752012b1250107dc511c1b7ee94ac2a49b521a726|ghcr.io/mailu/dovecot:2024.06|sha256:27aceac0272f97361a5a5b1d5abea7099e10f409e3d28a6096f9111fe90bf347|running|healthy|2026-07-10T15:30:57.247440245Z|mailu_net|always|arrmailnetmail|healthcheck_sha256=9462f6ccccab8ea58f34afb7cfaae178b2d36f27a29e903b89ea4a7a1ed73cd6
mailu-oletools|841c57f99cfeec974e757666484b8c1a37ca0f2696d719d49317294253edb33b|ghcr.io/mailu/oletools:2024.06|sha256:76fb07165f54411c1136a449ba2963fe11618f0cf4629fdc13eadd628d3528c9|running|healthy|2026-07-10T15:30:56.729115113Z|arrmailnetmail_oletools|always|arrmailnetmail|healthcheck_sha256=b1b33aade32e78a9484d43059f9f651eef8a2e8b8910893a4436f15a078abd08
mailu-redis|4f1b06b40d4ebe43ee8391c91d0c02645a7f23dc91229123a0a25e9098eb567d|redis:alpine|sha256:55563f45704d59e891b6aa643014bb6b562abf21909a44b3b297502415b68e29|running|no-healthcheck|2026-07-10T15:30:56.720208042Z|mailu_net|always|arrmailnetmail|healthcheck_sha256=74234e98afe7498fb5daf1f36ac2d78acc339464f950703b8c019892f982b90b
mailu-resolver|96d3aaea44a0a8779c2a11fd7cb341bbc9aa23ad879381c5f7a247a0554cc444|ghcr.io/mailu/unbound:2024.06|sha256:d30593c8bf42bfd1c46bd1ac7ee90862b0cfa7e96fd10da1dacc2c69cafb443d|running|healthy|2026-07-10T15:30:56.617962677Z|mailu_net|always|arrmailnetmail|healthcheck_sha256=5b9b365275d40b354506f2b02070d7785700a374ee09de8d7ee8527bbbf1b16f
mailu-smtp|22e3c459d26b808ffca118df679aae2c9cc511de3fcaba4a9847770df6f24de5|ghcr.io/mailu/postfix:2024.06|sha256:0bed674f22e609e0b2f6780865097a41ed6ca5307db4bcc0794a35e2e7e976c9|running|healthy|2026-07-10T15:30:57.241512918Z|mailu_net|always|arrmailnetmail|healthcheck_sha256=9b234890e871375cec386d4edacf17bcbd8a5504fab8b1177d956c56622a08aa
mailu-tika|60ba021f422056617055244f608c881f5ce282c2d1590e52d8d2719a44b1eb98|apache/tika:2.9.2.1-full|sha256:e646191162f8cb7aef0b512d54c028f62bd86e0e5f53b314ab82cfac7ef292d7|running|healthy|2026-07-10T15:30:56.723391978Z|arrmailnetmail_tika|always|arrmailnetmail|healthcheck_sha256=454cfb3387dd964dad59d868a522ba8ebbb1181df78bac6e750133eb5770f96d
mailu-webdav|d5d73d88a2764eaded36de6cbc7fab3fd21956df393d4cf9fecc58217a80e3b6|ghcr.io/mailu/radicale:2024.06|sha256:890973bd7de583a7c8cb2c2bbc939249e007418066b69f59cd0c6903b7f35dfc|running|healthy|2026-07-10T15:30:56.620268969Z|arrmailnetmail_radicale|always|arrmailnetmail|healthcheck_sha256=0eaa30f40ef1bb32694b25d91598460713955379cbe30e51af90204e6c29aeff
makearmy-app|3c10dda3815a2c0b0c494fb99a198a331b85c61f0b27ed1537bd2743355fd363|lasereverythingnetdb-makearmy-app|sha256:6c8190861686d9bec6f50d705c681d657fbc979c2a8743cf1614d01db0b5d1c6|running|no-healthcheck|2026-07-10T16:30:29.09880902Z|makearmy_net|unless-stopped|lasereverythingnetdb|healthcheck_sha256=74234e98afe7498fb5daf1f36ac2d78acc339464f950703b8c019892f982b90b
makearmyiomeet-jibri-1|d9799783148b365cb04f3eeb4f52217cc32e377b47fb69919d6ff18f05430d1d|jitsi/jibri:stable|sha256:dfe4d14ee76e0b054c226b27976d43b0c4ed6fa9774b8acd06b0c4f391dbbb95|running|no-healthcheck|2026-07-02T16:21:43.11777777Z|meet_net|unless-stopped|makearmyiomeet|healthcheck_sha256=74234e98afe7498fb5daf1f36ac2d78acc339464f950703b8c019892f982b90b
makearmyiomeet-jicofo-1|9f10baac0b699ef704ffbceab5d182a769f45f964a08fff13984b67f421370ac|jitsi/jicofo:stable|sha256:80619f3a1c08c4bb6ccc44af0a0829a1bc817904a5819da2762bca0ea7d840fe|running|no-healthcheck|2026-07-02T16:21:42.695779854Z|meet_net|unless-stopped|makearmyiomeet|healthcheck_sha256=74234e98afe7498fb5daf1f36ac2d78acc339464f950703b8c019892f982b90b
makearmyiomeet-jvb-1|dcb946a8243ca5b8b3307c9e0e47474e24bd8a0b0f738e5558ef1e084cd0a26d|jitsi/jvb:stable|sha256:5a7999e458cc16a79a7b1082de760d5240d938ea2fd1c74dfc1cb7c32267a2d2|running|no-healthcheck|2026-07-02T16:21:42.696967273Z|meet_net|unless-stopped|makearmyiomeet|healthcheck_sha256=74234e98afe7498fb5daf1f36ac2d78acc339464f950703b8c019892f982b90b
makearmyiomeet-prosody-1|7e55738c8ef8fa72966f30ee08e08f78ef9d2ce0778f102810e7a1e9a65ee427|jitsi/prosody:stable|sha256:4ecc8a3ed20b56d628e0980e1bd279a5201a1d749a0d7529cc320a1e57dd13c0|running|no-healthcheck|2026-07-02T16:21:42.57107622Z|meet_net|unless-stopped|makearmyiomeet|healthcheck_sha256=74234e98afe7498fb5daf1f36ac2d78acc339464f950703b8c019892f982b90b
makearmyiomeet-web-1|9fcb631e7509b43c6cb8589ba5b9b86a33355fb21f6b0aded53fe249c317ac8a|jitsi/web:stable|sha256:dc69cbf912d43bbd2e6bff921c32f968d0fd20d299f4a6ace213411b3ace77d7|running|no-healthcheck|2026-07-07T23:05:03.005510996Z|meet_net|unless-stopped|makearmyiomeet|healthcheck_sha256=74234e98afe7498fb5daf1f36ac2d78acc339464f950703b8c019892f982b90b
mastodon-es|8173cfe45df20a1f250fdb1deeaf7b195f9b10048827c3c7f0f6bed3065d5a8c|docker.elastic.co/elasticsearch/elasticsearch:7.10.2|sha256:0b58e1cea50068776b05911440c0eb2865ef64f46704a74ebcf0f8f9d9edff08|running|healthy|2026-07-02T16:21:41.658284982Z|mastodon_net|always|makearmyiomastodon|healthcheck_sha256=43ed0ec1b037c1138b428561ed2f275ae40dbf871887fff30170841101c96871
mastodon-redis|42a18b0302bab7268fb6e4b37fdb00e7e33e8ab873d29a51935960dfa4bd2c9e|redis:7-alpine|sha256:487efc0616382465781b8fdc3d6d1db449e6fd80ae23bf48432a2da6b6929908|running|healthy|2026-07-02T16:21:41.657158258Z|mastodon_net|always|makearmyiomastodon|healthcheck_sha256=6971523e64ad7ed1de29b647f359cf830fb227fe65b6e7d687b694e79b4cd00a
mastodon-sidekiq|8f854b45b737bc4e36e74ef5f6698decbf36d3d77b837fa30b736d3ec22ede74|ghcr.io/mastodon/mastodon:v4.3.7|sha256:9f42cca562554c9a4b3c39fecf3590aaf48cd4f566054f94135bc7e417b9e609|running|healthy|2026-07-02T16:21:41.771788456Z|backend_net|always|makearmyiomastodon|healthcheck_sha256=63b22b698c07de250a134ce31a15f3b269ad63c4f8fa4896bb920941b5a20e56
mastodon-streaming|58e667e71825fdf2674c125bf60ed8a1edf075b3dd01a9aeaa69e79c07edd1cf|ghcr.io/mastodon/mastodon-streaming:v4.3.7|sha256:ce444902e7c4152b82ad2526fbd32d0eaa47cc9d6b2a7e4198cd2395579e63cf|running|healthy|2026-07-02T16:21:41.770290748Z|backend_net|always|makearmyiomastodon|healthcheck_sha256=d5da8b454dac278280b9e3931e305a9094a1e446721f9e01e89f3de89772a681
mastodon-web|355cfac0741d25cee7c18729d4ec0f74355a20edca54ca608102be82bfc90a05|ghcr.io/mastodon/mastodon:v4.3.7|sha256:9f42cca562554c9a4b3c39fecf3590aaf48cd4f566054f94135bc7e417b9e609|running|no-healthcheck|2026-07-02T16:21:41.790863717Z|backend_net|always|makearmyiomastodon|healthcheck_sha256=74234e98afe7498fb5daf1f36ac2d78acc339464f950703b8c019892f982b90b
misskey-redis|ee4b788482e8fdaf635f5bb4e66ccf757f8b8e96d85175efc56e53f09d5550e3|redis:7-alpine|sha256:487efc0616382465781b8fdc3d6d1db449e6fd80ae23bf48432a2da6b6929908|running|healthy|2026-07-02T16:21:22.84032892Z|misskey_net|unless-stopped|makearmyiodeck|healthcheck_sha256=6a1d3a9edb36c3a4ce5fcbd09886f5e885dcfb752bcece4036250d3ded7a95b0
misskey|fafd13e69d38892a3e1cdb33ebe709b2de1a13807a7db037035bad815d2c4e59|misskey/misskey:latest|sha256:368867af5f043346679e8721eb4560f2633cfe1a889fcf0422b6e845b7fae5b6|running|healthy|2026-07-02T16:21:28.456308969Z|backend_net|unless-stopped|makearmyiodeck|healthcheck_sha256=5ccbecc9fc9854d3822bad70f7615ca2b2189f2ae0376a276e1a1cd785d27328
mysql_shared|37e9091b4f9db9c4434b664903283248fe9723a9717ba3a407141d625c6ab272|mariadb:10.11|sha256:72311f2ba18f5530a667b9a806bb1720a8c9d95de6b20dd085a808901eb614b8|running|no-healthcheck|2026-07-02T16:21:19.526467097Z|backend_net|unless-stopped|database|healthcheck_sha256=74234e98afe7498fb5daf1f36ac2d78acc339464f950703b8c019892f982b90b
navidrome|0d66d26de7b4dc30c3f2629d8db37a68b45dec6b69805aac1d48682999dc8bd4|deluan/navidrome:latest|sha256:6567e3810d544da3bb067f50aba7b05b3b029acacd7b17654f2310eee21756c8|running|no-healthcheck|2026-07-02T16:22:15.324814438Z|backend_net|unless-stopped|s6vinetmusic|healthcheck_sha256=74234e98afe7498fb5daf1f36ac2d78acc339464f950703b8c019892f982b90b
nextcloud-ma-app|da4c05c513a3fd41b3816f4e3b267489bc795e07af0411d69e54a8fd4c303341|nextcloud:fpm|sha256:192578f11d97117460f29c0c42e4e3676200f6e0da97f263f34d59dfbfd9b98b|running|no-healthcheck|2026-07-02T16:21:22.194816111Z|arrmail_backend|always|makearmyiocloud|healthcheck_sha256=74234e98afe7498fb5daf1f36ac2d78acc339464f950703b8c019892f982b90b
nextcloud-ma-redis|8a22ef42d843c6af32706995bdac253c66b2dbdfc05ad63d154e4f6130149dc4|redis:alpine|sha256:55563f45704d59e891b6aa643014bb6b562abf21909a44b3b297502415b68e29|running|no-healthcheck|2026-07-02T16:21:22.079098096Z|nextcloud_ma_net|always|makearmyiocloud|healthcheck_sha256=74234e98afe7498fb5daf1f36ac2d78acc339464f950703b8c019892f982b90b
nextcloud-ma-web|47788388748bf09d5a90f9e04078d1f5387a1e55e8dab562d1356568684851e6|nginx:alpine|sha256:ea51152ef8c480b999cee0271a288c698704b18483276119b1253e576ef3232f|running|no-healthcheck|2026-07-02T16:21:22.386376738Z|nextcloud_ma_net|always|makearmyiocloud|healthcheck_sha256=74234e98afe7498fb5daf1f36ac2d78acc339464f950703b8c019892f982b90b
nzbhydra2|72577626a7b78f5e421a3aa2170ca0779d1ae32833b8ab06af5e15f6c21b54b7|lscr.io/linuxserver/nzbhydra2|sha256:de294ca9aa92795dca1f3e18c5bd1f23a6f88f580ed35537c91910e898d319b9|running|no-healthcheck|2026-07-02T16:22:04.638532863Z|container:ddb18d46aebae5ce7af0f805ab5222e0825a1a153c71fbed93b8c9a80fc80d89|unless-stopped|s6vinetmedia|healthcheck_sha256=74234e98afe7498fb5daf1f36ac2d78acc339464f950703b8c019892f982b90b
owncast|f49b181fbd7098f6794f49dedb85d7f0f0b1b96302571d328d5c53c6c53477ca|owncast/owncast:latest|sha256:e6eabb9b993941043e9a6feb8f3d94d54854afc1d268310cfedc4a4a45f9b31b|running|no-healthcheck|2026-07-02T16:21:21.767199243Z|makearmyiocast_default|unless-stopped|makearmyiocast|healthcheck_sha256=74234e98afe7498fb5daf1f36ac2d78acc339464f950703b8c019892f982b90b
peertube-redis|af5cd4f35df32636f42dbe64fb8d6f76ddfa4f0c0c805a33e8a5ab80b14de0f2|redis:7-alpine|sha256:487efc0616382465781b8fdc3d6d1db449e6fd80ae23bf48432a2da6b6929908|running|no-healthcheck|2026-07-02T16:21:45.580356479Z|makearmyiowatch_peertube_net|unless-stopped|makearmyiowatch|healthcheck_sha256=74234e98afe7498fb5daf1f36ac2d78acc339464f950703b8c019892f982b90b
peertube|f1f9b4a119fe5b3b4595ae065743c22340bd49d506c8e1dec91396177d02edb4|chocobozzz/peertube:production-bookworm|sha256:95cafee12c7ba26c7427369020a5fe47f0ca4f2c0a9125038a678abda7a69c9b|running|no-healthcheck|2026-07-02T16:21:45.796042043Z|backend_net|unless-stopped|makearmyiowatch|healthcheck_sha256=74234e98afe7498fb5daf1f36ac2d78acc339464f950703b8c019892f982b90b
picsur-redis|b209f19682835276e80e17d0ac3f1e036d6b1fda8756dcac68fc122d0c4fa3f8|redis:7-alpine|sha256:487efc0616382465781b8fdc3d6d1db449e6fd80ae23bf48432a2da6b6929908|running|healthy|2026-07-02T16:21:29.04863531Z|picsur_net|unless-stopped|makearmyioimages|healthcheck_sha256=147968879ed0db0afaec1547f804e197ae69ccc63932fd3abbe258ab467010d3
picsur|64562af622743c5e95fed7cd0e400fcb754e67d524f3692308ae11420dc0e0e6|ghcr.io/caramelfur/picsur:latest|sha256:1807c0cf959b86dddbf3a92effb9d8cde12b3412c0a399bfd28720fdc37238c4|running|healthy|2026-07-02T16:21:39.647252782Z|backend_net|unless-stopped|makearmyioimages|healthcheck_sha256=ec000ecdddc3d5596f4bc9628961c417aa7b8c1a3b5d2df4c98640ad362f5dd5
pinchflat|85fe3664962fcfa588aa37133ff74181f16806d98ed22b9a3d921d266698389c|keglin/pinchflat:latest|sha256:753a348c4189cab415077a0ba39e429f3a2d827ca9944482fba39e89d7670359|running|healthy|2026-07-02T16:22:17.898598212Z|s6vinetyt_default|unless-stopped|s6vinetyt|healthcheck_sha256=135a29148f28914de8f172b817ecb24ba481550c1b7266a8db237818fd6b8455
pixelfed-ma-redis|2f5e7667382929d159967f793544f3d797d1bc081b00d8e2e8e569c12f34efc6|redis:6|sha256:2acfd509b0322ec1849e7e8cae7acfed5abfa449aef850d960669fb93e31a0da|running|no-healthcheck|2026-07-02T16:21:43.915226725Z|pixelfed_ma_net|unless-stopped|makearmyiopixels|healthcheck_sha256=74234e98afe7498fb5daf1f36ac2d78acc339464f950703b8c019892f982b90b
pixelfed-ma-web|4bf3656aa29bb29bc731b8a31e22f0b3c7e26b04439d400b2f7b92a43d131c75|elestio/pixelfed:latest|sha256:96f2928fac9954a5926816c08b0828f0aac91101ed44f35e45870af0b07ca4b3|running|no-healthcheck|2026-07-02T16:21:44.127434453Z|backend_net|unless-stopped|makearmyiopixels|healthcheck_sha256=74234e98afe7498fb5daf1f36ac2d78acc339464f950703b8c019892f982b90b
pixelfed-ma-worker|4533b9ed4e4d02ee916e99ef1d042fb11f6cb140168748fe15a61112a2f27794|elestio/pixelfed:latest|sha256:96f2928fac9954a5926816c08b0828f0aac91101ed44f35e45870af0b07ca4b3|running|no-healthcheck|2026-07-02T16:21:44.134015364Z|backend_net|unless-stopped|makearmyiopixels|healthcheck_sha256=74234e98afe7498fb5daf1f36ac2d78acc339464f950703b8c019892f982b90b
postgres_shared|16a46598e773446ef94853d20ca2aa4f636599c4fabb5dc945038891e7327f75|tensorchord/pgvecto-rs:pg16-v0.3.0|sha256:edaefebbe512002c6bc57af37cfffb53d70ede0c4f213dd9344a0cd42276cee5|running|no-healthcheck|2026-07-02T16:21:19.527512266Z|backend_net|unless-stopped|database|healthcheck_sha256=74234e98afe7498fb5daf1f36ac2d78acc339464f950703b8c019892f982b90b
privatebin|908728b26d94527c44fa334bd0e506b478d6ab143efa292ce7444ebc2d15e8c8|privatebin/nginx-fpm-alpine|sha256:1cd5a4d4a4d712cd3cc5b3997c47211279e2180a578ab2114285a5a8ad38117a|running|no-healthcheck|2026-07-02T16:21:43.509343441Z|privatebin_rw_net|unless-stopped|makearmyiopaste|healthcheck_sha256=74234e98afe7498fb5daf1f36ac2d78acc339464f950703b8c019892f982b90b
prowlarr|89d2cb4ae3df4b62d58914957f583650d9b21f90830f120d09fc70c7e901c681|linuxserver/prowlarr|sha256:e21be23a845221afc1f4a650b864c294758cde345ba7c865f01e2686274dedb7|running|healthy|2026-07-02T16:22:04.640131595Z|container:ddb18d46aebae5ce7af0f805ab5222e0825a1a153c71fbed93b8c9a80fc80d89|unless-stopped|s6vinetmedia|healthcheck_sha256=13f99794bea67548cc642314145eec7125eb7f719dada9768aba07a1a476b795
qbittorrent|af4d51e98c4a6293183474353c87e43e38c26e675fb74048ddc9f9064a62c0ae|lscr.io/linuxserver/qbittorrent:latest|sha256:a5d5cf51c98df7347d8e9ed7bf2c83c4b7f9f0e9a3981410e8499927541cb350|running|no-healthcheck|2026-07-02T16:22:04.635570271Z|container:ddb18d46aebae5ce7af0f805ab5222e0825a1a153c71fbed93b8c9a80fc80d89|unless-stopped|s6vinetmedia|healthcheck_sha256=74234e98afe7498fb5daf1f36ac2d78acc339464f950703b8c019892f982b90b
radarr|161e0cab15f684eff7237b0237483cf2d25c628f55c9a78b07d917054ba0d4da|linuxserver/radarr|sha256:ecf70f15bca59f11387be96af3d2eea3a733d8f16946e763923185d4d297fa08|running|healthy|2026-07-02T16:22:04.631684293Z|container:ddb18d46aebae5ce7af0f805ab5222e0825a1a153c71fbed93b8c9a80fc80d89|unless-stopped|s6vinetmedia|healthcheck_sha256=f71b83e7755a8b028db89f814a6a838ce7119af31ce52ce7e8ba8976096250c1
recyclarr|55cd226a6d1cc7b0375ab72aa7c23a17ed1ecbb1ff7e5790701589a777c6d0cd|ghcr.io/recyclarr/recyclarr|sha256:c57a7e2fe3090e3f43a0dd6686cde6c01db71c8d4a85fcb3b789d0ac473d874c|running|no-healthcheck|2026-07-02T16:22:05.297908155Z|container:ddb18d46aebae5ce7af0f805ab5222e0825a1a153c71fbed93b8c9a80fc80d89|unless-stopped|s6vinetmedia|healthcheck_sha256=74234e98afe7498fb5daf1f36ac2d78acc339464f950703b8c019892f982b90b
romm-db|32e6a3a86bd8a241fba5a3ee4bd81f8e40d5d00988b6f7b4382d33af10a301fe|mariadb:latest|sha256:ca20b0713cc87f0e9a75d154f677e3f9469e1281f21dd68dc551bf3d93467e27|running|healthy|2026-07-02T16:21:47.839091367Z|s6vinetgames_default|unless-stopped|s6vinetgames|healthcheck_sha256=d5f5eabd7fcdf68fb96e631355d683a153faa27d31ac2c96ae5f4263929c436e
romm|52eadbc4e6fedce3487bc0ccc9b5f1e0fe631349d3246ce95430dab75d10ae31|rommapp/romm:latest|sha256:0ec219d3cf24a9ee76f36c318ec03fca842d474b9ba47a6484e40b62b11983dc|running|no-healthcheck|2026-07-02T16:21:58.569925827Z|s6vinetgames_default|unless-stopped|s6vinetgames|healthcheck_sha256=74234e98afe7498fb5daf1f36ac2d78acc339464f950703b8c019892f982b90b
sabnzbd|23e190c5e003059a5b331976ad6bc5773a7089c4c52b967933332d705e8be4cd|lscr.io/linuxserver/sabnzbd|sha256:8a22dade7777d4c9c29922881dd849ffe8059be3b7b2a97fc137a745057f9894|running|no-healthcheck|2026-07-02T16:22:04.634220659Z|container:ddb18d46aebae5ce7af0f805ab5222e0825a1a153c71fbed93b8c9a80fc80d89|unless-stopped|s6vinetmedia|healthcheck_sha256=74234e98afe7498fb5daf1f36ac2d78acc339464f950703b8c019892f982b90b
slskd-portwatch|5be4dca461964ba4a401c0c49f69bf4147dfe72e3c318414a768e66684c49235|alpine:3.20|sha256:bf8527eb54c3680e728d5b4b383a8ba730d72dae7236fbc8dff97ed6b224a731|running|no-healthcheck|2026-07-02T16:22:14.634814016Z|s6vinetmedia_media_s6_net|unless-stopped|s6vinetmedia|healthcheck_sha256=74234e98afe7498fb5daf1f36ac2d78acc339464f950703b8c019892f982b90b
slskd|50aebf40411108683ec8fbd2bb81f11a9275894da0bf3b80e32c492ef180c1ef|slskd/slskd:latest|sha256:4037f8009b7a98e3ef10b0b590717895c09779aeed060e093fc3ef2f8b027cf2|running|healthy|2026-07-08T12:00:29.038610186Z|container:f73ac36f101be4afadf1933ffa15f86bb05642d50b6c6859c904aa2a743a6c8b|unless-stopped|s6vinetmedia|healthcheck_sha256=2e42bc8cb3985bfbe1ec2460cd8d9a2fa7b2fd9ebc5e88bc824f8b95e39d6dca
snappymail|79ea0d668d4289c270a148183c3c6465b9e70521953bcadef9de7cca49c20f6a|djmaze/snappymail:latest|sha256:741d1bdf62b2cd4f3ff8c1d58a86bec7ba1aa644fbce45ea275d6972f89ac2bf|running|no-healthcheck|2026-07-10T01:56:51.598114125Z|snappy_net|unless-stopped|arrmailnet|healthcheck_sha256=74234e98afe7498fb5daf1f36ac2d78acc339464f950703b8c019892f982b90b
sonarr|fbd5ba72eaeccc4881818317d6fc81a285fa2a1161989675f53a666ce8c11002|linuxserver/sonarr|sha256:66f3b9a7c27e21a06e3c1a5f8f17b2b00e917291f0aaf07cece29f9fd9a26e4f|running|unhealthy|2026-07-02T16:22:04.632855946Z|container:ddb18d46aebae5ce7af0f805ab5222e0825a1a153c71fbed93b8c9a80fc80d89|unless-stopped|s6vinetmedia|healthcheck_sha256=3b816cea3c7006fde5b6197792c65249d978e96c07caf3cc61136b553107433e
tdarr|ba0f5cf378fd25e9a6b95cd6b53ea377a4cb86288fe131d7379e5e7e7a24b8fb|ghcr.io/haveagitgat/tdarr:latest|sha256:6805431096bd3fa6e2aa1005dc1f3834545b48f6a03f09243a653e2005a3a808|running|no-healthcheck|2026-07-02T16:21:59.102117444Z|container:ddb18d46aebae5ce7af0f805ab5222e0825a1a153c71fbed93b8c9a80fc80d89|unless-stopped|s6vinetmedia|healthcheck_sha256=74234e98afe7498fb5daf1f36ac2d78acc339464f950703b8c019892f982b90b
vaultwarden|6633442e948d174acda740c2a26ba13782f1ac57f24839e0ba51791d9fc3b51d|vaultwarden/server:latest|sha256:3e3ce0360c32d2dcc2bbe138f7716014dc3eee45f235e44603e4761e46601007|running|healthy|2026-07-02T16:21:21.085620901Z|vault_net|unless-stopped|arrmailnetpass|healthcheck_sha256=c0ba6b061e69edd02095fa8c73f0065e6df9440345b0b0f53d5dd24e341cc665
vdo_wss|f40b63fbbd9d80f42dd8477226aa734c88db0009d04d493701f7507de00c2382|node:20-alpine|sha256:11cedc39e663e7c5d5cb9cc77a461a0d2adc25537b94e6831a6108f09cb2001b|running|no-healthcheck|2026-06-30T17:55:34.686303735Z|makearmyiovdo_default|unless-stopped|makearmyiovdo|healthcheck_sha256=74234e98afe7498fb5daf1f36ac2d78acc339464f950703b8c019892f982b90b
vpn-slskd|f73ac36f101be4afadf1933ffa15f86bb05642d50b6c6859c904aa2a743a6c8b|qmcgaw/gluetun|sha256:5694e33296a1d44a563e83e51113970b230acf2878004f01099ad4a4b83bc762|running|healthy|2026-07-02T16:21:58.912570969Z|s6vinetmedia_media_s6_net|unless-stopped|s6vinetmedia|healthcheck_sha256=8a73e8de0ca0b93f3e1b75f81d2ffe1c320f5ede18b34ec15db87f285f778104
vpn|ddb18d46aebae5ce7af0f805ab5222e0825a1a153c71fbed93b8c9a80fc80d89|qmcgaw/gluetun|sha256:5694e33296a1d44a563e83e51113970b230acf2878004f01099ad4a4b83bc762|running|healthy|2026-07-02T16:21:58.9115723Z|s6vinetmedia_media_s6_net|unless-stopped|s6vinetmedia|healthcheck_sha256=740a01b114720db4fbb6e078898c810bd1ff19f9227cc3a1bd01926f222aea8b
yacht|d2a07818987aff223c090be88530007784385b3352e5f53aa10ec881a305464b|ghcr.io/selfhostedpro/yacht:latest|sha256:d79060100eb7707aae957b78a4406dfb5b0f83d83543f3e132d8bb24da8abc9c|running|no-healthcheck|2026-07-02T16:21:47.517372813Z|yacht_s6_net|unless-stopped|s6vinetdocker|healthcheck_sha256=74234e98afe7498fb5daf1f36ac2d78acc339464f950703b8c019892f982b90b

View file

@ -0,0 +1 @@
directus|c65e7651bfb8827b712f3ed57fff5839dc5cdc87f9f416b7a09f389c7864a1a3|directus/directus:latest|sha256:dd5537b4b35a4a980452e8160def97e63bfd0a6b92e6d81ec980a3300801ce2a|exited|no-healthcheck|2026-07-02T16:21:21.312699245Z|backend_net|no|lasereverythingnetforms|healthcheck_sha256=74234e98afe7498fb5daf1f36ac2d78acc339464f950703b8c019892f982b90b

View file

@ -0,0 +1,2 @@
castopod-redis|45094b8a921517979c9a8a519c7ff2fc71a540656f2309ffbd0696cf56bf5dcf|redis:7.2-alpine|sha256:b6636bae9624cba73c69fc9d21318151217a103a1db600b8012db8c460785c26|running|no-healthcheck|2026-07-02T16:21:44.78699982Z|castopod_ma_net|no|makearmyiopodcast|healthcheck_sha256=74234e98afe7498fb5daf1f36ac2d78acc339464f950703b8c019892f982b90b
castopod|b3612901d76d0b2be752762fb1e5d49ca7b521a648ab9b6f332ff7ace61ba54a|castopod/castopod:latest|sha256:d624bd1d45a4b929b9202cae2c4290cdf2624b6bf172fe2115ce20bdb359a428|running|healthy|2026-07-02T16:21:44.790327595Z|backend_net|no|makearmyiopodcast|healthcheck_sha256=a8def15088dacf1eb21b7a57747b2113566689d9876c5d690d7c3269562ec5cc

View file

@ -0,0 +1,87 @@
bazarr|0c752272254cfad9aeb5a6d981a8d354c0676a18eb14008b4613c7a442ea995c|linuxserver/bazarr|sha256:71677d1a237182abf46f607d346109c5a78aae3973d01b143cd89f39569345fa|running|no-healthcheck|2026-07-02T16:22:04.651521486Z|container:ddb18d46aebae5ce7af0f805ab5222e0825a1a153c71fbed93b8c9a80fc80d89|unless-stopped|s6vinetmedia|healthcheck_sha256=74234e98afe7498fb5daf1f36ac2d78acc339464f950703b8c019892f982b90b
bgbye|2d7d7a1250b29f5e66c3068a4077e2d3df801de3f0c1802882aae1e39a84b05e|lasereverythingnetdb-bgbye|sha256:fa4994a5386cd97cba309b273025478722b06a8985dae249bb80c50a170355ce|running|healthy|2026-07-02T16:23:13.15908777Z|makearmy_net|unless-stopped|lasereverythingnetdb|healthcheck_sha256=6e5884b66db6e8cc64ccec2fc861dc2ee21b1ffce0b8555fdffd69811f89eb3a
buildx_buildkit_defaultbuilder0|6b0affe65f5e3589baa0d57169713a1d9ffa5df5c9f6484a8e32bc4070d67ee6|moby/buildkit:buildx-stable-1|sha256:fe0990fb85c4586aaa94e599905b75a2676664f065f29bea67ebcd5b2fe88acb|running|no-healthcheck|2026-06-30T17:45:39.545876028Z|bridge|unless-stopped||healthcheck_sha256=74234e98afe7498fb5daf1f36ac2d78acc339464f950703b8c019892f982b90b
castopod-redis|45094b8a921517979c9a8a519c7ff2fc71a540656f2309ffbd0696cf56bf5dcf|redis:7.2-alpine|sha256:b6636bae9624cba73c69fc9d21318151217a103a1db600b8012db8c460785c26|running|no-healthcheck|2026-07-02T16:21:44.78699982Z|castopod_ma_net|no|makearmyiopodcast|healthcheck_sha256=74234e98afe7498fb5daf1f36ac2d78acc339464f950703b8c019892f982b90b
castopod|b3612901d76d0b2be752762fb1e5d49ca7b521a648ab9b6f332ff7ace61ba54a|castopod/castopod:latest|sha256:d624bd1d45a4b929b9202cae2c4290cdf2624b6bf172fe2115ce20bdb359a428|running|healthy|2026-07-02T16:21:44.790327595Z|backend_net|no|makearmyiopodcast|healthcheck_sha256=a8def15088dacf1eb21b7a57747b2113566689d9876c5d690d7c3269562ec5cc
collabora|bcf6738bab2b22f3db163f88f28608548a748a49e6088842e6e687a968c65371|collabora/code:latest|sha256:bf688dedd8778797a551ef5f768c33993cbecc23b9d68527176a59db5c7726c0|running|no-healthcheck|2026-07-02T16:22:15.786914258Z|collabora_s6_net|always|s6vinetoffice|healthcheck_sha256=74234e98afe7498fb5daf1f36ac2d78acc339464f950703b8c019892f982b90b
continuwuity|a22c7cef0512cefc66441cc99d2b6f4ce36c48e70177c04dfdf88a44e91396ad|forgejo.ellis.link/continuwuation/continuwuity:latest|sha256:f45ecc72598a18e69e16fa7addbb5300b6eba7cd1bf0bf423a8d0b834c8c7abf|running|no-healthcheck|2026-07-02T16:21:42.218988545Z|conduit_net|unless-stopped|makearmyiomatrix|healthcheck_sha256=74234e98afe7498fb5daf1f36ac2d78acc339464f950703b8c019892f982b90b
dcm|1d3291029cb4f3850e43ea93d6bc3a3ceb1d12ecfea27f136b99c3af61e65d75|ghcr.io/ajnart/dcm|sha256:2a6935c5032df59d0986753a05250dacfd66522554471fd54b0d302a67d6de98|running|no-healthcheck|2026-07-02T16:21:22.600579243Z|makearmyiodcm_default|unless-stopped|makearmyiodcm|healthcheck_sha256=74234e98afe7498fb5daf1f36ac2d78acc339464f950703b8c019892f982b90b
ergo|f0d41caf4e9ec55b0bf677d8ba622660e918c30094b643cdf09926df545ca4cb|ghcr.io/ergochat/ergo:stable|sha256:ca8d10822089ef9fd05ba5cc18049b687bc46e2e0cc5901aed4bf92da337a7a0|running|no-healthcheck|2026-07-09T17:20:10.183703547Z|irc_net|on-failure|makearmyioirc|healthcheck_sha256=74234e98afe7498fb5daf1f36ac2d78acc339464f950703b8c019892f982b90b
flaresolverr|3ce787aacca3e92e836526c81c7e6fab2dcb7d810b04fbf521e5deba2fd3039f|ghcr.io/flaresolverr/flaresolverr|sha256:894893ed4d4557764df3e74d27c5bc1b3944e5a33ed410e62ab7c744b348f415|running|healthy|2026-07-02T16:22:04.654391107Z|container:ddb18d46aebae5ce7af0f805ab5222e0825a1a153c71fbed93b8c9a80fc80d89|unless-stopped|s6vinetmedia|healthcheck_sha256=5b79b0ceb45d2b3ea48a3a1ab49a3c8a7ab3d42b98e63a185986126b8f6e5b71
forgejo|1befcad10bf9b56880c9e2b223e2dd6e0c5dd500d1453a83768e974ced54273d|codeberg.org/forgejo/forgejo:11.0.1|sha256:49388d84630e37520e7c5d4971dd94564a7a39f18f66b60d40c32b66f7ff40b9|running|no-healthcheck|2026-07-10T00:57:13.158697179Z|backend_net|unless-stopped|makearmyioforge|healthcheck_sha256=74234e98afe7498fb5daf1f36ac2d78acc339464f950703b8c019892f982b90b
heimdall|c8bab4edf73f1265ab91dd384d8942562827f8ce2185fb65e398c8e923872e13|lscr.io/linuxserver/heimdall:latest|sha256:96a3814546b9465dbee1cce1c9547bed5b6f1a13ca751f239cf88502f396df67|running|no-healthcheck|2026-07-02T16:21:46.899952815Z|heimdall_s6_net|unless-stopped|s6vinet|healthcheck_sha256=74234e98afe7498fb5daf1f36ac2d78acc339464f950703b8c019892f982b90b
immich_machine_learning|2b6046557c314400dec23f1caae69eae07a8e07542db79957f7b7e86d41aaff6|ghcr.io/immich-app/immich-machine-learning:release|sha256:088b410d324842faeeeb69d0d5fef6b3eccee3f6fe3c68a2b1235649a86872c4|running|healthy|2026-07-02T16:22:16.356336193Z|backend_net|always|immich|healthcheck_sha256=06fc5259e91d939c46d4cf740394a5057ea58131e5df6789d7e4f5ebbb6d7a59
immich_postgres|17889bb81cea5af9cf6ac6bafe6eba61aeb8d50cb2c0996c699560182796945e|docker.io/tensorchord/pgvecto-rs:pg14-v0.2.0@sha256:739cdd626151ff1f796dc95a6591b55a714f341c737e27f045019ceabf8e8c52|sha256:3062a7ddd658eee20fcc428853dd34c23c7ad95fb48e3181922ffef11217389a|running|healthy|2026-07-02T16:22:16.362765814Z|immich_s6_net|always|immich|healthcheck_sha256=3b85ca1ca42325d6e6d9501e2adcf04a7a80dcb42159b69d2527d6432473ff32
immich_redis|a2d1a7bc973927e404a2576cb3de755a890f7ded3f3361a8a065eab88a0d481c|docker.io/redis:6.2-alpine@sha256:148bb5411c184abd288d9aaed139c98123eeb8824c5d3fce03cf721db58066d8|sha256:6dd588768b9ba229530de57c108536a8d6b98d53d83f217f59167981fda443ca|running|healthy|2026-07-02T16:22:16.364329237Z|immich_s6_net|always|immich|healthcheck_sha256=bd98ba333892e944c8245cd358b2946469adf44d3d8ec7cabb936197e4362807
immich_server|2115244bab14fec49130c4a3949dfc2773871fc54928f88be963388e5e04d790|ghcr.io/immich-app/immich-server:release|sha256:de80bec4fc193605671b0f9600fe6b20f598fd2cb503ffe1a6e67f7cfd0e5233|running|healthy|2026-07-02T16:22:16.558556945Z|backend_net|always|immich|healthcheck_sha256=b7dce503cff869bbffb63034400837e1ad79981eed7722359480a50dbc96436f
jellyfin|ba3ef59b346479f17f4c2b9fd33828db2638801e408fca115e5289b371f89eaf|jellyfin/jellyfin:latest|sha256:d57d4a0c18b3e51b913bd2f8f0f122eb7c7150ea37bb0e352df9cb329de11d24|running|healthy|2026-07-02T16:22:17.374948578Z|jellyfin_s6_net|unless-stopped|s6vinetwatch|healthcheck_sha256=a22856b3a5dfad87ecc898383d5b49daa6b4b98bca2797ea36cb422e824de47c
jellyseerr|c00ff6cc7213669b85bc8e28a51ffc16779d2489c7378f3911735b8d983dcd05|fallenbagel/jellyseerr|sha256:2742757d9c41bcb4acb76c86c4ce23a8c54d5dbe93a698c815a9a34bed0b18d0|running|no-healthcheck|2026-07-02T16:22:04.637037538Z|container:ddb18d46aebae5ce7af0f805ab5222e0825a1a153c71fbed93b8c9a80fc80d89|unless-stopped|s6vinetmedia|healthcheck_sha256=74234e98afe7498fb5daf1f36ac2d78acc339464f950703b8c019892f982b90b
kavita|578e4aa1ceeb4eb61ce094ecc862cdce7d68538a2c3e7b17cb29c3f4798597d4|jvmilazz0/kavita:latest|sha256:12ac333d6fde07c087a135dd23fa5b930a96e2a3fde9cfbb281214f040b4cbba|running|healthy|2026-07-02T16:22:04.630545121Z|container:ddb18d46aebae5ce7af0f805ab5222e0825a1a153c71fbed93b8c9a80fc80d89|unless-stopped|s6vinetmedia|healthcheck_sha256=256947cdccf855523b654955b26538932c2ee76e01f507ef885f1e885437ddb4
lasereverything-manager-bus-core|791f2ef47fc1c798318b4136773672dc0f8ff08cd104f075f2f317ca0caf1817|ghcr.io/true-good-craft/tgc-bus-core:latest|sha256:e053cb452820daba308e86f456ba7d1e2b0306f058eae2c91ee7122a8634f4bb|running|healthy|2026-07-02T16:21:21.581810214Z|lasereverythingnetmanager_default|unless-stopped|lasereverythingnetmanager|healthcheck_sha256=5f70654d32c1e7e9060a6069ae4e3e8d1b94c196cd73a66ae40c93098344ec59
lasereverythingnettv-radio-1|297e17de84c4d3c31f9cdeda9dcbefe185e6ec6c48c44c7fdae9f3e3f5ce982c|jrottenberg/ffmpeg:latest|sha256:1cf434af29091eba2d80108e28864540dc98bd3e4e5cda2b497e758d60bacba1|running|no-healthcheck|2026-06-30T17:48:55.163034213Z|lasereverythingnettv_default|unless-stopped|lasereverythingnettv|healthcheck_sha256=74234e98afe7498fb5daf1f36ac2d78acc339464f950703b8c019892f982b90b
lasereverythingnettv-tv-1|776624328baf74b4196474c0962d2e01b1caa21e8bc3a2f6c77aece135faf30e|jrottenberg/ffmpeg:latest|sha256:1cf434af29091eba2d80108e28864540dc98bd3e4e5cda2b497e758d60bacba1|running|no-healthcheck|2026-06-30T17:48:55.161961872Z|lasereverythingnettv_default|unless-stopped|lasereverythingnettv|healthcheck_sha256=74234e98afe7498fb5daf1f36ac2d78acc339464f950703b8c019892f982b90b
le-directus-source|6adbd503febfd8a6236fc7c941df7bfc748e76dcd510c11e69a3ff02776ff344|sha256:72311f2ba18f5530a667b9a806bb1720a8c9d95de6b20dd085a808901eb614b8|sha256:72311f2ba18f5530a667b9a806bb1720a8c9d95de6b20dd085a808901eb614b8|running|no-healthcheck|2026-07-10T23:15:59.628507071Z|bridge|unless-stopped||healthcheck_sha256=74234e98afe7498fb5daf1f36ac2d78acc339464f950703b8c019892f982b90b
le-payload-pg|2ee8f491397b5cbab595121f0e5e57fa5778329090d27a80b002bdd83a5ee8f2|sha256:639c86b6cacfdf788c075ffb5879286aa0e905965a4832ba6c76ccb0bca9417b|sha256:639c86b6cacfdf788c075ffb5879286aa0e905965a4832ba6c76ccb0bca9417b|running|no-healthcheck|2026-07-10T23:20:42.20954498Z|bridge|unless-stopped||healthcheck_sha256=74234e98afe7498fb5daf1f36ac2d78acc339464f950703b8c019892f982b90b
lemmy-pictrs|22597c5b8ac30d2d715bd538ee15e27e07d8677c9a191c2af741c57b1adbe08d|asonix/pictrs:0.5.17-pre.9|sha256:9a5411f20149156b2bbbcc69b63918e9259d8d4653244eae7482e71177e1b15a|running|no-healthcheck|2026-07-02T16:21:41.143484739Z|lemmy_net|unless-stopped|makearmyiolemmy|healthcheck_sha256=74234e98afe7498fb5daf1f36ac2d78acc339464f950703b8c019892f982b90b
lemmy-proxy|f267f47868f6bd4c0f2b3594c1b23909862fbe853491cd514e9f8205be3499d2|nginx:1-alpine|sha256:ea51152ef8c480b999cee0271a288c698704b18483276119b1253e576ef3232f|running|no-healthcheck|2026-07-02T16:21:41.4297012Z|lemmy_net|unless-stopped|makearmyiolemmy|healthcheck_sha256=74234e98afe7498fb5daf1f36ac2d78acc339464f950703b8c019892f982b90b
lemmy-ui|e53db215d6385a424365263fbce8edd9d08f1ea0927bc0aa136af4694ba22d89|dessalines/lemmy-ui:0.19.12|sha256:0a85b3192f29a5b14d41c265d9d5cab60bd281b4a5b5db8f3a85d5d9bf01aaaa|running|healthy|2026-07-02T16:21:41.334389805Z|lemmy_net|unless-stopped|makearmyiolemmy|healthcheck_sha256=fe44578c9a0ef5c3150b372caa763f18afad8938c28752af3570a87d8deb88e4
lemmy|1f032d67308df68711b5d432398ff31094da65dbdddbb966e60d745390fd0a0d|dessalines/lemmy:0.19.12|sha256:68c00173ade225585ea7d54ed2688f8f23d7d2886ae3f5b4eefd70dbc05b044a|running|no-healthcheck|2026-07-02T16:21:41.230573992Z|backend_net|unless-stopped|makearmyiolemmy|healthcheck_sha256=74234e98afe7498fb5daf1f36ac2d78acc339464f950703b8c019892f982b90b
mailu-admin|ed54ee705edfd3867b98548c7a5054ba8e58eb8fc3f7afbf3e0d5378fe508f4e|ghcr.io/mailu/admin:2024.06|sha256:e4319dc05cd8ee8204ebb0343685d52a9c645f192f92a9ba24e05a702a722894|running|healthy|2026-07-10T15:30:56.858313278Z|mailu_net|always|arrmailnetmail|healthcheck_sha256=65c193d7ce37216310a9ad7324433501d4532a0e95241ba91a6643556dcb2b8d
mailu-antispam|0f2bc2ca4ee1971e3dfdd9534ffa5ffa6bb5b1530f8c1e8c595a7c1303d70cba|ghcr.io/mailu/rspamd:2024.06|sha256:a8619d7f452f04d806b1f334e3e28e123c5f568080e168051fe98c7b3637925d|running|healthy|2026-07-10T15:30:57.245953555Z|arrmailnetmail_clamav|always|arrmailnetmail|healthcheck_sha256=7ffc0eff154ba7ec4712f405258f56347f428b7f2ec716554a9f6c1fed3b896d
mailu-antivirus|22b05b37de3374f615e15e79cee3632e3f2398a2c50a5183a3baa94add519b62|clamav/clamav-debian:1.4|sha256:f8a1f4389e5cbfb43ffc839d751bf746c6c27f5de780ba1fcde15d596f94287b|running|healthy|2026-07-10T15:30:56.621336608Z|arrmailnetmail_clamav|always|arrmailnetmail|healthcheck_sha256=713e2ecbe297d1e71fa7f1819859d65ad738041705100f5c4ae73f4ae551fb60
mailu-fetchmail|a47a586ae5cdb3d810932c4dfe06ec242ec02cc3999f7ecec2fac1779cf14ffc|ghcr.io/mailu/fetchmail:2024.06|sha256:eccbdf53fb66dc34a49bde349f53eb9d1bba60c98a1be5d9eabe68a726f13e6a|running|healthy|2026-07-10T15:30:57.460051545Z|mailu_net|always|arrmailnetmail|healthcheck_sha256=001e1e50755b8a7ad162dfd92611a0d0944aa07d8ca6dc19ebffb0c60494878e
mailu-front|a82753aefc6c8243c7c71caa0ef289a1a2e83c3fb1f9e93e779e56267353d11c|ghcr.io/mailu/nginx:2024.06|sha256:30a4f996f255fe498ed847b9a3759efd45fc5d8bd5c4dc121896e83615e60b0d|running|healthy|2026-07-10T15:30:56.726639815Z|mailu_net|always|arrmailnetmail|healthcheck_sha256=c379c13a800f5417c0692896be411b09f7fe5a95d530f676abfd7d2dae1ea24c
mailu-imap|549c48f83f429fd9b1e52f7752012b1250107dc511c1b7ee94ac2a49b521a726|ghcr.io/mailu/dovecot:2024.06|sha256:27aceac0272f97361a5a5b1d5abea7099e10f409e3d28a6096f9111fe90bf347|running|healthy|2026-07-10T15:30:57.247440245Z|mailu_net|always|arrmailnetmail|healthcheck_sha256=9462f6ccccab8ea58f34afb7cfaae178b2d36f27a29e903b89ea4a7a1ed73cd6
mailu-oletools|841c57f99cfeec974e757666484b8c1a37ca0f2696d719d49317294253edb33b|ghcr.io/mailu/oletools:2024.06|sha256:76fb07165f54411c1136a449ba2963fe11618f0cf4629fdc13eadd628d3528c9|running|healthy|2026-07-10T15:30:56.729115113Z|arrmailnetmail_oletools|always|arrmailnetmail|healthcheck_sha256=b1b33aade32e78a9484d43059f9f651eef8a2e8b8910893a4436f15a078abd08
mailu-redis|4f1b06b40d4ebe43ee8391c91d0c02645a7f23dc91229123a0a25e9098eb567d|redis:alpine|sha256:55563f45704d59e891b6aa643014bb6b562abf21909a44b3b297502415b68e29|running|no-healthcheck|2026-07-10T15:30:56.720208042Z|mailu_net|always|arrmailnetmail|healthcheck_sha256=74234e98afe7498fb5daf1f36ac2d78acc339464f950703b8c019892f982b90b
mailu-resolver|96d3aaea44a0a8779c2a11fd7cb341bbc9aa23ad879381c5f7a247a0554cc444|ghcr.io/mailu/unbound:2024.06|sha256:d30593c8bf42bfd1c46bd1ac7ee90862b0cfa7e96fd10da1dacc2c69cafb443d|running|healthy|2026-07-10T15:30:56.617962677Z|mailu_net|always|arrmailnetmail|healthcheck_sha256=5b9b365275d40b354506f2b02070d7785700a374ee09de8d7ee8527bbbf1b16f
mailu-smtp|22e3c459d26b808ffca118df679aae2c9cc511de3fcaba4a9847770df6f24de5|ghcr.io/mailu/postfix:2024.06|sha256:0bed674f22e609e0b2f6780865097a41ed6ca5307db4bcc0794a35e2e7e976c9|running|healthy|2026-07-10T15:30:57.241512918Z|mailu_net|always|arrmailnetmail|healthcheck_sha256=9b234890e871375cec386d4edacf17bcbd8a5504fab8b1177d956c56622a08aa
mailu-tika|60ba021f422056617055244f608c881f5ce282c2d1590e52d8d2719a44b1eb98|apache/tika:2.9.2.1-full|sha256:e646191162f8cb7aef0b512d54c028f62bd86e0e5f53b314ab82cfac7ef292d7|running|healthy|2026-07-10T15:30:56.723391978Z|arrmailnetmail_tika|always|arrmailnetmail|healthcheck_sha256=454cfb3387dd964dad59d868a522ba8ebbb1181df78bac6e750133eb5770f96d
mailu-webdav|d5d73d88a2764eaded36de6cbc7fab3fd21956df393d4cf9fecc58217a80e3b6|ghcr.io/mailu/radicale:2024.06|sha256:890973bd7de583a7c8cb2c2bbc939249e007418066b69f59cd0c6903b7f35dfc|running|healthy|2026-07-10T15:30:56.620268969Z|arrmailnetmail_radicale|always|arrmailnetmail|healthcheck_sha256=0eaa30f40ef1bb32694b25d91598460713955379cbe30e51af90204e6c29aeff
makearmy-app|3c10dda3815a2c0b0c494fb99a198a331b85c61f0b27ed1537bd2743355fd363|lasereverythingnetdb-makearmy-app|sha256:6c8190861686d9bec6f50d705c681d657fbc979c2a8743cf1614d01db0b5d1c6|running|no-healthcheck|2026-07-10T16:30:29.09880902Z|makearmy_net|unless-stopped|lasereverythingnetdb|healthcheck_sha256=74234e98afe7498fb5daf1f36ac2d78acc339464f950703b8c019892f982b90b
makearmyiomeet-jibri-1|d9799783148b365cb04f3eeb4f52217cc32e377b47fb69919d6ff18f05430d1d|jitsi/jibri:stable|sha256:dfe4d14ee76e0b054c226b27976d43b0c4ed6fa9774b8acd06b0c4f391dbbb95|running|no-healthcheck|2026-07-02T16:21:43.11777777Z|meet_net|unless-stopped|makearmyiomeet|healthcheck_sha256=74234e98afe7498fb5daf1f36ac2d78acc339464f950703b8c019892f982b90b
makearmyiomeet-jicofo-1|9f10baac0b699ef704ffbceab5d182a769f45f964a08fff13984b67f421370ac|jitsi/jicofo:stable|sha256:80619f3a1c08c4bb6ccc44af0a0829a1bc817904a5819da2762bca0ea7d840fe|running|no-healthcheck|2026-07-02T16:21:42.695779854Z|meet_net|unless-stopped|makearmyiomeet|healthcheck_sha256=74234e98afe7498fb5daf1f36ac2d78acc339464f950703b8c019892f982b90b
makearmyiomeet-jvb-1|dcb946a8243ca5b8b3307c9e0e47474e24bd8a0b0f738e5558ef1e084cd0a26d|jitsi/jvb:stable|sha256:5a7999e458cc16a79a7b1082de760d5240d938ea2fd1c74dfc1cb7c32267a2d2|running|no-healthcheck|2026-07-02T16:21:42.696967273Z|meet_net|unless-stopped|makearmyiomeet|healthcheck_sha256=74234e98afe7498fb5daf1f36ac2d78acc339464f950703b8c019892f982b90b
makearmyiomeet-prosody-1|7e55738c8ef8fa72966f30ee08e08f78ef9d2ce0778f102810e7a1e9a65ee427|jitsi/prosody:stable|sha256:4ecc8a3ed20b56d628e0980e1bd279a5201a1d749a0d7529cc320a1e57dd13c0|running|no-healthcheck|2026-07-02T16:21:42.57107622Z|meet_net|unless-stopped|makearmyiomeet|healthcheck_sha256=74234e98afe7498fb5daf1f36ac2d78acc339464f950703b8c019892f982b90b
makearmyiomeet-web-1|9fcb631e7509b43c6cb8589ba5b9b86a33355fb21f6b0aded53fe249c317ac8a|jitsi/web:stable|sha256:dc69cbf912d43bbd2e6bff921c32f968d0fd20d299f4a6ace213411b3ace77d7|running|no-healthcheck|2026-07-07T23:05:03.005510996Z|meet_net|unless-stopped|makearmyiomeet|healthcheck_sha256=74234e98afe7498fb5daf1f36ac2d78acc339464f950703b8c019892f982b90b
mastodon-es|8173cfe45df20a1f250fdb1deeaf7b195f9b10048827c3c7f0f6bed3065d5a8c|docker.elastic.co/elasticsearch/elasticsearch:7.10.2|sha256:0b58e1cea50068776b05911440c0eb2865ef64f46704a74ebcf0f8f9d9edff08|running|healthy|2026-07-02T16:21:41.658284982Z|mastodon_net|always|makearmyiomastodon|healthcheck_sha256=43ed0ec1b037c1138b428561ed2f275ae40dbf871887fff30170841101c96871
mastodon-redis|42a18b0302bab7268fb6e4b37fdb00e7e33e8ab873d29a51935960dfa4bd2c9e|redis:7-alpine|sha256:487efc0616382465781b8fdc3d6d1db449e6fd80ae23bf48432a2da6b6929908|running|healthy|2026-07-02T16:21:41.657158258Z|mastodon_net|always|makearmyiomastodon|healthcheck_sha256=6971523e64ad7ed1de29b647f359cf830fb227fe65b6e7d687b694e79b4cd00a
mastodon-sidekiq|8f854b45b737bc4e36e74ef5f6698decbf36d3d77b837fa30b736d3ec22ede74|ghcr.io/mastodon/mastodon:v4.3.7|sha256:9f42cca562554c9a4b3c39fecf3590aaf48cd4f566054f94135bc7e417b9e609|running|healthy|2026-07-02T16:21:41.771788456Z|backend_net|always|makearmyiomastodon|healthcheck_sha256=63b22b698c07de250a134ce31a15f3b269ad63c4f8fa4896bb920941b5a20e56
mastodon-streaming|58e667e71825fdf2674c125bf60ed8a1edf075b3dd01a9aeaa69e79c07edd1cf|ghcr.io/mastodon/mastodon-streaming:v4.3.7|sha256:ce444902e7c4152b82ad2526fbd32d0eaa47cc9d6b2a7e4198cd2395579e63cf|running|healthy|2026-07-02T16:21:41.770290748Z|backend_net|always|makearmyiomastodon|healthcheck_sha256=d5da8b454dac278280b9e3931e305a9094a1e446721f9e01e89f3de89772a681
mastodon-web|355cfac0741d25cee7c18729d4ec0f74355a20edca54ca608102be82bfc90a05|ghcr.io/mastodon/mastodon:v4.3.7|sha256:9f42cca562554c9a4b3c39fecf3590aaf48cd4f566054f94135bc7e417b9e609|running|no-healthcheck|2026-07-02T16:21:41.790863717Z|backend_net|always|makearmyiomastodon|healthcheck_sha256=74234e98afe7498fb5daf1f36ac2d78acc339464f950703b8c019892f982b90b
misskey-redis|ee4b788482e8fdaf635f5bb4e66ccf757f8b8e96d85175efc56e53f09d5550e3|redis:7-alpine|sha256:487efc0616382465781b8fdc3d6d1db449e6fd80ae23bf48432a2da6b6929908|running|healthy|2026-07-02T16:21:22.84032892Z|misskey_net|unless-stopped|makearmyiodeck|healthcheck_sha256=6a1d3a9edb36c3a4ce5fcbd09886f5e885dcfb752bcece4036250d3ded7a95b0
misskey|fafd13e69d38892a3e1cdb33ebe709b2de1a13807a7db037035bad815d2c4e59|misskey/misskey:latest|sha256:368867af5f043346679e8721eb4560f2633cfe1a889fcf0422b6e845b7fae5b6|running|healthy|2026-07-02T16:21:28.456308969Z|backend_net|unless-stopped|makearmyiodeck|healthcheck_sha256=5ccbecc9fc9854d3822bad70f7615ca2b2189f2ae0376a276e1a1cd785d27328
mysql_shared|37e9091b4f9db9c4434b664903283248fe9723a9717ba3a407141d625c6ab272|mariadb:10.11|sha256:72311f2ba18f5530a667b9a806bb1720a8c9d95de6b20dd085a808901eb614b8|running|no-healthcheck|2026-07-02T16:21:19.526467097Z|backend_net|unless-stopped|database|healthcheck_sha256=74234e98afe7498fb5daf1f36ac2d78acc339464f950703b8c019892f982b90b
navidrome|0d66d26de7b4dc30c3f2629d8db37a68b45dec6b69805aac1d48682999dc8bd4|deluan/navidrome:latest|sha256:6567e3810d544da3bb067f50aba7b05b3b029acacd7b17654f2310eee21756c8|running|no-healthcheck|2026-07-02T16:22:15.324814438Z|backend_net|unless-stopped|s6vinetmusic|healthcheck_sha256=74234e98afe7498fb5daf1f36ac2d78acc339464f950703b8c019892f982b90b
nextcloud-ma-app|da4c05c513a3fd41b3816f4e3b267489bc795e07af0411d69e54a8fd4c303341|nextcloud:fpm|sha256:192578f11d97117460f29c0c42e4e3676200f6e0da97f263f34d59dfbfd9b98b|running|no-healthcheck|2026-07-02T16:21:22.194816111Z|arrmail_backend|always|makearmyiocloud|healthcheck_sha256=74234e98afe7498fb5daf1f36ac2d78acc339464f950703b8c019892f982b90b
nextcloud-ma-redis|8a22ef42d843c6af32706995bdac253c66b2dbdfc05ad63d154e4f6130149dc4|redis:alpine|sha256:55563f45704d59e891b6aa643014bb6b562abf21909a44b3b297502415b68e29|running|no-healthcheck|2026-07-02T16:21:22.079098096Z|nextcloud_ma_net|always|makearmyiocloud|healthcheck_sha256=74234e98afe7498fb5daf1f36ac2d78acc339464f950703b8c019892f982b90b
nextcloud-ma-web|47788388748bf09d5a90f9e04078d1f5387a1e55e8dab562d1356568684851e6|nginx:alpine|sha256:ea51152ef8c480b999cee0271a288c698704b18483276119b1253e576ef3232f|running|no-healthcheck|2026-07-02T16:21:22.386376738Z|nextcloud_ma_net|always|makearmyiocloud|healthcheck_sha256=74234e98afe7498fb5daf1f36ac2d78acc339464f950703b8c019892f982b90b
nzbhydra2|72577626a7b78f5e421a3aa2170ca0779d1ae32833b8ab06af5e15f6c21b54b7|lscr.io/linuxserver/nzbhydra2|sha256:de294ca9aa92795dca1f3e18c5bd1f23a6f88f580ed35537c91910e898d319b9|running|no-healthcheck|2026-07-02T16:22:04.638532863Z|container:ddb18d46aebae5ce7af0f805ab5222e0825a1a153c71fbed93b8c9a80fc80d89|unless-stopped|s6vinetmedia|healthcheck_sha256=74234e98afe7498fb5daf1f36ac2d78acc339464f950703b8c019892f982b90b
owncast|f49b181fbd7098f6794f49dedb85d7f0f0b1b96302571d328d5c53c6c53477ca|owncast/owncast:latest|sha256:e6eabb9b993941043e9a6feb8f3d94d54854afc1d268310cfedc4a4a45f9b31b|running|no-healthcheck|2026-07-02T16:21:21.767199243Z|makearmyiocast_default|unless-stopped|makearmyiocast|healthcheck_sha256=74234e98afe7498fb5daf1f36ac2d78acc339464f950703b8c019892f982b90b
peertube-redis|af5cd4f35df32636f42dbe64fb8d6f76ddfa4f0c0c805a33e8a5ab80b14de0f2|redis:7-alpine|sha256:487efc0616382465781b8fdc3d6d1db449e6fd80ae23bf48432a2da6b6929908|running|no-healthcheck|2026-07-02T16:21:45.580356479Z|makearmyiowatch_peertube_net|unless-stopped|makearmyiowatch|healthcheck_sha256=74234e98afe7498fb5daf1f36ac2d78acc339464f950703b8c019892f982b90b
peertube|f1f9b4a119fe5b3b4595ae065743c22340bd49d506c8e1dec91396177d02edb4|chocobozzz/peertube:production-bookworm|sha256:95cafee12c7ba26c7427369020a5fe47f0ca4f2c0a9125038a678abda7a69c9b|running|no-healthcheck|2026-07-02T16:21:45.796042043Z|backend_net|unless-stopped|makearmyiowatch|healthcheck_sha256=74234e98afe7498fb5daf1f36ac2d78acc339464f950703b8c019892f982b90b
picsur-redis|b209f19682835276e80e17d0ac3f1e036d6b1fda8756dcac68fc122d0c4fa3f8|redis:7-alpine|sha256:487efc0616382465781b8fdc3d6d1db449e6fd80ae23bf48432a2da6b6929908|running|healthy|2026-07-02T16:21:29.04863531Z|picsur_net|unless-stopped|makearmyioimages|healthcheck_sha256=147968879ed0db0afaec1547f804e197ae69ccc63932fd3abbe258ab467010d3
picsur|64562af622743c5e95fed7cd0e400fcb754e67d524f3692308ae11420dc0e0e6|ghcr.io/caramelfur/picsur:latest|sha256:1807c0cf959b86dddbf3a92effb9d8cde12b3412c0a399bfd28720fdc37238c4|running|healthy|2026-07-02T16:21:39.647252782Z|backend_net|unless-stopped|makearmyioimages|healthcheck_sha256=ec000ecdddc3d5596f4bc9628961c417aa7b8c1a3b5d2df4c98640ad362f5dd5
pinchflat|85fe3664962fcfa588aa37133ff74181f16806d98ed22b9a3d921d266698389c|keglin/pinchflat:latest|sha256:753a348c4189cab415077a0ba39e429f3a2d827ca9944482fba39e89d7670359|running|healthy|2026-07-02T16:22:17.898598212Z|s6vinetyt_default|unless-stopped|s6vinetyt|healthcheck_sha256=135a29148f28914de8f172b817ecb24ba481550c1b7266a8db237818fd6b8455
pixelfed-ma-redis|2f5e7667382929d159967f793544f3d797d1bc081b00d8e2e8e569c12f34efc6|redis:6|sha256:2acfd509b0322ec1849e7e8cae7acfed5abfa449aef850d960669fb93e31a0da|running|no-healthcheck|2026-07-02T16:21:43.915226725Z|pixelfed_ma_net|unless-stopped|makearmyiopixels|healthcheck_sha256=74234e98afe7498fb5daf1f36ac2d78acc339464f950703b8c019892f982b90b
pixelfed-ma-web|4bf3656aa29bb29bc731b8a31e22f0b3c7e26b04439d400b2f7b92a43d131c75|elestio/pixelfed:latest|sha256:96f2928fac9954a5926816c08b0828f0aac91101ed44f35e45870af0b07ca4b3|running|no-healthcheck|2026-07-02T16:21:44.127434453Z|backend_net|unless-stopped|makearmyiopixels|healthcheck_sha256=74234e98afe7498fb5daf1f36ac2d78acc339464f950703b8c019892f982b90b
pixelfed-ma-worker|4533b9ed4e4d02ee916e99ef1d042fb11f6cb140168748fe15a61112a2f27794|elestio/pixelfed:latest|sha256:96f2928fac9954a5926816c08b0828f0aac91101ed44f35e45870af0b07ca4b3|running|no-healthcheck|2026-07-02T16:21:44.134015364Z|backend_net|unless-stopped|makearmyiopixels|healthcheck_sha256=74234e98afe7498fb5daf1f36ac2d78acc339464f950703b8c019892f982b90b
postgres_shared|16a46598e773446ef94853d20ca2aa4f636599c4fabb5dc945038891e7327f75|tensorchord/pgvecto-rs:pg16-v0.3.0|sha256:edaefebbe512002c6bc57af37cfffb53d70ede0c4f213dd9344a0cd42276cee5|running|no-healthcheck|2026-07-02T16:21:19.527512266Z|backend_net|unless-stopped|database|healthcheck_sha256=74234e98afe7498fb5daf1f36ac2d78acc339464f950703b8c019892f982b90b
privatebin|908728b26d94527c44fa334bd0e506b478d6ab143efa292ce7444ebc2d15e8c8|privatebin/nginx-fpm-alpine|sha256:1cd5a4d4a4d712cd3cc5b3997c47211279e2180a578ab2114285a5a8ad38117a|running|no-healthcheck|2026-07-02T16:21:43.509343441Z|privatebin_rw_net|unless-stopped|makearmyiopaste|healthcheck_sha256=74234e98afe7498fb5daf1f36ac2d78acc339464f950703b8c019892f982b90b
prowlarr|89d2cb4ae3df4b62d58914957f583650d9b21f90830f120d09fc70c7e901c681|linuxserver/prowlarr|sha256:e21be23a845221afc1f4a650b864c294758cde345ba7c865f01e2686274dedb7|running|healthy|2026-07-02T16:22:04.640131595Z|container:ddb18d46aebae5ce7af0f805ab5222e0825a1a153c71fbed93b8c9a80fc80d89|unless-stopped|s6vinetmedia|healthcheck_sha256=13f99794bea67548cc642314145eec7125eb7f719dada9768aba07a1a476b795
qbittorrent|af4d51e98c4a6293183474353c87e43e38c26e675fb74048ddc9f9064a62c0ae|lscr.io/linuxserver/qbittorrent:latest|sha256:a5d5cf51c98df7347d8e9ed7bf2c83c4b7f9f0e9a3981410e8499927541cb350|running|no-healthcheck|2026-07-02T16:22:04.635570271Z|container:ddb18d46aebae5ce7af0f805ab5222e0825a1a153c71fbed93b8c9a80fc80d89|unless-stopped|s6vinetmedia|healthcheck_sha256=74234e98afe7498fb5daf1f36ac2d78acc339464f950703b8c019892f982b90b
radarr|161e0cab15f684eff7237b0237483cf2d25c628f55c9a78b07d917054ba0d4da|linuxserver/radarr|sha256:ecf70f15bca59f11387be96af3d2eea3a733d8f16946e763923185d4d297fa08|running|healthy|2026-07-02T16:22:04.631684293Z|container:ddb18d46aebae5ce7af0f805ab5222e0825a1a153c71fbed93b8c9a80fc80d89|unless-stopped|s6vinetmedia|healthcheck_sha256=f71b83e7755a8b028db89f814a6a838ce7119af31ce52ce7e8ba8976096250c1
recyclarr|55cd226a6d1cc7b0375ab72aa7c23a17ed1ecbb1ff7e5790701589a777c6d0cd|ghcr.io/recyclarr/recyclarr|sha256:c57a7e2fe3090e3f43a0dd6686cde6c01db71c8d4a85fcb3b789d0ac473d874c|running|no-healthcheck|2026-07-02T16:22:05.297908155Z|container:ddb18d46aebae5ce7af0f805ab5222e0825a1a153c71fbed93b8c9a80fc80d89|unless-stopped|s6vinetmedia|healthcheck_sha256=74234e98afe7498fb5daf1f36ac2d78acc339464f950703b8c019892f982b90b
romm-db|32e6a3a86bd8a241fba5a3ee4bd81f8e40d5d00988b6f7b4382d33af10a301fe|mariadb:latest|sha256:ca20b0713cc87f0e9a75d154f677e3f9469e1281f21dd68dc551bf3d93467e27|running|healthy|2026-07-02T16:21:47.839091367Z|s6vinetgames_default|unless-stopped|s6vinetgames|healthcheck_sha256=d5f5eabd7fcdf68fb96e631355d683a153faa27d31ac2c96ae5f4263929c436e
romm|52eadbc4e6fedce3487bc0ccc9b5f1e0fe631349d3246ce95430dab75d10ae31|rommapp/romm:latest|sha256:0ec219d3cf24a9ee76f36c318ec03fca842d474b9ba47a6484e40b62b11983dc|running|no-healthcheck|2026-07-02T16:21:58.569925827Z|s6vinetgames_default|unless-stopped|s6vinetgames|healthcheck_sha256=74234e98afe7498fb5daf1f36ac2d78acc339464f950703b8c019892f982b90b
sabnzbd|23e190c5e003059a5b331976ad6bc5773a7089c4c52b967933332d705e8be4cd|lscr.io/linuxserver/sabnzbd|sha256:8a22dade7777d4c9c29922881dd849ffe8059be3b7b2a97fc137a745057f9894|running|no-healthcheck|2026-07-02T16:22:04.634220659Z|container:ddb18d46aebae5ce7af0f805ab5222e0825a1a153c71fbed93b8c9a80fc80d89|unless-stopped|s6vinetmedia|healthcheck_sha256=74234e98afe7498fb5daf1f36ac2d78acc339464f950703b8c019892f982b90b
slskd-portwatch|5be4dca461964ba4a401c0c49f69bf4147dfe72e3c318414a768e66684c49235|alpine:3.20|sha256:bf8527eb54c3680e728d5b4b383a8ba730d72dae7236fbc8dff97ed6b224a731|running|no-healthcheck|2026-07-02T16:22:14.634814016Z|s6vinetmedia_media_s6_net|unless-stopped|s6vinetmedia|healthcheck_sha256=74234e98afe7498fb5daf1f36ac2d78acc339464f950703b8c019892f982b90b
slskd|50aebf40411108683ec8fbd2bb81f11a9275894da0bf3b80e32c492ef180c1ef|slskd/slskd:latest|sha256:4037f8009b7a98e3ef10b0b590717895c09779aeed060e093fc3ef2f8b027cf2|running|healthy|2026-07-08T12:00:29.038610186Z|container:f73ac36f101be4afadf1933ffa15f86bb05642d50b6c6859c904aa2a743a6c8b|unless-stopped|s6vinetmedia|healthcheck_sha256=2e42bc8cb3985bfbe1ec2460cd8d9a2fa7b2fd9ebc5e88bc824f8b95e39d6dca
snappymail|79ea0d668d4289c270a148183c3c6465b9e70521953bcadef9de7cca49c20f6a|djmaze/snappymail:latest|sha256:741d1bdf62b2cd4f3ff8c1d58a86bec7ba1aa644fbce45ea275d6972f89ac2bf|running|no-healthcheck|2026-07-10T01:56:51.598114125Z|snappy_net|unless-stopped|arrmailnet|healthcheck_sha256=74234e98afe7498fb5daf1f36ac2d78acc339464f950703b8c019892f982b90b
sonarr|fbd5ba72eaeccc4881818317d6fc81a285fa2a1161989675f53a666ce8c11002|linuxserver/sonarr|sha256:66f3b9a7c27e21a06e3c1a5f8f17b2b00e917291f0aaf07cece29f9fd9a26e4f|running|unhealthy|2026-07-02T16:22:04.632855946Z|container:ddb18d46aebae5ce7af0f805ab5222e0825a1a153c71fbed93b8c9a80fc80d89|unless-stopped|s6vinetmedia|healthcheck_sha256=3b816cea3c7006fde5b6197792c65249d978e96c07caf3cc61136b553107433e
tdarr|ba0f5cf378fd25e9a6b95cd6b53ea377a4cb86288fe131d7379e5e7e7a24b8fb|ghcr.io/haveagitgat/tdarr:latest|sha256:6805431096bd3fa6e2aa1005dc1f3834545b48f6a03f09243a653e2005a3a808|running|no-healthcheck|2026-07-02T16:21:59.102117444Z|container:ddb18d46aebae5ce7af0f805ab5222e0825a1a153c71fbed93b8c9a80fc80d89|unless-stopped|s6vinetmedia|healthcheck_sha256=74234e98afe7498fb5daf1f36ac2d78acc339464f950703b8c019892f982b90b
vaultwarden|6633442e948d174acda740c2a26ba13782f1ac57f24839e0ba51791d9fc3b51d|vaultwarden/server:latest|sha256:3e3ce0360c32d2dcc2bbe138f7716014dc3eee45f235e44603e4761e46601007|running|healthy|2026-07-02T16:21:21.085620901Z|vault_net|unless-stopped|arrmailnetpass|healthcheck_sha256=c0ba6b061e69edd02095fa8c73f0065e6df9440345b0b0f53d5dd24e341cc665
vdo_wss|f40b63fbbd9d80f42dd8477226aa734c88db0009d04d493701f7507de00c2382|node:20-alpine|sha256:11cedc39e663e7c5d5cb9cc77a461a0d2adc25537b94e6831a6108f09cb2001b|running|no-healthcheck|2026-06-30T17:55:34.686303735Z|makearmyiovdo_default|unless-stopped|makearmyiovdo|healthcheck_sha256=74234e98afe7498fb5daf1f36ac2d78acc339464f950703b8c019892f982b90b
vpn-slskd|f73ac36f101be4afadf1933ffa15f86bb05642d50b6c6859c904aa2a743a6c8b|qmcgaw/gluetun|sha256:5694e33296a1d44a563e83e51113970b230acf2878004f01099ad4a4b83bc762|running|healthy|2026-07-02T16:21:58.912570969Z|s6vinetmedia_media_s6_net|unless-stopped|s6vinetmedia|healthcheck_sha256=8a73e8de0ca0b93f3e1b75f81d2ffe1c320f5ede18b34ec15db87f285f778104
vpn|ddb18d46aebae5ce7af0f805ab5222e0825a1a153c71fbed93b8c9a80fc80d89|qmcgaw/gluetun|sha256:5694e33296a1d44a563e83e51113970b230acf2878004f01099ad4a4b83bc762|running|healthy|2026-07-02T16:21:58.9115723Z|s6vinetmedia_media_s6_net|unless-stopped|s6vinetmedia|healthcheck_sha256=740a01b114720db4fbb6e078898c810bd1ff19f9227cc3a1bd01926f222aea8b
yacht|d2a07818987aff223c090be88530007784385b3352e5f53aa10ec881a305464b|ghcr.io/selfhostedpro/yacht:latest|sha256:d79060100eb7707aae957b78a4406dfb5b0f83d83543f3e132d8bb24da8abc9c|running|no-healthcheck|2026-07-02T16:21:47.517372813Z|yacht_s6_net|unless-stopped|s6vinetdocker|healthcheck_sha256=74234e98afe7498fb5daf1f36ac2d78acc339464f950703b8c019892f982b90b

View file

@ -0,0 +1 @@
sonarr|fbd5ba72eaeccc4881818317d6fc81a285fa2a1161989675f53a666ce8c11002|linuxserver/sonarr|sha256:66f3b9a7c27e21a06e3c1a5f8f17b2b00e917291f0aaf07cece29f9fd9a26e4f|running|unhealthy|2026-07-02T16:22:04.632855946Z|container:ddb18d46aebae5ce7af0f805ab5222e0825a1a153c71fbed93b8c9a80fc80d89|unless-stopped|s6vinetmedia|healthcheck_sha256=3b816cea3c7006fde5b6197792c65249d978e96c07caf3cc61136b553107433e

View file

@ -92,6 +92,40 @@ validate_health_url_file() {
return 0
}
capture_container_fingerprint() {
output=$1
: > "$output"
docker ps -aq | while IFS= read -r cid; do
[ -n "$cid" ] || continue
base=$(docker inspect --format \
'{{.Name}}|{{.Id}}|{{.Config.Image}}|{{.Image}}|{{.State.Status}}|{{if .State.Health}}{{.State.Health.Status}}{{else}}no-healthcheck{{end}}|{{.State.StartedAt}}|{{.HostConfig.NetworkMode}}|{{.HostConfig.RestartPolicy.Name}}|{{index .Config.Labels "com.docker.compose.project"}}' \
"$cid" 2>/dev/null)
inspect_rc=$?
health_hash=$(docker inspect --format '{{json .Config.Healthcheck}}' "$cid" 2>/dev/null | sha256sum | awk '{print $1}')
hash_rc=$?
if [ "$inspect_rc" -ne 0 ] || [ "$hash_rc" -ne 0 ] || [ -z "$base" ] || [ -z "$health_hash" ]; then return 1; fi
printf '%s|healthcheck_sha256=%s\n' "${base#/}" "$health_hash"
done | LC_ALL=C sort > "$output"
pipeline_status="${PIPESTATUS[*]}"
case "$pipeline_status" in '0 0 0') return 0 ;; *) return 1 ;; esac
}
verify_container_disposition() {
output=$1
(cd "$script_dir/container-disposition" && sha256sum -c SHA256SUMS) \
> "$record/container-disposition-checksum-latest.txt" 2>&1
rc=$?
[ "$rc" -eq 0 ] || { fail 'container disposition checksum failed' 43; return $?; }
capture_container_fingerprint "$output"
rc=$?
[ "$rc" -eq 0 ] || { fail 'cannot capture current container fingerprint' 43; return $?; }
diff -u "$validated_preflight/container-fingerprint.psv" "$output" \
> "$record/container-disposition-latest.diff" 2>&1
rc=$?
[ "$rc" -eq 0 ] || { fail 'container identity, state, health, startup, network, restart policy, or health-check identity changed' 43; return $?; }
return 0
}
capture_failed_unit_fingerprint() {
output=$1
: > "$output"
@ -222,17 +256,7 @@ rerun_volatile_checks() {
df -hT / /boot /var/cache/pacman/pkg /tmp > "$record/volatile-disk-space.txt" 2>&1
rc=$?
[ "$rc" -eq 0 ] || { fail 'cannot verify current disk space' "$rc"; return $?; }
while IFS= read -r container; do
[ -n "$container" ] || continue
running=$(docker inspect -f '{{.State.Running}}' "$container" 2>/dev/null)
health=$(docker inspect -f '{{if .State.Health}}{{.State.Health.Status}}{{else}}no-healthcheck{{end}}' "$container" 2>/dev/null)
printf '%s|running=%s|health=%s\n' "$container" "${running:-missing}" "${health:-unknown}" \
>> "$record/volatile-container-health.txt"
if [ "$running" != true ] || [ "$health" = unhealthy ]; then
fail "previously running container is unavailable: $container" 43
return $?
fi
done < "$validated_preflight/running-containers-before.txt"
verify_container_disposition "$record/volatile-container-fingerprint.psv" || return $?
: > "$record/volatile-public-health.txt"
while IFS= read -r url; do
metrics=$(curl --fail --silent --show-error --max-redirs 0 \
@ -319,6 +343,8 @@ main() {
rc=$?; [ "$rc" -eq 0 ] || { fail 'cannot capture installed package inventory' "$rc"; return $?; }
cp "$validated_preflight/bootloader-inventory.txt" "$validated_preflight/kernel-initramfs-before.txt" \
"$validated_preflight/running-containers-before.txt" "$validated_preflight/containers-all.psv" \
"$validated_preflight/container-fingerprint.psv" "$validated_preflight/sonarr-unhealthy.allowlist.psv" \
"$validated_preflight/directus-stopped.allowlist.psv" "$validated_preflight/restart-policy-no.psv" \
"$validated_preflight/critical-units-baseline.psv" "$validated_preflight/database-baseline.psv" "$record/"
rc=$?; [ "$rc" -eq 0 ] || { fail 'cannot copy essential rollback baseline evidence' "$rc"; return $?; }
verify_failed_unit_disposition "$record/failed-units-before-fingerprint.psv" || return $?

View file

@ -0,0 +1,78 @@
# GRUB and grub-btrfs readiness
Verified baseline:
- GRUB has normal, fallback, and recovery entries for both `linux-zen` and
standard `linux`.
- Snapper snapshots 1, 2, and 3 exist.
- `/boot/grub/grub-btrfs.cfg` is absent, so there are currently no generated
snapshot entries.
- `grub-btrfs-snapper.path` is active and watching `/.snapshots`.
The installed unit definitions are:
```ini
# /usr/lib/systemd/system/grub-btrfs-snapper.path
[Unit]
Description=Monitors for new snapshots
[Path]
PathModified=/.snapshots
[Install]
WantedBy=multi-user.target
```
```ini
# /usr/lib/systemd/system/grub-btrfs-snapper.service
[Unit]
Description=Regenerate grub-btrfs.cfg
[Service]
Type=oneshot
Environment="PATH=/sbin:/bin:/usr/sbin:/usr/bin"
EnvironmentFile=/etc/default/grub-btrfs/config
ExecStart=bash -c 'if [[ -z $(/usr/bin/findmnt -n / | /usr/bin/grep "\.snapshots") ]]; then if [ -s "${GRUB_BTRFS_GRUB_DIRNAME:-/boot/grub}/grub-btrfs.cfg" ]; then /etc/grub.d/41_snapshots-btrfs; else ${GRUB_BTRFS_MKCONFIG:-grub-mkconfig} -o ${GRUB_BTRFS_GRUB_DIRNAME:-/boot/grub}/grub.cfg; fi; fi'
```
The bounded July 12 journal contains only these two parser warnings and no
recorded service activation that generated snapshot entries:
```text
Jul 12 17:16:42 TITANSERVER systemd[1]: /usr/lib/systemd/system/grub-btrfs-snapper.service:11: Ignoring unknown escape sequences in the ExecStart expression containing "\.snapshots".
Jul 12 17:18:23 TITANSERVER systemd[1]: /usr/lib/systemd/system/grub-btrfs-snapper.service:11: Ignoring unknown escape sequences in the ExecStart expression containing "\.snapshots".
```
The most supportable
inference is that the watcher was enabled after snapshots 13 or received no
qualifying modification afterward; absence of `grub-btrfs.cfg` confirms that the
generator has not completed successfully for those snapshots.
The separately approved standalone generation and verification procedure is:
```bash
/etc/grub.d/41_snapshots-btrfs
generate_rc=$?
printf 'grub_btrfs_generate_rc=%s\n' "$generate_rc"
test -s /boot/grub/grub-btrfs.cfg
present_rc=$?
printf 'grub_btrfs_cfg_present_rc=%s\n' "$present_rc"
grub-script-check /boot/grub/grub-btrfs.cfg
syntax_rc=$?
printf 'grub_btrfs_cfg_syntax_rc=%s\n' "$syntax_rc"
grep -E 'snapshot|Snapshot|snapper|\.snapshots' /boot/grub/grub-btrfs.cfg
entries_rc=$?
printf 'grub_btrfs_entries_rc=%s\n' "$entries_rc"
grep -q 'snapshots-btrfs' /boot/grub/grub.cfg
main_menu_link_rc=$?
printf 'grub_main_menu_snapshot_link_rc=%s\n' "$main_menu_link_rc"
```
This procedure is not approved or executed by the maintenance scripts. If the
last check fails, stop: making the submenu reachable would require a separately
approved `grub-mkconfig -o /boot/grub/grub.cfg`. Do not regenerate full GRUB as
an incidental readiness repair.

View file

@ -0,0 +1,32 @@
# Phase 2A maintenance worksheet
```text
PUBLIC_HEALTH_URLS='https://db.lasereverything.net/'
EXTRA_CRITICAL_UNITS=''
LE_PHASE2A_RECOVERY_READY=<UNSET>
LE_PHASE2A_BACKUPS_READY=<UNSET>
maintenance_window=<UNSET>
user_notification=<UNSET>
rollback_decision_owner=<UNSET>
independent_console_access=<UNSET>
independent_root_access=<UNSET>
previous_kernel_boot_procedure=<UNSET>
```
Verified evidence:
- protected Directus archive manifest: `PASS`, return code 0;
- Docker: 88 total, 87 running, retired `directus` intentionally stopped;
- sole unhealthy running container: reviewed unrelated `sonarr`;
- `makearmy-app` running; `bgbye` running and healthy;
- `le-directus-source` and `le-payload-pg` running;
- running restart-policy `no`: `castopod`, `castopod-redis`;
- DrKonqi disposition: exact checksummed 234-unit allowlist preserved;
- NoMachine removed; `nxserver.service` absent and not critical;
- GRUB: normal, fallback, and recovery entries for `linux-zen` and `linux`;
- Snapper snapshots 13 exist; `grub-btrfs.cfg` snapshot entries absent;
- `grub-btrfs-snapper.path` active and watching.
The recovery and backup attestations must remain unset until the operator has
personally confirmed recovery access and completed the proportional backup plan.

View file

@ -71,18 +71,72 @@ validate_health_url_file() {
return 0
}
capture_container_fingerprint() {
output=$1
: > "$output"
docker ps -aq | while IFS= read -r cid; do
[ -n "$cid" ] || continue
base=$(docker inspect --format \
'{{.Name}}|{{.Id}}|{{.Config.Image}}|{{.Image}}|{{.State.Status}}|{{if .State.Health}}{{.State.Health.Status}}{{else}}no-healthcheck{{end}}|{{.State.StartedAt}}|{{.HostConfig.NetworkMode}}|{{.HostConfig.RestartPolicy.Name}}|{{index .Config.Labels "com.docker.compose.project"}}' \
"$cid" 2>/dev/null)
inspect_rc=$?
health_hash=$(docker inspect --format '{{json .Config.Healthcheck}}' "$cid" 2>/dev/null | sha256sum | awk '{print $1}')
hash_rc=$?
if [ "$inspect_rc" -ne 0 ] || [ "$hash_rc" -ne 0 ] || [ -z "$base" ] || [ -z "$health_hash" ]; then return 1; fi
printf '%s|healthcheck_sha256=%s\n' "${base#/}" "$health_hash"
done | LC_ALL=C sort > "$output"
pipeline_status="${PIPESTATUS[*]}"
case "$pipeline_status" in '0 0 0') return 0 ;; *) return 1 ;; esac
}
compare_containers() {
capture_container_fingerprint "$post_record/container-fingerprint-after.psv"
rc=$?
if [ "$rc" -ne 0 ]; then add_failure "container-fingerprint-after|rc=$rc"; return 0; fi
: > "$post_record/container-comparison.psv"
while IFS= read -r container; do
[ -n "$container" ] || continue
running=$(docker inspect -f '{{.State.Running}}' "$container" 2>/dev/null)
health=$(docker inspect -f '{{if .State.Health}}{{.State.Health.Status}}{{else}}no-healthcheck{{end}}' "$container" 2>/dev/null)
printf '%s|running=%s|health=%s\n' "$container" "${running:-missing}" "${health:-unknown}" \
>> "$post_record/container-comparison.psv"
if [ "$running" != true ] || [ "$health" = unhealthy ]; then
add_failure "container-regression|name=$container|running=${running:-missing}|health=${health:-unknown}"
: > "$post_record/restart-policy-no-attention.txt"
awk -F'|' '{print $1}' "$baseline/container-fingerprint.psv" > "$post_record/container-names-before.txt"
awk -F'|' '{print $1}' "$post_record/container-fingerprint-after.psv" > "$post_record/container-names-after.txt"
diff -u "$post_record/container-names-before.txt" "$post_record/container-names-after.txt" \
> "$post_record/container-name-set.diff" 2>&1
rc=$?
if [ "$rc" -ne 0 ]; then add_failure 'container-name-set-changed'; fi
while IFS='|' read -r name old_id old_image_ref old_image_id old_state old_health old_started old_network old_restart old_project old_health_hash; do
[ -n "$name" ] || continue
current=$(awk -F'|' -v name="$name" '$1==name {print}' "$post_record/container-fingerprint-after.psv")
if [ -z "$current" ]; then
add_failure "container-missing|name=$name"
[ "$old_restart" = no ] && printf '%s|missing|manual-operator-attention-required\n' "$name" >> "$post_record/restart-policy-no-attention.txt"
continue
fi
done < "$baseline/running-containers-before.txt"
IFS='|' read -r new_name new_id new_image_ref new_image_id new_state new_health new_started new_network new_restart new_project new_health_hash <<EOF
$current
EOF
printf '%s|before=%s,%s|after=%s,%s|restart=%s\n' "$name" "$old_state" "$old_health" "$new_state" "$new_health" "$new_restart" \
>> "$post_record/container-comparison.psv"
if [ "$old_id" != "$new_id" ] || [ "$old_image_ref" != "$new_image_ref" ] || \
[ "$old_image_id" != "$new_image_id" ] || [ "$old_network" != "$new_network" ] || \
[ "$old_restart" != "$new_restart" ] || [ "$old_project" != "$new_project" ] || \
[ "$old_health_hash" != "$new_health_hash" ]; then
add_failure "container-identity-or-policy-changed|name=$name"
continue
fi
if [ "$name" = directus ]; then
[ "$new_state" = exited ] || add_failure "retired-directus-state|expected=exited|actual=$new_state"
elif [ "$name" = sonarr ]; then
if [ "$new_state" != running ]; then add_failure "sonarr-not-running|state=$new_state"; fi
case "$new_health" in unhealthy|healthy) ;; *) add_failure "sonarr-health-worsened|health=$new_health" ;; esac
elif [ "$old_state" = running ]; then
if [ "$new_state" != running ]; then
add_failure "previously-running-container-not-running|name=$name|state=$new_state"
[ "$old_restart" = no ] && printf '%s|%s|manual-operator-attention-required\n' "$name" "$new_state" >> "$post_record/restart-policy-no-attention.txt"
elif [ "$old_health" = healthy ] && [ "$new_health" != healthy ]; then
add_failure "healthy-container-regressed|name=$name|health=$new_health"
elif [ "$old_health" = no-healthcheck ] && [ "$new_health" != no-healthcheck ]; then
add_failure "container-healthcheck-identity-changed|name=$name|health=$new_health"
fi
fi
done < "$baseline/container-fingerprint.psv"
return 0
}
@ -170,7 +224,7 @@ main() {
return 12
fi
baseline=$maintenance/preflight-record
required='running-containers-before.txt critical-units-baseline.psv database-baseline.psv health-urls.sanitized inventory-hashes.sha256 result.manifest result.manifest.sha256'
required='running-containers-before.txt container-fingerprint.psv directus-stopped.allowlist.psv sonarr-unhealthy.allowlist.psv restart-policy-no.psv critical-units-baseline.psv database-baseline.psv health-urls.sanitized inventory-hashes.sha256 result.manifest result.manifest.sha256'
for file in $required; do
if [ ! -f "$baseline/$file" ] || [ -L "$baseline/$file" ]; then
printf 'HARD_STOP: missing baseline file %s\n' "$file" >&2

View file

@ -65,7 +65,8 @@ capture_failed_unit_fingerprint() {
"$id" "$type" "$load" "$active" "$sub" "$result" "$invocation" \
"$changed" "$fragment" "$code" "$status"
done > "$output"
return ${PIPESTATUS[0]}
pipeline_status="${PIPESTATUS[*]}"
case "$pipeline_status" in '0 0 0') return 0 ;; *) return 1 ;; esac
}
validate_failed_unit_disposition() {
@ -78,8 +79,9 @@ validate_failed_unit_disposition() {
capture_failed_unit_fingerprint "$record/failed-units-fingerprint.psv"
rc=$?
if [ "$rc" -ne 0 ]; then add_failure "failed-unit-fingerprint|rc=$rc"; return 0; fi
cp "$allowlist" "$allowlist_hashes" "$record/"
cp "$allowlist" "$record/drkonqi-failed-units.allowlist.psv"
rc=$?
if [ "$rc" -eq 0 ]; then cp "$allowlist_hashes" "$record/failed-unit-disposition.SHA256SUMS"; rc=$?; fi
if [ "$rc" -ne 0 ]; then add_failure "failed-unit-allowlist-copy|rc=$rc"; return 0; fi
diff -u "$allowlist" "$record/failed-units-fingerprint.psv" > "$record/failed-unit-disposition.diff" 2>&1
rc=$?
@ -113,6 +115,62 @@ validate_snapper_readiness() {
return 0
}
capture_container_fingerprint() {
output=$1
: > "$output"
docker ps -aq | while IFS= read -r cid; do
[ -n "$cid" ] || continue
base=$(docker inspect --format \
'{{.Name}}|{{.Id}}|{{.Config.Image}}|{{.Image}}|{{.State.Status}}|{{if .State.Health}}{{.State.Health.Status}}{{else}}no-healthcheck{{end}}|{{.State.StartedAt}}|{{.HostConfig.NetworkMode}}|{{.HostConfig.RestartPolicy.Name}}|{{index .Config.Labels "com.docker.compose.project"}}' \
"$cid" 2>/dev/null)
inspect_rc=$?
health_hash=$(docker inspect --format '{{json .Config.Healthcheck}}' "$cid" 2>/dev/null | sha256sum | awk '{print $1}')
hash_rc=$?
if [ "$inspect_rc" -ne 0 ] || [ "$hash_rc" -ne 0 ] || [ -z "$base" ] || [ -z "$health_hash" ]; then
return 1
fi
printf '%s|healthcheck_sha256=%s\n' "${base#/}" "$health_hash"
done | LC_ALL=C sort > "$output"
pipeline_status="${PIPESTATUS[*]}"
case "$pipeline_status" in '0 0 0') return 0 ;; *) return 1 ;; esac
}
validate_container_disposition() {
disposition_dir=$script_dir/container-disposition
(cd "$disposition_dir" && sha256sum -c SHA256SUMS) \
> "$record/container-disposition-checksum.txt" 2>&1
rc=$?
if [ "$rc" -ne 0 ]; then add_failure "container-disposition-checksum|rc=$rc"; return 0; fi
capture_container_fingerprint "$record/container-fingerprint.psv"
rc=$?
if [ "$rc" -ne 0 ]; then add_failure "container-fingerprint|rc=$rc"; return 0; fi
diff -u "$disposition_dir/all-containers.psv" "$record/container-fingerprint.psv" \
> "$record/container-disposition.diff" 2>&1
rc=$?
if [ "$rc" -ne 0 ]; then
add_failure 'container-disposition|identity-state-health-startup-network-restart-or-healthcheck-changed'
fi
total=$(wc -l < "$record/container-fingerprint.psv")
running=$(awk -F'|' '$5=="running"{n++} END{print n+0}' "$record/container-fingerprint.psv")
stopped=$(awk -F'|' '$5!="running"{n++} END{print n+0}' "$record/container-fingerprint.psv")
unhealthy=$(awk -F'|' '$6=="unhealthy"{n++} END{print n+0}' "$record/container-fingerprint.psv")
[ "$total" = 88 ] || add_failure "container-count|expected=88|actual=$total"
[ "$running" = 87 ] || add_failure "running-container-count|expected=87|actual=$running"
[ "$stopped" = 1 ] || add_failure "stopped-container-count|expected=1|actual=$stopped"
[ "$unhealthy" = 1 ] || add_failure "unhealthy-container-count|expected=1|actual=$unhealthy"
awk -F'|' '$6=="unhealthy" && $1!="sonarr" {print}' "$record/container-fingerprint.psv" \
> "$record/unexpected-unhealthy-containers.psv"
[ ! -s "$record/unexpected-unhealthy-containers.psv" ] || add_failure 'container-health|additional-unhealthy-container'
awk -F'|' '$5!="running" && $1!="directus" {print}' "$record/container-fingerprint.psv" \
> "$record/unexpected-stopped-containers.psv"
[ ! -s "$record/unexpected-stopped-containers.psv" ] || add_failure 'container-state|additional-stopped-container'
cp "$disposition_dir"/*.psv "$record/"
rc=$?
if [ "$rc" -eq 0 ]; then cp "$disposition_dir/SHA256SUMS" "$record/container-disposition.SHA256SUMS"; rc=$?; fi
[ "$rc" -eq 0 ] || add_failure "container-disposition-copy|rc=$rc"
return 0
}
validate_health_urls() {
: > "$record/health-urls.sanitized"
if [ -z "${PUBLIC_HEALTH_URLS:-}" ]; then
@ -328,6 +386,7 @@ main() {
"docker ps -a --format '{{.Names}}|{{.Image}}|{{.Status}}|{{.Ports}}' | sort"
mandatory_shell 'running-container-inventory' running-containers-before.txt \
"docker ps --format '{{.Names}}' | sort"
validate_container_disposition
capture_unit_baseline
capture_database_baseline
validate_database_baseline
@ -350,8 +409,10 @@ main() {
'git -C /srv/codex-work/lasereverything.net.db/.worktrees/payload-migration status --short --branch; git -C /srv/codex-work/lasereverything.net.db/.worktrees/payload-migration rev-parse HEAD; git -C /srv/codex-work/lasereverything.net.db/.worktrees/payload-migration rev-parse origin/migration/le-app-database'
mandatory_shell 'approved-transaction-integrity' approved-transaction-checksum.txt \
"cd '$script_dir/approved-transaction' && sha256sum -c SHA256SUMS"
mandatory_shell 'protected-directus-archive-integrity' directus-archive-verification.txt \
"cd /srv/directus-archive/20260710-175408 && sha256sum --status -c SHA256SUMS && printf 'archive=/srv/directus-archive/20260710-175408|manifest=SHA256SUMS|result=PASS|return_code=0\\n'"
inventory_files='packages-before.txt failed-units-before.txt failed-units-fingerprint.psv failed-unit-disposition.diff failed-unit-allowlist-checksum.txt snapshots-subvolume.txt snapshots-stat.txt snapper-snapshots-before.txt btrfs-quota-observation.txt kernel-initramfs-before.txt bootloader-inventory.txt containers-all.psv running-containers-before.txt critical-units-baseline.psv database-baseline.psv database-readiness-before.txt health-urls.sanitized public-health.txt network-firewall-before.txt pacman-Dk-before.txt pacman-Qkk-before.txt pacman-Qkk-missing-or-unreadable-before.txt pacnew-pacsave-before.txt migration-git-state.txt approved-transaction-checksum.txt'
inventory_files='packages-before.txt failed-units-before.txt failed-units-fingerprint.psv failed-unit-disposition.diff failed-unit-allowlist-checksum.txt drkonqi-failed-units.allowlist.psv failed-unit-disposition.SHA256SUMS snapshots-subvolume.txt snapshots-stat.txt snapper-snapshots-before.txt btrfs-quota-observation.txt kernel-initramfs-before.txt bootloader-inventory.txt containers-all.psv running-containers-before.txt container-fingerprint.psv container-disposition.diff container-disposition-checksum.txt container-disposition.SHA256SUMS unexpected-unhealthy-containers.psv unexpected-stopped-containers.psv all-containers.psv running-containers.psv sonarr-unhealthy.allowlist.psv directus-stopped.allowlist.psv restart-policy-no.psv critical-units-baseline.psv database-baseline.psv database-readiness-before.txt health-urls.sanitized public-health.txt network-firewall-before.txt pacman-Dk-before.txt pacman-Qkk-before.txt pacman-Qkk-missing-or-unreadable-before.txt pacnew-pacsave-before.txt migration-git-state.txt approved-transaction-checksum.txt directus-archive-verification.txt'
(
cd "$record" || return 1
sha256sum $inventory_files > inventory-hashes.sha256