sync_mikrotik_repo.sh 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228
  1. #!/bin/bash
  2. #path for you repo
  3. TARGET_DIR="/mnt/mirror/routeros"
  4. #Analyze ROS versions
  5. # ROS 6
  6. #stable=>"6" lts=>"6fix"
  7. versions6=("6" "6fix")
  8. #ROS7
  9. versions7=("7")
  10. #needed architecture's
  11. firmware_arch=("arm" "arm64" "mipsbe" "mmips" "ppc" "smips" "tile" "x86")
  12. #path to wget
  13. WGET="/bin/wget"
  14. ##################################### Main ###################################################
  15. #always sync packages
  16. force=$1
  17. #wget options
  18. wget_opts="-q -nc"
  19. if [ -n "${force}" ]; then
  20. echo "Force flag for download packages found!"
  21. fi
  22. ###################################### ROS 6 ##################################################
  23. echo "Check ROS 6 releases"
  24. for firmware_version in "${versions6[@]}"; do
  25. echo "Analyze version ${firmware_version}"
  26. echo "Get latest release"
  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. echo "Error get release version for ${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. rm -f "${TARGET_DIR}/LATEST.${firmware_version}"
  104. mv "${TARGET_DIR}/LATEST.${firmware_version}.new" "${TARGET_DIR}/LATEST.${firmware_version}"
  105. done
  106. ###################################### ROS 7 ##################################################
  107. echo "Check ROS 7 releases"
  108. for firmware_version in "${versions7[@]}"; do
  109. echo "Analyze version ${firmware_version}"
  110. echo "Get latest release"
  111. ${WGET} ${wget_opts} "http://upgrade.mikrotik.com/routeros/LATEST.${firmware_version}" -O "${TARGET_DIR}/LATEST.${firmware_version}.new"
  112. ret=$?
  113. if [ ${ret} -ne 0 ]; then
  114. echo "Error get release version for ${firmware_version}"
  115. exit 100
  116. fi
  117. old_version=$(cat "${TARGET_DIR}/LATEST.${firmware_version}" | head -1 | awk '{ print $1 }')
  118. old_timestamp=$(cat "${TARGET_DIR}/LATEST.${firmware_version}" | head -1 | awk '{ print $2 }')
  119. old_release_date=$(date -d @${old_timestamp})
  120. new_version=$(cat "${TARGET_DIR}/LATEST.${firmware_version}.new" | head -1 | awk '{ print $1 }')
  121. new_timestamp=$(cat "${TARGET_DIR}/LATEST.${firmware_version}.new" | head -1 | awk '{ print $2 }')
  122. new_release_date=$(date -d @${new_timestamp})
  123. version_changed=1
  124. if [ "x${new_version}" == "x${old_version}" -a "x${old_timestamp}" == "x${new_timestamp}" ]; then
  125. version_changed=
  126. fi
  127. if [ "x${force}" == "x" -a "x${version_changed}" == "x" ]; then
  128. echo "Version don't changed. Next."
  129. rm -f "${TARGET_DIR}/LATEST.${firmware_version}.new"
  130. continue
  131. fi
  132. echo "Found version: ${new_version} from ${new_release_date}"
  133. echo "Old version: ${old_version} from ${old_release_date}"
  134. echo "Try download packages..."
  135. if [ ! -e "${TARGET_DIR}/${new_version}" ]; then
  136. mkdir -p "${TARGET_DIR}/${new_version}"
  137. fi
  138. cd "${TARGET_DIR}/${new_version}"
  139. ${WGET} ${wget_opts} "http://upgrade.mikrotik.com/routeros/${new_version}/CHANGELOG"
  140. ret=$?
  141. if [ ${ret} -ne 0 ]; then
  142. echo "Error get changelog for ${new_version}. Skip release."
  143. continue
  144. fi
  145. download_error=
  146. for file_arch in "${firmware_arch[@]}"; do
  147. #packages
  148. ${WGET} ${wget_opts} "http://upgrade.mikrotik.com/routeros/${new_version}/all_packages-${file_arch}-${new_version}.zip"
  149. ret=$?
  150. if [ ${ret} -ne 0 ]; then
  151. echo "Error get all_packages-${file_arch}-${new_version}.zip"
  152. download_err=1
  153. break
  154. fi
  155. #routeros
  156. if [ "${file_arch}" == "x86" ]; then
  157. ${WGET} ${wget_opts} "http://upgrade.mikrotik.com/routeros/${new_version}/routeros-${new_version}.npk"
  158. else
  159. ${WGET} ${wget_opts} "http://upgrade.mikrotik.com/routeros/${new_version}/routeros-${new_version}-${file_arch}.npk"
  160. fi
  161. ret=$?
  162. if [ ${ret} -ne 0 ]; then
  163. echo "Error get routeros-${new_version}-${file_arch}.npk"
  164. download_err=1
  165. break
  166. fi
  167. done
  168. if [ -n "${download_err}" ]; then
  169. echo "Found errors by download packages. Skip release"
  170. rm -f "${TARGET_DIR}/LATEST.${firmware_version}.new"
  171. download_err=
  172. continue
  173. fi
  174. #other files
  175. ${WGET} ${wget_opts} "http://upgrade.mikrotik.com/routeros/${new_version}/btest.exe"
  176. ${WGET} ${wget_opts} "http://upgrade.mikrotik.com/routeros/${new_version}/dude-install-${new_version}.exe"
  177. ${WGET} ${wget_opts} "http://upgrade.mikrotik.com/routeros/${new_version}/flashfig.exe"
  178. ${WGET} ${wget_opts} "http://upgrade.mikrotik.com/routeros/${new_version}/install-image-${new_version}.zip"
  179. ${WGET} ${wget_opts} "http://upgrade.mikrotik.com/routeros/${new_version}/mikrotik-${new_version}.iso"
  180. ${WGET} ${wget_opts} "http://upgrade.mikrotik.com/routeros/${new_version}/mikrotik.mib"
  181. ${WGET} ${wget_opts} "http://upgrade.mikrotik.com/routeros/${new_version}/netinstall64-${new_version}.zip"
  182. ${WGET} ${wget_opts} "http://upgrade.mikrotik.com/routeros/${new_version}/netinstall-${new_version}.tar.gz"
  183. ${WGET} ${wget_opts} "http://upgrade.mikrotik.com/routeros/${new_version}/netinstall-${new_version}.zip"
  184. #winbox
  185. ${WGET} ${wget_opts} "https://mt.lv/winbox" -O "${TARGET_DIR}/${new_version}/winbox.exe"
  186. ${WGET} ${wget_opts} "https://mt.lv/winbox64" -O "${TARGET_DIR}/${new_version}/winbox64.exe"
  187. rm -f "${TARGET_DIR}/LATEST.${firmware_version}"
  188. mv "${TARGET_DIR}/LATEST.${firmware_version}.new" "${TARGET_DIR}/LATEST.${firmware_version}"
  189. echo "Version ${new_version} downloaded."
  190. done
  191. exit