pkgsrc/mk/bulk/upload
2005-04-30 21:35:06 +00:00

210 lines
4.9 KiB
Bash

#!/bin/sh
# $NetBSD: upload,v 1.25 2005/04/30 21:35:06 jschauma Exp $
#
# Upload non-restricted binary pkgs to ftp server
#
MD5="digest md5";
SHA1="digest sha1";
opsys=`uname -s`
case "$opsys" in
NetBSD) BMAKE=make;
BSDSUM="sum -o 1";
CKSUM="cksum";
SYSVSUM="sum -o 2";
;;
IRIX*) BMAKE=bmake;
BSDSUM="sum -r";
CKSUM="cksum";
SYSVSUM="sum";
;;
*) BMAKE=bmake ;;
esac
export BMAKE
# Bring in variables for bulk-install
BATCH=1
DEPENDS_TARGET=bulk-install
export BATCH DEPENDS_TARGET
# Pull in RSYNC_DST, RSYNC_OPTS:
if [ -f "$BULK_BUILD_CONF" ]; then
. $BULK_BUILD_CONF
else
. `dirname $0`/build.conf
fi
cd $USR_PKGSRC
if [ "$RSYNC_DST_SPECIFIC" != "" -o "$RSYNC_DST_OTHER" != "" ]; then
echo Use of RSYNC_DST_SPECIFIC and RSYNC_DST_OTHER is deprecated.
echo Please just set RSYNC_DST in build.conf.
exit 1
fi
if [ -z "$RSYNC_DST" ]; then
echo "You must set the variable RSYNC_DST, see build.conf-example."
exit 1
fi
# Paths for both OS-version-specific and general pkgs:
RSYNC_DST_SPECIFIC=${RSYNC_DST}
RSYNC_DST_OTHER=${RSYNC_DST}
#
# Some temp files
#
umask 22
TMPDIR=${TMPDIR:-/tmp}
TMP=${TMPDIR}/pkg_upload.$$
mkdir $TMP
exf=$TMP/exclude
osf=$TMP/osversion_specific
upload=$TMP/upload
upload_specific=$TMP/upload_specific
upload_others=$TMP/upload_others
# May be different than $USR_PKGSRC:
pkgsrcdir=`cd pkgtools/pkglint ; ${BMAKE} show-var VARNAME=_PKGSRCDIR`
packages=`cd pkgtools/pkglint ; ${BMAKE} show-var VARNAME=PACKAGES`
distdir=`cd pkgtools/pkglint ; ${BMAKE} show-var VARNAME=DISTDIR`
# Pull in some pkgs needed
( cd pkgtools/pkglint ; ${BMAKE} bulk-install )
( cd net/rsync ; ${BMAKE} bulk-install )
( cd security/audit-packages ; ${BMAKE} bulk-install )
echo "Making sure vulnerability-list is up-to-date:"
if [ -z "$UPDATE_VULNERABILITY_LIST" -o "$UPDATE_VULNERABILITY_LIST" = "yes" ]
then
env PKGVULNDIR=${distdir} download-vulnerability-list
else
echo '(skipped)'
fi
case $LINTPKGSRC_CACHE in
yes|YES)
lintpkgsrc_cache="-I `cd pkgtools/pkglint ; ${BMAKE} show-var VARNAME=LINTPKGSRC_DB`"
;;
*)
lintpkgsrc_cache=''
;;
esac
echo "Checking for restricted, out of date, and vulnerable packages:"
# -p = report old versions of packages
# -R = report restricted packages
# -V = report vulnerable packages
lintpkgsrc $lintpkgsrc_cache -K $packages -P $pkgsrcdir -pRV | sed 's@'$packages'/@@' > $exf
echo "Checking for OSVERSION_SPECIFIC pkgs:"
lintpkgsrc $lintpkgsrc_cache -K $packages -P $pkgsrcdir -O | sed 's@'$packages'/@@' > $osf
RSFLAGS="-vap --progress $RSYNC_OPTS"
failed=no
cd $packages
if [ "${MKSUMS}" = "yes" -o "${MKSUMS}" = "YES" ]; then
echo "Calculating checksum files..."
SUMFILES="BSDSUM CKSUM MD5 SHA1 SYSVSUM"
rm -f ${SUMFILES}
if [ x"${SIGN_AS}" != x"" ]; then
( cd ${pkgsrcdir}/security/gnupg; ${BMAKE} bulk-install )
for i in ${SUMFILES}; do
echo > $i
echo "This file is signed with ${SIGN_AS}'s PGP key." >> $i
echo >> $i
done
fi
( cd ${pkgsrcdir}/pkgtools/digest; ${BMAKE} bulk-install )
[ -z "${BSDSUM}" ] && BSDSUM="echo"
[ -z "${CKSUM}" ] && CKSUM="echo"
[ -z "${SYSVSUM}" ] && SYSVSUM="echo"
for i in All/*; do
if ! grep -q $i $exf; then
${BSDSUM} $i >> BSDSUM
${CKSUM} $i >> CKSUM
${MD5} $i >> MD5
${SHA1} $i >> SHA1
${SYSVSUM} $i >> SYSVSUM
fi
done
[ "${BSDSUM}" = "echo" ] && rm BSDSUM
[ "${CKSUM}" = "echo" ] && rm CKSUM
[ "${SYSVSUM}" = "echo" ] && rm SYSVSUM
if [ x"${SIGN_AS}" != x"" ]; then
for i in ${SUMFILES}; do
if [ -s $i ]; then
echo "Signing $i"
gpg --clearsign $i && rm $i
echo ${i}.asc >> $osf
fi
done
else
echo "Checksum files not PGP-signed. Please do so manually!"
echo "(Run 'gpg --clearsign' on all of them)"
fi
fi
echo "#!/bin/sh" > $upload
echo "packages=$packages" >> $upload
echo "if ! cd $packages ; then" >> $upload
echo " echo \"could not cd to $packages\"" >> $upload
echo " exit 1" >> $upload
echo "fi" >> $upload
echo "Uploading OSVERSION_SPECIFIC pkgs"
cmd="rsync $RSFLAGS --include '*/' --exclude-from=$exf --include-from=$osf \
--exclude '*' . $RSYNC_DST_SPECIFIC"
cp -f $upload $upload_specific
echo $cmd >> $upload_specific
chmod 755 $upload_specific
echo $cmd
. $upload_specific
if [ $? != 0 ]; then
echo "--------------------------------------------------"
echo " "
echo "WARNING rsync failed. To retry later, you can run"
echo " $upload_specific"
echo " "
echo "--------------------------------------------------"
failed=yes
fi
echo "Uploading non-OSVERSION_SPECIFIC pkgs"
cmd="rsync $RSFLAGS --exclude-from=$exf --exclude-from=$osf . $RSYNC_DST_OTHER"
cp -f $upload $upload_others
echo $cmd >> $upload_others
chmod 755 $upload_others
echo $cmd
. $upload_others
if [ $? != 0 ]; then
echo "--------------------------------------------------"
echo " "
echo "WARNING rsync failed. To retry later, you can run"
echo " $upload_others"
echo " "
echo "--------------------------------------------------"
failed=yes
fi
# clean up temp files
if [ "$failed" = "no" ]; then
rm -fr $TMP
fi