Contributed by &a.gpalmer; and &a.jkh;.
Unfortunately, there are more variations of UN*X than most people
know of, and hence not all software for UN*X available on the Internet
will work on all versions of UN*X (in fact, I can guarantee it!).
Hence, some software needs modifications to work under some UN*Xs. The
process of making those modifications is known as ``porting'' and the
result known as a ``port'' (not to be confused with the sockets on the
back of your computer!).
When 2.0 was released, the FreeBSD Project decided to attempt to
automate the process of ``porting'' such software to FreeBSD, and the
result is the Ports Collection. The general idea was that a
combination of various programming tools already available in the base
FreeBSD installation would allow you to simply type `make' for a given
port and have the underlying ports mechanism automatically fetch the
port from a FreeBSD mirror site, apply any special configuration
knowledge to it and then build it to result in a fully working version
of the program.
The ports collection itself normally doesn't have any of the
original source code necessary for the compilation in the tree, just
those shell scripts, Makefiles and source code ``diffs'' that are
necessary to configure and compile the program under FreeBSD. This
keeps the entire system down to a manageable size, with the current
system having over 300 ports in the master source tree and yet taking
up less than ten megabytes.
The Makefile for a port automatically looks in a central location
on your system (usually /usr/ports/distfiles, though this value can be
customized) for the associated set of original distribution files that
have been ``ported''. Those not found locally are searched for
wherever they're generally provided on the Internet. If you have a
CDROM distribution of FreeBSD then you've already got them available
on your CD for ease of use. See if you have such a CDROM
distribution, otherwise skip to .
The ports collection is easy to use from CDROM, and all you need to
do is to create a "link tree" to it using the lndir(1) command that
comes with the XFree86 distribution. Find a location with
some free space and create a directory there, and make a symbolic link
from /usr/ports to that directory. Then invoke the lndir(1) command with
the full pathname of the ``ports'' directory on the CDROM as an
argument (this might be, for example, something like: lndir
/cdrom/ports). Then you can build ports directly off the CDROM by
building them in the link tree you've created.
Note that there are some ports for which we can't provide the original
source in the CDROM due to licensing limitations. In that case,
you'll need to look at the next section ().
The ports collection can also use an auto-fetch system to keep
your ports collection source tree up to date, updating the central
``distfiles'' version for you the next time you compile the port.
Of course, this assumes you have a permanent network link or don't
mind heavy usage of your telephone. If you don't want heavy network
usage when you compile your ports tree, you can pre-fetch the
necessary tarballs beforehand and put them into /usr/ports/distfiles
by hand. A good way to see what files a port is going to need is to
cd to that ports' directory and do a make fetch-list to see what
it does. The output of make fetch-list can also be used as a
shell script to fetch the ports' tarballs at a well-connected machine.
You can also chose to get the source files either from the master
FTP site as defined in the relevant Makefile (in the MASTER_SITES
line), or some FreeBSD mirror site also carrying a set of distfiles,
as does the master FTP site on ftp.FreeBSD.org (aka ftp.cdrom.com) in
the directory /pub/FreeBSD/distfiles. Note that the files in
that directory are not guaranteed to be kept up to date - this is a
volunteer project! We can't make any guarantees about the mirror
sites either - they are obviously under independent control and don't
even have to mirror the distfiles directory.
If you have a non-permanent link, you can fetch all the distfiles by
going to the top of the tree and typing ``make fetch''.
Oh. You can do one of four (4) things :
See the file GUIDELINES, in:
ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/GUIDELINES
This contains details of the procedure and structure involved.
Upload the fixed version to ftp://freefall.cdrom.com/pub/incoming or
ftp://ftp.FreeBSD.org/pub/FreeBSD/incoming and send e-mail to
ports@FreeBSD.org with the filename and details. Someone on the
all-volunteer `ports committee' will (hopefully) look it over and
commit it to the ports collection if they like the looks of it.
There is a way around this. Before starting the compilation, type:
First read the bsd.port.mk file (which may be found in
/usr/share/mk/) and the associated bsd.port.subdir.mk file. A lot of
the weirdness can be explained properly in there (most of the current
weirdness is due to the lack of assumptions about anything, which is
necessary due to the generic nature of these files). Also check that
you have an up-to-date copy, as the file can change from minute to
minute. The most up-to-date copy can be found in:
Send changes to ports@FreeBSD.org. Changes are most welcome!
This FAQ is also very green and should be considered no more than
a `good start' for now. Authors? You can come out of hiding any
time now! :-)
One good method is to cd to the top of the ports tree (say /usr/ports)
and type:
For various reasons, when using FTP over the Internet to obtain the
source code, you may not always end up with the same copy of the code
that the original porter worked from, and this can lead to problems.
So a simple checksumming system has been employed to try and highlight
problems in this area.
To check the entire system, go to the top of the ports tree
(defaults to /usr/ports) and type