On Jan 5, 2011, at 7:46 AM, eveningnick eveningnick wrote:
There are a lot of different places where i need to install files. it is /Library/LaunchAgents, /Library/LaunchDaemons, /Library/Application Support, /Library/PreferencePanes. It would require as many "PackageMaker targets" as locations.
This indicates that you are trying to use Apple's PackageMaker. While it is the Apple tool for this, there are better ones available for free. I would suggest using Iceberg or Packages (for "old style" and "flat file" packages respectively). But regardless you can always just select the root of the filesystem as your target, and then put all of your payload in there.
There are a lot of problems going down the route you have chosen, and you will get a lot of flack for doing it (Greg is one of the more vocal, so I expect him to respond as well once he makes it to work today). The first problem is that you have totally blown out any idea of system administrators being able to use the package receipt system to audit their computers. Just killed it dead. Since everything gets moved by a script there is no automate-able way of auditing this. This also means that auto-delete systems fail. This is bad.
You have also opened up the potential for you to mess up in the scripting in so many ways... An example would be a system that does not properly use $3 everywhere, so now can't be used in system image creation tools like InstaDMG or System Image Utility.
By going off the normal path you have made yourself responsible to know every single variation out there... is that really a burden you want to take on?
This is difficult to do correctly in all instances. See http://stackoverflow.com/questions/1106638/starting-stopping-a-launchd-agent-for-all-users-with-gui-sessions
Thanks a lot for the link!
What do you mean by "all instances"? As far as i understand, i need to find a pid of some process that was launched by the current logged in user. Finder, for example. And then execute launchctl bsexec [finderPID] "/tmp/myloadscript". Or i am wrong? Are there any additional pitfalls?
Yes, there are lots. As a simple example: why are you assuming that there is only one person logged in, or that there is even one person logged in to the computer. Both cases are valid.
It may be easier to simply require a logout (or a reboot) after install; when the user logs back in the LaunchDaemon will be loaded.
Yes, i was thinking about, but users don't like to reboot the system, at least me, i consider that as old past times. Of course if i am unable to do this without rebooting, i'd use your advice.