When moving from one major FreeBSD branch to another, you are almost compelled to upgrade all of your installed FreeBSD ports. If you move from the
RELENG_7 branch to
RELENG_8, as an example, the old
pty interface is deprecated, and ports such as
sysutils/screen) must be recompiled and reinstalled to take advantage of the new
As a precaution, you should first remove all traces of the GNU auto tools. They are only build tools and the presence of old versions may affect the upgrade process negatively.
cd /var/db/pkg pkg_delete -i auto*
If you are using
ports-mgmt/portupgrade) to handle the upgrade, then you should first forcefully upgrade Berkeley DB 4.1 (
databases/db41), Ruby 1.8 (
lang/ruby18), and everything that depends on Berkeley DB 4.1 and Ruby 1.8. This will give you a fresh set of tools for upgrading the remaining ports.
Just to be sure, check and see what incarnation of Berkeley DB
databases/ruby-bdb actually depends on.
less -S /var/db/pkg/ruby18-bdb-*/+CONTENTS
Look for lines similar to these.
@pkgdep db41-4.1.25_4 @comment DEPORIGIN:databases/db41
databases/db42 is shown instead of
databases/db41, then replace
databases/db42 in every command presented below.
This command takes care of upgrading the ports relevant to the
/usr/local/sbin/portupgrade -fprv databases/db41 lang/ruby18
Next, you should update and verify the integrity of the pkg and ports databases utilized by the
/usr/local/sbin/pkgdb -u /usr/local/sbin/pkgdb -F /usr/local/sbin/portsdb -u /usr/local/sbin/portsdb -F
If, for some reason,
portsdb complains about the internal structure of the pkg and/or ports databases, simply delete the database files and recreate them from scratch using these commands:
rm /var/db/pkg/pkgdb.db rm /usr/ports/INDEX-?.db /usr/local/sbin/pkgdb -u /usr/local/sbin/portsdb -u
Now, you must upgrade all installed ports. This command upgrades all your installed ports, including those ports upgraded by the previous command.
Should the upgrade process skip a few ports, it may be necessary to remove stray work directories from the
/usr/ports hierarchy before attempting another run.
find /usr/ports -depth 3 -name work -type d -print > /usr/ports/work-directories.tmp rm -Rf `cat /usr/ports/work-directories.tmp` rm /usr/ports/work-directories.tmp
If you are curious about what
portupgrade is planning to do, you might want to throw in the
-n switch to do a dry run of the upgrade process.
/usr/local/sbin/portupgrade -nfprv databases/db41 lang/ruby18 /usr/local/sbin/portupgrade -nafprv
Remember to run
portupgrade without the
-n switch to actually accomplish the upgrade.