Pkg_info corrupt for some packages

Aijaz Baig aijaz.abaig at
Mon Apr 14 20:47:02 UTC 2008


I tried running the script suggested by mel and after that I was able to see
that some of those packages got registered as installed.

However some of the packages were not being found and as an example I saw
the following:

Restoring doodle-0.6.6_1
Failed: cannot find doodle-0.6.6_1 in /usr/ports/INDEX-7*

*Then as suggested by andrew I tried to see just how many packages have been
messed and to my shock the figure for the first command was 336 and for the
second command was 326. do I 'extract the port origins' from pkgdb.db?I am sorry if I
sound naive but im a bit new to freebsd.

Hope to hear from you guys,

On Sun, Apr 13, 2008 at 11:01 PM, Mel <fbsd.questions at>

> On Sunday 13 April 2008 11:41:19 Aijaz Baig wrote:
> > Hi,
> >
> > Well...I tried to cut and paste the command as is by mel (though It
> would
> > have been better if you explained what that cryptic looking command
> > actually meant) and I got the followinfg output:
> >
> > 'grep: /var/db/pkg/xorg-server-1.4_4,1/+CONTENTS: No such file or
> directory
> Well, that explaines it right there. It wasn't installed properly, because
> every installed port should have a +CONTENTS file.
> You can grab the files from 'pkgdb.db' like Andrew suggested, but I
> personally
> wouldn't trust those if portupgrade was the one that did this in the first
> place.
> This is where daily backups rock :).
> If your /usr/ports/INDEX-6 (or -7) is in sync with your installed
> packages,
> then maybe the following script will work. It worked for me testing it,
> but I
> can't guarentee it will work in all cases.
> If you're on FreeBSD 6, change INDEXFILE to /usr/ports/INDEX-6. Rest
> should
> work without changes.
> #!/bin/sh
> INDEXFILE='/usr/ports/INDEX-7'
> for dir in /var/db/pkg/*; do
>    if test ! -e ${dir}/+CONTENTS -a -d ${dir}; then
>        pkgname=${dir##*pkg/}
>        echo "Restoring ${pkgname}"
>        IDX=$(grep "^${pkgname}|" ${INDEXFILE} 2>/dev/null)
>        if test -z "${IDX}"; then
>            echo "Failed: cannot find ${pkgname} in ${INDEXFILE}"
>        else
>            _origin=${IDX#*|}
>            origin=${_origin%%|*}
>            echo "---> ${origin}"
>            cd ${origin}
>            mv ${dir} /tmp/
>            make -DFORCE_PKG_REGISTER generate-plist fake-pkg
>            for file in /tmp/${pkgname}/*; do
>                f=${file##*/}
>                if test ! -f ${dir}/${f}; then
>                    echo "--> Restoring ${pkgname}/${f}"
>                    mv ${file} ${dir}/
>                fi
>            done
>        fi
>    fi
> done
> --
> Mel
> Problem with today's modular software: they start with the modules
>    and never get to the software part.

More information about the freebsd-questions mailing list