Before you can update and upgrade the FreeBSD’s ports, the Ports Collection needs to be updated. Follow step here to update the Ports Collection.

Once you updated your Ports Collection, before attempting a port upgrade, you should check the /usr/ports/UPDATING file. This file describes various issues and additional steps users may encounter and need to perform when updating a port.

Keeping the ports up to date can be a tedious job. Just for example, to upgrade a port you need to go to the ports directory, build the port, deinstall the old port, install the new port, and then clean up after the build. If there are numerous ports that need to be upgrade, it will be very troublesome. This was a large problem for system administrators to deal with, and FreeBSD have utilities which do this automatically, and that’s sysutils/portupgrade utility.

To install sysutils/portupgrade utility, use the command just as to install any other port: make install clean.

Create a database with the following command: pkgdb -F

The command will read the list of installed ports and create a database file in the /var/db/pkg directory.

Run portupgrade -a to start to update the ports.

The portupgrade will read the database file created by pkgdb -F and the ports INDEX file. Finally, portupgrade will begin to download, build, backup, install, and clean the ports which have been updated.

Portupgrade utility has a lot of options for different uses, the most important ones listed below.

If you want to upgrade only a certain application, not the complete database, use portupgrade pkgname, include the flags -r if portupgrade should act on all those packages depending on the given package as well, and -R to act on all packages required by the given packages.

To use packages instead of ports for installation, provide -P. With this option portupgrade searches the local directories listed in PKG_PATH, or fetches packages from remote site if it is not found locally. If packages can not be found locally or fetched remotely, portupgrade will use ports. To avoid using ports, specify -PP.

To just fetch distfiles (or packages, if -P is specified) without building or installing anything, use -F.

Note: It is important to regularly update the package database using pkgdb -F to fix inconsistencies, especially when portupgrade asks you to. Do not abort portupgrade while it is updating the package database, this will leave you an inconsistent database.