update.sh 3.0 KB

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