grokbot-linux-port-bin

maintainer Nichokas · 0 votes · scanned 2026-08-18 00:03:42.021799
LOW
View on AUR ↗
Why flagged The package downloads a prebuilt tarball from a GitHub release, which is a common and generally acceptable practice for AUR packages; the source is verifiable, checksummed, and the build process performs reasonable checks for platform compatibility without executing untrusted code.

Triggered rules

LOW Few votes, recently uploaded zero_votes_recent

Uploaded within the last 14 days with 2 or fewer community votes — little peer review so far.

LOW AI review llm_review

An AI model (qwen/qwen3-235b-a22b-2507) reviewed this and agrees it is LOW (confidence 95%): The package downloads a prebuilt tarball from a GitHub release, which is a common and generally acceptable practice for AUR packages; the source is verifiable, checksummed, and the build process performs reasonable checks for platform compatibility without executing untrusted code.

PKGBUILD

1# Maintainer: Nichokas <https://github.com/Nichokas>
2# Binary variant — downloads the prebuilt Linux tarball from GitHub Releases.
3pkgname=grokbot-linux-port-bin
4pkgver=0.20.0
5pkgrel=2
6pkgdesc="Grok Bot desktop — wine-less Linux port (prebuilt tarball from GitHub Releases)"
7arch=('x86_64')
8url="https://github.com/Nichokas/grokbot-linux-port"
9license=('custom')
10depends=(
11 'alsa-lib' 'gtk3' 'nss' 'libxss' 'libxtst' 'libxrandr'
12 'libxdamage' 'libxcomposite' 'libxfixes' 'libdrm' 'mesa'
13 'libxkbcommon' 'at-spi2-core' 'cairo' 'pango'
14 'expat' 'hicolor-icon-theme'
15)
16optdepends=('libnotify: desktop notifications')
17provides=('grokbot-linux-port' 'grok-bot' 'grokbot')
18conflicts=('grokbot-linux-port' 'grok-bot')
19source=("Grok_Bot_${pkgver}_linux_x64.tar.gz::https://github.com/Nichokas/grokbot-linux-port/releases/download/v${pkgver}/Grok_Bot_${pkgver}_linux_x64.tar.gz")
20sha256sums=('f3ba90d13894fce3522ff0521025d08938bcd649a46241badfe2b58ea7aa85ed')
21
22package() {
23 local staged
24 staged="${srcdir}/Grok_Bot_${pkgver}_linux_x64"
25 if [[ ! -d "${staged}" ]]; then
26 echo "error: staged dir Grok_Bot_${pkgver}_linux_x64 not found under srcdir" >&2
27 ls -R "${srcdir}" | head -n 100 >&2
28 exit 1
29 fi
30
31 # Upstream tarball ships NSIS-derived restrictive modes (drwx------ on
32 # app.asar.unpacked); cp -a would preserve them and pacman would then
33 # install root-only directories. Normalise before copying.
34 chmod -R u+rwX,go+rX,go-w "${staged}"
35
36 # Refuse to package a tarball whose loadable native modules are still
37 # Windows PE binaries — they dlopen-fail at runtime with "invalid ELF
38 # header". Dead-on-Linux PE leftovers (win32 prebuild dirs, napi-rs
39 # *.win32-*.node filenames) are tolerated: Linux loaders never resolve them.
40 if [[ "${GROKBOT_ALLOW_BROKEN_NATIVE:-}" != "1" ]]; then
41 local mz_live
42 mz_live="$(find "${staged}" -name '*.node' -type f -exec sh -c \
43 'head -c 2 "$1" | grep -q MZ && printf "%s\n" "$1"' _ {} \; 2>/dev/null \
44 | grep -v -e '/prebuilds/win32-' -e '\.win32-[^/]*\.node$' || true)"
45 if [[ -n "${mz_live}" ]]; then
46 echo "error: loadable .node files in the tarball are win32 (MZ header) — upstream rebuild failed:" >&2
47 printf '%s\n' "${mz_live}" | head -n 10 >&2
48 echo "hint: install grokbot-linux-port (builds from source) instead, or rebuild upstream via scripts/port.sh" >&2
49 echo "hint: GROKBOT_ALLOW_BROKEN_NATIVE=1 makepkg -si forces a known-broken install (debug only)" >&2
50 exit 1
51 fi
52 fi
53
54 install -dm755 "${pkgdir}/opt/${pkgname}" "${pkgdir}/usr/bin" \
55 "${pkgdir}/usr/share/applications" \
56 "${pkgdir}/usr/share/icons/hicolor/256x256/apps" \
57 "${pkgdir}/usr/share/licenses/${pkgname}"
58
59 cp -a "${staged}/." "${pkgdir}/opt/${pkgname}/"
60 # Some tarballs keep electron as 'grok-bot' already; normalize
61 if [[ ! -x "${pkgdir}/opt/${pkgname}/grok-bot" && -x "${pkgdir}/opt/${pkgname}/electron" ]]; then
62 mv "${pkgdir}/opt/${pkgname}/electron" "${pkgdir}/opt/${pkgname}/grok-bot"
63 fi
64 chmod +x "${pkgdir}/opt/${pkgname}/grok-bot"
65
66 ln -sf "/opt/${pkgname}/grok-bot" "${pkgdir}/usr/bin/grok-bot"
67 ln -sf "/opt/${pkgname}/grok-bot" "${pkgdir}/usr/bin/grokbot"
68
69 cat > "${pkgdir}/usr/share/applications/grok-bot.desktop" <<DESKTOP
70[Desktop Entry]
71Name=Grok Bot
72GenericName=Grok Bot
73Comment=Grok Bot desktop agent (Linux port)
74Exec=/opt/${pkgname}/grok-bot %U
75Icon=grok-bot
76Type=Application
77Categories=Utility;Development;
78StartupWMClass=grok-bot
79MimeType=x-scheme-handler/grokbot;
80Terminal=false
81DESKTOP
82
83 local icon=""
84 for cand in \
85 "${staged}/resources/app.asar.unpacked/dist/renderer/assets/app-icon-"*.png \
86 "${staged}/grok-bot.png" \
87 ; do [[ -f "${cand}" ]] && { icon="${cand}"; break; } ; done
88 if [[ -z "${icon}" ]]; then
89 icon="$(find "${staged}" -name 'app-icon*.png' -print -quit 2>/dev/null || true)"
90 fi
91 if [[ -n "${icon}" && -f "${icon}" ]]; then
92 install -Dm644 "${icon}" "${pkgdir}/usr/share/icons/hicolor/256x256/apps/grok-bot.png"
93 fi
94
95 cat > "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE" <<LICENSE
96Grok Bot is proprietary software. This package fetches the prebuilt Linux
97tarball published at https://github.com/Nichokas/grokbot-linux-port/releases.
98See upstream terms at https://grok.com and inside resources/app.asar.
99LICENSE
100
101 if [[ -f "${pkgdir}/opt/${pkgname}/chrome-sandbox" ]]; then
102 chmod 4755 "${pkgdir}/opt/${pkgname}/chrome-sandbox"
103 fi
104}
105

