Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
PORTMASTER(8)		    System Manager's Manual		 PORTMASTER(8)

NAME
       portmaster -- manage your ports without external	databases or languages

SYNOPSIS
       Common	 Flags:	   [--force-config    -CGHKdgntvw    -[B|b]    -[f|i]]
       [[[--packages|-P]|[--packages-only|-PP]]	    |	   [--packages-build]]
       [--packages-if-newer]	   [--delete-build-only]      [--always-fetch]
       [--backup-format=<fmt>]			      [--package-format=<fmt>]
       [--local-packagedir=<path>]    [--packages-local]   [--delete-packages]
       [--no-confirm]		[--no-term-title]	    [--no-index-fetch]
       [--index|--index-first|--index-only]    [-m    arguments	   for	 make]
       [-x glob	pattern	to exclude from	building] [--try-broken]
       portmaster [Common Flags] full name of port directory in	/var/db/pkg
       portmaster [Common Flags] full path to /usr/ports/foo/bar
       portmaster [Common Flags] glob pattern of directories from /var/db/pkg

       portmaster [Common Flags] [-U|--update-if-newer]	Multiple full names or
		  paths	from /usr/ports	or /var/db/pkg,	and/or multiple	 globs
		  from /var/db/pkg
       portmaster [Common Flags]
		   . (Use in /usr/ports/foo/bar	to build that port)
       portmaster [Common Flags] -a
       portmaster --show-work [-Gv] [-m	args] <single port, as above>
       portmaster  [Common  Flags]  -o _new port dir in	/usr/ports_ _installed
		  port_
       portmaster [Common Flags] [-R] -r name/glob of port in /var/db/pkg (can
		  be specified more than once)
       portmaster -l
       portmaster [--index-only	[-t]] -L
       portmaster --list-origins
       portmaster [--force-config|-G] [-P|-PP] [-aftv] -F
       portmaster [-n|y] [-b] [-D|d|--prompt-clean-distfiles] -e name/glob  of
		  a single port	directory in /var/db/pkg
       portmaster [-n|y] [-b] [-D|d|--prompt-clean-distfiles] -s
       portmaster [-n|y] [-t] --clean-distfiles
       portmaster [-n|y] [--index|-index-only] --clean-packages
       portmaster [-n|y] [--index|-index-only] [-v] --check-depends
       portmaster [-n|y] [-v] --check-port-dbdir
       portmaster -h|--help
       portmaster --version

		  The  "glob" patterns mentioned above are not regular expres-
		  sions.  For example: "portmaster  perl"  would  match	 every
		  port	directory  name	 in  /var/db/pkg that fits the pattern
		  "/var/db/pkg/perl*".

QUICK START GUIDE
       This manual contains a lot of valuable  information  about  portmaster,
       and  you	 should	read the entire	manual to give you a better idea about
       how it works and	what choices are available to you.  However in the in-
       terests of getting you started quickly please see the EXAMPLES  section
       at the end of the manual.

