# # Download rules for the original/unmodified image file(s) # # Define DL_SOURCE/DL_SITE related variables # $(1) Suffix define DEFINE_DL_SOURCE_VARS ifneq ($(strip $(FREETZ_DL_SOURCE$(1))),) DL_SITE$(1):=$(call qstrip,$(FREETZ_DL_SITE$(1))) DL_SOURCE$(1):=$(call qstrip,$(FREETZ_DL_SOURCE$(1))) DL_SOURCE$(1)_LOCAL:=$(call GET_STRING_COMPONENT,$(call qstrip,$(FREETZ_DL_SOURCE$(1))),/,1) DL_SOURCE$(1)_REMOTE:=$(call GET_STRING_COMPONENT,$(call qstrip,$(FREETZ_DL_SOURCE$(1))),/,2) DL_SOURCE$(1)_MD5:=$(call qstrip,$(FREETZ_DL_SOURCE$(1)_MD5)) endif ifneq ($(strip $(FREETZ_DL_SOURCE$(1)_CONTAINER)),) DL_SOURCE$(1)_CONTAINER:=$(call qstrip,$(FREETZ_DL_SOURCE$(1)_CONTAINER)) DL_SOURCE$(1)_CONTAINER_MD5:=$(call qstrip,$(FREETZ_DL_SOURCE$(1)_CONTAINER_MD5)) endif endef $(eval $(call DEFINE_DL_SOURCE_VARS)) $(eval $(call DEFINE_DL_SOURCE_VARS,2)) $(eval $(call DEFINE_DL_SOURCE_VARS,3)) export DL_SOURCE_ID=$(shell echo $(DL_SOURCE_LOCAL) | tools/imagename2id) DL_IMAGE:= image: # Download Firmware Image # $(1) Suffix define DOWNLOAD_FIRMWARE ifneq ($(strip $(DL_SOURCE$(1))),) IMAGE$(1):=$(DL_FW_DIR)/$(DL_SOURCE$(1)_LOCAL) DL_IMAGE+=$$(IMAGE$(1)) image: $$(IMAGE$(1)) .PHONY: $$(IMAGE$(1)) $$(IMAGE$(1)): | $(DL_FW_DIR) ifeq ($$(strip $$(DL_SITE$(1))),) @if [ ! -e "$$(IMAGE$(1))" ]; then \ echo -e "\nPlease copy the following file into the './$$(DL_FW_DIR)/' sub-directory manually:\n$$(DL_SOURCE$(1)_LOCAL)\n$$(if $$(DL_SOURCE$(1)_REMOTE),(rename original AVM '$$(DL_SOURCE$(1)_REMOTE)' for that)\n)"; \ exit 3; \ fi else @ \ if [ "$$(call qstrip,$(FREETZ_TYPE_FIRMWARE_LABOR_LATEST))" == "y" ]; then \ if [ -n "$$(call qstrip,$(FREETZ_DL_URL_LATEST_USER))" ]; then \ DL_URL_LATEST="$$(call qstrip,$(FREETZ_DL_URL_LATEST_USER))"; \ else \ DL_URL_LATEST="$$(call qstrip,$(FREETZ_DL_URL_LATEST))"; \ fi; \ echo "Source to get latest firmware URLs: $$$$DL_URL_LATEST" >/dev/null; \ find $$(DL_FW_DIR) -maxdepth 1 -name $$(DL_SOURCE$(1)_LOCAL).url -mmin +60 -exec rm -f {} ';'; \ DL_URL_CONTAINER="$$$$(cat $$(IMAGE$(1)).url 2>/dev/null)"; \ if [ -z "$$$$DL_URL_CONTAINER" ]; then \ echo "No cache, refresh URL by web" >/dev/null; \ [ "$(FREETZ_TYPE_LANGUAGE)" != "xx" ] && LANG_COL="$(FREETZ_TYPE_LANGUAGE)\t"; \ DL_URL_CONTAINER="$$$$(wget --no-check-certificate -t1 --timeout=9 -q $$$$DL_URL_LATEST -O -| \ sed -r "s/\tint\t/\ten\t/g;s/\t\t/\tde\t/g;s/\t\t/\tde\t/g;s/(.*)(\t[^\t]*)/\1\tlabor\2/g;s/(.*\t)labor(\t.*[-0]7\.(03|11).*)/\1beta\2/g" | \ grep -vP "\t2018-[0-9 :-]*\t" | \ grep -P "^$$(call qstrip,$(FREETZ_TYPE_PREFIX))\t$$$$LANG_COL" | \ sed -rn "s/.*\t$$(call patsubst,_%,%,$$(call qstrip,$(FREETZ_TYPE_PREFIX_LABOR_FIRMWARE)))\t([^\t]*)$$$$/\1/p" | \ head -n1)"; \ echo "$$$$DL_URL_CONTAINER" > "$$(IMAGE$(1)).url"; \ [ -n "$$$$DL_URL_CONTAINER" ] && echo "Found URL: $$$$DL_URL_CONTAINER" >/dev/null; \ fi; \ if [ -z "$$$$DL_URL_CONTAINER" ]; then \ echo "No URL found, reading backup" >/dev/null; \ DL_URL_CONTAINER="$$$$(cat $$(IMAGE$(1)).url.bak 2>/dev/null)"; \ fi; \ if [ -z "$$$$DL_URL_CONTAINER" ]; then \ $$(call ERROR,3,Failed to detect the URL of the latest firmware version - check https://boxmatrix.info/wiki/Labor-Files) \ fi; \ echo "$$$$DL_URL_CONTAINER" > "$$(IMAGE$(1)).url.bak"; \ echo "Available download URL: $$$$DL_URL_CONTAINER" >/dev/null; \ DL_SITE0="$$$${DL_URL_CONTAINER%/*}"; \ DL_SOURCE0_CONTAINER="$$$${DL_URL_CONTAINER##*/}"; \ else \ DL_SITE0="$$(DL_SITE$(1))"; \ DL_SOURCE0_CONTAINER="$$(DL_SOURCE$(1)_CONTAINER)"; \ fi; \ if [ "$$(call qstrip,$(FREETZ_DL_DETECT_IMAGE_NAME))" == "y" ]; then \ rm -f "$$(IMAGE$(1))"; \ fi; \ if [ ! -e "$$(IMAGE$(1))" ]; then \ if [ -n "$$$$DL_SOURCE0_CONTAINER" ]; then \ if [ ! -r $$(DL_FW_DIR)/$$$$DL_SOURCE0_CONTAINER ]; then \ if ! $$(DL_TOOL) --delete-on-trap --no-append-servers --checksum-optional $$(DL_FW_DIR) "$$$$DL_SOURCE0_CONTAINER" "$$$$DL_SITE0" $$(DL_SOURCE$(1)_CONTAINER_MD5) $$(SILENT); then \ $$(call ERROR,3,Could not download firmware image. See https://freetz-ng.github.io/freetz-ng/wiki/FAQ#Couldnotdownloadfirmwareimage for details.) \ fi; \ fi; \ case "$$$${DL_SOURCE0_CONTAINER^^}" in \ *.ZIP) \ if [ "$$(FREETZ_DL_DETECT_IMAGE_NAME)" == "y" ]; then \ DL_SOURCE_DETECTED=$$$$(unzip -j $$(QUIETSHORT) -l $$(DL_FW_DIR)/$$$$DL_SOURCE0_CONTAINER *.image | sed -rn 's/.*( |\/)(.*\.image)/\2/p'); \ echo "Using detected .image name: $$$$DL_SOURCE_DETECTED" >/dev/null; \ else \ DL_SOURCE_DETECTED=$$(DL_SOURCE$(1)_LOCAL); \ echo "Using hardcoded .image name: $$$$DL_SOURCE_DETECTED" >/dev/null; \ fi; \ if [ ! -f $$(DL_FW_DIR)/$$$$DL_SOURCE_DETECTED ]; then \ echo "Unzipping archive file: $$$$DL_SOURCE0_CONTAINER" >/dev/null; \ if ! unzip -j $$(QUIETSHORT) $$(DL_FW_DIR)/$$$$DL_SOURCE0_CONTAINER *$$$$DL_SOURCE_DETECTED -d $$(DL_FW_DIR); then \ $$(call ERROR,3,Could not unzip firmware image.) \ fi; \ fi; \ if [ "$$(FREETZ_DL_DETECT_IMAGE_NAME)" == "y" ]; then \ [ -f $$(DL_FW_DIR)/$$$$DL_SOURCE_DETECTED ] && ln -s $$$$DL_SOURCE_DETECTED $$(IMAGE$(1)); \ echo "Created hardlink for .image file: $$(DL_SOURCE$(1)_LOCAL)" >/dev/null; \ fi; \ ;; \ *.RAR) \ if ! which unar &>/dev/null; then \ $$(call ERROR,3,Prerequisite unar is missing.) \ fi; \ if [ "$$(FREETZ_DL_DETECT_IMAGE_NAME)" == "y" ]; then \ DL_SOURCE_DETECTED=$$$$(unar -D -q $$(DL_FW_DIR)/$$$$DL_SOURCE0_CONTAINER *.image -o /dev/null 2>&1 | sed -rn 's/.*( |\/)(.*\.image).*/\2/p'); \ echo "Using detected .image name: $$$$DL_SOURCE_DETECTED" >/dev/null; \ else \ DL_SOURCE_DETECTED=$$(DL_SOURCE$(1)_LOCAL); \ echo "Using hardcoded .image name: $$$$DL_SOURCE_DETECTED" >/dev/null; \ fi; \ if [ ! -f $$(DL_FW_DIR)/$$$$DL_SOURCE_DETECTED ]; then \ echo "Unaring archive file: $$$$DL_SOURCE0_CONTAINER" >/dev/null; \ if ! unar -D -q $$(DL_FW_DIR)/$$$$DL_SOURCE0_CONTAINER *$$$$DL_SOURCE_DETECTED -o $$(DL_FW_DIR); then \ $$(call ERROR,3,Could not unar firmware image.) \ fi; \ fi; \ if [ "$$(FREETZ_DL_DETECT_IMAGE_NAME)" == "y" ]; then \ [ -f $$(DL_FW_DIR)/$$$$DL_SOURCE_DETECTED ] && ln -s $$$$DL_SOURCE_DETECTED $$(IMAGE$(1)); \ echo "Created hardlink for .image file: $$(DL_SOURCE$(1)_LOCAL)" >/dev/null; \ fi; \ ;; \ *) \ $$(call ERROR,3,Not able to extract '$$$$DL_SOURCE0_CONTAINER' archive at all.) \ ;; \ esac \ elif ! $$(DL_TOOL) $$(if $$(DL_SOURCE$(1)_REMOTE),--out-file $$(DL_SOURCE$(1)_LOCAL)) --delete-on-trap --no-append-servers --checksum-optional $$(DL_FW_DIR) \ "$$(if $$(DL_SOURCE$(1)_REMOTE),$$(DL_SOURCE$(1)_REMOTE),$$(DL_SOURCE$(1)_LOCAL))" "$$$$DL_SITE0" $$(DL_SOURCE$(1)_MD5) $$(SILENT); then \ $$(call ERROR,3,Could not download firmware image. See https://freetz-ng.github.io/freetz-ng/wiki/FAQ#Couldnotdownloadfirmwareimage for details.) \ fi; \ fi endif endif endef $(eval $(call DOWNLOAD_FIRMWARE)) $(eval $(call DOWNLOAD_FIRMWARE,2)) $(eval $(call DOWNLOAD_FIRMWARE,3))