#!/bin/busybox ash
# (c) Robert Shingledecker 2012
# Contributions by Jason Williams
. /etc/init.d/tc-functions

#PATH="/bb:/bin:/sbin:/usr/bin:/usr/sbin"
export PATH
USER=`cat /etc/sysconfig/tcuser`
exit_tcnet() {
	echo "* Issue connecting to `cat /opt/tcemirror`, exiting.."
	exit 1
}

zsyncDebianIndex()
{
        echo "* Debian index sync: "$DEBINX""
	getMirror "$BUILD"
	MIRROR="${MIRROR%/tcz}"
	cd "$TCEDIR"/import/debinx
	if zsync -q -i "$TCEDIR"/import/debinx/"$DEBINX" "$MIRROR"/"$DEBINX".zsync 2>/dev/null
	then
		rm -f "$DEBINX".zs-old
	else
		echo "* Connecting to: "$MIRROR"/"
		echo "  "$DEBINX""
		wget -q -O "$TCEDIR"/import/debinx/"$DEBINX" "$MIRROR"/"$DEBINX" #|| exit_tcnet
	fi
	cd - > /dev/null
}

zsyncDebianSecurityIndex()
{
        echo "* Debian security index sync: "$DEBINX_SECURITY""
	getMirror "$BUILD"
	MIRROR="${MIRROR%/tcz}"
	cd "$TCEDIR"/import/debinx
	if zsync -q -i "$TCEDIR"/import/debinx/"$DEBINX_SECURITY" "$MIRROR"/"$DEBINX_SECURITY".zsync 2>/dev/null
	then
		rm -f "$DEBINX_SECURITY".zs-old
	else
		echo "* Connecting to: "$MIRROR"/"
		echo "  "$DEBINX_SECURITY""
		wget -q -O "$TCEDIR"/import/debinx/"$DEBINX_SECURITY" "$MIRROR"/"$DEBINX_SECURITY" #|| exit_tcnet
	fi
	cd - > /dev/null
}

unset DEBINX MIRROR
TCEDIR=/etc/sysconfig/tcedir


[ -d "$TCEDIR"/import/debinx ] || mkdir -p "$TCEDIR"/import/debinx
DEBINXDIR=""$TCEDIR"/import/debinx"

if [ -f /usr/share/doc/tc/distro.txt ]; then
	DISTRO=`cat /usr/share/doc/tc/distro.txt`
else
	DISTRO=debian
fi

if [ -f /usr/share/doc/tc/repo.txt ]; then
	REPO=`cat /usr/share/doc/tc/repo.txt | sed 's:64::'`
fi

echo "* DEBINX sync based on "$DISTRO" "$REPO"."

BUILD="$1"
[ -z "$BUILD" ] && BUILD=`getBuild`
case $BUILD in
armv6 )
	DEBINX=debian-jessie-all_jessie_main_armhf_Packages
	zsyncDebianIndex
	MIRROR1=http://archive.raspbian.org/raspbian
	;;
armv7 )
	BINARY=binary-armhf
	DEBINX=debian_"$REPO"_main_armhf_Packages
	zsyncDebianIndex
	MIRROR1=http://ftp.us.debian.org/debian
	;;
x86 )	
	BINARY=binary-i386
	if [ "$DISTRO" == "debian" ]; then
		DEBINX=debian_"$REPO"_main_i386_Packages
		DEBINX_SECURITY=debian_"$REPO"_security_i386_Packages
		zsyncDebianIndex
		zsyncDebianSecurityIndex
		MIRROR1="http://ftp.us.debian.org/debian"
		MIRROR_SECURITY1="http://security.debian.org"
	elif [ "$DISTRO" == "ubuntu" ]; then
		DEBINX=ubuntu_"$REPO"_main_i386_Packages
		DEBINX_SECURITY=ubuntu_"$REPO"_security_i386_Packages
		zsyncDebianIndex
		zsyncDebianSecurityIndex
		MIRROR1=http://us.archive.ubuntu.com/ubuntu
		MIRROR_SECURITY1="http://security.ubuntu.com/ubuntu"
	fi
	;;
