8ad4c3576d
- Fixed verifyAssignment being too strict for new clients - Fixed parseRequestedIP string conversion bug - Fixed response sent to 0.0.0.0 instead of broadcast address - Added SO_BROADCAST support for UDP socket - Fixed session persistence after page refresh (localStorage) - Added in-memory session store for auth middleware - Added config reloader so DHCP server picks up web UI changes dynamically
4.4 KiB
4.4 KiB
🔨 构建指南
如果在安装过程中遇到问题,请参考本指南。
问题:依赖下载失败
错误信息
go: github.com/google/gopacket@v1.2.3: reading github.com/google/gopacket/go.mod at revision v1.2.3: unknown revision v1.2.3
解决方案
已修复 go.mod 文件。请执行以下步骤:
方法 1:重新运行安装脚本
cd /path/to/dhcp-dns-manager
sudo ./install.sh
方法 2:手动修复
# 1. 进入项目目录
cd /path/to/dhcp-dns-manager
# 2. 删除旧的 go.sum(如果有)
rm -f go.sum
# 3. 清理模块缓存
go clean -modcache
# 4. 重新下载依赖
go mod download
# 5. 整理依赖
go mod tidy
# 6. 编译
go build -o dhcp-dns-manager ./cmd
问题:CGO 编译失败
错误信息
error: gcc failed: command not found
解决方案
需要安装 GCC 编译器:
Debian/Ubuntu:
sudo apt update
sudo apt install build-essential
RHEL/CentOS:
sudo yum install gcc make
然后重新编译:
go build -o dhcp-dns-manager ./cmd
问题:SQLite 驱动编译失败
错误信息
sqlite3.h: No such file or directory
解决方案
需要安装 SQLite 开发库:
Debian/Ubuntu:
sudo apt install libsqlite3-dev
RHEL/CentOS:
sudo yum install sqlite-devel
然后重新编译:
CGO_ENABLED=1 go build -o dhcp-dns-manager ./cmd
问题:Go 版本过低
错误信息
go: module requires Go 1.21
解决方案
安装最新版 Go:
# 1. 下载
wget https://go.dev/dl/go1.21.0.linux-amd64.tar.gz
# 2. 解压
sudo tar -C /usr/local -xzf go1.21.0.linux-amd64.tar.gz
# 3. 添加到 PATH
echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.bashrc
source ~/.bashrc
# 4. 验证
go version
完整手动安装步骤
如果自动安装脚本失败,可以手动安装:
1. 安装依赖
# Debian/Ubuntu
sudo apt update
sudo apt install -y git build-essential libsqlite3-dev
# RHEL/CentOS
sudo yum install -y git gcc make sqlite-devel
2. 安装 Go(如果未安装)
wget https://go.dev/dl/go1.21.0.linux-amd64.tar.gz
sudo tar -C /usr/local -xzf go1.21.0.linux-amd64.tar.gz
export PATH=$PATH:/usr/local/go/bin
3. 编译程序
cd /path/to/dhcp-dns-manager
# 下载依赖
go mod download
go mod tidy
# 编译
CGO_ENABLED=1 go build -o dhcp-dns-manager ./cmd
4. 创建 systemd 服务
sudo nano /etc/systemd/system/dhcp-dns-manager.service
内容:
[Unit]
Description=DHCP & DNS Manager Service
After=network.target
[Service]
Type=simple
User=root
WorkingDirectory=/path/to/dhcp-dns-manager
ExecStart=/path/to/dhcp-dns-manager/dhcp-dns-manager -config /path/to/dhcp-dns-manager/configs/config.json
Restart=always
[Install]
WantedBy=multi-user.target
5. 启动服务
sudo systemctl daemon-reload
sudo systemctl enable dhcp-dns-manager
sudo systemctl start dhcp-dns-manager
sudo systemctl status dhcp-dns-manager
6. 配置防火墙
# UFW
sudo ufw allow 53/udp
sudo ufw allow 67/udp
sudo ufw allow 8080/tcp
# Firewalld
sudo firewall-cmd --permanent --add-port=53/udp
sudo firewall-cmd --permanent --add-port=67/udp
sudo firewall-cmd --permanent --add-port=8080/tcp
sudo firewall-cmd --reload
验证安装
检查服务状态
systemctl status dhcp-dns-manager
检查端口监听
sudo netstat -ulpn | grep -E ':(53|67|8080)'
访问 Web 界面
http://your-server-ip:8080
常见错误速查
| 错误 | 原因 | 解决方案 |
|---|---|---|
go: not found |
Go 未安装 | 安装 Go 1.21+ |
gcc: command not found |
缺少编译器 | 安装 build-essential |
sqlite3.h: No such file |
缺少 SQLite 头文件 | 安装 libsqlite3-dev |
permission denied |
权限不足 | 使用 sudo |
port already in use |
端口被占用 | 修改 config.json 端口 |
module not found |
依赖未下载 | 运行 go mod download |
获取帮助
如果以上方法都无法解决问题:
-
查看详细日志:
journalctl -u dhcp-dns-manager -f -
检查 Go 环境:
go version go env -
提交 Issue 时请提供:
- 操作系统版本
- Go 版本
- 完整错误信息
- 已尝试的解决方案
最后更新: 2026-04-23