#!/bin/bash
set -euo pipefail
OPENWRT_VERSION="23.05.3"
TARGET="ar71xx/generic"
PROFILE="tl-wr842n-v3"
BUILD_DIR="openwrt"
CONFIG_FILE=".config"
CORES=$(nproc)
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'
log_info() {
echo -e "${GREEN}[INFO]${NC} $1"
}
log_warn() {
echo -e "${YELLOW}[WARN]${NC} $1"
}
log_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
check_environment() {
log_info "检查构建环境..."
if ! grep -q "Ubuntu 22.04" /etc/os-release; then
log_warn "建议使用 Ubuntu 22.04 LTS 以获得最佳兼容性"
fi
available_space=$(df . | tail -1 | awk '{print $4}')
if [ "$available_space" -lt 20971520 ]; then
log_error "可用磁盘空间不足 20GB,构建可能失败"
exit 1
fi
total_memory=$(free -m | awk 'NR==2{print $2}')
if [ "$total_memory" -lt 4096 ]; then
log_warn "内存不足 4GB,构建速度可能较慢"
fi
log_info "环境检查通过"
}
install_dependencies() {
log_info "安装构建依赖..."
sudo apt update
sudo apt upgrade
sudo apt install -y \
build-essential ccache ecj fastjar file g++ gawk \
gettext git java-propose-classpath libelf-dev libncurses5-dev \
libncursesw5-dev libssl-dev 2to3 python2 python-is-python3 python3 unzip wget \
python3-distutils python3-setuptools python3-dev rsync subversion \
swig time xsltproc zlib1g-dev
log_info "依赖安装完成"
}
download_source() {
log_info "下载 OpenWrt 源码..."
if [ ! -d "$BUILD_DIR" ]; then
git clone https://gitcode.com/lh85558/openwrt.git "$BUILD_DIR" -b v${OPENWRT_VERSION}
else
log_info "源码目录已存在,更新源码..."
cd "$BUILD_DIR"
git fetch origin
git checkout v${OPENWRT_VERSION}
git pull origin v${OPENWRT_VERSION}
cd ..
fi
log_info "源码准备完成"
}
update_feeds() {
log_info "更新 feeds..."
cd "$BUILD_DIR"
sed -i 's_git.openwrt.org/project_git.openwrt.org.cn_mirror_g' feeds.conf.default
sed -i 's_downloads.openwrt.org_downloads.openwrt.org.cn_mirror_g' feeds.conf.default
./scripts/feeds update -a
./scripts/feeds install -a
cd ..
log_info "Feeds 更新完成"
}
apply_config() {
log_info "应用配置文件..."
cd "$BUILD_DIR"
cp ../"$CONFIG_FILE" .
make defconfig
cd ..
log_info "配置应用完成"
}
download_packages() {
log_info "下载依赖包..."
cd "$BUILD_DIR"
make download -j${CORES} V=s
cd ..
log_info "依赖包下载完成"
}
compile_firmware() {
log_info "开始编译固件..."
cd "$BUILD_DIR"
make clean
log_info "使用 ${CORES} 个核心进行编译..."
make -j${CORES} V=s
cd ..
log_info "编译完成"
}
copy_firmware() {
log_info "复制固件到输出目录..."
mkdir -p output
cd "$BUILD_DIR"
firmware_file=$(find bin/targets/${TARGET} -name "*${PROFILE}*sysupgrade.bin" | head -1)
if [ -n "$firmware_file" ] && [ -f "$firmware_file" ]; then
cp "$firmware_file" ../output/
log_info "固件已复制到 output/ 目录"
log_info "固件文件: $(basename "$firmware_file")"
else
log_error "未找到生成的固件文件"
exit 1
fi
cd ..
}
show_build_info() {
log_info "构建信息:"
echo "目标设备: $PROFILE"
echo "OpenWrt 版本: $OPENWRT_VERSION"
echo "构建时间: $(date)"
echo "输出目录: $(pwd)/output"
if [ -d "output" ]; then
echo "生成的文件:"
ls -la output/
fi
}
main() {
log_info "开始构建 TP842N-V3 打印服务器固件..."
check_environment
install_dependencies
download_source
update_feeds
apply_config
download_packages
compile_firmware
copy_firmware
show_build_info
log_info "构建完成!固件位于 output/ 目录"
}
main "$@"