diff --git a/bootrepairtool-install.sh b/bootrepairtool-install.sh new file mode 100644 index 0000000..8909944 --- /dev/null +++ b/bootrepairtool-install.sh @@ -0,0 +1,246 @@ +#!/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://yuyujing.cn/data/sh/bootrepairtool" +EXEC_DOWNLOAD_URL="${BASE_DOWNLOAD_URL}/${EXEC_FILE}" +ICON_DOWNLOAD_URL="${BASE_DOWNLOAD_URL}/${ICON_FILE}" + +# pkexec 启动参数 +SLEEP_DURATION=30 + +# --- 颜色定义 --- +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=sh -c "pkexec ${INSTALL_DIR}/${EXEC_FILE} && sleep ${SLEEP_DURATION}" +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