All hubdns-update runs fail with:
error: FQDN update error: Request timestamp: Wed, 12 Aug 2026 07:46:35 GMT expired. It must be within 300 secs/ of server time.'
The client clock is correct; the Hub's is not. Measured in a single command:
date -u; curl -sI https://www.cloudflare.com | grep -i ^date:; curl -sI https://hub.turnkeylinux.org/ | grep -i ^date:
Wed Aug 12 08:03:58 UTC 2026
date: Wed, 12 Aug 2026 08:03:58 GMT
Date: Wed, 12 Aug 2026 07:58:56 GMT
Client and Cloudflare agree to the second. hub.turnkeylinux.org is 302 seconds behind, just past its own 300s tolerance, so valid requests are rejected. Repeated over ~15 minutes, the offset held steady at 302s, so this is a persistent skew rather than jitter.
The response comes straight from gunicorn with no cache headers (no Age, no X-Cache), so this is the application server's own clock, not a CDN artifact:
curl -sI "https://hub.turnkeylinux.org/?cb=$(date +%s)" | grep -iE '^(date|age|x-cache|cf-|via|server):'
Server: gunicorn/19.0.0
Date: Wed, 12 Aug 2026 07:54:17 GMT
The API endpoint reports the same skew:
curl -sI "https://hub.turnkeylinux.org/api/hubdns/?cb=$(date +%s)" | grep -i ^date:
Date: Wed, 12 Aug 2026 07:54:36 GMT
Client side checks out:
timedatectl reports System clock synchronized: yes
- Total runtime of
hubdns-update is ~1.3s, so there's no client-side delay between timestamp generation and transmission
cmd_update.py contains no timestamp logic — the Date header is built by pycurl_wrapper/libcurl
This should affect every HubDNS user, not just this host. Most will likely see it as hourly cron failure mail and assume their own clock is at fault.
Environment: TurnKey Core (Debian 12 bookworm) LXC on Proxmox VE, hubdns 1.3+1+g13e1dbf
Suggested fix: resync NTP on the Hub. Widening the 300s window would also add resilience against future drift.
All
hubdns-updateruns fail with:error: FQDN update error: Request timestamp: Wed, 12 Aug 2026 07:46:35 GMT expired. It must be within 300 secs/ of server time.'
The client clock is correct; the Hub's is not. Measured in a single command:
date -u; curl -sI https://www.cloudflare.com | grep -i ^date:; curl -sI https://hub.turnkeylinux.org/ | grep -i ^date:
Wed Aug 12 08:03:58 UTC 2026
date: Wed, 12 Aug 2026 08:03:58 GMT
Date: Wed, 12 Aug 2026 07:58:56 GMT
Client and Cloudflare agree to the second.
hub.turnkeylinux.orgis 302 seconds behind, just past its own 300s tolerance, so valid requests are rejected. Repeated over ~15 minutes, the offset held steady at 302s, so this is a persistent skew rather than jitter.The response comes straight from gunicorn with no cache headers (no
Age, noX-Cache), so this is the application server's own clock, not a CDN artifact:curl -sI "https://hub.turnkeylinux.org/?cb=$(date +%s)" | grep -iE '^(date|age|x-cache|cf-|via|server):'
Server: gunicorn/19.0.0
Date: Wed, 12 Aug 2026 07:54:17 GMT
The API endpoint reports the same skew:
curl -sI "https://hub.turnkeylinux.org/api/hubdns/?cb=$(date +%s)" | grep -i ^date:
Date: Wed, 12 Aug 2026 07:54:36 GMT
Client side checks out:
timedatectlreportsSystem clock synchronized: yeshubdns-updateis ~1.3s, so there's no client-side delay between timestamp generation and transmissioncmd_update.pycontains no timestamp logic — the Date header is built bypycurl_wrapper/libcurlThis should affect every HubDNS user, not just this host. Most will likely see it as hourly cron failure mail and assume their own clock is at fault.
Environment: TurnKey Core (Debian 12 bookworm) LXC on Proxmox VE,
hubdns 1.3+1+g13e1dbfSuggested fix: resync NTP on the Hub. Widening the 300s window would also add resilience against future drift.