x86_64 )	
	BINARY=binary-amd64
	if [ "$DISTRO" == "debian" ]; then
		DEBINX=debian_"$REPO"_main_amd64_Packages
		DEBINX_SECURITY=debian_"$REPO"_security_amd64_Packages
		zsyncDebianIndex
		zsyncDebianSecurityIndex
		MIRROR1="http://ftp.us.debian.org/debian"
		MIRROR_SECURITY1="http://security.debian.org"
	elif [ "$DISTRO" == "ubuntu" ]; then
		DEBINX=ubuntu_"$REPO"_main_amd64_Packages
		DEBINX_SECURITY=ubuntu_"$REPO"_security_amd64_Packages
		zsyncDebianIndex
		zsyncDebianSecurityIndex
		MIRROR1=http://us.archive.ubuntu.com/ubuntu
		MIRROR_SECURITY1="http://security.ubuntu.com/ubuntu"
	fi
	;;
esac

if [ -s /opt/debmirror ]; then
	MIRROR=`cat /opt/debmirror`
else
	MIRROR="$MIRROR1"
fi

#read MIRROR  < /opt/debmirror || MIRROR="$MIRROR1"

if [ -s /opt/securitymirror ]; then
	MIRROR_SECURITY=`cat /opt/securitymirror`
else
	MIRROR_SECURITY="$MIRROR_SECURITY1"
fi

#read MIRROR_SECURITY  < /opt/securitymirror || MIRROR_SECURITY="$MIRROR_SECURITY1"



if [ -z "$DEBINX" ]
then
	echo " "
	echo "${YELLOW}Warning:${NORMAL} No Package Index available, exiting.."
	exit 1
else
	echo "$DEBINX" > /etc/sysconfig/tcedir/import/debinx/debinx
fi

if [ -z "$DEBINX_SECURITY" ]
then
	echo "* No Security Package Index available."
else
	echo "$DEBINX_SECURITY" > /etc/sysconfig/tcedir/import/debinx/debinx_security
fi

if ls "$TCEDIR"/import/debinx/debinx.* > /dev/null 2>&1; then
	rm "$TCEDIR"/import/debinx/debinx.*
fi

