blob: ccacb811243c0a699619f5c76cd6906f0ae5bfcd (
plain) (
blame)
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
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
|
#!/usr/bin/env bash
# Build all MeshBay packages for the current platform.
#
# Usage:
# ./build-packages.sh # auto-detect format (deb on Ubuntu, rpm on Fedora)
# ./build-packages.sh deb # force .deb
# ./build-packages.sh rpm # force .rpm
# ./build-packages.sh deb --arm64 # arm64 .deb (Pi)
#
# Expects to run on the target machine:
# - Ubuntu 26.04 (cbesson@meshbay.org) for .deb amd64
# - Fedora 44 (local) for .rpm x86_64
# - Raspberry Pi for .deb arm64 (deferred)
#
# Output: packages in $STAGING/out/
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
REPO="$(cd "$SCRIPT_DIR/../.." && pwd)"
STAGING="${MESHBAY_BUILD_DIR:-/tmp/meshbay-build}"
OUT="$STAGING/out"
# --- Detect format --------------------------------------------------------
FORMAT="${1:-auto}"
shift 2>/dev/null || true
ARM64_FLAG=""
for arg in "$@"; do
[ "$arg" = "--arm64" ] && ARM64_FLAG="--arm64"
done
if [ "$FORMAT" = "auto" ]; then
if [ -f /etc/debian_version ]; then
FORMAT="deb"
elif [ -f /etc/fedora-release ] || [ -f /etc/redhat-release ]; then
FORMAT="rpm"
else
echo "!! Cannot detect OS — pass 'deb' or 'rpm' as argument" >&2
exit 1
fi
fi
ARCH=$(dpkg --print-architecture 2>/dev/null || rpm --eval '%{_arch}' 2>/dev/null || uname -m)
if [ -n "$ARM64_FLAG" ]; then
ARCH="arm64"
fi
VERSION=$(python3 -c "
import tomllib, pathlib
p = pathlib.Path('$REPO/packages/meshbay-common/pyproject.toml')
print(tomllib.loads(p.read_text())['project']['version'])
")
echo "========================================"
echo " MeshBay $VERSION — $FORMAT $ARCH"
echo "========================================"
echo " Repo: $REPO"
echo " Staging: $STAGING"
echo " Output: $OUT"
echo ""
rm -rf "$OUT"
mkdir -p "$OUT"
# --- Step 1: Build staging trees ------------------------------------------
echo "--- [1/4] meshbay-common (shared venv + all deps) ---"
bash "$SCRIPT_DIR/build-common.sh" "$STAGING"
echo ""
echo "--- [2/4] meshbay-hub ---"
bash "$SCRIPT_DIR/build-hub.sh" "$STAGING"
echo ""
echo "--- [3/4] meshbay-node ---"
bash "$SCRIPT_DIR/build-node.sh" "$STAGING"
echo ""
echo "--- [4/4] meshbay-client ---"
bash "$SCRIPT_DIR/build-client.sh" "$STAGING" $ARM64_FLAG
# --- Step 2: Package ------------------------------------------------------
echo ""
echo "--- Packaging ($FORMAT) ---"
if [ "$FORMAT" = "deb" ]; then
build_deb() {
local pkg="$1"
local root="$STAGING/${pkg}-root"
local deb_src="$REPO/packaging/deb/$pkg/DEBIAN"
local deb_dir="$root/DEBIAN"
mkdir -p "$deb_dir"
for f in "$deb_src"/*; do
[ -f "$f" ] || continue
sed -e "s/__VERSION__/$VERSION/g" \
-e "s/__ARCH__/$ARCH/g" \
"$f" > "$deb_dir/$(basename "$f")"
chmod 755 "$deb_dir/$(basename "$f")" 2>/dev/null || true
done
# control files should be 644, scripts 755
[ -f "$deb_dir/control" ] && chmod 644 "$deb_dir/control"
[ -f "$deb_dir/conffiles" ] && chmod 644 "$deb_dir/conffiles"
dpkg-deb --build --root-owner-group "$root" "$OUT/${pkg}_${VERSION}_${ARCH}.deb"
echo " -> $OUT/${pkg}_${VERSION}_${ARCH}.deb"
}
build_deb meshbay-common
build_deb meshbay-hub
build_deb meshbay-node
build_deb meshbay-client
elif [ "$FORMAT" = "rpm" ]; then
RPMBUILD_DIR="$STAGING/rpmbuild"
rm -rf "$RPMBUILD_DIR"
mkdir -p "$RPMBUILD_DIR"/{SPECS,SOURCES,BUILD,RPMS,SRPMS}
build_rpm() {
local pkg="$1"
local spec="$REPO/packaging/rpm/${pkg}.spec"
local root="$STAGING/${pkg}-root"
# Substitute version and pass the staging root as a macro
sed "s/__VERSION__/$VERSION/g" "$spec" > "$RPMBUILD_DIR/SPECS/${pkg}.spec"
rpmbuild \
--define "_topdir $RPMBUILD_DIR" \
--define "_staging_root $root" \
-bb "$RPMBUILD_DIR/SPECS/${pkg}.spec" 2>&1 | tail -5
local rpm_file
rpm_file=$(find "$RPMBUILD_DIR/RPMS" -name "${pkg}-${VERSION}*.rpm" -print -quit)
if [ -n "$rpm_file" ]; then
cp "$rpm_file" "$OUT/"
echo " -> $OUT/$(basename "$rpm_file")"
fi
}
build_rpm meshbay-common
build_rpm meshbay-hub
build_rpm meshbay-node
build_rpm meshbay-client
fi
# --- Summary --------------------------------------------------------------
echo ""
echo "========================================"
echo " Build complete"
echo "========================================"
ls -lh "$OUT"/
echo ""
echo "Install order:"
echo " 1. meshbay-common"
echo " 2. meshbay-hub and/or meshbay-node"
echo " 3. meshbay-client"
|