diff --git a/LinuxGrubRepair.bin.spec b/LinuxGrubRepair.bin.spec new file mode 100644 index 0000000..d949235 --- /dev/null +++ b/LinuxGrubRepair.bin.spec @@ -0,0 +1,38 @@ +# -*- mode: python ; coding: utf-8 -*- + + +a = Analysis( + ['frontend.py'], + pathex=[], + binaries=[], + datas=[], + hiddenimports=[], + hookspath=[], + hooksconfig={}, + runtime_hooks=[], + excludes=[], + noarchive=False, + optimize=0, +) +pyz = PYZ(a.pure) + +exe = EXE( + pyz, + a.scripts, + a.binaries, + a.datas, + [], + name='LinuxGrubRepair.bin', + debug=False, + bootloader_ignore_signals=False, + strip=False, + upx=True, + upx_exclude=[], + runtime_tmpdir=None, + console=True, + disable_windowed_traceback=False, + argv_emulation=False, + target_arch=None, + codesign_identity=None, + entitlements_file=None, +) diff --git a/arch-install.sh b/arch-install.sh new file mode 100755 index 0000000..d041107 --- /dev/null +++ b/arch-install.sh @@ -0,0 +1,394 @@ +#!/bin/bash + +# ============================================================================== +# BootRepairTool - Arch Linux 源码安装脚本 +# ------------------------------------------------------------------------------ +# 功能: +# 1. 自动安装依赖 (git, tk, python) +# 2. 克隆项目到 /opt/boot-repair-tool +# 3. 创建启动脚本和桌面入口 +# 4. 提示用户如何运行 +# +# 使用方式: +# +# 方式一:从 Git 仓库安装(默认) +# 默认会从 GitHub 克隆最新版本: +# sudo bash arch-install.sh +# +# 或指定自定义仓库地址: +# sudo bash arch-install.sh git https://github.com/username/repo.git +# +# 方式二:本地安装(离线) +# 将项目文件夹复制到 Arch Linux 系统,进入目录运行: +# sudo bash arch-install.sh local +# +# 注意: 使用前请修改脚本中的 DEFAULT_REPO_URL 为实际仓库地址 +# ============================================================================== + +# --- 配置变量 --- +APP_NAME="Linux GRUB 引导修复工具" +APP_NAME_EN="BootRepairTool" +# 默认 Git 仓库地址(请修改为实际地址) +DEFAULT_REPO_URL="https://git.yuyujing.cn/zj/BootRepairTool.git" +# 安装模式: "git" 或 "local" +INSTALL_MODE="${1:-git}" +# 可以通过第二个参数指定自定义仓库地址 +CUSTOM_REPO_URL="${2:-}" +INSTALL_DIR="/opt/boot-repair-tool" +EXEC_FILE="boot-repair" +DESKTOP_FILE_NAME="boot-repair.desktop" +DESKTOP_INSTALL_DIR="/usr/share/applications" +POLICY_FILE="/usr/share/polkit-1/actions/com.bootrepair.tool.policy" +ICON_FILE="boot-repair.png" + +# --- 颜色定义 --- +GREEN='\033[0;32m' +RED='\033[0;31m' +YELLOW='\033[0;33m' +BLUE='\033[0;34m' +CYAN='\033[0;36m' +NC='\033[0m' + +# 检查是否以 root 权限运行 +check_root() { + if [[ $EUID -ne 0 ]]; then + echo -e "${RED}错误:此脚本需要 root 权限运行。请使用 'sudo bash $0'。${NC}" + exit 1 + fi +} + +# 检查并安装依赖 +install_dependencies() { + echo -e "${YELLOW}[1/6] 检查并安装依赖...${NC}" + + # 更新包数据库 + echo -e "${BLUE} 更新包数据库...${NC}" + pacman -Sy --noconfirm + + # 需要安装的包 + PACKAGES="git tk python python-pip" + + for pkg in $PACKAGES; do + if pacman -Q "$pkg" &>/dev/null; then + echo -e "${GREEN} ✓ $pkg 已安装${NC}" + else + echo -e "${YELLOW} 正在安装 $pkg...${NC}" + pacman -S --noconfirm "$pkg" + if [ $? -eq 0 ]; then + echo -e "${GREEN} ✓ $pkg 安装成功${NC}" + else + echo -e "${RED} ✗ $pkg 安装失败${NC}" + exit 1 + fi + fi + done +} + +# 克隆或更新项目 +clone_or_update_project() { + echo -e "${YELLOW}[2/6] 安装项目文件...${NC}" + + # 确定仓库地址 + if [ -n "$CUSTOM_REPO_URL" ]; then + REPO_URL="$CUSTOM_REPO_URL" + else + REPO_URL="$DEFAULT_REPO_URL" + fi + + # 检查是否使用本地文件安装 + if [ "$INSTALL_MODE" = "local" ]; then + # 本地安装模式 - 复制当前目录的文件 + SCRIPT_SOURCE="${BASH_SOURCE[0]}" + SCRIPT_DIR="$(cd "$(dirname "$SCRIPT_SOURCE")" && pwd)" + + echo -e "${BLUE} 使用本地文件安装...${NC}" + + # 检查必要的文件是否存在 + if [ ! -f "${SCRIPT_DIR}/frontend.py" ] || [ ! -f "${SCRIPT_DIR}/backend.py" ]; then + echo -e "${RED} ✗ 未找到 frontend.py 或 backend.py${NC}" + echo -e "${YELLOW} 请确保在 BootRepairTool 项目目录中运行此脚本${NC}" + exit 1 + fi + + # 如果目录存在,备份 + if [ -d "${INSTALL_DIR}" ]; then + mv "${INSTALL_DIR}" "${INSTALL_DIR}.backup.$(date +%Y%m%d%H%M%S)" + fi + + # 创建安装目录 + mkdir -p "${INSTALL_DIR}" + + # 复制所有 Python 文件和必要的资源 + cp -r "${SCRIPT_DIR}"/*.py "${INSTALL_DIR}/" 2>/dev/null || true + cp -r "${SCRIPT_DIR}"/*.md "${INSTALL_DIR}/" 2>/dev/null || true + cp -r "${SCRIPT_DIR}/tip" "${INSTALL_DIR}/" 2>/dev/null || true + + echo -e "${GREEN} ✓ 项目文件已复制到 ${INSTALL_DIR}${NC}" + + elif [ -d "${INSTALL_DIR}/.git" ]; then + # Git 更新模式 + echo -e "${BLUE} 项目已存在,正在更新...${NC}" + cd "${INSTALL_DIR}" || exit 1 + git pull origin main || git pull origin master + if [ $? -eq 0 ]; then + echo -e "${GREEN} ✓ 项目更新成功${NC}" + else + echo -e "${YELLOW} 警告:更新失败,使用现有版本${NC}" + fi + else + # Git 克隆模式(默认) + echo -e "${BLUE} 正在从 ${REPO_URL} 克隆项目...${NC}" + + # 如果目录存在但不是 git 仓库,先备份 + if [ -d "${INSTALL_DIR}" ]; then + mv "${INSTALL_DIR}" "${INSTALL_DIR}.backup.$(date +%Y%m%d%H%M%S)" + fi + + # 克隆仓库 + git clone --depth 1 "${REPO_URL}" "${INSTALL_DIR}" + if [ $? -eq 0 ]; then + echo -e "${GREEN} ✓ 项目克隆成功${NC}" + else + echo -e "${RED} ✗ 项目克隆失败${NC}" + echo -e "${YELLOW} 提示:请检查网络连接或仓库地址是否正确${NC}" + echo -e "${YELLOW} 当前仓库地址: ${REPO_URL}${NC}" + echo -e "${YELLOW} 或使用本地安装: sudo bash arch-install.sh local${NC}" + exit 1 + fi + fi +} + +# 创建启动脚本 +create_launcher() { + echo -e "${YELLOW}[3/6] 创建启动脚本...${NC}" + + # 创建主启动脚本 + cat > "${INSTALL_DIR}/${EXEC_FILE}" << 'EOF' +#!/bin/bash +# ============================================================================== +# BootRepairTool 启动脚本 +# 解决 Arch Linux 等系统上的 X11 字体渲染问题 +# ============================================================================== + +# 设置字体渲染环境变量,解决 "BadLength (poly request too large)" 错误 +export XLIB_SKIP_ARGB_VISUALS=1 +export GDK_NATIVE_WINDOWS=1 +export TCL_DONT_USE_RENDER_EXTENSION=1 + +# 如果使用 Wayland,强制使用 XWayland +if [ "$XDG_SESSION_TYPE" = "wayland" ]; then + export GDK_BACKEND=x11 +fi + +# 获取脚本所在目录 +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" + +# 切换到项目目录 +cd "${SCRIPT_DIR}" || exit 1 + +# 使用系统 Python 运行前端 +exec python frontend.py "$@" +EOF + + chmod +x "${INSTALL_DIR}/${EXEC_FILE}" + + # 创建软链接到 /bin + if [ -L "/bin/${EXEC_FILE}" ]; then + rm -f "/bin/${EXEC_FILE}" + fi + ln -sf "${INSTALL_DIR}/${EXEC_FILE}" "/bin/${EXEC_FILE}" + + echo -e "${GREEN} ✓ 启动脚本创建完成${NC}" +} + +# 创建图标 +create_icon() { + echo -e "${YELLOW}[4/6] 创建图标...${NC}" + + # 创建简单的 SVG 图标 + cat > "${INSTALL_DIR}/${ICON_FILE}" << 'EOF' + + + + + + + +EOF + + echo -e "${GREEN} ✓ 图标创建完成${NC}" +} + +# 创建桌面入口文件 +create_desktop_entry() { + echo -e "${YELLOW}[5/6] 创建桌面入口...${NC}" + + cat > "${DESKTOP_INSTALL_DIR}/${DESKTOP_FILE_NAME}" << EOF +[Desktop Entry] +Version=1.0 +Type=Application +Name=Linux GRUB 引导修复工具 +Name[zh_CN]=Linux GRUB 引导修复工具 +Name[en_US]=Boot Repair Tool +Comment=修复 Linux 系统 GRUB 引导加载器 +Comment[zh_CN]=修复 Linux 系统 GRUB 引导加载器 +Categories=System;Settings;Utility; +Terminal=false +Icon=${INSTALL_DIR}/${ICON_FILE} +Exec=pkexec ${INSTALL_DIR}/${EXEC_FILE} +Actions=; +EOF + + chmod 644 "${DESKTOP_INSTALL_DIR}/${DESKTOP_FILE_NAME}" + + # 创建 PolicyKit 规则 + cat > "$POLICY_FILE" << EOF + + + + + Run Linux GRUB Boot Repair Tool + 运行 Linux GRUB 引导修复工具 + Authentication is required to run the Boot Repair Tool. + 运行引导修复工具需要管理员权限 + boot-repair + + no + no + auth_admin + + /bin/${EXEC_FILE} + true + + +EOF + + chmod 644 "$POLICY_FILE" + + # 更新桌面数据库 + if command -v update-desktop-database &>/dev/null; then + update-desktop-database "${DESKTOP_INSTALL_DIR}" 2>/dev/null || true + fi + + echo -e "${GREEN} ✓ 桌面入口创建完成${NC}" +} + +# 复制到用户桌面 +copy_to_user_desktop() { + echo -e "${YELLOW}[6/6] 创建用户桌面快捷方式...${NC}" + + CURRENT_USER=$(logname 2>/dev/null || echo "${SUDO_USER}") + if [ -z "$CURRENT_USER" ]; then + CURRENT_USER=$(whoami) + fi + + USER_DESKTOP_DIR="" + if [ -d "/home/${CURRENT_USER}/桌面" ]; then + USER_DESKTOP_DIR="/home/${CURRENT_USER}/桌面" + elif [ -d "/home/${CURRENT_USER}/Desktop" ]; then + USER_DESKTOP_DIR="/home/${CURRENT_USER}/Desktop" + fi + + if [ -n "${USER_DESKTOP_DIR}" ] && [ -d "/home/${CURRENT_USER}" ]; then + cp -f "${DESKTOP_INSTALL_DIR}/${DESKTOP_FILE_NAME}" "${USER_DESKTOP_DIR}/" + chmod 755 "${USER_DESKTOP_DIR}/${DESKTOP_FILE_NAME}" + chown "${CURRENT_USER}:" "${USER_DESKTOP_DIR}/${DESKTOP_FILE_NAME}" 2>/dev/null || true + echo -e "${GREEN} ✓ 已复制到 ${USER_DESKTOP_DIR}${NC}" + else + echo -e "${YELLOW} 未找到用户桌面目录,跳过${NC}" + fi +} + +# 显示完成信息 +show_completion() { + echo "" + echo -e "${CYAN}=================================================${NC}" + echo -e "${GREEN} 安装完成!${NC}" + echo -e "${CYAN}=================================================${NC}" + echo "" + echo -e "${YELLOW}📋 使用方式:${NC}" + echo "" + echo -e " ${GREEN}方法一:图形界面${NC}" + echo -e " 从应用程序菜单启动 '${APP_NAME}'" + echo "" + echo -e " ${GREEN}方法二:命令行 (推荐)${NC}" + echo -e " ${CYAN}sudo boot-repair${NC}" + echo "" + echo -e " ${GREEN}方法三:使用 pkexec${NC}" + echo -e " ${CYAN}pkexec boot-repair${NC}" + echo "" + echo -e "${YELLOW}📁 安装路径:${NC}" + echo -e " 源码目录: ${INSTALL_DIR}" + echo -e " 启动脚本: /bin/${EXEC_FILE}" + echo -e " 图标: ${INSTALL_DIR}/${ICON_FILE}" + echo "" + echo -e "${YELLOW}🔧 更新项目:${NC}" + echo -e " ${CYAN}cd ${INSTALL_DIR} && sudo git pull${NC}" + echo "" + echo -e "${YELLOW}🗑️ 卸载:${NC}" + echo -e " ${CYAN}sudo rm -rf ${INSTALL_DIR} /bin/${EXEC_FILE}${NC}" + echo -e " ${CYAN}sudo rm -f ${DESKTOP_INSTALL_DIR}/${DESKTOP_FILE_NAME}${NC}" + echo -e " ${CYAN}sudo rm -f ${POLICY_FILE}${NC}" + echo "" + echo -e "${CYAN}=================================================${NC}" + echo -e "${GREEN}提示: 如果未在菜单中看到程序,请尝试注销并重新登录。${NC}" + echo -e "${CYAN}=================================================${NC}" + echo "" + + # 询问是否立即运行 + read -p "是否立即运行程序? [y/N]: " -n 1 -r + echo + if [[ $REPLY =~ ^[Yy]$ ]]; then + echo -e "${GREEN}正在启动 ${APP_NAME}...${NC}" + "${INSTALL_DIR}/${EXEC_FILE}" + fi +} + +# 显示帮助信息 +show_help() { + echo -e "${CYAN}=================================================${NC}" + echo -e "${APP_NAME} - Arch Linux 安装脚本" + echo -e "${CYAN}=================================================${NC}" + echo "" + echo -e "用法: sudo bash $0 [模式] [仓库地址]" + echo "" + echo -e "参数:" + echo -e " 模式: git (默认) 或 local" + echo -e " 仓库地址: 自定义 Git 仓库 URL(可选)" + echo "" + echo -e "示例:" + echo -e " ${GREEN}sudo bash $0${NC} # 默认从 Git 克隆" + echo -e " ${GREEN}sudo bash $0 git${NC} # 从默认仓库克隆" + echo -e " ${GREEN}sudo bash $0 git https://...${NC} # 从指定仓库克隆" + echo -e " ${GREEN}sudo bash $0 local${NC} # 从当前目录复制" + echo "" +} +} + +# 主函数 +main() { + # 显示帮助 + if [ "$1" = "-h" ] || [ "$1" = "--help" ]; then + show_help + exit 0 + fi + + echo -e "${CYAN}=================================================${NC}" + echo -e "${CYAN} ${APP_NAME} - Arch Linux 安装脚本${NC}" + echo -e "${CYAN}=================================================${NC}" + echo "" + + check_root + install_dependencies + clone_or_update_project + create_launcher + create_icon + create_desktop_entry + copy_to_user_desktop + show_completion +} + +# 运行主函数 +main "$@" diff --git a/build.py b/build.py index 6c74985..5f5b4c7 100755 --- a/build.py +++ b/build.py @@ -29,7 +29,7 @@ def check_python_version(): def install_dependencies(): """安装打包所需的依赖""" - print("\n[1/4] 安装依赖...") + print("\n[1/5] 安装依赖...") deps = ["pyinstaller"] @@ -47,7 +47,7 @@ def install_dependencies(): def clean_build(): """清理之前的构建文件""" - print("\n[2/4] 清理构建文件...") + print("\n[2/5] 清理构建文件...") dirs_to_remove = ["build", "dist"] files_to_remove = ["*.pyc", "*.spec"] @@ -69,12 +69,12 @@ def clean_build(): def build_executable(): """使用 PyInstaller 打包""" - print("\n[3/4] 开始打包...") + print("\n[3/5] 开始打包...") - # 打包命令 + # 打包命令 - 输出为 .bin 文件,wrapper 脚本将调用它 cmd = [ sys.executable, "-m", "PyInstaller", - "--name=LinuxGrubRepair", + "--name=LinuxGrubRepair.bin", "--onefile", "--console", "--clean", @@ -93,23 +93,81 @@ def build_executable(): return False -def show_result(): - """显示打包结果""" - print("\n[4/4] 打包完成!") +def create_launcher(): + """创建启动器脚本,解决 X11 字体渲染问题""" + print("\n[4/5] 创建启动器脚本...") + + launcher_content = '''#!/bin/bash +# ============================================================================== +# BootRepairTool 启动脚本 +# 解决 Arch Linux 等系统上的 X11 字体渲染问题 +# ============================================================================== + +# 获取脚本实际所在目录(处理软链接情况) +SCRIPT_SOURCE="${BASH_SOURCE[0]}" +while [ -L "$SCRIPT_SOURCE" ]; do + SCRIPT_DIR="$(cd "$(dirname "$SCRIPT_SOURCE")" && pwd)" + SCRIPT_SOURCE="$(readlink "$SCRIPT_SOURCE")" + [[ $SCRIPT_SOURCE != /* ]] && SCRIPT_SOURCE="$SCRIPT_DIR/$SCRIPT_SOURCE" +done +SCRIPT_DIR="$(cd "$(dirname "$SCRIPT_SOURCE")" && pwd)" + +# 如果是从 /bin 软链接启动,则使用实际安装目录 +if [ "$SCRIPT_DIR" = "/bin" ] || [ "$SCRIPT_DIR" = "/usr/bin" ]; then + SCRIPT_DIR="/opt/boot-repair-tool" +fi + +# 设置字体渲染环境变量,解决 "BadLength (poly request too large)" 错误 +export XLIB_SKIP_ARGB_VISUALS=1 + +# 禁用某些 X11 RENDER 扩展功能 +export GDK_NATIVE_WINDOWS=1 + +# 设置 tkinter 使用基本字体渲染 +export TCL_DONT_USE_RENDER_EXTENSION=1 + +# 如果使用 Wayland,强制使用 XWayland +if [ "$XDG_SESSION_TYPE" = "wayland" ]; then + export GDK_BACKEND=x11 +fi + +# 执行实际程序 +exec "${SCRIPT_DIR}/LinuxGrubRepair.bin" "$@" +''' dist_path = os.path.join(os.getcwd(), "dist") - exe_name = "LinuxGrubRepair" - exe_path = os.path.join(dist_path, exe_name) + launcher_path = os.path.join(dist_path, "LinuxGrubRepair") - if os.path.exists(exe_path): - size = os.path.getsize(exe_path) - size_mb = size / (1024 * 1024) - print(f"\n 可执行文件: {exe_path}") - print(f" 文件大小: {size_mb:.2f} MB") + with open(launcher_path, 'w') as f: + f.write(launcher_content) + + # 设置可执行权限 + os.chmod(launcher_path, 0o755) + print(f" ✓ 启动器创建完成: {launcher_path}") + return True + + +def show_result(): + """显示打包结果""" + print("\n[5/5] 打包完成!") + + dist_path = os.path.join(os.getcwd(), "dist") + launcher_name = "LinuxGrubRepair" + bin_name = "LinuxGrubRepair.bin" + launcher_path = os.path.join(dist_path, launcher_name) + bin_path = os.path.join(dist_path, bin_name) + + if os.path.exists(launcher_path) and os.path.exists(bin_path): + bin_size = os.path.getsize(bin_path) + bin_size_mb = bin_size / (1024 * 1024) + print(f"\n 启动器: {launcher_path}") + print(f" 程序文件: {bin_path}") + print(f" 文件大小: {bin_size_mb:.2f} MB") print("\n 使用方式:") - print(f" sudo ./{exe_name}") + print(f" sudo ./{launcher_name}") + print("\n 注意: 启动器脚本已配置 X11 环境变量,可解决字体渲染问题") else: - print(" 未找到生成的可执行文件") + print(" 未找到生成的文件") def main(): @@ -135,6 +193,11 @@ def main(): print("打包失败") sys.exit(1) + # 创建启动器 + if not create_launcher(): + print("创建启动器失败") + sys.exit(1) + # 显示结果 show_result() diff --git a/dist/LinuxGrubRepair b/dist/LinuxGrubRepair index 73cd65c..1a5a28e 100755 Binary files a/dist/LinuxGrubRepair and b/dist/LinuxGrubRepair differ diff --git a/dist/LinuxGrubRepair.bin b/dist/LinuxGrubRepair.bin new file mode 100755 index 0000000..cbedd47 Binary files /dev/null and b/dist/LinuxGrubRepair.bin differ diff --git a/frontend.py b/frontend.py index d5c7480..676895a 100644 --- a/frontend.py +++ b/frontend.py @@ -8,10 +8,45 @@ import os import re import backend +# ============================================================================== +# X11 字体渲染问题修复 +# 设置 tkinter 使用安全字体,避免 "BadLength" 错误 +# ============================================================================== +def setup_safe_fonts(): + """配置安全的字体设置,解决 Arch Linux 等系统上的 X11 渲染问题""" + try: + # 设置 tkinter 使用安全字体 + # 避免使用可能导致 X11 RENDER 扩展问题的复杂字体 + default_fonts = { + 'TkDefaultFont': ('DejaVu Sans', 10), + 'TkTextFont': ('DejaVu Sans', 10), + 'TkFixedFont': ('DejaVu Sans Mono', 10), + 'TkMenuFont': ('DejaVu Sans', 10), + 'TkHeadingFont': ('DejaVu Sans', 12, 'bold'), + } + + for font_name, font_config in default_fonts.items(): + try: + tk.font.nametofont(font_name).configure(family=font_config[0], size=font_config[1]) + except: + pass + except: + pass + +# 尝试导入字体模块 +try: + import tkinter.font as tkfont +except ImportError: + import tkFont as tkfont + class GrubRepairApp: def __init__(self, master): self.master = master + + # 设置安全字体 + setup_safe_fonts() + master.title("Linux GRUB 引导修复工具 v2.0") master.geometry("643x750") master.resizable(True, True) diff --git a/install.sh b/install.sh index 29e4092..5275b33 100755 --- a/install.sh +++ b/install.sh @@ -19,6 +19,7 @@ APP_NAME="Linux GRUB 引导修复工具" APP_NAME_EN="BootRepairTool" EXEC_FILE="LinuxGrubRepair" +EXEC_BIN_FILE="LinuxGrubRepair.bin" ICON_FILE="boot-repair.png" INSTALL_DIR="/opt/boot-repair-tool" DESKTOP_FILE_NAME="boot-repair.desktop" @@ -118,20 +119,25 @@ mkdir -p "${INSTALL_DIR}" || { echo -e "${RED}创建目录失败!${NC}"; exit echo -e "${GREEN} 目录创建完成。${NC}" echo -e "${GREEN}2. 安装可执行文件...${NC}" -# 首先尝试使用本地文件 -if use_local_file "./dist/${EXEC_FILE}" "${INSTALL_DIR}/${EXEC_FILE}" "可执行文件"; then +# 首先尝试使用本地文件(包括启动器和 .bin 文件) +if [ -f "./dist/${EXEC_FILE}" ] && [ -f "./dist/${EXEC_BIN_FILE}" ]; then + use_local_file "./dist/${EXEC_FILE}" "${INSTALL_DIR}/${EXEC_FILE}" "启动器脚本" + use_local_file "./dist/${EXEC_BIN_FILE}" "${INSTALL_DIR}/${EXEC_BIN_FILE}" "程序文件" echo -e "${GREEN} 本地可执行文件已复制。${NC}" -# 然后尝试从 URL 下载 +# 然后尝试从 URL 下载(单文件模式,用于在线安装) elif [ "${BASE_DOWNLOAD_URL}" != "https://your-domain.com/data/sh/boot-repair" ]; then download_file "${EXEC_DOWNLOAD_URL}" "${INSTALL_DIR}/${EXEC_FILE}" "${EXEC_FILE}" else echo -e "${RED}错误:未找到可执行文件!${NC}" - echo -e "${YELLOW}请先将可执行文件放入 ./dist/${EXEC_FILE} 目录,${NC}" - echo -e "${YELLOW}或修改 BASE_DOWNLOAD_URL 配置。${NC}" + echo -e "${YELLOW}请先将可执行文件放入 ./dist/ 目录:${NC}" + echo -e "${YELLOW} - ${EXEC_FILE} (启动器脚本)${NC}" + echo -e "${YELLOW} - ${EXEC_BIN_FILE} (程序文件)${NC}" + echo -e "${YELLOW}或修改 BASE_DOWNLOAD_URL 配置用于在线安装。${NC}" exit 1 fi chmod +x "${INSTALL_DIR}/${EXEC_FILE}" +[ -f "${INSTALL_DIR}/${EXEC_BIN_FILE}" ] && chmod +x "${INSTALL_DIR}/${EXEC_BIN_FILE}" echo -e "${GREEN} 可执行文件权限设置完成。${NC}" echo -e "${GREEN}3. 安装图标...${NC}" @@ -185,7 +191,7 @@ cat << EOF > "$POLICY_FILE" no auth_admin - ${INSTALL_DIR}/${EXEC_FILE} + /bin/boot-repair true diff --git a/uninstall.sh b/uninstall.sh index 9c4b771..1ba0103 100755 --- a/uninstall.sh +++ b/uninstall.sh @@ -10,6 +10,7 @@ # --- 配置变量 --- APP_NAME="Linux GRUB 引导修复工具" EXEC_FILE="LinuxGrubRepair" +EXEC_BIN_FILE="LinuxGrubRepair.bin" ICON_FILE="boot-repair.png" INSTALL_DIR="/opt/boot-repair-tool" DESKTOP_FILE_NAME="boot-repair.desktop"