sync_mikrotik_repo.sh 9.4 KB

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