summaryrefslogtreecommitdiff
path: root/static/openbsd/man7/ports.7
diff options
context:
space:
mode:
Diffstat (limited to 'static/openbsd/man7/ports.7')
-rw-r--r--static/openbsd/man7/ports.7734
1 files changed, 734 insertions, 0 deletions
diff --git a/static/openbsd/man7/ports.7 b/static/openbsd/man7/ports.7
new file mode 100644
index 00000000..7fbf270f
--- /dev/null
+++ b/static/openbsd/man7/ports.7
@@ -0,0 +1,734 @@
+.\"
+.\" Copyright (c) 1997 David E. O'Brien
+.\"
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\" notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\" notice, this list of conditions and the following disclaimer in the
+.\" documentation and/or other materials provided with the distribution.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY EXPRESS OR
+.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+.\" IN NO EVENT SHALL THE DEVELOPERS BE LIABLE FOR ANY DIRECT, INDIRECT,
+.\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+.\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+.\"
+.\" $OpenBSD: ports.7,v 1.132 2023/09/07 17:19:19 espie Exp $
+.\" $FreeBSD: ports.7,v 1.7 1998/06/23 04:38:50 hoek Exp $
+.\"
+.Dd $Mdocdate: September 7 2023 $
+.Dt PORTS 7
+.Os
+.Sh NAME
+.Nm ports
+.Nd contributed applications
+.Sh DESCRIPTION
+The
+.Ox
+Ports Collection
+is the infrastructure used to create binary packages for third party
+applications.
+.Pp
+For normal usage refer to
+.Xr packages 7 ,
+as most ports produce binary packages which are available from
+the official HTTP mirrors.
+.Pp
+Each port contains any patches necessary to make the original
+application source code compile and run on
+.Ox .
+Compiling an application is as simple as typing
+.Ic make
+in the port directory!
+The
+.Pa Makefile
+automatically fetches the
+application source code, either from a local disk or via HTTP, unpacks it
+on the local system, applies the patches, and compiles it.
+If all goes well, simply type
+.Ic doas make install
+to install the application.
+.Pp
+For more information about using ports, see
+.Lk https://www.openbsd.org/faq/ports/ports.html "Working with Ports" .
+For information about creating new ports, see
+.Lk https://www.openbsd.org/faq/ports/ "The OpenBSD Porter's Handbook" .
+.Pp
+For a detailed description of the build process, see
+.Xr bsd.port.mk 5 .
+.Sh PORTS MASTER MAKEFILE
+The ports master Makefile, normally located in
+.Pa /usr/ports/Makefile
+(but see
+.Ev PORTSDIR
+below)
+offers a few deprecated targets for the time being.
+.Bl -tag -width print-index
+.It Cm print-index
+display the contents of the index in a
+.Sq user-friendly
+way,
+.It Cm search
+invoked with a key, e.g.,
+.Ic make search key=foo ,
+retrieve information relevant to a given port (obsolescent).
+.El
+.Pp
+Starting in
+.Ox 4.0 ,
+there is a port,
+.Pa databases/sqlports ,
+that builds an sqlite database containing most information relevant to
+every port in the ports tree.
+This database can be searched using any tool able to manipulate such
+databases, for instance sqlitebrowser, or a script language with an
+sqlite interface, e.g., perl, python, ocaml, lua, php.
+.Pp
+All static index generating information has now been superseded by the
+.Pa sqlports ,
+.Pa portslist
+or
+.Pa pkglocatedb
+packages, which contain
+similar information to the old INDEX file, but are frequently updated.
+See
+.Pa databases/sqlports
+.Pa databases/pkglocatedb
+and
+.Xr pkg_mklocatedb 1
+for details.
+.Sh SELECTING A SET OF PORTS
+One can define
+.Ev SUBDIRLIST
+to point to a file that contains a list of
+.Ev FULLPKGPATHs ,
+one per line, to build stuff only in some directories.
+.Pp
+If
+.Pa portslist
+is up to date, it is possible to select subsets by setting the following
+variables on the command line:
+.Bl -tag -width category
+.It Va key
+package name matching the given key,
+.It Va category
+port belonging to category,
+.It Va maintainer
+port maintained by a given person.
+.El
+.Pp
+For instance, to invoke
+.Cm clean
+on all ports in the x11 category, one can say:
+.Bd -literal -offset indent
+$ make category=x11 clean
+.Ed
+.Pp
+The index search is done by a perl script, so all regular expressions from
+.Xr perlre 1
+apply.
+.Sh TARGETS
+Individual ports are controlled through a few documented targets.
+Some of these targets work recursively through subdirectories, so that
+someone can, for example, install all of the net
+ports.
+.Pp
+The variable
+.Ev SKIPDIR
+can hold a set of package directories to avoid during recursion.
+These are always specified relative to the root of the ports tree,
+and can contain a flavor or subpackage part
+.Po
+see
+.Xr packages-specs 7
+.Pc .
+.Ev SKIPDIR
+is handled by a
+.Ic case
+statement, and so can contain simple wildcards
+.Po
+see
+.Xr sh 1
+.Dq File name patterns
+.Pc ,
+e.g., SKIPDIR='editors/openoffice*'.
+.Pp
+The variable
+.Ev STARTDIR
+can hold the path to a starting directory.
+The recursion will skip all directories up to that package path.
+This can be used to resume a full build at some specific point without having
+to go through thousands of directories first.
+.Pp
+The variable
+.Ev STARTAFTER
+can hold the path to a starting directory.
+The recursion will skip all directories up to and including that package path.
+This can be used to resume a full build after some specific point without having
+to go through thousands of directories first.
+.Pp
+In case of failure in a subdirectory, the shell fragment held in
+.Ev REPORT_PROBLEM
+is executed.
+Default behavior is to call exit, but this can be overridden on the command
+line, e.g., to avoid stopping after each problem.
+.Bd -literal -offset indent
+$ make REPORT_PROBLEM=true
+.Ed
+.Pp
+If
+.Ev REPORT_PROBLEM_LOGFILE
+is non empty, then
+.Ev REPORT_PROBLEM
+will default to:
+.Bd -literal -offset indent
+echo $$subdir ($@) >>$${REPORT_PROBLEM_LOGFILE}
+.Ed
+.Pp
+That is, any failure will append the faulty directory name together
+with the target that failed to
+.Pa ${REPORT_PROBLEM_LOGFILE}
+and proceed.
+.Pp
+Some targets that do this are
+.Cm all , build , checksum , clean ,
+.Cm configure , extract , fake ,
+.Cm fetch , install , distclean ,
+.Cm deinstall , reinstall , package , prepare ,
+.Cm show , regress ,
+.Cm lib-depends-check ,
+.Cm license-check , all-dir-depends , build-dir-depends ,
+.Cm run-dir-depends
+and
+.Cm generate-readmes .
+.Pp
+Target names starting with
+.Sq _
+are private to the ports infrastructure,
+should not be invoked directly, and are liable to change without notice.
+.Pp
+In the following list, each target will run the preceding targets
+in order automatically.
+That is,
+.Cm build
+will be run
+.Pq if necessary
+by
+.Cm install ,
+and so on all the way to
+.Cm fetch .
+In typical use, one will only run
+.Cm install
+explicitly (as normal user, with
+.Ev SUDO
+defined in
+.Pa /etc/mk.conf ) ,
+or
+.Cm build
+(as user), then
+.Cm install
+(as root).
+.Bl -tag -width configure
+.It Cm fetch
+Fetch all of the files needed to build this port from the site(s)
+listed in
+.Ev SITES .
+See
+.Ev FETCH_CMD .
+Use
+.Xr dpb 1
+with option
+.Fl F
+to quickly fetch distfiles for a subtree.
+.It Cm checksum
+Verify that the fetched distfile matches the one the port was tested against.
+Defining
+.Ev NO_CHECKSUM
+to
+.Dv Yes
+will skip this step.
+Sometimes, distfiles change without warning.
+The main
+.Ox
+mirror should still hold a copy of old distfiles, indexed by checksum.
+Using
+.Bd -literal -offset indent
+$ make checksum REFETCH=true
+.Ed
+.Pp
+will try to get a set of distfiles that match the recorded checksum.
+.It Cm prepare
+Install
+any build dependencies of the current port.
+Defining
+.Ev NO_DEPENDS
+to
+.Dv Yes
+will skip this step.
+.It Cm extract
+Expand the distfile into a work directory.
+.It Cm patch
+Apply any patches that are necessary for the port.
+.It Cm gen
+Recreate configure machinery if needed, mainly used by GNU based software
+that wants autogen/autoconf/automake.
+.It Cm configure
+Configure the port.
+Some ports will ask questions during this stage.
+See
+.Ev INTERACTIVE
+and
+.Ev BATCH .
+.It Cm build
+Build the port.
+This is the same as calling the
+.Cm all
+target.
+.It Cm fake
+Pretend to install the port under a subdirectory of the work directory.
+.It Cm generate-readmes
+Create READMEs and rc scripts under the fake subdirectory.
+.It Cm package
+Create a binary package from the fake installation.
+The package is a .tgz file that can be used to
+install the port with
+.Xr pkg_add 1 .
+.It Cm install
+Install the resulting package.
+.El
+.Pp
+The following targets are not run during the normal install process
+.Po
+exception
+.Cm clean
+is run for dependencies with the default settings of
+.Ev BULK Ns = Ns Dv Auto
+.Pc .
+.Bl -tag -width fetch-list
+.It Cm print-build-depends , print-run-depends
+Print an ordered list of all the compile and run dependencies.
+.It Cm clean
+Remove the expanded source code.
+This does not recurse to dependencies unless
+.Ev CLEANDEPENDS
+is defined to
+.Dv Yes .
+.It Cm distclean
+Remove the port's distfile(s).
+This does not recurse to dependencies.
+.It Cm regress
+Runs the ports regression tests.
+Usually needs a completed build.
+.It Cm reinstall
+Use this to restore a port after using
+.Xr pkg_delete 1 .
+.It Cm update
+Alternative target to
+.Cm install .
+Does not install new packages, but updates existing ones.
+.El
+.Sh LOCK INFRASTRUCTURE
+The ports tree can be used concurrently for building several ports at the
+same time, thanks to a locking mechanism.
+By default, locks are stored under
+.Pa /tmp/portslocks .
+Defining
+.Ev LOCKDIR
+will point them elsewhere, or disable the mechanism if set to an empty value.
+.Pp
+All locks will be stored in
+.Pa ${LOCKDIR} .
+.Ev LOCK_CMD
+should be used to acquire a lock, and
+.Ev UNLOCK_CMD
+should be used to release it.
+.Pp
+Locks are named
+.Pa ${LOCKDIR}/${FULLPKGNAME}.lock ,
+or
+.Pa ${LOCKDIR}/${DISTFILE}.lock
+for distfiles fetching.
+.Pp
+The default values of
+.Ev LOCK_CMD
+and
+.Ev UNLOCK_CMD
+are appropriate for most uses.
+.Pp
+The locking protocol follows a big-lock model: each top-level target
+in a port directory will acquire the corresponding lock, complete its job,
+then release the lock, e.g., running
+.Bd -literal -offset indent
+$ make build
+.Ed
+.Pp
+will acquire the lock, run the port
+through
+.Cm fetch ,
+.Cm checksum ,
+.Cm extract ,
+.Cm patch ,
+.Cm configure ,
+.Cm build ,
+then release the lock.
+If dependencies are involved, they will invoke top-level targets in other
+directories, and thus acquire some other locks as well.
+.Pp
+The infrastructure contains some protection against acquiring the same lock
+twice, thus recursive locking is not needed for
+.Ev LOCK_CMD .
+.Pp
+Starting with
+.Ox 4.3 ,
+the infrastructure supports manual locking: the targets
+.Cm lock
+and
+.Cm unlock
+can be used to acquire and release individual locks.
+Both these targets output a shell command that must be used to update
+environment variables.
+Manual locking can be used to protect a directory against interference
+by an automated build job, while the user is looking at or modifying a
+given port.
+.Sh UPDATING PACKAGES
+Instead of deinstalling each package and rebuilding from scratch, the
+ports tree can be used to update installed packages.
+The
+.Cm update
+target will replace an installed package using
+.Xr pkg_add 1
+in replacement mode.
+If
+.Ev FORCE_UPDATE
+is set to
+.Dv Yes ,
+dependencies will also be updated first, and packages will always be updated,
+even if there is no difference between the old and the new packages.
+.Pp
+Updates use a mechanism similar to bulk cookies and deposit cookies in
+the
+.Ev UPDATE_COOKIES_DIR .
+See the next section for more details, since most of the fine points of
+bulk package building also apply to updates.
+.Pp
+However, also note that
+.Li make update
+is not guaranteed to work, see
+.Sx CAVEATS
+below.
+.Sh BULK PACKAGE BUILDING
+Building any significant number of packages from the ports tree should use
+.Xr dpb 1 ,
+a tool located inside the ports tree proper
+.Po
+normally as
+.Pa /usr/ports/infrastructure/bin/dpb
+.Pc .
+In particular, it can take advantage of machine clusters (same architecture
+and same installation), and of multi-core machines.
+.Pp
+For more detailed information, see
+.Xr bulk 8 .
+.Sh FLAVORS
+The
+.Ox
+ports tree comes with a mechanism called
+.Ic FLAVORS .
+Thanks to this mechanism, users can select specific options provided by
+a given port.
+.Pp
+If a port is
+.Qq flavored ,
+there should be a terse description of available flavors in the
+.Pa pkg/DESCR
+file.
+.Pp
+For example, the
+.Pa misc/screen
+port comes with a flavor called
+.Ic static .
+This changes the building process so a statically compiled version of
+the program will be built.
+To avoid confusion with other packages or flavors,
+the package name will be extended with a dash-separated list of
+the selected flavors.
+.Pp
+In this instance, the corresponding package will be called
+.Ic screen-4.0.2-static .
+.Pp
+To see the flavors of a port, use the
+.Cm show
+target:
+.Bd -literal -offset indent
+$ make show=FLAVORS
+.Ed
+.Pp
+To build a port with a specific flavor, just pass
+.Ev FLAVOR
+in the environment of the
+.Xr make 1
+command:
+.Bd -literal -offset indent
+$ env FLAVOR="static" make package
+.Ed
+.Pp
+and of course, use the same settings for the subsequent invocations of make:
+.Bd -literal -offset indent
+$ env FLAVOR="static" make install
+$ env FLAVOR="static" make clean
+.Ed
+.Pp
+More than one flavor may be specified:
+.Bd -literal -offset indent
+$ cd /usr/ports/mail/exim
+$ env FLAVOR="mysql ldap" make package
+.Ed
+.Pp
+Specifying a flavor that does not exist is an error.
+Additionally, some ports impose some further restrictions on flavor
+combinations, when such combinations do not make sense.
+.Pp
+Lots of ports can be built without X11 requirement and accordingly
+have a
+.Ic no_x11
+flavor.
+.Pp
+Flavor settings are not propagated to dependencies.
+If a specific combination is needed, careful hand-building of the
+required set of packages is still necessary.
+.Sh MULTI_PACKAGES
+The
+.Ox
+ports tree comes with a mechanism called
+.Ic MULTI_PACKAGES .
+This mechanism is used when a larger package is broken down into
+several smaller components referred to as subpackages.
+.Pp
+If a port is
+.Qq subpackaged ,
+each subpackage will have a corresponding description in the
+.Pa pkg/DESCR-subpackage
+file.
+.Pp
+For example, the
+.Pa databases/mariadb
+port comes with subpackages called
+.Ic -main ,
+.Ic -tests
+and
+.Ic -server .
+.Pp
+In this instance, the build will yield multiple packages, one
+corresponding to each subpackage.
+In the case of our mariadb example,
+the packages will be called
+.Ic mariadb-client-<version> ,
+.Ic mariadb-tests-<version> ,
+and
+.Ic mariadb-server-<version> .
+.Pp
+To install/deinstall a specific subpackage of a port, you may
+.Xr pkg_add 1
+them manually, or alternatively, you may set
+.Ev SUBPACKAGE
+in the environment of the
+.Xr make 1
+command during the install/deinstall phase:
+.Bd -literal -offset indent
+$ env SUBPACKAGE="-server" make install
+$ env SUBPACKAGE="-server" make deinstall
+.Ed
+.Sh PORT VARIABLES
+These can be changed in the environment, or in
+.Pa /etc/mk.conf
+for persistence.
+They can also be set on make's command line, e.g.,
+.Ic make VAR_FOO Ns = Ns Dv foo
+.Pp
+Boolean variables should be set to
+.Dv Yes
+instead of simply being defined, for uniformity and future compatibility.
+.Pp
+Variable names starting with
+.Sq _
+are private to the ports infrastructure,
+should not be changed by the user, and are liable to change without notice.
+.Bl -tag -width PORTS_PRIVSEP
+.It Ev PORTS_PRIVSEP
+If set to
+.Sq Yes ,
+all operations will happen as restricted users
+.Ar _pfetch
+and
+.Ar _pbuild .
+.It Ev PORTSDIR
+Location of the ports tree
+(usually
+.Pa /usr/ports ) .
+.It Ev DISTDIR
+Where to find/put distfiles, normally
+.Pa ${PORTSDIR}/distfiles .
+.It Ev PACKAGE_REPOSITORY
+Used only for the
+.Cm package
+target; the base directory for the packages tree, normally
+.Pa ${PORTSDIR}/packages .
+If this directory exists, the package tree will be (partially) constructed.
+.It Ev BULK_COOKIES_DIR
+During bulk package building, used to store cookies for already built
+packages to avoid rebuilding them, since the actual
+working directory will already have been cleaned out.
+Defaults to
+.Pa ${PORTSDIR}/bulk/${MACHINE_ARCH} .
+.It Ev UPDATE_COOKIES_DIR
+Used to store cookies for package updates, defaults to
+.Pa ${PORTSDIR}/update/${MACHINE_ARCH} .
+If set to empty, it will revert to a file under
+.Pa ${WRKDIR} .
+.It Ev LOCALBASE
+Where to install things in general
+(usually
+.Pa /usr/local ) .
+.It Ev SITES
+Primary sites for distribution files if not found locally.
+.It Ev CLEANDEPENDS
+If set to
+.Dv Yes ,
+let
+.Cm clean
+recurse to dependencies.
+.It Ev FETCH_CMD
+Command to use to fetch files.
+Normally
+.Xr ftp 1 .
+.It Ev FETCH_PACKAGES
+If set,
+try to use as options to
+.Xr pkg_add 1
+to install missing packages from
+.Ev PKG_PATH .
+.Xr bsd.port.mk 5
+does not set
+.Ev FETCH_PACKAGES ,
+so even an empty value amounts to setting the variable.
+.Pp
+For instance, to run
+.Xr pkg_add 1
+with default options :
+.Bd -literal -offset indent
+make FETCH_PACKAGES=
+.Ed
+.Pp
+or, to use the snapshots directory during the final beta period:
+.Bd -literal -offset indent
+make FETCH_PACKAGES=-Dsnap
+.Ed
+.It Ev PATCH_DEBUG
+If defined, display verbose output when applying each patch.
+.It Ev INTERACTIVE
+If defined, only operate on a port if it requires interaction.
+.It Ev BATCH
+If defined, only operate on a port if it can be installed 100% automatically.
+.El
+.Sh USING A READ-ONLY PORTS TREE
+Select read-write partition(s) that can accommodate working directories, the
+distfiles repository, and the built packages.
+Set
+.Ev WRKOBJDIR ,
+.Ev PACKAGE_REPOSITORY ,
+.Ev BULK_COOKIES_DIR ,
+.Ev UPDATE_COOKIES_DIR ,
+.Ev DISTDIR ,
+and
+.Ev PLIST_REPOSITORY
+in
+.Pa /etc/mk.conf
+accordingly.
+.Sh FILES
+.Bl -tag -width /usr/ports/xxxxxxxx -compact
+.It Pa /usr/ports
+The default ports directory.
+.It Pa /usr/ports/Makefile
+Ports master Makefile.
+.It Pa /usr/local/share/ports-INDEX
+Ports index, part of the
+.Pa portlist
+package.
+.It Pa /usr/ports/pobj
+Build directories.
+A number of insecurely coded ports require a dedicated file system with the
+.Cm wxallowed
+.Xr mount 8
+option.
+.It Pa /usr/ports/infrastructure/mk/bsd.port.mk
+The ports main engine.
+.It Pa /usr/ports/infrastructure/db/network.conf
+Network configuration.
+.It Pa /usr/ports/infrastructure/db/user.list
+List of users and groups created by ports.
+.El
+.Sh SEE ALSO
+.Xr dpb 1 ,
+.Xr make 1 ,
+.Xr pkg_add 1 ,
+.Xr pkg_create 1 ,
+.Xr pkg_delete 1 ,
+.Xr pkg_info 1 ,
+.Xr bsd.port.mk 5 ,
+.Xr port-modules 5 ,
+.Xr mirroring-ports 7 ,
+.Xr packages 7
+.Pp
+The
+.Ox
+Ports System:
+.Lk https://www.openbsd.org/faq/ports/ports.html
+.Pp
+The
+.Ox
+Porter's Handbook:
+.Lk https://www.openbsd.org/faq/ports/
+.Sh HISTORY
+.Nm The Ports Collection
+appeared in
+.Fx 1.0 .
+It was introduced in
+.Ox
+by Ejovi Nuwere, with much initial effort by Angelos D. Keromytis.
+Maintenance passed then to Marco S. Hyman, and then to Christopher Turan.
+It is currently managed by Marc Espie, Christian Weisgerber,
+along with a host of others found at
+.Mt ports@openbsd.org .
+.Sh AUTHORS
+This man page was originated by
+.An David O'Brien ,
+from the
+.Fx
+project.
+.Sh CAVEATS
+Building a new version of an already installed package is not guaranteed
+to work.
+.Pp
+The safer way would be to create a sandbox for building the updated port
+using
+.Xr proot 1
+.Po see also
+.Xr bulk 8
+.Pc ,
+and then update the installed package.
+.Pp
+Specifically: most software expects building in a virgin environment
+with only the required dependency.
+As a result, lots of time, libraries and headers under
+.Pa /usr/local
+will be favored over the currently building version.