Files
spark-store/tool/ssaudit
T
2025-04-16 22:53:43 +08:00

255 lines
8.1 KiB
Bash
Executable File

#!/bin/bash
SPARK_DOWNLOAD_SERVER_URL="https://d.spark-app.store/"
SPARK_DOWNLOAD_SERVER_URL_NO_PROTOCOL="d.spark-app.store"
source /opt/durapps/spark-store/bin/bashimport/transhell.amber
load_transhell_debug
export DEBIAN_FRONTEND=noninteractive
trap 'unlock_file $DEBPATH' EXIT
case $(arch) in
x86_64)
STORE_URL="store"
;;
aarch64)
STORE_URL="aarch64-store"
;;
loongarch64)
STORE_URL="loong64-store"
STORE_LIST_URL="-loong64"
;;
esac
echo "Spark Store Audit script. 星火商店审核脚本"
function pkexec_as_current_user() {
local user=$(who | awk '{print $1}' | head -n 1)
local uid=$(id -u "$user")
sudo -u "$user" DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/"$uid"/bus pkexec "$@"
}
function create_desktop_file() {
local user=$(who | awk '{print $1}' | head -n 1)
if [ -e $(sudo -u "$user" xdg-user-dir)/.config/spark-union/spark-store/ssshell-config-do-not-create-desktop ];then
echo "It is configured that do not create desktop file. Give up"
else
exec_create_desktop_file
fi
}
function exec_create_desktop_file() {
local user=$(who | awk '{print $1}' | head -n 1)
for desktop_file_path in $(dpkg -L "$package_name" |grep /usr/share/applications/ | awk '/\.desktop$/ {print}'); do
if [ "$(cat $desktop_file_path | grep NoDisplay=true)" = "" ];then
echo $desktop_file_path is checked and will be installed to desktop
sudo -u "$user" cp "$desktop_file_path" "$(sudo -u "$user" xdg-user-dir DESKTOP)/"
fi
done
for desktop_file_path in $(dpkg -L "$package_name" |grep /opt/apps/$package_name/entries/applications | awk '/\.desktop$/ {print}'); do
if [ "$(cat $desktop_file_path | grep NoDisplay=true)" = "" ];then
echo $desktop_file_path is checked and will be installed to desktop
chmod +x $desktop_file_path
sudo -u "$user" cp "$desktop_file_path" "$(sudo -u "$user" xdg-user-dir DESKTOP)/"
fi
done
}
function zenity() {
local user=$(who | awk '{print $1}' | head -n 1)
local uid=$(id -u "$user")
sudo -u "$user" DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/"$uid"/bus zenity "$@"
}
function hash_check() {
IS_SHA512SUM_CHECKED=skipped
}
function lock_file(){
chattr +i "$1"
}
function unlock_file(){
chattr -i "$1"
}
function ensure_aptss_exist(){
if command -v aptss &>/dev/null; then
aptss update
else
local deb_file="/tmp/spark-store-console-in-container_latest_all.deb"
# Download package
if ! wget -O "$deb_file" "https://amber-ce-resource.spark-app.store/store/depends/spark-store-console-in-container_latest_all.deb"; then
echo "下载 .deb 安装包失败" >&2
return 1
fi
# Install package
if ! apt install -y "$deb_file"; then
echo "安装 .deb 包失败" >&2
rm -f "$deb_file"
return 1
fi
rm -f "$deb_file"
# Verify installation
if ! command -v aptss &>/dev/null; then
echo "成功安装但未找到 aptss 命令" >&2
return 1
fi
fi
}
export -f ensure_aptss_exist
####################################
if [ $# -eq 0 ]; then
echo "没有接收到参数,退出"
echo "用法:$0 deb路径"
echo "OMG-IT-GOES-WRONG"
exit
fi
if [ "$(id -u)" != "0" ]; then
echo "${TRANSHELL_CONTENT_PLEASE_RUN_AS_ROOT}"
echo "OMG-IT-GOES-WRONG"
exit 1
fi
if [ ! -f "$1" ]; then
echo "${TRANSHELL_CONTENT_FILE_NOT_EXIST},Trying to redownload"
FILEPATH=$(dirname "$1")
FILENAME=$(basename "$1")
PACKAGE_NAME=$(echo "$FILENAME" | sed -r 's/^([^_]+)_.*$/\1/')
VERSION=$(echo "$FILENAME" | sed -r 's/^[^_]+_([^_]+)_.*$/\1/')
pushd ${FILEPATH}
aptss download ${PACKAGE_NAME}
popd
if [ ! -f "$1" ]; then
echo "OMG-IT-GOES-WRONG"
exit 1
else
DEBPATH=$(realpath "$1")
fi
else
DEBPATH=$(realpath "$1")
fi
lock_file "$DEBPATH"
hash_check "$DEBPATH"
if [ ! -z "$IS_SHA512SUM_CHECKED" ]; then
echo "校验跳过,开始安装"
echo "----------------------------------------------------------------------------------"
package_name=$(dpkg-deb -f "$DEBPATH" Package)
echo "Package name is $package_name"
try_run_output=$(/opt/durapps/spark-store/bin/update-upgrade/ss-do-upgrade-worker.sh test-install-app "$DEBPATH")
try_run_ret="$?"
# 安装失败后进行 aptss 刷新,随后尝试在主机安装
if [ "$try_run_ret" -ne 0 ]; then
aptss update
try_run_output=$(/opt/durapps/spark-store/bin/update-upgrade/ss-do-upgrade-worker.sh test-install-app "$DEBPATH")
try_run_ret="$?"
fi
if [ "$try_run_ret" -ne 0 ]; then ## 若安装检测仍然失败
if [[ "$IS_ACE_ENV" == "" ]];then ## 如果未在ACE环境中
# 定义按顺序尝试的ACE环境(命令:推荐安装包)
declare -a ace_commands_order=(
"bookworm-run:amber-ce-bookworm"
"trixie-run:amber-ce-trixie"
"deepin23-run:amber-ce-deepin23"
)
success=false
recommendation_msg=""
# 收集所有推荐信息
for ace_entry in "${ace_commands_order[@]}"; do
recommendation_msg+="您可安装 ${ace_entry%%:*} 兼容环境后重试: ${ace_entry#*:}\n"
done
# 按顺序尝试每个ACE环境
for ace_entry in "${ace_commands_order[@]}"; do
ace_cmd=${ace_entry%%:*}
if command -v "$ace_cmd" >/dev/null 2>&1; then
echo "----------------------------------------"
echo "正在尝试使用 $ace_cmd 环境安装..."
echo "----------------------------------------"
# 在ACE环境中执行安装检测
$ace_cmd ensure_aptss_exist
try_run_output=$($ace_cmd aptss install --dry-run "$DEBPATH" 2>&1)
try_run_ret="$?"
# 如果首次检测失败则更新后重试
if [ "$try_run_ret" -ne 0 ]; then
$ace_cmd aptss update
try_run_output=$($ace_cmd aptss install --dry-run "$DEBPATH" 2>&1)
try_run_ret="$?"
fi
# 最终检测结果处理
if [ "$try_run_ret" -eq 0 ]; then
echo "----------------------------------------"
echo "$ace_cmd 环境中预检成功,开始安装..."
echo "----------------------------------------"
$ace_cmd 'dpkg -i "$DEBPATH" || aptss install "$DEBPATH" -yfq'
success=true
break # 跳出循环
else
echo "----------------------------------------"
echo "$ace_cmd 环境中安装预检失败,错误信息:"
echo -e "${try_run_output}"
echo "----------------------------------------"
fi
fi
done
if ! $success; then
echo "OMG-IT-GOES-WRONG"
echo -e "${try_run_output}"
echo -e "所有ACE环境尝试失败,推荐安装以下任一兼容环境:\n${recommendation_msg}"
exit "$try_run_ret"
fi
else # 已经在ACE环境中仍失败直接退出
echo "OMG-IT-GOES-WRONG"
echo -e "${try_run_output}"
exit "$try_run_ret"
fi
else ## 如果主机安装检测成功
dpkg -i "$DEBPATH" || aptss install "$DEBPATH" -yfq
fi
### 退出阶段保持不变 ###
if [ "$?" = "0" ] && [ "$2" = "--delete-after-install" ]; then
if dpkg -s "$package_name" >/dev/null 2>&1; then
echo "软件包已安装:$package_name"
create_desktop_file
unlock_file $DEBPATH
rm "$DEBPATH"
echo "${TRANSHELL_CONTENT_DEB_IS_DELETED}"
else
echo "软件包未安装:$package_name"
echo "安装异常!抛出错误"
echo "OMG-IT-GOES-WRONG"
fi
else
echo "${TRANSHELL_CONTENT_WILL_NOT_DELETE_DEB}"
if dpkg -s "$package_name" >/dev/null 2>&1; then
echo "软件包已安装:$package_name"
create_desktop_file
else
echo "软件包未安装:$package_name"
echo "安装异常!抛出错误"
echo "OMG-IT-GOES-WRONG"
fi
fi
fi