tizen-fetch.sh 4.2 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170
#!/usr/bin/env bash
set -e

if [[ -z "${VERBOSE// }" ]] || [ "$VERBOSE" -ne "$VERBOSE" ] 2>/dev/null; then
	VERBOSE=0
fi

Log()
{
	if [ $VERBOSE -ge $1 ]; then
		echo ${@:2}
	fi
}

Inform()
{
	Log 1 -e "\x1B[0;34m$@\x1B[m"
}

Debug()
{
	Log 2 -e "\x1B[0;32m$@\x1B[m"
}

Error()
{
	>&2 Log 0 -e "\x1B[0;31m$@\x1B[m"
}

Fetch()
{
	URL=$1
	FILE=$2
	PROGRESS=$3
	if [ $VERBOSE -ge 1 ] && [ $PROGRESS ]; then
		CURL_OPT="--progress-bar"
	else
		CURL_OPT="--silent"
	fi
	curl $CURL_OPT $URL > $FILE
}

hash curl 2> /dev/null || { Error "Require 'curl' Aborting."; exit 1; }
hash xmllint 2> /dev/null || { Error "Require 'xmllint' Aborting."; exit 1; }
hash sha256sum 2> /dev/null || { Error "Require 'sha256sum' Aborting."; exit 1; }

TMPDIR=$1
if [ ! -d $TMPDIR ]; then
	TMPDIR=./tizen_tmp
	Debug "Create temporary directory : $TMPDIR"
	mkdir -p $TMPDIR
fi

TIZEN_URL=http://download.tizen.org/snapshots/tizen/
BUILD_XML=build.xml
REPOMD_XML=repomd.xml
PRIMARY_XML=primary.xml
TARGET_URL="http://__not_initialized"

Xpath_get()
{
	XPATH_RESULT=''
	XPATH=$1
	XML_FILE=$2
	RESULT=$(xmllint --xpath $XPATH $XML_FILE)
	if [[ -z ${RESULT// } ]]; then
		Error "Can not find target from $XML_FILE"
		Debug "Xpath = $XPATH"
		exit 1
	fi
	XPATH_RESULT=$RESULT
}

fetch_tizen_pkgs_init()
{
	TARGET=$1
	PROFILE=$2
	Debug "Initialize TARGET=$TARGET, PROFILE=$PROFILE"

	TMP_PKG_DIR=$TMPDIR/tizen_${PROFILE}_pkgs
	if [ -d $TMP_PKG_DIR ]; then rm -rf $TMP_PKG_DIR; fi
	mkdir -p $TMP_PKG_DIR

	PKG_URL=$TIZEN_URL/$PROFILE/latest

	BUILD_XML_URL=$PKG_URL/$BUILD_XML
	TMP_BUILD=$TMP_PKG_DIR/$BUILD_XML
	TMP_REPOMD=$TMP_PKG_DIR/$REPOMD_XML
	TMP_PRIMARY=$TMP_PKG_DIR/$PRIMARY_XML
	TMP_PRIMARYGZ=${TMP_PRIMARY}.gz

	Fetch $BUILD_XML_URL $TMP_BUILD

	Debug "fetch $BUILD_XML_URL to $TMP_BUILD"

	TARGET_XPATH="//build/buildtargets/buildtarget[@name=\"$TARGET\"]/repo[@type=\"binary\"]/text()"
	Xpath_get $TARGET_XPATH $TMP_BUILD
	TARGET_PATH=$XPATH_RESULT
	TARGET_URL=$PKG_URL/$TARGET_PATH

	REPOMD_URL=$TARGET_URL/repodata/repomd.xml
	PRIMARY_XPATH='string(//*[local-name()="data"][@type="primary"]/*[local-name()="location"]/@href)'

	Fetch $REPOMD_URL $TMP_REPOMD

	Debug "fetch $REPOMD_URL to $TMP_REPOMD"

	Xpath_get $PRIMARY_XPATH $TMP_REPOMD
	PRIMARY_XML_PATH=$XPATH_RESULT
	PRIMARY_URL=$TARGET_URL/$PRIMARY_XML_PATH

	Fetch $PRIMARY_URL $TMP_PRIMARYGZ

	Debug "fetch $PRIMARY_URL to $TMP_PRIMARYGZ"

	gunzip $TMP_PRIMARYGZ

	Debug "unzip $TMP_PRIMARYGZ to $TMP_PRIMARY"
}

fetch_tizen_pkgs()
{
	ARCH=$1
	PACKAGE_XPATH_TPL='string(//*[local-name()="metadata"]/*[local-name()="package"][*[local-name()="name"][text()="_PKG_"]][*[local-name()="arch"][text()="_ARCH_"]]/*[local-name()="location"]/@href)'

	PACKAGE_CHECKSUM_XPATH_TPL='string(//*[local-name()="metadata"]/*[local-name()="package"][*[local-name()="name"][text()="_PKG_"]][*[local-name()="arch"][text()="_ARCH_"]]/*[local-name()="checksum"]/text())'

	for pkg in ${@:2}
	do
		Inform "Fetching... $pkg"
		XPATH=${PACKAGE_XPATH_TPL/_PKG_/$pkg}
		XPATH=${XPATH/_ARCH_/$ARCH}
		Xpath_get $XPATH $TMP_PRIMARY
		PKG_PATH=$XPATH_RESULT

		XPATH=${PACKAGE_CHECKSUM_XPATH_TPL/_PKG_/$pkg}
		XPATH=${XPATH/_ARCH_/$ARCH}
		Xpath_get $XPATH $TMP_PRIMARY
		CHECKSUM=$XPATH_RESULT

		PKG_URL=$TARGET_URL/$PKG_PATH
		PKG_FILE=$(basename $PKG_PATH)
		PKG_PATH=$TMPDIR/$PKG_FILE

		Debug "Download $PKG_URL to $PKG_PATH"
		Fetch $PKG_URL $PKG_PATH true

		echo "$CHECKSUM $PKG_PATH" | sha256sum -c - > /dev/null
		if [ $? -ne 0 ]; then
			Error "Fail to fetch $PKG_URL to $PKG_PATH"
			Debug "Checksum = $CHECKSUM"
			exit 1
		fi
	done
}

Inform "Initialize arm base"
fetch_tizen_pkgs_init standard base
Inform "fetch common packages"
fetch_tizen_pkgs aarch64 gcc glibc glibc-devel libicu libicu-devel libatomic linux-glibc-devel
Inform "fetch coreclr packages"
fetch_tizen_pkgs aarch64 lldb lldb-devel libgcc libstdc++ libstdc++-devel libunwind libunwind-devel lttng-ust-devel lttng-ust userspace-rcu-devel userspace-rcu
Inform "fetch corefx packages"
fetch_tizen_pkgs aarch64 libcom_err libcom_err-devel zlib zlib-devel libopenssl libopenssl1.1-devel krb5 krb5-devel

Inform "Initialize standard unified"
fetch_tizen_pkgs_init standard unified
Inform "fetch corefx packages"
fetch_tizen_pkgs aarch64 gssdp gssdp-devel tizen-release