1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
|
Name: meshbay-node
Version: 0.6.0
Release: 1%{?dist}
Summary: MeshBay Node — local file host, streaming server, and group daemon
License: AGPLv3+
URL: https://meshbay.org
Source0: %{name}-%{version}.tar.gz
BuildArch: noarch
BuildRequires: python3-devel >= 3.12
BuildRequires: python3-pip
BuildRequires: python3-hatchling
Requires: python3 >= 3.12
Requires: python3-meshbay-common = %{version}
Requires: python3-fastapi
Requires: python3-uvicorn
Requires: python3-httpx
Requires: python3-watchdog
Requires: python3-aioquic >= 1.0
Requires: python3-aioice
Requires: python3-pyjwt
Requires: python3-blake3
Requires: python3-msgpack
Requires: python3-zstandard
# Optional: ffmpeg for HLS streaming
Recommends: ffmpeg
%description
MeshBay Node indexes local directories and serves encrypted files
to authenticated group members over QUIC (MNP v2) or TCP+TLS (MNP v1).
Includes a local web UI at http://localhost:18000.
%prep
%autosetup
%build
%{python3} -m pip wheel --no-deps --wheel-dir dist .
%install
%{python3} -m pip install --root %{buildroot} --no-index --find-links dist meshbay-node
# Two units, because there are two personas and one file cannot be both.
#
# The SYSTEM template carries User=%%i and is instantiated per person by root
# (`systemctl enable --now meshbay-node@alice`) — the server case. A *user* unit
# cannot carry User= at all: it already runs as its owner, and systemd refuses
# the file. This spec used to install the template into the user unit directory,
# where it could never have started.
install -Dm644 packaging/systemd/meshbay-node.service \
%{buildroot}%{_unitdir}/meshbay-node@.service
install -Dm644 packaging/systemd/meshbay-node-user.service \
%{buildroot}%{_userunitdir}/meshbay-node.service
%files
%license LICENSE
%doc README.md
%{python3_sitelib}/meshbay_node/
%{python3_sitelib}/meshbay_node-*.dist-info/
%{_bindir}/meshbay-node
%{_unitdir}/meshbay-node@.service
%{_userunitdir}/meshbay-node.service
%changelog
* Sun Aug 23 2026 MeshBay Team <team@meshbay.org> - 0.6.0-1
- Per-group application enablement: roster setting, signed apps_enabled op,
enforced by the same admin-authority check as member_upload
* Sun Aug 16 2026 MeshBay Team <team@meshbay.org> - 0.5.0-1
- Abandoned video streams release their transcode slot at once
- Background tasks are held, so none is collected mid-flight losing a slot
- ffmpeg is reaped without deadlocking on its own unread output
- Chunk replies wait for room on the channel instead of queueing 8 MB
- Chat history pages backwards; upload names accept any script, and errors name the file
* Sun Aug 16 2026 MeshBay Team <team@meshbay.org> - 0.4.0-1
- No functional change; released in step with the other packages
* Sat Aug 15 2026 MeshBay Team <team@meshbay.org> - 0.3.0-1
- Video streaming is paced by the client; stream_stop frees the transcode slot
- Operator can remove an empty directory and revoke a member over MNP
- meshbay-node group add: host another of your hub groups
- admin_pk_ed25519 removed; the roster is the only source of node authority
* Fri Aug 14 2026 MeshBay Team <team@meshbay.org> - 0.2.0-1
- Node wraps the group key itself; members are admitted from a local roster
- Identity keys are per node, created at first contact and pinned there
- Operator surface over SSH: operator pair, member list|invite|revoke|unpin
- Unauthenticated HTTP file API and TCP transport removed (C1, C6)
* Sat Aug 09 2026 MeshBay Team <team@meshbay.org> - 0.1.0-1
- Initial package
|