I've just rebuilt a whole bunch of packages from source, and now that
I've installed them on my build machine, I'd like to run 'make
package' so I can install the binaries on my other machines without
having to build them all over again from source.
Reading the documentation on http://www.netbsd.org/docs/pkgsrc
(section 6.1), it seems to say that all I have to do is run 'make
package' which will "...build and install your package (if not already
done), ..."
this implies that it won't bother to reinstall if the package is
already installed. However, reality is that 'make package' complains
that the package is "already installed, perhaps an older version".
So, what's the magic incantation to build the binary package from the
existing work.$MACHINE_ARCH directory?
Did you clean before doing 'make pakage'? If so, then the install will
fail, and package depends on install.
pkg_tarup is useful as obache@ pointed out.
Two other bits of advice:
run 'make package' instead of make install in the first place.
set in mk.conf:
DEPENDS_TARGET= package
UPDATE_TARGET= package
so that you get packages for dependencies.
I use the following script prior to pkg_rolling-replace and it has a
loop to ensure there are binary packages for all installed packages:
#!/bin/sh
# $Id: _update-pkgsrc,v 1.14 2008/05/20 17:45:54 gdt Exp $
# Do automatic periodic maintenance in pkgsrc. Typically followed
# by pkg_rolling-replace.
# Copyright 2007 Gregory D. Troxel
# Permission to copy granted under 3-clause BSD license.
# This script expects to be invoked as a user, and uses sudo.
# Consider invoking as root and a reverse su for cvs. For now, do the
# sudo tasks early if possible.
# XXX This script assumes that it is operating in /usr/pkgsrc. It
# should be extended to work with the current directory, checking that
# it is a pkgsrc directory.
if [ "$1" = "noupdate" ]; then
noupdate=t
fi
# XXX Substitute this at build time.
MAKE=make
if [ `uname` = "Darwin" ]; then
MAKE=bmake
fi
# Get new vulnerability data.
sudo download-vulnerability-list
# Ensure that we have binary packages for all installed packages.
mkdir -p /usr/pkgsrc/packages/All
rm -f PKG.missing
(cd /var/db/pkg && ls) \
| while read d; do
if [ -d /var/db/pkg/"$d" ]; then
if [ ! -f /usr/pkgsrc/packages/All/"$d".tgz ]; then
echo $d >> PKG.missing
sudo pkg_tarup -d /usr/pkgsrc/packages/All $d
fi
fi
done
# List working directories (for manual cleanup).
rm -f PKG.WORK
ls -d */*/work > PKG.WORK
if [ ! -s PKG.WORK ]; then
rm PKG.WORK
fi
# Update sources
rm -f PKG.UPDATE
if [ "$noupdate" = "" ]; then
cvs -q up -d -P > PKG.UPDATE 2>&1
else
echo "NOUPDATE" > PKG.UPDATE
fi
# Check for vulnerable packages.
rm -f PKG.AUDIT; audit-packages | sort > PKG.AUDIT
# Check for mismatched packages
rm -f PKG.MISMATCH; pkg_chk -uq | sort > PKG.MISMATCH
# Make a list of packages not required by anything else.
rm -f PKG.automatic-required PKG.automatic-notrequired \
PKG.manual-required PKG.manual-notrequired
for d in `cd /var/db/pkg && ls`; do
D=/var/db/pkg/$d
DREQ=$D/+REQUIRED_BY
DINS=$D/+INSTALLED_INFO
REQ=notrequired
AUTO=manual
if [ ! -d $D ]; then
continue;
fi
if [ -s $DREQ ]; then
REQ=required
fi
if [ -f $DINS ] && egrep 'automatic=(yes|YES)' $DINS > /dev/null; then
AUTO=automatic
fi
echo $d >> PKG.$AUTO-$REQ
done
# Remove distfiles that are out of date.
lintpkgsrc -mor
# Ensure that we have sources for all packages that are installed,
# plus all packages requested.
pkg_chk -g
cat pkgchk.conf pkgchk-manual.conf | egrep -v \# | while read pkg; do
echo $pkg
(cd $pkg && $MAKE fetch)
done
# Make list of out-dated binary packages, separated by whether they
# are installed or not.
rm -f PKG.old-installed PKG.old-notinstalled
lintpkgsrc -p | egrep -v '^(Cannot extract|Bogus:)' | egrep . | while read p; do
pbase=`basename $p .tgz`
installed=notinstalled
if [ -d /var/db/pkg/$pbase ]; then
installed=installed
fi
echo "$p" >> PKG.old-$installed
done
# Delete binary packages that are old and not installed.
# This must be done after the cvs update, and thus will probably not
# be able to ride the sudo timer.
if [ -f PKG.old-notinstalled ]; then
cat PKG.old-notinstalled | sudo xargs rm -f && \
rm PKG.old-notinstalled
fi
Attachment:
pgpDCOCgbo1ur.pgp
Description: PGP signature