aboutsummaryrefslogtreecommitdiff
path: root/docs/design/2026-08-23-telega-docker-pin-tdlib-mismatch.org
diff options
context:
space:
mode:
authorCraig Jennings <c@cjennings.net>2026-08-25 06:30:04 -0600
committerCraig Jennings <c@cjennings.net>2026-08-25 06:30:04 -0600
commit91fbac722e83cd108a295542a3c88de66d209fe8 (patch)
treea444b4181cc07416f82930fb7486a1c54ccf1a75 /docs/design/2026-08-23-telega-docker-pin-tdlib-mismatch.org
parent9b53d707f5e2dfe5237ae4db338aa65e83d9c6b2 (diff)
downloaddotemacs-91fbac722e83cd108a295542a3c88de66d209fe8.tar.gz
dotemacs-91fbac722e83cd108a295542a3c88de66d209fe8.zip
fix(telega): build the server image locally to meet tdlib 1.8.66
MELPA's 2026-08-18 telega raised telega-tdlib-min-version to 1.8.66. The pinned upstream image ships 1.8.64, so telega killed its own server on every launch. Upstream's only 1.8.66 image won't start: it's missing libglycin (zevlg/telega.el#596). docker/telega-server/Dockerfile derives from that upstream image, pinned by digest, and adds the one missing package. make telega-image builds it as cj/telega-server:1.8.66-glycin, cj/telega-docker-image defaults to that tag, and a test holds the two equal. cj/telega now refuses to launch with a make telega-image hint when the image isn't built, since docker would otherwise try to pull a local-only tag from the registry. setup-telega.sh points at the make target instead of M-x telega-server-build. I chose the local build over pinning the telega package back to 20260706.2147. The derived image satisfies both machines' floors. package.el can't pin a version and MELPA serves only its latest build, so nothing would enforce the package pin. When #596 is fixed upstream the pin returns to a registry digest and the Dockerfile goes.
Diffstat (limited to 'docs/design/2026-08-23-telega-docker-pin-tdlib-mismatch.org')
-rw-r--r--docs/design/2026-08-23-telega-docker-pin-tdlib-mismatch.org29
1 files changed, 29 insertions, 0 deletions
diff --git a/docs/design/2026-08-23-telega-docker-pin-tdlib-mismatch.org b/docs/design/2026-08-23-telega-docker-pin-tdlib-mismatch.org
index 919c84b8..6428e8c1 100644
--- a/docs/design/2026-08-23-telega-docker-pin-tdlib-mismatch.org
+++ b/docs/design/2026-08-23-telega-docker-pin-tdlib-mismatch.org
@@ -212,6 +212,35 @@ way it goes:
- A controlled reproduction of the silent death with the daemon watched, to
find out why the armed notification wasn't seen (previous section).
+* Decision (2026-08-25): derived image, built from a Dockerfile in this repo
+
+I went with the derived image, in a form that keeps most of what the digest
+pin gave. Three things settled it:
+
+- The derived image (tdlib 1.8.66) satisfies both machines' current packages:
+ velox's telega wants 1.8.66 and ratio's wants 1.8.64, and telega accepts
+ anything at or above its floor. The package pin would have worked only on
+ velox, and only after copying =elpa/telega-20260706.2147= over from ratio.
+- package.el has no version pin and MELPA serves only its latest build, so
+ "pin the package back" is a copied directory plus the hope that nobody runs
+ =package-upgrade= again. Nothing enforces it.
+- The pre-reinstall backup on the NAS holds velox's =~/.telega= (td.binlog
+ and db.sqlite from 2026-07-05), so a working image plus that directory may
+ restore the session without a phone re-auth.
+
+The shape: =docker/telega-server/Dockerfile= (FROM pinned to the upstream
+digest, plus =apk add libglycin=), =make telega-image= builds it under
+=cj/telega-server:1.8.66-glycin=, =cj/telega-docker-image= defaults to that
+tag, and =cj/telega= refuses to launch with a "run make telega-image" message
+when the image isn't built, so a fresh machine gets a pointer instead of a
+confusing registry pull failure. The digest guarantee lives in the
+Dockerfile's FROM line; a test holds the defcustom default equal to the
+Makefile's tag. When #596 is fixed upstream, the pin goes back to a registry
+digest and the Dockerfile goes.
+
+Not done here: the launch-time tdlib-version assertion, and the controlled
+reproduction of the unseen death notification. Both are filed.
+
* Reproducing it
#+begin_src sh