2015-08-27 3 views
2

J'ai une application en ligne de commande (pas .app bundle), un seul fichier exécutable. Cela fonctionne par exemple usr/bin/myapp. Cela devrait être accessible à tous les utilisateurs du mac. C'est un LaunchDaemon et fonctionne comme un utilisateur root. Si je le garde en usr/bin cela fonctionne très bien.OSX - où placer ma ligne de commande binaire launchdaemon et dylibs dépendants

Lorsqu'un utilisateur installe l'application, copiez le fichier pkgbuild vers le fichier /usr/bin et le script postinstall lance LaunchDaemon.

L'application dépend de la bibliothèque nss. alors maintenant je dois copier les fichiers nss binary et dylib à quelque part, par exemple. usr/bin/lib/nss dossier. Est-il possible de faire en utilisant pkgbuild ou preinstall script? Puisque pkgbuild --install-location réglé à /usr/bin va copier myapp là, mais comment copier le dossier nss à usr/lib?

L'autre option est de faire une structure de dossier entier /usr/bin/MyApp et copier mon myapp fichier binaire et il garder nss fichiers au dossier /usr/bin/MyApp/nss. Mais est-ce une bonne idée? Ou dois-je faire la structure de fichier à /usr/local/MyApp?

Quel est le meilleur emplacement pour exécuter myapp LaunchDaemon en tant qu'utilisateur root? /usr/local ou usr/bin ou un autre endroit?

Répondre

2

Vous devriez jeter un oeil aux programmes antivirus pour Mac et où ils conservent leurs fichiers. C'est ainsi que je pense avoir appris à répondre à votre question:

Si vous le devez absolument, installez votre commande dans/usr/bin sur les anciens systèmes et/usr/local/bin sur les systèmes plus récents. (Je pense que quand OSX 10.10 est arrivé, ils sont passés à/usr/local/bin, mais ne connaissent pas exactement la version.) La seule vraie raison pour laquelle vous voulez mettre quelque chose là-bas est que les consommateurs peuvent ouvrir une fenêtre de terminal et exécutez des commandes. Si vous ne le faites pas, vous n'avez pas besoin de le mettre là. Donc, si quelqu'un n'est pas censé taper votre commande dans une fenêtre de terminal, et si vous n'avez pas besoin de fonctionner avec des privilèges spéciaux, et si votre my.app est la seule chose qui l'appelle, alors vous devez placer la commande dans votre dossier /Applications/mon.app/Contents/Resources. Maintenant, si rien de tout cela ne vous concerne, vous devez créer la commande dans un dossier/Library/Application Support/[mon nom de produit] s'il s'applique à tous les utilisateurs et ~/Library/Application Support/[my nom du produit] dossier s'il s'applique uniquement à l'utilisateur actuel. Maintenant, un problème que vous pourriez avoir est la collision de nom de dossier ici. Ainsi, au lieu de "mon nom de produit", vous pouvez le faire de la manière du dossier Java, comme par exemple ce que fait le navigateur Opera pour son produit: ~/Bibliothèque/Application Support/com.operasoftware.Opera. En ce qui concerne la prise en charge des bibliothèques pour votre LaunchDaemon ou LaunchAgent, vous pouvez les installer dans/Bibliothèque/Application Support/[mon nom de produit] ou ~/Library/Application Support/[mon nom de produit]. Le dernier avec le tilde (~) signifie qu'il s'applique seulement à un certain utilisateur, alors que l'autre s'appliquerait à tous les utilisateurs.