Wrap paragraphs. Whitespace change only. Translators please ignore.

This commit is contained in:
Murray Stokely 2003-05-21 06:04:09 +00:00
parent 7d0800c30d
commit 5c30ad1cac
Notes: svn2git 2020-12-08 03:00:23 +00:00
svn path=/head/; revision=17022

View file

@ -91,27 +91,30 @@
third party applications have been made available in this
way.</para>
<para>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
&man.pkg.add.1;, &man.pkg.delete.1;, &man.pkg.info.1;, and so on.</para>
<para>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
&man.pkg.add.1;, &man.pkg.delete.1;, &man.pkg.info.1;, and so
on.</para>
<para>Installing a new application can be carried out with a single
command.</para>
<para>A FreeBSD port for an application is a collection of files designed
to automate the process of compiling an application from source
code.</para>
<para>A FreeBSD port for an application is a collection of files
designed to automate the process of compiling an application
from source code.</para>
<para>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.</para>
<para>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.</para>
<para>In fact, the ports system can also be used to generate packages
which can later be manipulated with <command>pkg_add</command>
@ -119,32 +122,35 @@
shortly.</para>
<para>Both packages and ports understand
<emphasis>dependencies</emphasis>. 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 <command>pkg_add</command> 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.</para>
<emphasis>dependencies</emphasis>. 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
<command>pkg_add</command> 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.</para>
<para>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.</para>
<para>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.</para>
<itemizedlist>
<title>Package Benefits</title>
<listitem>
<para>A compressed package tarball is typically smaller than the
compressed tarball containing the source code for the application.</para>
<para>A compressed package tarball is typically smaller than
the compressed tarball containing the source code for the
application.</para>
</listitem>
<listitem>
<para>Packages do not require any additional compilation. For large
applications, such as <application>Mozilla</application>,
<application>KDE</application>, or <application>GNOME</application>
this can be important, particularly if you are on a slow system.</para>
<para>Packages do not require any additional compilation. For
large applications, such as
<application>Mozilla</application>,
<application>KDE</application>, or
<application>GNOME</application> this can be important,
particularly if you are on a slow system.</para>
</listitem>
<listitem>
@ -165,21 +171,22 @@
</listitem>
<listitem>
<para>Some applications have compile time options relating to what they
can and cannot do. For example, <application>Apache</application>
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.</para>
<para>Some applications have compile time options relating to
what they can and cannot do. For example,
<application>Apache</application> 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.</para>
<para>In some cases, multiple packages will exist for the same
application to specify certain settings. For example,
<application>Ghostscript</application> is available as a
<filename>ghostscript</filename> package and a
<filename>ghostscript-nox11</filename> 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.</para>
<filename>ghostscript-nox11</filename> 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.</para>
</listitem>
<listitem>
@ -189,9 +196,9 @@
</listitem>
<listitem>
<para>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.</para>
<para>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.</para>
</listitem>
<listitem>
@ -200,17 +207,18 @@
</listitem>
<listitem>
<para>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.</para>
<para>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.</para>
</listitem>
</itemizedlist>
<para>To keep track of updated ports, subscribe to the
&a.ports; and the &a.ports-bugs;.</para>
<para>The remainder of this chapter will explain how to use packages and
ports to install and manage third party software on FreeBSD.</para>
<para>The remainder of this chapter will explain how to use
packages and ports to install and manage third party software on
FreeBSD.</para>
</sect1>
<sect1 id="ports-finding-applications">
@ -220,14 +228,14 @@
want, and what the application is called.</para>
<para>FreeBSD's list of available applications is growing all the
time. Fortunately, there are a number of ways to
find what you want:</para>
time. Fortunately, there are a number of ways to find what you
want:</para>
<itemizedlist>
<listitem>
<para>The FreeBSD web site maintains an up-to-date searchable list of
all the available applications, at
<ulink url="../../../../ports/index.html">http://www.FreeBSD.org/ports/</ulink>.
<para>The FreeBSD web site maintains an up-to-date searchable
list of all the available applications, at <ulink
url="../../../../ports/index.html">http://www.FreeBSD.org/ports/</ulink>.
The ports are divided into categories, and you may either
search for an application by name (if you know it), or see
all the applications available in a category.</para>
@ -236,21 +244,21 @@
<indexterm><primary>FreshPorts</primary></indexterm>
<listitem>
<para>Dan Langille maintains FreshPorts, at
<ulink url="http://www.FreshPorts.org/"></ulink>.
FreshPorts tracks changes to the applications in the ports tree as
they happen, allows you to <quote>watch</quote> one or more
<para>Dan Langille maintains FreshPorts, at <ulink
url="http://www.FreshPorts.org/"></ulink>. FreshPorts
tracks changes to the applications in the ports tree as they
happen, allows you to <quote>watch</quote> one or more
ports, and can send you email when they are updated.</para>
</listitem>
<indexterm><primary>FreshMeat</primary></indexterm>
<listitem>
<para>If you do not know the name of the application you want, try
using a site like FreshMeat
(<ulink url="http://www.freshmeat.net/"></ulink>)
to find an application, then check back at the FreeBSD site to see
if the application has been ported yet.</para>
<para>If you do not know the name of the application you want,
try using a site like FreshMeat (<ulink
url="http://www.freshmeat.net/"></ulink>) to find an
application, then check back at the FreeBSD site to see if
the application has been ported yet.</para>
</listitem>
</itemizedlist>
</sect1>
@ -313,43 +321,45 @@ local: lsof-4.56.4.tgz remote: lsof-4.56.4.tgz
<para>If you do not have a source of local packages (such as a
FreeBSD CD-ROM set) then it will probably be easier to use the
<option>-r</option> option to &man.pkg.add.1;. This will cause the utility to
automatically determine the correct object format and release
and then fetch and install the package from an FTP site.
<option>-r</option> option to &man.pkg.add.1;. This will
cause the utility to automatically determine the correct
object format and release and then fetch and install the
package from an FTP site.
</para>
<indexterm>
<primary><command>pkg_add</command></primary></indexterm>
<screen>&prompt.root; <userinput>pkg_add -r <replaceable>lsof</replaceable></userinput></screen>
<para>The example above would download the correct package and add
it without any further user intervention. &man.pkg.add.1; uses
&man.fetch.3; to download the files, which honors various
environment variables, including <envar>FTP_PASSIVE_MODE</envar>,
<envar>FTP_PROXY</envar>, and <envar>FTP_PASSWORD</envar>. You
may need to set one or more of these if you are behind a firewall,
or need to use an FTP/HTTP proxy. See &man.fetch.3; for the
complete list. You can also note that in the example above
<para>The example above would download the correct package and
add it without any further user intervention. &man.pkg.add.1;
uses &man.fetch.3; to download the files, which honors various
environment variables, including
<envar>FTP_PASSIVE_MODE</envar>, <envar>FTP_PROXY</envar>, and
<envar>FTP_PASSWORD</envar>. You may need to set one or more
of these if you are behind a firewall, or need to use an
FTP/HTTP proxy. See &man.fetch.3; for the complete list. You
can also note that in the example above
<literal>lsof</literal> is used instead of
<literal>lsof-4.56.4</literal>. When the remote fetching
feature is used, the version number of the package must be
removed. &man.pkg.add.1; will automatically fetch the latest
version of the application.</para>
<para>Package files are distributed in <filename>.tgz</filename> format. You can
find them at <ulink
<para>Package files are distributed in <filename>.tgz</filename>
format. You can find them at <ulink
url="ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/packages/"></ulink>,
or on the FreeBSD CD-ROM distribution. Every CD on the
FreeBSD 4-CD set (and the PowerPak, etc.) contains packages in
the <filename>/packages</filename> directory. The layout of
the packages is similar to that of the
FreeBSD 4-CD set (and the PowerPak, etc.) contains packages
in the <filename>/packages</filename> directory. The layout
of the packages is similar to that of the
<filename>/usr/ports</filename> tree. Each category has its
own directory, and every package can be found within the
<filename>All</filename> directory.
</para>
<para>The directory structure of the package system matches
the ports layout; they work with each other to form the entire
<para>The directory structure of the package system matches the
ports layout; they work with each other to form the entire
package/port system.
</para>
@ -386,8 +396,8 @@ docbook =
...</screen>
<para>The symbols in the second column indicate the relative age
of the installed version and the version available in the local
ports tree.</para>
of the installed version and the version available in the
local ports tree.</para>
<informaltable frame="none">
<tgroup cols="2">
@ -462,15 +472,16 @@ docbook =
<title>Obtaining the Ports Collection</title>
<para>Before you can install ports, you must first obtain the
ports collection&mdash;which is essentially a set of <filename>Makefiles</filename>,
patches, and description files placed in
<filename>/usr/ports</filename>.
ports collection&mdash;which is essentially a set of
<filename>Makefiles</filename>, patches, and description files
placed in <filename>/usr/ports</filename>.
</para>
<para>When installing your FreeBSD system,
<application>Sysinstall</application> asked if you would like to
install the ports collection. If you chose no, you can follow
these instructions to obtain the ports collection:</para>
<application>Sysinstall</application> asked if you would like
to install the ports collection. If you chose no, you can
follow these instructions to obtain the ports
collection:</para>
<procedure>
<title>Sysinstall Method</title>
@ -541,7 +552,8 @@ docbook =
mentioned sections.</para>
<step>
<para>Install the <filename role="package">net/cvsup</filename> port. See <link
<para>Install the <filename
role="package">net/cvsup</filename> port. See <link
linkend="cvsup-install">CVSup Installation</link> (<xref
linkend="cvsup-install">) for more details.</para>
</step>
@ -572,9 +584,9 @@ docbook =
</step>
<step>
<para>Running this command later will
download and apply all the recent changes to your ports
collection, except actually rebuilding the ports for your own system.</para>
<para>Running this command later will download and apply all
the recent changes to your ports collection, except
actually rebuilding the ports for your own system.</para>
</step>
</procedure>
</sect2>
@ -586,35 +598,38 @@ docbook =
<primary>ports</primary>
<secondary>installing</secondary>
</indexterm>
<para>The first thing that should be explained
when it comes to the ports collection is what is actually meant
by a <quote>skeleton</quote>. In a nutshell, a port skeleton is a
minimal set of files that tell your FreeBSD system how to
cleanly compile and install a program. Each port skeleton includes:</para>
<para>The first thing that should be explained when it comes to
the ports collection is what is actually meant by a
<quote>skeleton</quote>. In a nutshell, a port skeleton is a
minimal set of files that tell your FreeBSD system how to
cleanly compile and install a program. Each port skeleton
includes:</para>
<itemizedlist>
<listitem>
<para>A <filename>Makefile</filename>. The
<filename>Makefile</filename> contains various statements that
specify how the application should be compiled and where it
should be installed on your system.</para>
<filename>Makefile</filename> contains various statements
that specify how the application should be compiled and
where it should be installed on your system.</para>
</listitem>
<listitem>
<para>A <filename>distinfo</filename> file. This file contains
information about the files that must be downloaded to build the
port and their checksums, to verify that files have not been
corrupted during the download using &man.md5.1;.</para>
<para>A <filename>distinfo</filename> file. This file
contains information about the files that must be
downloaded to build the port and their checksums, to
verify that files have not been corrupted during the
download using &man.md5.1;.</para>
</listitem>
<listitem>
<para>A <filename>files</filename> directory. This directory
contains patches to make the program compile and install on
your FreeBSD system. Patches are basically small files that
specify changes to particular files. They are in plain text
format, and basically say <quote>Remove line 10</quote> or
<quote>Change line 26 to this ...</quote>. Patches are also
known as <quote>diffs</quote> because they are generated by the
<para>A <filename>files</filename> directory. This
directory contains patches to make the program compile and
install on your FreeBSD system. Patches are basically
small files that specify changes to particular files.
They are in plain text format, and basically say
<quote>Remove line 10</quote> or <quote>Change line 26 to
this ...</quote>. Patches are also known as
<quote>diffs</quote> because they are generated by the
&man.diff.1; program.</para>
<para>This directory may also contain other files used to build
@ -640,10 +655,10 @@ docbook =
url="../porters-handbook/index.html">FreeBSD Porter's
Handbook</ulink>.</para>
<para>Now that you have enough background information to know what
the ports collection is used for, you are ready to install your
first port. There are two ways this can be done, and each is
explained below.</para>
<para>Now that you have enough background information to know
what the ports collection is used for, you are ready to
install your first port. There are two ways this can be done,
and each is explained below.</para>
<para>Before we get into that, however, you will need to choose a
port to install. There are a few ways to do this, with the
@ -654,27 +669,30 @@ docbook =
a description so you can read a bit about each port before
deciding to install it.</para>
<para>Another method is to use the &man.whereis.1;
command. Simply type <command>whereis <replaceable>file</replaceable></command>,
where <replaceable>file</replaceable> is the program you want to
install. If it is found on
your system, you will be told where it is, as follows:</para>
<para>Another method is to use the &man.whereis.1; command.
Simply type <command>whereis
<replaceable>file</replaceable></command>, where
<replaceable>file</replaceable> is the program you want to
install. If it is found on your system, you will be told
where it is, as follows:</para>
<screen>&prompt.root; <userinput>whereis lsof</userinput>
lsof: /usr/ports/sysutils/lsof</screen>
<para>This tells us that <command>lsof</command> (a system utility)
can be found in the
<filename>/usr/ports/sysutils/lsof</filename> directory.</para>
<para>This tells us that <command>lsof</command> (a system
utility) can be found in the
<filename>/usr/ports/sysutils/lsof</filename>
directory.</para>
<para>Yet another way to find a particular port is by using the
ports collection's built-in search mechanism. To use the search
feature, you will need to be in the
<filename>/usr/ports</filename> directory. Once in that
directory, run <command>make search name=<replaceable>program-name</replaceable></command>
where <replaceable>program-name</replaceable> is the name of the program you
want to find. For example, if you were looking for
<command>lsof</command>:</para>
ports collection's built-in search mechanism. To use the
search feature, you will need to be in the
<filename>/usr/ports</filename> directory. Once in that
directory, run <command>make search
name=<replaceable>program-name</replaceable></command> where
<replaceable>program-name</replaceable> is the name of the
program you want to find. For example, if you were looking
for <command>lsof</command>:</para>
<screen>&prompt.root; <userinput>cd /usr/ports</userinput>
&prompt.root; <userinput>make search name=lsof</userinput>
@ -686,18 +704,19 @@ Index: sysutils
B-deps:
R-deps: </screen>
<para>The part of the output you want to pay particular attention
to is the <quote>Path:</quote> line, since that tells you where to
find the port. The other information provided is not needed in order
to install the port, so it will not be covered
here.</para>
<para>The part of the output you want to pay particular
attention to is the <quote>Path:</quote> line, since that
tells you where to find the port. The other information
provided is not needed in order to install the port, so it
will not be covered here.</para>
<para>For more in-depth searching you can also use
<command>make search key=<replaceable>string</replaceable></command> where
<replaceable>string</replaceable> is some text to search for. This searches
port names, comments, descriptions and dependencies and can be used
to find ports which relate to a particular subject if you don't
know the name of the program you are looking for.</para>
<para>For more in-depth searching you can also use <command>make
search key=<replaceable>string</replaceable></command> where
<replaceable>string</replaceable> is some text to search for.
This searches port names, comments, descriptions and
dependencies and can be used to find ports which relate to a
particular subject if you don't know the name of the program
you are looking for.</para>
<para>In both of these cases, the search string is case-insensitive.
Searching for <quote>LSOF</quote> will yield the same results as
@ -804,43 +823,46 @@ R-deps: </screen>
</note>
<note>
<para>Some shells keep a cache of the commands that are available in
the directories listed in the <envar>PATH</envar> environment
variable, to speed up lookup operations for the executable file of
these commands. If you are using one of these shells, you might
have to use the <command>rehash</command> command after installing
a port, before the newly installed commands can be used. This is
true for both shells that are part of the base-system (such as
<command>tcsh</command>) and shells that are available as ports
(for instance,
<para>Some shells keep a cache of the commands that are
available in the directories listed in the
<envar>PATH</envar> environment variable, to speed up
lookup operations for the executable file of these
commands. If you are using one of these shells, you might
have to use the <command>rehash</command> command after
installing a port, before the newly installed commands can
be used. This is true for both shells that are part of
the base-system (such as <command>tcsh</command>) and
shells that are available as ports (for instance,
<filename role="package">shells/zsh</filename>).</para>
</note>
<note>
<para>Please be aware that the licenses of a few ports do not
allow for inclusion on the CD-ROM. This could be because a
registration form needs
to be filled out before downloading or redistribution is not
allowed, or for another reason. If you wish to install a port not
included on the CD-ROM, you will need to be online in order to
do so (see the <link linkend="ports-inet">next
section</link>).</para>
<para>Please be aware that the licenses of a few ports do
not allow for inclusion on the CD-ROM. This could be
because a registration form needs to be filled out before
downloading or redistribution is not allowed, or for
another reason. If you wish to install a port not
included on the CD-ROM, you will need to be online in
order to do so (see the <link linkend="ports-inet">next
section</link>).</para>
</note>
</sect3>
<sect3 id="ports-inet">
<title>Installing Ports from the Internet</title>
<para>As with the last section, this section makes an assumption
that you have a working Internet connection. If you do not,
you will need to perform the <link linkend="ports-cd">CD-ROM
installation</link>, or put a copy of the distfile into <filename>/usr/ports/distfiles</filename> manually.</para>
<para>As with the last section, this section makes an
assumption that you have a working Internet connection. If
you do not, you will need to perform the <link
linkend="ports-cd">CD-ROM installation</link>, or put a copy
of the distfile into
<filename>/usr/ports/distfiles</filename> manually.</para>
<para>Installing a port from the Internet is done exactly the same
way as it would be if you were installing from a CD-ROM. The
only difference between the two is that the distfile
is downloaded from the Internet instead of read from the
CD-ROM.</para>
<para>Installing a port from the Internet is done exactly the
same way as it would be if you were installing from a
CD-ROM. The only difference between the two is that the
distfile is downloaded from the Internet instead of read
from the CD-ROM.</para>
<para>The steps involved are identical:</para>
@ -879,86 +901,100 @@ Receiving lsof_4.57D.freebsd.tar.gz (439860 bytes): 100%
<para>As you can see, the only difference is the line that tells
you where the system is fetching the port distfile from.</para>
<para>The ports system uses &man.fetch.1; to download the files,
which honors various environment variables, including
<envar>FTP_PASSIVE_MODE</envar>, <envar>FTP_PROXY</envar>,
and <envar>FTP_PASSWORD</envar>. You may need to set one or more
of these if you are behind a firewall, or need to use an FTP/HTTP
proxy. See &man.fetch.3; for the complete list.</para>
<para>The ports system uses &man.fetch.1; to download the
files, which honors various environment variables, including
<envar>FTP_PASSIVE_MODE</envar>, <envar>FTP_PROXY</envar>,
and <envar>FTP_PASSWORD</envar>. You may need to set one or
more of these if you are behind a firewall, or need to use
an FTP/HTTP proxy. See &man.fetch.3; for the complete
list.</para>
<para>For users which cannot be connected all the time, a the
<command>make <makevar>fetch</makevar></command> option is provided.
Just run this command at the top level directory
(<filename>/usr/ports</filename>) and the required files will be
downloaded for you. This command will also work in the lower level
categories, for example: <filename>/usr/ports/net</filename>.</para>
<command>make <makevar>fetch</makevar></command> option is
provided. Just run this command at the top level directory
(<filename>/usr/ports</filename>) and the required files
will be downloaded for you. This command will also work in
the lower level categories, for example:
<filename>/usr/ports/net</filename>.</para>
<note><para>You can build all the ports in a category or as a whole by
running <command>make</command> in the top level directory, just like the
aforementioned <command>make <makevar>fetch</makevar></command> method.
This is dangerous, however, as some ports cannot co-exist. In other
cases, some ports can install two different files with the same
filename.</para></note>
<note><para>You can build all the ports in a category or as a
whole by running <command>make</command> in the top level
directory, just like the aforementioned <command>make
<makevar>fetch</makevar></command> method. This is
dangerous, however, as some ports cannot co-exist. In other
cases, some ports can install two different files with the
same filename.</para></note>
<para>In some rare cases, users may need to acquire the tarballs
from a site other than the <makevar>MASTER_SITES</makevar> (the location
where files are downloaded from). You can override the
<makevar>MASTER_SITES</makevar> option with the following command:</para>
<para>In some rare cases, users may need to acquire the
tarballs from a site other than the
<makevar>MASTER_SITES</makevar> (the location where files
are downloaded from). You can override the
<makevar>MASTER_SITES</makevar> option with the following
command:</para>
<screen>&prompt.root; <userinput>cd /usr/ports/<replaceable>directory</replaceable></userinput></screen>
<screen>&prompt.root; <userinput>make MASTER_SITE_OVERRIDE= \
ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/ fetch</userinput></screen>
<para>In this example we change the <makevar>MASTER_SITES</makevar> option to
<hostid role="fqdn">ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/</hostid>.</para>
<para>In this example we change the
<makevar>MASTER_SITES</makevar> option to <hostid
role="fqdn">ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/</hostid>.</para>
<note><para>Some ports require you to provide build options which can enable/disable
parts of the application which are unneeded, certain security options,
and other customizations. A few which come to mind are
<filename role="package">net/mozilla</filename>,
<filename role="package">security/gpgme</filename>, and
<filename role="package">mail/sylpheed-claws</filename>. A message will be
displayed when options such as these are available.</para></note>
<note><para>Some ports require you to provide build options
which can enable/disable parts of the application which are
unneeded, certain security options, and other
customizations. A few which come to mind are <filename
role="package">net/mozilla</filename>, <filename
role="package">security/gpgme</filename>, and <filename
role="package">mail/sylpheed-claws</filename>. A message
will be displayed when options such as these are
available.</para></note>
</sect3>
<sect3>
<title>Overriding the Default Ports Directories</title>
<para>Sometimes it is useful (or mandatory) to use a different distfiles
and ports directory. The <makevar>PORTSDIR</makevar> and
<makevar>PREFIX</makevar> variables can override the default
directories. For example:</para>
<para>Sometimes it is useful (or mandatory) to use a different
distfiles and ports directory. The
<makevar>PORTSDIR</makevar> and <makevar>PREFIX</makevar>
variables can override the default directories. For
example:</para>
<screen>&prompt.root; <userinput>make PORTSDIR=/usr/home/example/ports install</userinput></screen>
<para>will compile the port in <filename>/usr/home/example/ports</filename> and
install everything under <filename>/usr/local</filename>.</para>
<para>will compile the port in
<filename>/usr/home/example/ports</filename> and install
everything under <filename>/usr/local</filename>.</para>
<screen>&prompt.root; <userinput>make PREFIX=/usr/home/example/local install</userinput></screen>
<para>will compile it in <filename>/usr/ports</filename> and install it in
<para>will compile it in <filename>/usr/ports</filename> and
install it in
<filename>/usr/home/example/local</filename>.</para>
<para>And of course,</para>
<screen>&prompt.root; <userinput>make PORTSDIR=../ports PREFIX=../local install</userinput></screen>
<para>will combine the two (it is too long to completely write on
this page, but it should give you the general idea).</para>
<para>will combine the two (it is too long to completely write
on this page, but it should give you the general
idea).</para>
<para>Alternatively, these variables can also be set
as part of your environment. Read the manual page for your shell for
instructions on doing so.</para>
<para>Alternatively, these variables can also be set as part
of your environment. Read the manual page for your shell
for instructions on doing so.</para>
</sect3>
<sect3>
<title>Dealing with <command>imake</command></title>
<para>Some ports that use <command>imake</command> (a part of the X Windows
System) do not work well with <makevar>PREFIX</makevar>, and will insist on
installing under <filename>/usr/X11R6</filename>. Similarly, some Perl ports
ignore <makevar>PREFIX</makevar> and install in the Perl tree. Making these
ports respect <makevar>PREFIX</makevar> is a difficult or impossible
<para>Some ports that use <command>imake</command> (a part of
the X Windows System) do not work well with
<makevar>PREFIX</makevar>, and will insist on installing
under <filename>/usr/X11R6</filename>. Similarly, some Perl
ports ignore <makevar>PREFIX</makevar> and install in the
Perl tree. Making these ports respect
<makevar>PREFIX</makevar> is a difficult or impossible
job.</para>
</sect3>
@ -1008,12 +1044,13 @@ Receiving lsof_4.57D.freebsd.tar.gz (439860 bytes): 100%
<primary>ports</primary>
<secondary>disk-space</secondary>
</indexterm>
<para>Using the ports collection can defiantly eat up your disk space.
For this reason you should always remember to clean up the work
directories using the <command>make <makevar>clean</makevar></command>
option. This will remove the <filename>work</filename> directory after
a port has been built, and installed. You can also remove the tar files
from the <filename>distfiles</filename> directory, and remove the
<para>Using the ports collection can defiantly eat up your disk
space. For this reason you should always remember to clean up
the work directories using the <command>make
<makevar>clean</makevar></command> option. This will remove
the <filename>work</filename> directory after a port has been
built, and installed. You can also remove the tar files from
the <filename>distfiles</filename> directory, and remove the
installed ports when their use has delimited.</para>
<para>Some users choose to limit the port categories by placing an entry
@ -1029,41 +1066,45 @@ Receiving lsof_4.57D.freebsd.tar.gz (439860 bytes): 100%
<primary>ports</primary>
<secondary>upgrading</secondary>
</indexterm>
<para>Keeping your ports up to date can be a tedious job. For instance,
to upgrade a port you would go to the ports directory, build the port,
deinstall the old port, install the new port, and then cleaning up
after the build. Imagine doing that for five ports, tedious right?
This was a large problem for system administrators to deal with,
and now we have utilities which do this for us. For instance the
<filename role="port">sysutils/portupgrade</filename> utility will
do everything for you! Just install it like you would any other
port, using the <command>make <makevar>install clean</makevar></command>
command.</para>
<para>Keeping your ports up to date can be a tedious job. For
instance, to upgrade a port you would go to the ports
directory, build the port, deinstall the old port, install the
new port, and then cleaning up after the build. Imagine doing
that for five ports, tedious right? This was a large problem
for system administrators to deal with, and now we have
utilities which do this for us. For instance the <filename
role="port">sysutils/portupgrade</filename> utility will do
everything for you! Just install it like you would any other
port, using the <command>make <makevar>install
clean</makevar></command> command.</para>
<para>Now create a database with the <command>pkgdb -F</command> command.
This will read the list of installed ports and create a database file
in the <filename>/var/db/pkg</filename> directory. Now when you run
<command>portupgrade -a</command>, it will read this and the ports
<filename>INDEX</filename> file. Finally, <command>portupgrade</command>
will begin to download, build, backup, install, and clean the ports
which have been updated. Other utilities exist which will do this,
check out the <filename>ports/sysutils</filename> directory and see
what you come up with.</para>
<para>Now create a database with the <command>pkgdb -F</command>
command. This will read the list of installed ports and
create a database file in the <filename>/var/db/pkg</filename>
directory. Now when you run <command>portupgrade
-a</command>, it will read this and the ports
<filename>INDEX</filename> file. Finally,
<command>portupgrade</command> will begin to download, build,
backup, install, and clean the ports which have been updated.
Other utilities exist which will do this, check out the
<filename>ports/sysutils</filename> directory and see what you
come up with.</para>
</sect2>
</sect1>
<sect1 id="ports-nextsteps">
<title>Post-installation activities</title>
<para>After installing a new application you will normally want to read
any documentation it may have included, edit any configuration files
that are required, ensure that the application starts at boot time (if
it is a daemon), and so on.</para>
<para>After installing a new application you will normally want to
read any documentation it may have included, edit any
configuration files that are required, ensure that the
application starts at boot time (if it is a daemon), and so
on.</para>
<para>The exact steps you need to take to configure each application will
obviously be different. However, if you have just installed a new
application and are wondering <quote>What now?</quote> these tips might
help:</para>
<para>The exact steps you need to take to configure each
application will obviously be different. However, if you have
just installed a new application and are wondering <quote>What
now?</quote> these tips might help:</para>
<itemizedlist>
<listitem>
@ -1073,35 +1114,36 @@ Receiving lsof_4.57D.freebsd.tar.gz (439860 bytes): 100%
<screen>&prompt.root; <userinput>pkg_info -L foopackage-1.0.0 | less</userinput></screen>
<para>will show all the files installed by the package. Pay special
attention to files in <filename>man/</filename> directories, which
will be manual pages, <filename>etc/</filename> directories, which
will be configuration files, and <filename>doc/</filename>, which will be
more comprehensive documentation.</para>
<para>will show all the files installed by the package. Pay
special attention to files in <filename>man/</filename>
directories, which will be manual pages,
<filename>etc/</filename> directories, which will be
configuration files, and <filename>doc/</filename>, which
will be more comprehensive documentation.</para>
<para>If you are not sure which version of the application was just
installed, a command like this</para>
<para>If you are not sure which version of the application was
just installed, a command like this</para>
<screen>&prompt.root; <userinput>pkg_info | grep <replaceable>foopackage</replaceable></userinput></screen>
<para>will find all the installed packages that have
<replaceable>foopackage</replaceable> in the package name. Replace
<replaceable>foopackage</replaceable> in your command line as
necessary.</para>
<replaceable>foopackage</replaceable> in the package name.
Replace <replaceable>foopackage</replaceable> in your
command line as necessary.</para>
</listitem>
<listitem>
<para>Once you have identified where the application's manual pages
have been installed, review them using &man.man.1;. Similarly,
look over the sample configuration files, and any additional
documentation that may have been provided.</para>
<para>Once you have identified where the application's manual
pages have been installed, review them using &man.man.1;.
Similarly, look over the sample configuration files, and any
additional documentation that may have been provided.</para>
</listitem>
<listitem>
<para>If the application has a web site, check it for additional
documentation, frequently asked questions, and so forth. If
you are not sure of the web site address it may be listed in the
output from</para>
<para>If the application has a web site, check it for
additional documentation, frequently asked questions, and so
forth. If you are not sure of the web site address it may
be listed in the output from</para>
<screen>&prompt.root; <userinput>pkg_info <replaceable>foopackage-1.0.0</replaceable></userinput></screen>
@ -1114,8 +1156,8 @@ Receiving lsof_4.57D.freebsd.tar.gz (439860 bytes): 100%
<sect1 id="ports-broken">
<title>Dealing with Broken Ports</title>
<para>If you come across a port that does not work for you, there are
a few things you can do, including:</para>
<para>If you come across a port that does not work for you,
there are a few things you can do, including:</para>
<orderedlist>
<listitem>
@ -1128,15 +1170,16 @@ Receiving lsof_4.57D.freebsd.tar.gz (439860 bytes): 100%
<listitem>
<para>Gripe&mdash;<emphasis>by email only</emphasis>! Send
email to the maintainer of the port first. Type <command>make
maintainer</command> or read the <filename>Makefile</filename>
to find the maintainer's email address. Remember to include
the name and version of the port (send the
<literal>&dollar;FreeBSD:</literal> line from the
<filename>Makefile</filename>) and the output leading up to the
error when you email the maintainer. If you do not get a
response from the maintainer, you can use
&man.send-pr.1; to submit a bug report.</para>
email to the maintainer of the port first. Type
<command>make maintainer</command> or read the
<filename>Makefile</filename> to find the maintainer's
email address. Remember to include the name and version
of the port (send the <literal>&dollar;FreeBSD:</literal>
line from the <filename>Makefile</filename>) and the
output leading up to the error when you email the
maintainer. If you do not get a response from the
maintainer, you can use &man.send-pr.1; to submit a bug
report.</para>
</listitem>
<listitem>
@ -1147,8 +1190,8 @@ Receiving lsof_4.57D.freebsd.tar.gz (439860 bytes): 100%
directory</ulink>, but be sure to check your local mirror
<emphasis>first</emphasis>! These are more likely to work
than trying to compile from source and are a lot faster as
well. Use the &man.pkg.add.1; program to install the package
on your system.</para>
well. Use the &man.pkg.add.1; program to install the
package on your system.</para>
</listitem>
</orderedlist>
</sect1>