if ls -A /opt/debextra > /dev/null 2>&1; then
	for I in `ls /opt/debextra/`; do
		if [ ! -z `cat /opt/debextra/"$I" | cut -f3 -d" "` ]; then
			MIR=`cat /opt/debextra/"$I" | awk '{print $1}'`
			DIST=`cat /opt/debextra/"$I" | awk '{print $2}'`
			POOL=`cat /opt/debextra/"$I" | awk '{print $3}'`
			F="/dists/"$DIST"/"$POOL"/"$BINARY""
			if cat /opt/debextra/"$I" | grep "#" > /dev/null 2>&1; then
				echo "* Not using repo: `cat /opt/debextra/"$I" | sed 's:#::'`"
			elif wget --spider "$MIR""$F"/Packages.xz > /dev/null 2>&1; then
				wget -q -O - "$MIR""$F"/Packages.xz | xz -d > "$TCEDIR"/import/debinx/debinx."$I"
				echo "* Using repo: "$MIR" "$DIST" "$POOL""
			elif wget --spider "$MIR"/"$DIST"/"$POOL"/Packages.xz > /dev/null 2>&1; then
				wget -q -O - "$MIR"/"$DIST"/"$POOL"/Packages.xz | xz -d > "$TCEDIR"/import/debinx/debinx."$I"
				echo "* Using repo: "$MIR" "$DIST" "$POOL""
			elif wget --spider "$MIR"/Packages.xz > /dev/null 2>&1; then
				wget -q -O - "$MIR"/Packages.xz | xz -d > "$TCEDIR"/import/debinx/debinx."$I"
				echo "* Using repo: "$MIR""
			elif wget --spider "$MIR""$F"/Packages.bz2 > /dev/null 2>&1; then
				wget -q -O - "$MIR""$F"/Packages.bz2 | bunzip2 > "$TCEDIR"/import/debinx/debinx."$I"
				echo "* Using repo: "$MIR" "$DIST" "$POOL""
			elif wget --spider "$MIR"/"$DIST"/"$POOL"/Packages.bz2 > /dev/null 2>&1; then
				wget -q -O - "$MIR"/"$DIST"/"$POOL"/Packages.bz2 | bunzip2 > "$TCEDIR"/import/debinx/debinx."$I"
				echo "* Using repo: "$MIR" "$DIST" "$POOL""
			elif wget --spider "$MIR"/Packages.bz2 > /dev/null 2>&1; then
				echo "* Using repo: "$MIR""
				wget -q -O - "$MIR"/Packages.bz2 | bunzip2 > "$TCEDIR"/import/debinx/debinx."$I"
			elif wget --spider "$MIR""$F"/Packages.gz > /dev/null 2>&1; then
				wget -q -O - "$MIR""$F"/Packages.gz | gunzip > "$TCEDIR"/import/debinx/debinx."$I"
				echo "* Using repo: "$MIR" "$DIST" "$POOL""
			elif wget --spider "$MIR"/"$DIST"/"$POOL"/Packages.gz > /dev/null 2>&1; then
				wget -q -O - "$MIR"/"$DIST"/"$POOL"/Packages.gz | gunzip > "$TCEDIR"/import/debinx/debinx."$I"
				echo "* Using repo: "$MIR" "$DIST" "$POOL""
			elif wget --spider "$MIR"/Packages.gz > /dev/null 2>&1; then
				wget -q -O - "$MIR"/Packages.gz | gunzip > "$TCEDIR"/import/debinx/debinx."$I"
				echo "* Using repo: "$MIR""
			elif wget --spider "$MIR""$F"/Packages.gen > /dev/null 2>&1; then
				[ -f "$TCEDIR"/import/debinx/debinx."$I" ] && rm "$TCEDIR"/import/debinx/debinx."$I"
				wget -O "$TCEDIR"/import/debinx/debinx."$I" -cq "$MIR""$F"/Packages.gen
				echo "* Using repo: "$MIR" "$DIST" "$POOL""
			elif wget --spider "$MIR"/"$DIST"/"$POOL"/Packages.gen > /dev/null 2>&1; then
				[ -f "$TCEDIR"/import/debinx/debinx."$I" ] && rm "$TCEDIR"/import/debinx/debinx."$I"
				wget -O "$TCEDIR"/import/debinx/debinx."$I" -cq "$MIR"/"$DIST"/"$POOL"/Packages.gen
				echo "* Using repo: "$MIR" "$DIST" "$POOL""
			elif wget --spider "$MIR"/Packages.gen > /dev/null 2>&1; then
				[ -f "$TCEDIR"/import/debinx/debinx."$I" ] && rm "$TCEDIR"/import/debinx/debinx."$I"
				wget -O "$TCEDIR"/import/debinx/debinx."$I" -cq "$MIR"/Packages.gen
				echo "* Using repo: "$MIR""

			else
				echo " "
				echo "${YELLOW}Warning:${NORMAL} The following repository is not available:"
				echo " "
				echo ""$MIR"  "$DIST"  "$POOL""
				exit 1
			fi
		else
			MIR=`cat /opt/debextra/"$I" | awk '{print $1}'`
			DIST="$REPO"
			POOL=`cat /opt/debextra/"$I" | awk '{print $2}'`
			F="/dists/"$DIST"/"$POOL"/"$BINARY""
			if cat /opt/debextra/"$I" | grep "#" > /dev/null 2>&1; then
				echo "* Not using repo: `cat /opt/debextra/"$I" | sed 's:#::'`"
			elif wget --spider "$MIR""$F"/Packages.xz > /dev/null 2>&1; then
				wget -q -O - "$MIR""$F"/Packages.xz | xz -d > "$TCEDIR"/import/debinx/debinx."$I"
				echo "* Using repo: "$MIR" "$DIST" "$POOL""
			elif wget --spider "$MIR"/"$POOL"/Packages.xz > /dev/null 2>&1; then
				wget -q -O - "$MIR"/"$POOL"/Packages.xz | xz -d > "$TCEDIR"/import/debinx/debinx."$I"
				echo "* Using repo: "$MIR" "$DIST" "$POOL""
			elif wget --spider "$MIR"/Packages.xz > /dev/null 2>&1; then
				wget -q -O - "$MIR"/Packages.xz | xz -d > "$TCEDIR"/import/debinx/debinx."$I"
				echo "* Using repo: "$MIR" "$DIST" "$POOL""
			elif wget --spider "$MIR""$F"/Packages.bz2 > /dev/null 2>&1; then
				wget -q -O - "$MIR""$F"/Packages.bz2 | bunzip2 > "$TCEDIR"/import/debinx/debinx."$I"
				echo "* Using repo: "$MIR" "$DIST" "$POOL""
			elif wget --spider "$MIR"/"$POOL"/Packages.bz2 > /dev/null 2>&1; then
				wget -q -O - "$MIR"/"$POOL"/Packages.bz2 | bunzip2 > "$TCEDIR"/import/debinx/debinx."$I"
				echo "* Using repo: "$MIR" "$DIST" "$POOL""
			elif wget --spider "$MIR"/Packages.bz2 > /dev/null 2>&1; then
				wget -q -O - "$MIR"/Packages.bz2 | bunzip2 > "$TCEDIR"/import/debinx/debinx."$I"
				echo "* Using repo: "$MIR""
			elif wget --spider "$MIR""$F"/Packages.gz > /dev/null 2>&1; then
				wget -q -O - "$MIR""$F"/Packages.gz | gunzip > "$TCEDIR"/import/debinx/debinx."$I"
				echo "* Using repo: "$MIR" "$DIST" "$POOL""
			elif wget --spider "$MIR"/"$POOL"/Packages.gz > /dev/null 2>&1; then
				wget -q -O - "$MIR"/"$POOL"/Packages.gz | gunzip > "$TCEDIR"/import/debinx/debinx."$I"
				echo "* Using repo: "$MIR" "$DIST" "$POOL""
			elif wget --spider "$MIR"/Packages.gz > /dev/null 2>&1; then
				wget -q -O - "$MIR"/Packages.gz | gunzip > "$TCEDIR"/import/debinx/debinx."$I"
				echo "* Using repo: "$MIR""
			elif wget --spider "$MIR""$F"/Packages.gen > /dev/null 2>&1; then
				[ -f "$TCEDIR"/import/debinx/debinx."$I" ] && rm "$TCEDIR"/import/debinx/debinx."$I"
				wget -O "$TCEDIR"/import/debinx/debinx."$I" -cq "$MIR""$F"/Packages.gen
				echo "* Using repo: "$MIR" "$DIST" "$POOL""
			elif wget --spider "$MIR"/"$POOL"/Packages.gen > /dev/null 2>&1; then
				[ -f "$TCEDIR"/import/debinx/debinx."$I" ] && rm "$TCEDIR"/import/debinx/debinx."$I"
				wget -O "$TCEDIR"/import/debinx/debinx."$I" "$MIR"/"$POOL"/Packages.gen
				echo "* Using repo: "$MIR" "$DIST" "$POOL""
			elif wget --spider "$MIR"/Packages.gen > /dev/null 2>&1; then
				[ -f "$TCEDIR"/import/debinx/debinx."$I" ] && rm "$TCEDIR"/import/debinx/debinx."$I"
				wget -O "$TCEDIR"/import/debinx/debinx."$I" -cq "$MIR"/Packages.gen
				echo "* Using repo: "$MIR""
			else
				echo " "
				echo "${YELLOW}Warning:${NORMAL} The following repository is not available:"
				echo " "
				echo ""$MIR"  "$POOL""
				exit 1
			fi
		fi
	done
