summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdam Ierymenko <adam.ierymenko@gmail.com>2013-12-13 16:55:21 -0800
committerAdam Ierymenko <adam.ierymenko@gmail.com>2013-12-13 16:55:21 -0800
commit27a5237462b5e34d3826e4dc574711d5641d443a (patch)
treee9d44b98403cc66f05e2aae4a0576c0ceafbdab0
parent50ef47cf0acdd7e020fb60543a72b7ba679bfd0b (diff)
downloadinfinitytier-27a5237462b5e34d3826e4dc574711d5641d443a.tar.gz
infinitytier-27a5237462b5e34d3826e4dc574711d5641d443a.zip
Installer work for mac.
-rwxr-xr-xbuildinstaller.sh4
-rw-r--r--installer.c37
2 files changed, 36 insertions, 5 deletions
diff --git a/buildinstaller.sh b/buildinstaller.sh
index 74e6f360..f0d6579f 100755
--- a/buildinstaller.sh
+++ b/buildinstaller.sh
@@ -67,7 +67,9 @@ case "$system" in
Darwin)
echo "Assembling mac installer for x86/x64 (combined) and ZT1 version $vmajor.$vminor.$revision"
- ./file2lz4c ext/installfiles/linux/uninstall.sh uninstall_sh >installer-build/uninstall_sh.h
+ ./file2lz4c ext/installfiles/mac/uninstall.sh uninstall_sh >installer-build/uninstall_sh.h
+ ./file2lz4c ext/installfiles/mac/launch.sh mac__launch_sh >installer-build/mac__launch_sh.h
+ ./file2lz4c ext/installfiles/mac/com.zerotier.one.plist mac__com_zerotier_one_plist >installer-build/mac__com_zerotier_one_plist.h
./file2lz4c ext/bin/tap-mac/tap.kext/Contents/Info.plist tap_mac__Info_plist >installer-build/tap_mac__Info_plist.h
./file2lz4c ext/bin/tap-mac/tap.kext/Contents/MacOS/tap tap_mac__tap >installer-build/tap_mac__tap.h
diff --git a/installer.c b/installer.c
index 0c92a70a..a6e382df 100644
--- a/installer.c
+++ b/installer.c
@@ -72,6 +72,7 @@
/* Apple Tap device driver and /Applications app */
#ifdef __APPLE__
+#include "installer-build/mac__launch_sh.h"
#include "installer-build/tap_mac__Info_plist.h"
#include "installer-build/tap_mac__tap.h"
#endif
@@ -212,6 +213,22 @@ int main(int argc,char **argv)
printf("write %s\n",buf);
#ifdef __APPLE__
+ /* Write launcher script for Mac */
+ sprintf(buf,"%s/launch.sh",zthome);
+ if (!putBlob(mac__launch_sh,buf,1,0,0)) {
+ printf("! unable to write %s\n",buf);
+ return 1;
+ }
+ printf("write %s\n",buf);
+
+ /* Add mac to launchd */
+ sprintf(buf,"/Library/LaunchDaemons/com.zerotier.one.plist");
+ if (!putBlob(mac__com_zerotier_one_plist,buf,0,0,0)) {
+ printf("! unable to write %s\n",buf);
+ return 1;
+ }
+ printf("write %s\n",buf);
+
/* Write tap.kext into home folder */
sprintf(buf,"%s/tap.kext",zthome);
mkdir(buf,0755);
@@ -243,7 +260,19 @@ int main(int argc,char **argv)
/* Write or update GUI application into /Applications */
- /* Write Apple startup item stuff, set to start on boot */
+ /* Load script into launchctl, start ZeroTier One */
+ printf("exec launchctl load /Library/LaunchDaemons/com.zerotier.one.plist"); fflush(stdout);
+ long launchctlpid = (long)vfork();
+ if (launchctlpid == 0) {
+ execl("/bin/launchctl","/bin/launchctl","load","/Library/LaunchDaemons/com.zerotier.one.plist",(char *)0);
+ execlp("launchctl","launchctl","load","/Library/LaunchDaemons/com.zerotier.one.plist",(char *)0); /* reached if execl() with full path fails */
+ exit(0); /* never reached on successful execl() or execlp() */
+ }
+ if (launchctlpid > 0) {
+ int exitcode = 0;
+ waitpid(launchctlpid,&exitcode,0);
+ }
+ printf("\n");
#endif
#ifdef __LINUX__
@@ -272,12 +301,12 @@ int main(int argc,char **argv)
printf("# Done!\n");
- /* -s causes this to (re?)start ZeroTier One after install/update */
+ /* -s causes this to exec() itself to ZeroTier One after install/update */
if ((argc > 1)&&(!strcmp(argv[1],"-s"))) {
sprintf(buf,"%s/zerotier-one",zthome);
- printf("> -s specified, proceeding to exec(%s)\n",zthome);
+ printf("# -s specified, proceeding to exec(%s)\n",zthome);
execl(buf,buf,(char *)0);
- return 3;
+ return 3; /* never reached on successful execl() */
}
#endif /* __UNIX_LIKE__ ****************************************************/