battle-cats-rolls
Triggered rules
llm_review
The static rules flagged this MEDIUM, but an AI model (anthropic/claude-sonnet-4.6) reviewed the full PKGBUILD and judged it LOW (confidence 70%): The package builds from the project's own GitLab source and installs Ruby gems via bundler/gem from rubygems.org, which is normal dependency resolution; the flagged 'variable package name' is just standard gem install calls, and the external download at line 104 appears to be a curl health-check inside a launcher script rather than fetching and executing remote code. The main concerns are SKIP'd checksum, few votes, and gem dependencies resolved at build time from rubygems.org, but none of these constitute clear malicious behaviour.
-
PKGBUILD:30
gem install --no-document --install-dir "$GEM_HOME" bundler rake erb dalli -
PKGBUILD:60
gem install --no-document --install-dir "$GEM_HOME" bundler erb dalli
2 higher static findings superseded - not the current verdict (shown for transparency)
external_download_not_in_source
curl/wget fetches a URL on a non-allowlisted host that is not part of source=(), so it is not checksum-verified by makepkg.
-
PKGBUILD:104
until curl -s -o /dev/null -w "%{http_code}" http://localhost:8080 | grep -q "200" 2>/dev/null; do
alt_pkg_manager_install
A non-pip/npm package manager (pipx, uv, poetry, cargo install, go install, gem, conda…) fetches and builds an external package at build time, outside source=() and makepkg's checksums.
-
PKGBUILD:30
gem install --no-document --install-dir "$GEM_HOME" bundler rake erb dalli -
PKGBUILD:60
gem install --no-document --install-dir "$GEM_HOME" bundler erb dalli
PKGBUILD
3 offending line(s) highlighted# Maintainer: EduHoff <ehcs.business@gmail.com>
pkgname=battle-cats-rolls
pkgver=r1783.7aef471
pkgrel=1
pkgdesc="Local Battle Cats seed tracking server with high-performance C seeker"
arch=('x86_64')
url="https://gitlab.com/godfat/battle-cats-rolls"
license=("Apache-2.0")
depends=('ruby' 'memcached' 'clang' 'zenity' 'curl')
makedepends=('git')
provides=('battle-cats-rolls')
conflicts=('battle-cats-rolls')
source=("git+${url}.git")
md5sums=('SKIP')
pkgver() {
cd "${srcdir}/battle-cats-rolls"
printf "r%s.%s" "$(git rev-list --count HEAD)" "$(git rev-parse --short HEAD)"
}
build() {
cd "${srcdir}/battle-cats-rolls"
echo ":: Compiling VampireFlower C seeker engine..."
./Seeker/bin/build-VampireFlower.sh
echo ":: Extracting and building game data tables (build/*.yaml)..."
export GEM_HOME="${srcdir}/gem_bootstrap"
export PATH="$PATH:$GEM_HOME/bin"
gem install --no-document --install-dir "$GEM_HOME" bundler rake erb dalli
echo "gem 'erb'" >> Gemfile
bundle config set --local path "$GEM_HOME"
bundle install
rake build
}
package() {
cd "${srcdir}/battle-cats-rolls"
install -d "${pkgdir}/usr/share/webapps/battle-cats-rolls"
install -d "${pkgdir}/usr/bin"
install -d "${pkgdir}/usr/share/applications"
install -d "${pkgdir}/usr/share/pixmaps"
echo ":: Copying core files to application directory..."
cp -r Seeker bin config lib Gemfile config.ru Rakefile build data "${pkgdir}/usr/share/webapps/battle-cats-rolls/"
cp "${srcdir}/battle-cats-rolls/lib/battle-cats-rolls/asset/image/treasure.png" "${pkgdir}/usr/share/pixmaps/battle-cats-rolls.png"
[ -d public ] && cp -r public "${pkgdir}/usr/share/webapps/battle-cats-rolls/"
touch "${pkgdir}/usr/share/webapps/battle-cats-rolls/.env"
echo ":: Deploying sandboxed Ruby environment..."
export GEM_HOME="${pkgdir}/usr/share/webapps/battle-cats-rolls/vendor/bundle"
export PATH="$PATH:$GEM_HOME/bin"
gem install --no-document --install-dir "$GEM_HOME" bundler erb dalli
bundle config set --local path "$GEM_HOME"
bundle config set --local without 'cache:test'
bundle install --gemfile="${pkgdir}/usr/share/webapps/battle-cats-rolls/Gemfile"
find "${pkgdir}/usr/share/webapps/battle-cats-rolls" -type d -exec chmod 755 {} +
find "${pkgdir}/usr/share/webapps/battle-cats-rolls" -type f -exec chmod 644 {} +
if [ -d "${pkgdir}/usr/share/webapps/battle-cats-rolls/vendor/bundle/bin" ]; then
chmod +x "${pkgdir}/usr/share/webapps/battle-cats-rolls/vendor/bundle/bin/"*
fi
chmod +x "${pkgdir}/usr/share/webapps/battle-cats-rolls/bin/server"
chmod +x "${pkgdir}/usr/share/webapps/battle-cats-rolls/Seeker/Seeker-VampireFlower"
cat <<'EOF' > "${pkgdir}/usr/bin/battle-cats-rolls-run"
#!/bin/bash
echo "=================================================="
echo " BATTLE CATS ROLLS LOCAL SERVER "
echo "=================================================="
echo ""
if ! systemctl is-active --quiet memcached; then
echo ":: memcached is required for caching database records."
echo ":: Please enter your password to start the service:"
if ! sudo systemctl start memcached; then
echo "[-] Failed to start memcached. Press Enter to exit."
read -r
exit 1
fi
echo ""
fi
cd "/usr/share/webapps/battle-cats-rolls" || exit
export GEM_HOME="/usr/share/webapps/battle-cats-rolls/vendor/bundle"
export PATH="$PATH:$GEM_HOME/bin"
LOCAL_IP=$(ip route get 1.1.1.1 2>/dev/null | grep -oP 'src \K\S+')
[ -z "$LOCAL_IP" ] && LOCAL_IP="127.0.0.1"
# Monitor ativo em background aguardando o warmup estável do yahns
(
echo ":: Waiting for local service initialization..."
until curl -s -o /dev/null -w "%{http_code}" http://localhost:8080 | grep -q "200" 2>/dev/null; do
sleep 0.5
done
echo ":: Server is up and stable! Launching local instance in your browser..."
xdg-open "http://localhost:8080"
) &
echo ":: Starting application stack..."
echo ":: Local Address: http://localhost:8080"
echo ":: Network Access: http://${LOCAL_IP}:8080"
echo ":: To stop the server, simply close this terminal window."
echo "--------------------------------------------------"
if ! bundle exec ./bin/server; then
echo ""
echo "[-] Server crashed or failed to start."
echo ":: Press Enter to close this window."
read -r
fi
EOF
chmod +x "${pkgdir}/usr/bin/battle-cats-rolls-run"
cat <<'EOF' > "${pkgdir}/usr/bin/battle-cats-rolls-launcher"
#!/bin/bash
TERMINALS=('kitty' 'alacritty' 'ghostty' 'foot' 'gnome-terminal' 'konsole' 'xfce4-terminal' 'terminator' 'guake' 'yakuake')
FOUND_TERM=""
for term in "${TERMINALS[@]}"; do
if command -v "$term" &> /dev/null; then
FOUND_TERM="$term"
break
fi
done
if [ -z "$FOUND_TERM" ]; then
if command -v zenity &> /dev/null; then
FOUND_TERM=$(zenity --entry --title="Battle Cats Rolls" --text="Nenhum terminal padrão foi detectado.\nPor favor, digite o comando do seu emulador de terminal:")
fi
if [ -z "$FOUND_TERM" ]; then
exit 1
fi
fi
case "$FOUND_TERM" in
"kitty" | "foot")
$FOUND_TERM /usr/bin/battle-cats-rolls-run
;;
"alacritty" | "ghostty" | "terminator" | "guake" | "yakuake")
$FOUND_TERM -e /usr/bin/battle-cats-rolls-run
;;
"gnome-terminal" | "konsole" | "xfce4-terminal")
$FOUND_TERM -- /usr/bin/battle-cats-rolls-run
;;
*)
$FOUND_TERM -e /usr/bin/battle-cats-rolls-run
;;
esac
EOF
chmod +x "${pkgdir}/usr/bin/battle-cats-rolls-launcher"
cat <<EOF > "${pkgdir}/usr/share/applications/battle-cats-rolls.desktop"
[Desktop Entry]
Version=1.0
Type=Application
Name=Battle Cats Rolls
Comment=Launch the local seed tracking engine inside a terminal window
Exec=/usr/bin/battle-cats-rolls-launcher
Icon=battle-cats-rolls
Terminal=false
Categories=Game;Utility;
StartupNotify=true
EOF
}
Scan history
| Scanned at (UTC) | Severity | Rules |
|---|---|---|
| 2026-08-03 00:08:14 | LOW | 3 |
| 2026-08-02 00:16:08 | LOW | 3 |
| 2026-08-01 00:11:18 | LOW | 3 |
| 2026-07-31 00:14:10 | LOW | 3 |
| 2026-07-30 00:17:23 | LOW | 3 |
| 2026-07-29 00:25:53 | LOW | 3 |
| 2026-07-28 00:07:28 | LOW | 4 |
| 2026-07-27 00:24:32 | LOW | 4 |
| 2026-07-26 00:07:32 | LOW | 4 |
| 2026-07-25 00:13:44 | LOW | 4 |
| 2026-07-24 00:02:28 | LOW | 4 |
| 2026-07-23 00:14:47 | LOW | 4 |
| 2026-07-22 00:29:32 | LOW | 4 |
| 2026-07-21 00:24:15 | LOW | 4 |
| 2026-07-20 00:19:49 | LOW | 4 |
| 2026-07-19 00:17:08 | LOW | 4 |
| 2026-07-18 00:14:48 | LOW | 4 |
| 2026-07-17 00:06:16 | LOW | 4 |
| 2026-07-16 00:05:41 | LOW | 4 |
| 2026-07-15 00:09:25 | LOW | 4 |