#!/bin/bash
# 
# Creation d'un repository local Ubuntu
#
# Necessite un acces Internet
#
# Par O. BEDOUET
# Date : 19/12/2012

# =============================== Variables
# Emplacement du repository
BASE_REPO=/projets/ubuntu
# URL Internet de la repository Ubuntu
WWW_REPO=http://archive.ubuntu.com/ubuntu
# Nom de la distrib Ubuntu
UBUNTU_DISTRIB=precise
# Type Ubuntu
UBUNTU_TYPE=main
# Type de binaire
UBUNTU_BINARY=binary-amd64
# Pour test
LINE="Filename: pool/main/f/firefox/abrowser_11.0+build1-0ubuntu4_amd64.deb"
# Liste des paquetages distants
PACKAGE_SRC=Packages.gz
# Liste des paquetages locale
PACKAGE_FILE=${BASE_REPO}/Packages.gz

# Check si distrib est en parametre
if [ -n "$1" ]
then
	UBUNTU_DISTRIB=$1
fi

# Check si type de distrib est en parametre
if [ -n "$2" ]
then
	UBUNTU_TYPE=$2
fi

# Check si type de binaire est en parametre
if [ -n "$3" ]
then
	UBUNTU_BINARY=$3
	# La liste des paquetages n'est pas la meme dans 'source'
	if [ "${UBUNTU_BINARY}" = "source" ]
	then
		PACKAGE_SRC=Sources.gz
	elif [ "${UBUNTU_BINARY}" = "dist-upgrader-all" ] 
	then
		PACKAGE_SRC=$4
	fi
fi

# =============================== Init
# Check le repertoire destination
if [ ! -d ${BASE_REPO} ]
then
	echo "ERREUR: repository ${BASE_REPO} inexistante"
	exit 1
fi

# Download de la liste des packages
wget ${WWW_REPO}/dists/${UBUNTU_DISTRIB}/${UBUNTU_TYPE}/${UBUNTU_BINARY}/${PACKAGE_SRC} -O ${PACKAGE_FILE} >/tmp/wget.log 2>/tmp/wget.log.err
if [ ! -f ${PACKAGE_FILE} -o `wc -l ${PACKAGE_FILE} | awk '{print $1}'` -eq 0 ]
then
	echo "ERREUR: impossible de charger liste des paquetages depuis"
	echo "${WWW_REPO}/dists/${UBUNTU_DISTRIB}/${UBUNTU_TYPE}/${UBUNTU_BINARY}/${PACKAGE_SRC}"
	echo "Voulez-vous voir les logs de wget ? (o/N) "
	read REP
	if [ -n "${REP}" -a "${REP}" = "o" ]
	then
		less /tmp/wget.log
		less /tmp/wget.log.err
	fi
	exit 1
else
	echo "Chargement liste des paquetages reussie !"
	echo "Calcul de la taille des paquetages a telecharger..."
	zcat ${PACKAGE_FILE} | sed 's/Installed-Size://' | grep Size | awk '/Size:/ {pkgsize+=$2} END {print "package size = "pkgsize" Bytes"}'
	echo "Voulez-vous continuer ? (o/N) "
	read REP
	if [ -z "${REP}" -o "${REP}" = "N" ]
	then
		echo "Abandon."
		exit
	fi
fi

# =============================== Download des paquetages
zcat ${PACKAGE_FILE} | grep Filename | while read LINE
do
	DEB_FILE=`echo $LINE | awk '{print $2}'`

	# Test presence fichier deb
	if [ ! -f ${BASE_REPO}/${DEB_FILE} ]
	then
		# Test et creation de l'arborescence
		ARBO=`echo $DEB_FILE | awk '{j=split($0,deb,"/");i=1;while (i < j){printf("/%s",deb[i]);i++}}' `
		[ ! -d ${BASE_REPO}${ARBO} ] && mkdir -p ${BASE_REPO}${ARBO}

		# Recupere le fichier deb
		wget ${WWW_REPO}/${DEB_FILE} -O ${BASE_REPO}/${DEB_FILE} >/tmp/wget.log 2>/tmp/wget.log.err
		#touch ${BASE_REPO}/${DEB_FILE}

		# Test
		if [ ! -f ${BASE_REPO}/${DEB_FILE} ]
		then
			echo "ERREUR: impossible de telecharger ${DEB_FILE}"
			echo "Voulez-vous voir les logs de wget ? (o/N) "
			read REP
			if [ -n "${REP}" -a "${REP}" = "o" ]
			then
				less /tmp/wget.log
				less /tmp/wget.log.err
			fi
			exit 1
		else
			echo "Paquetage ${DEB_FILE} ... OK"
		fi
	fi
done

# =============================== Download des listes
if [ ! -d ${BASE_REPO}/dists/${UBUNTU_DISTRIB} ]
then
	mkdir -p ${BASE_REPO}/dists/${UBUNTU_DISTRIB}
fi
wget ${WWW_REPO}/dists/${UBUNTU_DISTRIB}/Contents-amd64.gz -O ${BASE_REPO}/dists/${UBUNTU_DISTRIB}/Contents-amd64.gz >>/tmp/wget.log 2>>/tmp/wget.log.err
wget ${WWW_REPO}/dists/${UBUNTU_DISTRIB}/Contents-i386.gz -O ${BASE_REPO}/dists/${UBUNTU_DISTRIB}/Contents-i386.gz >>/tmp/wget.log 2>>/tmp/wget.log.err
wget ${WWW_REPO}/dists/${UBUNTU_DISTRIB}/Release -O ${BASE_REPO}/dists/${UBUNTU_DISTRIB}/Release >>/tmp/wget.log 2>>/tmp/wget.log.err
wget ${WWW_REPO}/dists/${UBUNTU_DISTRIB}/Release.gpg -O ${BASE_REPO}/dists/${UBUNTU_DISTRIB}/Release.gpg >>/tmp/wget.log 2>>/tmp/wget.log.err

# main
if [ ! -d ${BASE_REPO}/dists/${UBUNTU_DISTRIB}/${UBUNTU_TYPE}/${UBUNTU_BINARY} ]
then
	mkdir -p ${BASE_REPO}/dists/${UBUNTU_DISTRIB}/${UBUNTU_TYPE}/${UBUNTU_BINARY}
fi
wget ${WWW_REPO}/dists/${UBUNTU_DISTRIB}/${UBUNTU_TYPE}/${UBUNTU_BINARY}/Packages.bz2 -O ${BASE_REPO}/dists/${UBUNTU_DISTRIB}/${UBUNTU_TYPE}/${UBUNTU_BINARY}/Packages.bz2 >>/tmp/wget.log 2>>/tmp/wget.log.err
wget ${WWW_REPO}/dists/${UBUNTU_DISTRIB}/${UBUNTU_TYPE}/${UBUNTU_BINARY}/Packages.gz -O ${BASE_REPO}/dists/${UBUNTU_DISTRIB}/${UBUNTU_TYPE}/${UBUNTU_BINARY}/Packages.gz >>/tmp/wget.log 2>>/tmp/wget.log.err
wget ${WWW_REPO}/dists/${UBUNTU_DISTRIB}/${UBUNTU_TYPE}/${UBUNTU_BINARY}/Release -O ${BASE_REPO}/dists/${UBUNTU_DISTRIB}/${UBUNTU_TYPE}/${UBUNTU_BINARY}/Release >>/tmp/wget.log 2>>/tmp/wget.log.err

#rm -f /tmp/wget.log
#rm -f /tmp/wget.log.err

