mirror of
				https://gitee.com/spark-store-project/spark-store
				synced 2025-11-04 08:12:21 +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
 |