#!/bin/bash # Download OpenWRT config.buildinfo, generate .config and run defconfig # Author: Zhe Yuan set -e umask 022 # --- Check if inside OpenWRT source directory --- if [ ! -f "feeds.conf.default" ] || [ ! -d "package" ]; then echo "[ERROR] Must run inside OpenWRT root directory." exit 1 fi # --- Detect Git version --- VERSION=$(git describe --tags --abbrev=0 2>/dev/null || echo "") VERSION="${VERSION#v}" IS_LATEST=false if [ -z "$VERSION" ]; then BRANCH=$(git rev-parse --abbrev-ref HEAD) if [[ "$BRANCH" =~ openwrt-([0-9]+\.[0-9]+) ]]; then PARTIAL_VERSION="${BASH_REMATCH[1]}" # Find latest patch tag LATEST_TAG=$(git tag -l "v${PARTIAL_VERSION}.*" | sort -V | tail -n1) if [ -z "$LATEST_TAG" ]; then echo "[ERROR] Cannot find latest tag for $PARTIAL_VERSION.*" exit 1 fi VERSION="${LATEST_TAG#v}" IS_LATEST=true elif [[ "$BRANCH" == *SNAPSHOT* ]]; then VERSION="SNAPSHOT" else read -rp "Cannot detect version, input manually (e.g., 24.10.4 or SNAPSHOT): " VERSION fi fi echo "[INFO] OpenWRT version: $VERSION" # --- Devices list --- # Format: Name Target FirmwareDevice DEVICES=( "Linksys_MX8500 qualcommax/ipq807x linksys_mx8500" "Cudy_TR3000_128MB mediatek/filogic cudy_tr3000-v1" "Cudy_TR3000_256MB mediatek/filogic cudy_tr3000-256mb-v1" ) echo "Available devices:" for i in "${!DEVICES[@]}"; do NAME=$(echo "${DEVICES[$i]}" | awk '{print $1}') echo " $i) $NAME" done read -rp "Select device number: " DEV_INDEX if [[ -z "${DEVICES[$DEV_INDEX]}" ]]; then echo "[ERROR] Invalid selection." exit 1 fi # --- Extract device info --- read -r DEV_NAME DEV_TARGET DEV_FW <<<"${DEVICES[$DEV_INDEX]}" echo "[INFO] Selected device: $DEV_NAME" # --- Construct URLs --- if [[ "$VERSION" == "SNAPSHOT" ]]; then CONFIG_URL="https://downloads.openwrt.org/snapshots/targets/$DEV_TARGET/config.buildinfo" FIRMWARE_URL="https://downloads.openwrt.org/snapshots/targets/$DEV_TARGET/openwrt-SNAPSHOT-$DEV_TARGET-$DEV_FW-squashfs-sysupgrade.bin" else CONFIG_URL="https://downloads.openwrt.org/releases/$VERSION/targets/$DEV_TARGET/config.buildinfo" FIRMWARE_URL="https://downloads.openwrt.org/releases/$VERSION/targets/$DEV_TARGET/openwrt-$VERSION-$DEV_TARGET-$DEV_FW-squashfs-sysupgrade.bin" fi echo "[INFO] Config URL: $CONFIG_URL" echo "[INFO] Firmware URL: $FIRMWARE_URL" # --- Download config.buildinfo --- echo "[INFO] Downloading config.buildinfo..." wget -q --show-progress -O ".config" "$CONFIG_URL" echo "[INFO] Saved as .config" # --- Run make defconfig --- echo "[INFO] Running make defconfig..." make defconfig >/dev/null echo "[INFO] defconfig done." # --- Check firmware existence --- if curl --head --silent --fail "$FIRMWARE_URL" >/dev/null; then echo "[INFO] Firmware exists: $FIRMWARE_URL" else echo "[WARN] Firmware not found or URL invalid." fi # --- Print Firmware Selector URL --- TARGET_ESC=$(echo $DEV_TARGET | sed 's|/|%2F|g') FS_URL="https://firmware-selector.openwrt.org/?version=$VERSION&target=$TARGET_ESC&id=$DEV_FW" echo "[INFO] Check Installed Packages at: $FS_URL"