sync_mikrotik_repo.sh 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251
  1. #!/bin/bash
  2. #wget path & opts
  3. wget_opts="-q -nc"
  4. WGET="/bin/wget"
  5. #path for you repo
  6. TARGET_DIR="/mnt/md0/mirror/routeros"
  7. #Analyze ROS versions
  8. # ROS 6
  9. #stable=>"6" lts=>"6fix"
  10. versions6=("6" "6fix")
  11. # ROS 7
  12. versions7=("stable")
  13. #needed architecture's
  14. firmware_arch=("arm" "arm64" "mipsbe" "mmips" "ppc" "smips" "tile" "x86")
  15. ##################################### Main ###################################################
  16. #always sync packages
  17. force=$1
  18. if [ -n "${force}" ]; then
  19. echo "Force flag for download packages found!"
  20. fi
  21. ###################################### ROS 6 ##################################################
  22. echo "Check ROS 6 releases"
  23. for firmware_version in "${versions6[@]}"; do
  24. echo "Analyze version ${firmware_version}"
  25. echo -n "Get latest release: "
  26. [ -e "${TARGET_DIR}/LATEST.${firmware_version}.new" ] && rm -f "${TARGET_DIR}/LATEST.${firmware_version}.new"
  27. ${WGET} ${wget_opts} "http://upgrade.mikrotik.com/routeros/LATEST.${firmware_version}" -O "${TARGET_DIR}/LATEST.${firmware_version}.new"
  28. ret=$?
  29. if [ ${ret} -ne 0 ]; then
  30. [ -e "${TARGET_DIR}/LATEST.${firmware_version}.new" ] && rm -f "${TARGET_DIR}/LATEST.${firmware_version}.new"
  31. echo "Error get release 6 version ${firmware_version}"
  32. exit 100
  33. fi
  34. old_version=$(cat "${TARGET_DIR}/LATEST.${firmware_version}" | head -1 | awk '{ print $1 }')
  35. old_timestamp=$(cat "${TARGET_DIR}/LATEST.${firmware_version}" | head -1 | awk '{ print $2 }')
  36. old_release_date=$(date -d @${old_timestamp})
  37. new_version=$(cat "${TARGET_DIR}/LATEST.${firmware_version}.new" | head -1 | awk '{ print $1 }')
  38. new_timestamp=$(cat "${TARGET_DIR}/LATEST.${firmware_version}.new" | head -1 | awk '{ print $2 }')
  39. new_release_date=$(date -d @${new_timestamp})
  40. echo "${new_version}"
  41. version_changed=1
  42. if [ "x${new_version}" == "x${old_version}" -a "x${old_timestamp}" == "x${new_timestamp}" ]; then
  43. version_changed=
  44. fi
  45. if [ "x${force}" == "x" -a "x${version_changed}" == "x" ]; then
  46. echo "Current version ${old_version}. Don't changed. Next."
  47. rm -f "${TARGET_DIR}/LATEST.${firmware_version}.new"
  48. continue
  49. fi
  50. echo "Found version: ${new_version} from ${new_release_date}"
  51. echo "Old version: ${old_version} from ${old_release_date}"
  52. echo "Try download packages..."
  53. if [ ! -e "${TARGET_DIR}/${new_version}" ]; then
  54. mkdir -p "${TARGET_DIR}/${new_version}"
  55. fi
  56. cd "${TARGET_DIR}/${new_version}"
  57. ${WGET} ${wget_opts} "http://upgrade.mikrotik.com/routeros/${new_version}/CHANGELOG"
  58. ret=$?
  59. if [ ${ret} -ne 0 ]; then
  60. echo "Error get changelog for ${new_version}. Skip release."
  61. continue
  62. fi
  63. download_error=
  64. for file_arch in "${firmware_arch[@]}"; do
  65. #packages
  66. ${WGET} ${wget_opts} "http://upgrade.mikrotik.com/routeros/${new_version}/all_packages-${file_arch}-${new_version}.zip"
  67. ret=$?
  68. if [ ${ret} -ne 0 ]; then
  69. echo "Error get all_packages-${file_arch}-${new_version}.zip"
  70. download_err=1
  71. break
  72. fi
  73. #routeros
  74. if [ "${file_arch}" == "ppc" ]; then
  75. ${WGET} ${wget_opts} "http://upgrade.mikrotik.com/routeros/${new_version}/routeros-powerpc-${new_version}.npk"
  76. else
  77. ${WGET} ${wget_opts} "http://upgrade.mikrotik.com/routeros/${new_version}/routeros-${file_arch}-${new_version}.npk"
  78. fi
  79. ret=$?
  80. if [ ${ret} -ne 0 ]; then
  81. echo "Error get routeros-${file_arch}-${new_version}.npk"
  82. download_err=1
  83. break
  84. fi
  85. done
  86. if [ -n "${download_err}" ]; then
  87. echo "Found errors by download packages. Skip release"
  88. rm -f "${TARGET_DIR}/LATEST.${firmware_version}.new"
  89. download_err=
  90. continue
  91. fi
  92. #other files
  93. ${WGET} ${wget_opts} "http://upgrade.mikrotik.com/routeros/${new_version}/btest.exe"
  94. ${WGET} ${wget_opts} "http://upgrade.mikrotik.com/routeros/${new_version}/dude-install-${new_version}.exe"
  95. ${WGET} ${wget_opts} "http://upgrade.mikrotik.com/routeros/${new_version}/flashfig.exe"
  96. ${WGET} ${wget_opts} "http://upgrade.mikrotik.com/routeros/${new_version}/install-image-${new_version}.zip"
  97. ${WGET} ${wget_opts} "http://upgrade.mikrotik.com/routeros/${new_version}/mikrotik-${new_version}.iso"
  98. ${WGET} ${wget_opts} "http://upgrade.mikrotik.com/routeros/${new_version}/mikrotik.mib"
  99. ${WGET} ${wget_opts} "http://upgrade.mikrotik.com/routeros/${new_version}/netinstall64-${new_version}.zip"
  100. ${WGET} ${wget_opts} "http://upgrade.mikrotik.com/routeros/${new_version}/netinstall-${new_version}.tar.gz"
  101. ${WGET} ${wget_opts} "http://upgrade.mikrotik.com/routeros/${new_version}/netinstall-${new_version}.zip"
  102. #winbox
  103. ${WGET} ${wget_opts} "https://mt.lv/winbox" -O "${TARGET_DIR}/${new_version}/winbox.exe"
  104. ${WGET} ${wget_opts} "https://mt.lv/winbox64" -O "${TARGET_DIR}/${new_version}/winbox64.exe"
  105. [ -e "${TARGET_DIR}/LATEST.${firmware_version}" ] && rm -f "${TARGET_DIR}/LATEST.${firmware_version}"
  106. mv "${TARGET_DIR}/LATEST.${firmware_version}.new" "${TARGET_DIR}/LATEST.${firmware_version}"
  107. echo "ROS 6 version ${new_version} downloaded."
  108. done
  109. ###################################### ROS 7 ##################################################
  110. echo "Check ROS 7 releases"
  111. #get latest release for ROS7
  112. [ -e "${TARGET_DIR}/LATEST.7.new" ] && rm -f "${TARGET_DIR}/LATEST.7.new"
  113. ${WGET} ${wget_opts} "http://upgrade.mikrotik.com/routeros/LATEST.7" -O "${TARGET_DIR}/LATEST.7.new"
  114. ret=$?
  115. if [ ${ret} -ne 0 ]; then
  116. echo "Error get release 7 version"
  117. [ -e "${TARGET_DIR}/LATEST.7.new" ] && rm -f "${TARGET_DIR}/LATEST.7.new"
  118. exit 100
  119. fi
  120. [ -e "${TARGET_DIR}/LATEST.7" ] && rm -f "${TARGET_DIR}/LATEST.7"
  121. mv "${TARGET_DIR}/LATEST.7.new" "${TARGET_DIR}/LATEST.7"
  122. for firmware_version in "${versions7[@]}"; do
  123. echo "Analyze version ${firmware_version}"
  124. echo -n "Get latest release: "
  125. ${WGET} ${wget_opts} "http://upgrade.mikrotik.com/routeros/NEWEST7.${firmware_version}" -O "${TARGET_DIR}/NEWEST7.${firmware_version}.new"
  126. ret=$?
  127. if [ ${ret} -ne 0 ]; then
  128. echo "Error get newest release 7 version ${firmware_version}"
  129. [ -e "${TARGET_DIR}/NEWEST7.${firmware_version}.new" ] && rm -f "${TARGET_DIR}/NEWEST7.${firmware_version}.new"
  130. exit 100
  131. fi
  132. old_version=$(cat "${TARGET_DIR}/NEWEST7.${firmware_version}" | head -1 | awk '{ print $1 }')
  133. old_timestamp=$(cat "${TARGET_DIR}/NEWEST7.${firmware_version}" | head -1 | awk '{ print $2 }')
  134. old_release_date=$(date -d @${old_timestamp})
  135. new_version=$(cat "${TARGET_DIR}/NEWEST7.${firmware_version}.new" | head -1 | awk '{ print $1 }')
  136. new_timestamp=$(cat "${TARGET_DIR}/NEWEST7.${firmware_version}.new" | head -1 | awk '{ print $2 }')
  137. new_release_date=$(date -d @${new_timestamp})
  138. echo "${new_version}"
  139. version_changed=1
  140. if [ "x${new_version}" == "x${old_version}" -a "x${old_timestamp}" == "x${new_timestamp}" ]; then
  141. version_changed=
  142. fi
  143. if [ "x${force}" == "x" -a "x${version_changed}" == "x" ]; then
  144. echo "Current version ${old_version}. Don't changed. Next."
  145. [ -e "${TARGET_DIR}/NEWEST7.${firmware_version}.new" ] && rm -f "${TARGET_DIR}/NEWEST7.${firmware_version}.new"
  146. continue
  147. fi
  148. echo "Found version: ${new_version} from ${new_release_date}"
  149. echo "Old version: ${old_version} from ${old_release_date}"
  150. echo "Try download packages..."
  151. if [ ! -e "${TARGET_DIR}/${new_version}" ]; then
  152. mkdir -p "${TARGET_DIR}/${new_version}"
  153. fi
  154. cd "${TARGET_DIR}/${new_version}"
  155. ${WGET} ${wget_opts} "http://upgrade.mikrotik.com/routeros/${new_version}/CHANGELOG"
  156. ret=$?
  157. if [ ${ret} -ne 0 ]; then
  158. echo "Error get changelog for ${new_version}. Skip release."
  159. continue
  160. fi
  161. download_error=
  162. for file_arch in "${firmware_arch[@]}"; do
  163. #packages
  164. ${WGET} ${wget_opts} "http://upgrade.mikrotik.com/routeros/${new_version}/all_packages-${file_arch}-${new_version}.zip"
  165. ret=$?
  166. if [ ${ret} -ne 0 ]; then
  167. echo "Error get all_packages-${file_arch}-${new_version}.zip"
  168. download_err=1
  169. break
  170. fi
  171. #routeros
  172. if [ "${file_arch}" == "x86" ]; then
  173. ${WGET} ${wget_opts} "http://upgrade.mikrotik.com/routeros/${new_version}/routeros-${new_version}.npk"
  174. else
  175. ${WGET} ${wget_opts} "http://upgrade.mikrotik.com/routeros/${new_version}/routeros-${new_version}-${file_arch}.npk"
  176. fi
  177. ret=$?
  178. if [ ${ret} -ne 0 ]; then
  179. echo "Error get routeros-${new_version}-${file_arch}.npk"
  180. download_err=1
  181. break
  182. fi
  183. done
  184. if [ -n "${download_err}" ]; then
  185. echo "Found errors by download packages for ${new_version} ${firmware_version}. Skip release"
  186. download_err=
  187. [ -e "${TARGET_DIR}/NEWEST7.${firmware_version}.new" ] && rm -f "${TARGET_DIR}/NEWEST7.${firmware_version}.new"
  188. continue
  189. fi
  190. #other files
  191. ${WGET} ${wget_opts} "http://upgrade.mikrotik.com/routeros/${new_version}/btest.exe"
  192. ${WGET} ${wget_opts} "http://upgrade.mikrotik.com/routeros/${new_version}/dude-install-${new_version}.exe"
  193. ${WGET} ${wget_opts} "http://upgrade.mikrotik.com/routeros/${new_version}/flashfig.exe"
  194. ${WGET} ${wget_opts} "http://upgrade.mikrotik.com/routeros/${new_version}/install-image-${new_version}.zip"
  195. ${WGET} ${wget_opts} "http://upgrade.mikrotik.com/routeros/${new_version}/mikrotik-${new_version}.iso"
  196. ${WGET} ${wget_opts} "http://upgrade.mikrotik.com/routeros/${new_version}/mikrotik.mib"
  197. ${WGET} ${wget_opts} "http://upgrade.mikrotik.com/routeros/${new_version}/netinstall64-${new_version}.zip"
  198. ${WGET} ${wget_opts} "http://upgrade.mikrotik.com/routeros/${new_version}/netinstall-${new_version}.tar.gz"
  199. ${WGET} ${wget_opts} "http://upgrade.mikrotik.com/routeros/${new_version}/netinstall-${new_version}.zip"
  200. #winbox
  201. ${WGET} ${wget_opts} "https://mt.lv/winbox" -O "${TARGET_DIR}/${new_version}/winbox.exe"
  202. ${WGET} ${wget_opts} "https://mt.lv/winbox64" -O "${TARGET_DIR}/${new_version}/winbox64.exe"
  203. [ -e "${TARGET_DIR}/NEWEST7.${firmware_version}" ] && rm -f "${TARGET_DIR}/NEWEST7.${firmware_version}"
  204. mv "${TARGET_DIR}/NEWEST7.${firmware_version}.new" "${TARGET_DIR}/NEWEST7.${firmware_version}"
  205. echo "ROS 7 version ${new_version} downloaded successfully."
  206. done
  207. exit