config_editor/build.sh
hujinyang 7391a4b29b 上传文件至 /
第一次提交

Signed-off-by: hujinyang <hujinyang@pw.com>
2025-12-03 07:42:43 +00:00

321 lines
9.0 KiB
Bash
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# config Editor 一键构建脚本
set -e
# 配置变量
PACKAGE_NAME="config-editor"
VERSION="1.0"
ARCHITECTURE="amd64"
MAINTAINER="hjy <hjy@pw.com>"
echo "=========================================="
echo "Config Editor 构建脚本 (虚拟环境版)"
echo "版本: $VERSION"
echo "架构: $ARCHITECTURE"
echo "=========================================="
# 检查依赖
echo "检查构建依赖..."
if ! command -v dpkg-deb &> /dev/null; then
echo "错误: 需要 dpkg-deb请安装: sudo apt install dpkg-dev"
exit 1
fi
# 检查源代码是否存在
echo "检查源代码..."
if [ ! -f "config_editor.py" ]; then
echo "错误: 未找到主程序文件 config_editor.py"
echo "请确保在项目根目录运行此脚本,且包含 config_editor.py 文件"
exit 1
fi
# 创建构建目录
BUILD_DIR="/tmp/${PACKAGE_NAME}-build"
echo "创建构建目录: $BUILD_DIR"
rm -rf "$BUILD_DIR"
mkdir -p "$BUILD_DIR/DEBIAN"
mkdir -p "$BUILD_DIR/usr/share/applications"
mkdir -p "$BUILD_DIR/usr/share/config-editor"
mkdir -p "$BUILD_DIR/usr/bin"
# 复制应用文件
echo "复制应用文件..."
echo "复制主程序 config_editor.py"
cp config_editor.py "$BUILD_DIR/usr/share/config-editor/"
# 复制配置文件
if [ -f "config_editor_rules.json" ]; then
echo "复制配置文件 config_editor_rules.json"
cp config_editor_rules.json "$BUILD_DIR/usr/share/config-editor/"
else
echo "警告: 未找到 config_editor_rules.json 文件"
fi
if [ -f "config_editor_settings.json" ]; then
echo "复制配置文件 config_editor_settings.json"
cp config_editor_settings.json "$BUILD_DIR/usr/share/config-editor/"
else
echo "警告: 未找到 config_editor_settings.json 文件"
fi
# 复制所有Python文件
echo "复制其他Python文件..."
find . -maxdepth 1 -name "*.py" ! -name "build.sh" -exec cp {} "$BUILD_DIR/usr/share/config-editor/" \; 2>/dev/null || true
# 显示复制的文件
echo "已复制的文件:"
ls -la "$BUILD_DIR/usr/share/config-editor/"
# 检查是否复制了真实的应用文件
if [ ! -f "$BUILD_DIR/usr/share/config-editor/config_editor.py" ]; then
echo "错误: 未成功复制 config_editor.py 文件"
exit 1
fi
# 创建桌面文件
echo "创建桌面文件..."
cat > "$BUILD_DIR/usr/share/applications/config-editor.desktop" << EOF
[Desktop Entry]
Version=1.1
Type=Application
Name=Config Editor
Comment=Configuration Management System
Exec=config-editor
Icon=config-editor
Categories=Development;Settings;
Terminal=false
StartupWMClass=ConfigEditor
EOF
# 创建虚拟环境安装脚本(已修复权限问题)
echo "创建虚拟环境安装脚本..."
cat > "$BUILD_DIR/usr/share/config-editor/setup_venv.sh" << 'EOF'
#!/bin/bash
# 虚拟环境安装脚本
APP_DIR="/usr/share/config-editor"
VENV_DIR="$APP_DIR/venv"
echo "设置Config Editor虚拟环境..."
# 检查是否使用sudo
if [ "$EUID" -ne 0 ]; then
echo "错误: 请使用sudo运行此脚本"
echo "命令: sudo $0"
exit 1
fi
# 检查虚拟环境是否存在
if [ ! -d "$VENV_DIR" ]; then
echo "创建虚拟环境..."
python3 -m venv --system-site-packages "$VENV_DIR"
if [ $? -ne 0 ]; then
echo "错误: 无法创建虚拟环境"
echo "请确保已安装 python3-venv: sudo apt install python3-venv"
exit 1
fi
fi
# 激活虚拟环境并安装依赖
echo "激活虚拟环境并安装依赖..."
source "$VENV_DIR/bin/activate"
# 修复权限问题
echo "修复虚拟环境权限..."
chmod -R 755 "$VENV_DIR"
chmod +x "$VENV_DIR/bin"/* 2>/dev/null || true
chmod +x "$VENV_DIR/bin/python" 2>/dev/null || true
chmod +x "$VENV_DIR/bin/pip" 2>/dev/null || true
# 升级pip
echo "升级pip..."
python -m pip install --upgrade pip
# 安装PyQt6
echo "安装PyQt6..."
pip install PyQt6 -i https://pypi.tuna.tsinghua.edu.cn/simple/
# 如果有requirements.txt安装其他依赖
if [ -f "$APP_DIR/requirements.txt" ]; then
echo "安装其他依赖..."
pip install -r "$APP_DIR/requirements.txt" -i https://pypi.tuna.tsinghua.edu.cn/simple/
fi
# 再次确保权限正确
echo "设置最终权限..."
chmod -R 755 "$VENV_DIR"
chmod +x "$VENV_DIR/bin"/* 2>/dev/null || true
echo "虚拟环境设置完成"
echo "安装在虚拟环境中的包:"
pip list
EOF
chmod +x "$BUILD_DIR/usr/share/config-editor/setup_venv.sh"
# 创建启动脚本 - 使用虚拟环境(已修复权限检查)
echo "创建启动脚本..."
cat > "$BUILD_DIR/usr/bin/config-editor" << 'EOF'
#!/bin/bash
# Config Editor 启动脚本 - 虚拟环境版本
# 应用目录
APP_DIR="/usr/share/config-editor"
VENV_DIR="$APP_DIR/venv"
LOG_FILE="${HOME}/.config/config-editor/log.txt"
# 创建日志目录
mkdir -p "$(dirname "$LOG_FILE")"
# 记录启动日志
echo "$(date): 启动Config Editor" >> "$LOG_FILE"
# 设置环境变量
export DISPLAY=":${XDG_SESSION_DISPLAY:-1}"
export XAUTHORITY="${HOME}/.Xauthority"
# 尝试多种方法设置DBUS
if [ -f "/run/user/$(id -u)/bus" ]; then
export DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/$(id -u)/bus"
elif [ -n "$DBUS_SESSION_BUS_ADDRESS" ]; then
: # 保持已有设置
else
# 尝试从进程获取
DBUS_ADDR=$(ps -u $(id -u) -o command | grep -o 'dbus-daemon.*address=unix:path=[^ ]*' | head -1 | sed 's/.*address=//')
if [ -n "$DBUS_ADDR" ]; then
export DBUS_SESSION_BUS_ADDRESS="$DBUS_ADDR"
fi
fi
# 修复X11权限
if [ -f "${HOME}/.Xauthority" ]; then
export XAUTHORITY="${HOME}/.Xauthority"
fi
# 检查虚拟环境
if [ ! -d "$VENV_DIR" ]; then
echo "错误: 虚拟环境未找到。请先运行:"
echo " sudo /usr/share/config-editor/setup_venv.sh"
exit 1
fi
# 检查并修复权限(如果需要)
if [ ! -x "$VENV_DIR/bin/python" ] || [ ! -x "$VENV_DIR/bin/pip" ]; then
echo "警告: 虚拟环境权限问题,请重新运行安装脚本:"
echo " sudo /usr/share/config-editor/setup_venv.sh"
exit 1
fi
# 检查PyQt6是否安装
if ! "$VENV_DIR/bin/python" -c "import PyQt6" 2>/dev/null; then
echo "错误: PyQt6未在虚拟环境中安装。请运行:"
echo " sudo /usr/share/config-editor/setup_venv.sh"
exit 1
fi
# 切换到应用目录
cd "$APP_DIR"
# 记录环境信息
echo "DISPLAY: $DISPLAY" >> "$LOG_FILE"
echo "XAUTHORITY: $XAUTHORITY" >> "$LOG_FILE"
# 使用虚拟环境运行Python应用
exec "$VENV_DIR/bin/python" config_editor.py "$@" >> "$LOG_FILE" 2>&1
EOF
chmod +x "$BUILD_DIR/usr/bin/config-editor"
# 创建控制文件
echo "创建DEBIAN控制文件..."
cat > "$BUILD_DIR/DEBIAN/control" << EOF
Package: $PACKAGE_NAME
Version: $VERSION
Architecture: $ARCHITECTURE
Depends: python3, python3-venv
Recommends: libnotify-bin, x11-xserver-utils
Maintainer: $MAINTAINER
Description: Configuration Management System (VirtualEnv)
A PyQt6-based configuration management editor using virtual environment.
Provides grouping management, validation rules, and auto-grouping features.
This version uses virtual environment for PyQt6.
EOF
# 创建安装后脚本
echo "创建安装后脚本..."
cat > "$BUILD_DIR/DEBIAN/postinst" << 'EOF'
#!/bin/bash
# 安装后脚本
set -e
echo "Config Editor 安装完成!"
echo ""
echo "更新桌面数据库..."
update-desktop-database /usr/share/applications 2>/dev/null || true
echo ""
echo "重要: 需要设置虚拟环境才能运行应用"
echo "请执行以下命令完成安装:"
echo " sudo /usr/share/config-editor/setup_venv.sh"
echo ""
echo "使用说明:"
echo "1. 设置虚拟环境: sudo /usr/share/config-editor/setup_venv.sh"
echo "2. 在终端运行: config-editor"
# 设置文件权限
chmod 755 /usr/bin/config-editor
chmod 755 /usr/share/config-editor/setup_venv.sh
# 设置应用文件权限
chmod -R 644 /usr/share/config-editor/* 2>/dev/null || true
chmod 755 /usr/share/config-editor/*.py 2>/dev/null || true
chmod 755 /usr/share/config-editor/*.sh 2>/dev/null || true
# 为虚拟环境目录预留权限
mkdir -p /usr/share/config-editor/venv 2>/dev/null || true
chmod 755 /usr/share/config-editor/venv 2>/dev/null || true
exit 0
EOF
chmod +x "$BUILD_DIR/DEBIAN/postinst"
# 构建deb包
echo "构建deb包..."
dpkg-deb --build "$BUILD_DIR" "${PACKAGE_NAME}_${VERSION}_${ARCHITECTURE}.deb"
# 验证包
echo "验证deb包..."
if dpkg -I "${PACKAGE_NAME}_${VERSION}_${ARCHITECTURE}.deb" > /dev/null; then
echo "✓ 包验证成功"
else
echo "✗ 包验证失败"
exit 1
fi
# 清理构建目录
echo "清理构建目录..."
rm -rf "$BUILD_DIR"
echo ""
echo "=========================================="
echo "构建成功完成!"
echo "生成的deb包: ${PACKAGE_NAME}_${VERSION}_${ARCHITECTURE}.deb"
echo ""
echo "安装步骤:"
echo "1. 安装deb包: sudo dpkg -i ${PACKAGE_NAME}_${VERSION}_${ARCHITECTURE}.deb"
echo "2. 安装依赖(如有需要): sudo apt install -f"
echo "3. 设置虚拟环境: sudo /usr/share/config-editor/setup_venv.sh"
echo ""
echo "此版本特点:"
echo "✓ 修复了虚拟环境权限问题"
echo "✓ 使用 --system-site-packages 参数"
echo "✓ 自动使用清华PyPI镜像"
echo "✓ 简化了依赖和脚本"
echo "=========================================="
# 显示包信息
echo ""
echo "包信息:"
dpkg -I "${PACKAGE_NAME}_${VERSION}_${ARCHITECTURE}.deb"