Konfigurieren Sie den OS X-Server über das .pkg-Postinstallationsskript

Ich erstelle ein .pkg-Installationsprogramm für ein Produkt, das den Apache-Server in OS X erweitert.

Über das Postinstall-Skript in der .pkg-Datei kann ich derzeit das Standard-Setup von Yosemite und El Capitan konfigurieren, indem ich dem /etc/apache2/otherOrdner eine product.conf-Datei hinzufüge.

Um die neue Konfiguration zu laden, mache ich einfach Folgendes aus dem Postinstall-Skript:

launchctl load -w /System/Library/LaunchDaemons/org.apache.httpd.plist #if not loaded
apachectl stop #if already started
apachectl start

Die Installation von OS X Server ändert die Art und Weise, wie Apache konfiguriert wird, sodass der obige Ansatz fehlschlägt. Wie kann ich also den OS X-Server von meinem Postinstallationsskript aus so konfigurieren, dass er dasselbe tut?

Welche Version von Server.app und welche Version von OS X? Ihr Skript wird wahrscheinlich basierend auf SIP verzweigt und hängt auch davon ab, was "erweitern" in der Praxis bedeutet?
Da ich im Allgemeinen für OS X bereitstelle, möchte ich, dass das Skript für alle Versionen der Server.app funktioniert, die auf El Capitan und Yosemite ausgeführt werden können. „Apache erweitern“ bedeutet nichts anderes, als CGI-, Mime- und Alias-Apache-Module zu laden und Aliase und Scriptaliases innerhalb einer product.confDatei zu erstellen. Können Sie erklären, was Sie mit "fork based on SIP" meinen?
@bmike SIP = Systemintegritätsschutz? Fork = Scheitern?
SIP - ist genau das, was Sie vermuten. Niemand mag es, "gegabelt" zu werden - auch die Notwendigkeit, eine Betriebssystemprüfung zu codieren, um zu sehen, welche "Gabelung" zu nehmen ist. Wenn 10.10, mach dies und das, wenn 10.11, mach etwas anderes - eine Art "Fork".
Ah, in diesem Fall hoffe ich, dass Apple einen benutzerfreundlichen Umgang mit SIP bietet. launchctl unloadMein Ansatz scheint für El Capitan zu funktionieren, da ich ohne Probleme ein Follow-by machen konnte launchctl load.
@bmike Mit Hilfe von @grgarside habe ich herausgefunden, dass Forking für die installierte Server.app durchgeführt werden kann, indem das Ergebnis von überprüft wird serverinfo -q --software. Ich habe getestet und festgestellt, dass es nicht notwendig ist, irgendetwas mit SIP zu tun, um die Konfiguration des Websites-Dienstes der Server.app hinzuzufügen.
Ich bin so glücklich - Sie können gerne Ihre Lösung zu meinem Beitrag bearbeiten oder die Frage selbst beantworten. Dieser George ist scharfsinnig und ich lerne auch viel von seiner Hilfe.
Ich habe gerade meinen Skriptcode am Ende Ihrer Antwort hinzugefügt. Gute Teamarbeit @bmike Hoffentlich konnte es auch anderen helfen.

Antworten (1)

Die Automatisierung von server.app-Komponenten ist ziemlich trivial, da Sie damit serveradmindie schwere Arbeit erledigen können.

  sudo serveradmin start web;

Einen Dienst zum Starten aufzufordern, wenn er bereits läuft, ist harmlos/idempotent.

Gehen Sie wie folgt vor, um zwischen dem von der Server.app konfigurierten Apache und dem "Normalzustand" zu wechseln:

if serverinfo -q --software; then
   cp product.conf /Library/Server/Web/Config/apache2/other
   serveradmin stop web
   serveradmin start web
else
   cp product.conf /etc/apache2/other
   launchctl load -w /System/Library/LaunchDaemons/org.apache.httpd.plist
   apachectl stop #if already started
   apachectl start
fi
Danke. Ich denke, ich könnte erwarten, dass ich keinen Dienst laden muss, da dies innerhalb des startBefehls erfolgt? Ich werde in meinem Skript Folgendes versuchen: serveradmin stop webthenserveradmin start web
Ja - ein Stopp wäre wahrscheinlich am besten, wenn Sie sicher sein wollen, dass es neu gestartet wird @JoachimBratteli
Ich habe meine Konfigurationsdatei von /etc/apache2/other/nach kopiert /Library/Server/Web/Config/apache2/other/, gestoppt serveradminund gestartet, und jetzt funktioniert es! . Danke @bmike