docs(linux): name the two things that bit a first Debian 13 build

Both found on a real trixie box, which is the first time any of this has
run on Linux.

Go can be too NEW, and that is the harder failure to meet cold. The
Wails CLI parses this package with the golang.org/x/tools its own go.mod
pins, and that release cannot read the export data a newer compiler
writes. With go1.27 — which is simply what go.dev offers as current —
the build dies with

  internal error: package "math" without types was imported from
  "hamlog/internal/geo"

naming neither Go nor Wails nor anything an operator could act on. The
setup script now says so when it sees 1.27 or later, and the doc tells
people to take 1.26 rather than the latest. Every version in both is
1.26.3, which is what the Windows build uses.

And the sound-server check was asking the wrong question. It ran `pactl
info`, but pactl comes from pulseaudio-utils, a package that has nothing
to do with whether a server is running — so a Debian 13 desktop with
PipeWire working perfectly was told it had no sound server. OpsLog
speaks the PulseAudio protocol itself and connects to the native socket,
so the socket is what the check looks for now, with pactl used only to
print the server's name when it happens to be there. It also says to run
from the desktop session rather than over SSH, the socket belonging to
the logged-in session.
This commit is contained in:
2026-09-11 09:46:01 +02:00
parent f8d47cd3b5
commit 13fd2367bd
2 changed files with 61 additions and 13 deletions
+19 -6
View File
@@ -38,15 +38,28 @@ sudo pacman -S base-devel pkgconf gtk3 webkit2gtk-4.1 nodejs npm
```
**Go and node do not come from the package manager.** No current distribution
ships a Go new enough for `go.mod` (Ubuntu 24.04 / Mint 22 have 1.22, Ubuntu
22.04 / Mint 21 have 1.18), and Ubuntu 22.04 / Mint 21 ship node 12 where Vite
needs 18. Both are the usual reason a first build fails with an error that
points somewhere else entirely:
ships a Go new enough for `go.mod` (Debian 12 has 1.19, Debian 13 has 1.24,
Ubuntu 24.04 / Mint 22 have 1.22), and Ubuntu 22.04 / Mint 21 ship node 12 where
Vite needs 18. Both are the usual reason a first build fails with an error that
points somewhere else entirely.
**Take 1.26, not the latest.** Go can also be too NEW. The Wails CLI parses this
package with the `golang.org/x/tools` its own `go.mod` pins, and that release
cannot read the export data a newer compiler writes — so a fresh `go1.27` fails
the build with something that names neither Go nor Wails:
```
internal error: package "math" without types was imported from "hamlog/internal/geo"
```
Met on Debian 13, where go.dev simply offers 1.27 as the current release. 1.25
and 1.26 are what this repository is built with. If you already installed a
newer one, replace it and reinstall the CLI so it is rebuilt:
```bash
# Go, from go.dev
wget https://go.dev/dl/go1.25.1.linux-amd64.tar.gz
sudo rm -rf /usr/local/go && sudo tar -C /usr/local -xzf go1.25.1.linux-amd64.tar.gz
wget https://go.dev/dl/go1.26.3.linux-amd64.tar.gz
sudo rm -rf /usr/local/go && sudo tar -C /usr/local -xzf go1.26.3.linux-amd64.tar.gz
echo 'export PATH=/usr/local/go/bin:$HOME/go/bin:$PATH' >> ~/.profile # log out and back in
# node 20, only if `node -v` is below 18
+42 -7
View File
@@ -77,10 +77,28 @@ if have go; then
# golang-go` gets you a Go that cannot build this repository at all.
if ! go version | grep -Eq 'go1\.(2[5-9]|[3-9][0-9])'; then
note "go 1.25+ — $gov is too old for go.mod, and no apt package is new enough"
ylw " wget https://go.dev/dl/go1.25.1.linux-amd64.tar.gz"
ylw " sudo rm -rf /usr/local/go && sudo tar -C /usr/local -xzf go1.25.1.linux-amd64.tar.gz"
ylw " wget https://go.dev/dl/go1.26.3.linux-amd64.tar.gz"
ylw " sudo rm -rf /usr/local/go && sudo tar -C /usr/local -xzf go1.26.3.linux-amd64.tar.gz"
ylw " echo 'export PATH=/usr/local/go/bin:\$HOME/go/bin:\$PATH' >> ~/.profile # then log out and back in"
fi
# And TOO NEW breaks too, which is the harder one to meet cold. The Wails
# CLI parses this package with the golang.org/x/tools its own go.mod pins,
# and that release cannot read the export data a newer compiler writes. The
# failure names neither Go nor Wails:
#
# internal error: package "math" without types was imported from
# "hamlog/internal/geo"
#
# Met on Debian 13 with go1.27.1, which is simply what go.dev offers as
# latest. 1.25 and 1.26 are the versions this repository is built with.
if go version | grep -Eq 'go1\.(2[7-9]|[3-9][0-9])'; then
ylw " $gov is NEWER than the Wails CLI can parse this package with."
ylw " The build fails with: internal error: package \"math\" without types."
ylw " Install 1.26 (or 1.25) and rebuild the CLI with it:"
ylw " wget https://go.dev/dl/go1.26.3.linux-amd64.tar.gz"
ylw " sudo rm -rf /usr/local/go && sudo tar -C /usr/local -xzf go1.26.3.linux-amd64.tar.gz"
ylw " go install github.com/wailsapp/wails/v2/cmd/[email protected]"
fi
else
note "go 1.25+ — from https://go.dev/dl/, NOT from apt (no distribution ships 1.25 yet)"
fi
@@ -129,12 +147,29 @@ else
fi
head_ "Sound server"
if have pactl && pactl info >/dev/null 2>&1; then
ok "$(pactl info | sed -n 's/^Server Name: //p')"
# OpsLog speaks the PulseAudio protocol itself (jfreymuth/pulse) and connects to
# the NATIVE SOCKET. That socket is what decides whether audio works — not
# whether pactl is installed, which is a separate package (pulseaudio-utils).
# This check used to ask for pactl and told a Debian 13 desktop running PipeWire
# perfectly well that it had no sound server at all.
sock="${PULSE_SERVER:-}"
sock="${sock#unix:}"
if [ -z "$sock" ] && [ -n "${XDG_RUNTIME_DIR:-}" ]; then
sock="$XDG_RUNTIME_DIR/pulse/native"
fi
if [ -n "$sock" ] && [ -S "$sock" ]; then
if have pactl && pactl info >/dev/null 2>&1; then
ok "$(pactl info | sed -n 's/^Server Name: //p')"
else
ok "socket at $sock (install pulseaudio-utils if you want its name)"
fi
else
ylw " No PulseAudio/PipeWire server answered. The voice keyer, the QSO"
ylw " recorder and the CW decoder will report they cannot reach it."
ylw " Everything else works without one."
ylw " No PulseAudio/PipeWire socket found."
ylw " The voice keyer, the QSO recorder and the CW decoder will report they"
ylw " cannot reach it. Everything else works without one."
ylw " sudo apt install pipewire-pulse wireplumber # Debian/Ubuntu"
ylw " And run this from the DESKTOP session: the sound server belongs to the"
ylw " logged-in session, so a remote shell may not see it."
fi
head_ "Building"