The FreeBSD Ports collection is a package management system for the FreeBSD operating system, providing an easy and consistent way of installing software packages. As of October 2012, there are over 24,000 ports available in the collection. It has also been adopted by NetBSD, as the basis of its pkgsrc system.
Installing from source
The ports collection uses Makefiles arranged in a directory hierarchy so that software can be built, installed and uninstalled with the make command. When installing an application, very little (if any) user intervention is required after issuing a beginning command such as make install or make install clean in the ports directory of the desired application. In most cases the software is automatically downloaded from the Internet, patched and configured if necessary, then compiled, installed and registered in the package database. If the new port has needed dependencies on other applications or libraries, these are installed beforehand automatically.
Most ports are already configured with default options which have been deemed generally appropriate for most users. However, these configuration options (called knobs) can sometimes be changed before installation using the make config command, which brings up an ncurses-based interface that allows the user to graphically select the desired options.
Historically, each port (or software package) has been maintained by an individual port maintainer who is responsible for ensuring the currency of the port and providing general support. Today, many ports are maintained by special task forces or sub-projects, each with a dedicated mailing list (e.g. kde@FreeBSD.org, java@FreeBSD.org, etc.), while unmaintained ports are assigned to the generic group ports@FreeBSD.org. In general, anyone may become a port maintainer by contributing their favorite software to the collection. One may also choose to maintain an existing port with no active maintainer.
Precompiled (binary) ports are called packages. A package can be obtained from the corresponding port with make package command; prebuilt packages are also available for download from the FreeBSD servers. A user can automatically install a package by passing the package name to the pkg_add -r command. This downloads the appropriate package for the user's release version of FreeBSD, then installs the application along with any software dependencies it may have. By default, this command downloads packages from the main FreeBSD distribution site.
FreeBSD maintains a build farm called the pointyhat cluster in which all packages for all supported architectures and major releases are built. The build logs and known errors for all ports built into packages through the pointyhat cluster are available in a database.
These precompiled packages are separated into categories by the architectures for which they are available. Packages are further separated into several "release" directories, one for each current production release built from the ports collection and shipped with the release. These production release directories are never updated.
There are also stable and current directories for several major release branches. These are updated more or less weekly. In most cases a package created for an older version of FreeBSD can be installed and used on a newer system without difficulty since binary backward compatibility across major releases is enabled by default.
A packaging system called
pkg, or pkgNG, will replace the package management system in FreeBSD 10.
Jordan Hubbard committed his port make macros to the FreeBSD CVS repository on August 21, 1994. His package install suite Makefile had been committed a year earlier (August 26, 1993). The core ports framework was at first maintained by Hubbard along with Satoshi Asami for several years. The Ports Management Team was later formed to handle this task.
- "About FreeBSD Ports". freebsd.org. Retrieved 2011-12-09.
- "Porter's Handbook". FreeBSD project.
- "FreeBSD Package building logs and errors (pointyhat cluster)". freebsd.org. Retrieved 2010-03-26.
- "CVS log for ports/Mk/bsd.port.mk". FreeBSD project.
- "CVS log for src/usr.sbin/pkg_install/Makefile". FreeBSD project.
- Official FreeBSD Ports web page
- FreshPorts - website that tracks port updates
- Port-Tags - Project to add tags to the ports collection
- Installing Applications: Packages and Ports from the FreeBSD Handbook (Chapter 4)