# 07 — Packaging & install layout Owner: lane **PKG/QA**. Target: Ubuntu 26.04 LTS. ## Install layout (.deb) ``` /usr/bin/veloxd /usr/bin/velox-gui /usr/bin/velox # CLI /usr/libexec/velox/velox-nmhost # native messaging host /usr/lib/x86_64-linux-gnu/libveloxcore.so.1 /usr/share/applications/velox.desktop /usr/share/icons/hicolor/*/apps/velox.png /usr/share/man/man1/velox.1.gz /usr/lib/systemd/user/velox.service /usr/lib/systemd/user/velox.socket # socket activation /usr/lib/mozilla/native-messaging-hosts/com.velox.host.json /etc/xdg/autostart/velox-gui.desktop # optional, off by default ``` `postinst` additionally drops per-user native-messaging manifests for the packaging formats that need them, and **detects whether Firefox is a snap** — if so it prints (and the GUI's first-run wizard shows) a one-line note that the extension will pair over loopback. ## Package matrix | Format | Priority | Notes | |---|---|---| | `.deb` via PPA | **Primary** | The only format where native messaging, systemd user units and Secret Service all behave predictably | | Flatpak | Secondary | The sandbox changes native messaging *again*; test explicitly, don't assume. Needs `--filesystem=xdg-download` and a portal-based folder picker | | AppImage | Optional | Convenient for testing; if it bundles Qt, honour LGPLv3 relink terms (`docs/06` R5) | | Snap | **Not planned** | Confinement fights both native messaging and arbitrary download destinations. Revisit only if there's demand | ## Firefox extension distribution Signed XPI on **addons.mozilla.org**. Ship the source with a reproducible build script (AMO requires it for minified/bundled submissions). The `.deb` does *not* bundle the XPI — it links to AMO from the first-run wizard, so extension updates flow through Firefox's own update channel rather than through apt. ## Release checklist - [ ] `lintian` clean - [ ] Fresh 26.04 VM: install → install extension → M2 vertical slice passes with snap Firefox - [ ] Upgrade from N-1: DB migrates, in-flight `.veloxpart` files still resume - [ ] Uninstall: manifests, units and sockets removed; user data untouched unless purged - [ ] `systemctl --user` units enabled and socket-activation verified from cold boot - [ ] Protocol `VERSION` matches between the shipped daemon and the shipped extension, and a deliberate mismatch produces the "Velox needs updating" message rather than a hang - [ ] Licence audit: Qt (LGPLv3, dynamic), libcurl, SQLite, ffmpeg, icon set