fi
 
cd "$TCEDIR"/import/debinx/
if `ls debinx.* > /dev/null 2>&1`; then
  for I in `ls debinx.*`; do 
	cat "$I" | sed -e '/^Supported:/d' \
-e '/^Task:/d' -e '/^Recommends:/d' -e '/^Suggests:/d' -e '/^Built-Using:/d' -e 's/|/,/g' -e 's/:any//g' -e '/^Origin:/d' -e '/^Bugs:/d' -e '/^Original-Maintainer:/d' -e '/^Conflicts:/d' -e '/^Breaks:/d' \
-e '/^Source:/d' -e '/^Enhances:/d' -e '/^SHA1:/d' -e '/^Replaces:/d' -e '/^Provides:/d' -e '/^Version:/d' \
-e '/^Python-Version:/d' -e '/^Ghc-Package:/d' -e '/^SHA256:/d' -e '/^Priority:/d' -e '/^Section/d' -e '/^Tag:/d' \
-e '/^Description:/d' -e '/^Description-md5:/d' -e '/^Homepage:/d' -e '/^Pre-Depends:/d' \
-e '/^Maintainer:/d' -e '/^ interface:/d' -e '/^ suite:/d' -e '/^ uitoolkit:/d' -e '/^ security:/d' \
-e '/^ network:/d' -e '/^ made-of:/d' -e '/^ Modaliases:/d' -e '/^ Build-Ids:/d' -e '/^ science:/d' -e '/^ system:/d' -e '/^ hardware:/d' \
-e '/^ field:/d' -e '/^ use:/d' -e '/^ implemented-in:/d' -e '/^ protocol:/d' -e '/^ x11:/d' -e '/^ role:/d' \
-e '/^ works-with-format:/d' -e '/^ works-with:/d' -e '/^ scope:/d' -e '/^ culture:/d' -e '/^Multi-Arch:/d' -e '/^Gstreamer/d' > "$I".new
  mv "$I".new "$I"
  sed -i '/^ .*/d' "$I"
  done
