97 lines
3.1 KiB
Bash
97 lines
3.1 KiB
Bash
#!/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"
|