Changes since previous scan

--- PKGBUILD @ 2026-08-14 21:29
+++ PKGBUILD @ 2026-08-18 00:03
@@ -2,8 +2,8 @@
# Binary variant — downloads the prebuilt Linux tarball from GitHub Releases.
pkgname=grokbot-linux-port-bin
pkgver=0.20.0
-pkgrel=1
-pkgdesc="Grok Bot desktop: wine-less Linux port (prebuilt tarball from GitHub)"
+pkgrel=2
+pkgdesc="Grok Bot desktop — wine-less Linux port (prebuilt tarball from GitHub Releases)"
arch=('x86_64')
url="https://github.com/Nichokas/grokbot-linux-port"
license=('custom')
@@ -17,7 +17,7 @@
provides=('grokbot-linux-port' 'grok-bot' 'grokbot')
conflicts=('grokbot-linux-port' 'grok-bot')
source=("Grok_Bot_${pkgver}_linux_x64.tar.gz::https://github.com/Nichokas/grokbot-linux-port/releases/download/v${pkgver}/Grok_Bot_${pkgver}_linux_x64.tar.gz")
-sha256sums=('e210a150a58a01248ae2c8c032988cfe27a491c9b9ba070b048f0a5b1e90b35b')
+sha256sums=('f3ba90d13894fce3522ff0521025d08938bcd649a46241badfe2b58ea7aa85ed')
package() {
local staged
@@ -28,10 +28,33 @@
exit 1
fi
+ # Upstream tarball ships NSIS-derived restrictive modes (drwx------ on
+ # app.asar.unpacked); cp -a would preserve them and pacman would then
+ # install root-only directories. Normalise before copying.
+ chmod -R u+rwX,go+rX,go-w "${staged}"
+
+ # Refuse to package a tarball whose loadable native modules are still
+ # Windows PE binaries — they dlopen-fail at runtime with "invalid ELF
+ # header". Dead-on-Linux PE leftovers (win32 prebuild dirs, napi-rs
+ # *.win32-*.node filenames) are tolerated: Linux loaders never resolve them.
+ if [[ "${GROKBOT_ALLOW_BROKEN_NATIVE:-}" != "1" ]]; then
+ local mz_live
+ mz_live="$(find "${staged}" -name '*.node' -type f -exec sh -c \
+ 'head -c 2 "$1" | grep -q MZ && printf "%s\n" "$1"' _ {} \; 2>/dev/null \
+ | grep -v -e '/prebuilds/win32-' -e '\.win32-[^/]*\.node$' || true)"
+ if [[ -n "${mz_live}" ]]; then
+ echo "error: loadable .node files in the tarball are win32 (MZ header) — upstream rebuild failed:" >&2
+ printf '%s\n' "${mz_live}" | head -n 10 >&2
+ echo "hint: install grokbot-linux-port (builds from source) instead, or rebuild upstream via scripts/port.sh" >&2
+ echo "hint: GROKBOT_ALLOW_BROKEN_NATIVE=1 makepkg -si forces a known-broken install (debug only)" >&2
+ exit 1
+ fi
+ fi
+
install -dm755 "${pkgdir}/opt/${pkgname}" "${pkgdir}/usr/bin" \
- "${pkgdir}/usr/share/applications" \
- "${pkgdir}/usr/share/icons/hicolor/256x256/apps" \
- "${pkgdir}/usr/share/licenses/${pkgname}"
+ "${pkgdir}/usr/share/applications" \
+ "${pkgdir}/usr/share/icons/hicolor/256x256/apps" \
+ "${pkgdir}/usr/share/licenses/${pkgname}"
cp -a "${staged}/." "${pkgdir}/opt/${pkgname}/"
# Some tarballs keep electron as 'grok-bot' already; normalize
@@ -43,7 +66,7 @@
ln -sf "/opt/${pkgname}/grok-bot" "${pkgdir}/usr/bin/grok-bot"
ln -sf "/opt/${pkgname}/grok-bot" "${pkgdir}/usr/bin/grokbot"
- cat >"${pkgdir}/usr/share/applications/grok-bot.desktop" <<DESKTOP
+ cat > "${pkgdir}/usr/share/applications/grok-bot.desktop" <<DESKTOP
[Desktop Entry]
Name=Grok Bot
GenericName=Grok Bot
@@ -60,10 +83,8 @@
local icon=""
for cand in \
"${staged}/resources/app.asar.unpacked/dist/renderer/assets/app-icon-"*.png \
- "${staged}/grok-bot.png"; do [[ -f "${cand}" ]] && {
- icon="${cand}"
- break
- }; done
+ "${staged}/grok-bot.png" \
+ ; do [[ -f "${cand}" ]] && { icon="${cand}"; break; } ; done
if [[ -z "${icon}" ]]; then
icon="$(find "${staged}" -name 'app-icon*.png' -print -quit 2>/dev/null || true)"
fi
@@ -71,7 +92,7 @@
install -Dm644 "${icon}" "${pkgdir}/usr/share/icons/hicolor/256x256/apps/grok-bot.png"
fi
- cat >"${pkgdir}/usr/share/licenses/${pkgname}/LICENSE" <<LICENSE
+ cat > "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE" <<LICENSE
Grok Bot is proprietary software. This package fetches the prebuilt Linux
tarball published at https://github.com/Nichokas/grokbot-linux-port/releases.
See upstream terms at https://grok.com and inside resources/app.asar.

Scan history

Scanned at (UTC)SeverityRules
2026-08-18 00:03:42 LOW 2
2026-08-17 00:18:29 LOW 2
2026-08-16 00:03:42 LOW 2
2026-08-15 00:26:13 LOW 2
2026-08-14 23:30:04 LOW 2
2026-08-14 21:29:33 LOW 2

Report a package

Reports go to the AURWatch maintainer (one person) and are read by hand. No login required.

0 / 4000
Your suggestion