fi

read IMPORTMIRROR < /opt/tcemirror
PREBUILTMIRROR="${IMPORTMIRROR%/}/dCore/"$BUILD"/import"

cd "$DEBINXDIR"
[ -f deb2sce.tar.gz ] && rm deb2sce.tar.gz
/bb/wget -O deb2sce.tar.gz -cq "$PREBUILTMIRROR"/deb2sce.tar.gz 2>/dev/null ||  exit_tcnet

tar xvf deb2sce.tar.gz PKGEXTRAREPODEP >/dev/null 2>&1
[ -f PKGEXCLUDELISTCUSTOM ] || tar xvf deb2sce.tar.gz PKGEXCLUDELIST >/dev/null 2>&1
tar xvf deb2sce.tar.gz PKGADDDEP >/dev/null 2>&1
tar xvf deb2sce.tar.gz PKGEXTRAFILES >/dev/null 2>&1
tar xvf deb2sce.tar.gz PKGPREBUILTDEP >/dev/null 2>&1
tar xvf deb2sce.tar.gz PREBUILTMD5SUMLIST >/dev/null 2>&1
tar xvf deb2sce.tar.gz PKGEXTRAFILEMD5SUMLIST >/dev/null 2>&1
tar xvf deb2sce.tar.gz PKGDATAFILEMD5SUMLIST >/dev/null 2>&1
tar xvf deb2sce.tar.gz PREBUILTMD5SUMLIST >/dev/null 2>&1
tar xvf deb2sce.tar.gz KEEPDOC >/dev/null 2>&1
tar xvf deb2sce.tar.gz KEEPDOCLIST >/dev/null 2>&1

if ls rcksum* > /dev/null 2>&1; then
	rm rcksum*
fi

if ls debinx.* > /dev/null 2>&1; then
	cat debinx.* *Packages "$DEBINXDIR"/PKGEXTRAREPODEP "$DEBINXDIR"/PKGPREBUILTDEP "$DEBINXDIR"/PKGADDDEP "$DEBINXDIR"/PREBUILTMD5SUMLIST "$DEBINXDIR"/PKGDATAFILEMD5SUMLIST "$DEBINXDIR"/PKGEXTRAFILEMD5SUMLIST > NEWDEBINX
else
	cat *Packages "$DEBINXDIR"/PKGEXTRAREPODEP "$DEBINXDIR"/PKGPREBUILTDEP "$DEBINXDIR"/PKGADDDEP "$DEBINXDIR"/PREBUILTMD5SUMLIST "$DEBINXDIR"/PKGDATAFILEMD5SUMLIST "$DEBINXDIR"/PKGEXTRAFILEMD5SUMLIST > NEWDEBINX
fi

chown "$USER":staff "$TCEDIR"/import/debinx/* > /dev/null 2>&1
chmod 664 "$TCEDIR"/import/debinx/* > /dev/null 2>&1

# Test mirror
if wget --spider "$MIRROR"/dists/"$REPO" > /dev/null 2>&1; then
	echo "* Using repo: "$MIRROR" "$REPO" main"
	echo "$MIRROR" > /opt/debmirror
	if wget --spider "$MIRROR_SECURITY"/dists/"$REPO" > /dev/null 2>&1; then
		echo "* Using repo: "$MIRROR_SECURITY" "$REPO" main"
		echo "$MIRROR_SECURITY" > /opt/securitymirror
	else
		echo "* "$MIRROR_SECURITY" does not have a "$REPO" repo.."
		sleep 5
	fi
else
	echo " "
	echo "${YELLOW}Warning:${NORMAL} The following repository is not available:"
	echo " "
	echo ""$DISTRO" "$REPO" "$MIRROR""
	exit 1
fi
