rsyncd with macports 2.5.4 on macOS 10.13.6

Ryan Schmidt ryandesign at macports.org
Fri Oct 26 05:20:09 UTC 2018



On Oct 25, 2018, at 14:52, Richard L. Hamilton wrote:

> Took me a moment to realize you were referring to the Portfile facility, not the obsoleted (as of what OS version?) OS facility, regarding StartupItems.

Yes, I'm referring to the MacPorts portfile options whose names begin with "startupitem".

https://guide.macports.org/#reference.startupitems

These options were designed and added to MacPorts back when macOS used StartupItems and launchd did not exist yet.


> Still, I see the plist file you describe is notably simpler than something that the Portfile startupitems facility would have generated (i.e. the one MacPorts installed); no daemondo, no wrapper script.

Yes, that is correct; those were not needed for rsync. For the daemons I run on the buildbot/rsync server, I decided to write my own launchd plists, rather than rely on any the port might have provided, for several reasons. In some cases I wanted to make changes to the launchd plist that MacPorts doesn't have options for. For example for rsync I wanted to do on-demand launching. For mprsyncup and backups, I wanted a task that runs at a recurring interval. In other cases, such as the buildbot workers, I needed multiple launchd plists per port, a feature MacPorts now has but did not have when I set up this infrastructure. And finally, I wanted to be in control of what runs on my server. I did not want to risk some other developer making a change to a port's launchd plist that I did not want.


> AFAIK, launchd was introduced with OSX Tiger (10.4);

That's right. When Tiger was introduced, code was added to the MacPorts startupitem options to generate either StartupItems or launchd plists depending on the system version and/or the value of a macports.conf setting.

> does MacPorts still support anything older than that?

No, that's the oldest version MacPorts runs on. For that reason, support for generating StartupItems was removed from MacPorts a little while ago; the startupitem options are now exclusively for generating launchd plists.


> If not, then why not supply launchd plists directly when their functionality would be sufficient?

We've had this debate many times before on the mailing list. My recollection is that sometimes it is not sufficient; sometimes daemondo is needed. I don't remember all of the conditions under which it is needed. I think at least one reason had to do with daemons that were not written with launchd in mind, and which were designed to always fork themselves into the background; daemons used with launchd must *not* do that, otherwise launchd will think the program crashed and will relaunch it over and over. Daemondo accommodates daemons that do not offer the option not to fork.

We would need a new startupitem option for the portfile author to specify whether daemondo should be used for a particular plist or not. I'm not aware of anybody starting any work on that yet.


> And couldn't that be done (when sufficient) directly rather than using the Portfile startupitem functionality?

You mean: couldn't a portfile author write a launchd plist manually, put it in the files directory, and write code in the post-destroot block to copy it to the right place? Yes, a portfile author could do that; many already have. It seems cumbersome to me, especially since those plists usually need to contain some variables from the portfile environment, such as the prefix. I think we think it's simpler for the portfile author to specify a few Tcl options in the portfile rather than have to write a plist and copy it and reinplace it. But I don't know. Maybe we should just be making launchd plists directly these days. Maybe creating a whole set of MacPorts options around every launchd plist feature is overkill and ultimately more confusing. Part of the reason why we have those options was portability to multiple implementations (StartupItems and launchd and whatever other OSes use), but these days there is only the launchd implementation.

MacPorts does have commands that wrap "sudo launchctl load -w" and "sudo launchctl unload -w" (namely "sudo port load" and "sudo port unload"); some care would have to be taken by the portfile author to ensure that the launchd plist name and location matches what MacPorts expects in order to preserve that functionality.




More information about the macports-users mailing list