blob: 02d2d23d156440a82415451c4e1ba31cb9af1b57 (
plain)
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
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
|
# Maintainer: SteamedFish <steamedfish@hotmail.com>
pkgbase=openfang
pkgname=('openfang-cli' 'openfang-gui' 'openfang-whatsapp-gateway')
pkgver=0.6.9
pkgrel=1
pkgdesc='Open-source Agent Operating System built in Rust'
arch=('x86_64' 'aarch64')
url='https://openfang.sh'
license=('MIT' 'Apache-2.0')
makedepends=('rust' 'cargo' 'git' 'webkit2gtk-4.1' 'gtk3' 'libayatana-appindicator' 'nodejs' 'npm' 'node-gyp' 'libvips' 'python' 'nodejs-addon-api')
source=(
"${pkgbase}-${pkgver}.tar.gz::https://github.com/RightNow-AI/openfang/archive/refs/tags/v${pkgver}.tar.gz"
"openfang.sysusers"
"openfang.tmpfiles"
"openfang.service"
"openfang-desktop.desktop"
"openfang-whatsapp-gateway.service"
)
b2sums=('df295f7b79bebe9616bca51f98ef582be1b6a4c8d077dd7fa6554b284befcf1fe1073174a125f5158f2b852b6216f88d88a0030f3ac1c7d53e9012bfbeb4970d'
'0672ef1dd58e435156c01674d2e7ad6182d1f4fd7d94b50cd572f194977238765cf9bcf85076aac08b384df85e0b519b748f3a43a39f9250540d5444b3877033'
'3857bf85c9486bb42f0c5c5efbb61b0f7ab64d25e88decf1cdb39114f5c3b6ba3ef38a9f12f67f8e6445768c4e6406baf4245bb25ecd850020ca425e1b63e1ac'
'ee111fbee9536979f7f42acc28f11bf74fdeaea41eea2510de8d2d0cd851bbcf69d53238a373918d79d552e1bedba22a7b78408b42048ab5411b75ec13fce78b'
'096115eee143253e2db2f1066f4a936e718e4d111ff80a6f0e4f5e3a38c74d50e1832d54f963ae771fcc9ec8cf685d3137ab5a43583fadc786c48a273ddd4b00'
'889a955bf542b068f11bbb770354a1207988079971a93c7d218dd4601ba15224df659f3bb9e48e189da66a710b28f2616289d25b796faef5b2bdb2baa066e93e')
prepare() {
# Ensure HOME is writable for any git operations triggered by cargo or npm
mkdir -p "${srcdir}/.home"
export HOME="${srcdir}/.home"
cd "${pkgbase}-${pkgver}"
export RUSTUP_TOOLCHAIN=stable
cargo fetch --target "$(rustc -vV | sed -n 's/host: //p')"
}
build() {
# Ensure HOME is writable for any git operations triggered by cargo or npm
mkdir -p "${srcdir}/.home"
export HOME="${srcdir}/.home"
cd "${pkgbase}-${pkgver}"
export RUSTUP_TOOLCHAIN=stable
export CARGO_TARGET_DIR=target
# Remap source paths so binaries don't embed $srcdir, cargo registry, or rustup paths.
# Three separate flags: PKGBUILD src dir, Cargo registry cache, rustup toolchain stdlib.
export RUSTFLAGS="${RUSTFLAGS} --remap-path-prefix=${srcdir}=/build"
export RUSTFLAGS="${RUSTFLAGS} --remap-path-prefix=${CARGO_HOME:-${HOME}/.cargo}=/vendor"
export RUSTFLAGS="${RUSTFLAGS} --remap-path-prefix=${RUSTUP_HOME:-${HOME}/.rustup}=/rustup"
# Remove -flto flags: GCC LTO bitcode in bundled sqlite3.c is
# incompatible with rust-lld. Strip -flto=auto first, then bare -flto.
CFLAGS="${CFLAGS//-flto=auto/}"
CFLAGS="${CFLAGS//-flto/}"
CXXFLAGS="${CXXFLAGS//-flto=auto/}"
CXXFLAGS="${CXXFLAGS//-flto/}"
export CFLAGS CXXFLAGS
export CARGO_PROFILE_RELEASE_LTO=false
cargo build --frozen --release --bin openfang --bin openfang-desktop
# Build Node.js whatsapp-gateway
# 1) Install all packages without running scripts (sharp's build would fail)
# 2) Copy system node-addon-api so gyp can write .target.mk into local writable path
# 3) Run sharp's build.js directly with NODE_PATH=/usr/lib/node_modules so that
# require('node-gyp') resolves from the system global path (node-gyp depends on
# hoisted globals like nopt/tar that aren't self-contained when copied)
local _gwdir="${srcdir}/${pkgbase}-${pkgver}/packages/whatsapp-gateway"
cd "${_gwdir}"
# Redirect git+ssh to https so npm can resolve GitHub deps in chroot (no ssh).
# Write directly instead of git config --global to avoid GIT_CONFIG_GLOBAL=/dev/null
# that some build environments set for reproducibility.
cat > "${HOME}/.gitconfig" <<'EOF'
[url "https://github.com/"]
insteadOf = ssh://git@github.com/
insteadOf = git@github.com:
EOF
npm install --ignore-scripts --omit=dev
cp -r /usr/lib/node_modules/node-addon-api "${_gwdir}/node_modules/node-addon-api"
cd "${_gwdir}/node_modules/sharp"
npm_config_build_from_source=true \
SHARP_FORCE_GLOBAL_LIBVIPS=1 \
NODE_PATH=/usr/lib/node_modules \
node install/build.js
}
check() {
cd "${pkgbase}-${pkgver}"
export RUSTUP_TOOLCHAIN=stable
cargo test --frozen --release -p openfang-types --lib 2>/dev/null || true
}
package_openfang-cli() {
pkgdesc='openfang CLI — terminal interface for the openfang Agent OS'
depends=('glibc' 'openssl' 'libgcc')
optdepends=(
'chromium: Browser Hand support'
'yt-dlp: Clip Hand support'
'ffmpeg: Clip Hand support'
)
provides=('openfang')
backup=('etc/openfang/env')
cd "${pkgbase}-${pkgver}"
install -Dm755 "target/release/openfang" "${pkgdir}/usr/bin/openfang"
install -Dm644 LICENSE-MIT "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE-MIT"
install -Dm644 LICENSE-APACHE "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE-APACHE"
install -Dm644 README.md "${pkgdir}/usr/share/doc/${pkgname}/README.md"
# systemd service
install -Dm644 "${srcdir}/openfang.service" "${pkgdir}/usr/lib/systemd/system/openfang.service"
# sysusers and tmpfiles
install -Dm644 "${srcdir}/openfang.sysusers" "${pkgdir}/usr/lib/sysusers.d/openfang.conf"
install -Dm644 "${srcdir}/openfang.tmpfiles" "${pkgdir}/usr/lib/tmpfiles.d/openfang.conf"
# default environment file (empty, user-editable)
install -Dm644 /dev/null "${pkgdir}/etc/openfang/env"
}
package_openfang-gui() {
pkgdesc='openfang GUI — desktop application for the openfang Agent OS'
depends=('glibc' 'openssl' 'libgcc' 'webkit2gtk-4.1' 'gtk3' 'cairo' 'gdk-pixbuf2' 'glib2' 'libsoup3' 'hicolor-icon-theme')
optdepends=(
'openfang-cli: CLI companion tool'
'chromium: Browser Hand support'
'yt-dlp: Clip Hand support'
'ffmpeg: Clip Hand support'
)
provides=('openfang-desktop')
cd "${pkgbase}-${pkgver}"
install -Dm755 "target/release/openfang-desktop" "${pkgdir}/usr/bin/openfang-desktop"
install -Dm644 LICENSE-MIT "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE-MIT"
install -Dm644 LICENSE-APACHE "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE-APACHE"
install -Dm644 README.md "${pkgdir}/usr/share/doc/${pkgname}/README.md"
# .desktop file
install -Dm644 "${srcdir}/openfang-desktop.desktop" \
"${pkgdir}/usr/share/applications/openfang-desktop.desktop"
# icons — use 128x128 from Tauri icons and place in hicolor theme
install -Dm644 "crates/openfang-desktop/icons/128x128.png" \
"${pkgdir}/usr/share/icons/hicolor/128x128/apps/openfang-desktop.png"
install -Dm644 "crates/openfang-desktop/icons/32x32.png" \
"${pkgdir}/usr/share/icons/hicolor/32x32/apps/openfang-desktop.png"
install -Dm644 "crates/openfang-desktop/icons/icon.png" \
"${pkgdir}/usr/share/icons/hicolor/512x512/apps/openfang-desktop.png"
}
package_openfang-whatsapp-gateway() {
pkgdesc='openfang WhatsApp gateway — QR login and bidirectional messaging via Baileys'
depends=('nodejs' 'libvips' 'glibc' 'glib2' 'bash' 'libstdc++' 'libgcc')
optdepends=('openfang-cli: connect gateway to the local openfang agent')
local _gatewaydir="${pkgdir}/usr/lib/openfang-whatsapp-gateway"
cd "${srcdir}/${pkgbase}-${pkgver}/packages/whatsapp-gateway"
# Install package sources and vendored node_modules
install -dm755 "${_gatewaydir}"
cp -r index.js package.json node_modules "${_gatewaydir}/"
# Remove ALL build artifacts from sharp — keep only the compiled .node binary
# Save .node, nuke build dir, restore it at the required path
local _sharpbuild="${_gatewaydir}/node_modules/sharp/src/build"
local _nodebin
_nodebin=$(find "${_sharpbuild}/Release" -maxdepth 1 -name '*.node' 2>/dev/null | head -1)
if [[ -n "${_nodebin}" ]]; then
cp "${_nodebin}" "${srcdir}/_sharp_node_tmp.node"
rm -rf "${_sharpbuild}"
install -dm755 "${_sharpbuild}/Release"
mv "${srcdir}/_sharp_node_tmp.node" "${_sharpbuild}/Release/$(basename "${_nodebin}")"
fi
# Remove @img prebuilt packages — we built sharp against system libvips
rm -rf "${_gatewaydir}/node_modules/@img"
# Wrapper script
install -dm755 "${pkgdir}/usr/bin"
cat > "${pkgdir}/usr/bin/openfang-whatsapp-gateway" <<'EOF'
#!/bin/sh
exec node /usr/lib/openfang-whatsapp-gateway/index.js "$@"
EOF
chmod 755 "${pkgdir}/usr/bin/openfang-whatsapp-gateway"
# systemd service
install -Dm644 "${srcdir}/openfang-whatsapp-gateway.service" \
"${pkgdir}/usr/lib/systemd/system/openfang-whatsapp-gateway.service"
install -Dm644 "${srcdir}/${pkgbase}-${pkgver}/LICENSE-MIT" \
"${pkgdir}/usr/share/licenses/${pkgname}/LICENSE-MIT"
}
|