mirror of
https://gitee.com/spark-store-project/spark-store
synced 2026-05-30 01:31:06 +08:00
191 lines
5.6 KiB
Bash
Executable File
191 lines
5.6 KiB
Bash
Executable File
#!/bin/bash
|
|
# ===== ACE环境配置 =====
|
|
|
|
readonly ACE_ENVIRONMENTS=(
|
|
"bookworm-run:amber-ce-bookworm"
|
|
"trixie-run:amber-ce-trixie"
|
|
"deepin23-run:amber-ce-deepin23"
|
|
"sid-run:amber-ce-sid"
|
|
)
|
|
# 生成ACE环境参数帮助信息
|
|
function generate_ace_help() {
|
|
local help_text=""
|
|
for ace_entry in "${ACE_ENVIRONMENTS[@]}"; do
|
|
local ace_param="--${ace_entry#*:}"
|
|
help_text+=" $ace_param 使用${ace_entry%%:*} ACE容器卸载\n"
|
|
done
|
|
echo -e "$help_text"
|
|
}
|
|
# 帮助函数
|
|
function show_help() {
|
|
echo "Spark Store Uninstall script. 星火商店卸载脚本"
|
|
echo "用法: $0 [选项] 包名"
|
|
echo "选项:"
|
|
echo " -h, --help 显示帮助信息"
|
|
echo " --delete-after-install 安装成功后删除软件包"
|
|
echo " --no-create-desktop-entry 不创建桌面快捷方式"
|
|
echo " --force-create-desktop-entry 强制创建桌面快捷方式"
|
|
echo "$(generate_ace_help)"
|
|
echo " --native 只在主机卸载,不使用ACE容器"
|
|
}
|
|
|
|
|
|
# 参数解析
|
|
function parse_args() {
|
|
while [ $# -gt 0 ]; do
|
|
case "$1" in
|
|
-h|--help)
|
|
show_help
|
|
exit 0
|
|
;;
|
|
--delete-after-install)
|
|
DELETE_AFTER_INSTALL="1"
|
|
shift
|
|
;;
|
|
--native)
|
|
FORCE_NATIVE="1"
|
|
shift
|
|
;;
|
|
--no-create-desktop-entry)
|
|
NO_CREATE_DESKTOP="1"
|
|
shift
|
|
;;
|
|
--force-create-desktop-entry)
|
|
FORCE_CREATE_DESKTOP="1"
|
|
shift
|
|
;;
|
|
*)
|
|
# 检查是否为ACE环境参数
|
|
local is_ace_param=0
|
|
for ace_entry in "${ACE_ENVIRONMENTS[@]}"; do
|
|
local ace_param="--${ace_entry#*:}"
|
|
if [ "$1" = "$ace_param" ]; then
|
|
# 将ACE环境命令名加入数组
|
|
ACE_PARAMS+=("${ace_entry%%:*}")
|
|
is_ace_param=1
|
|
shift
|
|
break
|
|
fi
|
|
done
|
|
|
|
# 如果不是ACE环境参数,则视为包名
|
|
if [ "$is_ace_param" -eq 0 ]; then
|
|
PACKAGE_NAME="$1"
|
|
shift
|
|
fi
|
|
;;
|
|
esac
|
|
done
|
|
}
|
|
|
|
# ===== 日志和函数 =====
|
|
[ -f /opt/durapps/spark-store/bin/bashimport/log.amber ] && \
|
|
source /opt/durapps/spark-store/bin/bashimport/log.amber || {
|
|
log.info() { echo "INFO: $*"; }
|
|
log.warn() { echo "WARN: $*"; }
|
|
log.error() { echo "ERROR: $*"; }
|
|
log.debug() { echo "DEBUG: $*"; }
|
|
}
|
|
|
|
# 初始化变量
|
|
FORCE_NATIVE=0
|
|
ACE_PARAMS=()
|
|
PACKAGE_NAME=""
|
|
uninstall_success=0
|
|
|
|
# 解析参数
|
|
parse_args "$@"
|
|
|
|
if [ -z "$PACKAGE_NAME" ]; then
|
|
log.error "请指定要卸载的包名"
|
|
exit 1
|
|
fi
|
|
|
|
# 尝试在本地卸载
|
|
try_native_uninstall() {
|
|
if [ "$FORCE_NATIVE" -eq 1 ] || [ ${#ACE_PARAMS[@]} -eq 0 ]; then
|
|
echo "----------------------------------------"
|
|
echo "正在检查本地环境中的安装..."
|
|
echo "----------------------------------------"
|
|
|
|
dpkg -s "$PACKAGE_NAME" > /dev/null
|
|
RET="$?"
|
|
if [[ "$RET" == "0" ]]; then
|
|
echo "----------------------------------------"
|
|
echo "在本地环境中找到了安装"
|
|
echo "----------------------------------------"
|
|
apt autopurge "$PACKAGE_NAME" -y
|
|
uninstall_success=1
|
|
return 0
|
|
else
|
|
echo "----------------------------------------"
|
|
echo "在本地环境中未能找到安装"
|
|
echo "----------------------------------------"
|
|
fi
|
|
fi
|
|
return 1
|
|
}
|
|
|
|
# 尝试在ACE环境中卸载
|
|
try_ace_uninstall() {
|
|
local ace_cmd="$1"
|
|
if command -v "$ace_cmd" >/dev/null 2>&1; then
|
|
echo "----------------------------------------"
|
|
echo "正在检查 $ace_cmd 环境的安装..."
|
|
echo "----------------------------------------"
|
|
|
|
$ace_cmd dpkg -l | grep "^ii $PACKAGE_NAME " > /dev/null
|
|
try_run_ret="$?"
|
|
|
|
if [ "$try_run_ret" -eq 0 ]; then
|
|
echo "----------------------------------------"
|
|
echo "在 $ace_cmd 环境中找到了安装"
|
|
echo "----------------------------------------"
|
|
$ace_cmd apt autopurge "$PACKAGE_NAME" -y
|
|
uninstall_success=1
|
|
return 0
|
|
else
|
|
echo "----------------------------------------"
|
|
echo "在 $ace_cmd 环境中未能找到安装"
|
|
echo "----------------------------------------"
|
|
fi
|
|
fi
|
|
return 1
|
|
}
|
|
|
|
# 主卸载逻辑
|
|
if [ $FORCE_NATIVE -eq 1 ] && [ ${#ACE_PARAMS[@]} -eq 0 ]; then
|
|
# 只有 --native 参数时,只尝试本地卸载
|
|
try_native_uninstall || exit $?
|
|
elif [ $FORCE_NATIVE -eq 0 ] && [ ${#ACE_PARAMS[@]} -gt 0 ]; then
|
|
# 只有 ACE 参数时,只尝试指定的 ACE 环境卸载
|
|
for ace_param in "${ACE_PARAMS[@]}"; do
|
|
try_ace_uninstall "$ace_param"
|
|
done
|
|
elif [ $FORCE_NATIVE -eq 1 ] && [ ${#ACE_PARAMS[@]} -gt 0 ]; then
|
|
# 同时有 --native 和 ACE 参数时,先尝试本地卸载,再尝试 ACE 环境卸载
|
|
try_native_uninstall
|
|
for ace_param in "${ACE_PARAMS[@]}"; do
|
|
try_ace_uninstall "$ace_param"
|
|
done
|
|
else
|
|
# 无参数时,先尝试本地卸载,再尝试所有 ACE 环境卸载
|
|
try_native_uninstall
|
|
|
|
for ace_entry in "${ACE_ENVIRONMENTS[@]}"; do
|
|
ace_cmd=${ace_entry%%:*}
|
|
if command -v "$ace_cmd" >/dev/null 2>&1; then
|
|
try_ace_uninstall "$ace_cmd"
|
|
fi
|
|
done
|
|
fi
|
|
|
|
if [ $uninstall_success -eq 0 ]; then
|
|
echo "----------------------------------------"
|
|
echo "在所有指定的环境中未能找到安装,退出"
|
|
echo "----------------------------------------"
|
|
exit 1
|
|
fi
|
|
|
|
exit 0
|