diff --git a/update.sh b/update.sh index 68b04b7..ab3e57b 100755 --- a/update.sh +++ b/update.sh @@ -16,109 +16,114 @@ function getDSM() { echo "${PVS}" >"${TMP_PATH}/versions" while IFS= read -r line; do VERSION="${line}" - PAT_URL=$(echo "${PJ}" | jq -r ".\"${VERSION}\".url") - PAT_HASH=$(echo "${PJ}" | jq -r ".\"${VERSION}\".sum") - URLVER="$(echo "${PV}" | cut -d'.' -f1,2)" - PAT_FILE="${MODEL}_${VERSION}.pat" - PAT_PATH="${CACHE_PATH}/dl/${PAT_FILE}" - UNTAR_PAT_PATH="${CACHE_PATH}/${MODEL}/${VERSION}" - DESTINATION="${DSMPATH}/${MODEL}/${VERSION}" - DESTINATIONFILES="${FILESPATH}/${MODEL}/${URLVER}" - # Make Destinations - mkdir -p "${DESTINATION}" - mkdir -p "${DESTINATIONFILES}" - echo "${MODEL} ${URLVER} (${VERSION})" - echo "" >>"${TMP_PATH}/dsmdata.yml" - echo "${MODEL} ${URLVER} (${VERSION})" >>"${TMP_PATH}/dsmdata.yml" - echo "${PAT_URL}" - echo "Url: ${PAT_URL}" >>"${TMP_PATH}/dsmdata.yml" - echo "${PAT_HASH}" - echo "Hash: ${PAT_HASH}" >>"${TMP_PATH}/dsmdata.yml" - if [ -f "${DESTINATION}/pat_url" ] && [ -f "${DESTINATION}/pat_hash" ]; then - OLDURL="$(cat "${DESTINATION}/pat_url")" - OLDHASH="$(cat "${DESTINATION}/pat_hash")" + CHECK_URL=$(echo "${PJ}" | jq -r ".\"${VERSION}\".url") + if curl --head -skL -m 5 "${CHECK_URL}" | head -n 1 | grep -q "404\|403"; then + continue else - OLDURL="0" - OLDHASH="0" - fi - # Check for Update - if [ "${PAT_HASH}" != "${OLDHASH}" ] || [ "${PAT_URL}" != "${OLDURL}" ]; then - mkdir -p "${CACHE_PATH}/dl" - echo "Downloading ${PAT_FILE}" - # Discover remote file size - STATUS=$(curl -k -w "%{http_code}" -L "${PAT_URL}" -o "${PAT_PATH}" --progress-bar) - if [ $? -ne 0 -o ${STATUS} -ne 200 ]; then - rm "${PAT_PATH}" - echo "Error downloading" + PAT_URL=$(echo "${PJ}" | jq -r ".\"${VERSION}\".url") + PAT_HASH=$(echo "${PJ}" | jq -r ".\"${VERSION}\".sum") + URLVER="$(echo "${PV}" | cut -d'.' -f1,2)" + PAT_FILE="${MODEL}_${VERSION}.pat" + PAT_PATH="${CACHE_PATH}/dl/${PAT_FILE}" + UNTAR_PAT_PATH="${CACHE_PATH}/${MODEL}/${VERSION}" + DESTINATION="${DSMPATH}/${MODEL}/${VERSION}" + DESTINATIONFILES="${FILESPATH}/${MODEL}/${URLVER}" + # Make Destinations + mkdir -p "${DESTINATION}" + mkdir -p "${DESTINATIONFILES}" + echo "${MODEL} ${URLVER} (${VERSION})" + echo "" >>"${TMP_PATH}/dsmdata.yml" + echo "${MODEL} ${URLVER} (${VERSION})" >>"${TMP_PATH}/dsmdata.yml" + echo "${PAT_URL}" + echo "Url: ${PAT_URL}" >>"${TMP_PATH}/dsmdata.yml" + echo "${PAT_HASH}" + echo "Hash: ${PAT_HASH}" >>"${TMP_PATH}/dsmdata.yml" + if [ -f "${DESTINATION}/pat_url" ] && [ -f "${DESTINATION}/pat_hash" ]; then + OLDURL="$(cat "${DESTINATION}/pat_url")" + OLDHASH="$(cat "${DESTINATION}/pat_hash")" + else + OLDURL="0" + OLDHASH="0" fi - if [ -f "${PAT_PATH}" ]; then - # Export Values - echo "${PAT_HASH}" >"${DESTINATION}/pat_hash" - echo "${PAT_URL}" >"${DESTINATION}/pat_url" - # Extract Files - rm -rf "${UNTAR_PAT_PATH}" - mkdir -p "${UNTAR_PAT_PATH}" - echo -n "Disassembling ${PAT_FILE}: " - header=$(od -bcN2 ${PAT_PATH} | head -1 | awk '{print $3}') - case ${header} in - 105) - echo "Uncompressed tar" - isencrypted="no" - ;; - 213) - echo "Compressed tar" - isencrypted="no" - ;; - 255) - echo "Encrypted" - isencrypted="yes" - ;; - *) - echo -e "Could not determine if pat file is encrypted or not, maybe corrupted, try again!" - ;; - esac - if [ "${isencrypted}" = "yes" ]; then - # Check existance of extractor - if [ -f "${EXTRACTOR_PATH}/${EXTRACTOR_BIN}" ]; then - echo "Extractor cached." - fi - # Uses the extractor to untar pat file - echo "Extracting..." - LD_LIBRARY_PATH="${EXTRACTOR_PATH}" "${EXTRACTOR_PATH}/${EXTRACTOR_BIN}" "${PAT_PATH}" "${UNTAR_PAT_PATH}" - else - echo "Extracting..." - tar -xf "${PAT_PATH}" -C "${UNTAR_PAT_PATH}" - if [ $? -ne 0 ]; then - echo "Error extracting" - fi + # Check for Update + if [ "${PAT_HASH}" != "${OLDHASH}" ] || [ "${PAT_URL}" != "${OLDURL}" ]; then + mkdir -p "${CACHE_PATH}/dl" + echo "Downloading ${PAT_FILE}" + # Discover remote file size + STATUS=$(curl -k -w "%{http_code}" -L "${PAT_URL}" -o "${PAT_PATH}" --progress-bar) + if [ $? -ne 0 -o ${STATUS} -ne 200 ]; then + rm "${PAT_PATH}" + echo "Error downloading" fi - # Export Hash - echo -n "Checking hash of zImage: " - HASH=$(sha256sum ${UNTAR_PAT_PATH}/zImage | awk '{print$1}') - echo "OK" - echo "${HASH}" >"${DESTINATION}/zImage_hash" - echo -n "Checking hash of ramdisk: " - HASH=$(sha256sum ${UNTAR_PAT_PATH}/rd.gz | awk '{print$1}') - echo "OK" - echo "${HASH}" >"${DESTINATION}/ramdisk_hash" - # Copy Files to Destination - echo -n "Copying files: " - cp "${UNTAR_PAT_PATH}/grub_cksum.syno" "${DESTINATION}" - cp "${UNTAR_PAT_PATH}/GRUB_VER" "${DESTINATION}" - cp "${UNTAR_PAT_PATH}/grub_cksum.syno" "${DESTINATION}" - cp "${UNTAR_PAT_PATH}/GRUB_VER" "${DESTINATION}" - cp "${UNTAR_PAT_PATH}/zImage" "${DESTINATION}" - cp "${UNTAR_PAT_PATH}/rd.gz" "${DESTINATION}" - cd "${DESTINATION}" - tar -cf "${DESTINATIONFILES}/${PAT_HASH}.tar" . - rm -f "${PAT_PATH}" - rm -rf "${UNTAR_PAT_PATH}" + if [ -f "${PAT_PATH}" ]; then + # Export Values + echo "${PAT_HASH}" >"${DESTINATION}/pat_hash" + echo "${PAT_URL}" >"${DESTINATION}/pat_url" + # Extract Files + rm -rf "${UNTAR_PAT_PATH}" + mkdir -p "${UNTAR_PAT_PATH}" + echo -n "Disassembling ${PAT_FILE}: " + header=$(od -bcN2 ${PAT_PATH} | head -1 | awk '{print $3}') + case ${header} in + 105) + echo "Uncompressed tar" + isencrypted="no" + ;; + 213) + echo "Compressed tar" + isencrypted="no" + ;; + 255) + echo "Encrypted" + isencrypted="yes" + ;; + *) + echo -e "Could not determine if pat file is encrypted or not, maybe corrupted, try again!" + ;; + esac + if [ "${isencrypted}" = "yes" ]; then + # Check existance of extractor + if [ -f "${EXTRACTOR_PATH}/${EXTRACTOR_BIN}" ]; then + echo "Extractor cached." + fi + # Uses the extractor to untar pat file + echo "Extracting..." + LD_LIBRARY_PATH="${EXTRACTOR_PATH}" "${EXTRACTOR_PATH}/${EXTRACTOR_BIN}" "${PAT_PATH}" "${UNTAR_PAT_PATH}" + else + echo "Extracting..." + tar -xf "${PAT_PATH}" -C "${UNTAR_PAT_PATH}" + if [ $? -ne 0 ]; then + echo "Error extracting" + fi + fi + # Export Hash + echo -n "Checking hash of zImage: " + HASH=$(sha256sum ${UNTAR_PAT_PATH}/zImage | awk '{print$1}') + echo "OK" + echo "${HASH}" >"${DESTINATION}/zImage_hash" + echo -n "Checking hash of ramdisk: " + HASH=$(sha256sum ${UNTAR_PAT_PATH}/rd.gz | awk '{print$1}') + echo "OK" + echo "${HASH}" >"${DESTINATION}/ramdisk_hash" + # Copy Files to Destination + echo -n "Copying files: " + cp "${UNTAR_PAT_PATH}/grub_cksum.syno" "${DESTINATION}" + cp "${UNTAR_PAT_PATH}/GRUB_VER" "${DESTINATION}" + cp "${UNTAR_PAT_PATH}/grub_cksum.syno" "${DESTINATION}" + cp "${UNTAR_PAT_PATH}/GRUB_VER" "${DESTINATION}" + cp "${UNTAR_PAT_PATH}/zImage" "${DESTINATION}" + cp "${UNTAR_PAT_PATH}/rd.gz" "${DESTINATION}" + cd "${DESTINATION}" + tar -cf "${DESTINATIONFILES}/${PAT_HASH}.tar" . + rm -f "${PAT_PATH}" + rm -rf "${UNTAR_PAT_PATH}" + fi + echo "DSM Extraction complete: ${MODEL}_${VERSION}" + else + echo "No DSM Update found: ${MODEL}_${VERSION}" fi - echo "DSM Extraction complete: ${MODEL}_${VERSION}" - else - echo "No DSM Update found: ${MODEL}_${VERSION}" + cd ${HOME} fi - cd ${HOME} done < <(cat "${TMP_PATH}/versions") rm -f "${TMP_PATH}/versions" done < <(cat "${TMP_PATH}/productvers")