Say what the terms are, and how to install under them
The program had no licence file at all, and pyproject claimed MIT into the void. It is now the GNU General Public License, version 3 or later: LICENSE holds the text verbatim, pyproject declares it with the OSI classifier, both .deb builds write /usr/share/doc/<pkg>/copyright in the machine-readable format Policy requires, both manuals carry a COPYING section, and --version prints the GNU notice on both programs. INSTALL.md is the step-by-step: what you need, the Debian package, the virtual environment for everywhere else, how to check it worked, every optional dependency with what it buys and what happens without it, and the errors people actually hit first -- PEP 668 at the top, because on Debian a plain "pip install ." refuses and reads as a broken program. Speech transcription gets its own four steps, because it is the only part with a real download in it: the recogniser into the environment bandsaunter runs from, checking it took, the model (base.en, 148 MB, from Hugging Face into ~/.cache/huggingface, fetched deliberately rather than in the middle of a scan), then turning it on. With the sizes of every model, the offline routes, and what to do when --engines says no although pip says yes. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016PsWPTweCT6pwxKngvVxcg
This commit is contained in:
parent
eae60cb04d
commit
4239635f74
14 changed files with 1390 additions and 11 deletions
|
|
@ -1,5 +1,5 @@
|
|||
.\" Generated by packaging/make-man.py -- do not edit by hand.
|
||||
.TH BANDSAUNTER 1 "2026-09-03" "bandsaunter 2026-09-03_03" "User Commands"
|
||||
.TH BANDSAUNTER 1 "2026-09-03" "bandsaunter 2026-09-03_05" "User Commands"
|
||||
.SH NAME
|
||||
bandsaunter \- scan, record and identify radio signals with an RTL-SDR
|
||||
.SH SYNOPSIS
|
||||
|
|
@ -1481,6 +1481,20 @@ transcripts and their identifications, on one screen.
|
|||
.PP
|
||||
The README shipped with the package covers the same ground at greater length,
|
||||
including why the detection thresholds are what they are.
|
||||
.SH COPYING
|
||||
Copyright \(co 2026 The Dust Council.
|
||||
.PP
|
||||
This program is free software: you can redistribute it and/or modify it under
|
||||
the terms of the GNU General Public License as published by the Free Software
|
||||
Foundation, either version 3 of the License, or (at your option) any later
|
||||
version. It is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
WARRANTY \[em] without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||
FOR A PARTICULAR PURPOSE. See the GNU General Public License for the full
|
||||
terms, in
|
||||
.I /usr/share/doc/bandsaunter/copyright
|
||||
or at
|
||||
.UR https://www.gnu.org/licenses/
|
||||
.UE .
|
||||
.SH BUGS
|
||||
The DVB-T television driver claims these dongles on sight. If the receiver
|
||||
cannot be opened, that is almost always why: the package blacklists the
|
||||
|
|
|
|||
|
|
@ -19,8 +19,23 @@ mkdir -p "$site/bandsaunter" "$pkgdir/usr/bin" "$pkgdir/DEBIAN" \
|
|||
"$pkgdir/usr/share/doc/bandsaunter"
|
||||
|
||||
cp "$here"/bandsaunter/*.py "$site/bandsaunter/"
|
||||
cp "$here/README.md" "$pkgdir/usr/share/doc/bandsaunter/"
|
||||
cp "$here/README.md" "$here/INSTALL.md" "$pkgdir/usr/share/doc/bandsaunter/"
|
||||
gzip -9n "$pkgdir/usr/share/doc/bandsaunter/README.md"
|
||||
gzip -9n "$pkgdir/usr/share/doc/bandsaunter/INSTALL.md"
|
||||
|
||||
# Debian Policy requires the licence verbatim, at this exact path, in every
|
||||
# package. The header above it is the machine-readable format apt tools read.
|
||||
{
|
||||
echo "Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/"
|
||||
echo "Upstream-Name: bandsaunter"
|
||||
echo
|
||||
echo "Files: *"
|
||||
echo "Copyright: 2026 The Dust Council"
|
||||
echo "License: GPL-3.0-or-later"
|
||||
echo
|
||||
echo "License: GPL-3.0-or-later"
|
||||
sed 's/^$/./; s/^/ /' "$here/LICENSE"
|
||||
} > "$pkgdir/usr/share/doc/bandsaunter/copyright"
|
||||
|
||||
# Regenerated from the settings table rather than copied, so the manual
|
||||
# cannot describe a version of the settings that no longer exists.
|
||||
|
|
|
|||
|
|
@ -40,7 +40,7 @@ pip download --quiet --only-binary=:all: --dest "$wheels" faster-whisper >&2
|
|||
|
||||
pkg="$stage/bandsaunter-transcribe_${version}-${revision}_${arch}"
|
||||
vendor="$pkg/usr/lib/bandsaunter/vendor"
|
||||
mkdir -p "$vendor" "$pkg/DEBIAN"
|
||||
mkdir -p "$vendor" "$pkg/DEBIAN" "$pkg/usr/share/doc/bandsaunter-transcribe"
|
||||
for w in "$wheels"/*.whl; do
|
||||
python3 -m zipfile -e "$w" "$vendor/"
|
||||
done
|
||||
|
|
@ -53,6 +53,22 @@ rm -rf "$vendor"/numpy "$vendor"/numpy-* "$vendor"/yaml "$vendor"/PyYAML-* \
|
|||
rm -f "$vendor"/*.pth
|
||||
find "$vendor" -name "__pycache__" -type d -exec rm -rf {} + 2>/dev/null || true
|
||||
|
||||
# The packaging is this project's; the wheels inside keep their own terms.
|
||||
{
|
||||
echo "Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/"
|
||||
echo "Upstream-Name: bandsaunter"
|
||||
echo
|
||||
echo "Files: *"
|
||||
echo "Copyright: 2026 The Dust Council"
|
||||
echo "License: GPL-3.0-or-later"
|
||||
echo " The packaging in this file is under the GNU General Public License,"
|
||||
echo " version 3 or later, whose full text is in the bandsaunter package at"
|
||||
echo " /usr/share/doc/bandsaunter/copyright. The Python wheels vendored"
|
||||
echo " under /usr/lib/bandsaunter/vendor are third-party works distributed"
|
||||
echo " under their own licences, each carried in that package's own"
|
||||
echo " dist-info directory beside it."
|
||||
} > "$pkg/usr/share/doc/bandsaunter-transcribe/copyright"
|
||||
|
||||
cat > "$pkg/DEBIAN/control" <<EOF
|
||||
Package: bandsaunter-transcribe
|
||||
Version: ${version}-${revision}
|
||||
|
|
@ -78,6 +94,8 @@ say "collecting the $model model"
|
|||
modelpkg="$stage/bandsaunter-model-$(echo "$model" | tr '._' '--')_${version}-${revision}_all"
|
||||
modeldir="$modelpkg/usr/share/bandsaunter/models/$model"
|
||||
mkdir -p "$modeldir" "$modelpkg/DEBIAN"
|
||||
modeldoc="$modelpkg/usr/share/doc/bandsaunter-model-$(echo "$model" | tr '._' '--')"
|
||||
mkdir -p "$modeldoc"
|
||||
PYTHONPATH="$stage/wheels-unused" python3 - "$hf_repo" "$modeldir" <<'PY' >&2
|
||||
import shutil, sys
|
||||
from pathlib import Path
|
||||
|
|
@ -92,6 +110,20 @@ for item in src.iterdir():
|
|||
shutil.copy2(item.resolve(), target)
|
||||
PY
|
||||
|
||||
{
|
||||
echo "Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/"
|
||||
echo "Upstream-Name: bandsaunter"
|
||||
echo
|
||||
echo "Files: *"
|
||||
echo "Copyright: 2026 The Dust Council"
|
||||
echo "License: GPL-3.0-or-later"
|
||||
echo " The packaging is under the GNU General Public License, version 3 or"
|
||||
echo " later, whose full text is in the bandsaunter package at"
|
||||
echo " /usr/share/doc/bandsaunter/copyright. The model weights under"
|
||||
echo " /usr/share/bandsaunter/models are a third-party work, redistributed"
|
||||
echo " under the terms the model was published with."
|
||||
} > "$modeldoc/copyright"
|
||||
|
||||
cat > "$modelpkg/DEBIAN/control" <<EOF
|
||||
Package: bandsaunter-model-$(echo "$model" | tr '._' '--')
|
||||
Version: ${version}-${revision}
|
||||
|
|
|
|||
|
|
@ -485,6 +485,14 @@ The same thing as a map, to open in Google Earth.
|
|||
not exist or there is no terminal to draw on.
|
||||
.SH SEE ALSO
|
||||
.BR bandsaunter (1)
|
||||
.SH COPYING
|
||||
Copyright \(co 2026 The Dust Council. Free software under the GNU General
|
||||
Public License, version 3 or later; see
|
||||
.I /usr/share/doc/bandsaunter/copyright
|
||||
or
|
||||
.UR https://www.gnu.org/licenses/
|
||||
.UE .
|
||||
There is no warranty, to the extent permitted by law.
|
||||
.SH BUGS
|
||||
The list is read when the browser opens. Press
|
||||
.B r
|
||||
|
|
|
|||
|
|
@ -874,6 +874,20 @@ transcripts and their identifications, on one screen.
|
|||
.PP
|
||||
The README shipped with the package covers the same ground at greater length,
|
||||
including why the detection thresholds are what they are.
|
||||
.SH COPYING
|
||||
Copyright \(co 2026 The Dust Council.
|
||||
.PP
|
||||
This program is free software: you can redistribute it and/or modify it under
|
||||
the terms of the GNU General Public License as published by the Free Software
|
||||
Foundation, either version 3 of the License, or (at your option) any later
|
||||
version. It is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
WARRANTY \[em] without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||
FOR A PARTICULAR PURPOSE. See the GNU General Public License for the full
|
||||
terms, in
|
||||
.I /usr/share/doc/bandsaunter/copyright
|
||||
or at
|
||||
.UR https://www.gnu.org/licenses/
|
||||
.UE .
|
||||
.SH BUGS
|
||||
The DVB-T television driver claims these dongles on sight. If the receiver
|
||||
cannot be opened, that is almost always why: the package blacklists the
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
.\" Generated by packaging/make-browse-man.py -- do not edit by hand.
|
||||
.TH SAUNTERBROWSE 1 "2026-09-03" "bandsaunter 2026-09-03_03" "User Commands"
|
||||
.TH SAUNTERBROWSE 1 "2026-09-03" "bandsaunter 2026-09-03_05" "User Commands"
|
||||
.SH NAME
|
||||
saunterbrowse \- read and listen to what a bandsaunter scan collected
|
||||
.SH SYNOPSIS
|
||||
|
|
@ -473,6 +473,14 @@ The same thing as a map, to open in Google Earth.
|
|||
not exist or there is no terminal to draw on.
|
||||
.SH SEE ALSO
|
||||
.BR bandsaunter (1)
|
||||
.SH COPYING
|
||||
Copyright \(co 2026 The Dust Council. Free software under the GNU General
|
||||
Public License, version 3 or later; see
|
||||
.I /usr/share/doc/bandsaunter/copyright
|
||||
or
|
||||
.UR https://www.gnu.org/licenses/
|
||||
.UE .
|
||||
There is no warranty, to the extent permitted by law.
|
||||
.SH BUGS
|
||||
The list is read when the browser opens. Press
|
||||
.B r
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue