How to install an older version of a port
- Audience: Anyone needing an older version of a port than is currently available in the repository or installed on their machine
- Requires: MacPorts >= 1.7
MacPorts maintainers strive to give you the latest version of software in each port, but you may wish to use an older version for various reasons. How to do this depends on whether you still have the older version installed.
Installing an older version of a port is not the intended way to use MacPorts, is not usually recommended, and may cause various problems. It's fine to do this in the course of trying to identify a problem, but once you have determined that a newer version is broken and that an older version works, please inform the developers of the affected software of the problem so that they can fix it, so that you can soon go back to using the latest versions of the software.
Reactivating an older version that's still installed
When you upgrade an installed port, MacPorts deactivates the older version but keeps it installed. For example, assume tcl @8.4.16_0 is installed:
$ port installed tcl The following ports are currently installed: tcl @8.4.16_0 (active)
When you upgrade, a newer version of tcl will be installed and activated, while tcl @8.4.16_0 will remain installed but will be deactivated:
$ sudo port upgrade tcl [snip] $ port installed tcl The following ports are currently installed: tcl @8.4.16_0 tcl @8.5.0_0 (active)
As long as it is still installed, you can reactivate tcl @8.4.16_0, which will automatically deactivate the active version first:
$ sudo port activate tcl @8.4.16_0 ---> Deactivating tcl @8.5.0_0 ---> Activating tcl @8.4.16_0
And similarly you can go back to the newer version.
Once you're confident the new version works to your satisfaction, you can uninstall the old one to reclaim disk space:
$ sudo port uninstall tcl @8.4.16_0
Note: if you used the -u flag when you upgraded the port (i.e. sudo port -u upgrade tcl), MacPorts would uninstall the inactive versions after activating the latest one, so you would not be able to reactivate them later. Use -u when you know in advance that you will not want to go back to an older version, or you don't mind taking the extra steps below to reinstall the older version later if needed.
(Re)installing an older version that's no longer installed
If you want to go back to an older version after you've already uninstalled it, or to install an older version of a port that predates when you first installed it, you can do so by manually downloading the older version of the portfile and any associated files from the MacPorts Subversion repository.
Step 1: Find the right revision
To install an older version of the port, you'll have to get the necessary files from the repository. Browse the repository to find the directory of the port you want, then use the Revision Log link in the upper right to find the older version that you want to install. For example, if you wanted to install the older 8.4.16 version of tcl, browse to the lang/tcl directory and look at its revision log. Here you'll note that tcl was updated to 8.5.0 in r32235, so you want the revision before that, which was r30810. (You can also just subtract one from the revision you found, e.g. r32235 - 1 = r32234.) If desired, you can click the @30810 link in the revision log (not the  link) to see the directory as it existed in that revision.
Step 2: Get the port directory
In the Terminal, using the revision number, port category and port name, check out the port's directory at the desired revision using the svn command:
$ svn checkout -r 30810 https://svn.macports.org/repository/macports/trunk/dports/lang/tcl
This creates a "tcl" directory in your current location, and populates that with everything the port needs to build. Replace "30810" and "lang/tcl" with the correct revision and category/portname for the port you're interested in.
Note: Subversion is included with Mac OS X 10.5 and later but you may want to get a newer version by installing the subversion port; Mac OS X 10.4 does not include subversion, so users of that system must install the port:
$ sudo port install subversion
Note: MacPorts usually runs under a separate "macports" user account with reduced privileges, so you must check out the port's directory in a place where the macports user can read them. The directories Desktop, Documents, Downloads, Library, Movies, Music, and Pictures, which OS X created in your home directory when your user account was created, have permissions that prevent other users (including the macports user) from looking inside them, so these are not suitable locations. Using an unsuitable location will result in an error message like Error: Unable to execute port: Could not open file: /Users/username/Desktop/portname/Portfile. So instead, create a new directory in your home directory (such as "macports") in which to store these port directories. Or you could create another directory elsewhere (e.g. at the root of your hard drive) for this purpose. If you don't mind the OS deleting these files after a few days, or after a restart, you could put them in /tmp. If you really want to put the port directory in one of the mentioned directories in your home directory, and you don't mind other users on your system reading your files (e.g. if your computer is used by only one person), you could change the permissions of the desired directory from 0700 (drwx------) to 0755 (drwxr-xr-x).
Step 3: Build the downloaded port
Finally, change to the directory you checked out with Subversion (which contains the Portfile) and install the port, omitting the port name:
$ cd tcl $ sudo port install
Specifying a variant
To enable a variant, specify it as usual. For example, to install the port in the current directory enabling the quartz variant:
$ sudo port install +quartz
To disable a variant that's on by default, you must also first use the -- argument. For example, to install the port in the current directory disabling the x11 variant:
$ sudo port install -- -x11
Specifying a subport
Some Portfiles—including those for python modules, perl modules, php modules, and others—contain subports. For example, a python module has subports for each version of Python it supports. To specify which subport you want, set the "subport" variable. For example to install the py27-pylint subport of the py-pylint portfile:
$ cd py-pylint $ sudo port install subport=py27-pylint
Make sure you specify the subport exactly as shown at the top of the output of port info. MacPorts will not warn or notify you if you misspell a subport name or request a subport that does not exist.
Working with the older ports
Once the port is installed, be careful about using the portname with other commands.
$ sudo port install tcl
will install the _current_ version of tcl, even though you are in a directory with an older version of tcl. Leave off the port name to install the older version from the current directory.
Similarly for other commands like port logfile, there is a difference between specifying the name of a port and leaving it out. Specifying the version number of the older port doesn't work; many port commands ignore a version specifier.
$ port logfile MPlayer /opt/local/var/macports/logs/_opt_local_var_macports_sources_rsync.macports.org_release_tarballs_ports_multimedia_MPlayer/MPlayer/main.log $ port logfile /opt/local/var/macports/logs/_Users_myuser_tmp_mplayer_1.1_8_MPlayer/MPlayer/main.log $ port logfile MPlayer @1.1_8 /opt/local/var/macports/logs/_opt_local_var_macports_sources_rsync.macports.org_release_tarballs_ports_multimedia_MPlayer/MPlayer/main.log
port info php5 shows it to be first in the lang category, so it would be located in lang/php5.
$ svn checkout -r 53555 https://svn.macports.org/repository/macports/trunk/dports/lang/php5 $ cd php5 $ sudo port install -- +apache2 +postgresql83
After this, php5 version 5.2.10 should be installed.