DESCRIPTION
       The  portmaster utility is a tool for updating your ports.  It does not
       use an external database	to track what you have installed.   Rather  it
       uses  the  existing  ports infrastructure, including what is located in
       /var/db/pkg.  The focus of this tool is to keep the dependency tracking
       information for your ports up to	date.  This allows you to  safely  up-
       date  a specific	port without having to update all of the ports "above"
       it.  In the rare	case where you do need to recompile ports which	depend
       on a port you are updating, the -r option exists	to accomplish this.

       By default portmaster updates the port you specify on the command line.
       This will occur whether there is	a new version for it or	not.  It  will
       first  recurse through the port and all of its dependencies (if any) to
       handle any port OPTIONS via the 'make config' interface.	 You  will  be
       presented  with	an OPTIONS dialog if you have never built the port be-
       fore, or	if the OPTIONS have changed.  You can force  dialogs  for  all
       ports by	using the --force-config option.

       While  recursing	 through dependencies, if you are not using any	of the
       --packages* options, a 'make checksum' process will be launched in  the
       background to either verify that	the correct distfiles are available or
       start downloading the new ones.	If you stop portmaster with ^C,	an at-
       tempt  will  be	made  to kill off the child processes started for this
       purpose.

       While checking dependencies if a	port has CONFLICTS set	they  will  be
       compared	 to  your installed ports and if you already have an alternate
       version of the dependency that is required by the port you are building
       it will be used in place	of the default dependency.

       When the	config and dependency checking phase is	over the user will  be
       presented  with a list of ports that will be installed and/or upgraded,
       and asked to approve before proceeding.	 This  behavior	 can  be  sup-
       pressed with the	--no-confirm option.

       If  the	dependency check does not find a port that needs updating that
       step will be skipped prior to building the  port(s)  specified  on  the
       command	line.  In addition to this optimization, information about up-
       to-date dependencies, choices made on which ports to build for interac-
       tive mode, and ports already visited for	'make config' are  all	cached
       to enhance performance and prevent duplicated efforts.

       While recursing through the dependencies, if a port is marked IS_INTER-
       ACTIVE  this will be flagged.  In the absence of	this notification, un-
       der normal circumstances	no user	interaction is required	after the port
       starts building.	 If the	--prompt-clean-distfiles is used,  a  question
       regading	 the  deletion of stale	distfiles will occur eaxch time	a port
       has been	built.	The -d option can be used to  delete  stale  distfiles
       after  each  successful	upgrade	of a port.  The	-D option used to sup-
       press the deletion of stale distfiles and has now  been	made  the  de-
       fault.  There are a number of --packages* options available to save the
       time  that  would normally be spent building the	port(s).  Users	inter-
       ested in	a reasonable balance between speed of installation and maximum
       performance should consider the --packages-build	option,	 perhaps  com-
       bined with the --delete-build-only option.

       If  there  is  no -B option specified when updating an existing port, a
       backup package will be created before pkg-delete(8) is called.  If  you
       are  using  the	-b  option, these packages can be found	in a directory
       called "portmaster-backup" in the directory specified by	 the  PACKAGES
       environment  variable,  usually /usr/ports/packages.  If	there is no -b
       option specified, the backup package will be deleted once the new  ver-
       sion  of	the port is successfully installed.  If	the installation fails
       for whatever reason, a helpful message will be printed, along with  in-
       structions on where to find the backup package.

       After the port is built,	if the -w option is being used,	all shared li-
       braries	 installed  by	the  old  port	(if  any)  will	 be  saved  to
       /usr/local/lib/compat/pkg.  After installation if  there	 are  any  new
       files with the same names as those in /usr/local/lib/compat/pkg the old
       files   will   be   deleted,   and   ldconfig(8)	  will	 be   run  via
       /etc/rc.d/ldconfig.

       After the new port is built, but	before it is installed the runtime de-
       pendencies will be checked to make sure they are	up to date.  If	the -g
       option is used a	package	will be	created	for  the  new  (or  newly  in-
       stalled)	version.

       When  installing	 a  port or using the --check-depends option, if there
       are other ports that depend on this port	the dependent ports  +CONTENTS
       file(s),	and the	+REQUIRED_BY file for the new port will	be updated.

       At  the	conclusion of a	successful installation, any pkg-message files
       that were installed, and	a summary of the work performed	will  be  dis-
       played.	 If  the  --delete-build-only option is	in use,	those packages
       that were installed during the current run of portmaster	AND were  only
       ever listed as build dependencies during	this run will be deleted.

       If something goes wrong during the process (e.g., a port	build fails, a
       port  is	 marked	 BROKEN) portmaster will report	any work done success-
       fully as	described above, then exit.

       The question is often asked, "Why is it not possible  to	 proceed  with
       the  ports that do not have errors?" The	answer is that (unfortunately)
       portmaster is not omniscient, and cannot	guess what resolution the user
       would like to have for this problem.  Manual intervention is  therefore
       required.

