The tin postinst is small; let me pin down the failing line and the dpkg wording.
Let me check dpkg's source for this exact wording.
I need to check dpkg's source directly; let me use a proper environment to download it.
The "old" wording is just dpkg ≥1.23's standard label for the postinst in /var/lib/dpkg/info (confirmed in script.c: maintscript_postinst → "old %s package %s maintainer script"). Now let me check the new tin postinst in the actual archive version.
The new tin postinst is the culprit area. Let me test its exact behavior under dash (Debian's /bin/sh) in the relevant edge cases.
A key suspect: return without arguments after a failed [ inside || — let me test what status that yields.
Found it — I reproduced the failure. Here's the cause.
The bug is in tin's rewritten postinst (1:2.6.7~20260927-1)
The new maintainer script (from debhelper-style rewrite by the new maintainer) has:
The final [ "$RET" != "$current_name" ] || return is the culprit:
Your tin.config had already done db_set shared/news/server "$(head -1 /etc/news/server)", so the debconf value (news.lip.ens-lyon.fr) equals the content of /etc/news/server.
Therefore the [ ... != ... ] test fails with status 1, and the return on the right of || runs without an explicit status. Per POSIX, a bare return takes the exit status of the last command executed — the failed [ — so update_server_file returns 1.
The function is the last (and only) command of the configure branch, and the script runs with set -e (#!/bin/sh -e), so the whole postinst aborts with exit status 1, silently — which matches your log: no error message between the debconf GET/--> 0 and dpkg's "exit status 1".
I verified this under dash (Debian's /bin/sh): f() { [ a != a ] || return; }; f with set -e exits 1 with no output. The fix upstream is simply return 0 (or [ "$RET" = "$current_name" ] && return). The old 2.6.6 postinst unconditionally rewrote the file, which is why upgrades never failed before.
Side notes
The wording "old tin package postinst maintainer script" is not a symptom of a stale script: since dpkg 1.23.x, the postinst run from /var/lib/dpkg/info/ during --configure is systematically labeled "old %s package %s maintainer script" (dpkg source, src/main/script.c, maintscript_postinst() → vmaintscript_run_old()). The script executed here is the one shipped in 1:2.6.7~20260927-1.
The failure only triggers when the debconf value matches the existing /etc/news/server — i.e., on virtually every ordinary upgrade where the server hasn't changed.
Workaround
Until a fixed package is uploaded, you can patch the installed script and configure:
sh
sed -i 's/\[ "\$RET" != "\$current_name" \] || return/[ "$RET" != "$current_name" ] || return 0/' /var/lib/dpkg/info/tin.postinst
dpkg --configure tin
(and apt reinstall tin/next upgrade will overwrite the script again — the same sed will need re-applying until the fixed version arrives). It's worth filing a bug against the tin package with this analysis, since any user whose /etc/news/server is already up to date will hit it.
Oct 19, 11:09am
This is a shared conversation and may include unverified content that doesn't reflect Mistral AI's views. Login to resume chatting.