mirror of
https://github.com/archr-linux/Arch-R.git
synced 2026-07-12 18:19:42 -07:00
a631e9b3c5
With CONFIG_IKCONFIG=n (correct for production), /proc/config.gz is not available. The script now reads /boot/config-$(uname -r) as primary source and falls back to /proc/config.gz only if IKCONFIG is enabled. Also removed FRAME_POINTER check (ARM64 forces it via Kconfig select, checking if it's disabled always fails) — now shown as informational. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
136 lines
5.7 KiB
Bash
Executable File
136 lines
5.7 KiB
Bash
Executable File
#!/bin/bash
|
|
# ArchR Build Audit Script
|
|
# Checks for debug flags, sanitizers, and misconfigurations in production builds
|
|
# Run on the R36S device: bash /flash/audit-build.sh (copy to boot partition)
|
|
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
NC='\033[0m'
|
|
PASS=0; WARN=0; FAIL=0
|
|
|
|
check() {
|
|
local label="$1" expected="$2" actual="$3"
|
|
if [ "$actual" = "$expected" ]; then
|
|
echo -e " ${GREEN}[PASS]${NC} $label = $actual"
|
|
PASS=$((PASS+1))
|
|
else
|
|
echo -e " ${RED}[FAIL]${NC} $label = $actual (expected: $expected)"
|
|
FAIL=$((FAIL+1))
|
|
fi
|
|
}
|
|
|
|
warn() {
|
|
echo -e " ${YELLOW}[WARN]${NC} $1"
|
|
WARN=$((WARN+1))
|
|
}
|
|
|
|
echo "========================================"
|
|
echo " ArchR Production Build Audit"
|
|
echo " $(date)"
|
|
echo " $(uname -r) on $(cat /etc/os-release | grep ^NAME= | cut -d= -f2)"
|
|
echo "========================================"
|
|
|
|
echo ""
|
|
echo "=== 1. KERNEL DEBUG FLAGS ==="
|
|
# Primary: /boot/config-* (always present)
|
|
# Fallback: /proc/config.gz (only if CONFIG_IKCONFIG=y, disabled in production)
|
|
KCONF_FILE="/boot/config-$(uname -r)"
|
|
if [ -f "$KCONF_FILE" ]; then
|
|
KCONF=$(cat "$KCONF_FILE")
|
|
echo " Source: $KCONF_FILE"
|
|
elif [ -f /proc/config.gz ]; then
|
|
KCONF=$(zcat /proc/config.gz)
|
|
echo " Source: /proc/config.gz (IKCONFIG enabled — consider disabling for production)"
|
|
else
|
|
KCONF=""
|
|
warn "No kernel config found (neither /boot/config-* nor /proc/config.gz)"
|
|
fi
|
|
|
|
if [ -n "$KCONF" ]; then
|
|
check "DEBUG_KERNEL" "not set" "$(echo "$KCONF" | grep -c CONFIG_DEBUG_KERNEL=y | sed 's/1/SET/;s/0/not set/')"
|
|
check "LOCKDEP" "not set" "$(echo "$KCONF" | grep -c CONFIG_LOCKDEP=y | sed 's/1/SET/;s/0/not set/')"
|
|
check "KASAN" "not set" "$(echo "$KCONF" | grep -c CONFIG_KASAN=y | sed 's/1/SET/;s/0/not set/')"
|
|
check "KMEMLEAK" "not set" "$(echo "$KCONF" | grep -c CONFIG_KMEMLEAK=y | sed 's/1/SET/;s/0/not set/')"
|
|
check "FTRACE" "not set" "$(echo "$KCONF" | grep -c CONFIG_FTRACE=y | sed 's/1/SET/;s/0/not set/')"
|
|
check "SCHEDSTATS" "not set" "$(echo "$KCONF" | grep -c CONFIG_SCHEDSTATS=y | sed 's/1/SET/;s/0/not set/')"
|
|
check "PROFILING" "not set" "$(echo "$KCONF" | grep -c CONFIG_PROFILING=y | sed 's/1/SET/;s/0/not set/')"
|
|
|
|
echo ""
|
|
echo " Kernel Timer: $(echo "$KCONF" | grep CONFIG_HZ= | head -1)"
|
|
echo " Preempt: $(echo "$KCONF" | grep CONFIG_PREEMPT= | head -1)"
|
|
echo " Optimize: $(echo "$KCONF" | grep CONFIG_CC_OPTIMIZE | head -1)"
|
|
echo " Frame Pointer: $(echo "$KCONF" | grep CONFIG_FRAME_POINTER= | head -1) (forced on ARM64)"
|
|
fi
|
|
|
|
echo ""
|
|
echo "=== 2. MESA / GPU ==="
|
|
MESA_VER=$(glxinfo -B 2>/dev/null | grep "OpenGL version" || echo "glxinfo not available")
|
|
echo " Mesa: $MESA_VER"
|
|
echo " PAN_MESA_DEBUG=${PAN_MESA_DEBUG:-unset}"
|
|
echo " MESA_NO_ERROR=${MESA_NO_ERROR:-unset}"
|
|
echo " MESA_SHADER_CACHE_DIR=${MESA_SHADER_CACHE_DIR:-unset}"
|
|
for BAD in MESA_DEBUG MESA_VERBOSE GALLIUM_DUMP LIBGL_DEBUG; do
|
|
VAL=$(printenv $BAD 2>/dev/null)
|
|
[ -n "$VAL" ] && warn "$BAD=$VAL should NOT be set in production"
|
|
done
|
|
[ "$PAN_MESA_DEBUG" = "sync" ] && warn "PAN_MESA_DEBUG=sync kills ~30% FPS"
|
|
[ "$PAN_MESA_DEBUG" = "trace" ] && warn "PAN_MESA_DEBUG=trace captures every draw call"
|
|
|
|
echo ""
|
|
echo "=== 3. RETROARCH ==="
|
|
RA_CFG="/storage/.config/retroarch/retroarch.cfg"
|
|
if [ -f "$RA_CFG" ]; then
|
|
echo " log_verbosity = $(grep ^log_verbosity "$RA_CFG" | cut -d'"' -f2)"
|
|
echo " perfcnt_enable = $(grep ^perfcnt_enable "$RA_CFG" | cut -d'"' -f2)"
|
|
echo " video_driver = $(grep ^video_driver "$RA_CFG" | cut -d'"' -f2)"
|
|
echo " menu_driver = $(grep ^menu_driver "$RA_CFG" | cut -d'"' -f2)"
|
|
echo " autosave_interval = $(grep ^autosave_interval "$RA_CFG" | cut -d'"' -f2)"
|
|
fi
|
|
|
|
echo ""
|
|
echo "=== 4. EMULATOR BINARIES ==="
|
|
for bin in /usr/bin/retroarch /usr/bin/ppsspp /usr/bin/flycast /usr/bin/melonDS /usr/bin/mupen64plus; do
|
|
[ -x "$bin" ] || continue
|
|
STRIPPED=$(file "$bin" | grep -o "not stripped\|stripped")
|
|
SIZE=$(du -h "$bin" | cut -f1)
|
|
echo " $bin: $STRIPPED ($SIZE)"
|
|
done
|
|
|
|
echo ""
|
|
echo "=== 5. LIBRETRO CORES ==="
|
|
TOTAL=0; UNSTRIPPED=0
|
|
for core in /tmp/cores/*.so /usr/lib/libretro/*.so; do
|
|
[ -f "$core" ] || continue
|
|
TOTAL=$((TOTAL+1))
|
|
file "$core" | grep -q "not stripped" && UNSTRIPPED=$((UNSTRIPPED+1))
|
|
done
|
|
echo " Total cores: $TOTAL"
|
|
echo " Unstripped: $UNSTRIPPED"
|
|
[ "$UNSTRIPPED" -gt 0 ] && warn "$UNSTRIPPED cores not stripped"
|
|
|
|
echo ""
|
|
echo "=== 6. SYSTEM STATE ==="
|
|
echo " CPU governor: $(cat /sys/devices/system/cpu/cpufreq/policy0/scaling_governor 2>/dev/null)"
|
|
echo " CPU freq: $(cat /sys/devices/system/cpu/cpufreq/policy0/scaling_cur_freq 2>/dev/null) kHz"
|
|
echo " GPU governor: $(cat /sys/class/devfreq/ff400000.gpu/governor 2>/dev/null)"
|
|
echo " GPU freq: $(cat /sys/class/devfreq/ff400000.gpu/cur_freq 2>/dev/null) Hz"
|
|
echo " DMC governor: $(cat /sys/class/devfreq/dmc/governor 2>/dev/null)"
|
|
echo " Temperature: $(cat /sys/class/thermal/thermal_zone0/temp 2>/dev/null)m°C"
|
|
echo " MemAvailable: $(grep MemAvailable /proc/meminfo | awk '{print $2}') kB"
|
|
echo " CmaTotal: $(grep CmaTotal /proc/meminfo | awk '{print $2}') kB"
|
|
echo " CmaFree: $(grep CmaFree /proc/meminfo | awk '{print $2}') kB"
|
|
echo " Swap: $(swapon --show --noheadings 2>/dev/null | head -1 || echo 'none')"
|
|
echo " ZRAM: $(cat /sys/block/zram0/comp_algorithm 2>/dev/null || echo 'not configured')"
|
|
echo " vm.swappiness: $(sysctl -n vm.swappiness 2>/dev/null)"
|
|
echo " vm.vfs_cache_pressure: $(sysctl -n vm.vfs_cache_pressure 2>/dev/null)"
|
|
|
|
echo ""
|
|
echo "=== 7. ACTIVE SERVICES ==="
|
|
systemctl list-units --state=running --type=service --no-pager --no-legend 2>/dev/null | awk '{print " " $1}'
|
|
|
|
echo ""
|
|
echo "========================================"
|
|
echo -e " Results: ${GREEN}$PASS PASS${NC} ${YELLOW}$WARN WARN${NC} ${RED}$FAIL FAIL${NC}"
|
|
echo "========================================"
|