port upgrade

Ryan Schmidt ryandesign at macports.org
Mon Jul 13 19:52:42 PDT 2009

On Jul 13, 2009, at 20:55, Scott Haneda wrote:

> It is about time for me to learn about the port upgrade process.   
> My ASSP port file is complete, and working as far as installs go.   
> There may be some bugs in ASSP, or the perl modules, that I can not  
> figure out, but the port itself is solid.
> My next step is to make sure that upgrades are smooth.
> ASSP is a copy to install type of app, you unzip it, move the files  
> in place, and start it, that is all there is to it.  It comes with  
> a healthy list of perl dependencies, but as long as those are in  
> place, it works.
> MacPorts is largely in this case, being used to avoid the problems  
> a lot of mac users had with CPAN, and get all the perl bits in place.
> Largely, when ASSP is updated, only one file will be updated, which  
> is assp.pl, the core application for the proxy.
> My install essentially unpacks, and loops through all the files in  
> the distribution.  Some need removing, as they are windows  
> specific, some need reinplacing to change the perl chebang, and  
> some need some line endings patches up.
> ASSP comes with for example, a greylist.txt file, in it will be a  
> list of hosts that are to be excluded from greylisting.  There are  
> many other files that are like this, that is one example.  This  
> file is also assumed to be edited by the end user, either by hand,  
> or via the web admin that assp.pl provides.
> ASSP will create log files, I know that an port upgrade assp will  
> leave those alone, I believe even an uninstall will leave those  
> alone.  But what is the procedure for upgrades?  I would not want  
> greylist.txt touched.
> What happens if there is an introduction of a new file, that will  
> need to be copied in place?  What happens if there is an  
> introduction of a existing file that needs to be over-written?
> I am looking for suggestions on how to best make this a solid and  
> stable process for users of this port file.

During the destroot phase, your port must stage its files into the  
directory identified by the ${destroot} variable. Since ports should  
generally put things inside the MacPorts prefix, that means you will  
usually be copying things to some place under ${destroot}${prefix},  
e.g. a program the user is expected to run might be installed into $ 

During the install phase, MacPorts takes everything in the destroot  
and copies it to a location in ${prefix}/var/macports/software/$ 
{name} (in a directory named for the version, revision and selected  

During the activate phase, MacPorts makes hard links from the thing  
in ${prefix}/var/macports/software/${name}/... to the corresponding  
place in / and in the deactivate phase, MacPorts removes those hard  
links again.

So simply anything you put in the destroot will be registered to the  
port. If you uninstall or upgrade the port, the items that were  
registered to the old version of the port will be removed.

So you would not want to register configuration files or log files or  
the like to the port. Instead, you would register sample versions of  
the configuration files to the port, and either advise the user to  
make a copy of these files, or do so for the user upon first  
installation if they don't already have them. The whois port  
demonstrates the former strategy while apache2 shows the latter.

More information about the macports-dev mailing list