If you have used a UNIX® system before you will
know that the typical procedure for installing third-party software goes something like
this:
-
Download the software, which might be distributed in source code format, or as a
binary.
-
Unpack the software from its distribution format (typically a tarball compressed with
compress(1), gzip(1), or bzip2(1)).
-
Locate the documentation (perhaps an INSTALL or README file, or some files in a doc/
subdirectory) and read up on how to install the software.
-
If the software was distributed in source format, compile it. This may involve editing
a Makefile, or running a configure
script, and other work.
-
Test and install the software.
And that is only if everything goes well. If you are installing a software package
that was not deliberately ported to FreeBSD you may even have to go in and edit the code
to make it work properly.
Should you want to, you can continue to install software the “traditional”
way with FreeBSD. However, FreeBSD provides two technologies which can save you a lot of
effort: packages and ports. At the time of writing, over 19,000 third-party applications
have been made available in this way.
For any given application, the FreeBSD package for that application is a single file
which you must download. The package contains pre-compiled copies of all the commands for
the application, as well as any configuration files or documentation. A downloaded
package file can be manipulated with FreeBSD package management commands, such as pkg_add(1), pkg_delete(1), pkg_info(1), and so
on. Installing a new application can be carried out with a single command.
A FreeBSD port for an application is a collection of files designed to automate the
process of compiling an application from source code.
Remember that there are a number of steps you would normally carry out if you compiled
a program yourself (downloading, unpacking, patching, compiling, installing). The files
that make up a port contain all the necessary information to allow the system to do this
for you. You run a handful of simple commands and the source code for the application is
automatically downloaded, extracted, patched, compiled, and installed for you.
In fact, the ports system can also be used to generate packages which can later be
manipulated with pkg_add and the other package management
commands that will be introduced shortly.
Both packages and ports understand dependencies. Suppose you want to install an application that
depends on a specific library being installed. Both the application and the library have
been made available as FreeBSD ports and packages. If you use the pkg_add command or the ports system to add the application, both
will notice that the library has not been installed, and automatically install the
library first.
Given that the two technologies are quite similar, you might be wondering why FreeBSD
bothers with both. Packages and ports both have their own strengths, and which one you
use will depend on your own preference.
Package Benefits
-
A compressed package tarball is typically smaller than the compressed tarball
containing the source code for the application.
-
Packages do not require any additional compilation. For large applications, such as Mozilla, KDE, or GNOME this can be important, particularly if you are on a slow
system.
-
Packages do not require any understanding of the process involved in compiling
software on FreeBSD.
Ports Benefits
-
Packages are normally compiled with conservative options, because they have to run on
the maximum number of systems. By installing from the port, you can tweak the compilation
options to (for example) generate code that is specific to a Pentium 4 or Athlon
processor.
-
Some applications have compile-time options relating to what they can and cannot do.
For example, Apache can be configured with a wide variety of
different built-in options. By building from the port you do not have to accept the
default options, and can set them yourself.
In some cases, multiple packages will exist for the same application to specify
certain settings. For example, Ghostscript is available as a
ghostscript package and a ghostscript-nox11 package, depending on whether or not you have
installed an X11 server. This sort of rough tweaking is possible with packages, but
rapidly becomes impossible if an application has more than one or two different
compile-time options.
-
The licensing conditions of some software distributions forbid binary distribution.
They must be distributed as source code.
-
Some people do not trust binary distributions. At least with source code, you can (in
theory) read through it and look for potential problems yourself.
-
If you have local patches, you will need the source in order to apply them.
-
Some people like having code around, so they can read it if they get bored, hack it,
borrow from it (license permitting, of course), and so on.
To keep track of updated ports, subscribe to the FreeBSD
ports mailing list and the FreeBSD
ports bugs mailing list.
Warning: Before installing any application, you should check https://vuxml.freebsd.org/ for security
issues related to your application.
You can also install ports-mgmt/portaudit which will automatically check all
installed applications for known vulnerabilities; a check will be also performed before
any port build. Meanwhile, you can use the command portaudit -F
-a after you have installed some packages.
The remainder of this chapter will explain how to use packages and ports to install
and manage third-party software on FreeBSD.