#!/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