DAEMON landed packaging/nativehost/, packaging/systemd/{velox.service,velox.socket}
(real sd_listen_fds() socket activation) and cli/man/velox.1 on main while this was
in flight, duplicating paths this branch had drafted independently. Per CLAUDE.md
(packaging/nativehost/ is DAEMON's; the rest of packaging/ is PKG/QA's), DAEMON's
copies are kept as the single source and this branch's packaging/native-messaging/,
packaging/man/velox.1 and stale packaging/systemd/velox.service are dropped rather
than maintained twice. The root CMakeLists.txt's install() rules now point at
DAEMON's paths directly, install both systemd units (not just velox.service), and
docs/07-packaging.md / packaging/README.md no longer claim there's no socket
activation — there is, and this package now ships it.
Adds the local-test-only .deb itself: debian/{control,rules,postinst,postrm,
changelog,copyright}, a placeholder icon set, the desktop entry and PKG/QA's own
man pages (veloxd.8, velox-gui.1 — velox.1 stays DAEMON's). libveloxcore stays
static (no consumer needs a .so yet); pairing has no real approval UI in this
build (D1 unbuilt), so postinst and packaging/README.md both say VELOX_PAIR_AUTO=1
is required and print it prominently. No PPA, no GPG — local dpkg -i only.
Verified live: dpkg-buildpackage -us -uc -b, dpkg -i, socket activation (systemctl
--user enable --now velox.socket), `velox ls` against the running daemon, lintian
clean, dpkg -r removes the manifest/units and leaves $XDG_DATA_HOME/velox alone.
.gitignore now excludes dpkg-buildpackage's debhelper build tree and obj-*/ (the
debuild output dir) — debian/control et al. stay tracked, everything debhelper
regenerates does not.
Co-Authored-By: Claude Sonnet 5 <[email protected]>
Claude-Session: https://claude.ai/code/session_0176u3fTrxegrGNm2yC7r69W
6.0 KiB
Owner: lane PKG/QA. See ../docs/07-packaging.md.
.deb — local test build only
There is no PPA, no GPG signing, no Launchpad wiring here. This produces a .deb you
install with dpkg -i on the box you built it on (or an identical one), for testing —
not something to hand to a user or publish anywhere. See docs/07-packaging.md's
package matrix for the eventual PPA plan.
sudo ./tools/bootstrap.sh --packaging # debhelper, dpkg-dev, lintian, devscripts, fakeroot
dpkg-buildpackage -us -uc -b # from the repo root; -b = binary only, no signing
sudo dpkg -i ../velox_0.1.0-1_amd64.deb
lintian ../velox_0.1.0-1_amd64.deb
Uninstall: sudo dpkg -r velox (or sudo dpkg -P velox to purge — see below for what
purge does and does not do here).
Known limitations of this build — read before relying on any of these
-
libveloxcoreis static, not.so.1. The install layout indocs/07-packaging.mdoriginally called for a shared, versionedlibveloxcore.so.1; the user decided against building one for now (no consumer needs it as a shared object yet, and it would need aSOVERSIONadded to CORE's owncore/CMakeLists.txt). The doc was corrected in the same commit as this packaging work — it no longer describes something unshipped. -
Placeholder app icon.
gui/resources/icons/(GUI's lane) is empty — no real icon art exists anywhere in the repo yet.packaging/icons/hicolor/*/apps/velox.pngis a plain generated placeholder (flat color, a download-arrow glyph), good enough to install correctly and passdesktop-file-validate/lintian's icon checks, and nothing more. Replace it before any real release — and do the icon-set licence auditdocs/07-packaging.md's release checklist asks for once real art exists (this placeholder was drawn from scratch for this package, so it has no licence question of its own, but it is not real Velox branding either). -
No license has been chosen for Velox's own source yet. There is no top-level
LICENSEfile in the repo.debian/copyrightsays so plainly (License: Unlicensed-TODO) rather than inventing one — that is a real project decision, above any one lane. Expectlintianto flag this package over it; that is lintian doing its job, not a bug in this packaging, and it stays a known exception to "lintian clean" until the project adopts a license. The release checklist's "Licence audit" item (Qt, libcurl, SQLite, ffmpeg, icon set) is separate and still open regardless. -
Pairing has no real approval UI in this build.
libdbus-1-devis not in this build'sBuild-Depends(D1's GUI-dialog/desktop-notification approver needs it and isn't wired up yet —daemon/src/main.cppstill usesEnvAutoApproverunconditionally). That approver auto-rejects every pairing request unlessVELOX_PAIR_AUTO=1is set inveloxd's environment — there is no prompt, no accept/decline, it is all-or-nothing.postinstprints this prominently after install; it is repeated here so it isn't missed by anyone reading only one of the two. Do not setVELOX_PAIR_AUTO=1on a machine or account where auto-accepting every pairing request is unacceptable. -
Socket activation is real.
velox.serviceandvelox.socketboth ship, verbatim from DAEMON'spackaging/systemd/README.md—veloxdreceives the pre-bound fd viasd_listen_fds()(daemon/src/rpc/systemd_activation.cpp) rather than binding its own socket.debian/rulesdoes not disabledh_installsystemduser(only the system-leveldh_installsystemd, since these are--userunits); debhelper finds both units underlib/systemd/user/in the install tree and enables the pair together (Also=velox.socketinvelox.service's[Install]). -
The systemd
--userservice starts enabled for your next login, not this one. debhelper'sdh_installsystemduser(verified in the built package'spostinst) marksvelox.serviceenabled automatically — that takes effect the next time each user'ssystemd --userinstance starts. It cannot reach an already-running session from a root maintainer script, so for the session you're in right now,postinstprints:systemctl --user daemon-reload systemctl --user start velox.service -
dpkg -P velox(purge) does not delete user data. The uninstall test this package is built to pass is "manifests, units and sockets removed; user data untouched unless purged" — this build is deliberately conservative and leaves$XDG_DATA_HOME/velox(normally~/.local/share/velox, the task database) alone on bothremoveandpurge, for every account. A root maintainer script deleting per-user data across every account on the system is exactly the kind of destructive, hard-to-test operation that deserves its own design pass, not a first cut bolted on here.postrmonly ever undoes whatpostinstdid: the per-user native-messaging manifest it copied in.
The uninstall test, concretely
What docs/07-packaging.md's release checklist asks for, and what this build actually
does:
Removed on dpkg -r/-P? |
|
|---|---|
/usr/bin/{veloxd,velox,velox-gui}, /usr/libexec/velox/velox-nmhost |
yes — dpkg itself, ordinary package files |
/usr/lib/systemd/user/{velox.service,velox.socket} |
yes — same |
/usr/lib/mozilla/native-messaging-hosts/com.velox.host.json |
yes — same |
Per-user ~/.mozilla/native-messaging-hosts/com.velox.host.json |
yes — postrm, both remove and purge |
$XDG_DATA_HOME/velox (task DB, settings) |
no, on either remove or purge — see above |
Native messaging
velox-nmhost (DAEMON's nmhost/) and its manifest (DAEMON's
packaging/nativehost/com.velox.host.json) now ship in this package — the top-level
CMakeLists.txt's install rules are guarded on if(TARGET velox-nmhost), the same way its
add_subdirectory() calls are, so this lit up automatically the day that lane merged, no
packaging change needed on this end.