From 9897ba84bafb20cfc8ecca18262369259656cfe1 Mon Sep 17 00:00:00 2001 From: shenmo Date: Wed, 21 Dec 2022 09:24:59 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=8D=E7=84=B6=E6=9C=89=E7=82=B9=E5=B0=8F?= =?UTF-8?q?=E9=97=AE=E9=A2=98=E7=9A=84=E6=9B=B4=E6=96=B0=E6=A3=80=E6=B5=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tool/update-upgrade/ss-do-upgrade-worker.sh | 37 ++++--- tool/update-upgrade/ss-do-upgrade.sh | 104 ++++++++++++-------- tool/update-upgrade/ss-update-notifier.sh | 47 +++++---- 3 files changed, 115 insertions(+), 73 deletions(-) diff --git a/tool/update-upgrade/ss-do-upgrade-worker.sh b/tool/update-upgrade/ss-do-upgrade-worker.sh index 37e0e58..b76ddc3 100755 --- a/tool/update-upgrade/ss-do-upgrade-worker.sh +++ b/tool/update-upgrade/ss-do-upgrade-worker.sh @@ -1,26 +1,39 @@ #!/bin/bash -if [ "$(id -u)" != "0" ];then -pkexec "$0" "$@" -exit +if [ "$(id -u)" != "0" ] ; then + pkexec "$0" "$@" + exit fi - case $1 in ssupdate) - aptss ssupdate 2>&1 | tee /tmp/spark-store-app-ssupdate-log.txt - IS_SSUPDATE_ERROR=`cat /tmp/spark-store-app-ssupdate-log.txt | grep "E: "` - echo "$IS_SSUPDATE_ERROR" > /tmp/spark-store-app-ssupdate-status.txt + aptss ssupdate 2>&1 | tee /tmp/spark-store-app-ssupdate-log.txt + IS_SSUPDATE_ERROR=`cat /tmp/spark-store-app-ssupdate-log.txt | grep "E: "` + echo "$IS_SSUPDATE_ERROR" > /tmp/spark-store-app-ssupdate-status.txt ;; + upgradable-list) - bwrap --dev-bind / / --bind '/opt/durapps/spark-store/bin/apt-fast-conf/sources.list.d/sparkstore.list' /etc/apt/sources.list.d/sparkstore.list apt list --upgradable -o Dir::Etc::sourcelist="sources.list.d/sparkstore.list" -o Dir::Etc::sourceparts="-" -o APT::Get::List-Cleanup="0" | awk 'BEGIN {FS="/"} {print $1}' | awk NR\>1 + output=$(env LANGUAGE=en_US bwrap --dev-bind / / --bind '/opt/durapps/spark-store/bin/apt-fast-conf/sources.list.d/sparkstore.list' /etc/apt/sources.list.d/sparkstore.list apt list --upgradable -o Dir::Etc::sourcelist="sources.list.d/sparkstore.list" -o Dir::Etc::sourceparts="/dev/null" -o APT::Get::List-Cleanup="0" | awk NR\>1) + + IFS_OLD="$IFS" + IFS=$'\n' + + for line in $output ; do + PKG_NAME=$(echo $line | awk -F '/' '{print $1}') + PKG_NEW_VER=$(echo $line | awk -F ' ' '{print $2}') + PKG_CUR_VER=$(echo $line | awk -F ' ' '{print $6}' | awk -F ']' '{print $1}') + echo "${PKG_NAME} ${PKG_NEW_VER} ${PKG_CUR_VER}" + done + + IFS="$IFS_OLD" ;; + upgrade-app) - aptss install "${@:2}" --only-upgrade 2>&1 | tee /tmp/spark-store-app-upgrade-log.txt - IS_UPGRADE_ERROR=`cat /tmp/spark-store-app-upgrade-log.txt | grep "Package manager quit with exit code."` - echo "$IS_UPGRADE_ERROR" > /tmp/spark-store-app-upgrade-status.txt + aptss install "${@:2}" --only-upgrade 2>&1 | tee /tmp/spark-store-app-upgrade-log.txt + IS_UPGRADE_ERROR=`cat /tmp/spark-store-app-upgrade-log.txt | grep "Package manager quit with exit code."` + echo "$IS_UPGRADE_ERROR" > /tmp/spark-store-app-upgrade-status.txt ;; clean-log) - rm -f /tmp/spark-store-app-ssupdate-status.txt /tmp/spark-store-app-ssupdate-log.txt /tmp/spark-store-app-upgrade-log.txt /tmp/spark-store-app-upgrade-status.txt + rm -f /tmp/spark-store-app-ssupdate-status.txt /tmp/spark-store-app-ssupdate-log.txt /tmp/spark-store-app-upgrade-log.txt /tmp/spark-store-app-upgrade-status.txt ;; esac diff --git a/tool/update-upgrade/ss-do-upgrade.sh b/tool/update-upgrade/ss-do-upgrade.sh index 02b6ef5..e022e47 100755 --- a/tool/update-upgrade/ss-do-upgrade.sh +++ b/tool/update-upgrade/ss-do-upgrade.sh @@ -1,58 +1,76 @@ #!/bin/bash touch /tmp/spark-store/upgradeStatus.txt -pkexec /opt/durapps/spark-store/bin/update-upgrade/ss-do-upgrade-worker.sh ssupdate | zenity --progress --auto-close --pulsate --no-cancel --text="正在检查更新,请稍候..." --height 70 --width 400 --title="星火商店更新模块" --window-icon=/usr/share/icons/hicolor/scalable/apps/spark-store.svg -if [ -z `cat /tmp/spark-store-app-ssupdate-status.txt` != "0" ];then -echo "无错误" +# 执行 apt update +pkexec /opt/durapps/spark-store/bin/update-upgrade/ss-do-upgrade-worker.sh ssupdate | zenity --progress --auto-close --pulsate --no-cancel --text="正在检查更新,请稍候..." --height 70 --width 400 --title="星火商店更新模块" --window-icon=/usr/share/icons/hicolor/scalable/apps/spark-store.svg + +if [ -z `cat /tmp/spark-store-app-ssupdate-status.txt` ] ; then + echo "无错误" + pkexec /opt/durapps/spark-store/bin/update-upgrade/ss-do-upgrade-worker.sh clean-log else -zenity --error --text "检查更新进程出现错误!按确定查看报错,可用于反馈" --title "星火商店更新检测模块" --height 200 --width 350 --window-icon=/usr/share/icons/hicolor/scalable/apps/spark-store.svg -zenity --text-info --filename=/tmp/spark-store-app-ssupdate-log.txt --checkbox="我已复制了此文本框中的日志,且将会在反馈时附上 。反馈渠道可以在右上角菜单的设置中找到" --title="反馈渠道在商店右上角的设置里" --window-icon=/usr/share/icons/hicolor/scalable/apps/spark-store.svg -pkexec /opt/durapps/spark-store/bin/update-upgrade/ss-do-upgrade-worker.sh clean-log -exit + zenity --error --text "检查更新进程出现错误!按确定查看报错,可用于反馈" --title "星火商店更新检测模块" --height 200 --width 350 --window-icon=/usr/share/icons/hicolor/scalable/apps/spark-store.svg + zenity --text-info --filename=/tmp/spark-store-app-ssupdate-log.txt --checkbox="我已复制了此文本框中的日志,且将会在反馈时附上。反馈渠道可以在右上角菜单的设置中找到" --title="反馈渠道在商店右上角的设置里" --window-icon=/usr/share/icons/hicolor/scalable/apps/spark-store.svg + pkexec /opt/durapps/spark-store/bin/update-upgrade/ss-do-upgrade-worker.sh clean-log + exit fi -pkexec /opt/durapps/spark-store/bin/update-upgrade/ss-do-upgrade-worker.sh clean-log -PKG_LIST="$(pkexec /opt/durapps/spark-store/bin/update-upgrade/ss-do-upgrade-worker.sh upgradable-list)" -####如果没更新,就弹出不需要更新 -if [ -z "$PKG_LIST" ];then -zenity --info --text "没有软件需要更新\n但是你并没有站在世界之巅" --title "星火商店更新检测模块" --height 150 --width 300 --window-icon=/usr/share/icons/hicolor/scalable/apps/spark-store.svg +# 获取可更新应用列表 +PKG_LIST="$(pkexec /opt/durapps/spark-store/bin/update-upgrade/ss-do-upgrade-worker.sh upgradable-list)" +## 如果没更新,就弹出不需要更新 +if [ -z "$PKG_LIST" ] ; then + zenity --info --text "没有软件需要更新\n但是你并没有站在世界之巅" --title "星火商店更新检测模块" --height 150 --width 300 --window-icon=/usr/share/icons/hicolor/scalable/apps/spark-store.svg else -PKG_UPGRADE_LIST=`for PKG_NAME in $PKG_LIST; -do -#### 检测是否是hold状态 - if [ "$(dpkg-query -W -f='${Status}' $PKG_NAME | grep hold)" = "" ];then - echo "true" - echo "$PKG_NAME" - echo "$PKG_NAME" - else - echo "false" - echo "$PKG_NAME(无法更新:已被标记为保留)" - echo "$PKG_NAME" + ## 指定分隔符为 \n + IFS_OLD="$IFS" + IFS=$'\n' + + ## 获取用户选择的要更新的应用 + PKG_UPGRADE_LIST=`for line in $PKG_LIST ; do + + PKG_NAME=$(echo $line | awk -F ' ' '{print $1}') + PKG_NEW_VER=$(echo $line | awk -F ' ' '{print $2}') + PKG_CUR_VER=$(echo $line | awk -F ' ' '{print $3}') + + dpkg --compare-versions $PKG_NEW_VER le $PKG_CUR_VER + if [ $? -eq 0 ] ; then + continue fi -done | zenity --list --text="选择你想更新的应用" --column=是否更新 --column=应用包名 --column="真的应用包名" --separator=" " --checklist --print-column=3 --multiple --height 350 --width 550 --hide-column=3 --window-icon=/usr/share/icons/hicolor/scalable/apps/spark-store.svg` + ### 检测是否是 hold 状态 + PKG_STA=$(dpkg-query -W -f='${db:Status-Want}' $PKG_NAME) + if [ "$PKG_STA" != "hold" ] ; then + echo "true" + echo "$PKG_NAME" + echo "$PKG_NEW_VER" + echo "$PKG_NAME" + else + echo "false" + echo "$PKG_NAME(无法更新:已被标记为保留)" + echo "$PKG_NEW_VER" + echo "$PKG_NAME" + fi +done | zenity --list --text="选择你想更新的应用" --column="是否更新" --column="包名" --column="新版本" --column="值" --separator=" " --checklist --multiple --print-column=4 --hide-column=4 --height 350 --width 550 --window-icon=/usr/share/icons/hicolor/scalable/apps/spark-store.svg` -#### 如果没有选择,则直接退出 + ## 还原分隔符 + IFS="$IFS_OLD" -if [ "$PKG_UPGRADE_LIST" = "" ];then -zenity --info --text "没有选中任何软件\n但是你并没有站在世界之巅" --title "星火商店更新检测服务" --height 150 --width 300 --window-icon=/usr/share/icons/hicolor/scalable/apps/spark-store.svg -else - -pkexec /opt/durapps/spark-store/bin/update-upgrade/ss-do-upgrade-worker.sh upgrade-app $PKG_UPGRADE_LIST -y | zenity --progress --auto-close --no-cancel --pulsate --text=正在更新已选中的应用,请稍候... --height 70 --width 400 --title="星火商店更新模块" --window-icon=/usr/share/icons/hicolor/scalable/apps/spark-store.svg - -if [ -z "`cat /tmp/spark-store-app-upgrade-status.txt`" ];then - -zenity --info --text "选中的软件已经更新完毕" --title "星火商店更新检测模块" --height 150 --width 300 --window-icon=/usr/share/icons/hicolor/scalable/apps/spark-store.svg -else -zenity --error --text "更新出现错误!按确定查看报错,可用于反馈" --title "星火商店更新检测模块" --height 200 --width 350 --window-icon=/usr/share/icons/hicolor/scalable/apps/spark-store.svg -zenity --text-info --filename=/tmp/spark-store-app-upgrade-log.txt --checkbox="我已复制了此文本框中的日志,且将会在反馈时附上 。反馈渠道可以在右上角菜单的设置中找到" --title="反馈渠道在商店右上角的设置里往下拉" --window-icon=/usr/share/icons/hicolor/scalable/apps/spark-store.svg -fi - - - -fi + ### 如果没有选择,则直接退出 + if [ "$PKG_UPGRADE_LIST" = "" ] ; then + zenity --info --text "没有选中任何软件\n但是你并没有站在世界之巅" --title "星火商店更新检测服务" --height 150 --width 300 --window-icon=/usr/share/icons/hicolor/scalable/apps/spark-store.svg + else + ### 更新用户选择的应用 + pkexec /opt/durapps/spark-store/bin/update-upgrade/ss-do-upgrade-worker.sh upgrade-app $PKG_UPGRADE_LIST -y | zenity --progress --auto-close --no-cancel --pulsate --text="正在更新已选中的应用,请稍候..." --height 70 --width 400 --title="星火商店更新模块" --window-icon=/usr/share/icons/hicolor/scalable/apps/spark-store.svg + #### 更新成功 + if [ -z "`cat /tmp/spark-store-app-upgrade-status.txt`" ] ; then + zenity --info --text "选中的软件已经更新完毕" --title "星火商店更新检测模块" --height 150 --width 300 --window-icon=/usr/share/icons/hicolor/scalable/apps/spark-store.svg + else + #### 更新异常 + zenity --error --text "更新出现错误!按确定查看报错,可用于反馈" --title "星火商店更新检测模块" --height 200 --width 350 --window-icon=/usr/share/icons/hicolor/scalable/apps/spark-store.svg + zenity --text-info --filename=/tmp/spark-store-app-upgrade-log.txt --checkbox="我已复制了此文本框中的日志,且将会在反馈时附上 。反馈渠道可以在右上角菜单的设置中找到" --title="反馈渠道在商店右上角的设置里往下拉" --window-icon=/usr/share/icons/hicolor/scalable/apps/spark-store.svg + fi + fi fi rm -f touch /tmp/spark-store/upgradeStatus.txt -####从最开头 +# 从最开头 diff --git a/tool/update-upgrade/ss-update-notifier.sh b/tool/update-upgrade/ss-update-notifier.sh index 6b74858..a7ea6c6 100755 --- a/tool/update-upgrade/ss-update-notifier.sh +++ b/tool/update-upgrade/ss-update-notifier.sh @@ -1,5 +1,4 @@ #!/bin/bash -set -e LANG=en.US function notify-send() { @@ -48,18 +47,11 @@ fi curl --progress-bar -o /opt/durapps/spark-store/bin/apt-fast-conf/sources.list.d/sparkstore.list "https://gitee.com/deepin-community-store/repo_auto_update_script/raw/master/mirror-list-for-apt-fast/sources.list.d/sparkstore.list" # 每日更新星火源文件 -mkdir -p /etc/apt/preferences.d -touch /etc/apt/preferences.d/sparkstore -cat << EOF >/etc/apt/preferences.d/sparkstore -Package: * -Pin: origin *.deepinos.org.cn -Pin-Priority: 100 -EOF updatetext=`aptss ssupdate` -rm /etc/apt/preferences.d/sparkstore + isupdate=`echo ${updatetext: -5}` @@ -72,24 +64,43 @@ update_app_number=`echo ${updatetext%package*} #从右向左截取第一个 src update_app_number=`echo ${update_app_number##*information...}` -PKG_LIST="$(bwrap --dev-bind / / --bind '/opt/durapps/spark-store/bin/apt-fast-conf/sources.list.d/sparkstore.list' /etc/apt/sources.list.d/sparkstore.list apt list --upgradable -o Dir::Etc::sourcelist="sources.list.d/sparkstore.list" -o Dir::Etc::sourceparts="-" -o APT::Get::List-Cleanup="0" | awk 'BEGIN {FS="/"} {print $1}' | awk NR\>1)" +PKG_LIST="$(/opt/durapps/spark-store/bin/update-upgrade/ss-do-upgrade-worker.sh upgradable-list)" -for PKG_NAME in $PKG_LIST;do -if [ "$(dpkg-query -W -f='${Status}' $PKG_NAME | grep hold)" != "" ];then - let update_app_number=$update_app_number-1 - echo $update_app_number - echo $PKG_NAME -fi +## 指定分隔符为 \n + IFS_OLD="$IFS" + IFS=$'\n' + + ## 获取用户选择的要更新的应用 +for line in $PKG_LIST ; do + + PKG_NAME=$(echo $line | awk -F ' ' '{print $1}') + PKG_NEW_VER=$(echo $line | awk -F ' ' '{print $2}') + PKG_CUR_VER=$(echo $line | awk -F ' ' '{print $3}') + + + dpkg --compare-versions $PKG_NEW_VER le $PKG_CUR_VER + + if [ $? -eq 0 ] ; then + let update_app_number=$update_app_number-1 + continue + fi + + ### 检测是否是 hold 状态 + PKG_STA=$(dpkg-query -W -f='${db:Status-Want}' $PKG_NAME) + if [ "$PKG_STA" = "hold" ] ; then + let update_app_number=$update_app_number-1 + fi done -if [ $update_app_number -lt 1 ];then + +if [ $update_app_number -le 0 ];then exit fi -#### 如果都是hold的那就直接退出,否则把剩余的给提醒了 +#### 如果都是hold或者版本一致的那就直接退出,否则把剩余的给提醒了 notify-send -i spark-store "星火更新提醒" "星火商店仓库中有$update_app_number个软件包可以更新啦!请到星火商店的菜单处理"