update.sh 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. #!/bin/sh
  2. # SPDX-License-Identifier: GPL-3.0-only
  3. # Copyright (C) 2019-2021 Tianling Shen <[email protected]>
  4. NAME="unblockneteasemusic"
  5. check_core_if_already_running(){
  6. running_tasks="$(ps |grep "$NAME" |grep "update.sh" |grep "update_core" |grep -v "grep" |awk '{print $1}' |wc -l)"
  7. [ "${running_tasks}" -gt "2" ] && { echo -e "\nA task is already running." >> "/tmp/$NAME.log"; exit 2; }
  8. }
  9. clean_log(){
  10. echo "" > "/tmp/$NAME.log"
  11. }
  12. check_core_latest_version(){
  13. core_latest_ver="$(uclient-fetch -qO- 'https://api.github.com/repos/UnblockNeteaseMusic/server/commits?sha=enhanced&path=precompiled' | jsonfilter -e '@[0].sha')"
  14. [ -z "${core_latest_ver}" ] && { echo -e "\nFailed to check latest core version, please try again later." >> "/tmp/$NAME.log"; exit 1; }
  15. if [ ! -e "/usr/share/$NAME/core_local_ver" ]; then
  16. clean_log
  17. echo -e "Local version: NOT FOUND, latest version: ${core_latest_ver}." >> "/tmp/$NAME.log"
  18. update_core
  19. else
  20. if [ "$(cat /usr/share/$NAME/core_local_ver)" != "${core_latest_ver}" ]; then
  21. clean_log
  22. echo -e "Local version: $(cat /usr/share/$NAME/core_local_ver 2>"/dev/null"), latest version: ${core_latest_ver}." >> "/tmp/$NAME.log"
  23. update_core
  24. else
  25. echo -e "\nLocal version: $(cat /usr/share/$NAME/core_local_ver 2>"/dev/null"), latest version: ${core_latest_ver}." >> "/tmp/$NAME.log"
  26. echo -e "You're already using the latest version." >> "/tmp/$NAME.log"
  27. exit 3
  28. fi
  29. fi
  30. }
  31. update_core(){
  32. echo -e "Updating core..." >> "/tmp/$NAME.log"
  33. mkdir -p "/usr/share/$NAME/core" > "/dev/null" 2>&1
  34. rm -rf /usr/share/$NAME/core/* > "/dev/null" 2>&1
  35. local mirror
  36. for mirror in "https://cdn.jsdelivr.net/gh/UnblockNeteaseMusic/server@" "https://raw.githubusercontent.com/UnblockNeteaseMusic/server/"
  37. do
  38. {
  39. uclient-fetch "${mirror}${core_latest_ver}/precompiled/app.js" -qO "/usr/share/$NAME/core/app.js"
  40. uclient-fetch "${mirror}enhanced/server.crt" -qO "/usr/share/$NAME/core/server.crt"
  41. uclient-fetch "${mirror}enhanced/server.key" -qO "/usr/share/$NAME/core/server.key"
  42. } > "/dev/null" 2>&1 && break
  43. done
  44. local file
  45. for file in "app.js" "server.crt" "server.key"
  46. do
  47. [ -s "/usr/share/$NAME/core/${file}" ] || {
  48. echo -e "Failed to download ${file}." >> "/tmp/$NAME.log"
  49. exit 1
  50. }
  51. done
  52. [ -n "${update_core_from_luci}" ] && touch "/usr/share/$NAME/update_core_successfully"
  53. echo -e "${core_latest_ver}" > "/usr/share/$NAME/core_local_ver"
  54. [ -z "${non_restart}" ] && /etc/init.d/$NAME restart
  55. echo -e "Succeeded in updating core." > "/tmp/$NAME.log"
  56. echo -e "Current core version: ${core_latest_ver}.\n" >> "/tmp/$NAME.log"
  57. }
  58. case "$1" in
  59. "update_core")
  60. check_core_if_already_running
  61. check_core_latest_version
  62. ;;
  63. "update_core_non_restart")
  64. non_restart=1
  65. check_core_if_already_running
  66. check_core_latest_version
  67. ;;
  68. "update_core_from_luci")
  69. update_core_from_luci=1
  70. check_core_if_already_running
  71. check_core_latest_version
  72. ;;
  73. *)
  74. echo -e "Usage: ./update.sh update_core"
  75. ;;
  76. esac