#!/bin/bash reposdir=/srv/ftp/ targetdir=$reposdir repos="core extra testing community" . "$(dirname $0)/../db-functions" . "$(dirname $0)/../config" if [ -f "/tmp/createFileList.lock" ]; then echo "Error: createFileList allready in progress." exit 1 fi touch "/tmp/createFileList.lock" || exit 1 TMPDIR=$(mktemp -d /tmp/createFileList.XXXXXX) || exit 1 CACHEDIR=$(mktemp -d /tmp/createFileList.XXXXXX) || exit 1 #adjust the nice level to run at a lower priority /usr/bin/renice +10 -p $$ > /dev/null case "${DBEXT}" in *.gz) TAR_OPT="z" ;; *.bz2) TAR_OPT="j" ;; *.xz) TAR_OPT="J" ;; *) echo "Unknown compression type for DBEXT=${DBEXT}" && exit 1 ;; esac FILESEXT="${DBEXT//db/files}" cd $reposdir for repo in $repos; do REPO_DB_FILE=${repo}$FILESEXT for arch in ${ARCHES[@]}; do repodir=${repo}/os/${arch}/ cached="no" # extract old file archive if [ -f ${targetdir}${repodir}${REPO_DB_FILE} ]; then mkdir -p ${CACHEDIR}/${repodir} bsdtar -xf ${targetdir}${repodir}${REPO_DB_FILE} -C ${CACHEDIR}/${repodir} cached="yes" fi # create file lists for pkg in $repodir*${PKGEXT}; do basename=$(basename $pkg) pkgname=$(getpkgname $basename) tmppkgdir=${TMPDIR}/${repodir}${pkgname}/ mkdir -p $tmppkgdir if [ -f "${CACHEDIR}/${repodir}${pkgname}/files" ]; then # echo "cache: $pkgname" mv ${CACHEDIR}/${repodir}${pkgname}/files ${tmppkgdir}files else # echo "$repo/$arch: $pkgname" echo '%FILES%' > ${tmppkgdir}files bsdtar --exclude=.* -tf $pkg >> ${tmppkgdir}files cached="no" fi done # create new file archive if [ "$cached" == "no" ]; then # at least one package has changed, so let's rebuild the archive # echo "creating ${REPO_DB_FILE}/${arch}" pkgdir=${targetdir}${repodir} mkdir -p $pkgdir cd ${TMPDIR}/${repodir} [ -f "${pkgdir}${REPO_DB_FILE}.old" ] && rm "${pkgdir}${REPO_DB_FILE}.old" [ -f "${pkgdir}${REPO_DB_FILE}" ] && mv "${pkgdir}${REPO_DB_FILE}" "${pkgdir}${REPO_DB_FILE}.old" bsdtar --exclude=*${DBEXT//\.db/} -c${TAR_OPT}f ${pkgdir}${REPO_DB_FILE} * fi cd $reposdir done done cd - >/dev/null rm -rf $TMPDIR || exit 1 rm -rf $CACHEDIR || exit 1 rm -f "/tmp/createFileList.lock" || exit 1 # echo 'done'