// vim: set et sw=4 ts=8 ft=asciidoc tw=80:
port-selfupdate(1)
==================

NAME
----
port-selfupdate - Upgrade MacPorts itself and update the port definition files.

SYNOPSIS
--------
[cmdsynopsis]
*port* [*-qvdf*] *selfupdate* [--no-sync] [--migrate] [--rsync]

DESCRIPTION
-----------
*port selfupdate* checks for new releases of MacPorts and upgrades it when
necessary. *selfupdate* also updates the local port definitions (the so-called
ports tree) to the latest state so you have the latest versions of ports
available. This part of the operation corresponds to man:port-sync[1].

You should regularly run *selfupdate* to update your local port definitions.
Running *selfupdate* is required to get updated software with bug fixes and new
features.

OPTIONS
-------

*--no-sync*::
    Only check for updates - and install if available - for MacPorts itself. Do
    not update the ports tree.

*--migrate*::
    Rebuild even if no new version is available, upgrade if a new version is
    available. Contrary to *-f*, this flag will prevent downgrades. This flag is
    useful when upgrading to a newer macOS major version.

*--rsync*::
    Use the older rsync method for downloading the new version of MacPorts.
    The default is to try HTTP(S) first, and use rsync only if that fails.

include::global-flags.txt[]

*-q*::
    Suppress status output, be as silent as possible.

*-f*::
    Do not check whether the downloaded MacPorts version is newer than the
    currently installed one, but always rebuild and reinstall MacPorts.
    +
    You can use this to downgrade from a beta or development version to the
    latest release. Note that there is no guarantee that no incompatible and
    irreversible changes have been made to MacPorts' internal data structures,
    which can make downgrading impossible.

EXAMPLES
--------
When no new versions are available, *selfupdate* looks like this:

[subs="verbatim,attributes"]
----
$ sudo port selfupdate
--->  Checking for newer releases of MacPorts
MacPorts base version {manversion} installed,
MacPorts base version {manversion} available.
---> MacPorts base is already the latest version
---> Updating the ports tree
----

If *selfupdate* detects that a newer version of MacPorts is available, it
attempts to update your copy to this version. In that case, the output will be
different:

[subs="verbatim,attributes"]
----
$ sudo port selfupdate
--->  Checking for newer releases of MacPorts
MacPorts base version 2.6.0 installed,
MacPorts base version {manversion} available.
---> MacPorts base is outdated, installing new version {manversion}
---> Updating the ports tree
--->  Attempting to fetch MacPorts {manversion} source code from https://github.com/macports/macports-base/releases/download/v{manversion}/MacPorts-{manversion}.tar.bz2
--->  Extracting MacPorts {manversion}
--->  Installing new MacPorts release in /opt/local as root:admin; permissions 0755
----

TROUBLESHOOTING
---------------
If *selfupdate* fails, it usually does so in one of two places: The network
connection, or the installation of the update.

Network Problems::
MacPorts uses the 'rsync' protocol to update its ports tree to the latest version.
This will fail if you are on a network that blocks TCP connections to the rsync
port 873. Talk to your network administrators and ask them to allow connections
to port 873 if this happens to you. Alternatively, you can just download a new
installer .pkg from macports.org and run that to upgrade your installation.
+
Network connection problems might also affect you if you are in a country with
US export restrictions. We suggest using one of our other
wiki:Mirrors#MacPortsSource[mirrors] outside of the US in these cases.

Compilation Problems::
When a problem occurs while building and installing the new MacPorts version,
you will see the message
+
----
Error installing new MacPorts base: command execution failed
----
+
To find out what went wrong, re-run *selfupdate* with the *-d* flag. This will
allow you to see all output generated by the build system. Look for the first
occurrence of ``error''. If you cannot figure out what's wrong on your own, feel
free to ask on mailto:macports-users@lists.macports.org[the macports-users
mailing list] and attach the output generated by
+
----
$ sudo port -d selfupdate
----


SEE ALSO
--------
man:port[1], man:port-sync[1]

AUTHORS
-------
 (C) 2014-2020 The MacPorts Project
 Clemens Lang <cal@macports.org>
