-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathbuild-deb.sh
More file actions
163 lines (135 loc) · 4.92 KB
/
build-deb.sh
File metadata and controls
163 lines (135 loc) · 4.92 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
#!/bin/bash
# 网络调试助手 deb包构建脚本(二进制版本)
set -e
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# 参数解析
REBUILD_BINARY=true
if [ "$1" = "--skip-binary" ]; then
REBUILD_BINARY=false
fi
echo -e "${BLUE}🚀 开始构建网络调试助手 deb包(二进制版本)${NC}"
# 检查依赖
if ! command -v dpkg-deb &> /dev/null; then
echo -e "${RED}❌ dpkg-deb 未安装,请先安装:sudo apt-get install dpkg-dev${NC}"
exit 1
fi
if $REBUILD_BINARY && ! command -v pyinstaller &> /dev/null; then
echo -e "${YELLOW}📦 安装PyInstaller${NC}"
pip3 install pyinstaller
fi
# 项目目录
PROJECT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PACKAGING_DIR="$PROJECT_DIR/packaging"
BUILD_DIR="$PROJECT_DIR/build"
BACKEND_DIR="$PROJECT_DIR/backend"
FRONTEND_DIR="$PROJECT_DIR/front"
DIST_DIR="$PROJECT_DIR/dist"
# 清理之前的构建(仅清理BUILD_DIR,保留DIST_DIR)
echo -e "${YELLOW}📁 项目目录: $PROJECT_DIR${NC}"
if [ -d "$BUILD_DIR" ]; then
echo -e "${YELLOW}🧹 清理之前的构建文件${NC}"
rm -rf "$BUILD_DIR"
fi
# 如果需要重新构建二进制
if $REBUILD_BINARY; then
# 安装构建依赖
echo -e "${YELLOW}📦 安装构建依赖${NC}"
cd "$BACKEND_DIR"
pip3 install -r requirements.txt
# 重新构建前端
echo -e "${YELLOW}🏗️ 构建前端项目${NC}"
cd "$FRONTEND_DIR"
# 检查Node.js版本并使用正确的版本
NODE_VERSION=$(node --version)
echo -e "${YELLOW}当前Node.js版本: $NODE_VERSION${NC}"
# 如果Node.js版本过旧,尝试使用nvm安装的高版本Node.js
if [[ $NODE_VERSION != v2[0-9]* && $NODE_VERSION != v[3-9][0-9]* ]]; then
if [ -x "$HOME/.nvm/versions/node/v22.20.0/bin/node" ]; then
echo -e "${YELLOW}使用NVM安装的Node.js v22.20.0${NC}"
"$HOME/.nvm/versions/node/v22.20.0/bin/npm" run build
else
echo -e "${RED}❌ Node.js版本过低,Vite需要Node.js v20.19+或v22.12+${NC}"
echo -e "${RED}请升级Node.js或确保PATH中包含兼容版本${NC}"
exit 1
fi
else
npm run build
fi
# 检查构建结果
if [ ! -d "$BACKEND_DIR/static" ]; then
echo -e "${RED}❌ 前端构建失败,静态文件目录不存在${NC}"
exit 1
fi
echo -e "${GREEN}✅ 前端构建完成${NC}"
# 构建二进制文件
echo -e "${YELLOW}🔨 构建Python二进制文件${NC}"
cd "$BACKEND_DIR"
# 使用PyInstaller构建
pyinstaller net-tools.spec --clean
# 检查构建结果
if [ ! -d "$BACKEND_DIR/dist/net-tools" ]; then
echo -e "${RED}❌ 二进制构建失败${NC}"
exit 1
fi
# 移动二进制文件到项目根目录
if [ -d "$DIST_DIR" ]; then
rm -rf "$DIST_DIR"
fi
mkdir -p "$DIST_DIR"
mv "$BACKEND_DIR/dist/net-tools" "$DIST_DIR"
echo -e "${GREEN}✅ 二进制构建完成${NC}"
else
echo -e "${YELLOW}⏭️ 跳过二进制构建(已通过build-binary.sh构建)${NC}"
# 检查二进制文件是否存在
if [ ! -f "$DIST_DIR/net-tools" ]; then
echo -e "${RED}❌ 二进制文件不存在,请先运行build-binary.sh${NC}"
exit 1
fi
fi
# 创建构建目录
mkdir -p "$BUILD_DIR"
# 复制打包文件
echo -e "${YELLOW}📦 准备打包文件${NC}"
cp -r "$PACKAGING_DIR" "$BUILD_DIR/net-tools"
# 更新后端文件(使用二进制文件)
echo -e "${YELLOW}📄 更新二进制文件${NC}"
rm -rf "$BUILD_DIR/net-tools/opt/net-tools"
mkdir -p "$BUILD_DIR/net-tools/opt/net-tools"
# 复制二进制文件和静态资源
cp -r "$DIST_DIR"/* "$BUILD_DIR/net-tools/opt/net-tools/"
# 复制配置文件模板
cp "$BACKEND_DIR/config.py" "$BUILD_DIR/net-tools/opt/net-tools/"
echo '{"port": 20001, "host": "0.0.0.0"}' > "$BUILD_DIR/net-tools/opt/net-tools/default_config.json"
# 确保权限正确
echo -e "${YELLOW}🔐 设置文件权限${NC}"
chmod +x "$BUILD_DIR/net-tools/DEBIAN/postinst"
chmod +x "$BUILD_DIR/net-tools/DEBIAN/prerm"
chmod +x "$BUILD_DIR/net-tools/DEBIAN/postrm"
chmod +x "$BUILD_DIR/net-tools/usr/bin/net-tools"
chmod +x "$BUILD_DIR/net-tools/opt/net-tools/net-tools"
# 构建deb包
echo -e "${YELLOW}📦 构建deb包${NC}"
cd "$BUILD_DIR"
dpkg-deb --build net-tools
# 检查包
echo -e "${YELLOW}🔍 检查deb包${NC}"
if [ -f "$BUILD_DIR/net-tools.deb" ]; then
echo -e "${GREEN}✅ deb包构建成功!${NC}"
echo -e "${BLUE}📄 包信息:${NC}"
dpkg-deb --info "$BUILD_DIR/net-tools.deb"
echo ""
echo -e "${BLUE}📁 包内容:${NC}"
dpkg-deb --contents "$BUILD_DIR/net-tools.deb"
echo ""
echo -e "${GREEN}🎉 构建完成!${NC}"
echo -e "${BLUE}安装命令: sudo dpkg -i $BUILD_DIR/net-tools.deb${NC}"
echo -e "${BLUE}卸载命令: sudo dpkg -r net-tools${NC}"
else
echo -e "${RED}❌ deb包构建失败${NC}"
exit 1
fi