pkgsrc-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

pkg/38232: pkgtools/pkg_comp botches testing for adequate pkg_install

>Number:         38232
>Category:       pkg
>Synopsis:       pkgtools/pkg_comp botches testing for adequate pkg_install
>Confidential:   no
>Severity:       serious
>Priority:       high
>Responsible:    pkg-manager
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Wed Mar 12 14:50:04 +0000 2008
>Originator:     Robert Elz
>Release:        NetBSD 3.99.15  (pkgsrc current within past 8 hours)
        Prince of Songkla University
System: NetBSD 3.99.15 NetBSD 3.99.15 
(GENERIC-1.696-20060125) #8: Wed Jan 25 04:59:39 ICT 2006 i386
Architecture: i386
Machine: i386
        Sometime recently pkgsrc has begun using pkg_info -E
        That doesn't exist in the NetBSD 3.0 version of pkg_install
        (which is version 20051122)

        pkg_comp tests if it has an adequate version of pkg_install
        installed on the system, and installs the latest from
        pkgsrc if not, but the way it does this doesn't work (or
        not with the current environment).

        Start with an empty pkg_comp sandbox
                pkg_comp removeroot
                pkg_comp makeroot

        That's probably enough to see the problem, if you're using
        an old enough version of NetBSD as the base system (I use
        NetBSD 3.0 so my binary packages work just about anywhere - and
        are all using a consistent set of internal interfaces) and if
        you have "makeroot" auto-install anything.

        What I see is ...

PKG_COMP ==> Mounting sandboxed filesystems
PKG_COMP ==> Checking if pkg_install is up to date
PKG_COMP ==> Building and installing editors/vim-share
===> Binary install for vim-share-7.1.270
pkg_info: unknown option -- E
usage: pkg_info [-BbcDdFfhIikLmNnpqRrSsVv] [-e package] [-K pkg_dbdir] [-l prefi
                pkg-name [...]
       pkg_info [-a | -u] [flags]
       pkg_info -Q variable pkg-name [pkg-name ...]

       Notice the "Checking if pkg_install is up to date" (which did
       nothing) and then the lack of -E.  If I had the error log
       of the "pkg_comp makeroot" which was the previous command
       before this build, you'd see the same kind of noise there.

        No fix, but an explanation.

        pkg_comp does ...

    cat >> $script <<EOF
cd /usr/pkgsrc/pkgtools/pkg_comp
fail=\$(make show-var VARNAME=PKG_FAIL_REASON)
if echo \$fail | grep "package tools installed on this system are out of date" >
/dev/null; then
    echo "PKG_COMP ==> pkg_install is out of date; rebuilding"
    cd /usr/pkgsrc/pkgtools/pkg_install
    make && make install && make clean
    chmod +x $script
    chroot $DESTDIR /pkg_comp/tmp/`basename $script`
    rm $script

        That is, it looks at the result from PKG_FAIL_REASON
        and if the "make" says the pkg tools are out of date,
        it installs new ones.   Seems good enough, but ..


# Check that we are using up-to-date pkg_* tools with this file.
PKG_FAIL_REASON+='The package tools installed on this system are out of date.'

        That message only appears if the version of the pkgtools
        is < PKGTOOLS_BASE_REQD and  20051103

        which is a truly ancient version - only a system older than
        NetBSD 3.0 (ie: a 2.* or earlier) can possibly have such old
        tools installed (for NetBSD, I doubt any of the other systems
        that pkgsrc supports can ever have anything so ancient).

        That is, the test in check_pkg_install() in pkg_comp is
        essentially (these days) a waste of space and time.  Only
        someone installing on ancient NetBSD is going to get any
        benefit from it at all.

        I don't know if the correct solution is to bump
        PKGTOOLS_BASE_REQD to something a little more recent,
        or to redo the test in pkg_comp to something that catches
        more problems, or to simply fix pkgsrc so it isn't using
        pkg_info -E anywhere before it has a chance to update the
        pkgtools as part of the normal update, ie: using this from

BOOTSTRAP_DEPENDS+=     pkg_install>=${PKGTOOLS_REQD}:../../pkgtools/pkg_install
.  endif

        Of course, even there               20070802

        so that's not that new a version either (I don't know
        whether that one implemented pkg_info -E or not, I don't
        have it around to check).

        For me, that one does eventually kick in, and a new pkg_install
        is built & installed as a dependency of whatever package is
        being built, but even doing that results in a bunch more
        usage messages from the old pkg_info (which is why I suspect that
        pkg_info -E is being used too soon in pkgsrc, that is, before
        the pkgtools have a chance to update themselves to a version
        that is expected to support that).

Home | Main Index | Thread Index | Old Index