OPTIONS
       The options are as follows:

       Common Flags:

       --force-config
	   run 'make config' for all ports (overrides -G)

       -C  prevents 'make clean' from being run	before building

       -G  prevents 'make config'

       -H  hide	details	of the port build and install in a log file

       -K  prevents 'make clean' from being run	after building

       -B  prevents creation of	the backup package for the installed port

       -b  create and keep a backup package of an installed port

       -g  create a package of the new port

       -n  run through all steps, but do not make or install any ports

       -t  recurse    dependencies    thoroughly,    using   all-depends-list.
	   RECOMMENDED FOR USE ONLY WHEN NEEDED, NOT ROUTINELY.	 When  applied
	   to  the --clean-distfiles option it allows a	distfile to be kept if
	   it matches any up to	date port, not just  the  ones	that  are  in-
	   stalled.

       -v  verbose output

       -w  save	old shared libraries before deinstall

       [-R] -f
	   always rebuild ports	(overrides -i)

       -i  interactive update mode -- ask whether to rebuild ports

       -D  no cleaning of distfiles (this has been made	the default behavior)

       -d  always clean	distfiles

       -m arguments for	make
	   any arguments to supply to make(1)

       -x  avoid  building  or updating	ports that match this pattern.	Can be
	   specified more than once.  If a port	is not already	installed  the
	   exclude  pattern  will  be  run  against  the  directory  name from
	   /usr/ports.

       --no-confirm
	   do not ask the user to confirm the list of ports  to	 be  installed
	   and/or updated before proceeding

       --no-term-title
	   do not update the xterm title bar

       --no-index-fetch
	   skip	fetching the INDEX file

       --index
	   use INDEX file exclusively to check if a port is up to date

       --index-first
	   use the INDEX for status, but double-check with the port

       --index-only
	   do  not  try	 to  use  /usr/ports.	For  updating  ports  when  no
	   /usr/ports directory	is present the -PP|--packages-only  option  is
	   required.   See  the	 ENVIRONMENT  section below for	additional re-
	   quirements.

       --delete-build-only
	   delete ports	that are build-only dependencies  after	 a  successful
	   run,	only if	installed this run

       -U|--update-if-newer
	   (only  for  multiple	 ports	listed on the command line) do not re-
	   build/reinstall if the installed version is up to date

       -P|--packages
	   use packages, but build port	if not available

       -PP|--packages-only
	   fail	if no package is available.  The -PP option must  stand	 alone
	   on  the command line.  In other words, you cannot do	-PPav (for ex-
	   ample).

       --packages-build
	   use packages	for all	build dependencies

       --packages-if-newer
	   use package if newer	than installed even if the package is not  the
	   latest according to the ports tree

       --always-fetch
	   fetch package even if it already exists locally

       --package-format=<fmt>
	   the	archive	 format	 to  use for packages created from newly built
	   ports instead of the	default	of txz,	which can take a long time for
	   large packages.  Supported formats are:  tar,  tgz,	tbz,  and  txz
	   (from fastest to slowest).

       --backup-format=<fmt>
	   the	archive	 format	 to use	for backup packages (created before an
	   upgraded package is deleted)	instead	of the default of  txz,	 which
	   can	take  a	 long time for large packages.	Supported formats are:
	   tar,	tgz, tbz, and txz (from	fastest	to slowest).

       --local-packagedir=<path>
	   where local packages	can be found, will fall	back to	fetching if no
	   local version exists.  This option should point to the full path of
	   a directory structure created in the	same way that  'make  package'
	   (or	the portmaster -g option) creates it.  I.e., the package files
	   are contained in _path_/All,	there are LATEST_LINK symlinks in  the
	   _path_/Latest directory, and	symlinks to the	packages in _path_/All
	   in	 the	category   subdirectories,   such   as	 _path_/devel,
	   _path_/ports-mgmt, etc.

       --packages-local
	   use packages	from --local-packagedir	only

       --delete-packages
	   after installing from a package, delete it

       Features:

       -a  check all ports, update as necessary

       --show-work
	   show	what dependent ports are, and are not installed	(implies -t).

       --try-broken
	   do not skip ports marked as BROKEN or IGNORED and invoke  the  make
	   command with	-DTRYBROKEN.

       -o _new port dir	in /usr/ports_ _installed port_
	   replace the installed port with a port from a different origin

       [-R] -r name/glob of port directory in /var/db/pkg
	   rebuild  the	 specified port, and all ports that depend on it.  The
	   list	of  dependent  ports  is  built	 according  to	origin	(i.e.,
	   category/portname) not by the version number	of the installed port.
	   So  if  you	do  portmaster	-r fooport-1.23	and it is necessary to
	   restart using -R but	the newly installed port is  now  fooport-1.24
	   you	can  do	 portmaster  -R	 -r fooport-1.24 and it	should pick up
	   where you left off.	The -r option can be specified more than once.

       -R  used	with the -r or -f options to skip ports	updated	on a  previous
	   run.	  When	used  with  -r it will also prevent the	rebuild	of the
	   parent port if it, and all of its dependencies are up to date.

       -l  list	all installed ports by category

       -L  list	all installed ports by category, and search for	updates

       --list-origins
	   list	directories from /usr/ports for	root  and  leaf	 ports.	  This
	   list	 is  suitable  for feeding to portmaster either	on another ma-
	   chine or for	reinstalling all ports.	 See EXAMPLES below.

       [--force-config|-G] [-aftv] -F
	   fetch distfiles only

       -n  answer no to	all user prompts for the features below

       -y  answer yes to all user prompts for the features below

       [-n|-y] [-b] [-d|-prompt-clean-distfiles] -e name/glob of a single port
	   directory in	/var/db/pkg
	   expunge a port using	pkg(8) delete, and optionally remove all dist-
	   files.  Calls -s after it is	done expunging in  case	 removing  the
	   port	causes a dependency to no longer be necessary.

       [-n|-y] [-b] [-D|-d|--prompt-clean-distfiles] -s
	   clean out stale ports that used to be depended on

       [-t] [-n] --clean-distfiles
	   recurse  through  the  installed  ports  to	get a list of distinfo
	   files, then recurse through all files  in  /usr/ports/distfiles  to
	   make	 sure  that  they are still associated with an installed port.
	   If not, offer to delete the stale file.  With the -t	option a dist-
	   file	is considered valid if it is in	use  by	 any  port,  not  just
	   those installed.

       [-t]
	   -y  --clean-distfiles does the same as above, but deletes all files
	   without prompting.

       [--index|--index-only] [-n] --clean-packages
	   offer to delete stale packages.  The	 --index-only  option  is  re-
	   quired if no	ports tree is available.

       [--index|--index-only]
	   -y  --clean-packages	does the same as above,	but deletes all	out of
	   date	files without prompting.

       [-n|-y] [-v] --check-depends
	   cross-check and update dependency information for all ports

       [-n|-y] [-v] --check-port-dbdir
	   check for stale entries in /var/db/ports

       -h|--help
	   display help	message

       --version
	   display the version number

