#!/bin/bash reposdir="/srv/ftp" targetdir="/srv/ftp" repos="core extra testing community community-testing" . "$(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}" for repo in $repos; do REPO_DB_FILE="${repo}$FILESEXT" for arch in ${ARCHES[@]}; do cd "$reposdir" 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 pkgname="$(getpkgname "$pkg")" pkgver="$(getpkgver "$pkg")" tmppkgdir="${TMPDIR}/${repodir}/${pkgname}-${pkgver}" mkdir -p "$tmppkgdir" if [ -f "${CACHEDIR}/${repodir}/${pkgname}-${pkgver}/files" ]; then # echo "cache: $pkgname" mv "${CACHEDIR}/${repodir}/${pkgname}-${pkgver}/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 done done cd - >/dev/null rm -rf "$TMPDIR" || exit 1 rm -rf "$CACHEDIR" || exit 1 rm -f "/tmp/createFileList.lock" || exit 1 # echo 'done'