#!/bin/bash reposdir=/srv/ftp/ targetdir=$reposdir repos="core extra testing community" DB_COMPRESSION="gz" . $(dirname $0)/../config if [ -f /etc/makepkg.conf ]; then . /etc/makepkg.conf else echo "Error: /etc/makepkg.conf does not exist." exit 1 fi 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 getpkgname() { local tmp tmp=${1##*/} tmp=${tmp%$PKGEXT} tmp=${tmp%-i686} tmp=${tmp%-x86_64} tmp=${tmp%-any} echo $tmp } case "${DB_COMPRESSION}" in gz) TAR_OPT="z" ;; bz2) TAR_OPT="j" ;; xz) TAR_OPT="J" ;; *) echo "${DB_COMPRESSION} is not a valid archive compression" && exit 1 ;; esac cd $reposdir for repo in $repos; do REPO_DB_FILE=${repo}.files.tar.${DB_COMPRESSION} 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=*.tar.${DB_COMPRESSION} -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'