mirror of
https://ghproxy.com/https://github.com/tossp/redpill-tool-chain.git
synced 2024-09-20 17:45:31 +00:00
138 lines
4.5 KiB
Bash
Executable File
138 lines
4.5 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
set -u
|
|
|
|
if [ ${TARGET_REVISION} -lt 42661 ];then
|
|
exit 0
|
|
fi
|
|
|
|
cat ./redpill-load/build-loader.sh | head -n `expr -1 + $(sed -n '/Printing config variables/=' ./redpill-load/build-loader.sh)` > ./redpill-load/_helper.sh
|
|
. ./redpill-load/_helper.sh "${TARGET_NAME}" "${TARGET_VERSION}-${TARGET_REVISION}"
|
|
rm ./_helper.sh
|
|
|
|
# Repacks tar-like file
|
|
#
|
|
# Args: $1 directory to unpack (must exist) | $2 file path | $3 should hard fail on error? [default=1]
|
|
brp_repack_tar()
|
|
{
|
|
pr_process "Repacking %s file form %s" "${2}" "${1}"
|
|
|
|
local output;
|
|
output=$("${TAR_PATH}" -czf "${2}" -C "${1}" . 2>&1)
|
|
if [ $? -ne 0 ]; then
|
|
pr_process_err
|
|
|
|
if [[ "${3:-1}" -ne 1 ]]; then
|
|
pr_err "Failed to unpack tar\n\n%s" "${output}"
|
|
return 1
|
|
else
|
|
pr_crit "Failed to unpack tar\n\n%s" "${output}"
|
|
fi
|
|
fi
|
|
|
|
pr_process_ok
|
|
}
|
|
|
|
readonly extract_bin='/usr/local/bin/syno_extract_system_patch'
|
|
make_extract(){
|
|
archive="$1"
|
|
if [ ! -f "${extract_bin}" ]; then
|
|
pr_dbg "%s not found - preparing" "${extract_bin}"
|
|
if [ ! -f "${EXTRACT_PAT_FILE}" ]; then
|
|
rpt_download_remote "${EXTRACT_PAT_URL}" "${EXTRACT_PAT_FILE}"
|
|
else
|
|
pr_dbg "Found existing PAT at %s - skipping download" "${EXTRACT_PAT_FILE}"
|
|
fi
|
|
pr_dbg "Found syno_extract_system_patch File not found - preparing" "${extract_bin}"
|
|
brp_mkdir /tmp/synoesp && brp_unpack_tar "${EXTRACT_PAT_FILE}" "/tmp/synoesp"
|
|
brp_mkdir /tmp/extract && brp_unpack_zrd "/tmp/synoesp/rd.gz" "/tmp/extract"
|
|
cp /tmp/extract/usr/lib/{libcurl.so.4,libmbedcrypto.so.5,libmbedtls.so.13,libmbedx509.so.1,libmsgpackc.so.2,libsodium.so,libsynocodesign-ng-virtual-junior-wins.so.7} /usr/local/lib
|
|
cp /tmp/extract/usr/syno/bin/scemd ${extract_bin}
|
|
rm -rf /tmp/synoesp /tmp/extract
|
|
else
|
|
pr_dbg "Found syno_extract_system_patch File at %s - skipping nake" "${extract_bin}"
|
|
fi
|
|
|
|
pr_process "Use syno_extract_system_patch extract PAT"
|
|
LD_LIBRARY_PATH=/usr/local/lib ${extract_bin} "${BRP_PAT_FILE}" /tmp/pat && pr_process_ok || pr_process_err
|
|
|
|
brp_repack_tar "/tmp/pat/" /tmp/repack.tar.gz
|
|
|
|
pr_process "New checksum of PAT %s - Patch the PAT checksum" ${BRP_PAT_FILE}
|
|
mv ${BRP_PAT_FILE} ${BRP_PAT_FILE}.org && mv /tmp/repack.tar.gz ${BRP_PAT_FILE} && rm -rf "/tmp/pat"
|
|
sum=`sha256sum ${BRP_PAT_FILE} | awk '{print $1}'`
|
|
old_sum="$(brp_json_get_field "${BRP_REL_CONFIG_JSON}" "os.sha256")"
|
|
sed -i "s/${old_sum}/${sum}/" "${BRP_REL_CONFIG_JSON}"
|
|
rm -rf /tmp/pat
|
|
pr_process_ok
|
|
}
|
|
|
|
check_pat() {
|
|
archive="$1"
|
|
archiveheader="$(od -bc ${archive} | head -1 | awk '{print $3}')"
|
|
return_value=0
|
|
case ${archiveheader} in
|
|
105)
|
|
pr_dbg "${archive}, is a Tar file"
|
|
;;
|
|
255)
|
|
pr_info "File ${archive}, Decryption required"
|
|
return_value=1
|
|
;;
|
|
213)
|
|
pr_dbg "File ${archive}, is a compressed tar"
|
|
;;
|
|
*)
|
|
pr_process_err
|
|
|
|
pr_err "Could not determine if file ${archive} is encrypted or not, maybe corrupted"
|
|
ls -ltr ${archive}
|
|
pr_crit "${archiveheader}"
|
|
return_value=99
|
|
;;
|
|
esac
|
|
return $return_value
|
|
}
|
|
|
|
##########################################################
|
|
# fix redo
|
|
readonly BRP_PAT_FILE="${BRP_CACHE_DIR}/${BRP_REL_OS_ID}.pat"
|
|
readonly EXTRACT_PAT_FILE="${BRP_CACHE_DIR}/extract.tar.gz"
|
|
readonly EXTRACT_PAT_URL='https://global.download.synology.com/download/DSM/release/7.0.1/42218/DSM_DS3615xs_42218.pat'
|
|
|
|
if [ -f "${BRP_PAT_FILE}.org" ] && [ -f "${BRP_PAT_FILE}" ]; then
|
|
pr_info "Found patched PAT file - Patch the PAT checksum"
|
|
file_sum="$(brp_json_get_field "${BRP_REL_CONFIG_JSON}" "os.sha256")"
|
|
new_sum=`sha256sum "${BRP_PAT_FILE}" | awk '{print $1}'`
|
|
org_sum=`sha256sum "${BRP_PAT_FILE}.org" | awk '{print $1}'`
|
|
if [ "$new_sum" != "$file_sum" ] && [ "$org_sum" == "$file_sum" ]; then
|
|
sed -i "s/${org_sum}/${new_sum}/" "${BRP_REL_CONFIG_JSON}"
|
|
fi
|
|
fi
|
|
|
|
|
|
if [ ! -d "${BRP_UPAT_DIR}" ]; then
|
|
pr_dbg "Unpacked PAT %s not found - preparing" "${BRP_UPAT_DIR}"
|
|
|
|
brp_mkdir "${BRP_UPAT_DIR}"
|
|
|
|
if [ ! -f "${BRP_PAT_FILE}" ]; then
|
|
rpt_download_remote "$(brp_json_get_field "${BRP_REL_CONFIG_JSON}" "os.pat_url")" "${BRP_PAT_FILE}"
|
|
else
|
|
pr_dbg "Found existing PAT at %s - skipping download" "${BRP_PAT_FILE}"
|
|
fi
|
|
|
|
brp_verify_file_sha256 "${BRP_PAT_FILE}" "$(brp_json_get_field "${BRP_REL_CONFIG_JSON}" "os.sha256")"
|
|
|
|
check_pat "${BRP_PAT_FILE}"
|
|
exec_status=$?
|
|
pr_info "Test encryption pat results %s" "${exec_status}"
|
|
if [ "$exec_status" -eq 1 ]; then
|
|
pr_empty_nl
|
|
make_extract "${BRP_PAT_FILE}"
|
|
fi
|
|
else
|
|
pr_info "Found unpacked PAT at \"%s\" - skipping unpacking" "${BRP_UPAT_DIR}"
|
|
fi
|
|
|