commit 718d82aabc9984e63c79a38c32e5339f75e8eb49 Author: Zhe Yuan Date: Sat Nov 8 10:24:52 2025 -0500 Upload Readme.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..d2b5dd8 --- /dev/null +++ b/README.md @@ -0,0 +1,128 @@ +# OpenWrt Build Helper Scripts + +## Overview +This repository contains shell scripts that streamline preparing, configuring, and building OpenWrt from source on Debian/Ubuntu systems (x86_64 and ARM64). It also includes convenience utilities to manage package selections, fetch device config.buildinfo, apply a DAHDI driver patch, and add external LuCI packages. + +## What’s included +- prepare-openwrt-env.sh + - Installs required build dependencies via apt on Ubuntu 22.04/24.04 and Debian 12/13+. + - Handles x86_64 and ARM64 differences (Python/distutils, multilib notes, Go on ARM64). +- prepare-openwrt.sh + - Clones or updates the OpenWrt source repo. + - Lets you select Stable, Beta, or Snapshot versions interactively. + - Normalizes folder layout if run from an “openwrt-build-helper” directory. + - Updates feeds and runs make defconfig. +- add-external-repos.sh + - Clones or updates additional package repositories into package/. + - Currently includes luci-app-netspeedtest and luci-app-easytier (adjust REPOS as needed). +- download-config.sh + - Downloads config.buildinfo for a selected device based on your checked-out OpenWrt version (stable or snapshot). + - Writes .config and runs make defconfig. + - Prints firmware URL and a Firmware Selector link for reference. +- add-openwrt-packages.sh + - Enables packages listed in a text file by appending CONFIG_PACKAGE_=y to .config (without removing existing settings). + - Verifies presence in package/ or feeds/ and reports missing ones, then runs make defconfig. +- update-go-path.sh + - Detects the latest Go installation under /usr/lib/go-* and sets CONFIG_GOLANG_EXTERNAL_BOOTSTRAP_ROOT in .config. +- apply-dahdi-patches.sh + - Writes a DAHDI driver patch into package/feeds/telephony/dahdi-linux/patches/300-fix-dahdi-max-attempts.patch. + - Fixes MAX macro naming collisions in multiple DAHDI modules for OpenWrt 24.10.4 builds. + +## System requirements +- OS: Ubuntu 22.04/24.04 or Debian 12/13+ (others may work with adjustments) +- Architectures: x86_64/amd64 and aarch64/arm64 +- Tools: git, wget, curl, bash +- Internet access for feeds and package downloads +- Optional: Go (required by some OpenWrt packages; auto-configured on ARM64 by prepare-openwrt-env.sh; configurable via update-go-path.sh) + +## Quick start +1) Prepare the host machine +- Run: ./prepare-openwrt-env.sh +- This installs compilers, headers, Python tooling, and other build prerequisites. + +2) Get OpenWrt sources +- Run: ./prepare-openwrt.sh +- Choose Stable, Beta, or Snapshot. +- The script: + - Clones/updates the OpenWrt repo into ./openwrt (or uses the current repo if you’re already inside it). + - Updates/install feeds and runs make defconfig. + +3) Add optional external packages +- From the OpenWrt root: + - ../add-external-repos.sh +- This pulls extra LuCI packages into package/. + +4) Import a device config.buildinfo (optional but convenient) +- From the OpenWrt root: + - ../download-config.sh +- Pick a device, and the script writes .config and runs make defconfig. + +5) Enable additional packages from a list (optional) +- Create a file packages.txt containing package names (whitespace or newlines). +- From the OpenWrt root: + - ../add-openwrt-packages.sh packages.txt + +6) Configure Go bootstrap path (if needed) +- From the OpenWrt root: + - ../update-go-path.sh +- This sets CONFIG_GOLANG_EXTERNAL_BOOTSTRAP_ROOT to the latest /usr/lib/go-X.XX/ found. +- You can override it manually in .config if necessary. + +7) Apply DAHDI patch (only if you build telephony/dahdi-linux) +- Ensure telephony feed is installed: + - ./scripts/feeds update telephony + - ./scripts/feeds install -a +- Then run: + - ../apply-dahdi-patches.sh +- Build the package: + - make package/feeds/telephony/dahdi-linux/{clean,prepare} V=s + - make package/feeds/telephony/dahdi-linux/compile V=s + +8) Build OpenWrt +- Common commands: + - make menuconfig + - make -j$(nproc) download world +- Artifacts will be in bin/ after the build completes. + +## Script usage notes and tips +- Run locations: + - prepare-openwrt-env.sh, prepare-openwrt.sh: from anywhere (they manage/enter ./openwrt). + - All others: run from inside the OpenWrt source root unless otherwise indicated. +- Feeds: + - If a package can’t be found, ensure feeds are updated/installed: + - ./scripts/feeds update -a && ./scripts/feeds install -a +- Go toolchain: + - On x86_64, Go is optional unless your selection pulls packages needing Go (e.g., firewall4 in some versions). If needed: + - sudo apt install golang -y + - Then use update-go-path.sh to set .config automatically. +- ARM64 multilib: + - The script installs cross multilib packages for better compatibility, but not all targets need them. If apt errors on specific multilib packages, remove or adjust as appropriate for your environment. + +## Troubleshooting +- Telephony feed not found when applying DAHDI patch: + - Run feeds update/install for telephony as shown above. +- Version detection in download-config.sh: + - If you’re on a branch like openwrt-24.10, the script will try to find the latest v24.10.x tag automatically. Otherwise it prompts for a version (e.g., 24.10.4 or SNAPSHOT). +- Missing packages in add-openwrt-packages.sh: + - Ensure the corresponding feed is enabled in feeds.conf.default and run feeds update/install. +- Permission errors: + - Scripts use umask 022 and do not require root except when installing apt packages. +- Clean up and rebuild a package: + - make package//{clean,compile} V=s +- Full rebuild: + - make clean; make -j$(nproc) download world + +## Directory behavior +- If you run prepare-openwrt.sh from inside a directory named openwrt-build-helper, it will: + - Move your helper files to openwrt/helper/ + - Rename the top-level folder to openwrt/ + - Continue setup within openwrt/ + +## Security and safety +- Scripts use set -e to stop on errors. +- They modify .config and write under package/ and feeds/ inside your OpenWrt tree. +- Backup your .config if you need a known baseline. + +## License and authorship +- Scripts authored by Zhe Yuan with help from ChatGPT. +- License: MIT (unless you choose a different license; update this line accordingly).