update.sh 2.9 KB

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