Files
pi-pm3/scripts/audit-build-scripts.sh
michael 4f35df1781 Initial commit - Phase 3/4
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-06 13:46:22 -08:00

199 lines
5.7 KiB
Bash
Executable File

#!/bin/bash
# Audit build scripts for common issues
# Usage: ./scripts/audit-build-scripts.sh
set -e
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
PROJECT_DIR="$(dirname "$SCRIPT_DIR")"
echo "=== Auditing Build Scripts ==="
echo ""
# Colors
RED='\033[0;31m'
YELLOW='\033[1;33m'
GREEN='\033[0;32m'
NC='\033[0m' # No Color
WARNINGS=0
ERRORS=0
# Function to report issues
warn() {
echo -e "${YELLOW}WARNING:${NC} $1"
((WARNINGS++))
}
error() {
echo -e "${RED}ERROR:${NC} $1"
((ERRORS++))
}
ok() {
echo -e "${GREEN}${NC} $1"
}
echo "1. Checking for commands used before installation..."
echo "------------------------------------------------"
# Check PM3 stage
PM3_SCRIPT="$PROJECT_DIR/pi-gen/stagePM3/01-proxmark3/00-run-chroot.sh"
if [ -f "$PM3_SCRIPT" ]; then
# Check if cmake is used before apt-get install
if grep -q "cmake" "$PM3_SCRIPT"; then
if ! grep -B50 "cmake" "$PM3_SCRIPT" | grep -q "apt-get install.*cmake"; then
warn "PM3: cmake used but may not be installed"
else
ok "PM3: cmake installation verified"
fi
fi
# Check for git before installation
if grep -q "git clone" "$PM3_SCRIPT"; then
if ! grep -B50 "git clone" "$PM3_SCRIPT" | grep -q "apt-get install.*git"; then
warn "PM3: git used but may not be installed"
else
ok "PM3: git installation verified"
fi
fi
fi
# Check DangerousPi stage
DTPI_SCRIPT="$PROJECT_DIR/pi-gen/stageDangerousPi/03-dangerous-pi/00-run-chroot.sh"
if [ -f "$DTPI_SCRIPT" ]; then
# Check for pip3
if grep -q "pip3 install" "$DTPI_SCRIPT"; then
if ! grep -B50 "pip3 install" "$DTPI_SCRIPT" | grep -q "apt-get install.*python3-pip\|command -v pip3"; then
error "DangerousPi: pip3 used but not installed"
else
ok "DangerousPi: pip3 installation check present"
fi
fi
fi
echo ""
echo "2. Checking for missing directory creation..."
echo "-------------------------------------------"
# Check WiFi AP script
WIFI_SCRIPT="$PROJECT_DIR/pi-gen/stageDangerousPi/01-Wireless-AP/00-run-chroot.sh"
if [ -f "$WIFI_SCRIPT" ]; then
# Check for directory writes
DIRS_WRITTEN=$(grep -n "cat >" "$WIFI_SCRIPT" | grep -oE '/etc/[^/]+(/[^/]+)*/' | sort -u)
for dir in $DIRS_WRITTEN; do
dir_parent=$(dirname "$dir")
if ! grep -q "mkdir -p $dir_parent\|mkdir -p $dir" "$WIFI_SCRIPT"; then
warn "WiFi: Writing to $dir without mkdir -p"
else
ok "WiFi: $dir directory creation verified"
fi
done
fi
echo ""
echo "3. Checking for undefined variables..."
echo "------------------------------------"
for script in "$PROJECT_DIR"/pi-gen/stage*/*/00-run*.sh; do
if [ -f "$script" ]; then
stage=$(basename $(dirname $(dirname "$script")))
substage=$(basename $(dirname "$script"))
# Check for common undefined vars
if grep -q '\$ROOTFS_DIR' "$script" && [ "$(basename "$script")" != "00-run.sh" ]; then
warn "$stage/$substage: Uses \$ROOTFS_DIR in chroot script (should be in 00-run.sh)"
fi
fi
done
echo ""
echo "4. Checking for missing error handling..."
echo "---------------------------------------"
for script in "$PROJECT_DIR"/pi-gen/stage*/*/00-run*.sh; do
if [ -f "$script" ]; then
stage=$(basename $(dirname $(dirname "$script")))
substage=$(basename $(dirname "$script"))
# Check if script has #!/bin/bash -e
if ! head -1 "$script" | grep -q "bash -e"; then
warn "$stage/$substage: Missing 'set -e' or '#!/bin/bash -e'"
else
ok "$stage/$substage: Error handling enabled"
fi
fi
done
echo ""
echo "5. Checking for sudo usage (not allowed in chroot)..."
echo "---------------------------------------------------"
for script in "$PROJECT_DIR"/pi-gen/stage*/*/00-run*.sh; do
if [ -f "$script" ]; then
stage=$(basename $(dirname $(dirname "$script")))
substage=$(basename $(dirname "$script"))
if grep -q "sudo " "$script"; then
error "$stage/$substage: Contains 'sudo' commands (not allowed in chroot)"
fi
fi
done
ok "No sudo commands found in stage scripts"
echo ""
echo "6. Checking configuration consistency..."
echo "--------------------------------------"
CONFIG="$PROJECT_DIR/pi-gen/config"
if [ -f "$CONFIG" ]; then
USERNAME=$(grep "FIRST_USER_NAME=" "$CONFIG" | cut -d'"' -f2)
echo "Configured username: $USERNAME"
if [ "$USERNAME" != "pi" ]; then
warn "Username is '$USERNAME' (not standard 'pi')"
echo " This is OK if intentional, but verify all scripts handle it correctly"
else
ok "Using standard 'pi' username"
fi
# Check if QCOW2 is enabled
if grep -q "USE_QCOW2=1" "$CONFIG"; then
ok "QCOW2 caching enabled for fast rebuilds"
else
warn "QCOW2 caching disabled - rebuilds will be slow"
fi
fi
echo ""
echo "7. Checking for required EXPORT_IMAGE markers..."
echo "----------------------------------------------"
for stage in "$PROJECT_DIR"/pi-gen/stage{PM3,DangerousPi}; do
if [ -d "$stage" ]; then
stage_name=$(basename "$stage")
if [ -f "$stage/EXPORT_IMAGE" ]; then
ok "$stage_name: EXPORT_IMAGE present"
else
error "$stage_name: Missing EXPORT_IMAGE marker"
fi
fi
done
echo ""
echo "=== Audit Summary ==="
echo "Warnings: $WARNINGS"
echo "Errors: $ERRORS"
echo ""
if [ $ERRORS -gt 0 ]; then
echo -e "${RED}BUILD SCRIPTS HAVE ERRORS - REVIEW REQUIRED${NC}"
exit 1
elif [ $WARNINGS -gt 0 ]; then
echo -e "${YELLOW}BUILD SCRIPTS HAVE WARNINGS - REVIEW RECOMMENDED${NC}"
exit 0
else
echo -e "${GREEN}ALL CHECKS PASSED${NC}"
exit 0
fi