add install shell
This commit is contained in:
246
install.sh
Executable file
246
install.sh
Executable file
@@ -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://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}"
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<svg width="64" height="64" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<circle cx="32" cy="32" r="28" fill="#2196F3"/>
|
||||||
|
<circle cx="32" cy="32" r="20" fill="#1976D2"/>
|
||||||
|
<path d="M32 16 L32 32 L44 40" stroke="white" stroke-width="4" fill="none" stroke-linecap="round"/>
|
||||||
|
<circle cx="32" cy="32" r="4" fill="white"/>
|
||||||
|
</svg>
|
||||||
|
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"
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE policyconfig PUBLIC
|
||||||
|
"-//freedesktop//DTD PolicyKit Policy Configuration 1.0//EN"
|
||||||
|
"http://www.freedesktop.org/standards/PolicyKit/1.0/policyconfig.dtd">
|
||||||
|
<policyconfig>
|
||||||
|
<action id="com.bootrepair.tool.pkexec">
|
||||||
|
<description>Run Linux GRUB Boot Repair Tool</description>
|
||||||
|
<description xml:lang="zh_CN">运行 Linux GRUB 引导修复工具</description>
|
||||||
|
<message>Authentication is required to run the Boot Repair Tool.</message>
|
||||||
|
<message xml:lang="zh_CN">运行引导修复工具需要管理员权限</message>
|
||||||
|
<icon_name>boot-repair</icon_name>
|
||||||
|
<defaults>
|
||||||
|
<allow_any>no</allow_any>
|
||||||
|
<allow_inactive>no</allow_inactive>
|
||||||
|
<allow_active>auth_admin</allow_active>
|
||||||
|
</defaults>
|
||||||
|
<annotate key="org.freedesktop.policykit.exec.path">${INSTALL_DIR}/${EXEC_FILE}</annotate>
|
||||||
|
<annotate key="org.freedesktop.policykit.exec.allow_gui">true</annotate>
|
||||||
|
</action>
|
||||||
|
</policyconfig>
|
||||||
|
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
|
||||||
93
uninstall.sh
Executable file
93
uninstall.sh
Executable file
@@ -0,0 +1,93 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# ==============================================================================
|
||||||
|
# Linux GRUB 引导修复工具 (BootRepairTool) 卸载脚本
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
# 使用方法:
|
||||||
|
# 终端中运行: sudo bash uninstall.sh
|
||||||
|
# ==============================================================================
|
||||||
|
|
||||||
|
# --- 配置变量 ---
|
||||||
|
APP_NAME="Linux GRUB 引导修复工具"
|
||||||
|
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"
|
||||||
|
|
||||||
|
# --- 颜色定义 ---
|
||||||
|
GREEN='\033[0;32m'
|
||||||
|
RED='\033[0;31m'
|
||||||
|
YELLOW='\033[0;33m'
|
||||||
|
BLUE='\033[0;34m'
|
||||||
|
NC='\033[0m'
|
||||||
|
|
||||||
|
# 检查是否以 root 权限运行
|
||||||
|
check_root() {
|
||||||
|
if [[ $EUID -ne 0 ]]; then
|
||||||
|
echo -e "${RED}错误:此脚本需要 root 权限运行。请使用 'sudo bash $0'。${NC}"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# --- 主卸载流程 ---
|
||||||
|
echo -e "${YELLOW}=================================================${NC}"
|
||||||
|
echo -e "${YELLOW} 开始卸载 ${APP_NAME}${NC}"
|
||||||
|
echo -e "${YELLOW}=================================================${NC}"
|
||||||
|
|
||||||
|
check_root
|
||||||
|
|
||||||
|
echo -e "${BLUE}正在卸载...${NC}"
|
||||||
|
|
||||||
|
# 1. 删除安装目录
|
||||||
|
if [ -d "${INSTALL_DIR}" ]; then
|
||||||
|
echo -e "删除安装目录: ${INSTALL_DIR}"
|
||||||
|
rm -rf "${INSTALL_DIR}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 2. 删除软链接
|
||||||
|
if [ -L "/bin/boot-repair" ]; then
|
||||||
|
echo -e "删除软链接: /bin/boot-repair"
|
||||||
|
rm -f "/bin/boot-repair"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 3. 删除桌面入口文件
|
||||||
|
if [ -f "${DESKTOP_INSTALL_DIR}/${DESKTOP_FILE_NAME}" ]; then
|
||||||
|
echo -e "删除桌面入口文件: ${DESKTOP_INSTALL_DIR}/${DESKTOP_FILE_NAME}"
|
||||||
|
rm -f "${DESKTOP_INSTALL_DIR}/${DESKTOP_FILE_NAME}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 4. 删除 PolicyKit 规则文件
|
||||||
|
if [ -f "${POLICY_FILE}" ]; then
|
||||||
|
echo -e "删除 PolicyKit 规则: ${POLICY_FILE}"
|
||||||
|
rm -f "${POLICY_FILE}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 5. 删除用户桌面快捷方式
|
||||||
|
CURRENT_USER=$(logname 2>/dev/null || echo "${SUDO_USER}")
|
||||||
|
if [ -n "$CURRENT_USER" ]; then
|
||||||
|
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}" ] && [ -f "${USER_DESKTOP_DIR}/${DESKTOP_FILE_NAME}" ]; then
|
||||||
|
echo -e "删除用户桌面快捷方式: ${USER_DESKTOP_DIR}/${DESKTOP_FILE_NAME}"
|
||||||
|
rm -f "${USER_DESKTOP_DIR}/${DESKTOP_FILE_NAME}"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 6. 更新桌面数据库
|
||||||
|
echo -e "更新桌面数据库..."
|
||||||
|
if command -v update-desktop-database &> /dev/null; then
|
||||||
|
update-desktop-database "${DESKTOP_INSTALL_DIR}" 2>/dev/null || true
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo -e "${YELLOW}=================================================${NC}"
|
||||||
|
echo -e "${GREEN} 卸载完成!${NC}"
|
||||||
|
echo -e "${YELLOW}=================================================${NC}"
|
||||||
|
|
||||||
|
exit 0
|
||||||
Reference in New Issue
Block a user