11 KiB
11 KiB
🔨 MosDNS 多平台构建脚本使用说明
支持 Linux、Windows、macOS 全平台编译,自动构建 Web UI
📋 脚本对比
| 特性 | Windows 版本 | Linux 版本 |
|---|---|---|
| 文件名 | build-all-platforms.bat |
build-all-platforms.sh |
| 运行环境 | Windows CMD/PowerShell | Linux/macOS Bash |
| 语法 | 批处理 (.bat) | Shell Script (.sh) |
| 颜色支持 | ✅ 有限支持 | ✅ 完整 ANSI 色彩 |
| 交互菜单 | ✅ | ✅ |
| 自动构建 Vue | ✅ | ✅ |
🚀 快速开始
Linux/macOS 使用方法
# 1. 赋予执行权限
chmod +x build-all-platforms.sh
# 2. 运行脚本
./build-all-platforms.sh
Windows 使用方法
# 直接运行批处理文件
build-all-platforms.bat
📝 功能特性
1. 自动环境检查
检查项目:
- ✅ Go 环境是否安装
- ✅ Node.js 环境(用于构建 Vue)
- ✅ npm 包管理器
- ✅ Vue 前端是否已构建
自动处理:
# 如果 web-ui/dist 不存在,自动执行:
cd web-ui
npm install # 安装依赖
npm run build # 构建前端
cd ..
2. 交互式菜单
╔════════════════════════════════════════════╗
║ MosDNS 多平台构建工具 (带 Web UI) ║
╚════════════════════════════════════════════╝
请选择要编译的平台:
[1] Linux AMD64 (x86_64 服务器)
[2] Linux ARM64 (树莓派、ARM 服务器)
[3] Windows AMD64 (Windows 64位)
[4] macOS AMD64 (Intel Mac)
[5] macOS ARM64 (Apple Silicon M1/M2/M3)
[6] 编译所有 Linux 版本 (AMD64 + ARM64)
[7] 编译所有 macOS 版本 (AMD64 + ARM64)
[8] 编译所有 Windows 版本 (仅 AMD64)
[A] 编译全部平台 (推荐用于发布)
[0] 退出
3. 支持的平台
| 平台 | 架构 | 输出文件 | 用途 |
|---|---|---|---|
| Linux | AMD64 | mosdns-linux-amd64 |
x86_64 服务器 |
| Linux | ARM64 | mosdns-linux-arm64 |
树莓派、ARM 服务器 |
| Windows | AMD64 | mosdns-windows-amd64.exe |
Windows 64位 |
| macOS | AMD64 | mosdns-darwin-amd64 |
Intel Mac |
| macOS | ARM64 | mosdns-darwin-arm64 |
Apple Silicon (M1/M2/M3) |
4. 构建参数
自动设置:
VERSION="v5.0.0-webui"
BUILD_TIME=$(date '+%Y-%m-%d %H:%M:%S')
CGO_ENABLED=0
LDFLAGS="-s -w -X 'main.version=$VERSION' -X 'main.buildTime=$BUILD_TIME'"
编译优化:
-s: 去除符号表(减小体积)-w: 去除 DWARF 调试信息(减小体积)CGO_ENABLED=0: 静态编译,无需外部依赖
📊 构建流程
完整流程示意图
┌─────────────────────────────────────────┐
│ 1. 检查 Go 环境 │
└─────────────┬───────────────────────────┘
│
▼
┌─────────────────────────────────────────┐
│ 2. 检查/构建 Vue 前端 │
│ - 检查 web-ui/dist/index.html │
│ - 如不存在:npm install && npm build │
└─────────────┬───────────────────────────┘
│
▼
┌─────────────────────────────────────────┐
│ 3. 显示平台选择菜单 │
└─────────────┬───────────────────────────┘
│
▼
┌─────────────────────────────────────────┐
│ 4. 初始化构建参数 │
│ - 设置版本号、构建时间 │
│ - 创建 dist/ 目录 │
│ - 设置 LDFLAGS │
└─────────────┬───────────────────────────┘
│
▼
┌─────────────────────────────────────────┐
│ 5. 执行跨平台编译 │
│ - 设置 GOOS, GOARCH │
│ - go build -ldflags="..." │
└─────────────┬───────────────────────────┘
│
▼
┌─────────────────────────────────────────┐
│ 6. 显示构建结果 │
│ - 列出构建产物 │
│ - 显示文件大小 │
│ - 提供使用说明 │
└─────────────┬───────────────────────────┘
│
▼
┌─────────────────────────────────────────┐
│ 7. 询问是否继续 (循环) │
└─────────────────────────────────────────┘
🎨 输出示例
成功构建
════════════════════════════════════════════
🎉 构建完成!
📦 构建产物列表:
mosdns-darwin-amd64
mosdns-darwin-arm64
mosdns-linux-amd64
mosdns-linux-arm64
mosdns-windows-amd64.exe
📊 文件大小详情:
mosdns-linux-amd64 - 24M
mosdns-linux-arm64 - 23M
mosdns-windows-amd64.exe - 24M
mosdns-darwin-amd64 - 24M
mosdns-darwin-arm64 - 23M
════════════════════════════════════════════
📝 使用方法:
Linux:
chmod +x dist/mosdns-linux-amd64
./dist/mosdns-linux-amd64 start -c config.yaml
Windows:
dist\mosdns-windows-amd64.exe start -c config.yaml
macOS:
chmod +x dist/mosdns-darwin-amd64
./dist/mosdns-darwin-amd64 start -c config.yaml
🌐 Web 管理界面: http://localhost:5555
💡 提示: 所有可执行文件已内嵌 Web 资源,可独立运行
🔧 高级用法
1. 仅构建 Vue 前端
cd web-ui
npm install
npm run build
2. 手动编译单个平台
# Linux AMD64
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 \
go build -ldflags="-s -w" -o dist/mosdns-linux-amd64 .
# macOS ARM64
CGO_ENABLED=0 GOOS=darwin GOARCH=arm64 \
go build -ldflags="-s -w" -o dist/mosdns-darwin-arm64 .
# Windows AMD64
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 \
go build -ldflags="-s -w" -o dist/mosdns-windows-amd64.exe .
3. 自定义版本号
编辑脚本:
# Linux 脚本 (build-all-platforms.sh)
VERSION="v5.0.0-webui" # 修改此行
# Windows 脚本 (build-all-platforms.bat)
set "VERSION=v5.0.0-webui" # 修改此行
4. 自定义输出目录
# Linux 脚本
OUTPUT_DIR="dist" # 修改为 "release" 或其他目录
# Windows 脚本
set "OUTPUT_DIR=dist" # 修改为 "release" 或其他目录
🐛 故障排查
问题 1: Go 环境未找到
错误信息:
❌ Go 未安装或不在 PATH 中
解决方案:
# 检查 Go 是否安装
which go
go version
# 如未安装,请访问 https://golang.org/dl/
# 或使用包管理器安装
sudo apt install golang-go # Debian/Ubuntu
brew install go # macOS
问题 2: Node.js 环境未找到
错误信息:
❌ Node.js 未安装,无法构建 Vue 前端
解决方案:
# 检查 Node.js
node --version
npm --version
# 如未安装
sudo apt install nodejs npm # Debian/Ubuntu
brew install node # macOS
# 或访问 https://nodejs.org/
问题 3: Vue 构建失败
错误信息:
❌ Vue 构建失败
ERROR: "type-check" exited with 1.
解决方案:
# 已修复 TypeScript 类型错误
# 确保使用最新代码
cd web-ui
npm install
npm run build
问题 4: 权限不足 (Linux/macOS)
错误信息:
bash: ./build-all-platforms.sh: Permission denied
解决方案:
# 赋予执行权限
chmod +x build-all-platforms.sh
# 或使用 bash 执行
bash build-all-platforms.sh
📦 构建产物说明
文件大小
| 平台 | 预期大小 | 说明 |
|---|---|---|
| Linux AMD64 | ~24MB | 包含完整 Web UI |
| Linux ARM64 | ~23MB | ARM 架构稍小 |
| Windows AMD64 | ~24MB | .exe 可执行文件 |
| macOS AMD64 | ~24MB | Intel Mac |
| macOS ARM64 | ~23MB | Apple Silicon |
内嵌资源
每个可执行文件都包含:
- ✅ MosDNS 核心引擎
- ✅ 所有插件(包括 smart_fallback, mikrotik_addresslist 等)
- ✅ Vue 3 Web 管理界面(完整 SPA)
- ✅ 热加载功能
- ✅ RESTful API
优势:
- 🚀 单文件部署,无需额外依赖
- 📦 开箱即用,无需安装 Node.js
- 🔒 资源嵌入二进制,安全可靠
🎯 最佳实践
1. 发布版本构建
# 选择 [A] 编译全部平台
./build-all-platforms.sh
# 输入: A
# 构建产物
dist/
├── mosdns-darwin-amd64
├── mosdns-darwin-arm64
├── mosdns-linux-amd64
├── mosdns-linux-arm64
└── mosdns-windows-amd64.exe
2. 测试单平台
# 选择 [1] 仅编译 Linux AMD64
./build-all-platforms.sh
# 输入: 1
# 立即测试
chmod +x dist/mosdns-linux-amd64
./dist/mosdns-linux-amd64 start -c config.yaml
3. CI/CD 集成
# GitHub Actions 示例
- name: Build all platforms
run: |
chmod +x build-all-platforms.sh
echo "A" | ./build-all-platforms.sh
📚 相关文档
🎉 总结
Linux 版本脚本特性
✅ 完整功能对等 - 与 Windows 版本功能完全一致
✅ 彩色输出 - 使用 ANSI 色彩增强可读性
✅ 交互式菜单 - 友好的用户界面
✅ 错误处理 - 完善的错误检测和提示
✅ 跨平台编译 - 支持 5 种平台架构
✅ 自动化流程 - Vue 前端自动构建
使用场景
- 🖥️ Linux 服务器: 直接在服务器上构建
- 🍎 macOS 开发机: 本地开发和测试
- 🐳 Docker 容器: 容器化构建环境
- 🔄 CI/CD 管道: 自动化构建和发布
🔨 构建脚本已准备就绪,开始构建您的 MosDNS!
更新时间: 2025-10-16
版本: v1.0