BSD DevCenter
oreilly.comSafari Books Online.Conferences.


Ports Tricks
Pages: 1, 2

Showing Dependencies

Okay, what else can one do with ports? I've already shown you one way to view a port's dependencies using make readmes.

Another way is to do this:

% cd /usr/ports/graphics/gimp
% make pretty-print-build-depends-list
This port requires package(s) "XFree86-libraries-4.3.0_5 
aalib-1.4.r5_1 cups-base- cups-pstoraster-7.07 expat-1.95.6_1 
fontconfig-2.2.90_3 freetype2-2.1.4_1 gettext-0.11.5_1 
ghostscript-gnu-7.07_3 gimp-print-4.2.5 glib-1.2.10_9 gmake-3.80 
gtk-1.2.10_9 imake-4.3.0_1 jpeg-6b_1 libiconv-1.9.1_1 libijs-0.34 
libtool-1.3.5_1 perl-5.6.1_13 pkgconfig-0.15.0 png-1.2.5_2 
tiff-3.5.7_1" to build.

Searching Ports

The ports collection also includes a search feature. This is extremely useful, especially if you already know what type of application you want and wish to know which ports are available to fulfill that need. For example:

% cd /usr/ports
% make search key=dvd | more

The result will be a list of all ports dealing with DVDs. Here is the first result in the search, to give you an idea of the information that can be gathered:

Info:Makes a DVD file structure from one or more MPEG2 streams
B-deps:expat-1.95.6_1 gettext-0.11.5_1 gmake-3.80 libdvdcss-1.2.5
libdvdread-0.9.4 libgnugetopt-1.2 libiconv-1.8_2 
R-deps:libdvdcss-1.2.5 libdvdread-0.9.4 libgnugetopt-1.2 png-1.2.5_2

The "B-deps" are the build dependencies, while the "R-deps" are the run dependencies.

If instead you just want to search for a port's name, use search name= instead. For example, if I know I want to build Netscape and want to see which versions are available, this will do the trick:

% make search name=netscape | more

If you find the search facility useful, it is a good idea to first run make index to ensure your ports index is completely up to date. This is another command that takes a while, so don't execute it if you're in a hurry.

Displaying the Currently Installed Packages and Ports

Let's move on to man pkg_info. This utility is used to display the currently installed packages and ports on a system. Unless you've read this manpage before, you're missing out on a lot of useful switches.

When using pkg_info, you can use -a in combination with other switches to gather information on all installed software. Alternately, specify the name of the particular application you wish to gather information about. For example:

% pkg_info -ac

shows the one-line comment of every installed application, whereas:

% pkg_info -c lynx-

will show the one-line comment for lynx- If you'd rather read the long description, use -d instead of -c.

If you're like me and hate typing, or, for that matter, remembering the version number of an application, include -x:

% pkg_info -xc lynx

The above command will show the one-line comment of every application that starts with lynx. Besides saving your memory cells for other purposes, it's an excellent way to find out if more than one version of lynx happens to be installed on your system.

Reading Post-Installation Messages

After installing a port, it's useful to see if there were any messages, as these often contain configuration instructions. For example, in my previous article, I showed you one way to see the message for /usr/ports/mail/messagewall. Here's an alternate method:

% pkg_info -xD messagewall

A very useful switch is -L, as it gives the full pathname to every file that was installed with the application:

% pkg_info -xL lynx | more
Information for lynx-


From the output, I now know that lynx installed with a manpage, that the location of the application itself is /usr/local/bin/lynx, that there is a default configuration file, and that there is a directory containing documents regarding lynx. Usually, I'm not interested in every file that was installed. Since the ones I'm concerned with are usually at the top of the list, I usually pipe the output to head instead of more:

% pkg_info -xL lynx | head

Checking Dependencies Before Uninstalling

Before uninstalling an application, it is always a good idea to see if any other packages require that application as a dependency. For example, you've typed pkg_info | more and see this application:


You think to yourself, "I don't remember installing, or even ever using, this application. Maybe I should just get rid of it." This command will tell you if it was instead installed by another application that you do need:

% pkg_info -R ORBit-0.5.17
Information for ORBit-0.5.17:

Required by:

Ahh, looks like this application is useful, after all. But, don't worry. If you did try to uninstall this application, pkg_delete would complain because it is required by those other applications. However, it is always nice to be aware of these things ahead of time.

Checking the Disk Space Your Ports Use

What happens if you go a little install-crazy and end up with more applications than disk space? Use the size switch to determine how much space an application's files are using. Send the output to either a pager:

% pkg_info -as | more

or to a file that you can read at your leisure:

% pkg_info -as > sizes

You'll then have an idea of which applications are using the most space so that you can decide which ones are worth uninstalling. Remember, you also have the comment switch and the dependencies switch to help you in your decision.

Checking the Status of Installed Ports

Yet another way to find out what software is installed on your system is to use pkg_version.

pkg_version | more

will list each installed application, in alphabetical order. You'll note that each application is followed by one of these three symbols:

  • =: the application is up to date.
  • <: there is a newer version of the application available.
  • >: your index may be out of date.

So, to determine which applications require upgrading:

% pkg_version -l "<"

Note that you need to place quotes around the <, or your shell will complain about a missing name for your redirect. If you don't receive any output, congratulations! All of your applications are up to date. If you do receive some output, you know which applications require an upgrade.

Alternately, this command will show all applications that are out of date:

% pkg_version -L "="

See man pkg_version if you didn't catch the difference between -l and -L.

If you prefer a more verbose output than =, <, or >, try this command:

% pkg_version -v | more

Usually, you run pkg_version after using /usr/ports/net/cvsup-without-gui to retrieve the latest ports updates. (See The FreeBSD Handbook's cvsup section.) If for some reason you're not using cvsup, you can still check your installed ports against the latest ports tree:

% pkg_version -v \
	| more

Note that that command is one long line. Alternately, use -l or -L with that URL to find your out of date applications.

All of the utilities mentioned in today's article came with your FreeBSD system. In the next article, I'll cover some ports that add even more functionality to the ports collection.

Dru Lavigne is a network and systems administrator, IT instructor, author and international speaker. She has over a decade of experience administering and teaching Netware, Microsoft, Cisco, Checkpoint, SCO, Solaris, Linux, and BSD systems. A prolific author, she pens the popular FreeBSD Basics column for O'Reilly and is author of BSD Hacks and The Best of FreeBSD Basics.

Read more FreeBSD Basics columns.

Return to the BSD DevCenter.

Sponsored by: