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
|
Name: meshbay-cli
Version: __VERSION__
Release: 1%{?dist}
Summary: MeshBay command-line client — a member's groups and files, from a terminal
# The Python packages only the client needs go with it, each under its own
# licence: /opt/meshbay-cli/THIRD-PARTY-NOTICES.txt lists them.
License: AGPL-3.0-or-later
URL: https://meshbay.org
AutoReqProv: no
# Not noarch: argon2-cffi's bindings are compiled code, as meshbay-common's are.
Requires: meshbay-common = %{version}
# The interactive chat's right-click paste reads the clipboard with one of them.
Recommends: (wl-clipboard or xclip)
%description
meshbay-cli signs in to a MeshBay hub, lists the groups the account belongs
to and their folders, and downloads and uploads files, directly with the node
serving each group and end-to-end encrypted. With no argument it opens an
interactive two-pane view.
Installs into the shared venv at /opt/meshbay-common/venv/, with the Python
packages only the client needs (Textual, keyring, argon2-cffi).
%install
cp -a %{_staging_root}/* %{buildroot}/
install -Dm644 -t %{buildroot}%{_licensedir}/%{name} %{_repo_root}/LICENSE
# After the whole transaction, so that meshbay-common's venv is in place. The
# client runs as an unprivileged user, who cannot write bytecode into /opt:
# compiled here once, or every run compiles Textual again in memory.
%posttrans
site=$(echo /opt/meshbay-common/venv/lib/python3.*/site-packages)
while IFS= read -r entry; do
[ -d "$site/$entry" ] || continue
/opt/meshbay-common/venv/bin/python -m compileall -q "$site/$entry" >/dev/null 2>&1 || true
done < /opt/meshbay-cli/site-packages.list
# The client's files live in meshbay-common's venv: the bytecode compiled next
# to them is removed, or rpm cannot remove the directories it sits in. Before
# an upgrade too, while the list still names what the old version shipped.
%pre
if [ "$1" -ge 2 ] && [ -f /opt/meshbay-cli/site-packages.list ]; then
site=$(echo /opt/meshbay-common/venv/lib/python3.*/site-packages)
while IFS= read -r entry; do
[ -n "$entry" ] && [ -d "$site/$entry" ] || continue
find "$site/$entry" -depth -type d -name __pycache__ \
-exec rm -rf {} + 2>/dev/null || true
done < /opt/meshbay-cli/site-packages.list
fi
%preun
if [ "$1" -eq 0 ]; then
site=$(echo /opt/meshbay-common/venv/lib/python3.*/site-packages)
while IFS= read -r entry; do
[ -n "$entry" ] && [ -d "$site/$entry" ] || continue
find "$site/$entry" -depth -type d -name __pycache__ \
-exec rm -rf {} + 2>/dev/null || true
done < /opt/meshbay-cli/site-packages.list
fi
%files -f %{_staging_root}.files
%license %{_licensedir}/%{name}
/opt/meshbay-cli
/usr/bin/meshbay-cli
%{_mandir}/man1/meshbay-cli.1*
%{_datadir}/bash-completion/completions/meshbay-cli
%changelog
* Wed Oct 14 2026 MeshBay Team <devel@meshbay.org> - %{version}-1
- First package: the command-line client
|