ENVIRONMENT
       The  directory  pointed	to  by	the  PACKAGES  variable	 (by   default
       /usr/ports/packages)  will  be  used  to	store new and backup packages.
       When using 'make	package' for the -g option, the	 ports	infrastructure
       will  store packages in ${PACKAGES}/All,	aka PKGREPOSITORY.  When using
       the   -b	  option,   portmaster	 stores	  its	backup	 packages   in
       ${PACKAGES}/portmaster-backup  so  that	you  can  create both a	backup
       package and a package of	the newly installed port even if they have the
       same version.

       When using the --packages* options the package files will be downloaded
       to  ${PACKAGES}/portmaster-download.   portmaster  will	 respect   the
       PACKAGESITE  and	 PACKAGEROOT (by default http://ftp.freebsd.org) vari-
       ables.  portmaster attempts to use both of these	variables in the  same
       way that	pkg-add(8) does.

       The  UPGRADE_TOOL variable is set to "portmaster", and the UPGRADE_PORT
       and UPGRADE_PORT_VER variables are set to the full package name	string
       and version of the existing package being replaced, if any.

       When using the --index-only option the PACKAGES variable	must be	set to
       a  directory  where  the	superuser has write permissions.  Other	useful
       variables include:

       PORTSDIR		       (default	/usr/ports)
       MASTER_SITE_INDEX       (default	http://www.FreeBSD.org/ports/)
       FETCHINDEX	       (default	fetch -am -o)
       INDEXDIR		       (default	$PORTSDIR, or $TMPDIR for --index-only)
       INDEXFILE	       (default	auto per FreeBSD version)

       If you use non-standard OPTIONS settings	for package building and  wish
       to  use	the --index-only option	without	a ports	tree you must generate
       your own	INDEX file so that the dependencies match.

       If you wish to customize	your build environment on a per-port basis you
       might want to take a look at /usr/ports/ports-mgmt/portconf

       To log actions taken by portmaster along	with a date/time stamp you can
       define PM_LOG in	your rc	file with the full path	of the file you	 would
       like  to	 log  to.  If running portmaster with sudo(8) (see below) then
       you should make sure that the file  is  writable	 by  the  unprivileged
       user.

       By default portmaster creates backup packages of	installed ports	before
       it runs pkg-delete(8) during an update.	If that	package	creation fails
       it is treated as	a serious error	and the	user is	prompted.  However for
       scripted	 use of	portmaster this	can be a problem.  In situations where
       the user	is ABSOLUTELY SURE that	lack of	a backup package should	not be
       a fatal error PM_IGNORE_FAILED_BACKUP_PACKAGE can  be  defined  to  any
       value in	the rc file.

       For  those  who wish to be sure that specific ports are always compiled
       instead of being	 installed  from  packages  the	 PT_NO_INSTALL_PACKAGE
       variable	 can  be  defined  in  the  make(1)  environment,  perhaps  in
       /usr/local/etc/ports.conf if using  /usr/ports/ports-mgmt/portconf,  or
       in   /etc/make.conf.    This   setting	is  not	 compatible  with  the
       -PP/--packages-only option.

FILES
       /usr/local/etc/portmaster.rc
       $HOME/.portmasterrc
	     Optional system and user configuration files.  The	variables  set
	     in	 the  script's getopts routine can be specified	in these files
	     to	enable those options.  These files will	be read	by the	parent
	     portmaster	 process,  and all variables in	them will be exported.
	     If	a portmaster.rc	file is	placed in the same  directory  as  the
	     portmaster	script itself, it will be read as described above.

       /var/db/pkg/*/+IGNOREME
	     If	this file exists for a port that is already installed, several
	     things will happen:

	     1.	The port will be ignored for all purposes.
		 This  includes	 dependency updates even if there is no	direc-
		 tory for the port in /usr/ports and there is no entry for  it
		 in /usr/ports/MOVED.  If the -v option	is used, the fact that
		 the port is being ignored will	be mentioned.

	     2.	If using the
		 -L  option,  and  a  new version exists, the existence	of the
		 +IGNOREME file	will be	mentioned.

	     3.	If you do a regular update of the port,	or if the
		 -a option is being used you will be asked if you want to  up-
		 date the port anyway.

       /var/db/pkg/*/PM_UPGRADE_DONE_FLAG
	     Indicates to a subsequent -a, -f, or -r run which includes	the -R
	     option  that a port has already been rebuilt, so it can be	safely
	     ignored if	it is up to date.

       /tmp/port_log-*
	     If	the -H option is used, and the installation or upgrade is  not
	     successful, the results of	the build and install will be saved in
	     this file.	 Substitute the	value of TMPDIR	in your	environment as
	     appropriate.

EXIT STATUS
       The portmaster utility exits 0 on success, and >0 if an error occurs.

ADVANCED FEATURE: SU_CMD
       The ports infrastructure	has limited support for	performing various op-
       erations	 as  an	 unprivileged  user.  It does this by defining SU_CMD,
       which is	typically su(1).  In order to support complete	management  of
       your  ports  as	an  unprivileged user, escalating to "root" privileges
       only when necessary, portmaster can use sudo(1) to handle the escalated
       privileges.  To accomplish this you must	have the following directories
       configured so that the unprivileged user	can access them:

       1. WRKDIRPREFIX - This is usually set to	/usr/ports/category/port/work,
	   however it is suggested that	you configure another  directory  out-
	   side	 your  ports tree for access by	the unprivileged user, and as-
	   sign	this variable to that value in your /etc/make.conf.

       2. DISTDIR - This is usually set	to /usr/ports/distfiles.
	   This	directory can be safely	set up for access by the  unprivileged
	   user, or a new directory can	be specified as	above.

       3. TMPDIR - Usually /tmp,
	   but	can also be set	to another directory in	your shell environment
	   if desired.

       It is further assumed that the following	directories will be  owned  by
       root:

       /var/db/pkg

       /var/db/ports

       LOCALBASE - Usually /usr/local

       PACKAGES	- Usually /usr/ports/packages

       PKGREPOSITORY - Usually ${PACKAGES}/All

       You  will  then need to install and configure sudo(1).  This can	easily
       be done with /usr/ports/security/sudo.  Then you	will  need  to	define
       PM_SU_CMD   in	your   /usr/local/etc/portmaster.rc   file,   or  your
       $HOME/.portmasterrc file.  For example:

	     PM_SU_CMD=/usr/local/bin/sudo

       You can optionally define the PM_SU_VERBOSE option as  well  to	notify
       you each	time portmaster	uses the PM_SU_CMD.  This is particularly use-
       ful  if	you are	experimenting with a tool other	than sudo(1) to	handle
       the privilege escalation, although at this time	sudo(1)	 is  the  only
       supported option.

       PLEASE  NOTE:  You  cannot  upgrade  the	sudo(1)	port itself using this
       method.

EXAMPLES
       The following are examples of typical usage of the portmaster command:

       Build and install a port	not currently installed:
	     portmaster	foo/fooport
	     portmaster	foo/fooport@flavor

       Update one port:
	     portmaster	fooport-1.23 or
	     portmaster	fooport	or
	     portmaster	foo/fooport
	     portmaster	foo/fooport@flavor

       Use a package if	available:
	     portmaster	--packages fooport-1.23

       Update multiple ports:
	     portmaster	fooport-1.23 barport baz/blahport

       Build a port locally but	use  packages  for  build  dependencies,  then
       delete the build	dependencies when finished:
	     portmaster	--packages-build --delete-build-only fooport-1.23

       Update a	system using only packages that	are available locally:
	     portmaster	-PP --local-packagedir=<path> -a

       Update all ports	that need updating:
	     portmaster	-a

       Update  all  ports that need updating, and delete stale distfiles after
       the update is done:
	     1.	portmaster -a
	     2.	portmaster --clean-distfiles

       More complex tasks (please see the details for these options above):
	     portmaster	-r fooport-1.23
	     portmaster	-r fooport-1.23	-r barport-2.34
	     portmaster	-o emulators/linux_base-fc4 linux_base-8-8.0_15
	     portmaster	-a -x gstreamer	-x linux

       Print only the ports that have available	updates.  This can be used  as
       an  alias  in  your  shell.  Be sure to fix the line wrapping appropri-
       ately.
	     portmaster	-L |
	     egrep -B1 '(ew|ort) version|Aborting|installed|dependencies|
	     IGNORE|marked|Reason:|MOVED|deleted|exist|update' | grep -v '^--'

       Using portmaster	to do a	complete reinstallation	of all ports:
	     1.	portmaster --list-origins > ~/installed-port-list
	     2.	Update the ports tree
	     3.	portmaster -ty --clean-distfiles
	     4.	portmaster -Faf
	     5.	pkg delete -afy
	     6.	rm -rf /usr/local/lib/compat/pkg
	     7.	Back up	any files in /usr/local	you wish to save,
		such as	configuration files in /usr/local/etc
	     8.	Manually check /usr/local and /var/db/pkg
		to make	sure that they are really empty
	     9.	Install	ports-mgmt/pkg and then	ports-mgmt/portmaster.
		Remove both from ~/installed-port-list.
	     10. portmaster --no-confirm `cat ~/installed-port-list`

       You probably want to run	--clean-distfiles  [-y]	 again	when  you  are
       done.   You might also want to consider using the --force-config	option
       when installing the new ports.

       Alternatively you could use portmaster -a -f -D to do an	"in place" up-
       date of your ports.  If that process is interrupted for any reason  you
       can  use	 portmaster  -a	-f -D -R to avoid rebuilding ports already re-
       built on	previous runs.	However	the first  method  (delete  everything
       and reinstall) is preferred.

SEE ALSO
       make(1),	 su(1),	 pkg(7),  ports(7),  ldconfig(8),  pkg(8), pkg-add(8),
       pkg-delete(8), sudo(8)

AUTHORS
       This manual page	was written by Doug Barton <dougb@FreeBSD.org>.

FreeBSD	13.2		       February	5, 2016			 PORTMASTER(8)

NAME | SYNOPSIS | QUICK START GUIDE | DESCRIPTION | OPTIONS | ENVIRONMENT | FILES | EXIT STATUS | ADVANCED FEATURE: SU_CMD | EXAMPLES | SEE ALSO | AUTHORS

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=portmaster&manpath=FreeBSD+14.0-RELEASE+and+Ports>

home | help