#!/bin/bash # ============================================================================== # Linux GRUB 引导修复工具 (BootRepairTool) 安装脚本 # ------------------------------------------------------------------------------ # 功能: # 1. 下载应用程序可执行文件、图标。 # 2. 创建安装目录 `/opt/boot-repair-tool`。 # 3. 创建软链接 `/bin/boot-repair`。 # 4. 创建并安装桌面入口文件 (.desktop) 到 `/usr/share/applications`。 # 5. 创建 PolicyKit 规则文件,确保 pkexec 正常工作。 # 6. 更新桌面数据库,使应用程序显示在菜单中。 # # 使用方法: # 1. 终端中运行: sudo bash install.sh # ============================================================================== # --- 配置变量 --- APP_NAME="Linux GRUB 引导修复工具" APP_NAME_EN="BootRepairTool" EXEC_FILE="LinuxGrubRepair" ICON_FILE="boot-repair.png" INSTALL_DIR="/opt/boot-repair-tool" DESKTOP_FILE_NAME="boot-repair.desktop" DESKTOP_INSTALL_DIR="/usr/share/applications" POLICY_FILE="/usr/share/polkit-1/actions/com.bootrepair.tool.policy" # 下载源 URL (请根据实际情况修改) BASE_DOWNLOAD_URL="https://your-domain.com/data/sh/boot-repair" EXEC_DOWNLOAD_URL="${BASE_DOWNLOAD_URL}/${EXEC_FILE}" ICON_DOWNLOAD_URL="${BASE_DOWNLOAD_URL}/${ICON_FILE}" # pkexec 启动参数 SLEEP_DURATION=2 # --- 颜色定义 --- GREEN='\033[0;32m' RED='\033[0;31m' YELLOW='\033[0;33m' BLUE='\033[0;34m' NC='\033[0m' # No Color # --- 函数定义 --- # 检查是否以 root 权限运行 check_root() { if [[ $EUID -ne 0 ]]; then echo -e "${RED}错误:此脚本需要 root 权限运行。请使用 'sudo bash $0'。${NC}" exit 1 fi } # 下载文件函数 download_file() { local url=$1 local dest_path=$2 local file_description=$3 echo -e "${GREEN}正在下载 ${file_description} 从 ${url}...${NC}" # 优先使用 wget,否则尝试 curl if command -v wget &> /dev/null; then wget -q --show-progress -O "${dest_path}" "${url}" elif command -v curl &> /dev/null; then curl -L --progress-bar -o "${dest_path}" "${url}" else echo -e "${RED}错误:未找到 wget 或 curl,无法下载文件。${NC}" exit 1 fi if [ $? -ne 0 ]; then echo -e "${RED}错误:下载 ${file_description} 失败,请检查网络连接或 URL。${NC}" exit 1 fi echo -e "${GREEN} ${file_description} 下载完成。${NC}" } # 检查本地文件是否存在 use_local_file() { local local_path=$1 local dest_path=$2 local file_description=$3 if [ -f "${local_path}" ]; then echo -e "${BLUE}使用本地 ${file_description}: ${local_path}${NC}" cp "${local_path}" "${dest_path}" return 0 fi return 1 } # 创建默认图标 (如果没有提供图标) create_default_icon() { local icon_path=$1 # 创建一个简单的 SVG 图标 cat << 'EOF' > "${icon_path}" EOF echo -e "${YELLOW} 已创建默认 SVG 图标。${NC}" } # --- 主安装流程 --- echo -e "${YELLOW}=================================================${NC}" echo -e "${YELLOW} 开始安装 ${APP_NAME}${NC}" echo -e "${YELLOW}=================================================${NC}" check_root echo -e "${GREEN}1. 创建安装目录 ${INSTALL_DIR}...${NC}" mkdir -p "${INSTALL_DIR}" || { echo -e "${RED}创建目录失败!${NC}"; exit 1; } echo -e "${GREEN} 目录创建完成。${NC}" echo -e "${GREEN}2. 安装可执行文件...${NC}" # 首先尝试使用本地文件 if use_local_file "./dist/${EXEC_FILE}" "${INSTALL_DIR}/${EXEC_FILE}" "可执行文件"; then echo -e "${GREEN} 本地可执行文件已复制。${NC}" # 然后尝试从 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}" exit 1 fi chmod +x "${INSTALL_DIR}/${EXEC_FILE}" echo -e "${GREEN} 可执行文件权限设置完成。${NC}" echo -e "${GREEN}3. 安装图标...${NC}" if use_local_file "./${ICON_FILE}" "${INSTALL_DIR}/${ICON_FILE}" "图标文件"; then echo -e "${GREEN} 本地图标已复制。${NC}" elif [ "${BASE_DOWNLOAD_URL}" != "https://your-domain.com/data/sh/boot-repair" ]; then download_file "${ICON_DOWNLOAD_URL}" "${INSTALL_DIR}/${ICON_FILE}" "${ICON_FILE}" else create_default_icon "${INSTALL_DIR}/${ICON_FILE}" fi echo -e "${GREEN}4. 创建软链接 /bin/boot-repair...${NC}" rm -f "/bin/boot-repair" ln -sn "${INSTALL_DIR}/${EXEC_FILE}" "/bin/boot-repair" echo -e "${GREEN} 软链接创建完成。${NC}" echo -e "${GREEN}5. 创建桌面入口文件...${NC}" cat << EOF > "${DESKTOP_INSTALL_DIR}/${DESKTOP_FILE_NAME}" [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}" echo -e "${GREEN} 桌面入口文件创建完成。${NC}" echo -e "${GREEN}6. 创建 PolicyKit 规则文件...${NC}" cat << EOF > "$POLICY_FILE" Run Linux GRUB Boot Repair Tool 运行 Linux GRUB 引导修复工具 Authentication is required to run the Boot Repair Tool. 运行引导修复工具需要管理员权限 boot-repair no no auth_admin ${INSTALL_DIR}/${EXEC_FILE} true EOF if [ $? -ne 0 ]; then echo -e "${RED}错误:创建 PolicyKit 规则文件失败,退出。${NC}" exit 1 fi chmod 644 "$POLICY_FILE" echo -e "${GREEN} PolicyKit 规则文件创建完成。${NC}" echo -e "${GREEN}7. 更新桌面数据库...${NC}" if command -v update-desktop-database &> /dev/null; then update-desktop-database "${DESKTOP_INSTALL_DIR}" || { echo -e "${YELLOW}警告:更新桌面数据库失败。${NC}"; } else echo -e "${YELLOW} update-desktop-database 命令未找到,跳过。${NC}" fi # 复制到用户桌面 echo -e "${GREEN}8. 复制桌面快捷方式到用户桌面...${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 echo -e "${YELLOW}=================================================${NC}" echo -e "${GREEN} 安装完成!${NC}" echo -e "${YELLOW}=================================================${NC}" echo "" echo -e "${BLUE}使用方式:${NC}" echo -e " 图形界面: 从应用程序菜单启动 'Linux GRUB 引导修复工具'" echo -e " 命令行: ${GREEN}sudo boot-repair${NC} 或 ${GREEN}pkexec boot-repair${NC}" echo "" echo -e "${BLUE}安装路径:${NC}" echo -e " 程序: ${INSTALL_DIR}/${EXEC_FILE}" echo -e " 图标: ${INSTALL_DIR}/${ICON_FILE}" echo -e " 软链接: /bin/boot-repair" echo "" echo -e "${YELLOW}提示: 如果未在菜单中看到程序,请尝试注销并重新登录。${NC}" echo "" exit 0