#!/bin/sh # $NetBSD: pre-build,v 1.35 2004/01/20 12:44:30 grant Exp $ # # Clean up system to be ready for bulk pkg build # # (c) 2000 Hubert Feyrer, All Rights Reserved. # #set -v # Debug # Pull in USR_PKGSRC, CVS_USER: if [ -f "$BULK_BUILD_CONF" ]; then . $BULK_BUILD_CONF else . `dirname $0`/build.conf fi PRUNEDISTFILES=${PRUNEDISTFILES:-"no"} PRUNEPACKAGES=${PRUNEPACKAGES:-"no"} PRUNELINKS=${PRUNEPACKAGES:-"no"} PKGLINT_PKG_DIR=${USR_PKGSRC}/pkgtools/pkglint # extract the name of the files used for the build log and broken build log. # these have defaults set by bsd.bulk-pkg.mk and may be overridden in /etc/mk.conf BROKENF=`( cd ${PKGLINT_PKG_DIR} ; ${BMAKE} show-var VARNAME=BROKENFILE )`; export BROKENF if [ "$BROKENF" = "" ]; then echo "Had problems determining the name of the .broken files" exit 1 fi BLDLOG=`( cd ${PKGLINT_PKG_DIR} ; ${BMAKE} show-var VARNAME=BUILDLOG )`; if [ "$BLDLOG" = "" ]; then echo "Had problems determining the name of the .make files" exit 1 fi STARTFILE=`( cd ${PKGLINT_PKG_DIR} ; ${BMAKE} show-var VARNAME=STARTFILE )`; if [ "$BLDLOG" = "" ]; then echo "Had problems determining the name of the .start file" exit 1 fi LOCALBASE=`( cd ${PKGLINT_PKG_DIR} ; ${BMAKE} show-var VARNAME=LOCALBASE )`; X11BASE=`( cd ${PKGLINT_PKG_DIR} ; ${BMAKE} show-var VARNAME=X11BASE )`; # On non-NetBSD platforms we need to keep the bootstrap-files! if [ x"$BMAKE" = x"bmake" ]; then ( cd $LOCALBASE && tar cf /tmp/$$.tar \ sbin/mtree sbin/pkg_add sbin/pkg_admin sbin/pkg_create \ sbin/pkg_delete sbin/pkg_info sbin/pkg_view sbin/linkfarm \ share/mk/sys.mk share/mk/bsd.dep.mk share/mk/bsd.depall.mk \ share/mk/bsd.files.mk share/mk/bsd.hostprog.mk \ share/mk/bsd.doc.mk share/mk/bsd.inc.mk share/mk/bsd.info.mk \ share/mk/bsd.kernobj.mk share/mk/bsd.kinc.mk \ share/mk/bsd.kmod.mk share/mk/bsd.lib.mk \ share/mk/bsd.links.mk share/mk/bsd.man.mk \ share/mk/bsd.nls.mk share/mk/bsd.obj.mk \ share/mk/bsd.prog.mk share/mk/bsd.subdir.mk \ share/mk/bsd.sys.mk share/mk/bsd.own.mk \ share/mk/zoularis.mk bin/bmake bin/ftp bin/digest bin/nbsed \ bin/pax bin/tar bin/cpio man/cat1/ftp.1 man/cat1/pax.0 \ man/cat1/tar.0 man/cat1/cpio.0 man/cat1/pkg_add.0 \ man/cat1/pkg_admin.0 man/cat1/pkg_create.0 \ man/cat1/pkg_delete.0 man/cat1/pkg_info.0 \ man/cat1/pkg_view.0 man/cat1/linkfarm.0 \ man/man1/digest.1 man/man1/pax.1 man/man1/cpio.1 \ man/man1/tar.1 man/man1/nbsed.1 man/man1/pkg_add.1 \ man/man1/pkg_admin.1 man/man1/pkg_create.1 \ man/man1/pkg_delete.1 man/man1/pkg_info.1 \ man/man1/pkg_view.1 man/man1/linkfarm.1 man/cat8/mtree.0 \ man/man8/mtree.8 man/cat7/packages.0 ) fi # # Clean out everything and its mother # PKG_DBDIR=`(cd ${PKGLINT_PKG_DIR}; ${BMAKE} show-var VARNAME=PKG_DBDIR)` DEPOTBASE=`(cd ${PKGLINT_PKG_DIR}; ${BMAKE} show-var VARNAME=DEPOTBASE)` for dbdir in ${PKG_DBDIR} ${DEPOTBASE}; do echo Removing all installed packages in $dbdir if [ -d $dbdir ]; then cd $dbdir for pkg in * do if `pkg_info -K $dbdir -qe $pkg`; then echo pkg_delete -r $pkg pkg_delete -K $dbdir -r $pkg fi done # # this should have removed everything. # Now force any broken pkgs to deinstall. # for pkg in * do if `pkg_info -K $dbdir -qe $pkg`; then echo pkg_delete -f $pkg pkg_delete -K $dbdir -f $pkg fi done # We've tried our best to get rid of the pkgs, now do it # the hard way. If it wasn't for stuff in $X11BASE, I # wouldn't have hard feelings about this! rm -fr * fi done cd $LOCALBASE && rm -fr * && rm -fr .??*; if [ x"$BMAKE" = x"bmake" ]; then ( cd $LOCALBASE && tar xf /tmp/$$.tar ) fi # Stuff known to be broken rm -fr $X11BASE/share/gimp rm -fr $X11BASE/share/gnome rm -fr $X11BASE/share/kde rm -fr $X11BASE/share/netscape rm -fr /var/tmp/inst* rm -fr $X11BASE/lib/libgimp* # gimp doesn't build with old libs around rm -fr /nonexistent # broken useradd on pop3d rm -fr /home/majordom # mail/majordomo pkg rm -fr /home/nut # sysutils/ups-net rm -fr /var/wwwoffle # www/wwwoffle rm -fr /tmp/config-guess-* rm -fr /tmp/mod* # Clean up state files cd ${USR_PKGSRC} rm -f $BROKENF */*/$BROKENF rm -f $BLDLOG */*/$BLDLOG rm -f $STARTFILE # # Install cvs package and do a cvs update here # if [ "$CVS_USER" != "" ]; then if [ ! -f /usr/bin/cvs ]; then echo Installing required cvs pkgs for CVS update ( cd ${USR_PKGSRC}/devel/cvs ; ${BMAKE} bulk-install ) fi if [ ! -f /usr/bin/ssh ]; then echo Installing required ssh pkgs for CVS update ( cd ${USR_PKGSRC}/security/ssh ; ${BMAKE} bulk-install ) fi echo Performing CVS update - this will take some time su - ${CVS_USER} -c "stty sane ; cd ${USR_PKGSRC} ; env CVS_RSH=ssh cvs -q update -Pd ${CVS_FLAGS} || exit 0" if [ $? != 0 ] then echo CVS update not successful, aborting. exit 1 fi echo CVS update done. fi # # Remove old/broken distfiles and binary packages # DISTDIR=`( cd ${PKGLINT_PKG_DIR} ; ${BMAKE} show-var VARNAME=DISTDIR )`; PACKAGES=`( cd ${PKGLINT_PKG_DIR} ; ${BMAKE} show-var VARNAME=PACKAGES )`; case "$PRUNEDISTFILES" in yes|YES) echo "Removing old/broken distfiles" ( cd ${PKGLINT_PKG_DIR} ; ${BMAKE} PRECLEAN=yes bulk-install ) lintpkgsrc -K $PACKAGES -P $USR_PKGSRC -M $DISTDIR -o -m -r echo done. ;; *) echo "Skipping distfile pruning." ;; esac case "$PRUNEPACKAGES" in yes|YES) echo "Removing old (out of date) binary packages" ( cd ${PKGLINT_PKG_DIR} ; ${BMAKE} PRECLEAN=yes bulk-install ) lintpkgsrc -K $PACKAGES -P $USR_PKGSRC -M $DISTDIR -p -r echo done. ;; *) echo "Skipping packages pruning." ;; esac case "$PRUNELINKS" in yes|YES) echo "Checking for and removing orphaned packages links" find $PACKAGES -type l -print | \ while read f do if [ ! -d $f -a ! -f $f ]; then echo "Removing orphaned link: \"$f\"" rm $f fi done echo done. ;; *) echo "Skipping pruning of packages links." ;; esac # on non-NetBSD, we don't want these to build as they overwrite # bootstrap-pkgsrc generated files and thus would break the following builds. if [ x"$BMAKE" = x"bmake" ]; then for pkg in archivers/pax devel/bmake devel/mk-files net/tnftp \ security/kth-krb4 textproc/nbsed; do echo "Don't blow away bootstrap-pkgsrc stuff!" > \ ${pkg}/${BROKENF} done fi if [ -f mk/bulk/pre-build.local ]; then . mk/bulk/pre-build.local fi if [ ! -d ${PKG_DBDIR} ]; then mkdir ${PKG_DBDIR} fi touch $STARTFILE