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.
3
pkgname=grokbot-linux-port-bin
4
pkgver=0.20.0
5
pkgrel=2
6
pkgdesc="Grok Bot desktop — wine-less Linux port (prebuilt tarball from GitHub Releases)"
7
arch=('x86_64')
8
url="https://github.com/Nichokas/grokbot-linux-port"
9
license=('custom')
10
depends=(
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
)
16
optdepends=('libnotify: desktop notifications')
17
provides=('grokbot-linux-port' 'grok-bot' 'grokbot')
18
conflicts=('grokbot-linux-port' 'grok-bot')
19
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")
20
sha256sums=('f3ba90d13894fce3522ff0521025d08938bcd649a46241badfe2b58ea7aa85ed')
21
22
package() {
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]
71
Name=Grok Bot
72
GenericName=Grok Bot
73
Comment=Grok Bot desktop agent (Linux port)
74
Exec=/opt/${pkgname}/grok-bot %U
75
Icon=grok-bot
76
Type=Application
77
Categories=Utility;Development;
78
StartupWMClass=grok-bot
79
MimeType=x-scheme-handler/grokbot;
80
Terminal=false
81
DESKTOP
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
96
Grok Bot is proprietary software. This package fetches the prebuilt Linux
97
tarball published at https://github.com/Nichokas/grokbot-linux-port/releases.
98
See upstream terms at https://grok.com and inside resources/app.asar.
99
LICENSE
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) | Severity | Rules |
|---|---|---|
| 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 |