mirror of
https://gitee.com/spark-store-project/spark-store
synced 2025-07-10 23:55:58 +08:00
196 lines
6.2 KiB
Bash
Executable File
196 lines
6.2 KiB
Bash
Executable File
#!/bin/bash
|
||
|
||
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 Install 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() {
|
||
if [ ! -e "/var/lib/aptss/lists/d.spark-app.store_${STORE_URL}_Packages" ] && \
|
||
[ ! -e "/var/lib/aptss/lists/d.store.deepinos.org.cn_${STORE_URL}_Packages" ] && \
|
||
[ ! -e "/var/lib/aptss/lists/mirrors.sdu.edu.cn_spark-store_${STORE_URL}_Packages" ]; then
|
||
echo "接收星火仓库软件信息中..."
|
||
aptss ssupdate
|
||
fi
|
||
|
||
if [ -e "/var/lib/aptss/lists/d.spark-app.store_${STORE_URL}_Packages" ]; then
|
||
PACKAGES_DATA_PATH="/var/lib/aptss/lists/d.spark-app.store_${STORE_URL}_Packages"
|
||
echo "星火仓库的Packages位置为 $PACKAGES_DATA_PATH,是星火域名仓库配置"
|
||
elif [ -e "/var/lib/aptss/lists/d.store.deepinos.org.cn_${STORE_URL}_Packages" ]; then
|
||
PACKAGES_DATA_PATH="/var/lib/aptss/lists/d.store.deepinos.org.cn_${STORE_URL}_Packages"
|
||
echo "星火仓库的Packages位置为 $PACKAGES_DATA_PATH,是d域名单目录仓库配置"
|
||
else
|
||
PACKAGES_DATA_PATH="/var/lib/aptss/lists/mirrors.sdu.edu.cn_spark-store-repository_${STORE_URL}_Packages"
|
||
echo "星火仓库的Packages位置为 $PACKAGES_DATA_PATH,是SDU镜像仓库配置"
|
||
fi
|
||
|
||
echo "正在运行包验证..."
|
||
echo "Running Spark Package Verify..."
|
||
|
||
DEB_SHA512SUM=$(sha512sum "$1" | cut -d ' ' -f 1)
|
||
unset IS_SHA512SUM_CHECKED
|
||
IS_SHA512SUM_CHECKED=$(cat "$PACKAGES_DATA_PATH" | grep "$DEB_SHA512SUM")
|
||
}
|
||
|
||
function lock_file(){
|
||
chattr +i "$1"
|
||
}
|
||
|
||
function unlock_file(){
|
||
chattr -i "$1"
|
||
}
|
||
|
||
####################################
|
||
|
||
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 "尝试更新仓库信息重新校验"
|
||
aptss ssupdate
|
||
hash_check "$DEBPATH"
|
||
if [ -z "$IS_SHA512SUM_CHECKED" ]; then
|
||
echo -e "$TRANSHELL_CONTENT_HASH_CHECK_FAILED"
|
||
zenity --info --icon-name=spark-store --height 270 --width 500 --text "$TRANSHELL_CONTENT_HASH_CHECK_FAILED"
|
||
echo "OMG-IT-GOES-WRONG"
|
||
exit 1
|
||
fi
|
||
fi
|
||
|
||
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="$?"
|
||
|
||
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
|
||
echo "OMG-IT-GOES-WRONG"
|
||
echo -e "${try_run_output}"
|
||
exit "$try_run_ret"
|
||
fi
|
||
|
||
dpkg -i "$DEBPATH" || aptss install "$DEBPATH" -yf
|
||
|
||
unlock_file "$DEBPATH"
|
||
|
||
if [ "$?" = "0" ] && [ "$2" = "--delete-after-install" ]; then
|
||
if dpkg -s "$package_name" >/dev/null 2>&1; then
|
||
echo "软件包已安装:$package_name"
|
||
create_desktop_file
|
||
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
|