mirror of
https://gitee.com/spark-store-project/spark-store
synced 2025-09-08 20:32:21 +08:00
* 新增: 安装前会对软件包安装进行dry run以判断是否能正确安装 * 调整: aptss在进行任何操作前均检测是否存在包文件 * 调整: 修改apt-fast源代码以指定conf位置为/tmp/apt-fast,这部分不再使用bwrap模拟
109 lines
3.7 KiB
Bash
Executable File
109 lines
3.7 KiB
Bash
Executable File
#!/bin/bash
|
||
|
||
echo "Spark Store Install script.星火商店安装脚本"
|
||
|
||
function pkexec_as_current_user() {
|
||
#Detect the name of the display in use
|
||
local display=":$(ls /tmp/.X11-unix/* | sed 's#/tmp/.X11-unix/X##' | head -n 1)"
|
||
|
||
#Detect the user using such display
|
||
local user=$(who | grep '('$display')' | awk '{print $1}' | head -n 1)
|
||
|
||
#Detect the id of the user
|
||
local uid=$(id -u $user)
|
||
|
||
sudo -u $user DISPLAY=$display DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$uid/bus pkexec "$@"
|
||
}
|
||
|
||
function zenity() {
|
||
#Detect the name of the display in use
|
||
local display=":$(ls /tmp/.X11-unix/* | sed 's#/tmp/.X11-unix/X##' | head -n 1)"
|
||
|
||
#Detect the user using such display
|
||
local user=$(who | grep '('$display')' | awk '{print $1}' | head -n 1)
|
||
|
||
#Detect the id of the user
|
||
local uid=$(id -u $user)
|
||
|
||
sudo -u $user DISPLAY=$display DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$uid/bus zenity "$@"
|
||
}
|
||
|
||
#################检测文件是否存在
|
||
if [ $# -eq 0 ];then
|
||
echo "没有接收到参数,退出"
|
||
echo "用法:$0 deb路径"
|
||
exit
|
||
fi
|
||
|
||
if [ ! -f "$1" ]
|
||
then
|
||
echo "文件不存在"
|
||
exit 1
|
||
fi
|
||
|
||
if [ "$(id -u)" != "0" ];then
|
||
#############################无root权限时
|
||
echo "请使用root启动ssinstall"
|
||
exit 1
|
||
fi
|
||
|
||
###
|
||
|
||
|
||
DEBPATH=`realpath $1`
|
||
|
||
if [ ! -e "/var/lib/apt/lists/d.store.deepinos.org.cn_Packages" ] && [ ! -e "/var/lib/apt/lists/d.store.deepinos.org.cn_store_Packages" ];then
|
||
echo "接收星火仓库软件信息中..."
|
||
aptss ssupdate
|
||
fi
|
||
|
||
### 选择包信息位置
|
||
|
||
if [ -e "/var/lib/apt/lists/d.store.deepinos.org.cn_store_Packages" ];then
|
||
PACKAGES_DATA_PATH="/var/lib/apt/lists/d.store.deepinos.org.cn_store_Packages"
|
||
echo "星火仓库的Packages位置为 $PACKAGES_DATA_PATH,是单目录仓库配置"
|
||
else
|
||
PACKAGES_DATA_PATH="/var/lib/apt/lists/d.store.deepinos.org.cn_Packages"
|
||
echo "星火仓库的Packages位置为 $PACKAGES_DATA_PATH,是根目录仓库配置"
|
||
fi
|
||
|
||
|
||
|
||
echo "正在计算hash并与星火仓库匹配..."
|
||
|
||
DEB_MD5SUM=`md5sum "$DEBPATH" | cut -c -32`
|
||
|
||
IS_MD5SUM_CHECKD=`cat $PACKAGES_DATA_PATH | grep $DEB_MD5SUM`
|
||
if [ ! -z "$IS_MD5SUM_CHECKD" ];then
|
||
|
||
echo "校验成功,开始安装"
|
||
echo ----------------------------------------------------------------------------------
|
||
try_run_output=$(aptss --dry-run install $DEBPATH)
|
||
try_run_ret="$?"
|
||
|
||
if [ "$try_run_ret" -ne 0 ]
|
||
then
|
||
echo "Package manager quit with exit code.Here is the log"
|
||
echo "包管理器以错误代码退出.日志如下"
|
||
echo
|
||
echo -e "${try_run_output}"
|
||
exit "$try_run_ret"
|
||
fi
|
||
|
||
|
||
dpkg -i "$DEBPATH" || aptss install -yf
|
||
|
||
else
|
||
|
||
|
||
zenity --info --icon-name=spark-store --height 270 --width 500 --text "软件包校验失败!这不应该发生!\n可能是因为软件包已损坏,星火仓库未同步,或者最坏的情况:恶意软件尝试利用自动安装来入侵系统!\n如果你不清楚发生了什么,请在接下来的认证窗口中选择取消认证\n执行 sudo aptss ssupdate 后再尝试安装。\n如果问题仍然存在,请在应用信息界面点击 应用反馈 来提交反馈给我们!\n\n 如果你是审核人员,请使用 ssaudit来替代ssinstall进行审核工作,因为现在ssinstall已经被用于免密安装。\n如果你正在尝试安装已经下架的星火应用,也可用ssaudit来替代ssinstall"
|
||
|
||
echo "软件包校验失败!这不应该发生!"
|
||
echo "执行 sudo aptss ssupdate 后再尝试安装。"
|
||
echo "如果问题仍然存在,请在应用信息界面点击 应用反馈 来提交反馈给我们!"
|
||
echo "如果你是审核人员,请使用 ssaudit来替代ssinstall进行审核工作,因为现在ssinstall已经被用于免密安装"
|
||
echo "如果你正在尝试安装已经下架的星火应用,也可用ssaudit来替代ssinstall"
|
||
|
||
|
||
fi
|