104 lines
3.2 KiB
Bash
Executable file
104 lines
3.2 KiB
Bash
Executable file
#!/bin/bash
|
|
# Sync MIB files and device profiles from LibreNMS
|
|
# Usage: ./scripts/sync-librenms.sh [LIBRENMS_PATH]
|
|
#
|
|
# This script:
|
|
# 1. Syncs MIB files from LibreNMS to priv/mibs/
|
|
# 2. Syncs YAML profile definitions to priv/profiles/
|
|
#
|
|
# Prerequisites:
|
|
# - LibreNMS repository cloned locally
|
|
|
|
set -e
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
|
|
LIBRENMS_PATH="${1:-$HOME/dev/librenms}"
|
|
|
|
# Colors for output
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
NC='\033[0m' # No Color
|
|
|
|
echo -e "${GREEN}=== LibreNMS Sync Script ===${NC}"
|
|
echo "LibreNMS path: $LIBRENMS_PATH"
|
|
echo "Project root: $PROJECT_ROOT"
|
|
echo ""
|
|
|
|
# Verify LibreNMS path exists
|
|
if [ ! -d "$LIBRENMS_PATH" ]; then
|
|
echo -e "${RED}Error: LibreNMS directory not found at $LIBRENMS_PATH${NC}"
|
|
echo "Please provide the path to LibreNMS as the first argument:"
|
|
echo " ./scripts/sync-librenms.sh /path/to/librenms"
|
|
exit 1
|
|
fi
|
|
|
|
# Verify LibreNMS has the expected structure
|
|
if [ ! -d "$LIBRENMS_PATH/mibs" ]; then
|
|
echo -e "${RED}Error: MIBs directory not found at $LIBRENMS_PATH/mibs${NC}"
|
|
exit 1
|
|
fi
|
|
|
|
if [ ! -d "$LIBRENMS_PATH/resources/definitions" ]; then
|
|
echo -e "${RED}Error: Definitions directory not found at $LIBRENMS_PATH/resources/definitions${NC}"
|
|
exit 1
|
|
fi
|
|
|
|
# Step 1: Sync MIB files
|
|
echo -e "${YELLOW}Step 1: Syncing MIB files...${NC}"
|
|
MIB_DEST="$PROJECT_ROOT/priv/mibs"
|
|
mkdir -p "$MIB_DEST"
|
|
|
|
# Sync vendor-specific MIB directories we care about
|
|
VENDOR_MIBS=(
|
|
"cambium"
|
|
"mikrotik"
|
|
"ubnt"
|
|
"cisco"
|
|
)
|
|
|
|
for vendor in "${VENDOR_MIBS[@]}"; do
|
|
if [ -d "$LIBRENMS_PATH/mibs/$vendor" ]; then
|
|
echo " Syncing $vendor MIBs..."
|
|
mkdir -p "$MIB_DEST/$vendor"
|
|
rsync -a --delete "$LIBRENMS_PATH/mibs/$vendor/" "$MIB_DEST/$vendor/"
|
|
else
|
|
echo -e " ${YELLOW}Warning: $vendor MIBs not found, skipping${NC}"
|
|
fi
|
|
done
|
|
|
|
# Count synced MIBs
|
|
MIB_COUNT=$(find "$MIB_DEST" -type f 2>/dev/null | wc -l | tr -d ' ')
|
|
echo -e "${GREEN} Synced $MIB_COUNT MIB files${NC}"
|
|
echo ""
|
|
|
|
# Step 2: Sync YAML profile definitions
|
|
echo -e "${YELLOW}Step 2: Syncing YAML profile definitions...${NC}"
|
|
PROFILE_DEST="$PROJECT_ROOT/priv/profiles"
|
|
mkdir -p "$PROFILE_DEST/os_detection" "$PROFILE_DEST/os_discovery"
|
|
|
|
# Sync os_detection YAML files
|
|
echo " Syncing os_detection definitions..."
|
|
rsync -a --delete "$LIBRENMS_PATH/resources/definitions/os_detection/" "$PROFILE_DEST/os_detection/"
|
|
|
|
# Sync os_discovery YAML files
|
|
echo " Syncing os_discovery definitions..."
|
|
rsync -a --delete "$LIBRENMS_PATH/resources/definitions/os_discovery/" "$PROFILE_DEST/os_discovery/"
|
|
|
|
# Count synced profiles
|
|
DETECTION_COUNT=$(find "$PROFILE_DEST/os_detection" -name "*.yaml" 2>/dev/null | wc -l | tr -d ' ')
|
|
DISCOVERY_COUNT=$(find "$PROFILE_DEST/os_discovery" -name "*.yaml" 2>/dev/null | wc -l | tr -d ' ')
|
|
echo -e "${GREEN} Synced $DETECTION_COUNT detection profiles, $DISCOVERY_COUNT discovery profiles${NC}"
|
|
echo ""
|
|
|
|
echo -e "${GREEN}=== Sync Complete ===${NC}"
|
|
echo ""
|
|
echo "Files synced to:"
|
|
echo " - MIBs: priv/mibs/"
|
|
echo " - Profiles: priv/profiles/"
|
|
echo ""
|
|
echo "To import profiles into the database, run:"
|
|
echo " mix import_profiles --source-path priv/profiles"
|
|
echo ""
|
|
echo "Or profiles will be auto-imported on application startup."
|