add Phase 2A container and recovery readiness gates
This commit is contained in:
parent
da03be61a9
commit
a9fec0d83d
15 changed files with 629 additions and 30 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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 1–3
|
||||
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.
|
||||
|
|
@ -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.
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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 $?
|
||||
|
|
|
|||
|
|
@ -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 1–3 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.
|
||||
|
|
@ -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 1–3 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.
|
||||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue