2014-05-20

MacOS start scripte

Für einen Unix Benutzer gibt es unter MacOS viele ungewohnte Dinge, zum Beispiel start scripte. Das wird auf MacOS alles vom launchd übernommen.

Hier mal zur Dokumentation ein Beispiel, wie man ein Programm zur boot Zeit als root ausführen lassen kann.

Mein konkretes Problem: Ich benutze tinc als Lösung, um alle meine Rechner via VPN zu verbinden. Ich würde gerne zur Boot Zeit folgendes Kommando ausführen

/usr/local/sbin/tincd  -n dziadzka.net
Unter MacOS erstelllt man hierzu eine plist Datei im XML format und kopiert sie nach /Library/LaunchDaemons.

Konkret lege ich eine Datei /Library/LaunchDaemons/net.dziadzka.tincd.plist mit dem folgende Inhalt

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>KeepAlive</key>
    <true/>
    <key>Label</key>
    <string>net.dziadzka.tincd</string>
    <key>ProgramArguments</key>
    <array>
        <string>/usr/local/sbin/tincd</string>
        <string>-n</string>
        <string>dziadzka.net</string>
        <string>-D</string>
    </array>
</dict>
</plist>
Im wesentlichen ist das eine 3-elementige property liste mit den werten

Label: net.dziadzka.tincd
KeepAlive: true
ProgrammArguments: ["/usr/local/sbin/tincd", "-n", "dziadzka.net", "-D"]

KeepAlive == true heist, dass sich der Launchd darum kümmert, das Programm nach unfreiwilliger beendigung neu zu starten. Deswegen auch das zusätzliche Argument "-D" für den tincd, damit der sich nicht in den Hintergrund verabschiedet.