sync_mikrotik_repo.sh 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378
  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. #get upgrade version to ROS 7
  24. ${WGET} ${wget_opts} "http://upgrade.mikrotik.com/routeros/NEWEST6.upgrade?version=6.49.13" -O "${TARGET_DIR}/NEWEST6.upgrade"
  25. for firmware_version in "${versions6[@]}"; do
  26. echo "Analyze version ${firmware_version}"
  27. echo -n "Get latest release: "
  28. [ -e "${TARGET_DIR}/LATEST.${firmware_version}.new" ] && rm -f "${TARGET_DIR}/LATEST.${firmware_version}.new"
  29. ${WGET} ${wget_opts} "http://upgrade.mikrotik.com/routeros/LATEST.${firmware_version}" -O "${TARGET_DIR}/LATEST.${firmware_version}.new"
  30. ret=$?
  31. if [ ${ret} -ne 0 ]; then
  32. [ -e "${TARGET_DIR}/LATEST.${firmware_version}.new" ] && rm -f "${TARGET_DIR}/LATEST.${firmware_version}.new"
  33. echo "Error get release 6 version ${firmware_version}"
  34. exit 100
  35. fi
  36. old_version=$(cat "${TARGET_DIR}/LATEST.${firmware_version}" | head -1 | awk '{ print $1 }')
  37. old_timestamp=$(cat "${TARGET_DIR}/LATEST.${firmware_version}" | head -1 | awk '{ print $2 }')
  38. old_release_date=$(date -d @${old_timestamp})
  39. new_version=$(cat "${TARGET_DIR}/LATEST.${firmware_version}.new" | head -1 | awk '{ print $1 }')
  40. new_timestamp=$(cat "${TARGET_DIR}/LATEST.${firmware_version}.new" | head -1 | awk '{ print $2 }')
  41. new_release_date=$(date -d @${new_timestamp})
  42. echo "${new_version}"
  43. version_changed=1
  44. if [ "x${new_version}" == "x${old_version}" -a "x${old_timestamp}" == "x${new_timestamp}" ]; then
  45. version_changed=
  46. fi
  47. if [ "x${force}" == "x" -a "x${version_changed}" == "x" ]; then
  48. echo "Current version ${old_version}. Don't changed. Next."
  49. rm -f "${TARGET_DIR}/LATEST.${firmware_version}.new"
  50. continue
  51. fi
  52. echo "Found version: ${new_version} from ${new_release_date}"
  53. echo "Old version: ${old_version} from ${old_release_date}"
  54. echo "Try download packages..."
  55. if [ ! -e "${TARGET_DIR}/${new_version}" ]; then
  56. mkdir -p "${TARGET_DIR}/${new_version}"
  57. fi
  58. cd "${TARGET_DIR}/${new_version}"
  59. ${WGET} ${wget_opts} "http://upgrade.mikrotik.com/routeros/${new_version}/CHANGELOG"
  60. ret=$?
  61. if [ ${ret} -ne 0 ]; then
  62. echo "Error get changelog for ${new_version}. Skip release."
  63. continue
  64. fi
  65. download_error=
  66. for file_arch in "${firmware_arch[@]}"; do
  67. #packages
  68. ${WGET} ${wget_opts} "http://upgrade.mikrotik.com/routeros/${new_version}/all_packages-${file_arch}-${new_version}.zip"
  69. ret=$?
  70. if [ ${ret} -ne 0 ]; then
  71. echo "Error get all_packages-${file_arch}-${new_version}.zip"
  72. download_err=1
  73. break
  74. fi
  75. #routeros
  76. if [ "${file_arch}" == "ppc" ]; then
  77. ${WGET} ${wget_opts} "http://upgrade.mikrotik.com/routeros/${new_version}/routeros-powerpc-${new_version}.npk"
  78. else
  79. ${WGET} ${wget_opts} "http://upgrade.mikrotik.com/routeros/${new_version}/routeros-${file_arch}-${new_version}.npk"
  80. fi
  81. ret=$?
  82. if [ ${ret} -ne 0 ]; then
  83. echo "Error get routeros-${file_arch}-${new_version}.npk"
  84. download_err=1
  85. break
  86. fi
  87. done
  88. if [ -n "${download_err}" ]; then
  89. echo "Found errors by download packages. Skip release"
  90. rm -f "${TARGET_DIR}/LATEST.${firmware_version}.new"
  91. download_err=
  92. continue
  93. fi
  94. #other files
  95. ${WGET} ${wget_opts} "http://upgrade.mikrotik.com/routeros/${new_version}/btest.exe"
  96. ${WGET} ${wget_opts} "http://upgrade.mikrotik.com/routeros/${new_version}/dude-install-${new_version}.exe"
  97. ${WGET} ${wget_opts} "http://upgrade.mikrotik.com/routeros/${new_version}/flashfig.exe"
  98. ${WGET} ${wget_opts} "http://upgrade.mikrotik.com/routeros/${new_version}/install-image-${new_version}.zip"
  99. ${WGET} ${wget_opts} "http://upgrade.mikrotik.com/routeros/${new_version}/mikrotik-${new_version}.iso"
  100. ${WGET} ${wget_opts} "http://upgrade.mikrotik.com/routeros/${new_version}/mikrotik.mib"
  101. ${WGET} ${wget_opts} "http://upgrade.mikrotik.com/routeros/${new_version}/netinstall64-${new_version}.zip"
  102. ${WGET} ${wget_opts} "http://upgrade.mikrotik.com/routeros/${new_version}/netinstall-${new_version}.tar.gz"
  103. ${WGET} ${wget_opts} "http://upgrade.mikrotik.com/routeros/${new_version}/netinstall-${new_version}.zip"
  104. #winbox
  105. ${WGET} ${wget_opts} "https://mt.lv/winbox" -O "${TARGET_DIR}/${new_version}/winbox.exe"
  106. ${WGET} ${wget_opts} "https://mt.lv/winbox64" -O "${TARGET_DIR}/${new_version}/winbox64.exe"
  107. [ -e "${TARGET_DIR}/LATEST.${firmware_version}" ] && rm -f "${TARGET_DIR}/LATEST.${firmware_version}"
  108. mv "${TARGET_DIR}/LATEST.${firmware_version}.new" "${TARGET_DIR}/LATEST.${firmware_version}"
  109. echo "ROS 6 version ${new_version} downloaded."
  110. done
  111. ###################################### Before ROS 7.12.1 ##################################################
  112. echo "Check ROS 7 releases before 7.12.1"
  113. #get latest release for ROS7
  114. [ -e "${TARGET_DIR}/LATEST.7.new" ] && rm -f "${TARGET_DIR}/LATEST.7.new"
  115. ${WGET} ${wget_opts} -U "RouterOS 7.10" "http://upgrade.mikrotik.com/routeros/LATEST.7" -O "${TARGET_DIR}/LATEST.7.new"
  116. ret=$?
  117. if [ ${ret} -ne 0 ]; then
  118. echo "Error get release 7 version"
  119. [ -e "${TARGET_DIR}/LATEST.7.new" ] && rm -f "${TARGET_DIR}/LATEST.7.new"
  120. exit 100
  121. fi
  122. [ -e "${TARGET_DIR}/LATEST.7" ] && rm -f "${TARGET_DIR}/LATEST.7"
  123. mv "${TARGET_DIR}/LATEST.7.new" "${TARGET_DIR}/LATEST.7"
  124. for firmware_version in "${versions7[@]}"; do
  125. echo "Analyze version ${firmware_version}"
  126. echo -n "Get latest release: "
  127. ${WGET} ${wget_opts} -U "RouterOS 7.10" "http://upgrade.mikrotik.com/routeros/NEWEST7.${firmware_version}" -O "${TARGET_DIR}/NEWEST7.${firmware_version}.new"
  128. ret=$?
  129. if [ ${ret} -ne 0 ]; then
  130. echo "Error get newest release 7 version ${firmware_version}"
  131. [ -e "${TARGET_DIR}/NEWEST7.${firmware_version}.new" ] && rm -f "${TARGET_DIR}/NEWEST7.${firmware_version}.new"
  132. exit 100
  133. fi
  134. old_version=$(cat "${TARGET_DIR}/NEWEST7.${firmware_version}" | head -1 | awk '{ print $1 }')
  135. old_timestamp=$(cat "${TARGET_DIR}/NEWEST7.${firmware_version}" | head -1 | awk '{ print $2 }')
  136. old_release_date=$(date -d @${old_timestamp})
  137. new_version=$(cat "${TARGET_DIR}/NEWEST7.${firmware_version}.new" | head -1 | awk '{ print $1 }')
  138. new_timestamp=$(cat "${TARGET_DIR}/NEWEST7.${firmware_version}.new" | head -1 | awk '{ print $2 }')
  139. new_release_date=$(date -d @${new_timestamp})
  140. echo "${new_version}"
  141. version_changed=1
  142. if [ "x${new_version}" == "x${old_version}" -a "x${old_timestamp}" == "x${new_timestamp}" ]; then
  143. version_changed=
  144. fi
  145. if [ "x${force}" == "x" -a "x${version_changed}" == "x" ]; then
  146. echo "Current version ${old_version}. Don't changed. Next."
  147. [ -e "${TARGET_DIR}/NEWEST7.${firmware_version}.new" ] && rm -f "${TARGET_DIR}/NEWEST7.${firmware_version}.new"
  148. continue
  149. fi
  150. echo "Found version: ${new_version} from ${new_release_date}"
  151. echo "Old version: ${old_version} from ${old_release_date}"
  152. echo "Try download packages..."
  153. if [ ! -e "${TARGET_DIR}/${new_version}" ]; then
  154. mkdir -p "${TARGET_DIR}/${new_version}"
  155. fi
  156. cd "${TARGET_DIR}/${new_version}"
  157. ${WGET} ${wget_opts} -U "RouterOS 7.10" "http://upgrade.mikrotik.com/routeros/${new_version}/CHANGELOG"
  158. ret=$?
  159. if [ ${ret} -ne 0 ]; then
  160. echo "Error get changelog for ${new_version}. Skip release."
  161. continue
  162. fi
  163. download_error=
  164. for file_arch in "${firmware_arch[@]}"; do
  165. #packages
  166. ${WGET} ${wget_opts} -U "RouterOS 7.10" "http://upgrade.mikrotik.com/routeros/${new_version}/all_packages-${file_arch}-${new_version}.zip"
  167. ret=$?
  168. if [ ${ret} -ne 0 ]; then
  169. echo "Error get all_packages-${file_arch}-${new_version}.zip"
  170. download_err=1
  171. break
  172. fi
  173. #routeros
  174. if [ "${file_arch}" == "x86" ]; then
  175. ${WGET} ${wget_opts} -U "RouterOS 7.10" "http://upgrade.mikrotik.com/routeros/${new_version}/routeros-${new_version}.npk"
  176. else
  177. ${WGET} ${wget_opts} -U "RouterOS 7.10" "http://upgrade.mikrotik.com/routeros/${new_version}/routeros-${new_version}-${file_arch}.npk"
  178. ret=$?
  179. if [ ${ret} -ne 0 ]; then
  180. echo "Error get routeros-${new_version}-${file_arch}.npk"
  181. download_err=1
  182. break
  183. fi
  184. ${WGET} ${wget_opts} -U "RouterOS 7.10" "http://upgrade.mikrotik.com/routeros/${new_version}/routeros-${file_arch}-${new_version}.npk" 2>/dev/null
  185. fi
  186. done
  187. if [ -n "${download_err}" ]; then
  188. echo "Found errors by download packages for ${new_version} ${firmware_version}. Skip release"
  189. download_err=
  190. [ -e "${TARGET_DIR}/NEWEST7.${firmware_version}.new" ] && rm -f "${TARGET_DIR}/NEWEST7.${firmware_version}.new"
  191. continue
  192. fi
  193. #other files
  194. ${WGET} ${wget_opts} -U "RouterOS 7.10" "http://upgrade.mikrotik.com/routeros/${new_version}/btest.exe"
  195. ${WGET} ${wget_opts} -U "RouterOS 7.10" "http://upgrade.mikrotik.com/routeros/${new_version}/dude-install-${new_version}.exe"
  196. ${WGET} ${wget_opts} -U "RouterOS 7.10" "http://upgrade.mikrotik.com/routeros/${new_version}/flashfig.exe"
  197. ${WGET} ${wget_opts} -U "RouterOS 7.10" "http://upgrade.mikrotik.com/routeros/${new_version}/install-image-${new_version}.zip"
  198. ${WGET} ${wget_opts} -U "RouterOS 7.10" "http://upgrade.mikrotik.com/routeros/${new_version}/mikrotik-${new_version}.iso"
  199. ${WGET} ${wget_opts} -U "RouterOS 7.10" "http://upgrade.mikrotik.com/routeros/${new_version}/mikrotik.mib"
  200. ${WGET} ${wget_opts} -U "RouterOS 7.10" "http://upgrade.mikrotik.com/routeros/${new_version}/netinstall64-${new_version}.zip"
  201. ${WGET} ${wget_opts} -U "RouterOS 7.10" "http://upgrade.mikrotik.com/routeros/${new_version}/netinstall-${new_version}.tar.gz"
  202. ${WGET} ${wget_opts} -U "RouterOS 7.10" "http://upgrade.mikrotik.com/routeros/${new_version}/netinstall-${new_version}.zip"
  203. #winbox
  204. ${WGET} ${wget_opts} -U "RouterOS 7.10" "https://mt.lv/winbox" -O "${TARGET_DIR}/${new_version}/winbox.exe"
  205. ${WGET} ${wget_opts} -U "RouterOS 7.10" "https://mt.lv/winbox64" -O "${TARGET_DIR}/${new_version}/winbox64.exe"
  206. [ -e "${TARGET_DIR}/NEWEST7.${firmware_version}" ] && rm -f "${TARGET_DIR}/NEWEST7.${firmware_version}"
  207. mv "${TARGET_DIR}/NEWEST7.${firmware_version}.new" "${TARGET_DIR}/NEWEST7.${firmware_version}"
  208. echo "ROS 7 version ${new_version} downloaded successfully."
  209. done
  210. ###################################### After ROS 7.12.1 ##################################################
  211. echo "Check ROS 7 releases after 7.12.1"
  212. echo -n "Get latest release: "
  213. for firmware_version in "${versions7[@]}"; do
  214. echo "Analyze version ${firmware_version}"
  215. ${WGET} ${wget_opts} -U "RouterOS 7.12.1" "http://upgrade.mikrotik.com/routeros/NEWESTa7.${firmware_version}?version=7.12.1" -O "${TARGET_DIR}/NEWESTa7.${firmware_version}.new"
  216. ret=$?
  217. if [ ${ret} -ne 0 ]; then
  218. echo "Error get newest release 7 version ${firmware_version}"
  219. [ -e "${TARGET_DIR}/NEWESTa7.${firmware_version}.new" ] && rm -f "${TARGET_DIR}/NEWESTa7.${firmware_version}.new"
  220. exit 100
  221. fi
  222. old_version=$(cat "${TARGET_DIR}/NEWESTa7.${firmware_version}" | head -1 | awk '{ print $1 }')
  223. old_timestamp=$(cat "${TARGET_DIR}/NEWESTa7.${firmware_version}" | head -1 | awk '{ print $2 }')
  224. old_release_date=$(date -d @${old_timestamp})
  225. new_version=$(cat "${TARGET_DIR}/NEWESTa7.${firmware_version}.new" | head -1 | awk '{ print $1 }')
  226. new_timestamp=$(cat "${TARGET_DIR}/NEWESTa7.${firmware_version}.new" | head -1 | awk '{ print $2 }')
  227. new_release_date=$(date -d @${new_timestamp})
  228. echo "${new_version}"
  229. version_changed=1
  230. if [ "x${new_version}" == "x${old_version}" -a "x${old_timestamp}" == "x${new_timestamp}" ]; then
  231. version_changed=
  232. fi
  233. if [ "x${force}" == "x" -a "x${version_changed}" == "x" ]; then
  234. echo "Current version ${old_version}. Don't changed. Next."
  235. [ -e "${TARGET_DIR}/NEWESTa7.${firmware_version}.new" ] && rm -f "${TARGET_DIR}/NEWESTa7.${firmware_version}.new"
  236. continue
  237. fi
  238. echo "Found version: ${new_version} from ${new_release_date}"
  239. echo "Old version: ${old_version} from ${old_release_date}"
  240. echo "Try download packages..."
  241. if [ ! -e "${TARGET_DIR}/${new_version}" ]; then
  242. mkdir -p "${TARGET_DIR}/${new_version}"
  243. fi
  244. cd "${TARGET_DIR}/${new_version}"
  245. ${WGET} ${wget_opts} -U "RouterOS 7.12.1" "http://upgrade.mikrotik.com/routeros/${new_version}/CHANGELOG"
  246. ret=$?
  247. if [ ${ret} -ne 0 ]; then
  248. echo "Error get changelog for ${new_version}. Skip release."
  249. continue
  250. fi
  251. download_error=
  252. for file_arch in "${firmware_arch[@]}"; do
  253. #packages
  254. ${WGET} ${wget_opts} -U "RouterOS 7.12.1" "http://upgrade.mikrotik.com/routeros/${new_version}/all_packages-${file_arch}-${new_version}.zip"
  255. ret=$?
  256. if [ ${ret} -ne 0 ]; then
  257. echo "Error get all_packages-${file_arch}-${new_version}.zip"
  258. download_err=1
  259. break
  260. fi
  261. #routeros
  262. if [ "${file_arch}" == "x86" ]; then
  263. ${WGET} ${wget_opts} -U "RouterOS 7.12.1" "http://upgrade.mikrotik.com/routeros/${new_version}/routeros-${new_version}.npk"
  264. if [ ${ret} -ne 0 ]; then
  265. echo "Error get routeros-${new_version}-${file_arch}.npk"
  266. download_err=1
  267. break
  268. fi
  269. else
  270. ${WGET} ${wget_opts} -U "RouterOS 7.12.1" "http://upgrade.mikrotik.com/routeros/${new_version}/routeros-${new_version}-${file_arch}.npk"
  271. ret=$?
  272. if [ ${ret} -ne 0 ]; then
  273. echo "Error get routeros-${new_version}-${file_arch}.npk"
  274. download_err=1
  275. break
  276. fi
  277. ${WGET} ${wget_opts} -U "RouterOS 7.12.1" "http://upgrade.mikrotik.com/routeros/${new_version}/routeros-${file_arch}-${new_version}.npk" 2>/dev/null
  278. #wireless
  279. ${WGET} ${wget_opts} -U "RouterOS 7.12.1" "http://upgrade.mikrotik.com/routeros/${new_version}/wireless-${new_version}-${file_arch}.npk"
  280. ret=$?
  281. if [ ${ret} -ne 0 ]; then
  282. echo "Error get wireless-${new_version}-${file_arch}.zip"
  283. download_err=1
  284. break
  285. fi
  286. fi
  287. done
  288. if [ -n "${download_err}" ]; then
  289. echo "Found errors by download packages for ${new_version} ${firmware_version}. Skip release"
  290. download_err=
  291. [ -e "${TARGET_DIR}/NEWESTa7.${firmware_version}.new" ] && rm -f "${TARGET_DIR}/NEWESTa7.${firmware_version}.new"
  292. continue
  293. fi
  294. #other files
  295. ${WGET} ${wget_opts} -U "RouterOS 7.12.1" "http://upgrade.mikrotik.com/routeros/${new_version}/btest.exe"
  296. ${WGET} ${wget_opts} -U "RouterOS 7.12.1" "http://upgrade.mikrotik.com/routeros/${new_version}/dude-install-${new_version}.exe"
  297. ${WGET} ${wget_opts} -U "RouterOS 7.12.1" "http://upgrade.mikrotik.com/routeros/${new_version}/flashfig.exe"
  298. ${WGET} ${wget_opts} -U "RouterOS 7.12.1" "http://upgrade.mikrotik.com/routeros/${new_version}/install-image-${new_version}.zip"
  299. ${WGET} ${wget_opts} -U "RouterOS 7.12.1" "http://upgrade.mikrotik.com/routeros/${new_version}/mikrotik-${new_version}.iso"
  300. ${WGET} ${wget_opts} -U "RouterOS 7.12.1" "http://upgrade.mikrotik.com/routeros/${new_version}/mikrotik.mib"
  301. ${WGET} ${wget_opts} -U "RouterOS 7.12.1" "http://upgrade.mikrotik.com/routeros/${new_version}/netinstall64-${new_version}.zip"
  302. ${WGET} ${wget_opts} -U "RouterOS 7.12.1" "http://upgrade.mikrotik.com/routeros/${new_version}/netinstall-${new_version}.tar.gz"
  303. ${WGET} ${wget_opts} -U "RouterOS 7.12.1" "http://upgrade.mikrotik.com/routeros/${new_version}/netinstall-${new_version}.zip"
  304. #winbox
  305. ${WGET} ${wget_opts} -U "RouterOS 7.12.1" "https://mt.lv/winbox" -O "${TARGET_DIR}/${new_version}/winbox.exe"
  306. ${WGET} ${wget_opts} -U "RouterOS 7.12.1" "https://mt.lv/winbox64" -O "${TARGET_DIR}/${new_version}/winbox64.exe"
  307. [ -e "${TARGET_DIR}/NEWESTa7.${firmware_version}" ] && rm -f "${TARGET_DIR}/NEWESTa7.${firmware_version}"
  308. mv "${TARGET_DIR}/NEWESTa7.${firmware_version}.new" "${TARGET_DIR}/NEWESTa7.${firmware_version}"
  309. echo "ROS 7 version ${new_version} downloaded successfully."
  310. done
  311. exit