add scripts
This commit is contained in:
40
add-external-repos.sh
Normal file
40
add-external-repos.sh
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Update or clone specified OpenWRT package repositories
|
||||||
|
|
||||||
|
set -e # Exit immediately if any command fails
|
||||||
|
umask 022 # Set default file permissions (files=644, dirs=755)
|
||||||
|
|
||||||
|
# Define repositories in the format: "git_url branch local_dir"
|
||||||
|
REPOS=(
|
||||||
|
"https://github.com/muink/luci-app-netspeedtest.git master package/luci-app-netspeedtest"
|
||||||
|
"https://github.com/EasyTier/luci-app-easytier.git main package/luci-app-easytier"
|
||||||
|
)
|
||||||
|
|
||||||
|
for REPO_INFO in "${REPOS[@]}"; do
|
||||||
|
set -- $REPO_INFO
|
||||||
|
REPO_URL=$1
|
||||||
|
REPO_BRANCH=$2
|
||||||
|
LOCAL_DIR=$3
|
||||||
|
|
||||||
|
echo "----------------------------------------"
|
||||||
|
echo "Processing $LOCAL_DIR ($REPO_BRANCH)"
|
||||||
|
echo "----------------------------------------"
|
||||||
|
|
||||||
|
if [ -d "$LOCAL_DIR/.git" ]; then
|
||||||
|
echo "Repository exists, updating..."
|
||||||
|
pushd "$LOCAL_DIR" > /dev/null
|
||||||
|
git fetch origin "$REPO_BRANCH"
|
||||||
|
git checkout "$REPO_BRANCH"
|
||||||
|
git pull --ff-only origin "$REPO_BRANCH"
|
||||||
|
popd > /dev/null
|
||||||
|
else
|
||||||
|
echo "Repository not found, cloning..."
|
||||||
|
git clone --depth 1 --branch "$REPO_BRANCH" --single-branch "$REPO_URL" "$LOCAL_DIR"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Done: $LOCAL_DIR"
|
||||||
|
echo
|
||||||
|
done
|
||||||
|
|
||||||
|
echo "✅ All repositories updated successfully."
|
||||||
|
|
||||||
86
add-openwrt-packages.sh
Normal file
86
add-openwrt-packages.sh
Normal file
@@ -0,0 +1,86 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Add specified OpenWRT packages (from a text file) to .config without removing existing ones
|
||||||
|
# Author: Zhe Yuan
|
||||||
|
# Usage:
|
||||||
|
# ./add-openwrt-packages.sh packages.txt
|
||||||
|
# Description:
|
||||||
|
# - Reads package names from a text file (supports both newline or space separation)
|
||||||
|
# - Adds missing CONFIG_PACKAGE_xxx=y entries to .config
|
||||||
|
# - Keeps existing settings intact
|
||||||
|
# - Reports missing packages
|
||||||
|
# - Runs make defconfig at the end to sync dependencies
|
||||||
|
|
||||||
|
set -e
|
||||||
|
umask 022
|
||||||
|
|
||||||
|
# Check argument
|
||||||
|
if [ "$#" -ne 1 ]; then
|
||||||
|
echo "❌ Usage: $0 <package_list.txt>"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
PKG_FILE="$1"
|
||||||
|
|
||||||
|
# Verify file exists
|
||||||
|
if [ ! -f "$PKG_FILE" ]; then
|
||||||
|
echo "❌ Error: File not found: $PKG_FILE"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Verify we are in OpenWRT source root
|
||||||
|
if [ ! -d "package" ] || [ ! -f "Makefile" ]; then
|
||||||
|
echo "❌ Error: Please run this script in the OpenWRT source root directory."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Ensure .config exists
|
||||||
|
if [ ! -f ".config" ]; then
|
||||||
|
echo "⚙️ Generating initial .config..."
|
||||||
|
make defconfig
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "📦 Reading packages from $PKG_FILE ..."
|
||||||
|
|
||||||
|
# Read all non-empty, non-comment lines, split by any whitespace
|
||||||
|
PACKAGES=$(grep -v '^[[:space:]]*$' "$PKG_FILE" | grep -v '^#' | tr '\n' ' ')
|
||||||
|
|
||||||
|
ADDED=()
|
||||||
|
MISSING=()
|
||||||
|
|
||||||
|
for pkg in $PACKAGES; do
|
||||||
|
CONFIG_NAME="CONFIG_PACKAGE_${pkg}"
|
||||||
|
|
||||||
|
# Skip if already enabled
|
||||||
|
if grep -q "^${CONFIG_NAME}=y" .config; then
|
||||||
|
echo "✅ Already enabled: $pkg"
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check if package exists in package/ or feeds/
|
||||||
|
if ! find package feeds -type d -path "*/${pkg}" -mindepth 1 -maxdepth 3 2>/dev/null | grep -q .; then
|
||||||
|
echo "⚠️ Package not found: $pkg"
|
||||||
|
MISSING+=("$pkg")
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Append package config
|
||||||
|
echo "${CONFIG_NAME}=y" >> .config
|
||||||
|
ADDED+=("$pkg")
|
||||||
|
echo "➕ Added: $pkg"
|
||||||
|
done
|
||||||
|
|
||||||
|
# Run defconfig to sync dependencies
|
||||||
|
echo
|
||||||
|
echo "⚙️ Running make defconfig..."
|
||||||
|
make defconfig >/dev/null
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo "✅ Done!"
|
||||||
|
echo "📋 Packages newly added: ${#ADDED[@]}"
|
||||||
|
[ ${#ADDED[@]} -gt 0 ] && echo " → ${ADDED[*]}"
|
||||||
|
if [ ${#MISSING[@]} -gt 0 ]; then
|
||||||
|
echo "⚠️ Packages not found (check feeds or spelling):"
|
||||||
|
for m in "${MISSING[@]}"; do
|
||||||
|
echo " - $m"
|
||||||
|
done
|
||||||
|
fi
|
||||||
148
apply-dahdi-patches.sh
Normal file
148
apply-dahdi-patches.sh
Normal file
@@ -0,0 +1,148 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Apply DAHDI driver patch for OpenWRT 24.10.4
|
||||||
|
# Fixes MAX macro naming issues in dahdi-linux modules
|
||||||
|
# Author: ChatGPT (for Zhe Yuan)
|
||||||
|
|
||||||
|
set -e
|
||||||
|
umask 022
|
||||||
|
|
||||||
|
PATCH_DIR="package/feeds/telephony/dahdi-linux/patches"
|
||||||
|
PATCH_FILE="$PATCH_DIR/300-fix-dahdi-max-attempts.patch"
|
||||||
|
|
||||||
|
echo "========================================"
|
||||||
|
echo " DAHDI Linux Patch Applier for OpenWRT"
|
||||||
|
echo "========================================"
|
||||||
|
|
||||||
|
# --- Check if inside OpenWRT source directory ---
|
||||||
|
if [ ! -f "feeds.conf.default" ] || [ ! -d "package" ]; then
|
||||||
|
echo "[ERROR] This script must be run inside the OpenWRT root directory."
|
||||||
|
echo "Please 'cd' to your OpenWRT source root and run again."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# --- Check if dahdi patch directory exists ---
|
||||||
|
if [ ! -d "$PATCH_DIR" ]; then
|
||||||
|
echo "[ERROR] Patch directory not found:"
|
||||||
|
echo " $PATCH_DIR"
|
||||||
|
echo
|
||||||
|
echo "Please make sure telephony feed is installed:"
|
||||||
|
echo " ./scripts/feeds update telephony"
|
||||||
|
echo " ./scripts/feeds install -a"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# --- Create patch file ---
|
||||||
|
echo "[INFO] Writing DAHDI patch to: $PATCH_FILE"
|
||||||
|
cat > "$PATCH_FILE" <<'EOF'
|
||||||
|
--- a/drivers/dahdi/wctdm24xxp/base.c
|
||||||
|
+++ b/drivers/dahdi/wctdm24xxp/base.c
|
||||||
|
@@ -1516,16 +1516,16 @@ static int wait_access(struct wctdm *wc, struct wctdm_module *const mod)
|
||||||
|
{
|
||||||
|
unsigned char data = 0;
|
||||||
|
int count = 0;
|
||||||
|
|
||||||
|
- #define MAX 10 /* attempts */
|
||||||
|
+ #define MAX_ATTEMPTS 10 /* attempts */
|
||||||
|
|
||||||
|
/* Wait for indirect access */
|
||||||
|
- while (count++ < MAX) {
|
||||||
|
+ while (count++ < MAX_ATTEMPTS) {
|
||||||
|
data = wctdm_getreg(wc, mod, I_STATUS);
|
||||||
|
if (!data)
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
- if (count > (MAX-1)) {
|
||||||
|
+ if (count > (MAX_ATTEMPTS-1)) {
|
||||||
|
dev_notice(&wc->vb.pdev->dev,
|
||||||
|
" ##### Loop error (%02x) #####\n", data);
|
||||||
|
}
|
||||||
|
|
||||||
|
--- a/drivers/dahdi/opvxa1200/base.c
|
||||||
|
+++ b/drivers/dahdi/opvxa1200/base.c
|
||||||
|
@@ -868,12 +868,12 @@ static int wait_access(struct wctdm *wc, int card)
|
||||||
|
long origjiffies;
|
||||||
|
int count = 0;
|
||||||
|
|
||||||
|
- #define MAX 6000 /* attempts */
|
||||||
|
+ #define MAX_ATTEMPTS 6000 /* attempts */
|
||||||
|
|
||||||
|
|
||||||
|
origjiffies = jiffies;
|
||||||
|
/* Wait for indirect access */
|
||||||
|
- while (count++ < MAX)
|
||||||
|
+ while (count++ < MAX_ATTEMPTS)
|
||||||
|
{
|
||||||
|
data = __wctdm_getreg(wc, card, I_STATUS);
|
||||||
|
|
||||||
|
@@ -882,7 +882,7 @@ static int wait_access(struct wctdm *wc, int card)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
- if(count > (MAX-1)) printk(KERN_NOTICE " ##### Loop error (%02x) #####\n", data);
|
||||||
|
+ if(count > (MAX_ATTEMPTS-1)) printk(KERN_NOTICE " ##### Loop error (%02x) #####\n", data);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
--- a/drivers/dahdi/wcaxx-base.c
|
||||||
|
+++ b/drivers/dahdi/wcaxx-base.c
|
||||||
|
@@ -1066,16 +1066,16 @@ static int wait_access(struct wcaxx *wc, struct wcaxx_module *const mod)
|
||||||
|
unsigned char data = 0;
|
||||||
|
int count = 0;
|
||||||
|
|
||||||
|
- #define MAX 10 /* attempts */
|
||||||
|
+ #define MAX_ATTEMPTS 10 /* attempts */
|
||||||
|
|
||||||
|
/* Wait for indirect access */
|
||||||
|
- while (count++ < MAX) {
|
||||||
|
+ while (count++ < MAX_ATTEMPTS) {
|
||||||
|
data = wcaxx_getreg(wc, mod, I_STATUS);
|
||||||
|
if (!data)
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
- if (count > (MAX-1)) {
|
||||||
|
+ if (count > (MAX_ATTEMPTS-1)) {
|
||||||
|
dev_notice(&wc->xb.pdev->dev,
|
||||||
|
" ##### Loop error (%02x) #####\n", data);
|
||||||
|
}
|
||||||
|
|
||||||
|
--- a/drivers/dahdi/wctdm.c
|
||||||
|
+++ b/drivers/dahdi/wctdm.c
|
||||||
|
@@ -623,11 +623,11 @@ static int wait_access(struct wctdm *wc, int card)
|
||||||
|
unsigned char data = 0;
|
||||||
|
int count = 0;
|
||||||
|
|
||||||
|
- #define MAX 6000 /* attempts */
|
||||||
|
+ #define MAX_ATTEMPTS 6000 /* attempts */
|
||||||
|
|
||||||
|
|
||||||
|
/* Wait for indirect access */
|
||||||
|
- while (count++ < MAX)
|
||||||
|
+ while (count++ < MAX_ATTEMPTS)
|
||||||
|
{
|
||||||
|
data = __wctdm_getreg(wc, card, I_STATUS);
|
||||||
|
|
||||||
|
@@ -636,7 +636,7 @@ static int wait_access(struct wctdm *wc, int card)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
- if(count > (MAX-1)) printk(KERN_NOTICE " ##### Loop error (%02x) #####\n", data);
|
||||||
|
+ if(count > (MAX_ATTEMPTS-1)) printk(KERN_NOTICE " ##### Loop error (%02x) #####\n", data);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
|
||||||
|
echo "[SUCCESS] Patch written successfully!"
|
||||||
|
echo
|
||||||
|
echo "========================================"
|
||||||
|
echo "✅ DAHDI patch applied successfully!"
|
||||||
|
echo " File: $PATCH_FILE"
|
||||||
|
echo "========================================"
|
||||||
|
echo
|
||||||
|
echo "👉 Next step:"
|
||||||
|
echo " make package/feeds/telephony/dahdi-linux/{clean,prepare} V=s"
|
||||||
|
echo " make package/feeds/telephony/dahdi-linux/compile V=s"
|
||||||
|
echo
|
||||||
96
download-config.sh
Normal file
96
download-config.sh
Normal file
@@ -0,0 +1,96 @@
|
|||||||
|
#!/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"
|
||||||
112
prepare-openwrt-env.sh
Normal file
112
prepare-openwrt-env.sh
Normal file
@@ -0,0 +1,112 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Automatically prepare OpenWRT build dependencies for Debian/Ubuntu
|
||||||
|
# Supports both x86_64 and arm64
|
||||||
|
# Detects Ubuntu 22.04, 24.04, Debian 12/13 and newer
|
||||||
|
# Author: Zhe Yuan
|
||||||
|
|
||||||
|
set -e
|
||||||
|
umask 022
|
||||||
|
|
||||||
|
echo "========================================"
|
||||||
|
echo " OpenWRT Build Environment Preparation"
|
||||||
|
echo "========================================"
|
||||||
|
|
||||||
|
# --- Detect architecture ---
|
||||||
|
ARCH=$(uname -m)
|
||||||
|
echo "[INFO] Detected architecture: $ARCH"
|
||||||
|
|
||||||
|
# --- Detect OS version ---
|
||||||
|
if [ -f /etc/os-release ]; then
|
||||||
|
. /etc/os-release
|
||||||
|
DISTRO="$ID"
|
||||||
|
VERSION_ID="${VERSION_ID:-unknown}"
|
||||||
|
else
|
||||||
|
echo "[ERROR] Cannot detect system version (no /etc/os-release)"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "[INFO] Detected distribution: $DISTRO $VERSION_ID"
|
||||||
|
|
||||||
|
# --- Determine if Python 3.12+ is installed (no distutils) ---
|
||||||
|
PY_VER=$(python3 -V 2>/dev/null | awk '{print $2}' | cut -d. -f1,2)
|
||||||
|
HAS_DISTUTILS=$(apt-cache search python3-distutils 2>/dev/null | grep -c distutils || true)
|
||||||
|
|
||||||
|
# --- Base packages (common to all) ---
|
||||||
|
COMMON_PACKAGES="build-essential clang flex bison g++ gawk \
|
||||||
|
gettext git libssl-dev rsync swig unzip zlib1g-dev file wget"
|
||||||
|
|
||||||
|
# --- Determine specific package set ---
|
||||||
|
if [[ "$ARCH" == "x86_64" || "$ARCH" == "amd64" ]]; then
|
||||||
|
echo "[INFO] Preparing environment for x86_64."
|
||||||
|
|
||||||
|
if [[ "$VERSION_ID" == "24.04" || ( "$DISTRO" == "debian" && "${VERSION_ID%%.*}" -ge 13 ) ]]; then
|
||||||
|
echo "[INFO] Detected new environment (Python 3.12+, no python3-distutils)."
|
||||||
|
EXTRA_PACKAGES="gcc-multilib g++-multilib libncurses5-dev python3-setuptools"
|
||||||
|
else
|
||||||
|
echo "[INFO] Detected older Ubuntu/Debian (with python3-distutils)."
|
||||||
|
EXTRA_PACKAGES="gcc-multilib g++-multilib libncurses-dev python3-distutils python3-setuptools"
|
||||||
|
fi
|
||||||
|
|
||||||
|
INSTALL_PACKAGES="$COMMON_PACKAGES $EXTRA_PACKAGES"
|
||||||
|
|
||||||
|
elif [[ "$ARCH" == "aarch64" || "$ARCH" == "arm64" ]]; then
|
||||||
|
echo "[INFO] Preparing environment for ARM64."
|
||||||
|
|
||||||
|
# Note: arm64 has no native multilib; install cross multilib packages
|
||||||
|
MULTILIB_PACKAGES="
|
||||||
|
gcc-multilib-i686-linux-gnu gcc-multilib-s390x-linux-gnu \
|
||||||
|
gcc-multilib-x86-64-linux-gnu gcc-multilib-x86-64-linux-gnux32 \
|
||||||
|
g++-multilib-i686-linux-gnu g++-multilib-s390x-linux-gnu \
|
||||||
|
g++-multilib-x86-64-linux-gnu g++-multilib-x86-64-linux-gnux32 \
|
||||||
|
libc6-dev-i386-amd64-cross libc6-dev-i386-cross libc6-dev-i386-x32-cross"
|
||||||
|
|
||||||
|
if [[ "$VERSION_ID" == "24.04" || ( "$DISTRO" == "debian" && "${VERSION_ID%%.*}" -ge 13 ) ]]; then
|
||||||
|
EXTRA_PACKAGES="libncurses5-dev python3-setuptools"
|
||||||
|
else
|
||||||
|
EXTRA_PACKAGES="libncurses-dev python3-distutils python3-setuptools"
|
||||||
|
fi
|
||||||
|
|
||||||
|
INSTALL_PACKAGES="$COMMON_PACKAGES $EXTRA_PACKAGES $MULTILIB_PACKAGES golang"
|
||||||
|
|
||||||
|
else
|
||||||
|
echo "[WARN] Unknown architecture: $ARCH"
|
||||||
|
echo "[WARN] Attempting to use x86_64 package list."
|
||||||
|
INSTALL_PACKAGES="$COMMON_PACKAGES gcc-multilib g++-multilib libncurses-dev python3-setuptools"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# --- Display package list ---
|
||||||
|
echo
|
||||||
|
echo "========================================"
|
||||||
|
echo "📦 Packages to install:"
|
||||||
|
echo "$INSTALL_PACKAGES"
|
||||||
|
echo "========================================"
|
||||||
|
echo
|
||||||
|
|
||||||
|
echo "[INFO] Updating APT repositories..."
|
||||||
|
sudo apt update -y
|
||||||
|
|
||||||
|
echo "[INFO] Installing packages..."
|
||||||
|
sudo apt install -y $INSTALL_PACKAGES
|
||||||
|
|
||||||
|
# --- Post installation notice ---
|
||||||
|
echo
|
||||||
|
echo "========================================"
|
||||||
|
echo "✅ OpenWRT build environment setup complete!"
|
||||||
|
echo "========================================"
|
||||||
|
echo
|
||||||
|
|
||||||
|
if [[ "$ARCH" == "x86_64" || "$ARCH" == "amd64" ]]; then
|
||||||
|
echo "👉 [NOTE] Go language is optional on x86_64."
|
||||||
|
echo " If you plan to compile packages requiring Go (e.g. firewall4, netifd), install it manually:"
|
||||||
|
echo " sudo apt install golang -y"
|
||||||
|
else
|
||||||
|
echo "👉 [INFO] Go language installed for ARM64 cross compilation."
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo "⚙️ After running 'make menuconfig', set Go toolchain path if required:"
|
||||||
|
echo " Example: /usr/lib/go-1.18"
|
||||||
|
echo
|
||||||
|
echo "👉 Next step:"
|
||||||
|
echo " ./prepare-openwrt.sh # to clone and set up OpenWRT source"
|
||||||
|
echo
|
||||||
161
prepare-openwrt.sh
Normal file
161
prepare-openwrt.sh
Normal file
@@ -0,0 +1,161 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Automatically prepare OpenWRT build environment.
|
||||||
|
# - Clone or update repository
|
||||||
|
# - Support selecting release/beta/snapshot versions
|
||||||
|
# - Adjust directory layout automatically if run from openwrt-build-helper
|
||||||
|
# - Update and install feeds
|
||||||
|
# - Prepare .config for build
|
||||||
|
|
||||||
|
set -e
|
||||||
|
umask 022
|
||||||
|
|
||||||
|
REPO_URL="https://github.com/openwrt/openwrt.git"
|
||||||
|
DEFAULT_DIR="openwrt"
|
||||||
|
|
||||||
|
echo "========================================"
|
||||||
|
echo " OpenWRT Build Environment Setup Script"
|
||||||
|
echo "========================================"
|
||||||
|
|
||||||
|
# --- Function: detect and normalize directory structure ---
|
||||||
|
normalize_structure() {
|
||||||
|
local current_dir=$(basename "$(pwd)")
|
||||||
|
|
||||||
|
if [ "$current_dir" == "openwrt-build-helper" ]; then
|
||||||
|
echo "[INFO] Detected helper directory structure."
|
||||||
|
|
||||||
|
mkdir -p helper
|
||||||
|
# Move everything except helper into helper/
|
||||||
|
for f in * .*; do
|
||||||
|
[[ "$f" == "." || "$f" == ".." || "$f" == "helper" ]] && continue
|
||||||
|
mv "$f" helper/ 2>/dev/null || true
|
||||||
|
done
|
||||||
|
|
||||||
|
cd ..
|
||||||
|
mv openwrt-build-helper openwrt
|
||||||
|
cd openwrt
|
||||||
|
echo "[INFO] Directory renamed to 'openwrt', helper files moved to 'openwrt/helper/'."
|
||||||
|
|
||||||
|
elif [ "$current_dir" == "openwrt" ]; then
|
||||||
|
echo "[INFO] Running directly inside openwrt build directory."
|
||||||
|
else
|
||||||
|
echo "[INFO] Not inside openwrt folder, ensuring 'openwrt' subdirectory exists."
|
||||||
|
mkdir -p openwrt
|
||||||
|
cd openwrt
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# --- Function: choose version ---
|
||||||
|
choose_version() {
|
||||||
|
echo
|
||||||
|
echo "Select OpenWRT version type:"
|
||||||
|
echo " 1) Stable release (e.g., 24.10.4)"
|
||||||
|
echo " 2) Beta (e.g., 24.10-SNAPSHOT or openwrt-24.10)"
|
||||||
|
echo " 3) Latest snapshot (master branch)"
|
||||||
|
echo -n "Enter choice [1-3, default=1]: "
|
||||||
|
read -r choice
|
||||||
|
|
||||||
|
case "$choice" in
|
||||||
|
2)
|
||||||
|
echo -n "Enter beta version (e.g. 24.10 or openwrt-24.10): "
|
||||||
|
read -r VERSION
|
||||||
|
SELECTED_TYPE="beta"
|
||||||
|
;;
|
||||||
|
3)
|
||||||
|
SELECTED_TYPE="snapshot"
|
||||||
|
VERSION="master"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo -n "Enter stable version number (e.g. 24.10.4, default: latest): "
|
||||||
|
read -r VERSION
|
||||||
|
SELECTED_TYPE="stable"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
# --- Start ---
|
||||||
|
normalize_structure
|
||||||
|
choose_version
|
||||||
|
|
||||||
|
REPO_DIR="$DEFAULT_DIR"
|
||||||
|
|
||||||
|
# If already inside openwrt repo, use current path
|
||||||
|
if [ -d ".git" ] && [ -f "feeds.conf.default" ]; then
|
||||||
|
REPO_DIR="."
|
||||||
|
fi
|
||||||
|
|
||||||
|
# --- Clone or update repository ---
|
||||||
|
if [ "$REPO_DIR" == "." ]; then
|
||||||
|
echo "[INFO] Existing OpenWRT repository detected. Updating..."
|
||||||
|
git fetch --tags origin
|
||||||
|
else
|
||||||
|
if [ -d "$REPO_DIR/.git" ]; then
|
||||||
|
echo "[INFO] Repository exists, updating..."
|
||||||
|
pushd "$REPO_DIR" >/dev/null
|
||||||
|
git fetch --tags origin
|
||||||
|
git pull --ff-only
|
||||||
|
popd >/dev/null
|
||||||
|
else
|
||||||
|
echo "[INFO] Cloning repository..."
|
||||||
|
git clone "$REPO_URL" "$REPO_DIR"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
pushd "$REPO_DIR" >/dev/null
|
||||||
|
|
||||||
|
# --- Version selection logic ---
|
||||||
|
if [ "$SELECTED_TYPE" == "snapshot" ]; then
|
||||||
|
echo "[INFO] Checking out latest master (snapshot)..."
|
||||||
|
git checkout master
|
||||||
|
git pull origin master
|
||||||
|
elif [ "$SELECTED_TYPE" == "beta" ]; then
|
||||||
|
# Try both openwrt-<ver> and v<ver>-SNAPSHOT
|
||||||
|
if git rev-parse --verify "openwrt-${VERSION}" >/dev/null 2>&1; then
|
||||||
|
git checkout "openwrt-${VERSION}"
|
||||||
|
elif git rev-parse --verify "v${VERSION}-SNAPSHOT" >/dev/null 2>&1; then
|
||||||
|
git checkout "v${VERSION}-SNAPSHOT"
|
||||||
|
else
|
||||||
|
echo "[ERROR] Beta branch or tag not found for version $VERSION."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
# Stable version
|
||||||
|
if [ -z "$VERSION" ]; then
|
||||||
|
LATEST_TAG=$(git tag -l "v*" | sort -V | tail -n 1)
|
||||||
|
echo "[INFO] No version specified, using latest stable tag: $LATEST_TAG"
|
||||||
|
VERSION="$LATEST_TAG"
|
||||||
|
else
|
||||||
|
VERSION="v${VERSION}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if git rev-parse --verify "$VERSION" >/dev/null 2>&1; then
|
||||||
|
git checkout "$VERSION"
|
||||||
|
else
|
||||||
|
echo "[ERROR] Version tag $VERSION not found."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# --- Update feeds ---
|
||||||
|
echo "[INFO] Updating and installing all feeds..."
|
||||||
|
./scripts/feeds update -a
|
||||||
|
./scripts/feeds install -a
|
||||||
|
|
||||||
|
# --- Run defconfig ---
|
||||||
|
echo "[INFO] Running make defconfig..."
|
||||||
|
make defconfig
|
||||||
|
|
||||||
|
CURRENT_VERSION=$(git describe --tags 2>/dev/null || git rev-parse --abbrev-ref HEAD)
|
||||||
|
|
||||||
|
popd >/dev/null
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo "========================================"
|
||||||
|
echo "✅ OpenWRT source is ready."
|
||||||
|
echo " Version: $CURRENT_VERSION"
|
||||||
|
echo "========================================"
|
||||||
|
echo
|
||||||
|
echo "👉 Next steps:"
|
||||||
|
echo " cd openwrt"
|
||||||
|
echo " make menuconfig"
|
||||||
|
echo " make -j\$(nproc) download world"
|
||||||
|
echo
|
||||||
74
update-go-path.sh
Normal file
74
update-go-path.sh
Normal file
@@ -0,0 +1,74 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Automatically detect Go installation and update .config for OpenWRT
|
||||||
|
# Author: Zhe Yuan
|
||||||
|
|
||||||
|
set -e
|
||||||
|
umask 022
|
||||||
|
|
||||||
|
CONFIG_FILE=".config"
|
||||||
|
|
||||||
|
echo "========================================"
|
||||||
|
echo " Go Path Auto Updater for OpenWRT"
|
||||||
|
echo "========================================"
|
||||||
|
|
||||||
|
# --- Check for .config file ---
|
||||||
|
if [ ! -f "$CONFIG_FILE" ]; then
|
||||||
|
echo "[ERROR] No .config file found in current directory!"
|
||||||
|
echo "Please run this script inside your OpenWRT build root."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# --- Detect available Go installations ---
|
||||||
|
GO_DIRS=(/usr/lib/go-*/)
|
||||||
|
if [ ${#GO_DIRS[@]} -eq 0 ]; then
|
||||||
|
echo "[ERROR] No Go installation found under /usr/lib/go-*"
|
||||||
|
echo "Please install Go using: sudo apt install golang -y"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# --- Extract version numbers ---
|
||||||
|
GO_VERSIONS=()
|
||||||
|
for dir in "${GO_DIRS[@]}"; do
|
||||||
|
ver=$(basename "$dir" | sed -E 's/^go-([0-9]+\.[0-9]+).*$/\1/')
|
||||||
|
GO_VERSIONS+=("$ver")
|
||||||
|
done
|
||||||
|
|
||||||
|
# --- Sort versions and pick the latest ---
|
||||||
|
IFS=$'\n' sorted=($(sort -V <<<"${GO_VERSIONS[*]}"))
|
||||||
|
LATEST_VER="${sorted[-1]}"
|
||||||
|
LATEST_PATH="/usr/lib/go-${LATEST_VER}/"
|
||||||
|
|
||||||
|
echo "[INFO] Found Go versions: ${GO_VERSIONS[*]}"
|
||||||
|
echo "[INFO] Using latest Go version: $LATEST_VER"
|
||||||
|
echo "[INFO] Path: $LATEST_PATH"
|
||||||
|
|
||||||
|
# --- Check if multiple versions exist ---
|
||||||
|
if [ ${#GO_VERSIONS[@]} -gt 1 ]; then
|
||||||
|
echo "[WARN] Multiple Go versions detected!"
|
||||||
|
echo "If you prefer to use an older version, modify manually:"
|
||||||
|
echo " CONFIG_GOLANG_EXTERNAL_BOOTSTRAP_ROOT=\"/usr/lib/go-X.XX/\""
|
||||||
|
echo
|
||||||
|
fi
|
||||||
|
|
||||||
|
# --- Update .config ---
|
||||||
|
if grep -q '^CONFIG_GOLANG_EXTERNAL_BOOTSTRAP_ROOT=' "$CONFIG_FILE"; then
|
||||||
|
echo "[INFO] Updating existing CONFIG_GOLANG_EXTERNAL_BOOTSTRAP_ROOT..."
|
||||||
|
sed -i "s|^CONFIG_GOLANG_EXTERNAL_BOOTSTRAP_ROOT=.*|CONFIG_GOLANG_EXTERNAL_BOOTSTRAP_ROOT=\"${LATEST_PATH}\"|" "$CONFIG_FILE"
|
||||||
|
else
|
||||||
|
echo "[INFO] Adding CONFIG_GOLANG_EXTERNAL_BOOTSTRAP_ROOT..."
|
||||||
|
echo "CONFIG_GOLANG_EXTERNAL_BOOTSTRAP_ROOT=\"${LATEST_PATH}\"" >> "$CONFIG_FILE"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# --- Verify result ---
|
||||||
|
echo
|
||||||
|
echo "[SUCCESS] Go path updated in .config:"
|
||||||
|
grep 'CONFIG_GOLANG_EXTERNAL_BOOTSTRAP_ROOT' "$CONFIG_FILE"
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo "========================================"
|
||||||
|
echo "✅ Go path update complete!"
|
||||||
|
echo "========================================"
|
||||||
|
echo
|
||||||
|
echo "👉 If you wish to override manually, edit .config and change:"
|
||||||
|
echo " CONFIG_GOLANG_EXTERNAL_BOOTSTRAP_ROOT=\"/usr/lib/go-X.XX/\""
|
||||||
|
echo
|
||||||
Reference in New Issue
Block a user