port upgrade

Scott Haneda talklists at newgeo.com
Fri Jul 17 12:01:08 PDT 2009

>> assp.cfg needs to never be touched by ports once installed.
> Then don't copy it into ${destroot} in the destroot phase; copy it  
> from assp.cfg.defaults directly into ${prefix}/wherever in the post- 
> activate phase.

This is good to know, I was just not aware of this method.  How do I  
set permissions when in this phase, I assume doing so with the ports  
commands will register it?

>> According to the docs, an update is to do the following:
>> - invalidptr.txt
>> - nodelay.txt (merge)
>> - redre.txt
>> - ipnp.txt (merge)
>> - blockreportuser.txt
>> - validptr.txt
>> - bombre.txt (merge)
>> - whiteorg.txt (merge)
>> - strictspf.txt (merge)
>> - invalidhelo.txt
>> So the non merge, are safe to replace, the merge are not.  In these  
>> cases, if I could simply let ports replace them, and as long as a  
>> backup of the entire /opt/local/var/ASSP directory was made, I  
>> would be happy with that and a UI message that said which files  
>> needed to be merged.
>> * By merge, they mean, append your changes to the file.  I would  
>> rather not get in the business of teaching ports how to merge those  
>> files, and leave that to the user.
>> There are some other cases, but understanding how to deal with  
>> these should suffice.  If I can rely on new files that were made  
>> after assp was installed staying untouched, then the app generated,  
>> and user generated data is safe.
>> It looks to me, like I have a limited set of files I need to make  
>> sure are not touched by ports.
>> The idea of registering these files as .sample files, and asking  
>> the user to change them, completely destroys the way that ASSP is  
>> designed to work.
> I don't understand why; it's exactly the solution to your problem.  
> In the destroot phase, don't install a nodelay.txt; instead, install  
> a nodelay.txt.sample. Then, in post-activate, copy  
> nodelay.txt.sample to nodelay.txt and tell the user about it.

Ahh, ok, I understand now.  Can that copy of .sample to rename to real  
file name be avoided?  Can I just copy it in as it is named and be  
done with it?  I do not want .sample files hanging out in /etc in this  

Sorry about all this, I was just totally unaware this was even a  

> Or, if nodelay.txt already exists, tell the user to merge in changes  
> from nodelay.txt.sample.

Of the files, some are to be merged, some are to be replaces.  This is  
good actually, as it gives me a place to tell the users where the  
files are.  Perfect.

> See the php5 port for an example of this. (Well, I don't copy the  
> file for the user, but I do tell them to either copy it or merge it  
> depending on whether the file already exists or not.)

Thanks, will look into that port.

>> I would consider them more preferences, than config files, and with  
>> any preference file, it will contain some defaults, be written to  
>> by the user, and should not be messed with on uninstall of an app,  
>> and only sometimes modified on upgrade, if a format changes.
> I don't see the distinction between a preference file and config  
> files. Whatever you call it, they are files containing data unique  
> to the user and should not be overwritten by MacPorts on upgrade.  
> Therefore, don't register them to the port as part of the destroot.


>> Is destroot.keepdirs really only for directories, or can it be  
>> applied to files as well?
> Yes, destroot.keepdirs is only for directories. It has no meaning  
> for files.
> The destroot phase works as follows:
> First, MacPorts creates the ${destroot} directory and a bunch of  
> empty directories inside it for the various places ports are likely  
> to install files. Basically the entire hierarchy, such as ${prefix}/ 
> bin, ${prefix}/include, ${prefix}/lib, ${prefix}/share/man, etc., is  
> created for you, so that you don't have to make these directories  
> manually in the destroot phase of every port.
> Next, the pre-destroot, destroot, and post-destroot phases run,  
> during which your port is to put files into the right places within $ 
> {destroot}.
> Finally, MacPorts removes any empty directories in ${destroot}.
> If there are directories you would like to keep, even though they  
> are empty, you use destroot.keepdirs, in response to which MacPorts  
> creates a .turd_${name} file in each directory. Thus, when MacPorts  
> gets to the part where it removes empty directories, it will not  
> remove these "kept" directories, because they are not empty, because  
> they contain a file (the .turd_${name} file).

Does this ever become an issue with .DS files getting in there, and  
that would prevent proper ports operations?  Or is it only .turd files  
that prevent the deletion of a dir?  I know a real non leading dot  
file will prevent it, and I expect that, but a .* file other  
than .turd, how is that covered?

>> I think what I really want to do, is just unregister a list of  
>> files form the port after the first time it is installed.  Maybe  
>> there is a way to trick ports into doing this by copying a file in  
>> during a certain phase but just keeping the name the same?
> I can only reiterate: if you put the file in the ${destroot}  
> directory during the destroot phase, the file is registered to the  
> port. If you don't want the file registered to the port, don't do  
> that.

Cool, thanks, this will work.

$port lint
--->  Verifying Portfile for ASSP
Warning: Line 109 should say "use_configure no" instead of declaring  
an empty configure phase

Is that a big deal?  Will I have any issues with just following those  
instructions?  I think I tried and it did not like the use_configure  

I will be installing my own custom launchd item, and not using ports  
for this.  I have never done this, do I just make a dir called "files"  
and put whatever I want in there? I can reference it with {filesdir}?

Thank you.
Scott * If you contact me off list replace talklists@ with scott@ *

More information about the macports-dev mailing list